organization.src.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. /**
  2. * @license Highcharts JS v9.1.1 (2021-06-04)
  3. * Organization chart series type
  4. *
  5. * (c) 2019-2021 Torstein Honsi
  6. *
  7. * License: www.highcharts.com/license
  8. */
  9. 'use strict';
  10. (function (factory) {
  11. if (typeof module === 'object' && module.exports) {
  12. factory['default'] = factory;
  13. module.exports = factory;
  14. } else if (typeof define === 'function' && define.amd) {
  15. define('highcharts/modules/organization', ['highcharts', 'highcharts/modules/sankey'], function (Highcharts) {
  16. factory(Highcharts);
  17. factory.Highcharts = Highcharts;
  18. return factory;
  19. });
  20. } else {
  21. factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
  22. }
  23. }(function (Highcharts) {
  24. var _modules = Highcharts ? Highcharts._modules : {};
  25. function _registerModule(obj, path, args, fn) {
  26. if (!obj.hasOwnProperty(path)) {
  27. obj[path] = fn.apply(null, args);
  28. }
  29. }
  30. _registerModule(_modules, 'Series/Organization/OrganizationPoint.js', [_modules['Core/Series/SeriesRegistry.js']], function (SeriesRegistry) {
  31. /* *
  32. *
  33. * Organization chart module
  34. *
  35. * (c) 2018-2021 Torstein Honsi
  36. *
  37. * License: www.highcharts.com/license
  38. *
  39. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  40. *
  41. * */
  42. var __extends = (this && this.__extends) || (function () {
  43. var extendStatics = function (d,
  44. b) {
  45. extendStatics = Object.setPrototypeOf ||
  46. ({ __proto__: [] } instanceof Array && function (d,
  47. b) { d.__proto__ = b; }) ||
  48. function (d,
  49. b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  50. return extendStatics(d, b);
  51. };
  52. return function (d, b) {
  53. extendStatics(d, b);
  54. function __() { this.constructor = d; }
  55. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  56. };
  57. })();
  58. var SankeyPoint = SeriesRegistry.seriesTypes.sankey.prototype.pointClass;
  59. /* *
  60. *
  61. * Class
  62. *
  63. * */
  64. var OrganizationPoint = /** @class */ (function (_super) {
  65. __extends(OrganizationPoint, _super);
  66. function OrganizationPoint() {
  67. /* *
  68. *
  69. * Properties
  70. *
  71. * */
  72. var _this = _super !== null && _super.apply(this,
  73. arguments) || this;
  74. _this.fromNode = void 0;
  75. _this.linksFrom = void 0;
  76. _this.linksTo = void 0;
  77. _this.options = void 0;
  78. _this.series = void 0;
  79. _this.toNode = void 0;
  80. return _this;
  81. /* eslint-enable valid-jsdoc */
  82. }
  83. /* *
  84. *
  85. * Functions
  86. *
  87. * */
  88. /* eslint-disable valid-jsdoc */
  89. /**
  90. * All nodes in an org chart are equal width.
  91. * @private
  92. */
  93. OrganizationPoint.prototype.getSum = function () {
  94. return 1;
  95. };
  96. return OrganizationPoint;
  97. }(SankeyPoint));
  98. /* *
  99. *
  100. * Default Export
  101. *
  102. * */
  103. return OrganizationPoint;
  104. });
  105. _registerModule(_modules, 'Series/Organization/OrganizationSeries.js', [_modules['Series/Organization/OrganizationPoint.js'], _modules['Core/Color/Palette.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (OrganizationPoint, palette, SeriesRegistry, U) {
  106. /* *
  107. *
  108. * Organization chart module
  109. *
  110. * (c) 2018-2021 Torstein Honsi
  111. *
  112. * License: www.highcharts.com/license
  113. *
  114. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  115. *
  116. * */
  117. var __extends = (this && this.__extends) || (function () {
  118. var extendStatics = function (d,
  119. b) {
  120. extendStatics = Object.setPrototypeOf ||
  121. ({ __proto__: [] } instanceof Array && function (d,
  122. b) { d.__proto__ = b; }) ||
  123. function (d,
  124. b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  125. return extendStatics(d, b);
  126. };
  127. return function (d, b) {
  128. extendStatics(d, b);
  129. function __() { this.constructor = d; }
  130. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  131. };
  132. })();
  133. var SankeySeries = SeriesRegistry.seriesTypes.sankey;
  134. var css = U.css,
  135. extend = U.extend,
  136. merge = U.merge,
  137. pick = U.pick,
  138. wrap = U.wrap;
  139. /* *
  140. *
  141. * Class
  142. *
  143. * */
  144. /**
  145. * @private
  146. * @class
  147. * @name Highcharts.seriesTypes.organization
  148. *
  149. * @augments Highcharts.seriesTypes.sankey
  150. */
  151. var OrganizationSeries = /** @class */ (function (_super) {
  152. __extends(OrganizationSeries, _super);
  153. function OrganizationSeries() {
  154. /* *
  155. *
  156. * Static Properties
  157. *
  158. * */
  159. var _this = _super !== null && _super.apply(this,
  160. arguments) || this;
  161. /* eslint-enable valid-jsdoc */
  162. /* *
  163. *
  164. * Properties
  165. *
  166. * */
  167. _this.data = void 0;
  168. _this.options = void 0;
  169. _this.points = void 0;
  170. return _this;
  171. /* eslint-enable valid-jsdoc */
  172. }
  173. /* *
  174. *
  175. * Static Functions
  176. *
  177. * */
  178. /* eslint-disable valid-jsdoc */
  179. /**
  180. * General function to apply corner radius to a path - can be lifted to
  181. * renderer or utilities if we need it elsewhere.
  182. * @private
  183. */
  184. OrganizationSeries.curvedPath = function (path, r) {
  185. var d = [];
  186. for (var i = 0; i < path.length; i++) {
  187. var x = path[i][1];
  188. var y = path[i][2];
  189. if (typeof x === 'number' && typeof y === 'number') {
  190. // moveTo
  191. if (i === 0) {
  192. d.push(['M', x, y]);
  193. }
  194. else if (i === path.length - 1) {
  195. d.push(['L', x, y]);
  196. // curveTo
  197. }
  198. else if (r) {
  199. var prevSeg = path[i - 1];
  200. var nextSeg = path[i + 1];
  201. if (prevSeg && nextSeg) {
  202. var x1 = prevSeg[1],
  203. y1 = prevSeg[2],
  204. x2 = nextSeg[1],
  205. y2 = nextSeg[2];
  206. // Only apply to breaks
  207. if (typeof x1 === 'number' &&
  208. typeof x2 === 'number' &&
  209. typeof y1 === 'number' &&
  210. typeof y2 === 'number' &&
  211. x1 !== x2 &&
  212. y1 !== y2) {
  213. var directionX = x1 < x2 ? 1 : -1,
  214. directionY = y1 < y2 ? 1 : -1;
  215. d.push([
  216. 'L',
  217. x - directionX * Math.min(Math.abs(x - x1), r),
  218. y - directionY * Math.min(Math.abs(y - y1), r)
  219. ], [
  220. 'C',
  221. x,
  222. y,
  223. x,
  224. y,
  225. x + directionX * Math.min(Math.abs(x - x2), r),
  226. y + directionY * Math.min(Math.abs(y - y2), r)
  227. ]);
  228. }
  229. }
  230. // lineTo
  231. }
  232. else {
  233. d.push(['L', x, y]);
  234. }
  235. }
  236. }
  237. return d;
  238. };
  239. /* *
  240. *
  241. * Functions
  242. *
  243. * */
  244. /* eslint-disable valid-jsdoc */
  245. OrganizationSeries.prototype.alignDataLabel = function (point, dataLabel, options) {
  246. // Align the data label to the point graphic
  247. if (options.useHTML) {
  248. var width_1 = point.shapeArgs.width,
  249. height_1 = point.shapeArgs.height,
  250. padjust = (this.options.borderWidth +
  251. 2 * this.options.dataLabels.padding);
  252. if (this.chart.inverted) {
  253. width_1 = height_1;
  254. height_1 = point.shapeArgs.width;
  255. }
  256. height_1 -= padjust;
  257. width_1 -= padjust;
  258. // Set the size of the surrounding div emulating `g`
  259. var text = dataLabel.text;
  260. if (text) {
  261. css(text.element.parentNode, {
  262. width: width_1 + 'px',
  263. height: height_1 + 'px'
  264. });
  265. // Set properties for the span emulating `text`
  266. css(text.element, {
  267. left: 0,
  268. top: 0,
  269. width: '100%',
  270. height: '100%',
  271. overflow: 'hidden'
  272. });
  273. }
  274. // The getBBox function is used in `alignDataLabel` to align
  275. // inside the box
  276. dataLabel.getBBox = function () {
  277. return {
  278. width: width_1,
  279. height: height_1
  280. };
  281. };
  282. // Overwrite dataLabel dimensions (#13100).
  283. dataLabel.width = width_1;
  284. dataLabel.height = height_1;
  285. }
  286. _super.prototype.alignDataLabel.apply(this, arguments);
  287. };
  288. OrganizationSeries.prototype.createNode = function (id) {
  289. var node = _super.prototype.createNode.call(this,
  290. id);
  291. // All nodes in an org chart are equal width
  292. node.getSum = function () {
  293. return 1;
  294. };
  295. return node;
  296. };
  297. OrganizationSeries.prototype.createNodeColumn = function () {
  298. var column = _super.prototype.createNodeColumn.call(this);
  299. // Wrap the offset function so that the hanging node's children are
  300. // aligned to their parent
  301. wrap(column, 'offset', function (proceed, node, factor) {
  302. var offset = proceed.call(this,
  303. node,
  304. factor); // eslint-disable-line no-invalid-this
  305. // Modify the default output if the parent's layout is 'hanging'
  306. if (node.hangsFrom) {
  307. return {
  308. absoluteTop: node.hangsFrom.nodeY
  309. };
  310. }
  311. return offset;
  312. });
  313. return column;
  314. };
  315. OrganizationSeries.prototype.pointAttribs = function (point, state) {
  316. var series = this, attribs = SankeySeries.prototype.pointAttribs.call(series, point, state), level = point.isNode ? point.level : point.fromNode.level, levelOptions = series.mapOptionsToLevel[level || 0] || {}, options = point.options, stateOptions = (levelOptions.states && levelOptions.states[state]) || {}, values = ['borderRadius', 'linkColor', 'linkLineWidth']
  317. .reduce(function (obj, key) {
  318. obj[key] = pick(stateOptions[key], options[key], levelOptions[key], series.options[key]);
  319. return obj;
  320. }, {});
  321. if (!point.isNode) {
  322. attribs.stroke = values.linkColor;
  323. attribs['stroke-width'] = values.linkLineWidth;
  324. delete attribs.fill;
  325. }
  326. else {
  327. if (values.borderRadius) {
  328. attribs.r = values.borderRadius;
  329. }
  330. }
  331. return attribs;
  332. };
  333. OrganizationSeries.prototype.translateLink = function (point) {
  334. var fromNode = point.fromNode,
  335. toNode = point.toNode,
  336. crisp = Math.round(this.options.linkLineWidth) % 2 / 2,
  337. x1 = Math.floor(fromNode.shapeArgs.x +
  338. fromNode.shapeArgs.width) + crisp,
  339. y1 = Math.floor(fromNode.shapeArgs.y +
  340. fromNode.shapeArgs.height / 2) + crisp,
  341. x2 = Math.floor(toNode.shapeArgs.x) + crisp,
  342. y2 = Math.floor(toNode.shapeArgs.y +
  343. toNode.shapeArgs.height / 2) + crisp,
  344. xMiddle,
  345. hangingIndent = this.options.hangingIndent,
  346. toOffset = toNode.options.offset,
  347. percentOffset = /%$/.test(toOffset) && parseInt(toOffset, 10),
  348. inverted = this.chart.inverted;
  349. if (inverted) {
  350. x1 -= fromNode.shapeArgs.width;
  351. x2 += toNode.shapeArgs.width;
  352. }
  353. xMiddle = Math.floor(x2 +
  354. (inverted ? 1 : -1) *
  355. (this.colDistance - this.nodeWidth) / 2) + crisp;
  356. // Put the link on the side of the node when an offset is given. HR
  357. // node in the main demo.
  358. if (percentOffset &&
  359. (percentOffset >= 50 || percentOffset <= -50)) {
  360. xMiddle = x2 = Math.floor(x2 + (inverted ? -0.5 : 0.5) *
  361. toNode.shapeArgs.width) + crisp;
  362. y2 = toNode.shapeArgs.y;
  363. if (percentOffset > 0) {
  364. y2 += toNode.shapeArgs.height;
  365. }
  366. }
  367. if (toNode.hangsFrom === fromNode) {
  368. if (this.chart.inverted) {
  369. y1 = Math.floor(fromNode.shapeArgs.y +
  370. fromNode.shapeArgs.height -
  371. hangingIndent / 2) + crisp;
  372. y2 = (toNode.shapeArgs.y +
  373. toNode.shapeArgs.height);
  374. }
  375. else {
  376. y1 = Math.floor(fromNode.shapeArgs.y +
  377. hangingIndent / 2) + crisp;
  378. }
  379. xMiddle = x2 = Math.floor(toNode.shapeArgs.x +
  380. toNode.shapeArgs.width / 2) + crisp;
  381. }
  382. point.plotY = 1;
  383. point.shapeType = 'path';
  384. point.shapeArgs = {
  385. d: OrganizationSeries.curvedPath([
  386. ['M', x1, y1],
  387. ['L', xMiddle, y1],
  388. ['L', xMiddle, y2],
  389. ['L', x2, y2]
  390. ], this.options.linkRadius)
  391. };
  392. };
  393. OrganizationSeries.prototype.translateNode = function (node, column) {
  394. SankeySeries.prototype.translateNode.call(this, node, column);
  395. if (node.hangsFrom) {
  396. node.shapeArgs.height -=
  397. this.options.hangingIndent;
  398. if (!this.chart.inverted) {
  399. node.shapeArgs.y += this.options.hangingIndent;
  400. }
  401. }
  402. node.nodeHeight = this.chart.inverted ?
  403. node.shapeArgs.width :
  404. node.shapeArgs.height;
  405. };
  406. /**
  407. * An organization chart is a diagram that shows the structure of an
  408. * organization and the relationships and relative ranks of its parts and
  409. * positions.
  410. *
  411. * @sample highcharts/demo/organization-chart/
  412. * Organization chart
  413. * @sample highcharts/series-organization/horizontal/
  414. * Horizontal organization chart
  415. * @sample highcharts/series-organization/borderless
  416. * Borderless design
  417. * @sample highcharts/series-organization/center-layout
  418. * Centered layout
  419. *
  420. * @extends plotOptions.sankey
  421. * @excluding allowPointSelect, curveFactor, dataSorting
  422. * @since 7.1.0
  423. * @product highcharts
  424. * @requires modules/organization
  425. * @optionparent plotOptions.organization
  426. */
  427. OrganizationSeries.defaultOptions = merge(SankeySeries.defaultOptions, {
  428. /**
  429. * The border color of the node cards.
  430. *
  431. * @type {Highcharts.ColorString}
  432. * @private
  433. */
  434. borderColor: palette.neutralColor60,
  435. /**
  436. * The border radius of the node cards.
  437. *
  438. * @private
  439. */
  440. borderRadius: 3,
  441. /**
  442. * Radius for the rounded corners of the links between nodes.
  443. *
  444. * @sample highcharts/series-organization/link-options
  445. * Square links
  446. *
  447. * @private
  448. */
  449. linkRadius: 10,
  450. borderWidth: 1,
  451. /**
  452. * @declare Highcharts.SeriesOrganizationDataLabelsOptionsObject
  453. *
  454. * @private
  455. */
  456. dataLabels: {
  457. /* eslint-disable valid-jsdoc */
  458. /**
  459. * A callback for defining the format for _nodes_ in the
  460. * organization chart. The `nodeFormat` option takes precedence
  461. * over `nodeFormatter`.
  462. *
  463. * In an organization chart, the `nodeFormatter` is a quite complex
  464. * function of the available options, striving for a good default
  465. * layout of cards with or without images. In organization chart,
  466. * the data labels come with `useHTML` set to true, meaning they
  467. * will be rendered as true HTML above the SVG.
  468. *
  469. * @sample highcharts/series-organization/datalabels-nodeformatter
  470. * Modify the default label format output
  471. *
  472. * @type {Highcharts.SeriesSankeyDataLabelsFormatterCallbackFunction}
  473. * @since 6.0.2
  474. */
  475. nodeFormatter: function () {
  476. var outerStyle = {
  477. width: '100%',
  478. height: '100%',
  479. display: 'flex',
  480. 'flex-direction': 'row',
  481. 'align-items': 'center',
  482. 'justify-content': 'center'
  483. },
  484. imageStyle = {
  485. 'max-height': '100%',
  486. 'border-radius': '50%'
  487. },
  488. innerStyle = {
  489. width: '100%',
  490. padding: 0,
  491. 'text-align': 'center',
  492. 'white-space': 'normal'
  493. },
  494. nameStyle = {
  495. margin: 0
  496. },
  497. titleStyle = {
  498. margin: 0
  499. },
  500. descriptionStyle = {
  501. opacity: 0.75,
  502. margin: '5px'
  503. };
  504. // eslint-disable-next-line valid-jsdoc
  505. /**
  506. * @private
  507. */
  508. function styleAttr(style) {
  509. return Object.keys(style).reduce(function (str, key) {
  510. return str + key + ':' + style[key] + ';';
  511. }, 'style="') + '"';
  512. }
  513. if (this.point.image) {
  514. imageStyle['max-width'] = '30%';
  515. innerStyle.width = '70%';
  516. }
  517. // PhantomJS doesn't support flex, roll back to absolute
  518. // positioning
  519. if (this.series.chart.renderer.forExport) {
  520. outerStyle.display = 'block';
  521. innerStyle.position = 'absolute';
  522. innerStyle.left = this.point.image ? '30%' : 0;
  523. innerStyle.top = 0;
  524. }
  525. var html = '<div ' + styleAttr(outerStyle) + '>';
  526. if (this.point.image) {
  527. html += '<img src="' + this.point.image + '" ' +
  528. styleAttr(imageStyle) + '>';
  529. }
  530. html += '<div ' + styleAttr(innerStyle) + '>';
  531. if (this.point.name) {
  532. html += '<h4 ' + styleAttr(nameStyle) + '>' +
  533. this.point.name + '</h4>';
  534. }
  535. if (this.point.title) {
  536. html += '<p ' + styleAttr(titleStyle) + '>' +
  537. (this.point.title || '') + '</p>';
  538. }
  539. if (this.point.description) {
  540. html += '<p ' + styleAttr(descriptionStyle) + '>' +
  541. this.point.description + '</p>';
  542. }
  543. html += '</div>' +
  544. '</div>';
  545. return html;
  546. },
  547. /* eslint-enable valid-jsdoc */
  548. style: {
  549. /** @internal */
  550. fontWeight: 'normal',
  551. /** @internal */
  552. fontSize: '13px'
  553. },
  554. useHTML: true
  555. },
  556. /**
  557. * The indentation in pixels of hanging nodes, nodes which parent has
  558. * [layout](#series.organization.nodes.layout) set to `hanging`.
  559. *
  560. * @private
  561. */
  562. hangingIndent: 20,
  563. /**
  564. * The color of the links between nodes.
  565. *
  566. * @type {Highcharts.ColorString}
  567. * @private
  568. */
  569. linkColor: palette.neutralColor60,
  570. /**
  571. * The line width of the links connecting nodes, in pixels.
  572. *
  573. * @sample highcharts/series-organization/link-options
  574. * Square links
  575. *
  576. * @private
  577. */
  578. linkLineWidth: 1,
  579. /**
  580. * In a horizontal chart, the width of the nodes in pixels. Node that
  581. * most organization charts are vertical, so the name of this option
  582. * is counterintuitive.
  583. *
  584. * @private
  585. */
  586. nodeWidth: 50,
  587. tooltip: {
  588. nodeFormat: '{point.name}<br>{point.title}<br>{point.description}'
  589. }
  590. });
  591. return OrganizationSeries;
  592. }(SankeySeries));
  593. extend(OrganizationSeries.prototype, {
  594. pointClass: OrganizationPoint
  595. });
  596. SeriesRegistry.registerSeriesType('organization', OrganizationSeries);
  597. /* *
  598. *
  599. * Default Export
  600. *
  601. * */
  602. /* *
  603. *
  604. * API Declarations
  605. *
  606. * */
  607. /**
  608. * Layout value for the child nodes in an organization chart. If `hanging`, this
  609. * node's children will hang below their parent, allowing a tighter packing of
  610. * nodes in the diagram.
  611. *
  612. * @typedef {"normal"|"hanging"} Highcharts.SeriesOrganizationNodesLayoutValue
  613. */
  614. ''; // detach doclets above
  615. /* *
  616. *
  617. * API Options
  618. *
  619. * */
  620. /**
  621. * An `organization` series. If the [type](#series.organization.type) option is
  622. * not specified, it is inherited from [chart.type](#chart.type).
  623. *
  624. * @extends series,plotOptions.organization
  625. * @exclude dataSorting, boostThreshold, boostBlending
  626. * @product highcharts
  627. * @requires modules/sankey
  628. * @requires modules/organization
  629. * @apioption series.organization
  630. */
  631. /**
  632. * @type {Highcharts.SeriesOrganizationDataLabelsOptionsObject|Array<Highcharts.SeriesOrganizationDataLabelsOptionsObject>}
  633. * @product highcharts
  634. * @apioption series.organization.data.dataLabels
  635. */
  636. /**
  637. * A collection of options for the individual nodes. The nodes in an org chart
  638. * are auto-generated instances of `Highcharts.Point`, but options can be
  639. * applied here and linked by the `id`.
  640. *
  641. * @extends series.sankey.nodes
  642. * @type {Array<*>}
  643. * @product highcharts
  644. * @apioption series.organization.nodes
  645. */
  646. /**
  647. * Individual data label for each node. The options are the same as
  648. * the ones for [series.organization.dataLabels](#series.organization.dataLabels).
  649. *
  650. * @type {Highcharts.SeriesOrganizationDataLabelsOptionsObject|Array<Highcharts.SeriesOrganizationDataLabelsOptionsObject>}
  651. *
  652. * @apioption series.organization.nodes.dataLabels
  653. */
  654. /**
  655. * The job description for the node card, will be inserted by the default
  656. * `dataLabel.nodeFormatter`.
  657. *
  658. * @sample highcharts/demo/organization-chart
  659. * Org chart with job descriptions
  660. *
  661. * @type {string}
  662. * @product highcharts
  663. * @apioption series.organization.nodes.description
  664. */
  665. /**
  666. * An image for the node card, will be inserted by the default
  667. * `dataLabel.nodeFormatter`.
  668. *
  669. * @sample highcharts/demo/organization-chart
  670. * Org chart with images
  671. *
  672. * @type {string}
  673. * @product highcharts
  674. * @apioption series.organization.nodes.image
  675. */
  676. /**
  677. * Layout for the node's children. If `hanging`, this node's children will hang
  678. * below their parent, allowing a tighter packing of nodes in the diagram.
  679. *
  680. * @sample highcharts/demo/organization-chart
  681. * Hanging layout
  682. *
  683. * @type {Highcharts.SeriesOrganizationNodesLayoutValue}
  684. * @default normal
  685. * @product highcharts
  686. * @apioption series.organization.nodes.layout
  687. */
  688. /**
  689. * The job title for the node card, will be inserted by the default
  690. * `dataLabel.nodeFormatter`.
  691. *
  692. * @sample highcharts/demo/organization-chart
  693. * Org chart with job titles
  694. *
  695. * @type {string}
  696. * @product highcharts
  697. * @apioption series.organization.nodes.title
  698. */
  699. /**
  700. * An array of data points for the series. For the `organization` series
  701. * type, points can be given in the following way:
  702. *
  703. * An array of objects with named values. The following snippet shows only a
  704. * few settings, see the complete options set below. If the total number of data
  705. * points exceeds the series' [turboThreshold](#series.area.turboThreshold),
  706. * this option is not available.
  707. *
  708. * ```js
  709. * data: [{
  710. * from: 'Category1',
  711. * to: 'Category2',
  712. * weight: 2
  713. * }, {
  714. * from: 'Category1',
  715. * to: 'Category3',
  716. * weight: 5
  717. * }]
  718. * ```
  719. *
  720. * @type {Array<*>}
  721. * @extends series.sankey.data
  722. * @product highcharts
  723. * @apioption series.organization.data
  724. */
  725. ''; // adds doclets above to transpiled file
  726. return OrganizationSeries;
  727. });
  728. _registerModule(_modules, 'masters/modules/organization.src.js', [], function () {
  729. });
  730. }));