text: /* *
   *
   *  (c) 2010-2019 Torstein Honsi
   *
   *  License: www.highcharts.com/license
   *
   *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
   *
   * */
  'use strict';
  import H from './Globals.js';
  import './Utilities.js';
  var defaultPlotOptions = H.defaultPlotOptions, merge = H.merge, seriesType = H.seriesType, seriesTypes = H.seriesTypes;
  /**
   * A candlestick chart is a style of financial chart used to describe price
   * movements over time.
   *
   * @sample stock/demo/candlestick/
   *         Candlestick chart
   *
   * @extends      plotOptions.ohlc
   * @excluding    borderColor,borderRadius,borderWidth
   * @product      highstock
   * @optionparent plotOptions.candlestick
   */
  var candlestickOptions = {
      /**
       * The specific line color for up candle sticks. The default is to inherit
       * the general `lineColor` setting.
       *
       * @sample {highstock} stock/plotoptions/candlestick-linecolor/
       *         Candlestick line colors
       *
       * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
       * @since     1.3.6
       * @product   highstock
       * @apioption plotOptions.candlestick.upLineColor
       */
      /**
       * @type      {Highcharts.DataGroupingApproximationValue|Function}
       * @default   ohlc
       * @product   highstock
       * @apioption plotOptions.candlestick.dataGrouping.approximation
       */
      states: {
          /**
           * @extends plotOptions.column.states.hover
           * @product highstock
           */
          hover: {
              /**
               * The pixel width of the line/border around the candlestick.
               *
               * @product highstock
               */
              lineWidth: 2
          }
      },
      /**
       * @extends plotOptions.ohlc.tooltip
       */
      tooltip: defaultPlotOptions.ohlc.tooltip,
      /**
       * @type    {number|null}
       * @product highstock
       */
      threshold: null,
      /**
       * The color of the line/border of the candlestick.
       *
       * In styled mode, the line stroke can be set with the
       * `.highcharts-candlestick-series .highcahrts-point` rule.
       *
       * @see [upLineColor](#plotOptions.candlestick.upLineColor)
       *
       * @sample {highstock} stock/plotoptions/candlestick-linecolor/
       *         Candlestick line colors
       *
       * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
       * @default #000000
       * @product highstock
       */
      lineColor: '#000000',
      /**
       * The pixel width of the candlestick line/border. Defaults to `1`.
       *
       *
       * In styled mode, the line stroke width can be set with the
       * `.highcharts-candlestick-series .highcahrts-point` rule.
       *
       * @product highstock
       */
      lineWidth: 1,
      /**
       * The fill color of the candlestick when values are rising.
       *
       * In styled mode, the up color can be set with the
       * `.highcharts-candlestick-series .highcharts-point-up` rule.
       *
       * @sample {highstock} stock/plotoptions/candlestick-color/
       *         Custom colors
       * @sample {highstock} highcharts/css/candlestick/
       *         Colors in styled mode
       *
       * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
       * @default #ffffff
       * @product highstock
       */
      upColor: '#ffffff',
      /**
       * @product highstock
       */
      stickyTracking: true
  };
  /**
   * The candlestick series type.
   *
   * @private
   * @class
   * @name Highcharts.seriesTypes.candlestick
   *
   * @augments Highcharts.seriesTypes.ohlc
   */
  seriesType('candlestick', 'ohlc', merge(defaultPlotOptions.column, candlestickOptions), 
  /**
   * @lends seriesTypes.candlestick
   */
  {
      /* eslint-disable valid-jsdoc */
      /**
       * Postprocess mapping between options and SVG attributes
       *
       * @private
       * @function Highcharts.seriesTypes.candlestick#pointAttribs
       * @param {Highcharts.Point} point
       * @param {string} [state]
       * @return {Highcharts.SVGAttributes}
       */
      pointAttribs: function (point, state) {
          var attribs = seriesTypes.column.prototype.pointAttribs.call(this, point, state), options = this.options, isUp = point.open < point.close, stroke = options.lineColor || this.color, stateOptions;
          attribs['stroke-width'] = options.lineWidth;
          attribs.fill = point.options.color ||
              (isUp ? (options.upColor || this.color) : this.color);
          attribs.stroke = point.options.lineColor ||
              (isUp ? (options.upLineColor || stroke) : stroke);
          // Select or hover states
          if (state) {
              stateOptions = options.states[state];
              attribs.fill = stateOptions.color || attribs.fill;
              attribs.stroke = stateOptions.lineColor || attribs.stroke;
              attribs['stroke-width'] =
                  stateOptions.lineWidth || attribs['stroke-width'];
          }
          return attribs;
      },
      /**
       * Draw the data points.
       *
       * @private
       * @function Highcharts.seriesTypes.candlestick#drawPoints
       * @return {void}
       */
      drawPoints: function () {
          var series = this, points = series.points, chart = series.chart, reversedYAxis = series.yAxis.reversed;
          points.forEach(function (point) {
              var graphic = point.graphic, plotOpen, plotClose, topBox, bottomBox, hasTopWhisker, hasBottomWhisker, crispCorr, crispX, path, halfWidth, isNew = !graphic;
              if (typeof point.plotY !== 'undefined') {
                  if (!graphic) {
                      point.graphic = graphic = chart.renderer.path()
                          .add(series.group);
                  }
                  if (!series.chart.styledMode) {
                      graphic
                          .attr(series.pointAttribs(point, (point.selected && 'select'))) // #3897
                          .shadow(series.options.shadow);
                  }
                  // Crisp vector coordinates
                  crispCorr = (graphic.strokeWidth() % 2) / 2;
                  // #2596:
                  crispX = Math.round(point.plotX) - crispCorr;
                  plotOpen = point.plotOpen;
                  plotClose = point.plotClose;
                  topBox = Math.min(plotOpen, plotClose);
                  bottomBox = Math.max(plotOpen, plotClose);
                  halfWidth = Math.round(point.shapeArgs.width / 2);
                  hasTopWhisker = reversedYAxis ?
                      bottomBox !== point.yBottom :
                      Math.round(topBox) !==
                          Math.round(point.plotHigh);
                  hasBottomWhisker = reversedYAxis ?
                      Math.round(topBox) !==
                          Math.round(point.plotHigh) :
                      bottomBox !== point.yBottom;
                  topBox = Math.round(topBox) + crispCorr;
                  bottomBox = Math.round(bottomBox) + crispCorr;
                  // Create the path. Due to a bug in Chrome 49, the path is
                  // first instanciated with no values, then the values
                  // pushed. For unknown reasons, instanciating the path array
                  // with all the values would lead to a crash when updating
                  // frequently (#5193).
                  path = [];
                  path.push('M', crispX - halfWidth, bottomBox, 'L', crispX - halfWidth, topBox, 'L', crispX + halfWidth, topBox, 'L', crispX + halfWidth, bottomBox, 'Z', // Ensure a nice rectangle #2602
                  'M', crispX, topBox, 'L', 
                  // #460, #2094
                  crispX, hasTopWhisker ?
                      Math.round(reversedYAxis ?
                          point.yBottom :
                          point.plotHigh) :
                      topBox, 'M', crispX, bottomBox, 'L', 
                  // #460, #2094
                  crispX, hasBottomWhisker ?
                      Math.round(reversedYAxis ?
                          point.plotHigh :
                          point.yBottom) :
                      bottomBox);
                  graphic[isNew ? 'attr' : 'animate']({ d: path })
                      .addClass(point.getClassName(), true);
              }
          });
          /* eslint-enable valid-jsdoc */
      }
  });
  /**
   * A `candlestick` series. If the [type](#series.candlestick.type)
   * option is not specified, it is inherited from [chart.type](
   * #chart.type).
   *
   * @type      {*}
   * @extends   series,plotOptions.candlestick
   * @excluding dataParser, dataURL
   * @product   highstock
   * @apioption series.candlestick
   */
  /**
   * An array of data points for the series. For the `candlestick` series
   * type, points can be given in the following ways:
   *
   * 1. An array of arrays with 5 or 4 values. In this case, the values correspond
   *    to `x,open,high,low,close`. If the first value is a string, it is applied
   *    as the name of the point, and the `x` value is inferred. The `x` value can
   *    also be omitted, in which case the inner arrays should be of length 4.
   *    Then the `x` value is automatically calculated, either starting at 0 and
   *    incremented by 1, or from `pointStart` and `pointInterval` given in the
   *    series options.
   *    ```js
   *    data: [
   *        [0, 7, 2, 0, 4],
   *        [1, 1, 4, 2, 8],
   *        [2, 3, 3, 9, 3]
   *    ]
   *    ```
   *
   * 2. An array of objects with named values. The following snippet shows only a
   *    few settings, see the complete options set below. If the total number of
   *    data points exceeds the series'
   *    [turboThreshold](#series.candlestick.turboThreshold), this option is not
   *    available.
   *    ```js
   *    data: [{
   *        x: 1,
   *        open: 9,
   *        high: 2,
   *        low: 4,
   *        close: 6,
   *        name: "Point2",
   *        color: "#00FF00"
   *    }, {
   *        x: 1,
   *        open: 1,
   *        high: 4,
   *        low: 7,
   *        close: 7,
   *        name: "Point1",
   *        color: "#FF00FF"
   *    }]
   *    ```
   *
   * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}
   * @extends   series.ohlc.data
   * @excluding y
   * @product   highstock
   * @apioption series.candlestick.data
   */
  ''; // adds doclets above to transpilat
  