function GanttChart(hotInstance) {
    var _this;

    (0, _classCallCheck2.default)(this, GanttChart);
    _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(GanttChart).call(this, hotInstance));
    /**
     * Cached plugin settings.
     *
     * @private
     * @type {Object}
     */

    _this.settings = {};
    /**
     * Date Calculator object.
     *
     * @private
     * @type {DateCalculator}
     */

    _this.dateCalculator = null;
    /**
     * Currently loaded year.
     *
     * @private
     * @type {Number}
     */

    _this.currentYear = null;
    /**
     * List of months and their corresponding day counts.
     *
     * @private
     * @type {Array}
     */

    _this.monthList = [];
    /**
     * Array of data for the month headers.
     *
     * @private
     * @type {Array}
     */

    _this.monthHeadersArray = [];
    /**
     * Array of data for the week headers.
     *
     * @private
     * @type {Array}
     */

    _this.weekHeadersArray = [];
    /**
     * Object containing the currently created range bars, along with their corresponding parameters.
     *
     * @private
     * @type {Object}
     */

    _this.rangeBars = {};
    /**
     * Object containing the currently created ranges with coordinates to their range bars.
     * It's structure is categorized by years, so to get range bar information for a year, one must use `this.rangeList[year]`.
     *
     * @private
     * @type {Object}
     */

    _this.rangeList = {};
    /**
     * Reference to the Nested Headers plugin.
     *
     * @private
     * @type {NestedHeaders}
     */

    _this.nestedHeadersPlugin = null;
    /**
     * Object containing properties of the source Handsontable instance (the data source).
     *
     * @private
     * @type {Object}
     */

    _this.hotSource = null;
    /**
     * Number of week 'blocks' in the nested headers.
     *
     * @private
     * @type {Number}
     */

    _this.overallWeekSectionCount = null;
    /**
     * Initial instance settings - used to rollback the gantt-specific settings during the disabling of the plugin.
     *
     * @private
     * @type {Object}
     */

    _this.initialSettings = null;
    /**
     * Data feed controller for this plugin.
     *
     * @private
     * @type {GanttChartDataFeed}
     */

    _this.dataFeed = null;
    /**
     * Color information set after applying colors to the chart.
     *
     * @private
     * @type {Object}
     */

    _this.colorData = {};
    /**
     * Metadata of the range bars, used to re-apply meta after updating HOT settings.
     *
     * @private
     * @type {Object}
     */

    _this.rangeBarMeta = Object.create(null);
    return _this;
  }
@plugin GanttChart
@experimental
@dependencies CollapsibleColumns

@description
GanttChart plugin enables a possibility to create a Gantt chart using a Handsontable instance.
In this case, the whole table becomes read-only.

@example
```js
ganttChart: {
    dataSource: data,
    firstWeekDay: 'monday', // Sets the first day of the week to either 'monday' or 'sunday'.
    startYear: 2015 // Sets the displayed year to the provided value.
    weekHeaderGenerator: function(start, end) { return start + ' - ' + end; } // sets the label on the week column headers (optional). The `start` and `end` arguments are numbers representing the beginning and end day of the week.
    allowSplitWeeks: true, // If set to `true` (default), will allow splitting week columns between months. If not, plugin will generate "mixed" months, like "Jan/Feb".
    hideDaysBeforeFullWeeks: false, // If set to `true`, the plugin won't render the incomplete weeks before the "full" weeks inside months.
    hideDaysAfterFullWeeks: false, // If set to `true`, the plugin won't render the incomplete weeks after the "full" weeks inside months.
  }

// Where data can be either an data object or an object containing information about another Handsontable instance, which
// would feed the chart-enabled instance with data.
// For example:

// Handsontable-binding information
var data = {
  instance: source, // reference to another Handsontable instance
  startDateColumn: 4, // index of a column, which contains information about start dates of data ranges
  endDateColumn: 5, // index of a column, which contains information about end dates of data ranges
  additionalData: { // information about additional data passed to the chart, in this example example:
    label: 0, // labels are stored in the first column
    quantity: 1 // quantity information is stored in the second column
  },
  asyncUpdates: true // if set to true, the updates from the source instance with be asynchronous. Defaults to false.
}

// Data object
var data = [
  {
    additionalData: {label: 'Example label.', quantity: 'Four packs.'},
    startDate: '1/5/2015',
    endDate: '1/20/2015'
  },
  {
    additionalData: {label: 'Another label.', quantity: 'One pack.'},
    startDate: '1/11/2015',
    endDate: '1/29/2015'
  }
];
```