realchart
Version:
Wooritech charting library
8 lines (6 loc) • 6.79 kB
JavaScript
/**
* RealChart Treemap v1.3.17
* Copyright (C) 2023-2025 WooriTech Inc.
* All Rights Reserved.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("realchart")):"function"==typeof define&&define.amd?define(["exports","realchart"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RealChartTreemap={},e.RealChart)}(this,(function(e,t){"use strict";function i(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var s=i(t);class r extends t.DataPoint{_assignTo(e){return t.assignObj(super._assignTo(e),{id:this.id,group:this.group})}_readArray(e,i){if(i.length<=2)this.isNull=!0;else{const s=i.length>3?1:0;s>0&&(this.x=i[t.pickNum(e.options.xField,0)]),this.y=i[t.pickNum(e.options.yField,0+s)],this.id=t.toStr(i[t.pickNum(e.options.idField,1+s)]),this.group=t.toStr(i[t.pickNum(e.options.groupField,2+s)])}}_readObject(e,i){super._readObject(e,i),this.id=t.toStr(i[e.options.idField]),this.group=t.toStr(i[e.options.groupField])}}class h extends t.ChartItem{constructor(e){super(e.chart),this.level=e,this.floating=!0}}h.defaults=t.extend(t.ChartItem.defaults,{visible:!1});class o{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 n extends t.Series{constructor(){super(...arguments),this._map={},this._levels=1}buildMap(e,i){function s(e){if(e.children){let i=0;e.children.forEach(((e,t)=>{s(e),i+=e.value})),e.value=i,e.children=e.children.sort(((e,t)=>t.value-e.value)),e.children.forEach(((e,t)=>{e.index=t})),o=t.maxv(o,e.level()+1+1)}else h.push(e),e.value=e.point?e.point.yValue:0}const r="vertical"===this._op.startDir||i>e,h=this._leafs=[];let o=1;return this._roots.forEach(((e,t)=>{s(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,i,r),this._levels=o,{roots:this._roots,leafs:this._leafs}}needAxes(){return!1}canMixWith(e){return!1}_createPoint(e){return new r(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 r=new o(e);e.id&&(s[e.id]=r),e.group?i.push(r):t.push(r)}}));for(let e=i.length-1;e>=0;e--){const r=i[e],h=s[r.point.group];(r.parent=h)?(h.children||(h.children=[]),h.children.push(r),r.children&&i.splice(e,1)):(t.push(r),i.splice(e,1))}return t}$_squarifyRow(e,i,s,r){const h=i.width*i.height,o=i.width,n=i.height;let l=i.x,a=i.y,d=Number.MAX_VALUE,u=0;const c=[];if(2===e.length){return(1===s?o>n:o>=n)?e.forEach((e=>{e.setArea(l,a,o*e.value/r,n),l+=e.width})):e.forEach((e=>{e.setArea(l,a,o,n*e.value/r),a+=e.height})),0}for(;e.length>0;){let p,g,f,_,w;if(p=e.shift(),u+=p.value,_=u*h/r,1===s?(g=_/n,f=n*p.value/u):(f=_/o,g=o*p.value/u),w=t.maxv(g/f,f/g),e.length>0&&w>d)return e.unshift(p),u-=p.value,_=h*u/r,1===s?(f=n,g=_/f):(g=o,f=_/g),c.forEach((e=>{1===s?(e.setArea(l,a,g,n*e.value/u),a+=e.height):(e.setArea(l,a,o*e.value/u,f),l+=e.width)})),1===s?(i.x+=g,i.width-=g):(i.y+=f,i.height-=f),r-u;if(0===e.length)return _=h*u/r,1===s?(f=n,g=_/f):(g=o,f=_/g),c.push(p),c.forEach((e=>{1===s?(e.setArea(l,a,g,n*e.value/u),a+=e.height):(e.setArea(l,a,o*e.value/u,f),l+=e.width)})),0;d=w,c.push(p)}}$_squarify(e,t,i,s){const r=e.slice(0);let h=i?1:0,o=e.reduce(((e,t)=>e+t.value),0);do{o=this.$_squarifyRow(r,t,h,o),s&&(h=1-h)}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 r=e.reduce(((e,t)=>e+t.value),0),h=i?1:0;e.forEach((e=>{this.$_sliceNext(e,t,h,r),r-=e.value,s&&(h=1-h)}))}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)}}n.type=t.TreemapSeriesType,n.defaults=t.extend(t.Series.defaults,{idField:"id",groupField:"group",algorithm:"squarify",alternate:!0,groupMode:!0});class l extends t.RectElement{constructor(e){super(e,t.SeriesView.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 a extends t.SeriesView{constructor(e){super(e,"rct-treemap-series"),this._nodeViews=new t.ElementPool(this._pointContainer,l)}_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&&t.SeriesAnimation.grow(this)}_doViewRateChanged(e){this._rootView?this.$_renderGroups(this.width,this.height):this.$_renderLeafs(this.width,this.height)}$_renderLeafs(e,i){const s=this.model,r=s._xAxisObj,h=s._yAxisObj,o=this._inverted;s.pointLabel;const n=this._getGrowRate(),l=this._labelViews(),a=o?e:i,d=o?i:e,{roots:u,leafs:c}=s.buildMap(d,a),p=new t.Color(s._calcedColor),g=[{fill:""}];let f;null==l||l.prepare(this.doc,this);const _=this._labelContainer._textAlign;this._nodeViews.prepare(c.length,((e,i,u)=>{const w=c[i],y=w.point,x=w.parent;let v=p;x&&(!x._color&&x.point.color?v=x._color=new t.Color(x.point.color):x._color&&(v=x._color)),e.node=w,g[0].fill=v.brighten(w.index/u).toString(),this._setPointStyle(e,s,y,g),r.options.reversed&&(w.x=d-w.x-w.width),h.options.reversed&&(w.y=a-w.y-w.height),o&&(w.y=w.y-a),e.render(n);let b=w.x+w.width/2,m=w.y+w.height/2;if(y.xPos=o?-w.y-w.height/2:b,y.yPos=o?d-w.x-w.width/2:m,l&&(f=l.get(y,0))){f.setContrast(e.dom).layout(_);const t=f.getBBox();f.setVis(w.width>=t.height&&w.height>=t.height)&&(o?(b=-w.y-w.height/2-t.width/2,m=d-w.x-(w.width+t.height)/2):(b-=t.width/2,m-=t.height/2),f.trans(b,m))}}))}$_renderGroups(e,t){}}function d(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(n),e.SeriesView.register([n,a]))}d(s),e.TreemapSeries=n,e.default=d,Object.defineProperty(e,"__esModule",{value:!0})}));