realchart
Version:
Wooritech charting library
8 lines (6 loc) • 6.21 kB
JavaScript
/**
* RealChart Treemap v1.4.12
* Copyright (C) 2023-2026 WooriTech Inc.
* All Rights Reserved.
*/
import{extend as e,ChartItem as t,TreemapSeriesType as i,Series as s,maxv as h,DataPoint as r,assignObj as o,pickNum as n,toStr as l,SeriesView as a,ElementPool as d,SeriesAnimation as u,Color as c,RectElement as p}from"./index.mjs";class _ extends r{_assignTo(e){return o(super._assignTo(e),{id:this.id,group:this.group})}_readArray(e,t){if(t.length<=2)this.isNull=!0;else{const i=t.length>3?1:0;i>0&&(this.x=t[n(e.options.xField,0)]),this.y=t[n(e.options.yField,0+i)],this.id=l(t[n(e.options.idField,1+i)]),this.group=l(t[n(e.options.groupField,2+i)])}}_readObject(e,t){super._readObject(e,t),this.id=l(t[e.options.idField]),this.group=l(t[e.options.groupField])}}(class extends t{constructor(e){super(e.chart),this.level=e,this.floating=!0}}).defaults=e(t.defaults,{visible:!1});class g{constructor(e){this.point=e}level(){return this.parent?this.parent.level()+1:0}getArea(){return{x:this.x,y:this.y,width:this.width,height:this.height}}setArea(e,t,i,s){this.x=e,this.y=t,this.width=i,this.height=s}getTotal(){return this.children.reduce(((e,t)=>e+t.value),0)}}class f extends s{constructor(){super(...arguments),this._map={},this._levels=1}buildMap(e,t){function i(e){if(e.children){let t=0;e.children.forEach(((e,s)=>{i(e),t+=e.value})),e.value=t,e.children=e.children.sort(((e,t)=>t.value-e.value)),e.children.forEach(((e,t)=>{e.index=t})),o=h(o,e.level()+1+1)}else r.push(e),e.value=e.point?e.point.yValue:0}const s="vertical"===this._op.startDir||t>e,r=this._leafs=[];let o=1;return this._roots.forEach(((e,t)=>{i(e)})),this._roots=this._roots.sort(((e,t)=>t.value-e.value)),this._roots.forEach(((e,t)=>{e.index=t})),(this[this._op.algorithm]||this.squarify).call(this,this._roots,e,t,s),this._levels=o,{roots:this._roots,leafs:this._leafs}}needAxes(){return!1}canMixWith(e){return!1}_createPoint(e){return new _(e)}_getLabeledPoints(){return this._leafs.map((e=>e.point))}_doPrepareRender(){super._doPrepareRender(),this._roots=this.$_buildTree(this._runPoints)}$_buildTree(e){const t=[],i=[],s=this._map;e.forEach((e=>{if(e.id||!e.isNull){const h=new g(e);e.id&&(s[e.id]=h),e.group?i.push(h):t.push(h)}}));for(let e=i.length-1;e>=0;e--){const h=i[e],r=s[h.point.group];(h.parent=r)?(r.children||(r.children=[]),r.children.push(h),h.children&&i.splice(e,1)):(t.push(h),i.splice(e,1))}return t}$_squarifyRow(e,t,i,s){const r=t.width*t.height,o=t.width,n=t.height;let l=t.x,a=t.y,d=Number.MAX_VALUE,u=0;const c=[];if(2===e.length){return(1===i?o>n:o>=n)?e.forEach((e=>{e.setArea(l,a,o*e.value/s,n),l+=e.width})):e.forEach((e=>{e.setArea(l,a,o,n*e.value/s),a+=e.height})),0}for(;e.length>0;){let p,_,g,f,w;if(p=e.shift(),u+=p.value,f=u*r/s,1===i?(_=f/n,g=n*p.value/u):(g=f/o,_=o*p.value/u),w=h(_/g,g/_),e.length>0&&w>d)return e.unshift(p),u-=p.value,f=r*u/s,1===i?(g=n,_=f/g):(_=o,g=f/_),c.forEach((e=>{1===i?(e.setArea(l,a,_,n*e.value/u),a+=e.height):(e.setArea(l,a,o*e.value/u,g),l+=e.width)})),1===i?(t.x+=_,t.width-=_):(t.y+=g,t.height-=g),s-u;if(0===e.length)return f=r*u/s,1===i?(g=n,_=f/g):(_=o,g=f/_),c.push(p),c.forEach((e=>{1===i?(e.setArea(l,a,_,n*e.value/u),a+=e.height):(e.setArea(l,a,o*e.value/u,g),l+=e.width)})),0;d=w,c.push(p)}}$_squarify(e,t,i,s){const h=e.slice(0);let r=i?1:0,o=e.reduce(((e,t)=>e+t.value),0);do{o=this.$_squarifyRow(h,t,r,o),s&&(r=1-r)}while(o>0);e.forEach((e=>{e.children&&this.$_squarify(e.children,e.getArea(),!i,!0)}))}squarify(e,t,i,s){this.$_squarify(e,{x:0,y:0,width:t,height:i},s,!0)}strip(e,t,i,s){this.$_squarify(e,{x:0,y:0,width:t,height:i},s,!1)}$_sliceNext(e,t,i,s){if(e.x=t.x,e.y=t.y,1===i){const i=t.height*e.value/s;e.width=t.width,e.height=i,t.y+=i,t.height-=i}else{const i=t.width*e.value/s;e.height=t.height,e.width=i,t.x+=i,t.width-=i}e.children&&this.$_slice(e.children,e.getArea(),0===i,!0)}$_slice(e,t,i,s){let h=e.reduce(((e,t)=>e+t.value),0),r=i?1:0;e.forEach((e=>{this.$_sliceNext(e,t,r,h),h-=e.value,s&&(r=1-r)}))}slice(e,t,i,s){this.$_slice(e,{x:0,y:0,width:t,height:i},s,!1)}sliceDice(e,t,i,s){this.$_slice(e,{x:0,y:0,width:t,height:i},s,!0)}}f.type=i,f.defaults=e(s.defaults,{idField:"id",groupField:"group",algorithm:"squarify",alternate:!0,groupMode:!0});class w extends p{constructor(e){super(e,a.POINT_CLASS)}get point(){return this.node.point}render(e){if(1!==e){const t=Object.assign({},this.node);t.width*=e,t.height*=e,t.x+=(this.node.width-t.width)/2,t.y+=(this.node.height-t.height)/2,this.setRect(t)}else this.setRect(this.node)}}class x extends a{constructor(e){super(e,"rct-treemap-series"),this._nodeViews=new d(this._pointContainer,w)}_lazyPrepareLabels(){return!0}_getPointPool(){return this._nodeViews}_prepareSeries(e,t){}_renderSeries(e,t){this._pointContainer.invert(this._inverted,t),this._rootView?this.$_renderGroups(e,t):this.$_renderLeafs(e,t)}_runShowEffect(e){e&&u.grow(this)}_doViewRateChanged(e){this._rootView?this.$_renderGroups(this.width,this.height):this.$_renderLeafs(this.width,this.height)}$_renderLeafs(e,t){const i=this.model,s=i._xAxisObj,h=i._yAxisObj,r=this._inverted;i.pointLabel;const o=this._getGrowRate(),n=this._labelViews(),l=r?e:t,a=r?t:e,{roots:d,leafs:u}=i.buildMap(a,l),p=new c(i._calcedColor),_=[{fill:""}];let g;null==n||n.prepare(this.doc,this);const f=this._labelContainer._textAlign;this._nodeViews.prepare(u.length,((e,t,d)=>{const w=u[t],x=w.point,y=w.parent;let v=p;y&&(!y._color&&y.point.color?v=y._color=new c(y.point.color):y._color&&(v=y._color)),e.node=w,_[0].fill=v.brighten(w.index/d).toString(),this._setPointStyle(e,i,x,_),s.options.reversed&&(w.x=a-w.x-w.width),h.options.reversed&&(w.y=l-w.y-w.height),r&&(w.y=w.y-l),e.render(o);let $=w.x+w.width/2,b=w.y+w.height/2;if(x.xPos=r?-w.y-w.height/2:$,x.yPos=r?a-w.x-w.width/2:b,n&&(g=n.get(x,0))){g.setContrast(e.dom).layout(f);const t=g.getBBox();g.setVis(w.width>=t.height&&w.height>=t.height)&&(r?($=-w.y-w.height/2-t.width/2,b=a-w.x-(w.width+t.height)/2):($-=t.width/2,b-=t.height/2),g.trans($,b),this._layoutLabelRotation(g))}}))}$_renderGroups(e,t){}}function y(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(f),e.SeriesView.register([f,x]))}export{f as TreemapSeries,y as default};