diff --git a/dist/muze.js b/dist/muze.js index 1e9810cc..620b574a 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.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 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;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;!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=[],facetNames=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet);facetNames.push(name);var facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([facetNames].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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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 +{"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","facetNames","sortInfo","sortConfig","facetSortConfig","getSchemaDef","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","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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CA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,+BAES0W,cAAKK,aCZTA,YAAS,IAAIz1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/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,OAAIh2C,kBAAkB7N,eAAe6jD,KAC1BA,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,UAWnE,SAAzB46B,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,OA3LhD,QA4LYnE,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,OAjOL,SA8MExtF,EAAI,EAAGs2F,KAAOnlF,OAAOnW,OAAQgF,EAAIs2F,KAAMt2F,IAAKq2F,OAA5Cr2F,IA0BrBi2F,CAtDApB,cAAkB,QALlBA,cAAgBn9B,6BACZv3D,UACApC,KAAM83F,WAG+B,GAEpChB,gBADD1jF,OAAQ0jF,gBAqD0B,EAAGC,aAG7C,OACIrH,QAASqH,YACTnF,8BAIK6G,uBAAU7D,0BAAA9I,eDpQU,mBCqQR,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,g3DCzPvB,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,UACAi9I,cACAC,YACAC,WAAapuI,OAAO7J,KAgB1B,OAdAuvI,OAAO91I,QAAQ,SAACy2I,OACZ,IAAM9gJ,KAAI,GAAAiK,OAAM62I,OAChB6H,WAAW1/I,KAAKjJ,MAEhB,IAAM8oJ,gBAAkBD,WAAW7oJ,MAE/B8oJ,gBACAF,SAAS3/I,MAAMjJ,KAAM8oJ,kBAErBF,SAAS3/I,MAAMjJ,KAAM,OAEzB0L,OAAOzC,KAAK63I,MAAMiI,kBAGf,IAAInvF,qBAAW+uF,YAAf1+I,OAAAs7I,8BAA8Bx8I,OAAO2C,QAAQwO,SAAUtJ,KAAMg4I,WAAYz9I,q9CC1dpF,IAAM69I,cAAgB,SAAhBA,cAAgBC,UAAQ,OAAIA,SAASr5I,OAAO,SAACwxE,IAAKrhF,GAEpD,OADAqhF,OAAGn3E,OAAAi/I,+BAAO9nE,KAAP8nE,+BAAenpJ,EAAEuxF,qBAiElB63D,gBAAkB,SAAlBA,gBAAmBxhI,QAASghI,WAAYS,QAASrgJ,KAAM1C,OACzD,IAAMgjJ,UACNV,WAAWt+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,WAAajD,cAAc2C,SAC3BO,WAAalD,cAAc8C,SAEjCd,aAAa/hJ,QAAbgB,OAAAi/I,+BAAsB+C,YAAtB/C,+BAAqCgD,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,cAAgBpD,cAAciB,WAC9BoC,cAAgBrD,cAAckB,WAGpC,OAASkC,4BAAeC,4BAAeC,aAFxBriJ,OAAAi/I,+BAAOkD,eAAPlD,+BAAyBmD,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,OAASF,gBAAgB2D,aAAcV,cAAeM,cAAeE,QAL9D,GAMPnC,OAAStB,gBAAgB2D,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/ClF,WAAa1oJ,OAAO4I,KAAKolJ,cAAcxkJ,IAAI,SAAA6C,OAAK,OAAKA,MAAO2hJ,aAAa3hJ,UAiB/E,OAhBIq8I,WAAW7iJ,SACXg0I,UAAYA,UAAUppI,KAAKi4I,YAAcvuI,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,eFjI7D,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,qBE0HpBF,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.3\",\"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 (InvalidAwareTypes.getInvalidType(val)) {\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\n nestedDataObj = !('key' in nestedDataObj[0]) ? [{\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 facetNames.push(name);\n\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/examples/js/crosstab.js b/examples/js/crosstab.js index 9cd5447e..8adad27f 100644 --- a/examples/js/crosstab.js +++ b/examples/js/crosstab.js @@ -1,111 +1,48 @@ -/* eslint-disable */ - -(function () { - let env = muze(); - let DataTable = muze.DataModel, - share = muze.Operators.share, - html = muze.Operators.html; - - d3.csv('../../../data/coffee.csv', (data) => { - const jsonData = data, - schema = [{ - name: 'Market', - type: 'dimension' - }, - { - name: 'Product', - type: 'dimension' - }, - { - name: 'Product Type', - type: 'dimension' - }, - - { - name: 'Revenue', - type: 'measure' - }, - { - name: 'Expense', - type: 'measure' - }, - { - name: 'Profit', - type: 'measure', - }, - { - name: 'Order Count', - type: 'measure' - }, - ]; - let rootData = new DataTable(jsonData, schema); - - - rootData = rootData.groupBy(['Market', 'Product Type', 'Product'], { - - }); - - env = env.data(rootData).minUnitHeight(40).minUnitWidth(40); - let mountPoint = document.getElementById('chart'); - window.canvas = env.canvas(); - let canvas2 = env.canvas(); - let canvas3 = env.canvas(); - let rows = [[ 'Market', 'Product Type', 'Product']], - columns = [['Revenue', 'Expense', 'Profit', 'Order Count'], []]; - canvas = canvas - .rows(rows) - .columns(columns) - .data(rootData) - // .detail(['Market', 'Product Type', 'Product']) - .minUnitHeight(10) - .width(500) - .height(2000) - .config({ - border:{ - width: 2, - // showRowBorders: false, - // showColBorders:false, - // showValueBorders: { - // top: false, - // bottom: true, - // left: true, - // right: false - // } - }, - axes:{ - x:{ - showAxisName: true, - tickFormat : (d)=>{ - if(d<1000) return d; - if(d>1000 && d<1000000) return `${d/1000}K` - if(d>1000000) return `${d/1000}M` - return d - } - - - }, y:{ - // showAxisName: true, - // name: 'Acceleration per year', - axisNamePadding: 12 - } - } - }) - - canvas.legend({ - align:'horizontal', - title: [''], - item:{ - text:{ - position:'right' - } - }, - steps: 6 - }) - - .title('The Muze Project', { position: "top", align: "left", }) - .subtitle('Composable visualisations with a data first approach', { position: "top", align: "left" }) - .mount(document.getElementsByTagName('body')[0]); - - }) - -})() +d3.csv('/data/coffee.csv', function (data) { + // load data and schema from url + var schema = [{ + "name": "Market", + "type": "dimension" + }, { + "name": "Product", + "type": "dimension" + }, { + "name": "Product Type", + "type": "dimension" + }, { + "name": "Revenue", + "type": "measure" + }, { + "name": "Expense", + "type": "measure" + }, { + "name": "Profit", + "type": "measure" + }, { + "name": "Order Count", + "type": "measure" + }]; + var env = window.muze(); + var DataModel = window.muze.DataModel; + var rootData = new DataModel(data, schema); + // console.log('-----------------> 1 ', rootData.getData()); + /* data and schema is global */ + var canvas = env.canvas(); + canvas.rows(['Market', 'Product Type']).columns([['Revenue', 'Expense'], ['Revenue', 'Expense']]).data(rootData).width(650).height(800).config({ + showHeaders: true, /* show the headers of fields used in faceting */ + facetConfig: { rows: { verticalAlign: 'middle' } }, /* dimensional values are placed in middle */ + axes: { + y: { showAxisName: false }, /* dont show axis name as we are showing headers, its redundant information */ + x: { + tickFormat: function tickFormat(d) { + if (d < 1000) return d; + if (d > 1000 && d < 1000000) return d / 1000 + "K"; + if (d > 1000000) return d / 1000 + "M"; + return d; + } + } + } + }) + .title('Visual Crosstab') + .mount('#chart') +}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e9dbd02c..281ea2eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2279,9 +2279,9 @@ } }, "@octokit/rest": { - "version": "16.28.9", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.28.9.tgz", - "integrity": "sha512-IKGnX+Tvzt7XHhs8f4ajqxyJvYAMNX5nWfoJm4CQj8LZToMiaJgutf5KxxpxoC3y5w7JTJpW5rnWnF4TsIvCLA==", + "version": "16.29.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.29.0.tgz", + "integrity": "sha512-t01+Hz6sUJx2/HzY4KSgmST5n7KcTYr8i6+UwqS6TkgyjyA6YmeTxVhZrQUobEXaDdQFxs1dRhh1hgmOo6OF9Q==", "dev": true, "requires": { "@octokit/request": "^5.0.0", @@ -3801,9 +3801,9 @@ } }, "caniuse-db": { - "version": "1.0.30000994", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000994.tgz", - "integrity": "sha512-7KjfAAhO0qJOs92z8lMWkcRA2ig7Ewv5SQSAy+dik8MFQCDSua+j4RbPFnGrXuOSFe/3RhmGr+68DxKZrbJQGg==", + "version": "1.0.30000995", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000995.tgz", + "integrity": "sha512-25ew/vPIVU0g/OjeZay2IfcljWAmNVy1TSmeoozFrJzEOqnka0ZSusJFS+4iGZKVIJ4RHOZB4NyilpwNcsh8tA==", "dev": true }, "caniuse-lite": { @@ -6150,9 +6150,9 @@ "dev": true }, "electron-to-chromium": { - "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==", + "version": "1.3.262", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.262.tgz", + "integrity": "sha512-YFr53qZWr2pWkiTUorWEhAweujdf0ALiUp8VkNa0WGtbMVR+kZ8jNy3VTCemLsA4sT6+srCqehNn8TEAD0Ngrw==", "dev": true }, "elliptic": { @@ -6828,9 +6828,9 @@ } }, "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", "dev": true }, "events": { @@ -7532,12 +7532,12 @@ } }, "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs-readdir-recursive": { @@ -8917,12 +8917,12 @@ "dev": true }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -11068,9 +11068,9 @@ "dev": true }, "merge2": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", - "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", "dev": true }, "methods": { @@ -11217,9 +11217,9 @@ } }, "minipass": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.5.1.tgz", - "integrity": "sha512-dmpSnLJtNQioZFI5HfQ55Ad0DzzsMAb+HfokwRTNXwEQjepbTkl5mtIlSVxGIkOkxlpX7wIn5ET/oAd9fZ/Y/Q==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.6.5.tgz", + "integrity": "sha512-ewSKOPFH9blOLXx0YSE+mbrNMBFPS+11a2b03QZ+P4LVrUHW/GAlqeYC7DBknDyMWkHzrzTpDhUvy7MUxqyrPA==", "dev": true, "requires": { "safe-buffer": "^5.1.2", @@ -11235,9 +11235,9 @@ } }, "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.2.tgz", + "integrity": "sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ==", "dev": true, "requires": { "minipass": "^2.2.1" @@ -11971,9 +11971,9 @@ } }, "node-releases": { - "version": "1.1.30", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.30.tgz", - "integrity": "sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw==", + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.32.tgz", + "integrity": "sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A==", "dev": true, "requires": { "semver": "^5.3.0" @@ -12289,9 +12289,9 @@ "dev": true }, "npm-lifecycle": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.3.tgz", - "integrity": "sha512-M0QmmqbEHBXxDrmc6X3+eKjW9+F7Edg1ENau92WkYw1sox6wojHzEZJIRm1ItljEiaigZlKL8mXni/4ylAy1Dg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz", + "integrity": "sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A==", "dev": true, "requires": { "byline": "^5.0.0", @@ -12839,6 +12839,14 @@ "dev": true, "requires": { "eventemitter3": "^3.1.0" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + } } }, "p-reduce": { @@ -12897,9 +12905,9 @@ } }, "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -15781,20 +15789,12 @@ } }, "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", "dev": true, "requires": { - "balanced-match": "^0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "balanced-match": "^1.0.0" } }, "regenerate": { @@ -15862,9 +15862,9 @@ } }, "regexpu-core": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", - "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -16967,9 +16967,9 @@ } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { "debug": "^3.2.5", @@ -17597,14 +17597,14 @@ "dev": true }, "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.11.tgz", + "integrity": "sha512-iI4zh3ktLJKaDNZKZc+fUONiQrSn9HkCFzamtb7k8FFmVilHVob7QsLX/VySAW8lAviMzMbFw4QtFb4errwgYA==", "dev": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", + "minipass": "^2.6.4", "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", @@ -18622,9 +18622,9 @@ "dev": true }, "webpack": { - "version": "4.39.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.3.tgz", - "integrity": "sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.40.2.tgz", + "integrity": "sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", @@ -18722,9 +18722,9 @@ } }, "webpack-cli": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.8.tgz", - "integrity": "sha512-RANYSXwikSWINjHMd/mtesblNSpjpDLoYTBtP99n1RhXqVI/wxN40Auqy42I7y4xrbmRBoA5Zy5E0JSBD5XRhw==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.9.tgz", + "integrity": "sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A==", "dev": true, "requires": { "chalk": "2.4.2", @@ -18882,14 +18882,14 @@ } }, "webpack-dev-server": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", - "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz", + "integrity": "sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.6", + "chokidar": "^2.1.8", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", @@ -18900,23 +18900,23 @@ "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", - "is-absolute-url": "^3.0.0", + "is-absolute-url": "^3.0.2", "killable": "^1.0.1", - "loglevel": "^1.6.3", + "loglevel": "^1.6.4", "opn": "^5.5.0", "p-retry": "^3.0.1", - "portfinder": "^1.0.21", + "portfinder": "^1.0.24", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.4", + "selfsigned": "^1.10.6", "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", - "sockjs-client": "1.3.0", + "sockjs-client": "1.4.0", "spdy": "^4.0.1", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.0", + "webpack-dev-middleware": "^3.7.1", "webpack-log": "^2.0.0", "ws": "^6.2.1", "yargs": "12.0.5" @@ -18950,9 +18950,9 @@ } }, "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.2.tgz", + "integrity": "sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA==", "dev": true }, "mime": { diff --git a/packages/muze-firebolt/src/side-effects/tooltip/strategies.js b/packages/muze-firebolt/src/side-effects/tooltip/strategies.js index 653a5c90..463ee433 100644 --- a/packages/muze-firebolt/src/side-effects/tooltip/strategies.js +++ b/packages/muze-firebolt/src/side-effects/tooltip/strategies.js @@ -194,7 +194,8 @@ export const buildTooltipData = (dataModel, config = {}, context) => { data, keys: indices }); - nestedDataObj = !getObjProp(nestedDataObj[0], 'key') ? [{ + + nestedDataObj = !('key' in nestedDataObj[0]) ? [{ values: nestedDataObj }] : nestedDataObj; diff --git a/packages/muze-utils/src/common-utils.js b/packages/muze-utils/src/common-utils.js index 11b1adc9..bb363595 100644 --- a/packages/muze-utils/src/common-utils.js +++ b/packages/muze-utils/src/common-utils.js @@ -1251,7 +1251,7 @@ const nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimat }; const getValueParser = config => (val) => { - if (val instanceof InvalidAwareTypes) { + if (InvalidAwareTypes.getInvalidType(val)) { return val in config ? config[val] : `${val}`; } return val; diff --git a/packages/muze/npm/dist/muze.js b/packages/muze/npm/dist/muze.js index 1e9810cc..620b574a 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.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 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;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;!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=[],facetNames=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet);facetNames.push(name);var facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([facetNames].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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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 +{"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","facetNames","sortInfo","sortConfig","facetSortConfig","getSchemaDef","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","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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CA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,+BAES0W,cAAKK,aCZTA,YAAS,IAAIz1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/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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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.3\",\"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 (InvalidAwareTypes.getInvalidType(val)) {\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\n nestedDataObj = !('key' in nestedDataObj[0]) ? [{\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 facetNames.push(name);\n\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/package.json b/packages/muze/npm/package.json index 830a4e85..447db11a 100644 --- a/packages/muze/npm/package.json +++ b/packages/muze/npm/package.json @@ -1,6 +1,6 @@ { "name": "muze", - "version": "1.2.2", + "version": "1.2.3", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://muzejs.org", "license": "MIT", diff --git a/packages/muze/package.json b/packages/muze/package.json index bcbd07f1..e83ffeaa 100644 --- a/packages/muze/package.json +++ b/packages/muze/package.json @@ -1,7 +1,7 @@ { "name": "muze", "private": true, - "version": "1.2.2", + "version": "1.2.3", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://muzejs.org", "author": "Muzejs.org (https://muzejs.org/)", diff --git a/packages/visual-group/src/group-helper/group-utils.js b/packages/visual-group/src/group-helper/group-utils.js index e8b7960c..004fe858 100644 --- a/packages/visual-group/src/group-helper/group-utils.js +++ b/packages/visual-group/src/group-helper/group-utils.js @@ -470,6 +470,8 @@ export const sortFacetFields = (facets, keys, config) => { facets.forEach((facet) => { const name = `${facet}`; + facetNames.push(name); + const facetSortConfig = sortConfig[name]; if (facetSortConfig) {