vizzu
Version:
Vizzu is a free, open-source Javascript/C++ library utilizing a generic dataviz engine that generates many types of charts and seamlessly animates between them. It can be used to create static charts but more importantly it is designed for building animat
2 lines (1 loc) • 45.2 kB
JavaScript
class e{init(e,t,r){this.enabled=!0,this.polygonFirstPoint=!1,this.offscreenCanvas=document.createElement("CANVAS"),this.offscreenContext=this.offscreenCanvas.getContext("2d"),this.update=e,this.mainCanvas=t,this.mainCanvas.font="Roboto Condensed",this.mainCanvas.textAlign="left",this.mainCanvas.textBaseline="top",this.context=t.getContext("2d"),this.log=r,this.updateCanvasSize(),this.prevUpdateHash=""}canvas(){return this.mainCanvas}dc(){return this.offscreenContext}clientRect(){return this.mainCanvas.getBoundingClientRect()}frameBegin(){this.currentLineWidth=1,this.offscreenContext.clearRect(-1,-1,this.mainCanvas.width+1,this.mainCanvas.height+1)}frameEnd(){this.context.clearRect(-1,-1,this.mainCanvas.width+1,this.mainCanvas.height+1),this.context.drawImage(this.offscreenCanvas,0,0)}lineWidthNotification(e){this.currentLineWidth=e}noneZeroLineWidth(){return 0!==this.currentLineWidth}startPolygonNotification(){var e=this.polygonFirstPoint;return this.polygonFirstPoint=!0,!e}endPolygonNotification(){this.polygonFirstPoint=!1}updateCanvasSize(){this.scaleFactor=window.devicePixelRatio,this.cssWidth=+getComputedStyle(this.mainCanvas).width.slice(0,-2),this.cssHeight=+getComputedStyle(this.mainCanvas).height.slice(0,-2);let e=`${this.scaleFactor}:${this.cssWidth}:${this.cssHeight}`;e!==this.prevUpdateHash&&(this.mainCanvas.width=this.cssWidth*this.scaleFactor,this.mainCanvas.height=this.cssHeight*this.scaleFactor,this.offscreenCanvas.width=this.cssWidth*this.scaleFactor,this.offscreenCanvas.height=this.cssHeight*this.scaleFactor,this.offscreenContext.translate(.5,.5),this.offscreenContext.scale(this.scaleFactor,this.scaleFactor)),this.prevUpdateHash=e}updateFrame(e){var t=performance.now();if(this.updateCanvasSize(),this.mainCanvas.width>0&&this.mainCanvas.height>0){let t=this.enabled?e?1:0:2;this.update(this.cssWidth,this.cssHeight,t)}var r=performance.now()-t;this.log&&r>1&&console.log("Render.updateFrame: "+r.toFixed(2)+"ms")}}class t{constructor(e){this.vizzu=e,this.module=e.module,this.eventHandlers=new Map}add(e,t){if(e!==""+e)throw new Error("first parameter should be string");let r=this.vizzu._toCString(e);try{let e=this.vizzu._call(this.module._addEventListener)(r);this.eventHandlers.set(e,t)}finally{this.module._free(r)}}remove(e,t){let r=this.vizzu._toCString(e);if(e!==""+e)throw new Error("first parameter should be string");try{if(t){let e=null;if(this.eventHandlers.forEach(((r,n)=>{r===t&&(e=n)})),null===e)throw new Error("unknown event handler");this.vizzu._call(this.module._removeEventListener)(r,e)}else this.vizzu._call(this.module._removeEventListener)(r,0)}finally{this.eventHandlers.delete(t),this.module._free(r)}}invoke(e,t){try{if(this.eventHandlers.has(e)){let r=JSON.parse(this.vizzu._fromCString(t));r.preventDefault=()=>{this.vizzu._call(this.module._event_preventDefault)()},r.event.endsWith("-draw")&&(r.renderingContext=this.vizzu.render.dc()),this.eventHandlers.get(e)(r)}}catch(e){console.log("exception in event handler: "+e)}}}const r=(e,t)=>{if(!e)throw new Error("Assert failed: "+t)},n=(e,t,i)=>{r(Array.isArray(t),"array is not a list");try{if(t.length!==e.dimensions[i].values.length)throw new Error("Assert failed")}catch(e){r(!1,"dimensions are not the same")}t.forEach((t=>{Array.isArray(t)&&n(e,t,i-1)}))};class i{static isPivot(e){return void 0!==e?.dimensions||void 0!==e?.measures}static convert(e){r("object"==typeof e&&null!==e&&!Array.isArray(e),"data is not an object"),r("dimensions"in e,"data.dimensions is requreid"),r("measures"in e,"data.measures is requreid");let t=(({dimensions:e,measures:t,...r})=>r)(e);t.series=[];let i=1;r(Array.isArray(e.dimensions),"data.dimensions is not a list");for(let t=0;t<e.dimensions.length;t++){let n=e.dimensions[t];r("object"==typeof n&&null!==n&&!Array.isArray(n),"data.dimensions.item is not an object"),r("name"in n,"data.dimensions.item.name is requreid"),r(void 0===n.type||"dimension"===n.type,"data.dimensions.item.type is invalid"),r("values"in n,"data.dimensions.item.values is requreid"),r(Array.isArray(n.values),"data.dimensions.item.values is not a list"),r(0!==n.values.length,"data.dimensions.item.values length is zero"),i*=n.values.length}let a=1;for(let r=0;r<e.dimensions.length;r++){let n=e.dimensions[r],s=[],o=[];n.values.forEach((e=>{for(let t=1;t<=a;t++)o.push(e)})),a*=n.values.length;for(let e=1;e<=i/a;e++)s=s.concat(o);let l={name:n.name,type:n.type||"dimension",values:s};t.series.push(l)}r("object"==typeof e.measures&&null!==e.measures,"data.measures is not a list or an object"),Array.isArray(e.measures)||(e.measures=[e.measures]);for(let a=0;a<e.measures.length;a++){let s=e.measures[a];r("object"==typeof s&&null!==s&&!Array.isArray(s),"data.measures.item is not an object"),r("name"in s,"data.measures.item.name is requreid"),r("values"in s,"data.measures.item.values is requreid"),r(Array.isArray(s.values),"data.measures.item.values is not a list"),n(e,s.values,e.dimensions.length-1);let o={name:s.name,type:s.type,values:s.values.flat(1/0)};void 0===o.type&&delete o.type,r(o.values.length===i,"dimensions are not the same"),t.series.push(o)}return t}}class a{constructor(e,t){return this.chart=e,this.record=t,new Proxy(this,{get:(e,t)=>e._getValue(t)})}_getValue(e){let t,r,n=this.chart._toCString(e);try{t=this.chart._call(this.chart.module._record_getValue)(this.record,n,!0),t?r=this.chart._fromCString(t):(t=this.chart._call(this.chart.module._record_getValue)(this.record,n,!1),r=this.chart.module.getValue(t,"double"))}finally{this.chart.module._free(n)}return r}}class s{constructor(e){this.chart=e}set(e){if(e){if(i.isPivot(e)){if(this.is1NF(e))throw new Error("inconsistent data form: series/records and dimensions/measures are both set.");e=i.convert(e)}if(e.series){if(!Array.isArray(e.series))throw new Error("data series field is not an array");for(const t of e.series)this.setSeries(t)}if(e.records){if(!Array.isArray(e.records))throw new Error("data records field is not an array");for(const t of e.records)this.addRecord(t)}(e.filter||null===e.filter)&&this.setFilter(e.filter)}}addRecord(e){if(!Array.isArray(e))throw new Error("data record is not an array");let t=new Uint32Array(e.length);for(let r=0;r<e.length;r++){let n=this.chart._toCString(String(e[r]).toString());t[r]=n}let r=4*e.length,n=this.chart.module._malloc(r);new Uint8Array(this.chart.module.HEAPU8.buffer,n,r).set(new Uint8Array(t.buffer));try{this.chart._call(this.chart.module._data_addRecord)(n,e.length)}finally{for(let e of t)this.chart.module._free(e);this.chart.module._free(n)}}setSeries(e){if(!e.name)throw new Error("missing series name");if(e.values||(e.values=[]),e.type||(e.type=this.detectType(e.values)),"dimension"===e.type)this.addDimension(e.name,e.values);else{if("measure"!==e.type)throw new Error("invalid series type: "+e.type);this.addMeasure(e.name,e.values)}}detectType(e){if(Array.isArray(e)&&e.length){if("number"==typeof e[0])return"measure";if(e[0]===""+e[0])return"dimension"}return null}addDimension(e,t){if("string"!=typeof e&&!(e instanceof String))throw new Error("first parameter should be string");if(!(t instanceof Array))throw new Error("second parameter should be an array");let r=new Uint32Array(t.length);for(let e=0;e<t.length;e++){if("string"!=typeof t[e]&&!(t[e]instanceof String))throw new Error("array element should be string");let n=this.chart._toCString(t[e]);r[e]=n}let n=4*t.length,i=this.chart.module._malloc(n);new Uint8Array(this.chart.module.HEAPU8.buffer,i,n).set(new Uint8Array(r.buffer));let a=this.chart._toCString(e);try{this.chart._call(this.chart.module._data_addDimension)(a,i,t.length)}finally{this.chart.module._free(a);for(let e of r)this.chart.module._free(e);this.chart.module._free(i)}}addMeasure(e,t){if("string"!=typeof e&&!(e instanceof String))throw new Error("first parameter should be string");if(!(t instanceof Array))throw new Error("second parameter should be an array");let r=new Float64Array(t),n=8*t.length,i=this.chart.module._malloc(n);new Uint8Array(this.chart.module.HEAPU8.buffer,i,n).set(new Uint8Array(r.buffer));let a=this.chart._toCString(e);try{this.chart._call(this.chart.module._data_addMeasure)(a,i,t.length)}finally{this.chart.module._free(a),this.chart.module._free(i)}}setFilter(e){if("function"==typeof e){let t=t=>e(new a(this.chart,t)),r=this.chart.module.addFunction(t,"ii");this.chart._call(this.chart.module._chart_setFilter)(r)}else{if(null!==e)throw new Error("data filter is not a function or null");this.chart._call(this.chart.module._chart_setFilter)(0)}}is1NF(e){return e.series||e.records}}class o{}class l{constructor(e){this.chart=e}get[Symbol.toStringTag](){return"AnimControl"}store(){return this.chart._objectRegistry.get(this.chart._call(this.chart.module._chart_anim_store),o)}seek(e){return this._animControl("seek",e),this}pause(){return this._animControl("pause"),this}play(){return this._animControl("play"),this}stop(){return this._animControl("stop"),this}cancel(){return this._animControl("cancel"),this}reverse(){return this._animControl("reverse"),this}_animControl(e,t=""){let r=this.chart._toCString(e),n=this.chart._toCString(t);try{this.chart._call(this.chart.module._anim_control)(r,n)}finally{this.chart.module._free(n),this.chart.module._free(r)}}}class u{constructor(e){this.set=!1,this.chart=e,this.id=0,this.animating=!1,this.lastMarkerId=null,this.lastMove=new Date,this.mouseMoveHandler=e=>{this.mousemove(e)},this.mouseOnHandler=e=>{this.mouseon(e)},this.enabled=!1}enable(e){e!==this.set&&(e?(this.chart.on("mousemove",this.mouseMoveHandler),this.chart.on("mouseon",this.mouseOnHandler)):(this.chart.off("mousemove",this.mouseMoveHandler),this.chart.off("mouseon",this.mouseOnHandler),this.id++,setTimeout((()=>{this.out(this.id)}),200)),this.set=e)}mousemove(){this.lastMove=new Date}mouseon(e){this.id++;let t=this.id;e.data.marker?setTimeout((()=>{this.in(t,e.data.marker.id)}),0):setTimeout((()=>{this.out(t)}),200)}in(e,t){this.id===e&&(this.animating?setTimeout((()=>{this.in(e,t)}),100):(this.lastMarkerId=t,this.animating=!0,this.chart.animate({config:{tooltip:t}},this.lastMarkerId?"100ms":"250ms").then((()=>{this.animating=!1}))))}out(e){if(this.id===e){let t=new Date-this.lastMove;!this.animating&&t>200?(this.lastMarkerId=null,this.animating=!0,this.chart.animate({config:{tooltip:null}},"250ms").then((()=>{this.animating=!1}))):setTimeout((()=>{this.out(e)}),200-t)}}}class c{constructor(e){this._presetConfigs={column:{channels:{x:"x",y:"y",label:"y"}},groupedColumn:{channels:{x:["groupedBy","x"],y:"y",label:"y",color:"x"}},stackedColumn:{channels:{x:"x",y:["y","stackedBy"],label:"y",color:"stackedBy"}},splittedColumn:{channels:{x:"x",y:["y","splittedBy"],color:"splittedBy",label:"y"},split:!0},percentageColumn:{channels:{x:"x",y:["y","stackedBy"],color:"stackedBy",label:"y"},align:"stretch"},waterfall:{channels:{x:"x",y:["y","x"],label:"y",color:"y"},align:"stretch"},mekko:{channels:{x:["x","groupedBy"],y:["y","stackedBy"],color:"stackedBy",label:"groupedBy"}},marimekko:{channels:{x:["x","groupedBy"],y:["y","stackedBy"],color:"stackedBy",label:"groupedBy"},align:"stretch",orientation:"horizontal"},bar:{channels:{x:"x",y:"y",label:"x"}},groupedBar:{channels:{x:"x",y:["groupedBy","y"],label:"x",color:"y"}},stackedBar:{channels:{x:["x","stackedBy"],y:"y",label:"x",color:"stackedBy"}},splittedBar:{channels:{x:["x","splittedBy"],y:"y",color:"splittedBy",label:"x"},split:!0},percentageBar:{channels:{x:["x","stackedBy"],y:"y",color:"stackedBy",label:"x"},align:"stretch"},lollipop:{channels:{x:"x",y:"y",label:"y"},geometry:"circle"},scatter:{channels:{x:"x",y:"y",noop:"dividedBy"},geometry:"circle"},bubbleplot:{channels:{x:"x",y:"y",color:"color",size:"size",label:"dividedBy",noop:"dividedBy"},geometry:"circle"},area:{channels:{x:"x",y:"y"},geometry:"area"},stackedArea:{channels:{x:"x",y:["y","stackedBy"],color:"stackedBy"},geometry:"area"},percentageArea:{channels:{x:"x",y:["y","stackedBy"],color:"stackedBy"},align:"stretch",geometry:"area"},splittedArea:{channels:{x:"x",y:["y","splittedBy"],color:"splittedBy"},split:!0,geometry:"area"},stream:{channels:{x:"x",y:["y","stackedBy"],color:"stackedBy"},geometry:"area",align:"center"},verticalStream:{channels:{x:["x","stackedBy"],y:"y",color:"stackedBy"},geometry:"area",align:"center"},violin:{channels:{x:"x",y:["y","splittedBy"],color:"splittedBy"},geometry:"area",align:"center",split:!0},verticalViolin:{channels:{x:["x","splittedBy"],y:"y",color:"splittedBy"},geometry:"area",align:"center",split:!0},line:{channels:{x:"x",y:"y",color:"dividedBy"},geometry:"line"},verticalLine:{channels:{x:"x",y:"y",color:"dividedBy"},geometry:"line"},pie:{channels:{x:["angle","by"],color:"by",label:"angle"},coordSystem:"polar"},polarColumn:{channels:{x:"angle",y:"radius",label:"radius"},coordSystem:"polar"},polarStackedColumn:{channels:{x:"angle",y:["radius","stackedBy"],color:"stackedBy"},coordSystem:"polar"},variableRadiusPie:{channels:{x:["angle","by"],y:"radius",color:"by",label:"radius"},coordSystem:"polar"},radialBar:{channels:{x:"angle",y:{set:"radius",range:{min:"-50%"}},label:"angle"},coordSystem:"polar"},radialStackedBar:{channels:{x:["angle","stackedBy"],y:{set:"radius",range:{min:"-50%"}},color:"stackedBy",label:"angle"},coordSystem:"polar"},donut:{channels:{x:["angle","stackedBy"],y:{range:{min:"-200%",max:"100%"}},color:"stackedBy"},coordSystem:"polar"},nestedDonut:{channels:{x:["angle","stackedBy"],y:{set:"radius",range:{min:"-50%"}},color:"stackedBy",label:"angle"},coordSystem:"polar",align:"stretch"},polarScatter:{channels:{x:"angle",y:"radius",noop:"dividedBy"},coordSystem:"polar",geometry:"circle"},polarLine:{channels:{x:"angle",y:"radius",color:"dividedBy"},coordSystem:"polar",geometry:"line"},treemap:{channels:{size:["size","color"],color:"color",label:"color"}},stackedTreemap:{channels:{size:["size","dividedBy"],color:"color",label:"dividedBy",lightness:"size"}},heatmap:{channels:{x:"x",y:"y",lightness:"lightness"}},bubble:{channels:{size:"size",color:"color",label:"color"},geometry:"circle"},stackedBubble:{channels:{size:["size","stackedBy"],color:"color"},geometry:"circle"}};for(let e in this._presetConfigs)this._initPresetConfigChannels(this._presetConfigs[e].channels),this[e]=t=>this._buildPresetConfig(e,t)}_initPresetConfigChannels(e){for(let t in e)("object"!=typeof e[t]||Array.isArray(e[t]))&&(e[t]={set:e[t]})}_nullConfig(){return{align:"none",coordSystem:"cartesian",orientation:"horizontal",rotate:0,split:!1,geometry:"rectangle",channels:{x:null,y:null,color:null,lightness:null,size:null,noop:null,label:null}}}_createPresetConfig(e){let t=this._presetConfigs[e],r=this._nullConfig(),n=Object.assign(r.channels,t.channels),i=Object.assign(this._nullConfig(),t);return i.channels=n,i}_getChannelCopy(e){return null==e?null:(Array.isArray(e)&&e.map((e=>e)),[e])}_fillChannels(e,t){if(!t)return;let r=e.channels;for(let e in r)if(null!==r[e])if("string"==typeof r[e].set)r[e].set=this._getChannelCopy(t[r[e].set]);else if(Array.isArray(r[e].set)){let n=[];for(let i=0;i<r[e].set.length;i++){let a=this._getChannelCopy(t[r[e].set[i]]);null!==a&&n.push(a)}r[e].set=n.length>0?n.flat():null}}_setupUserParams(e,t){["legend","title","reverse","sort"].forEach((r=>{void 0!==t[r]&&(e[r]=t[r])}))}_buildPresetConfig(e,t){let r=this._createPresetConfig(e);return this._fillChannels(r,t),this._setupUserParams(r,t),r}}var h,d=(h=import.meta.url,function(e){var t,r,n=void 0!==(e=e||{})?e:{};n.ready=new Promise((function(e,n){t=e,r=n}));var i,a={};for(i in n)n.hasOwnProperty(i)&&(a[i]=n[i]);var s,o="";document.currentScript&&(o=document.currentScript.src),h&&(o=h),o=0!==o.indexOf("blob:")?o.substr(0,o.lastIndexOf("/")+1):"";var l=console.log.bind(console),u=console.warn.bind(console);for(i in a)a.hasOwnProperty(i)&&(n[i]=a[i]);a=null;var c,d,f=[];function m(e,t){var r,n=v;if(!c){c=new WeakMap;for(var i=0;i<n.length;i++){var a=n.get(i);a&&c.set(a,i)}}if(c.has(e))return c.get(e);if(f.length)r=f.pop();else{r=n.length;try{n.grow(1)}catch(e){if(!(e instanceof RangeError))throw e;throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}}try{n.set(r,e)}catch(i){if(!(i instanceof TypeError))throw i;var s=function(e,t){if("function"==typeof WebAssembly.Function){for(var r={i:"i32",j:"i64",f:"f32",d:"f64"},n={parameters:[],results:"v"==t[0]?[]:[r[t[0]]]},i=1;i<t.length;++i)n.parameters.push(r[t[i]]);return new WebAssembly.Function(n,e)}var a=[1,0,1,96],s=t.slice(0,1),o=t.slice(1),l={i:127,j:126,f:125,d:124};for(a.push(o.length),i=0;i<o.length;++i)a.push(l[o[i]]);"v"==s?a.push(0):a=a.concat([1,l[s]]),a[1]=a.length-2;var u=new Uint8Array([0,97,115,109,1,0,0,0].concat(a,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0])),c=new WebAssembly.Module(u);return new WebAssembly.Instance(c,{e:{f:e}}).exports.f}(e,t);n.set(r,s)}return c.set(e,r),r}function y(e,t,r,n){switch("*"===(r=r||"i8").charAt(r.length-1)&&(r="i32"),r){case"i1":case"i8":A[e>>0]=t;break;case"i16":k[e>>1]=t;break;case"i32":E[e>>2]=t;break;case"i64":ne=[t>>>0,(re=t,+q(re)>=1?re>0?(0|$(+Z(re/4294967296),4294967295))>>>0:~~+J((re-+(~~re>>>0))/4294967296)>>>0:0)],E[e>>2]=ne[0],E[e+4>>2]=ne[1];break;case"float":B[e>>2]=t;break;case"double":T[e>>3]=t;break;default:X("invalid type for setValue: "+r)}}function _(e,t,r){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return A[e>>0];case"i16":return k[e>>1];case"i32":case"i64":return E[e>>2];case"float":return B[e>>2];case"double":return T[e>>3];default:X("invalid type for getValue: "+t)}return null}"object"!=typeof WebAssembly&&X("no native wasm support detected");var v=new WebAssembly.Table({initial:1260,element:"anyfunc"}),p=!1,g="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function w(e,t,r){for(var n=t+r,i=t;e[i]&&!(i>=n);)++i;if(i-t>16&&e.subarray&&g)return g.decode(e.subarray(t,i));for(var a="";t<i;){var s=e[t++];if(128&s){var o=63&e[t++];if(192!=(224&s)){var l=63&e[t++];if((s=224==(240&s)?(15&s)<<12|o<<6|l:(7&s)<<18|o<<12|l<<6|63&e[t++])<65536)a+=String.fromCharCode(s);else{var u=s-65536;a+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else a+=String.fromCharCode((31&s)<<6|o)}else a+=String.fromCharCode(s)}return a}function b(e,t){return e?w(x,e,t):""}function C(e,t,r){return function(e,t,r,n){if(!(n>0))return 0;for(var i=r,a=r+n-1,s=0;s<e.length;++s){var o=e.charCodeAt(s);if(o>=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++s)),o<=127){if(r>=a)break;t[r++]=o}else if(o<=2047){if(r+1>=a)break;t[r++]=192|o>>6,t[r++]=128|63&o}else if(o<=65535){if(r+2>=a)break;t[r++]=224|o>>12,t[r++]=128|o>>6&63,t[r++]=128|63&o}else{if(r+3>=a)break;t[r++]=240|o>>18,t[r++]=128|o>>12&63,t[r++]=128|o>>6&63,t[r++]=128|63&o}}return t[r]=0,r-i}(e,x,t,r)}var z,A,x,k,S,E,P,B,T,F="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function H(e,t){for(var r=e,n=r>>1,i=n+t/2;!(n>=i)&&S[n];)++n;if((r=n<<1)-e>32&&F)return F.decode(x.subarray(e,r));for(var a=0,s="";;){var o=k[e+2*a>>1];if(0==o||a==t/2)return s;++a,s+=String.fromCharCode(o)}}function W(e,t,r){if(void 0===r&&(r=2147483647),r<2)return 0;for(var n=t,i=(r-=2)<2*e.length?r/2:e.length,a=0;a<i;++a){var s=e.charCodeAt(a);k[t>>1]=s,t+=2}return k[t>>1]=0,t-n}function L(e){return 2*e.length}function O(e,t){for(var r=0,n="";!(r>=t/4);){var i=E[e+4*r>>2];if(0==i)break;if(++r,i>=65536){var a=i-65536;n+=String.fromCharCode(55296|a>>10,56320|1023&a)}else n+=String.fromCharCode(i)}return n}function M(e,t,r){if(void 0===r&&(r=2147483647),r<4)return 0;for(var n=t,i=n+r-4,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a)),E[t>>2]=s,(t+=4)+4>i)break}return E[t>>2]=0,t-n}function U(e){for(var t=0,r=0;r<e.length;++r){var n=e.charCodeAt(r);n>=55296&&n<=57343&&++r,t+=4}return t}function V(e){z=e,n.HEAP8=A=new Int8Array(e),n.HEAP16=k=new Int16Array(e),n.HEAP32=E=new Int32Array(e),n.HEAPU8=x=new Uint8Array(e),n.HEAPU16=S=new Uint16Array(e),n.HEAPU32=P=new Uint32Array(e),n.HEAPF32=B=new Float32Array(e),n.HEAPF64=T=new Float64Array(e)}var j=16777216;function I(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var r=t.func;"number"==typeof r?void 0===t.arg?n.dynCall_v(r):n.dynCall_vi(r,t.arg):r(void 0===t.arg?null:t.arg)}else t(n)}}(d=new WebAssembly.Memory({initial:j/65536,maximum:32768}))&&(z=d.buffer),j=z.byteLength,V(z),E[15696]=5305824;var R=[],D=[],N=[],K=[],q=Math.abs,J=Math.ceil,Z=Math.floor,$=Math.min,Y=0,G=null;function X(e){u(e+=""),p=!0,e="abort("+e+"). Build with -s ASSERTIONS=1 for more info.";var t=new WebAssembly.RuntimeError(e);throw r(t),t}n.preloadedImages={},n.preloadedAudios={};var Q="data:application/octet-stream;base64,";function ee(e){return t=e,r=Q,String.prototype.startsWith?t.startsWith(r):0===t.indexOf(r);var t,r}var te,re,ne,ie="cvizzu.wasm";function ae(){try{if(!s)throw"both async and sync fetching of the wasm failed"}catch(e){X(e)}}function se(){return se.uncaught_exceptions>0}function oe(e){switch(e){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+e)}}ee(ie)||(te=ie,ie=n.locateFile?n.locateFile(te,o):o+te),D.push({func:function(){Fe()}});var le=void 0;function ue(e){for(var t="",r=e;x[r];)t+=le[x[r++]];return t}var ce={},he={},de=48,fe=57;function me(e,t){return e=function(e){if(void 0===e)return"_unknown";var t=(e=e.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return t>=de&&t<=fe?"_"+e:e}(e),new Function("body","return function "+e+'() {\n "use strict"; return body.apply(this, arguments);\n};\n')(t)}function ye(e,t){var r=me(t,(function(e){this.name=t,this.message=e;var r=new Error(e).stack;void 0!==r&&(this.stack=this.toString()+"\n"+r.replace(/^Error(:[^\n]*)?\n/,""))}));return r.prototype=Object.create(e.prototype),r.prototype.constructor=r,r.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},r}var _e=void 0;function ve(e){throw new _e(e)}function pe(e,t,r){if(r=r||{},!("argPackAdvance"in t))throw new TypeError("registerType registeredInstance requires argPackAdvance");var n=t.name;if(e||ve('type "'+n+'" must have a positive integer typeid pointer'),he.hasOwnProperty(e)){if(r.ignoreDuplicateRegistrations)return;ve("Cannot register type '"+n+"' twice")}if(he[e]=t,ce.hasOwnProperty(e)){var i=ce[e];delete ce[e],i.forEach((function(e){e()}))}}var ge,we=[],be=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function Ce(){for(var e=0,t=5;t<be.length;++t)void 0!==be[t]&&++e;return e}function ze(){for(var e=5;e<be.length;++e)if(void 0!==be[e])return be[e];return null}function Ae(e){return this.fromWireType(P[e>>2])}function xe(e){if(null===e)return"null";var t=typeof e;return"object"===t||"array"===t||"function"===t?e.toString():""+e}function ke(e,t){switch(t){case 2:return function(e){return this.fromWireType(B[e>>2])};case 3:return function(e){return this.fromWireType(T[e>>3])};default:throw new TypeError("Unknown float type: "+e)}}function Se(e,t,r){switch(t){case 0:return r?function(e){return A[e]}:function(e){return x[e]};case 1:return r?function(e){return k[e>>1]}:function(e){return S[e>>1]};case 2:return r?function(e){return E[e>>2]}:function(e){return P[e>>2]};default:throw new TypeError("Unknown integer type: "+e)}}ge=function(){return performance.now()};var Ee=!0;function Pe(e){try{return d.grow(e-z.byteLength+65535>>>16),V(d.buffer),1}catch(e){}}var Be={mappings:{},buffers:[null,[],[]],printChar:function(e,t){var r=Be.buffers[e];0===t||10===t?((1===e?l:u)(w(r,0)),r.length=0):r.push(t)},varargs:void 0,get:function(){return Be.varargs+=4,E[Be.varargs-4>>2]},getStr:function(e){return b(e)},get64:function(e,t){return e}};!function(){for(var e=new Array(256),t=0;t<256;++t)e[t]=String.fromCharCode(t);le=e}(),_e=n.BindingError=ye(Error,"BindingError"),n.InternalError=ye(Error,"InternalError"),n.count_emval_handles=Ce,n.get_first_emval=ze;var Te={a:function(e){return We(e)},b:function(e,t,r){throw"uncaught_exception"in se?se.uncaught_exceptions++:se.uncaught_exceptions=1,e},x:function(e,t,r,n,i){var a=oe(r);pe(e,{name:t=ue(t),fromWireType:function(e){return!!e},toWireType:function(e,t){return t?n:i},argPackAdvance:8,readValueFromPointer:function(e){var n;if(1===r)n=A;else if(2===r)n=k;else{if(4!==r)throw new TypeError("Unknown boolean type size: "+t);n=E}return this.fromWireType(n[e>>a])},destructorFunction:null})},v:function(e,t){pe(e,{name:t=ue(t),fromWireType:function(e){var t=be[e].value;return function(e){e>4&&0==--be[e].refcount&&(be[e]=void 0,we.push(e))}(e),t},toWireType:function(e,t){return function(e){switch(e){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var t=we.length?we.pop():be.length;return be[t]={refcount:1,value:e},t}}(t)},argPackAdvance:8,readValueFromPointer:Ae,destructorFunction:null})},h:function(e,t,r){var n=oe(r);pe(e,{name:t=ue(t),fromWireType:function(e){return e},toWireType:function(e,t){if("number"!=typeof t&&"boolean"!=typeof t)throw new TypeError('Cannot convert "'+xe(t)+'" to '+this.name);return t},argPackAdvance:8,readValueFromPointer:ke(t,n),destructorFunction:null})},d:function(e,t,r,n,i){t=ue(t),-1===i&&(i=4294967295);var a=oe(r),s=function(e){return e};if(0===n){var o=32-8*r;s=function(e){return e<<o>>>o}}var l=-1!=t.indexOf("unsigned");pe(e,{name:t,fromWireType:s,toWireType:function(e,r){if("number"!=typeof r&&"boolean"!=typeof r)throw new TypeError('Cannot convert "'+xe(r)+'" to '+this.name);if(r<n||r>i)throw new TypeError('Passing a number "'+xe(r)+'" from JS side to C/C++ side to an argument of type "'+t+'", which is outside the valid range ['+n+", "+i+"]!");return l?r>>>0:0|r},argPackAdvance:8,readValueFromPointer:Se(t,a,0!==n),destructorFunction:null})},c:function(e,t,r){var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][t];function i(e){var t=P,r=t[e>>=2],i=t[e+1];return new n(z,i,r)}pe(e,{name:r=ue(r),fromWireType:i,argPackAdvance:8,readValueFromPointer:i},{ignoreDuplicateRegistrations:!0})},i:function(e,t){var r="std::string"===(t=ue(t));pe(e,{name:t,fromWireType:function(e){var t,n=P[e>>2];if(r)for(var i=e+4,a=0;a<=n;++a){var s=e+4+a;if(a==n||0==x[s]){var o=b(i,s-i);void 0===t?t=o:(t+=String.fromCharCode(0),t+=o),i=s+1}}else{var l=new Array(n);for(a=0;a<n;++a)l[a]=String.fromCharCode(x[e+4+a]);t=l.join("")}return Le(e),t},toWireType:function(e,t){var n;t instanceof ArrayBuffer&&(t=new Uint8Array(t));var i="string"==typeof t;i||t instanceof Uint8Array||t instanceof Uint8ClampedArray||t instanceof Int8Array||ve("Cannot pass non-string to std::string"),n=r&&i?function(){return function(e){for(var t=0,r=0;r<e.length;++r){var n=e.charCodeAt(r);n>=55296&&n<=57343&&(n=65536+((1023&n)<<10)|1023&e.charCodeAt(++r)),n<=127?++t:t+=n<=2047?2:n<=65535?3:4}return t}(t)}:function(){return t.length};var a=n(),s=We(4+a+1);if(P[s>>2]=a,r&&i)C(t,s+4,a+1);else if(i)for(var o=0;o<a;++o){var l=t.charCodeAt(o);l>255&&(Le(s),ve("String has UTF-16 code units that do not fit in 8 bits")),x[s+4+o]=l}else for(o=0;o<a;++o)x[s+4+o]=t[o];return null!==e&&e.push(Le,s),s},argPackAdvance:8,readValueFromPointer:Ae,destructorFunction:function(e){Le(e)}})},f:function(e,t,r){var n,i,a,s,o;r=ue(r),2===t?(n=H,i=W,s=L,a=function(){return S},o=1):4===t&&(n=O,i=M,s=U,a=function(){return P},o=2),pe(e,{name:r,fromWireType:function(e){for(var r,i=P[e>>2],s=a(),l=e+4,u=0;u<=i;++u){var c=e+4+u*t;if(u==i||0==s[c>>o]){var h=n(l,c-l);void 0===r?r=h:(r+=String.fromCharCode(0),r+=h),l=c+t}}return Le(e),r},toWireType:function(e,n){"string"!=typeof n&&ve("Cannot pass non-string to C++ string type "+r);var a=s(n),l=We(4+a+t);return P[l>>2]=a>>o,i(n,l+4,a+t),null!==e&&e.push(Le,l),l},argPackAdvance:8,readValueFromPointer:Ae,destructorFunction:function(e){Le(e)}})},y:function(e,t){pe(e,{isVoid:!0,name:t=ue(t),argPackAdvance:0,fromWireType:function(){},toWireType:function(e,t){}})},e:function(){X()},L:function(e,t,r,i,a,s){n.render.dc().bezierCurveTo(e,t,r,i,a,s)},M:function(e,t){var r=n.render.dc();n.render.startPolygonNotification()?r.moveTo(e,t):r.lineTo(e,t)},T:function(){},N:function(){n.render.dc().beginPath()},I:function(e,t,r){var i=n.render.dc();i.beginPath(),i.arc(e,t,r,0,6.28318530718),i.fill(),n.render.noneZeroLineWidth()&&i.stroke()},E:function(e,t,r,n,i,a){},P:function(){let e=n.render.dc();e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0,e.shadowColor="rgba(0, 0, 0, 0)"},K:function(){var e=n.render.dc();e.closePath(),e.fill(),n.render.noneZeroLineWidth()&&e.stroke(),n.render.endPolygonNotification()},C:function(){n.render.frameBegin()},k:function(){n.render.frameEnd()},H:function(e,t,r,i){var a=n.render.dc();a.beginPath(),a.moveTo(e,t),a.lineTo(r,i),n.render.noneZeroLineWidth()&&a.stroke()},J:function(e,t,r,i){var a=n.render.dc();a.beginPath(),a.rect(e,t,r,i),a.fill(),n.render.noneZeroLineWidth()&&a.stroke()},z:function(){n.render.dc().restore()},A:function(){n.render.dc().save()},X:function(e,t,r,i){n.render.dc().fillStyle="rgba("+255*e+","+255*t+","+255*r+","+i+")"},F:function(e,t,r,i,a,s){for(var o=n.render.dc(),l=o.createLinearGradient(e,t,r,i),u=0;u<40*a;u+=40)l.addColorStop(_(s+u,"double"),"rgba("+255*_(s+u+8,"double")+","+255*_(s+u+16,"double")+","+255*_(s+u+24,"double")+","+_(s+u+32,"double")+")");o.fillStyle=l},l:function(e,t,r){var i=n.render.dc();i.beginPath(),i.arc(e,t,r,0,6.28318530718),i.clip()},Y:function(){var e=n.render.dc();e.closePath(),e.clip(),n.render.endPolygonNotification()},m:function(e,t,r,i){var a=n.render.dc();a.beginPath(),a.rect(e,t,r,i),a.clip()},S:function(e){n.render.dc().shadowBlur=e},R:function(e,t,r,i){n.render.dc().shadowColor="rgba("+255*e+","+255*t+","+255*r+","+i+")"},Q:function(e,t){let r=n.render.dc();r.shadowOffsetX=e,r.shadowOffsetY=t},U:function(e){n.render.dc().font=b(e)},W:function(e,t,r,i){n.render.dc().strokeStyle="rgba("+255*e+","+255*t+","+255*r+","+i+")"},V:function(e){n.render.dc().lineWidth=e,n.render.lineWidthNotification(e)},G:function(e,t,r,i,a){var s=n.render.dc();s.textAlign="left",s.textBaseline="top",e+=r<0?-r:0,t+=i<0?-i:0,s.fillText(b(a),e,t)},n:function(e,t,r){var i=n.render.dc(),a=i.measureText(b(e)),s=a.width,o=(a=i.measureText("Op")).actualBoundingBoxAscent+a.actualBoundingBoxDescent;y(t,s,"double"),y(r,o,"double")},B:function(e,t,r,i){var a=n.render.dc();a.translate(e,t),a.rotate(i),a.scale(r,r)},u:function(e,t){var r;if(0===e)r=Date.now();else{if(1!==e&&4!==e||!Ee)return-1;r=ge()}return E[t>>2]=r/1e3|0,E[t+4>>2]=r%1e3*1e3*1e3|0,0},r:function(e,t,r){x.copyWithin(e,t,t+r)},s:function(e){e>>>=0;var t=x.length,r=2147483648;if(e>r)return!1;for(var n,i,a=1;a<=4;a*=2){var s=t*(1+.2/a);if(s=Math.min(s,e+100663296),Pe(Math.min(r,((n=Math.max(16777216,e,s))%(i=65536)>0&&(n+=i-n%i),n))))return!0}return!1},w:function(e,t){n.events.invoke(e,t)},t:function(e){return 0},p:function(e,t,r,n,i){},g:function(e,t,r,n){for(var i=0,a=0;a<r;a++){for(var s=E[t+8*a>>2],o=E[t+(8*a+4)>>2],l=0;l<o;l++)Be.printChar(e,x[s+l]);i+=o}return E[n>>2]=i,0},D:function(e){console.log((new Date).toISOString()+": "+b(e))},memory:d,o:function(e){window.open(b(e),"_blank")},O:function(e){n.removeFunction(e)},j:function(e){return(e=+e)>=0?+Z(e+.5):+J(e-.5)},q:function(e){n.render.canvas().style.cursor=b(e)},table:v};!function(){var e={a:Te};function t(e,t){var r=e.exports;n.asm=r,function(e){if(0==--Y&&G){var t=G;G=null,t()}}()}function r(e){t(e.instance)}function i(t){return("function"==typeof fetch?fetch(ie,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+ie+"'";return e.arrayBuffer()})).catch((function(){return ae()})):new Promise((function(e,t){e(ae())}))).then((function(t){return WebAssembly.instantiate(t,e)})).then(t,(function(e){u("failed to asynchronously prepare wasm: "+e),X(e)}))}if(Y++,n.instantiateWasm)try{return n.instantiateWasm(e,t)}catch(e){return u("Module.instantiateWasm callback failed with error: "+e),!1}!function(){if("function"!=typeof WebAssembly.instantiateStreaming||ee(ie)||"function"!=typeof fetch)return i(r);fetch(ie,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(r,(function(e){return u("wasm streaming compile failed: "+e),u("falling back to ArrayBuffer instantiation"),i(r)}))}))}()}();var Fe=n.___wasm_call_ctors=function(){return(Fe=n.___wasm_call_ctors=n.asm.Z).apply(null,arguments)};n._vizzu_errorMessage=function(){return(n._vizzu_errorMessage=n.asm._).apply(null,arguments)},n._vizzu_version=function(){return(n._vizzu_version=n.asm.$).apply(null,arguments)},n._vizzu_setLogging=function(){return(n._vizzu_setLogging=n.asm.aa).apply(null,arguments)},n._vizzu_init=function(){return(n._vizzu_init=n.asm.ba).apply(null,arguments)},n._vizzu_keyPress=function(){return(n._vizzu_keyPress=n.asm.ca).apply(null,arguments)},n._vizzu_mouseMove=function(){return(n._vizzu_mouseMove=n.asm.da).apply(null,arguments)},n._vizzu_mouseDown=function(){return(n._vizzu_mouseDown=n.asm.ea).apply(null,arguments)},n._vizzu_mouseUp=function(){return(n._vizzu_mouseUp=n.asm.fa).apply(null,arguments)},n._vizzu_mouseLeave=function(){return(n._vizzu_mouseLeave=n.asm.ga).apply(null,arguments)},n._vizzu_mousewheel=function(){return(n._vizzu_mousewheel=n.asm.ha).apply(null,arguments)},n._vizzu_poll=function(){return(n._vizzu_poll=n.asm.ia).apply(null,arguments)},n._vizzu_update=function(){return(n._vizzu_update=n.asm.ja).apply(null,arguments)},n._style_getList=function(){return(n._style_getList=n.asm.ka).apply(null,arguments)},n._style_setValue=function(){return(n._style_setValue=n.asm.la).apply(null,arguments)},n._style_getValue=function(){return(n._style_getValue=n.asm.ma).apply(null,arguments)},n._chart_store=function(){return(n._chart_store=n.asm.na).apply(null,arguments)},n._chart_restore=function(){return(n._chart_restore=n.asm.oa).apply(null,arguments)},n._chart_anim_store=function(){return(n._chart_anim_store=n.asm.pa).apply(null,arguments)},n._chart_anim_restore=function(){return(n._chart_anim_restore=n.asm.qa).apply(null,arguments)},n._object_free=function(){return(n._object_free=n.asm.ra).apply(null,arguments)},n._chart_getList=function(){return(n._chart_getList=n.asm.sa).apply(null,arguments)},n._chart_getValue=function(){return(n._chart_getValue=n.asm.ta).apply(null,arguments)},n._chart_setValue=function(){return(n._chart_setValue=n.asm.ua).apply(null,arguments)},n._chart_setFilter=function(){return(n._chart_setFilter=n.asm.va).apply(null,arguments)},n._record_getValue=function(){return(n._record_getValue=n.asm.wa).apply(null,arguments)},n._data_addDimension=function(){return(n._data_addDimension=n.asm.xa).apply(null,arguments)},n._data_addMeasure=function(){return(n._data_addMeasure=n.asm.ya).apply(null,arguments)},n._data_addRecord=function(){return(n._data_addRecord=n.asm.za).apply(null,arguments)},n._data_metaInfo=function(){return(n._data_metaInfo=n.asm.Aa).apply(null,arguments)},n._addEventListener=function(){return(n._addEventListener=n.asm.Ba).apply(null,arguments)},n._removeEventListener=function(){return(n._removeEventListener=n.asm.Ca).apply(null,arguments)},n._event_preventDefault=function(){return(n._event_preventDefault=n.asm.Da).apply(null,arguments)},n._chart_animate=function(){return(n._chart_animate=n.asm.Ea).apply(null,arguments)},n._chart_setKeyframe=function(){return(n._chart_setKeyframe=n.asm.Fa).apply(null,arguments)},n._anim_control=function(){return(n._anim_control=n.asm.Ga).apply(null,arguments)},n._anim_setValue=function(){return(n._anim_setValue=n.asm.Ha).apply(null,arguments)},n.___getTypeName=function(){return(n.___getTypeName=n.asm.Ia).apply(null,arguments)},n.___embind_register_native_and_builtin_types=function(){return(n.___embind_register_native_and_builtin_types=n.asm.Ja).apply(null,arguments)};var He,We=n._malloc=function(){return(We=n._malloc=n.asm.Ka).apply(null,arguments)},Le=n._free=function(){return(Le=n._free=n.asm.La).apply(null,arguments)};function Oe(e){Y>0||(I(R),Y>0||He||(He=!0,n.calledRun=!0,p||(I(D),I(N),t(n),I(K))))}return n.dynCall_vi=function(){return(n.dynCall_vi=n.asm.Ma).apply(null,arguments)},n.dynCall_v=function(){return(n.dynCall_v=n.asm.Na).apply(null,arguments)},n.setValue=y,n.getValue=_,n.UTF8ToString=b,n.stringToUTF8=C,n.addFunction=function(e,t){return m(e,t)},n.removeFunction=function(e){!function(e){c.delete(v.get(e)),f.push(e)}(e)},G=function e(){He||Oe(),He||(G=e)},n.run=Oe,Oe(),e.ready});const f=e=>{try{return e.cssRules,!0}catch(e){return!1}},m=(e,t="")=>{const r=((e="")=>[...document.styleSheets].filter(f).reduce(((t,r)=>t.concat([...r.cssRules].filter((e=>1===e.type)).reduce(((t,r)=>[...t,...[...r.style].filter((t=>0===t.trim().indexOf("--"+e))).map((e=>e.trim()))]),[]))),[]))(t),n=getComputedStyle(e);return r.map((e=>[e,n.getPropertyValue(e).trim()])).filter((e=>""!==e[1]))};class y{constructor(e){this.finalizationRegistry=new FinalizationRegistry((t=>{e(t)}))}get(e,t){let r=e(),n=new t;return n.id=r,this.finalizationRegistry.register(n,r),n}}let _=null;class v{}class p{static get presets(){return new c}static options(e){_=e}constructor(e,t){if(this._container=e,this._container instanceof HTMLElement||(this._container=document.getElementById(e)),!this._container)throw new Error(`Cannot find container ${this._container} to render Vizzu!`);this._propPrefix="vizzu",this._started=!1,this._resolveAnimate=null,this.initializing=new Promise((e=>{this._resolveAnimate=e})),this.anim=this.initializing;let r={};_?.wasmUrl&&(r.locateFile=function(e){return e.endsWith(".wasm")?_.wasmUrl:e}),d(r).then((e=>{this._resolveAnimate&&this._resolveAnimate(this._init(e))})),t&&this.animate(t,0)}_call(e){return(...t)=>{try{return e(...t)}catch(e){let t=parseInt(e,10),r=this.module._vizzu_errorMessage(t),n=this.module.UTF8ToString(r);throw new Error("error: "+n)}}}_iterateObject(e,t,r=""){e&&Object.keys(e).forEach((n=>{let i=r+(0===r.length?"":".")+n;null!==e[n]&&"object"==typeof e[n]?this._iterateObject(e[n],t,i):this._setValue(i,e[n],t)}))}_setNestedProp(e,t,r){let n=t.split(".");n.forEach(((t,i)=>{i<n.length-1?(e[t]=e[t]||("number"==typeof n[i+1]?[]:{}),e=e[t]):e[t]=r.startsWith("[")||r.startsWith("{")?JSON.parse(r):r}))}_setValue(e,t,r){if(e!==""+e)throw new Error("first parameter should be string");let n=this._toCString(e),i=this._toCString(String(t).toString());try{r(n,i)}finally{this.module._free(i),this.module._free(n)}}_setStyle(e){this._iterateObject(e,((e,t)=>{this._call(this.module._style_setValue)(e,t)}))}_cloneObject(e,t,...r){let n=this._call(e)(),i=this._fromCString(n),a=JSON.parse(i),s={};for(let e of a){let n,i=this._toCString(e);try{n=this._call(t)(i,...r);let a=this._fromCString(n);this._setNestedProp(s,e,a)}finally{this.module._free(i)}}return Object.freeze(s),s}get config(){return this._cloneObject(this.module._chart_getList,this.module._chart_getValue)}get style(){return this._cloneObject(this.module._style_getList,this.module._style_getValue,!1)}getComputedStyle(){return this._cloneObject(this.module._style_getList,this.module._style_getValue,!0)}get data(){let e=this._call(this.module._data_metaInfo)(),t=this._fromCString(e);return{series:JSON.parse(t)}}_setConfig(e){if(null!==e&&"object"==typeof e&&Object.keys(e).forEach((t=>{["color","lightness","size","label","x","y","noop"].includes(t)&&(e.channels=e.channels||{},e.channels[t]=e[t],delete e[t])})),e?.channels){let t=e.channels;Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e]=[t[e]]),(null===t[e]||Array.isArray(t[e]))&&(t[e]={set:t[e]}),"string"==typeof t[e].attach&&(t[e].attach=[t[e].attach]),"string"==typeof t[e].detach&&(t[e].detach=[t[e].detach]),"string"==typeof t[e].set&&(t[e].set=[t[e].set]),Array.isArray(t[e].set)&&0===t[e].set.length&&(t[e].set=null)}))}this._iterateObject(e,((e,t)=>{this._call(this.module._chart_setValue)(e,t)}))}on(e,t){this._validateModule(),this.events.add(e,t)}off(e,t){this._validateModule(),this.events.remove(e,t)}store(){return this._validateModule(),this._objectRegistry.get(this._call(this.module._chart_store),v)}feature(e,t){this._validateModule(),"tooltip"===e?this._tooltip.enable(t):"logging"===e?this._call(this.module._vizzu_setLogging)(t):"rendering"===e&&(this.render.enabled=t)}_validateModule(){if(!this.module)throw new Error("Vizzu not initialized. Use `initializing` promise.")}animate(...e){let t,r=new Promise(((e,r)=>{t=e}));return this.anim=this.anim.then((()=>this._animate(e,t))),this.anim.activated=r,this.anim}_animate(e,t){let r=new Promise(((t,r)=>{let n=this.module.addFunction((e=>{e?t(this):(r("animation canceled"),this.anim=Promise.resolve(this)),this.module.removeFunction(n)}),"vi");this._processAnimParams(...e),this._call(this.module._chart_animate)(n)}),this);return t(new l(this)),r}_processAnimParams(e,t){if(e instanceof o)this._call(this.module._chart_anim_restore)(e.id);else{let r=[];if(Array.isArray(e))for(let t of e)void 0!==t.target?r.push({target:t.target,options:t.options}):r.push({target:t,options:void 0});else r.push({target:e,options:t});for(let e of r)this._setKeyframe(e.target,e.options)}this._setAnimation(t)}_setKeyframe(e,t){if(e)if(e instanceof v)this._call(this.module._chart_restore)(e.id);else{let t=Object.assign({},e);t.data||void 0!==t.style||t.config||(t={config:t}),this._data.set(t.data),null===t.style&&(t.style={"":null});const r=JSON.parse(JSON.stringify(t.style||{})),n=m(this._container,this._propPrefix);this._setStyle(((e,t,r="",n=!1)=>(t=t||{},t=e.reduce(((e,[t,i])=>(((e,t,r,n)=>{t.reduce(((e,i,a)=>(a===t.length-1?!n&&e[i]||(e[i]=r):e[i]||(e[i]={}),e[i])),e)})(e,t.replace("--"+(r?r+"-":""),"").split("-"),i,n),e)),t),t))(n,r,this._propPrefix)),this._setConfig(Object.assign({},t.config))}this._setAnimation(t),this._call(this.module._chart_setKeyframe)()}_setAnimation(e){if(void 0!==e){if(null===e?e={duration:0}:"string"!=typeof e&&"number"!=typeof e||(e={duration:e}),"object"!=typeof e)throw new Error("invalid animation option");e=Object.assign({},e),this._iterateObject(e,((e,t)=>{this._call(this.module._anim_setValue)(e,t)}))}}get animation(){return new l(this)}version(){this._validateModule();let e=this.module._vizzu_version();return this.module.UTF8ToString(e)}_start(){this._started||(this._call(this.module._vizzu_poll)(),this.render.updateFrame(!1),this._pollInterval=setInterval((()=>{this._call(this.module._vizzu_poll)()}),10),this._updateInterval=setInterval((()=>{this.render.updateFrame(!1)}),25),this._started=!0)}_getMousePos(e){var t=this.render.clientRect();return[e.clientX-t.left,e.clientY-t.top]}_toCString(e){let t=4*e.length+1,r=this.module._malloc(t);return this.module.stringToUTF8(e,r,t),r}_fromCString(e){return this.module.UTF8ToString(e)}_init(r){return this.module=r,this.canvas=this._createCanvas(),this.render=new e,this.module.render=this.render,this._data=new s(this),this.events=new t(this),this.module.events=this.events,this._tooltip=new u(this),this.render.init(this._call(this.module._vizzu_update),this.canvas,!1),this._objectRegistry=new y(this._call(this.module.object_free)),this._call(this.module._vizzu_init)(),this._call(this.module._vizzu_setLogging)(!1),this._setupDOMEventHandlers(this.canvas),this._start(),this}_createCanvas(){let e=null,t=this._container;if(t instanceof HTMLCanvasElement?e=t:(e=document.createElement("CANVAS"),e.style.width="100%",e.style.height="100%",t.appendChild(e)),!(e instanceof HTMLCanvasElement))throw new Error("Error initializing <canvas> for Vizzu!");return e}_setupDOMEventHandlers(e){this._resizeObserver=new ResizeObserver((()=>{this.render.updateFrame(!0)})),this._resizeObserver.observe(e),this._resizeHandler=()=>{this.render.updateFrame(!0)},this._mousemoveHandler=e=>{let t=this._getMousePos(e);this._call(this.module._vizzu_mouseMove)(t[0],t[1])},this._mouseupHandler=e=>{let t=this._getMousePos(e);this._call(this.module._vizzu_mouseUp)(t[0],t[1])},this._mousedownHandler=e=>{let t=this._getMousePos(e);this._call(this.module._vizzu_mouseDown)(t[0],t[1])},this._mouseoutHandler=()=>{this._call(this.module._vizzu_mouseLeave)()},this._wheelHandler=e=>{this._call(this.module._vizzu_mousewheel)(e.deltaY)},this._keydownHandler=e=>{let t=e.keyCode<=255?e.keyCode:0;const r=[33,34,36,35,37,39,38,40,27,9,13,46];for(let n=0;n<r.length;n++)e.key===r[n]&&(t=256+n);0!==t&&this._call(this.module._vizzu_keyPress)(t,e.ctrlKey,e.altKey,e.shiftKey)},window.addEventListener("resize",this._resizeHandler),e.addEventListener("mousemove",this._mousemoveHandler),e.addEventListener("mouseup",this._mouseupHandler),e.addEventListener("mousedown",this._mousedownHandler),e.addEventListener("mouseout",this._mouseoutHandler),e.addEventListener("wheel",this._wheelHandler),document.addEventListener("keydown",this._keydownHandler)}detach(){this._resizeObserver.disconnect(),clearInterval(this._pollInterval),clearInterval(this._updateInterval),window.removeEventListener("resize",this._resizeHandler),this.canvas.removeEventListener("mousemove",this._mousemoveHandler),this.canvas.removeEventListener("mouseup",this._mouseupHandler),this.canvas.removeEventListener("mousedown",this._mousedownHandler),this.canvas.removeEventListener("mouseout",this._mouseoutHandler),this.canvas.removeEventListener("wheel",this._wheelHandler),document.removeEventListener("keydown",this._keydownHandler)}}export{p as default};