highcharts
Version:
JavaScript charting framework
13 lines • 9.36 kB
JavaScript
/**
* Highcharts JS v12.5.0 (2026-01-12)
* Organization chart series type
* @module highcharts/modules/organization
* @requires highcharts
* @requires highcharts/modules/sankey
*
* (c) 2019-2026 Highsoft AS
* Author: Torstein Honsi
*
* A commercial license may be required depending on use.
* See www.highcharts.com/license
*/import*as t from"../highcharts.js";var e={};e.n=t=>{var i=t&&t.__esModule?()=>t.default:()=>t;return e.d(i,{a:i}),i},e.d=(t,i)=>{for(var n in i)e.o(i,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},e.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);let i=t.default;var n=e.n(i);let s=t.default.SeriesRegistry;var a=e.n(s);let{sankey:{prototype:{pointClass:o}}}=a().seriesTypes,{defined:r,find:h,pick:l}=n(),d=class extends o{constructor(t,e,i){super(t,e,i),this.isNode||(this.dataLabelOnNull=!0,this.formatPrefix="link")}getSum(){return 1}setNodeColumn(){super.setNodeColumn();let t=this,e=t.getFromNode().fromNode;if(!r(t.options.column)&&0!==t.linksTo.length&&e&&"hanging"===e.options.layout){let i=-1,n;t.options.layout=l(t.options.layout,"hanging"),t.hangsFrom=e,h(e.linksFrom,(e,n)=>{let s=e.toNode===t;return s&&(i=n),s});for(let s=0;s<e.linksFrom.length;++s)(n=e.linksFrom[s]).toNode.id===t.id?s=e.linksFrom.length:i+=function t(e){let i=e.linksFrom.length;return e.linksFrom.forEach(e=>{e.id===e.toNode.linksTo[0].id?i+=t(e.toNode):i--}),i}(n.toNode);t.column=(t.column||0)+i}}};function p(t,e){let i=[];for(let n=0;n<t.length;n++){let s=t[n][1],a=t[n][2];if("number"==typeof s&&"number"==typeof a)if(0===n)i.push(["M",s,a]);else if(n===t.length-1)i.push(["L",s,a]);else if(e){let o=t[n-1],r=t[n+1];if(o&&r){let t=o[1],n=o[2],h=r[1],l=r[2];if("number"==typeof t&&"number"==typeof h&&"number"==typeof n&&"number"==typeof l&&t!==h&&n!==l){let o=t<h?1:-1,r=n<l?1:-1;i.push(["L",s-o*Math.min(Math.abs(s-t),e),a-r*Math.min(Math.abs(a-n),e)],["C",s,a,s,a,s+o*Math.min(Math.abs(s-h),e),a+r*Math.min(Math.abs(a-l),e)])}}}else i.push(["L",s,a])}return i}let g=t.default.SVGElement;var u=e.n(g);let{deg2rad:f}=n(),{addEvent:c,merge:y,uniqueKey:k,defined:m,extend:b}=n();function x(t,e){e=y(!0,{enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},e);let i=this.renderer.url,n=this.text||this,s=n.textPath,{attributes:a,enabled:o}=e;if(t=t||s&&s.path,s&&s.undo(),t&&o){let e=c(n,"afterModifyTree",e=>{if(t&&o){let s=t.attr("id");s||t.attr("id",s=k());let o={x:0,y:0};m(a.dx)&&(o.dx=a.dx,delete a.dx),m(a.dy)&&(o.dy=a.dy,delete a.dy),n.attr(o),this.attr({transform:""}),this.box&&(this.box=this.box.destroy());let r=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:"textPath",attributes:b(a,{"text-anchor":a.textAnchor,href:`${i}#${s}`}),children:r}}});n.textPath={path:t,undo:e}}else n.attr({dx:0,dy:0}),delete n.textPath;return this.added&&(n.textCache="",this.renderer.buildText(n)),this}function A(t){let e=t.bBox,i=this.element?.querySelector("textPath");if(i){let t=[],{b:n,h:s}=this.renderer.fontMetrics(this.element),a=s-n,o=RegExp('(<tspan>|<tspan(?!\\sclass="highcharts-br")[^>]*>|<\\/tspan>)',"g"),r=i.innerHTML.replace(o,"").split(/<tspan class="highcharts-br"[^>]*>/),h=r.length,l=(t,e)=>{let{x:s,y:o}=e,r=(i.getRotationOfChar(t)-90)*f,h=Math.cos(r),l=Math.sin(r);return[[s-a*h,o-a*l],[s+n*h,o+n*l]]};for(let e=0,n=0;n<h;n++){let s=r[n].length;for(let a=0;a<s;a+=5)try{let s=e+a+n,[o,r]=l(s,i.getStartPositionOfChar(s));0===a?(t.push(r),t.push(o)):(0===n&&t.unshift(r),n===h-1&&t.push(o))}catch{break}e+=s-1;try{let s=e+n,a=i.getEndPositionOfChar(s),[o,r]=l(s,a);t.unshift(r),t.unshift(o)}catch{break}}t.length&&t.push(t[0].slice()),e.polygon=t}return e}function L(t){let e=t.labelOptions,i=t.point,n=e[i.formatPrefix+"TextPath"]||e.textPath;n&&!e.useHTML&&(this.setTextPath(i.getDataLabelPath?.(this)||i.graphic,n),i.dataLabelPath&&!n.enabled&&(i.dataLabelPath=i.dataLabelPath.destroy()))}let{sankey:M}=a().seriesTypes,{css:v,crisp:w,extend:N,isNumber:O,merge:P,pick:T}=n();({compose:function(t){c(t,"afterGetBBox",A),c(t,"beforeAddingDataLabel",L);let e=t.prototype;e.setTextPath||(e.setTextPath=x)}}).compose(u());class W extends M{alignDataLabel(t,e,i){let n=t.shapeArgs,s=e.text;if(i.useHTML&&n){let t=this.options.borderWidth+2*this.options.dataLabels.padding,i=n.width||0,a=n.height||0;this.chart.inverted&&(i=a,a=n.width||0),a-=t,i-=t,s.foreignObject?.attr({x:0,y:0,width:i,height:a}),v(s.element.parentNode,{width:i+"px",height:a+"px"}),v(s.element,{left:0,top:0,width:"100%",height:"100%",overflow:"hidden"}),e.getBBox=()=>({width:i,height:a,x:0,y:0}),e.width=i,e.height=a}super.alignDataLabel.apply(this,arguments)}createNode(t){let e=super.createNode.call(this,t);return e.getSum=()=>1,e}pointAttribs(t,e){let i=M.prototype.pointAttribs.call(this,t,e),n=t.isNode?t.level:t.fromNode.level,s=this.mapOptionsToLevel[n||0]||{},a=t.options,o=s.states&&s.states[e]||{},r=T(o.borderRadius,a.borderRadius,s.borderRadius,this.options.borderRadius),h=T(o.linkColor,a.linkColor,s.linkColor,this.options.linkColor,o.link&&o.link.color,a.link&&a.link.color,s.link&&s.link.color,this.options.link&&this.options.link.color),l=T(o.linkLineWidth,a.linkLineWidth,s.linkLineWidth,this.options.linkLineWidth,o.link&&o.link.lineWidth,a.link&&a.link.lineWidth,s.link&&s.link.lineWidth,this.options.link&&this.options.link.lineWidth),d=T(o.linkOpacity,a.linkOpacity,s.linkOpacity,this.options.linkOpacity,o.link&&o.link.linkOpacity,a.link&&a.link.linkOpacity,s.link&&s.link.linkOpacity,this.options.link&&this.options.link.linkOpacity);return t.isNode?O(r)&&(i.r=r):(i.stroke=h,i["stroke-width"]=l,i.opacity=d,delete i.fill),i}translateLink(t){let e=this.chart,i=this.options,n=t.fromNode,s=t.toNode,a=T(i.linkLineWidth,i.link.lineWidth,0),o=T(i.link.offset,.5),r=T(t.options.link&&t.options.link.type,i.link.type);if(n.shapeArgs&&s.shapeArgs){let h=i.hangingIndent,l="right"===i.hangingSide,d=s.options.offset,g=/%$/.test(d)&&parseInt(d,10),u=e.inverted,f=w((n.shapeArgs.x||0)+(n.shapeArgs.width||0),a),c=w((n.shapeArgs.y||0)+(n.shapeArgs.height||0)/2,a),y=w(s.shapeArgs.x||0,a),k=w((s.shapeArgs.y||0)+(s.shapeArgs.height||0)/2,a),m;if(u&&(f-=n.shapeArgs.width||0,y+=s.shapeArgs.width||0),m=this.colDistance?w(y+(u?1:-1)*(this.colDistance-this.nodeWidth)/2,a):w((y+f)/2,a),g&&(g>=50||g<=-50)&&(m=y=w(y+(u?-.5:.5)*(s.shapeArgs.width||0),a),k=s.shapeArgs.y||0,g>0&&(k+=s.shapeArgs.height||0)),s.hangsFrom===n&&(e.inverted?(c=l?w((n.shapeArgs.y||0)+h/2,a):w((n.shapeArgs.y||0)+(n.shapeArgs.height||0)-h/2,a),k=l?(s.shapeArgs.y||0)+h/2:(s.shapeArgs.y||0)+(s.shapeArgs.height||0)):c=w((n.shapeArgs.y||0)+h/2,a),m=y=w((s.shapeArgs.x||0)+(s.shapeArgs.width||0)/2,a)),t.plotX=m,t.plotY=(c+k)/2,t.shapeType="path","straight"===r)t.shapeArgs={d:[["M",f,c],["L",y,k]]};else if("curved"===r){let e=Math.abs(y-f)*o*(u?-1:1);t.shapeArgs={d:[["M",f,c],["C",f+e,c,y-e,k,y,k]]}}else t.shapeArgs={d:p([["M",f,c],["L",m,c],["L",m,k],["L",y,k]],T(i.linkRadius,i.link.radius))};t.dlBox={x:(f+y)/2,y:(c+k)/2,height:a,width:0}}}translateNode(t,e){super.translateNode(t,e);let i=this.chart,n=this.options,s=Math.max(Math.round(t.getSum()*this.translationFactor),n.minLinkWidth||0),a="right"===n.hangingSide,o=n.hangingIndent||0,r=n.hangingIndentTranslation,h=n.minNodeLength||10,l=Math.round(this.nodeWidth),d=t.shapeArgs,p=i.inverted?-1:1,g=t.hangsFrom;if(g)if("cumulative"===r)for(d.height-=o,i.inverted&&!a&&(d.y-=p*o);g;)d.y+=(a?1:p)*o,g=g.hangsFrom;else if("shrink"===r)for(;g&&d.height>o+h;)d.height-=o,(!i.inverted||a)&&(d.y+=o),g=g.hangsFrom;else d.height-=o,(!i.inverted||a)&&(d.y+=o);t.nodeHeight=i.inverted?d.width:d.height,t.shapeArgs&&!t.hangsFrom&&(t.shapeArgs=P(t.shapeArgs,{x:(t.shapeArgs.x||0)+l/2-(t.shapeArgs.width||0)/2,y:(t.shapeArgs.y||0)+s/2-(t.shapeArgs.height||0)/2}))}drawDataLabels(){let t=this.options.dataLabels;if(t.linkTextPath&&t.linkTextPath.enabled)for(let t of this.points)t.options.dataLabels=P(t.options.dataLabels,{useHTML:!1});super.drawDataLabels()}}W.defaultOptions=P(M.defaultOptions,{borderColor:"#666666",borderRadius:3,link:{color:"#666666",lineWidth:1,radius:10,type:"orthogonal"},borderWidth:1,dataLabels:{nodeFormatter:function(){let t={width:"100%",height:"100%",display:"flex","flex-direction":"row","align-items":"center","justify-content":"center"},e={"max-height":"100%","border-radius":"50%"},i={width:"100%",padding:0,"text-align":"center","white-space":"normal"};function n(t){return Object.keys(t).reduce(function(e,i){return e+i+":"+t[i]+";"},'style="')+'"'}let{description:s,image:a,title:o}=this.point;a&&(e["max-width"]="30%",i.width="70%"),this.series.chart.renderer.forExport&&(t.display="block",i.position="absolute",i.left=a?"30%":0,i.top=0);let r="<div "+n(t)+">";return a&&(r+='<img src="'+a+'" '+n(e)+">"),r+="<div "+n(i)+">",this.point.name&&(r+="<h4 "+n({margin:0})+">"+this.point.name+"</h4>"),o&&(r+="<p "+n({margin:0})+">"+(o||"")+"</p>"),s&&(r+="<p "+n({opacity:.75,margin:"5px"})+">"+s+"</p>"),r+="</div></div>"},style:{fontWeight:"normal",fontSize:"0.9em",textAlign:"left"},useHTML:!0,linkTextPath:{attributes:{startOffset:"95%",textAnchor:"end"}}},hangingIndent:20,hangingIndentTranslation:"inherit",hangingSide:"left",minNodeLength:10,nodeWidth:50,tooltip:{nodeFormat:"{point.name}<br>{point.title}<br>{point.description}"}}),N(W.prototype,{pointClass:d}),a().registerSeriesType("organization",W);let F=n();export{F as default};