@aeriz/chart 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -34
- package/dist/aeriz.cjs +609 -354
- package/dist/aeriz.esm.js +578 -331
- package/dist/aeriz.esm.min.js +119 -105
- package/dist/aeriz.js +609 -354
- package/dist/aeriz.min.cjs +123 -107
- package/dist/aeriz.min.js +123 -107
- package/dist/esm/base.js +33 -22
- package/dist/esm/cartesian.js +7 -5
- package/dist/esm/charts/area.js +6 -6
- package/dist/esm/charts/bar.js +3 -3
- package/dist/esm/charts/boxplot.js +3 -3
- package/dist/esm/charts/bubble.js +3 -3
- package/dist/esm/charts/composite.js +8 -8
- package/dist/esm/charts/funnel.js +3 -3
- package/dist/esm/charts/gauge.js +5 -5
- package/dist/esm/charts/grouped-bar.js +4 -4
- package/dist/esm/charts/hbar.js +5 -5
- package/dist/esm/charts/heatmap.js +6 -6
- package/dist/esm/charts/line.js +6 -6
- package/dist/esm/charts/multi-line.js +5 -5
- package/dist/esm/charts/pie.js +6 -6
- package/dist/esm/charts/polar.js +3 -3
- package/dist/esm/charts/radar.js +6 -6
- package/dist/esm/charts/realtime.js +11 -9
- package/dist/esm/charts/scatter.js +4 -4
- package/dist/esm/charts/sparkline.js +4 -4
- package/dist/esm/charts/stacked-bar.js +5 -5
- package/dist/esm/charts/treemap.js +4 -4
- package/dist/esm/charts/waterfall.js +4 -4
- package/dist/esm/engine.js +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/jquery.js +5 -4
- package/dist/esm/math.js +1 -1
- package/dist/esm/react.js +4 -4
- package/dist/esm/shallow.js +4 -2
- package/dist/esm/svelte.js +4 -4
- package/dist/esm/vue.js +4 -2
- package/dist/index.d.ts +228 -552
- package/dist/jquery.d.ts +19 -8
- package/dist/react.d.ts +55 -18
- package/dist/svelte.d.ts +53 -14
- package/dist/types/sparkline.d.ts +1 -1
- package/dist/vue.d.ts +60 -10
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
import{Chart}from'../base.js';import{drawCartesian}from'../cartesian.js';
|
|
3
|
-
_legend(){return this._seriesLegend(this.options.series||[]);}
|
|
4
|
-
_render(){const o=this.options;const
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
import{Chart}from'../base.js';import{drawCartesian,valueDomain}from'../cartesian.js';export class StackedBarChart extends Chart{static get meta(){return{id:'stacked-bar',name:'StackedBarChart',aria:'Stacked bar chart',data:'series',options:['labelFormat','min','max']};}
|
|
3
|
+
_legend(){return this._seriesLegend(this.options.data?.series||[]);}
|
|
4
|
+
_render(){const o=this.options;const{categories:cats=[],series=[]}=o.data||{};if(!series.length||!cats.length)return this._empty();const e=this.engine;const t=this.theme;const on=series.map((s,i)=>i).filter((i)=>!this._isOff(i));let lo=0,hi=0;for(let i=0;i<cats.length;i++){let pos=0,neg=0;for(const s of on){const v=+series[s].values[i]||0;if(v>=0)pos+=v;else neg+=v;}
|
|
5
5
|
if(pos>hi)hi=pos;if(neg<lo)lo=neg;}
|
|
6
|
-
const[yLo,yHi]=
|
|
6
|
+
const[yLo,yHi]=valueDomain(o,lo,hi);const ax=drawCartesian(this,{yMin:yLo,yMax:yHi,xLabels:cats});const slot=ax.pw/cats.length;const barW=Math.max(1,Math.min(50,slot*0.8,slot-2));const prog=this._anim.progress;const groups=new Map();const y0=ax.yToPx(0);const lastPos=[],lastNeg=[];for(let i=0;i<cats.length;i++){let pos=0,neg=0;const x=ax.px+(i+0.5)*slot-barW/2;for(const s of on){const v=+series[s].values[i]||0;if(!v)continue;const from=v>0?pos:neg;const to=from+v;if(v>0)pos=to;else neg=to;const ya=y0+(ax.yToPx(from)-y0)*prog;const yb=y0+(ax.yToPx(to)-y0)*prog;const y=Math.min(ya,yb),h=Math.abs(yb-ya);const color=this._colorOf(s,series[s]);if(!groups.has(color))groups.set(color,[]);const item={x,y,w:barW,h,radius:0};groups.get(color).push(item);(v>0?lastPos:lastNeg)[i]=item;this.hits.add({_id:`${i}-${s}`,x,y,w:barW,h,tipX:x+barW/2,tipY:y,index:i,label:cats[i],series:s,value:v,row:series[s],tooltip:{title:this._lab(cats[i]),rows:[{color,name:series[s].name||'Series '+(s+1),value:this._fmt(v)}]},});}}
|
|
7
7
|
for(const it of lastPos)if(it)it.radius=t.barRadius;for(const it of lastNeg)if(it)it.radius=t.barRadius;for(const[color,items]of groups)e.rects(items,color);if(this._hover){const r=this._hover;e.rect(r.x,r.y,r.w,r.h,{stroke:t.text,lineWidth:1.5});}}}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
2
|
import{Chart,toRows}from'../base.js';export function squarify(items,rect,place){let i=0;let{x,y,w,h}=rect;let rest=items.reduce((a,it)=>a+it.value,0);while(i<items.length&&rest>0&&w>=1&&h>=1){const side=Math.min(w,h);const scale=(w*h)/rest;let sum=0,best=Infinity,j=i;for(;j<items.length;j++){const s=sum+items[j].value;const len=(s*scale)/side;let worst=0;for(let k=i;k<=j;k++){const l=(items[k].value*scale)/len;worst=Math.max(worst,len/l,l/len);}
|
|
3
3
|
if(worst>best)break;best=worst;sum=s;}
|
|
4
4
|
if(j===i){sum=items[i].value;j=i+1;}
|
|
5
5
|
const thick=(sum*scale)/side;let pos=0;for(let k=i;k<j;k++){const l=(items[k].value*scale)/thick;place(items[k],w>=h?{x,y:y+pos,w:thick,h:l}:{x:x+pos,y,w:l,h:thick});pos+=l;}
|
|
6
6
|
if(w>=h){x+=thick;w-=thick;}else{y+=thick;h-=thick;}
|
|
7
7
|
rest-=sum;i=j;}}
|
|
8
|
-
export class TreemapChart extends Chart{get
|
|
9
|
-
_render(){const o=this.options;const data=toRows(o.data);if(!data.length)return this._empty();const e=this.engine;const t=this.theme;const labelOf=
|
|
10
|
-
this.hits.add({_id:it._id,x,y,w,h,tipX:x+w/2,tipY:y,
|
|
8
|
+
export class TreemapChart extends Chart{static get meta(){return{id:'treemap',name:'TreemapChart',aria:'Treemap',data:'rows',options:['label','value','labelColor']};}
|
|
9
|
+
_render(){const o=this.options;const data=toRows(o.data);if(!data.length)return this._empty();const e=this.engine;const t=this.theme;const labelOf=this._fn('label')||((d)=>d.label);const valueOf=this._fn('value')||((d)=>d.value);const items=data.map((d,i)=>({raw:labelOf(d,i),label:String(labelOf(d,i)),value:Math.max(0,+valueOf(d,i)||0),color:this._colorOf(i,d),data:d,_id:i})).filter((it)=>it.value>0).sort((a,b)=>b.value-a.value);if(!items.length)return this._empty();const prog=this._anim.progress;const fg=o.labelColor||'#fff';squarify(items,{x:0,y:0,w:e.w,h:e.h},(it,r)=>{const gap=1;const w=(r.w-gap*2)*prog;const h=(r.h-gap*2)*prog;const x=r.x+gap+(r.w-gap*2-w)/2;const y=r.y+gap+(r.h-gap*2-h)/2;if(w<1||h<1)return;const hover=this._hover&&this._hover._id===it._id;e.withAlpha(hover?0.85:1,()=>e.rect(x,y,w,h,{fill:it.color,radius:2}));if(w>48&&h>t.fontSize*2+12){e.text(it.label,x+6,y+6,{fill:fg,font:`600 ${t.fontSize}px ${t.font}`,align:'left',baseline:'top'});e.withAlpha(0.85,()=>e.text(this._fmt(it.value),x+6,y+8+t.fontSize,{fill:fg,font:`${t.fontSize}px ${t.font}`,align:'left',baseline:'top'}));}
|
|
10
|
+
this.hits.add({_id:it._id,x,y,w,h,tipX:x+w/2,tipY:y,index:it._id,label:it.raw,value:it.value,row:it.data,tooltip:`${it.label}: ${this._fmt(it.value)}`,});});}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
import{Chart
|
|
3
|
-
_render(){const o=this.options;const data=
|
|
4
|
-
this.hits.add({_id:i,x,y:top,w:barW,h:Math.max(h,4),tipX:x+barW/2,tipY:top,
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
import{Chart}from'../base.js';import{drawCartesian,range,valueDomain}from'../cartesian.js';export class WaterfallChart extends Chart{static get meta(){return{id:'waterfall',name:'WaterfallChart',aria:'Waterfall chart',data:'steps',options:['labelFormat','min','max'],colors:'an object like { up, down, total }'};}
|
|
3
|
+
_render(){const o=this.options;const data=Array.isArray(o.data)?o.data:[];if(!data.length)return this._empty();const e=this.engine;const t=this.theme;let cum=0;const segs=data.map((d)=>{const v=+d.value||0;const seg=d.total?{from:0,to:v}:{from:cum,to:cum+v};cum=seg.to;return{...seg,value:v,total:!!d.total,label:d.label};});const[lo,hi]=range([segs.map((s)=>s.from),segs.map((s)=>s.to)],0,0);const[yLo,yHi]=valueDomain(o,lo,hi);const ax=drawCartesian(this,{yMin:yLo,yMax:yHi,xLabels:segs.map((s)=>s.label)});const slot=ax.pw/segs.length;const barW=Math.max(1,Math.min(60,slot*0.7));const prog=this._anim.progress;const c=o.colors||{};const up=c.up||'#10b981';const down=c.down||'#ef4444';const total=c.total||'#6366f1';for(let i=0;i<segs.length;i++){const s=segs[i];const x=ax.px+(i+0.5)*slot-barW/2;const y0=ax.yToPx(s.from);const h=Math.abs(ax.yToPx(s.to)-y0)*prog;const top=s.to>=s.from?y0-h:y0;e.rect(x,top,barW,Math.max(h,1),{fill:s.total?total:s.value>=0?up:down,radius:t.barRadius});if(i<segs.length-1&&prog===1){const yEnd=ax.yToPx(s.to);e.poly([{x:x+barW,y:yEnd},{x:x+slot,y:yEnd}],{stroke:t.muted,lineWidth:1,dash:[3,3]});}
|
|
4
|
+
this.hits.add({_id:i,x,y:top,w:barW,h:Math.max(h,4),tipX:x+barW/2,tipY:top,index:i,label:s.label,value:s.value,row:data[i],tooltip:`${this._lab(s.label)}: ${s.value > 0 && !s.total ? '+' : ''}${this._fmt(s.value)}`,});}
|
|
5
5
|
if(this._hover){const r=this._hover;e.rect(r.x,r.y,r.w,r.h,{stroke:t.text,lineWidth:1.5});}}}
|
package/dist/esm/engine.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
2
|
import{TAU}from'./math.js';export class Engine{constructor(canvas){this.canvas=canvas;this.ctx=canvas.getContext('2d');this.w=0;this.h=0;this.dpr=1;this._gradCache=new Map();this._gradCacheMax=32;this._snap=true;}
|
|
3
3
|
resize(w,h){const dpr=(typeof window!=='undefined'&&window.devicePixelRatio)||1;this.canvas.width=Math.round(w*dpr);this.canvas.height=Math.round(h*dpr);this.ctx.setTransform(dpr,0,0,dpr,0,0);this.w=w;this.h=h;this.dpr=dpr;this._font=null;this._gradCache.clear();}
|
|
4
4
|
clear(color){if(color){this.ctx.fillStyle=color;this.ctx.fillRect(0,0,this.w,this.h);}else{this.ctx.clearRect(0,0,this.w,this.h);}}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
export{Chart
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
export{Chart}from'./base.js';export{PALETTE}from'./math.js';export{BarChart}from'./charts/bar.js';export{HBarChart}from'./charts/hbar.js';export{LineChart}from'./charts/line.js';export{AreaChart}from'./charts/area.js';export{StackedBarChart}from'./charts/stacked-bar.js';export{GroupedBarChart}from'./charts/grouped-bar.js';export{MultiLineChart}from'./charts/multi-line.js';export{ScatterChart}from'./charts/scatter.js';export{BubbleChart}from'./charts/bubble.js';export{PieChart}from'./charts/pie.js';export{RadarChart}from'./charts/radar.js';export{PolarChart}from'./charts/polar.js';export{GaugeChart}from'./charts/gauge.js';export{HeatmapChart}from'./charts/heatmap.js';export{BoxplotChart}from'./charts/boxplot.js';export{FunnelChart}from'./charts/funnel.js';export{TreemapChart}from'./charts/treemap.js';export{SparklineChart}from'./charts/sparkline.js';export{RealtimeChart}from'./charts/realtime.js';export{WaterfallChart}from'./charts/waterfall.js';export{CompositeChart}from'./charts/composite.js';
|
package/dist/esm/jquery.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
export function install($,
|
|
3
|
-
const T=
|
|
4
|
-
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
const METHODS=['update','setState','render','destroy','push','clear'];export function install($,charts){if(!$||!$.fn)throw new Error('aeriz: install($, { BarChart }) needs jQuery as the first argument');const types=$.fn.aerizChart?.types||{};for(const T of Object.values(charts||{}))if(T&&T.meta)types[T.meta.id]=T;function aerizChart(cmd,...args){if(cmd==='instance')return this.first().data('aeriz')||null;if(METHODS.includes(cmd)){return this.each(function(){const c=$(this).data('aeriz');if(!c)throw new Error(`aeriz: .aerizChart('${cmd}') — there is no chart here. Create one first, e.g. .aerizChart('bar', { data })`);if(typeof c[cmd]!=='function')throw new Error(`aeriz: ${c.constructor.meta.name} has no ${cmd}()`);c[cmd](...args);if(cmd==='destroy')$(this).removeData('aeriz');});}
|
|
3
|
+
const T=types[cmd];if(!T){const ids=Object.keys(types);throw new Error(typeof cmd==='function'?`aeriz 2.0: pass the chart id, not the class — install($, { ${cmd.meta?.name || 'BarChart'} }) then .aerizChart('${cmd.meta?.id || 'bar'}', options)`:`aeriz: unknown chart '${cmd}'. ${ids.length ? `Installed: ${ids.join(', ')}` : 'Call install($, { BarChart }) first'}.`);}
|
|
4
|
+
return this.each(function(){$(this).data('aeriz')?.destroy();$(this).data('aeriz',new T(this,args[0]||{}));});}
|
|
5
|
+
aerizChart.types=types;$.fn.aerizChart=aerizChart;return $;}
|
package/dist/esm/math.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
2
|
export const TAU=Math.PI*2;export const clamp=(v,lo,hi)=>v<lo?lo:v>hi?hi:v;export const lerp=(a,b,t)=>a+(b-a)*t;export function extent(arr,fn=(x)=>x){let mn=Infinity,mx=-Infinity;for(let i=0;i<arr.length;i++){const v=fn(arr[i],i);if(v<mn)mn=v;if(v>mx)mx=v;}
|
|
3
3
|
return[mn===Infinity?0:mn,mx===-Infinity?1:mx];}
|
|
4
4
|
export function niceTicks(min,max,count=5){if(min===max){min-=0.5;max+=0.5;}
|
package/dist/esm/react.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
import{createElement,forwardRef,useEffect,useRef}from'react';import{
|
|
3
|
-
function
|
|
4
|
-
export const
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
import{createElement,forwardRef,useEffect,useRef}from'react';import{apply,isDomProp}from'./shallow.js';import{BarChart as Bar}from'./charts/bar.js';import{HBarChart as HBar}from'./charts/hbar.js';import{LineChart as Line}from'./charts/line.js';import{AreaChart as Area}from'./charts/area.js';import{StackedBarChart as StackedBar}from'./charts/stacked-bar.js';import{GroupedBarChart as GroupedBar}from'./charts/grouped-bar.js';import{MultiLineChart as MultiLine}from'./charts/multi-line.js';import{ScatterChart as Scatter}from'./charts/scatter.js';import{BubbleChart as Bubble}from'./charts/bubble.js';import{PieChart as Pie}from'./charts/pie.js';import{RadarChart as Radar}from'./charts/radar.js';import{PolarChart as Polar}from'./charts/polar.js';import{GaugeChart as Gauge}from'./charts/gauge.js';import{HeatmapChart as Heatmap}from'./charts/heatmap.js';import{BoxplotChart as Boxplot}from'./charts/boxplot.js';import{FunnelChart as Funnel}from'./charts/funnel.js';import{TreemapChart as Treemap}from'./charts/treemap.js';import{SparklineChart as Sparkline}from'./charts/sparkline.js';import{RealtimeChart as Realtime}from'./charts/realtime.js';import{WaterfallChart as Waterfall}from'./charts/waterfall.js';import{CompositeChart as Composite}from'./charts/composite.js';function setRef(ref,v){if(typeof ref==='function')ref(v);else if(ref)ref.current=v;}
|
|
3
|
+
function make(Type){const C=forwardRef(function AerizChart(props,ref){const el=useRef(null);const chart=useRef(null);const last=useRef(null);const div={};const next={};for(const k in props)if(k!=='children')(isDomProp(k)?div:next)[k]=props[k];useEffect(()=>{const c=new Type(el.current,next);chart.current=c;last.current=next;setRef(ref,c);return()=>{c.destroy();chart.current=null;setRef(ref,null);};},[]);useEffect(()=>{const c=chart.current;if(!c||last.current===next)return;apply(c,last.current,next);last.current=next;});div.ref=el;return createElement('div',div);});C.displayName=Type.meta.name;return C;}
|
|
4
|
+
export const BarChart=/*#__PURE__*/make(Bar);export const HBarChart=/*#__PURE__*/make(HBar);export const LineChart=/*#__PURE__*/make(Line);export const AreaChart=/*#__PURE__*/make(Area);export const StackedBarChart=/*#__PURE__*/make(StackedBar);export const GroupedBarChart=/*#__PURE__*/make(GroupedBar);export const MultiLineChart=/*#__PURE__*/make(MultiLine);export const ScatterChart=/*#__PURE__*/make(Scatter);export const BubbleChart=/*#__PURE__*/make(Bubble);export const PieChart=/*#__PURE__*/make(Pie);export const RadarChart=/*#__PURE__*/make(Radar);export const PolarChart=/*#__PURE__*/make(Polar);export const GaugeChart=/*#__PURE__*/make(Gauge);export const HeatmapChart=/*#__PURE__*/make(Heatmap);export const BoxplotChart=/*#__PURE__*/make(Boxplot);export const FunnelChart=/*#__PURE__*/make(Funnel);export const TreemapChart=/*#__PURE__*/make(Treemap);export const SparklineChart=/*#__PURE__*/make(Sparkline);export const RealtimeChart=/*#__PURE__*/make(Realtime);export const WaterfallChart=/*#__PURE__*/make(Waterfall);export const CompositeChart=/*#__PURE__*/make(Composite);
|
package/dist/esm/shallow.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
2
|
const plain=(v)=>v&&typeof v==='object'&&Object.getPrototypeOf(v)===Object.prototype;export function same(a,b,deep=true){if(a===b)return true;if(!a||!b)return false;const ka=Object.keys(a);if(ka.length!==Object.keys(b).length)return false;for(const k of ka){const x=a[k],y=b[k];if(x===y||(typeof x==='function'&&typeof y==='function'))continue;if(deep&&plain(x)&&plain(y)&&same(x,y,false))continue;return false;}
|
|
3
|
-
return true;}
|
|
3
|
+
return true;}
|
|
4
|
+
export function apply(chart,last,next){if(same(last,next))return Object.assign(chart.options,next);const patch={...next};for(const k in last)if(!(k in next))patch[k]=undefined;chart.update(patch);}
|
|
5
|
+
export const isDomProp=(k)=>/^(class|className|style|id|role|tabIndex|aria-.+|data-.+)$/.test(k);
|
package/dist/esm/svelte.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
import{
|
|
3
|
-
|
|
4
|
-
export
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
import{apply}from'./shallow.js';import{BarChart as Bar}from'./charts/bar.js';import{HBarChart as HBar}from'./charts/hbar.js';import{LineChart as Line}from'./charts/line.js';import{AreaChart as Area}from'./charts/area.js';import{StackedBarChart as StackedBar}from'./charts/stacked-bar.js';import{GroupedBarChart as GroupedBar}from'./charts/grouped-bar.js';import{MultiLineChart as MultiLine}from'./charts/multi-line.js';import{ScatterChart as Scatter}from'./charts/scatter.js';import{BubbleChart as Bubble}from'./charts/bubble.js';import{PieChart as Pie}from'./charts/pie.js';import{RadarChart as Radar}from'./charts/radar.js';import{PolarChart as Polar}from'./charts/polar.js';import{GaugeChart as Gauge}from'./charts/gauge.js';import{HeatmapChart as Heatmap}from'./charts/heatmap.js';import{BoxplotChart as Boxplot}from'./charts/boxplot.js';import{FunnelChart as Funnel}from'./charts/funnel.js';import{TreemapChart as Treemap}from'./charts/treemap.js';import{SparklineChart as Sparkline}from'./charts/sparkline.js';import{RealtimeChart as Realtime}from'./charts/realtime.js';import{WaterfallChart as Waterfall}from'./charts/waterfall.js';import{CompositeChart as Composite}from'./charts/composite.js';const live=new WeakMap();export function chartOf(node){return live.get(node)||null;}
|
|
3
|
+
function action(Type){return function(node,params={}){let last={...params};const chart=new Type(node,last);live.set(node,chart);return{update(next={}){next={...next};apply(chart,last,next);last=next;},destroy(){chart.destroy();live.delete(node);},};};}
|
|
4
|
+
export const barChart=/*#__PURE__*/action(Bar);export const hbarChart=/*#__PURE__*/action(HBar);export const lineChart=/*#__PURE__*/action(Line);export const areaChart=/*#__PURE__*/action(Area);export const stackedBarChart=/*#__PURE__*/action(StackedBar);export const groupedBarChart=/*#__PURE__*/action(GroupedBar);export const multiLineChart=/*#__PURE__*/action(MultiLine);export const scatterChart=/*#__PURE__*/action(Scatter);export const bubbleChart=/*#__PURE__*/action(Bubble);export const pieChart=/*#__PURE__*/action(Pie);export const radarChart=/*#__PURE__*/action(Radar);export const polarChart=/*#__PURE__*/action(Polar);export const gaugeChart=/*#__PURE__*/action(Gauge);export const heatmapChart=/*#__PURE__*/action(Heatmap);export const boxplotChart=/*#__PURE__*/action(Boxplot);export const funnelChart=/*#__PURE__*/action(Funnel);export const treemapChart=/*#__PURE__*/action(Treemap);export const sparklineChart=/*#__PURE__*/action(Sparkline);export const realtimeChart=/*#__PURE__*/action(Realtime);export const waterfallChart=/*#__PURE__*/action(Waterfall);export const compositeChart=/*#__PURE__*/action(Composite);
|
package/dist/esm/vue.js
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
/*! @aeriz/chart
|
|
2
|
-
import{defineComponent,h,onBeforeUnmount,onMounted,
|
|
1
|
+
/*! @aeriz/chart v2.0.0 | Apache-2.0 | https://aeriz.dev/chart/ */
|
|
2
|
+
import{defineComponent,h,onBeforeUnmount,onMounted,shallowRef,toRaw,watch}from'vue';import{COMMON}from'./base.js';import{apply,isDomProp}from'./shallow.js';import{BarChart as Bar}from'./charts/bar.js';import{HBarChart as HBar}from'./charts/hbar.js';import{LineChart as Line}from'./charts/line.js';import{AreaChart as Area}from'./charts/area.js';import{StackedBarChart as StackedBar}from'./charts/stacked-bar.js';import{GroupedBarChart as GroupedBar}from'./charts/grouped-bar.js';import{MultiLineChart as MultiLine}from'./charts/multi-line.js';import{ScatterChart as Scatter}from'./charts/scatter.js';import{BubbleChart as Bubble}from'./charts/bubble.js';import{PieChart as Pie}from'./charts/pie.js';import{RadarChart as Radar}from'./charts/radar.js';import{PolarChart as Polar}from'./charts/polar.js';import{GaugeChart as Gauge}from'./charts/gauge.js';import{HeatmapChart as Heatmap}from'./charts/heatmap.js';import{BoxplotChart as Boxplot}from'./charts/boxplot.js';import{FunnelChart as Funnel}from'./charts/funnel.js';import{TreemapChart as Treemap}from'./charts/treemap.js';import{SparklineChart as Sparkline}from'./charts/sparkline.js';import{RealtimeChart as Realtime}from'./charts/realtime.js';import{WaterfallChart as Waterfall}from'./charts/waterfall.js';import{CompositeChart as Composite}from'./charts/composite.js';function make(Type){const keys=[...COMMON,...Type.meta.options].filter((k)=>k!=='onClick'&&k!=='onLegend');const props={};for(const k of keys)props[k]={type:null,default:undefined};return defineComponent({name:Type.meta.name,props,emits:['click','legend'],inheritAttrs:false,setup(p,{emit,attrs,expose}){const el=shallowRef(null);const chart=shallowRef(null);let last=null;const opts=()=>{const o={};for(const k of keys){const v=toRaw(p[k]);if(v!==undefined)o[k]=v===''?true:v;}
|
|
3
|
+
for(const k in attrs)if(!isDomProp(k)&&!/^on[A-Z]/.test(k))o[k]=attrs[k];o.onClick=(hit,c)=>emit('click',hit,c);o.onLegend=(i,visible,c)=>emit('legend',i,visible,c);return o;};onMounted(()=>{last=opts();chart.value=new Type(el.value,last);});watch(()=>keys.map((k)=>p[k]),()=>{if(!chart.value)return;const o=opts();apply(chart.value,last,o);last=o;});onBeforeUnmount(()=>{chart.value?.destroy();chart.value=null;});expose({chart});return()=>{const div={ref:el};for(const k in attrs)if(isDomProp(k))div[k]=attrs[k];return h('div',div);};},});}
|
|
4
|
+
export const BarChart=/*#__PURE__*/make(Bar);export const HBarChart=/*#__PURE__*/make(HBar);export const LineChart=/*#__PURE__*/make(Line);export const AreaChart=/*#__PURE__*/make(Area);export const StackedBarChart=/*#__PURE__*/make(StackedBar);export const GroupedBarChart=/*#__PURE__*/make(GroupedBar);export const MultiLineChart=/*#__PURE__*/make(MultiLine);export const ScatterChart=/*#__PURE__*/make(Scatter);export const BubbleChart=/*#__PURE__*/make(Bubble);export const PieChart=/*#__PURE__*/make(Pie);export const RadarChart=/*#__PURE__*/make(Radar);export const PolarChart=/*#__PURE__*/make(Polar);export const GaugeChart=/*#__PURE__*/make(Gauge);export const HeatmapChart=/*#__PURE__*/make(Heatmap);export const BoxplotChart=/*#__PURE__*/make(Boxplot);export const FunnelChart=/*#__PURE__*/make(Funnel);export const TreemapChart=/*#__PURE__*/make(Treemap);export const SparklineChart=/*#__PURE__*/make(Sparkline);export const RealtimeChart=/*#__PURE__*/make(Realtime);export const WaterfallChart=/*#__PURE__*/make(Waterfall);export const CompositeChart=/*#__PURE__*/make(Composite);
|