highcharts
Version:
JavaScript charting framework
15 lines • 10.6 kB
JavaScript
!/**
* Highcharts JS v13.0.1 (2026-08-17)
* Organization chart series type
* @module highcharts/modules/organization
* @requires highcharts
* @requires highcharts/modules/sankey
*
* (c) 2019-2026 Highsoft AS
* Author: Torstein Hønsi
*
* A commercial license may be required depending on use,
* see www.highcharts.com/license
*/function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(t._Highcharts,t._Highcharts.SeriesRegistry,t._Highcharts.SVGElement):"function"==typeof define&&define.amd?define("highcharts/modules/organization",["highcharts/highcharts"],function(t){return e(t,t.SeriesRegistry,t.SVGElement)}):"object"==typeof exports?exports["highcharts/modules/organization"]=e(t._Highcharts,t._Highcharts.SeriesRegistry,t._Highcharts.SVGElement):t.Highcharts=e(t.Highcharts,t.Highcharts.SeriesRegistry,t.Highcharts.SVGElement)}("u"<typeof window?this:window,(t,e,i)=>(()=>{"use strict";var s,r={28(t){t.exports=i},512(t){t.exports=e},944(e){e.exports=t}};let n={};function a(t){let e=n[t];if(void 0!==e)return e.exports;let i=n[t]={exports:{}};return r[t](i,i.exports,a),i.exports}a.n=t=>{let e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{if(Array.isArray(e))for(var i=0;i<e.length;){var s=e[i++],r=e[i++];a.o(t,s)?0===r&&i++:0===r?Object.defineProperty(t,s,{enumerable:!0,value:e[i++]}):Object.defineProperty(t,s,{enumerable:!0,get:r})}else for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);let o={};a.d(o,{default:()=>A});var h=a(944),l=a.n(h),d=a(512),p=a.n(d);let{sankey:{prototype:{pointClass:g}}}=p().seriesTypes,c=class extends g{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(!(0,h.defined)(t.options.column)&&0!==t.linksTo.length&&e&&"hanging"===e.options.layout){let i=-1,s;t.options.layout=(0,h.pick)(t.options.layout,"hanging"),t.hangsFrom=e,(0,h.find)(e.linksFrom,(e,s)=>{let r=e.toNode===t;return r&&(i=s),r});for(let r=0;r<e.linksFrom.length;++r)(s=e.linksFrom[r]).toNode.id===t.id?r=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}(s.toNode);t.column=(t.column||0)+i}}};function u(t,e){let i=[];for(let s=0;s<t.length;s++){let r=t[s][1],n=t[s][2];if("number"==typeof r&&"number"==typeof n)if(0===s)i.push(["M",r,n]);else if(s===t.length-1)i.push(["L",r,n]);else if(e){let a=t[s-1],o=t[s+1];if(a&&o){let t=a[1],s=a[2],h=o[1],l=o[2];if("number"==typeof t&&"number"==typeof h&&"number"==typeof s&&"number"==typeof l&&t!==h&&s!==l){let a=t<h?1:-1,o=s<l?1:-1;i.push(["L",r-a*Math.min(Math.abs(r-t),e),n-o*Math.min(Math.abs(n-s),e)],["C",r,n,r,n,r+a*Math.min(Math.abs(r-h),e),n+o*Math.min(Math.abs(n-l),e)])}}}else i.push(["L",r,n])}return i}var f=a(28),y=a.n(f);let{composed:m,deg2rad:x}=l(),{sankey:b}=p().seriesTypes;s=y(),(0,h.pushUnique)(m,"TextPath")&&((0,h.addEvent)(s,"afterGetBBox",function(t){let e=t.bBox,i=this.element?.querySelector("textPath");if(i){let t=[],{b:s,h:r}=this.renderer.fontMetrics(this.element),n=r-s,a=RegExp('(<tspan>|<tspan(?!\\sclass="highcharts-br")[^>]*>|<\\/tspan>)',"g"),o=i.innerHTML.replace(a,"").split(/<tspan class="highcharts-br"[^>]*>/),h=o.length,l=(t,e)=>{let{x:r,y:a}=e,o=(i.getRotationOfChar(t)-90)*x,h=Math.cos(o),l=Math.sin(o);return[[r-n*h,a-n*l],[r+s*h,a+s*l]]};for(let e=0,s=0;s<h;s++){let r=o[s].length;for(let n=0;n<r;n+=5)try{let r=e+n+s,[a,o]=l(r,i.getStartPositionOfChar(r));0===n?(t.push(o),t.push(a)):(0===s&&t.unshift(o),s===h-1&&t.push(a))}catch{break}e+=r-1;try{let r=e+s,n=i.getEndPositionOfChar(r),[a,o]=l(r,n);t.unshift(o),t.unshift(a)}catch{break}}t.length&&t.push(t[0].slice()),e.polygon=t}return e}),(0,h.addEvent)(s,"beforeAddingDataLabel",function(t){let e=t.labelOptions,i=t.point,s=e[i.formatPrefix+"TextPath"]||e.textPath;s&&!e.useHTML&&(this.setTextPath(i.getDataLabelPath?.(this)||i.graphic,s),i.dataLabelPath&&!s.enabled&&(i.dataLabelPath=i.dataLabelPath.destroy()))}),s.prototype.setTextPath=s.prototype.setTextPath??function(t,e){let i=this.renderer.url,s=this.text||this,r=s.textPath,{attributes:n,enabled:a}=(0,h.merge)({enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},e);if(t=t||r&&r.path,r?.undo(),t&&a){let e=(0,h.addEvent)(s,"afterModifyTree",e=>{if(t&&a){let r=t.attr("id");r||t.attr("id",r=(0,h.uniqueKey)());let a={x:0,y:0};(0,h.defined)(n.dx)&&(a.dx=n.dx,delete n.dx),(0,h.defined)(n.dy)&&(a.dy=n.dy,delete n.dy),s.attr(a),this.attr({transform:""}),this.box&&(this.box=this.box.destroy());let o=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:"textPath",attributes:(0,h.extend)(n,{"text-anchor":n.textAnchor,href:`${i}#${r}`}),children:o}}});s.textPath={path:t,undo:e}}else s.attr({dx:0,dy:0}),delete s.textPath;return this.added&&(s.textCache="",this.renderer.buildText(s)),this});class k extends b{alignDataLabel(t,e,i){let s=t.shapeArgs,r=e.text;if(i.useHTML&&s){let t=(0,h.splat)(this.options.dataLabels.padding||0),i=this.options.borderWidth||0,n=i+2*t[3%t.length],a=i+2*t[0%t.length],o=s.width||0,l=s.height||0;this.chart.inverted&&(o=l,l=s.width||0),o-=n,l-=a,r.foreignObject?.attr({x:0,y:0,width:o,height:l}),(0,h.css)(r.element.parentNode,{width:o+"px",height:l+"px"}),(0,h.css)(r.element,{left:0,top:0,width:"100%",height:"100%",overflow:"hidden"}),e.getBBox=()=>({width:o,height:l,x:0,y:0}),e.width=o,e.height=l}super.alignDataLabel.apply(this,arguments)}createNode(t){let e=super.createNode.call(this,t);return e.getSum=()=>1,e}pointAttribs(t,e){let i=b.prototype.pointAttribs.call(this,t,e),s=t.isNode?t.level:t.fromNode.level,r=this.mapOptionsToLevel[s||0]||{},n=t.options,a=r.states?.[e||"normal"]||{},o=a.borderRadius??n.borderRadius??r.borderRadius??this.options.borderRadius,l=a.linkColor??n.linkColor??r.linkColor??this.options.linkColor??a.link?.color??n.link?.color??r.link?.color??this.options.link?.color,d=a.linkLineWidth??n.linkLineWidth??r.linkLineWidth??this.options.linkLineWidth??a.link?.lineWidth??n.link?.lineWidth??r.link?.lineWidth??this.options.link?.lineWidth,p=a.linkOpacity??n.linkOpacity??r.linkOpacity??this.options.linkOpacity??a.link?.linkOpacity??n.link?.linkOpacity??r.link?.linkOpacity??this.options.link?.linkOpacity;return t.isNode?(0,h.isNumber)(o)&&(i.r=o):(i.stroke=l,i["stroke-width"]=d,i.opacity=p,delete i.fill),i}translateLink(t){let{chart:e,options:i}=this,s=t.fromNode,r=t.toNode,n=i.linkLineWidth??i.link.lineWidth??0,a=i.link.offset??.5,o=t.options.link?.type??i.link.type;if(s.shapeArgs&&r.shapeArgs){let l=i.hangingIndent||0,d="right"===i.hangingSide,p=r.options.offset,g=/%$/.test(p)&&parseInt(p,10),c=e.inverted,f=(0,h.crisp)((s.shapeArgs.x||0)+(s.shapeArgs.width||0),n),y=(0,h.crisp)((s.shapeArgs.y||0)+(s.shapeArgs.height||0)/2,n),m=(0,h.crisp)(r.shapeArgs.x||0,n),x=(0,h.crisp)((r.shapeArgs.y||0)+(r.shapeArgs.height||0)/2,n),b;if(c&&(f-=s.shapeArgs.width||0,m+=r.shapeArgs.width||0),b=this.colDistance?(0,h.crisp)(m+(c?1:-1)*(this.colDistance-this.nodeWidth)/2,n):(0,h.crisp)((m+f)/2,n),g&&(g>=50||g<=-50)&&(b=m=(0,h.crisp)(m+(c?-.5:.5)*(r.shapeArgs.width||0),n),x=r.shapeArgs.y||0,g>0&&(x+=r.shapeArgs.height||0)),r.hangsFrom===s&&(e.inverted?(y=d?(0,h.crisp)((s.shapeArgs.y||0)+l/2,n):(0,h.crisp)((s.shapeArgs.y||0)+(s.shapeArgs.height||0)-l/2,n),x=d?(r.shapeArgs.y||0)+l/2:(r.shapeArgs.y||0)+(r.shapeArgs.height||0)):y=(0,h.crisp)((s.shapeArgs.y||0)+l/2,n),b=m=(0,h.crisp)((r.shapeArgs.x||0)+(r.shapeArgs.width||0)/2,n)),t.plotX=b,t.plotY=(y+x)/2,t.shapeType="path","straight"===o)t.shapeArgs={d:[["M",f,y],["L",m,x]]};else if("curved"===o){let e=Math.abs(m-f)*a*(c?-1:1);t.shapeArgs={d:[["M",f,y],["C",f+e,y,m-e,x,m,x]]}}else t.shapeArgs={d:u([["M",f,y],["L",b,y],["L",b,x],["L",m,x]],i.linkRadius??i.link.radius)};t.dlBox={x:(f+m)/2,y:(y+x)/2,height:n,width:0}}}translateNode(t,e){super.translateNode(t,e);let i=this.chart,s=this.options,r=Math.max(Math.round(t.getSum()*this.translationFactor),s.minLinkWidth||0),n="right"===s.hangingSide,a=s.hangingIndent||0,o=s.hangingIndentTranslation,l=s.minNodeLength||10,d=Math.round(this.nodeWidth),p=t.shapeArgs,g=i.inverted?-1:1,c=t.hangsFrom;if(c)if("cumulative"===o)for(p.height-=a,i.inverted&&!n&&(p.y-=g*a);c;)p.y+=(n?1:g)*a,c=c.hangsFrom;else if("shrink"===o)for(;c&&p.height>a+l;)p.height-=a,(!i.inverted||n)&&(p.y+=a),c=c.hangsFrom;else p.height-=a,(!i.inverted||n)&&(p.y+=a);t.nodeHeight=i.inverted?p.width:p.height,t.shapeArgs&&!t.hangsFrom&&(t.shapeArgs=(0,h.merge)(t.shapeArgs,{x:(t.shapeArgs.x||0)+d/2-(t.shapeArgs.width||0)/2,y:(t.shapeArgs.y||0)+r/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=(0,h.merge)(t.options.dataLabels,{useHTML:!1});super.drawDataLabels()}}k.defaultOptions=(0,h.merge)(b.defaultOptions,{borderColor:"var(--highcharts-neutral-color-60)",borderRadius:3,link:{color:"var(--highcharts-neutral-color-60)",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 s(t){return Object.keys(t).reduce(function(e,i){return e+i+":"+t[i]+";"},'style="')+'"'}let{description:r,image:n,title:a}=this.point;n&&(e["max-width"]="30%",i.width="70%"),this.series.chart.renderer.forExport&&(t.display="block",i.position="absolute",i.left=n?"30%":0,i.top=0);let o="<div "+s(t)+">";return n&&(o+='<img src="'+n+'" '+s(e)+">"),o+="<div "+s(i)+">",this.point.name&&(o+="<h4 "+s({margin:0})+">"+this.point.name+"</h4>"),a?o+="<p "+s({margin:0})+">"+a+"</p>":o+=`<p aria-hidden="true"
style="line-height:0;margin:1px;font-size:1px;opacity:0"
>.</p>`,r&&(o+="<p "+s({opacity:.75,margin:"5px"})+">"+r+"</p>"),o+="</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}"}}),(0,h.extend)(k.prototype,{pointClass:c}),p().registerSeriesType("organization",k);let A=l();return o.default})());