xrange.src.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  1. /**
  2. * @license Highcharts JS v7.0.2 (2019-01-17)
  3. * X-range series
  4. *
  5. * (c) 2010-2019 Torstein Honsi, Lars A. V. Cabrera
  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(function () {
  16. return factory;
  17. });
  18. } else {
  19. factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
  20. }
  21. }(function (Highcharts) {
  22. (function (H) {
  23. /* *
  24. * X-range series module
  25. *
  26. * (c) 2010-2019 Torstein Honsi, Lars A. V. Cabrera
  27. *
  28. * License: www.highcharts.com/license
  29. */
  30. var addEvent = H.addEvent,
  31. defined = H.defined,
  32. color = H.Color,
  33. columnType = H.seriesTypes.column,
  34. correctFloat = H.correctFloat,
  35. isNumber = H.isNumber,
  36. isObject = H.isObject,
  37. merge = H.merge,
  38. pick = H.pick,
  39. seriesType = H.seriesType,
  40. seriesTypes = H.seriesTypes,
  41. Axis = H.Axis,
  42. Point = H.Point,
  43. Series = H.Series;
  44. /**
  45. * Return color of a point based on its category.
  46. *
  47. * @private
  48. * @function getColorByCategory
  49. *
  50. * @param {object} series
  51. * The series which the point belongs to.
  52. *
  53. * @param {object} point
  54. * The point to calculate its color for.
  55. *
  56. * @return {object}
  57. * Returns an object containing the properties color and colorIndex.
  58. */
  59. function getColorByCategory(series, point) {
  60. var colors = series.options.colors || series.chart.options.colors,
  61. colorCount = colors ?
  62. colors.length :
  63. series.chart.options.chart.colorCount,
  64. colorIndex = point.y % colorCount,
  65. color = colors && colors[colorIndex];
  66. return {
  67. colorIndex: colorIndex,
  68. color: color
  69. };
  70. }
  71. /**
  72. * @private
  73. * @class
  74. * @name Highcharts.seriesTypes.xrange
  75. *
  76. * @augments Highcharts.Series
  77. */
  78. seriesType('xrange', 'column'
  79. /**
  80. * The X-range series displays ranges on the X axis, typically time intervals
  81. * with a start and end date.
  82. *
  83. * @sample {highcharts} highcharts/demo/x-range/
  84. * X-range
  85. * @sample {highcharts} highcharts/css/x-range/
  86. * Styled mode X-range
  87. * @sample {highcharts} highcharts/chart/inverted-xrange/
  88. * Inverted X-range
  89. *
  90. * @extends plotOptions.column
  91. * @since 6.0.0
  92. * @product highcharts highstock gantt
  93. * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor,
  94. * edgeWidth, findNearestPointBy, getExtremesFromAll,
  95. * negativeColor, pointInterval, pointIntervalUnit,
  96. * pointPlacement, pointRange, pointStart, softThreshold,
  97. * stacking, threshold, data
  98. * @optionparent plotOptions.xrange
  99. */
  100. , {
  101. /**
  102. * A partial fill for each point, typically used to visualize how much of
  103. * a task is performed. The partial fill object can be set either on series
  104. * or point level.
  105. *
  106. * @sample {highcharts} highcharts/demo/x-range
  107. * X-range with partial fill
  108. *
  109. * @product highcharts highstock gantt
  110. * @apioption plotOptions.xrange.partialFill
  111. */
  112. /**
  113. * The fill color to be used for partial fills. Defaults to a darker shade
  114. * of the point color.
  115. *
  116. * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
  117. * @product highcharts highstock gantt
  118. * @apioption plotOptions.xrange.partialFill.fill
  119. */
  120. /**
  121. * A partial fill for each point, typically used to visualize how much of
  122. * a task is performed. See [completed](series.gantt.data.completed).
  123. *
  124. * @sample gantt/demo/progress-indicator
  125. * Gantt with progress indicator
  126. *
  127. * @product gantt
  128. * @apioption plotOptions.gantt.partialFill
  129. */
  130. /**
  131. * In an X-range series, this option makes all points of the same Y-axis
  132. * category the same color.
  133. */
  134. colorByPoint: true,
  135. dataLabels: {
  136. verticalAlign: 'middle',
  137. inside: true,
  138. /**
  139. * The default formatter for X-range data labels displays the percentage
  140. * of the partial fill amount.
  141. *
  142. * @type {Highcharts.FormatterCallbackFunction<Highcharts.SeriesDataLabelsFormatterContextObject>}
  143. * @default function () { return (amount * 100) + '%'; }
  144. */
  145. formatter: function () {
  146. var point = this.point,
  147. amount = point.partialFill;
  148. if (isObject(amount)) {
  149. amount = amount.amount;
  150. }
  151. if (!defined(amount)) {
  152. amount = 0;
  153. }
  154. return correctFloat(amount * 100) + '%';
  155. }
  156. },
  157. tooltip: {
  158. headerFormat: '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
  159. pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'
  160. },
  161. borderRadius: 3,
  162. pointRange: 0
  163. }, {
  164. type: 'xrange',
  165. parallelArrays: ['x', 'x2', 'y'],
  166. requireSorting: false,
  167. animate: seriesTypes.line.prototype.animate,
  168. cropShoulder: 1,
  169. getExtremesFromAll: true,
  170. autoIncrement: H.noop,
  171. /**
  172. * Borrow the column series metrics, but with swapped axes. This gives free
  173. * access to features like groupPadding, grouping, pointWidth etc.
  174. *
  175. * @private
  176. * @function Higcharts.Series#getColumnMetrics
  177. *
  178. * @return {Highcharts.ColumnMetricsObject}
  179. */
  180. getColumnMetrics: function () {
  181. var metrics,
  182. chart = this.chart;
  183. function swapAxes() {
  184. chart.series.forEach(function (s) {
  185. var xAxis = s.xAxis;
  186. s.xAxis = s.yAxis;
  187. s.yAxis = xAxis;
  188. });
  189. }
  190. swapAxes();
  191. metrics = columnType.prototype.getColumnMetrics.call(this);
  192. swapAxes();
  193. return metrics;
  194. },
  195. /**
  196. * Override cropData to show a point where x or x2 is outside visible range,
  197. * but one of them is inside.
  198. *
  199. * @private
  200. * @function Highcharts.Series#cropData
  201. *
  202. * @param {Array<number>} xData
  203. *
  204. * @param {Array<number>} yData
  205. *
  206. * @param {number} min
  207. *
  208. * @param {number} max
  209. *
  210. * @param {number} [cropShoulder]
  211. *
  212. * @return {*}
  213. */
  214. cropData: function (xData, yData, min, max) {
  215. // Replace xData with x2Data to find the appropriate cropStart
  216. var cropData = Series.prototype.cropData,
  217. crop = cropData.call(this, this.x2Data, yData, min, max);
  218. // Re-insert the cropped xData
  219. crop.xData = xData.slice(crop.start, crop.end);
  220. return crop;
  221. },
  222. /**
  223. * @private
  224. * @function Highcharts.Series#translatePoint
  225. *
  226. * @param {Highcharts.Point} point
  227. */
  228. translatePoint: function (point) {
  229. var series = this,
  230. xAxis = series.xAxis,
  231. yAxis = series.yAxis,
  232. metrics = series.columnMetrics,
  233. options = series.options,
  234. minPointLength = options.minPointLength || 0,
  235. plotX = point.plotX,
  236. posX = pick(point.x2, point.x + (point.len || 0)),
  237. plotX2 = xAxis.translate(posX, 0, 0, 0, 1),
  238. length = Math.abs(plotX2 - plotX),
  239. widthDifference,
  240. shapeArgs,
  241. partialFill,
  242. inverted = this.chart.inverted,
  243. borderWidth = pick(options.borderWidth, 1),
  244. crisper = borderWidth % 2 / 2,
  245. yOffset = metrics.offset,
  246. pointHeight = Math.round(metrics.width),
  247. dlLeft,
  248. dlRight,
  249. dlWidth;
  250. if (minPointLength) {
  251. widthDifference = minPointLength - length;
  252. if (widthDifference < 0) {
  253. widthDifference = 0;
  254. }
  255. plotX -= widthDifference / 2;
  256. plotX2 += widthDifference / 2;
  257. }
  258. plotX = Math.max(plotX, -10);
  259. plotX2 = Math.min(Math.max(plotX2, -10), xAxis.len + 10);
  260. // Handle individual pointWidth
  261. if (defined(point.options.pointWidth)) {
  262. yOffset -= (
  263. (Math.ceil(point.options.pointWidth) - pointHeight) / 2
  264. );
  265. pointHeight = Math.ceil(point.options.pointWidth);
  266. }
  267. // Apply pointPlacement to the Y axis
  268. if (
  269. options.pointPlacement &&
  270. isNumber(point.plotY) &&
  271. yAxis.categories
  272. ) {
  273. point.plotY = yAxis
  274. .translate(point.y, 0, 1, 0, 1, options.pointPlacement);
  275. }
  276. point.shapeArgs = {
  277. x: Math.floor(Math.min(plotX, plotX2)) + crisper,
  278. y: Math.floor(point.plotY + yOffset) + crisper,
  279. width: Math.round(Math.abs(plotX2 - plotX)),
  280. height: pointHeight,
  281. r: series.options.borderRadius
  282. };
  283. // Align data labels inside the shape and inside the plot area
  284. dlLeft = point.shapeArgs.x;
  285. dlRight = dlLeft + point.shapeArgs.width;
  286. if (dlLeft < 0 || dlRight > xAxis.len) {
  287. dlLeft = Math.min(xAxis.len, Math.max(0, dlLeft));
  288. dlRight = Math.max(0, Math.min(dlRight, xAxis.len));
  289. dlWidth = dlRight - dlLeft;
  290. point.dlBox = merge(point.shapeArgs, {
  291. x: dlLeft,
  292. width: dlRight - dlLeft,
  293. centerX: dlWidth ? dlWidth / 2 : null
  294. });
  295. } else {
  296. point.dlBox = null;
  297. }
  298. // Tooltip position
  299. if (!inverted) {
  300. point.tooltipPos[0] += length / 2 * (xAxis.reversed ? -1 : 1);
  301. point.tooltipPos[1] -= metrics.width / 2;
  302. // Limit position by the correct axis size (#9727)
  303. point.tooltipPos[0] = Math.max(
  304. Math.min(point.tooltipPos[0], xAxis.len - 1), 0
  305. );
  306. point.tooltipPos[1] = Math.max(
  307. Math.min(point.tooltipPos[1], yAxis.len - 1), 0
  308. );
  309. } else {
  310. point.tooltipPos[1] += length / 2 * (xAxis.reversed ? 1 : -1);
  311. point.tooltipPos[0] += metrics.width / 2;
  312. // Limit position by the correct axis size (#9727)
  313. point.tooltipPos[1] = Math.max(
  314. Math.min(point.tooltipPos[1], xAxis.len - 1), 0
  315. );
  316. point.tooltipPos[0] = Math.max(
  317. Math.min(point.tooltipPos[0], yAxis.len - 1), 0
  318. );
  319. }
  320. // Add a partShapeArgs to the point, based on the shapeArgs property
  321. partialFill = point.partialFill;
  322. if (partialFill) {
  323. // Get the partial fill amount
  324. if (isObject(partialFill)) {
  325. partialFill = partialFill.amount;
  326. }
  327. // If it was not a number, assume 0
  328. if (!isNumber(partialFill)) {
  329. partialFill = 0;
  330. }
  331. shapeArgs = point.shapeArgs;
  332. point.partShapeArgs = {
  333. x: shapeArgs.x,
  334. y: shapeArgs.y,
  335. width: shapeArgs.width,
  336. height: shapeArgs.height,
  337. r: series.options.borderRadius
  338. };
  339. point.clipRectArgs = {
  340. x: shapeArgs.x,
  341. y: shapeArgs.y,
  342. width: Math.max(
  343. Math.round(
  344. length * partialFill +
  345. (point.plotX - plotX)
  346. ),
  347. 0
  348. ),
  349. height: shapeArgs.height
  350. };
  351. }
  352. },
  353. /**
  354. * @private
  355. * @function Highcharts.Series#translate
  356. */
  357. translate: function () {
  358. columnType.prototype.translate.apply(this, arguments);
  359. this.points.forEach(function (point) {
  360. this.translatePoint(point);
  361. }, this);
  362. },
  363. /**
  364. * Draws a single point in the series. Needed for partial fill.
  365. *
  366. * This override turns point.graphic into a group containing the original
  367. * graphic and an overlay displaying the partial fill.
  368. *
  369. * @private
  370. * @function Highcharts.Series#drawPoint
  371. *
  372. * @param {Highcharts.Point} point
  373. * An instance of Point in the series.
  374. *
  375. * @param {"animate"|"attr"} verb
  376. * 'animate' (animates changes) or 'attr' (sets options)
  377. */
  378. drawPoint: function (point, verb) {
  379. var series = this,
  380. seriesOpts = series.options,
  381. renderer = series.chart.renderer,
  382. graphic = point.graphic,
  383. type = point.shapeType,
  384. shapeArgs = point.shapeArgs,
  385. partShapeArgs = point.partShapeArgs,
  386. clipRectArgs = point.clipRectArgs,
  387. pfOptions = point.partialFill,
  388. fill,
  389. state = point.selected && 'select',
  390. cutOff = seriesOpts.stacking && !seriesOpts.borderRadius;
  391. if (!point.isNull) {
  392. // Original graphic
  393. if (graphic) { // update
  394. point.graphicOriginal[verb](
  395. merge(shapeArgs)
  396. );
  397. } else {
  398. point.graphic = graphic = renderer.g('point')
  399. .addClass(point.getClassName())
  400. .add(point.group || series.group);
  401. point.graphicOriginal = renderer[type](shapeArgs)
  402. .addClass(point.getClassName())
  403. .addClass('highcharts-partfill-original')
  404. .add(graphic);
  405. }
  406. // Partial fill graphic
  407. if (partShapeArgs) {
  408. if (point.graphicOverlay) {
  409. point.graphicOverlay[verb](
  410. merge(partShapeArgs)
  411. );
  412. point.clipRect.animate(
  413. merge(clipRectArgs)
  414. );
  415. } else {
  416. point.clipRect = renderer.clipRect(
  417. clipRectArgs.x,
  418. clipRectArgs.y,
  419. clipRectArgs.width,
  420. clipRectArgs.height
  421. );
  422. point.graphicOverlay = renderer[type](partShapeArgs)
  423. .addClass('highcharts-partfill-overlay')
  424. .add(graphic)
  425. .clip(point.clipRect);
  426. }
  427. }
  428. // Presentational
  429. if (!series.chart.styledMode) {
  430. point.graphicOriginal
  431. .attr(series.pointAttribs(point, state))
  432. .shadow(seriesOpts.shadow, null, cutOff);
  433. if (partShapeArgs) {
  434. // Ensure pfOptions is an object
  435. if (!isObject(pfOptions)) {
  436. pfOptions = {};
  437. }
  438. if (isObject(seriesOpts.partialFill)) {
  439. pfOptions = merge(
  440. pfOptions, seriesOpts.partialFill
  441. );
  442. }
  443. fill = (
  444. pfOptions.fill ||
  445. color(point.color || series.color).brighten(-0.3).get()
  446. );
  447. point.graphicOverlay
  448. .attr(series.pointAttribs(point, state))
  449. .attr({
  450. 'fill': fill
  451. })
  452. .shadow(seriesOpts.shadow, null, cutOff);
  453. }
  454. }
  455. } else if (graphic) {
  456. point.graphic = graphic.destroy(); // #1269
  457. }
  458. },
  459. /**
  460. * @private
  461. * @function Highcharts.Series#drawPoints
  462. */
  463. drawPoints: function () {
  464. var series = this,
  465. verb = series.getAnimationVerb();
  466. // Draw the columns
  467. series.points.forEach(function (point) {
  468. series.drawPoint(point, verb);
  469. });
  470. },
  471. /**
  472. * Returns "animate", or "attr" if the number of points is above the
  473. * animation limit.
  474. *
  475. * @private
  476. * @function Highcharts.Series#getAnimationVerb
  477. *
  478. * @return {string}
  479. */
  480. getAnimationVerb: function () {
  481. return (
  482. this.chart.pointCount < (this.options.animationLimit || 250) ?
  483. 'animate' :
  484. 'attr'
  485. );
  486. }
  487. /*
  488. // Override to remove stroke from points. For partial fill.
  489. pointAttribs: function () {
  490. var series = this,
  491. retVal = columnType.prototype.pointAttribs.apply(series, arguments);
  492. //retVal['stroke-width'] = 0;
  493. return retVal;
  494. }
  495. //*/
  496. }, { // Point class properties
  497. /**
  498. * Extend applyOptions so that `colorByPoint` for x-range means that one
  499. * color is applied per Y axis category.
  500. *
  501. * @private
  502. * @function Highcharts.Point#applyOptions
  503. *
  504. * @return {Highcharts.Series}
  505. */
  506. applyOptions: function () {
  507. var point = Point.prototype.applyOptions.apply(this, arguments),
  508. series = point.series,
  509. colorByPoint;
  510. if (series.options.colorByPoint && !point.options.color) {
  511. colorByPoint = getColorByCategory(series, point);
  512. if (!series.chart.styledMode) {
  513. point.color = colorByPoint.color;
  514. }
  515. if (!point.options.colorIndex) {
  516. point.colorIndex = colorByPoint.colorIndex;
  517. }
  518. }
  519. return point;
  520. },
  521. /**
  522. * Extend init to have y default to 0.
  523. *
  524. * @private
  525. * @function Highcharts.Point#init
  526. *
  527. * @return {Highcharts.Series}
  528. */
  529. init: function () {
  530. Point.prototype.init.apply(this, arguments);
  531. if (!this.y) {
  532. this.y = 0;
  533. }
  534. return this;
  535. },
  536. /**
  537. * @private
  538. * @function Highcharts.Point#setState
  539. */
  540. setState: function () {
  541. Point.prototype.setState.apply(this, arguments);
  542. this.series.drawPoint(this, this.series.getAnimationVerb());
  543. },
  544. /**
  545. * @private
  546. * @function Highcharts.Point#getLabelConfig
  547. *
  548. * @return {Highcharts.PointLabelObject}
  549. */
  550. // Add x2 and yCategory to the available properties for tooltip formats
  551. getLabelConfig: function () {
  552. var point = this,
  553. cfg = Point.prototype.getLabelConfig.call(point),
  554. yCats = point.series.yAxis.categories;
  555. cfg.x2 = point.x2;
  556. cfg.yCategory = point.yCategory = yCats && yCats[point.y];
  557. return cfg;
  558. },
  559. tooltipDateKeys: ['x', 'x2'],
  560. /**
  561. * @private
  562. * @function Highcharts.Point#isValid
  563. *
  564. * @return {boolean}
  565. */
  566. isValid: function () {
  567. return typeof this.x === 'number' &&
  568. typeof this.x2 === 'number';
  569. }
  570. });
  571. // Max x2 should be considered in xAxis extremes
  572. addEvent(Axis, 'afterGetSeriesExtremes', function () {
  573. var axis = this,
  574. axisSeries = axis.series,
  575. dataMax,
  576. modMax;
  577. if (axis.isXAxis) {
  578. dataMax = pick(axis.dataMax, -Number.MAX_VALUE);
  579. axisSeries.forEach(function (series) {
  580. if (series.x2Data) {
  581. series.x2Data.forEach(function (val) {
  582. if (val > dataMax) {
  583. dataMax = val;
  584. modMax = true;
  585. }
  586. });
  587. }
  588. });
  589. if (modMax) {
  590. axis.dataMax = dataMax;
  591. }
  592. }
  593. });
  594. /**
  595. * An `xrange` series. If the [type](#series.xrange.type) option is not
  596. * specified, it is inherited from [chart.type](#chart.type).
  597. *
  598. * @extends series,plotOptions.xrange
  599. * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
  600. * findNearestPointBy, getExtremesFromAll, negativeColor,
  601. * pointInterval, pointIntervalUnit, pointPlacement, pointRange,
  602. * pointStart, softThreshold, stacking, threshold
  603. * @product highcharts highstock gantt
  604. * @apioption series.xrange
  605. */
  606. /**
  607. * An array of data points for the series. For the `xrange` series type,
  608. * points can be given in the following ways:
  609. *
  610. * 1. An array of objects with named values. The objects are point configuration
  611. * objects as seen below.
  612. * ```js
  613. * data: [{
  614. * x: Date.UTC(2017, 0, 1),
  615. * x2: Date.UTC(2017, 0, 3),
  616. * name: "Test",
  617. * y: 0,
  618. * color: "#00FF00"
  619. * }, {
  620. * x: Date.UTC(2017, 0, 4),
  621. * x2: Date.UTC(2017, 0, 5),
  622. * name: "Deploy",
  623. * y: 1,
  624. * color: "#FF0000"
  625. * }]
  626. * ```
  627. *
  628. * @sample {highcharts} highcharts/series/data-array-of-objects/
  629. * Config objects
  630. *
  631. * @type {Array<*>}
  632. * @extends series.line.data
  633. * @product highcharts highstock gantt
  634. * @apioption series.xrange.data
  635. */
  636. /**
  637. * The starting X value of the range point.
  638. *
  639. * @sample {highcharts} highcharts/demo/x-range
  640. * X-range
  641. *
  642. * @type {number}
  643. * @product highcharts highstock gantt
  644. * @apioption series.xrange.data.x
  645. */
  646. /**
  647. * The ending X value of the range point.
  648. *
  649. * @sample {highcharts} highcharts/demo/x-range
  650. * X-range
  651. *
  652. * @type {number}
  653. * @product highcharts highstock gantt
  654. * @apioption series.xrange.data.x2
  655. */
  656. /**
  657. * The Y value of the range point.
  658. *
  659. * @sample {highcharts} highcharts/demo/x-range
  660. * X-range
  661. *
  662. * @type {number}
  663. * @product highcharts highstock gantt
  664. * @apioption series.xrange.data.y
  665. */
  666. /**
  667. * A partial fill for each point, typically used to visualize how much of
  668. * a task is performed. The partial fill object can be set either on series
  669. * or point level.
  670. *
  671. * @sample {highcharts} highcharts/demo/x-range
  672. * X-range with partial fill
  673. *
  674. * @product highcharts highstock gantt
  675. * @apioption series.xrange.data.partialFill
  676. */
  677. /**
  678. * The amount of the X-range point to be filled. Values can be 0-1 and are
  679. * converted to percentages in the default data label formatter.
  680. *
  681. * @type {number}
  682. * @product highcharts highstock gantt
  683. * @apioption series.xrange.data.partialFill.amount
  684. */
  685. /**
  686. * The fill color to be used for partial fills. Defaults to a darker shade
  687. * of the point color.
  688. *
  689. * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
  690. * @product highcharts highstock gantt
  691. * @apioption series.xrange.data.partialFill.fill
  692. */
  693. }(Highcharts));
  694. return (function () {
  695. }());
  696. }));