value: function style(column, event) {
                var style = void 0;
                var styleMap = this.providedStyleMap(column, event);

                var isHighlighted =
                    this.props.highlighted &&
                    ((column === this.props.highlighted.column &&
                        _pondjs.Event.is(this.props.highlighted.event, event)) ||
                        (this.props.highlightEntireEvent &&
                            _pondjs.Event.is(this.props.highlighted.event, event)));

                var isSelected =
                    this.props.selected &&
                    column === this.props.selected.column &&
                    _pondjs.Event.is(this.props.selected.event, event);

                if (this.props.selected) {
                    if (isSelected) {
                        style = (0, _merge2.default)(
                            true,
                            defaultStyle.selected,
                            styleMap.selected ? styleMap.selected : {}
                        );
                    } else if (isHighlighted) {
                        style = (0, _merge2.default)(
                            true,
                            defaultStyle.highlighted,
                            styleMap.highlighted ? styleMap.highlighted : {}
                        );
                    } else {
                        style = (0, _merge2.default)(
                            true,
                            defaultStyle.muted,
                            styleMap.muted ? styleMap.muted : {}
                        );
                    }
                } else if (isHighlighted) {
                    style = (0, _merge2.default)(
                        true,
                        defaultStyle.highlighted,
                        styleMap.highlighted ? styleMap.highlighted : {}
                    );
                } else {
                    style = (0, _merge2.default)(
                        true,
                        defaultStyle.normal,
                        styleMap.normal ? styleMap.normal : {}
                    );
                }

                return style;
            }
                                var _loop2 = function _loop2() {
                                    var column = _step2.value;

                                    var index = event.index();
                                    var key = series.name() + "-" + index + "-" + column;
                                    var value = event.get(column);
                                    var style = _this2.style(column, event);

                                    var height = yScale(0) - yScale(value);
                                    // Allow negative values. Minimum bar height = 1 pixel.
                                    // Stack negative bars below X-axis and positive above X-Axis
                                    var positiveBar = height >= 0;
                                    height = Math.max(Math.abs(height), minBarHeight);
                                    var y = positiveBar ? yposPositive - height : yposNegative;

                                    // Don't draw a rect when height and minBarHeight are both 0
                                    if (height === 0) return "break";

                                    // Event marker if info provided and hovering
                                    var isHighlighted =
                                        _this2.props.highlighted &&
                                        column === _this2.props.highlighted.column &&
                                        _pondjs.Event.is(_this2.props.highlighted.event, event);
                                    if (isHighlighted && _this2.props.info) {
                                        eventMarker = _react2.default.createElement(
                                            _EventMarker2.default,
                                            _extends({}, _this2.props, {
                                                event: event,
                                                column: column,
                                                offsetX: offset,
                                                offsetY:
                                                    yBase -
                                                    (positiveBar ? yposPositive : yposNegative)
                                            })
                                        );
                                    }

                                    var box = { x: x, y: y, width: width, height: height };
                                    var barProps = _extends({ key: key }, box, { style: style });

                                    if (_this2.props.onSelectionChange) {
                                        barProps.onClick = function(e) {
                                            return _this2.handleClick(e, event, column);
                                        };
                                    }
                                    if (_this2.props.onHighlightChange) {
                                        barProps.onMouseMove = function(e) {
                                            return _this2.handleHover(e, event, column);
                                        };
                                        barProps.onMouseLeave = function() {
                                            return _this2.handleHoverLeave();
                                        };
                                    }

                                    bars.push(_react2.default.createElement("rect", barProps));

                                    if (positiveBar) {
                                        yposPositive -= height;
                                    } else {
                                        yposNegative += height;
                                    }
                                };
            value: function style(column, event, level) {
                var style = void 0;
                if (!this.providedStyle) {
                    this.providedStyle = this.providedStyleArray(this.props.column);
                }

                if (
                    !_underscore2.default.isNull(this.providedStyle) &&
                    (!_underscore2.default.isArray(this.providedStyle) ||
                        this.providedStyle.length !== 3)
                ) {
                    console.warn("Provided style to BandChart should be an array of 3 objects");
                    return defaultStyle;
                }

                var isHighlighted =
                    this.props.highlighted && _pondjs.Event.is(this.props.highlighted, event);

                var isSelected =
                    this.props.selected && _pondjs.Event.is(this.props.selected, event);

                if (this.props.selected) {
                    if (isSelected) {
                        if (!this.selectedStyle || !this.selectedStyle[level]) {
                            if (!this.selectedStyle) {
                                this.selectedStyle = [];
                            }
                            this.selectedStyle[level] = (0, _merge2.default)(
                                true,
                                defaultStyle[level].selected,
                                this.providedStyle[level].selected
                                    ? this.providedStyle[level].selected
                                    : {}
                            );
                        }
                        style = this.selectedStyle[level];
                    } else if (isHighlighted) {
                        if (!this.highlightedStyle || !this.highlightedStyle[level]) {
                            if (!this.highlightedStyle) {
                                this.highlightedStyle = [];
                            }
                            this.highlightedStyle[level] = (0, _merge2.default)(
                                true,
                                defaultStyle[level].highlighted,
                                this.providedStyle[level].highlighted
                                    ? this.providedStyle[level].highlighted
                                    : {}
                            );
                        }
                        style = this.highlightedStyle[level];
                    } else {
                        if (!this.mutedStyle) {
                            this.mutedStyle = [];
                        }
                        if (!this.mutedStyle[level]) {
                            this.mutedStyle[level] = (0, _merge2.default)(
                                true,
                                defaultStyle[level].muted,
                                this.providedStyle[level].muted
                                    ? this.providedStyle[level].muted
                                    : {}
                            );
                        }
                        style = this.mutedStyle[level];
                    }
                } else if (isHighlighted) {
                    style = (0, _merge2.default)(
                        true,
                        defaultStyle[level].highlighted,
                        this.providedStyle[level].highlighted
                            ? this.providedStyle[level].highlighted
                            : {}
                    );
                } else {
                    if (!this.normalStyle) {
                        this.normalStyle = [];
                    }
                    if (!this.normalStyle[level]) {
                        this.normalStyle[level] = (0, _merge2.default)(
                            true,
                            defaultStyle[level].normal,
                            this.providedStyle[level].normal ? this.providedStyle[level].normal : {}
                        );
                    }
                    style = this.normalStyle[level];
                }
                return style;
            }
                    var _loop = function _loop() {
                        var event = _step.value;

                        var begin = event.begin();
                        var end = event.end();
                        var beginPos = scale(begin) >= 0 ? scale(begin) : 0;
                        var endPos =
                            scale(end) <= _this2.props.width ? scale(end) : _this2.props.width;

                        var transform = "translate(" + beginPos + ",0)";
                        var isHover = _this2.state.hover
                            ? _pondjs.Event.is(event, _this2.state.hover)
                            : false;

                        var state = void 0;
                        if (isHover) {
                            state = "hover";
                        } else {
                            state = "normal";
                        }

                        var barNormalStyle = {};
                        var barStyle = {};
                        if (_this2.props.style) {
                            barNormalStyle = _this2.props.style(event, "normal");
                            barStyle = _this2.props.style(event, state);
                        }

                        var label = "";
                        if (_this2.props.label) {
                            if (_underscore2.default.isString(_this2.props.label)) {
                                label = _this2.props.label;
                            } else if (_underscore2.default.isFunction(_this2.props.label)) {
                                label = _this2.props.label(event);
                            }
                        }

                        var x = _this2.props.spacing;
                        var y = 0;
                        var width = endPos - beginPos - 2 * _this2.props.spacing;
                        width = width < 0 ? 0 : width;
                        var height = _this2.props.size;

                        var eventLabelStyle = {
                            fontWeight: 100,
                            fontSize: 11
                        };

                        var text = null;
                        if (isHover) {
                            text = _react2.default.createElement(
                                "g",
                                null,
                                _react2.default.createElement("rect", {
                                    className: "eventchart-marker",
                                    x: x,
                                    y: y,
                                    width: hoverMarkerWidth,
                                    height: height + 4,
                                    style: (0, _merge2.default)(true, barNormalStyle, {
                                        pointerEvents: "none"
                                    })
                                }),
                                _react2.default.createElement(
                                    "text",
                                    {
                                        style: _extends(
                                            {
                                                pointerEvents: "none",
                                                fill: "#444"
                                            },
                                            eventLabelStyle
                                        ),
                                        x: 8 + textOffsetX,
                                        y: 15 + textOffsetY
                                    },
                                    label
                                )
                            );
                        }

                        eventMarkers.push(
                            _react2.default.createElement(
                                "g",
                                { transform: transform, key: i },
                                _react2.default.createElement("rect", {
                                    className: "eventchart-marker",
                                    x: x,
                                    y: y,
                                    width: width,
                                    height: height,
                                    style: barStyle,
                                    onClick: function onClick(e) {
                                        return _this2.handleClick(e, event);
                                    },
                                    onMouseLeave: function onMouseLeave() {
                                        return _this2.onMouseLeave();
                                    },
                                    onMouseOver: function onMouseOver(e) {
                                        return _this2.onMouseOver(e, event);
                                    }
                                }),
                                text
                            )
                        );

                        i += 1;
                    };