import { IgrHorizontalAnchoredCategorySeries } from "./igr-horizontal-anchored-category-series";
import { WaterfallSeries } from "./WaterfallSeries";
import { brushToString, stringToBrush, toPoint, fromRect } from "igniteui-react-core";
/**
 * Represents a IgxDataChartComponent waterfall column series.
*
* `WaterfallSeries` belongs to a group of `CategorySeries` and it is rendered using a collection of vertical columns that show the difference between consecutive data points.
*
* ```ts
*  <IgrDataChart
*     dataSource={this.state.dataSource} >
*
*     <IgrCategoryXAxis name="xAxis" />
*     <IgrNumericYAxis name="yAxis" />
*
*     <IgrWaterfallSeries
*      name="series1"
*     xAxisName="xAxis"
* 	yAxisName="yAxis"
* 	valueMemberPath="Value"/>
*  </IgrDataChart>
* ```
*
* ```ts
* let series= new IgrWaterfallSeries({name: "series"});
* series.xAxis = this.xAxis;
* series.yAxis = this.yAxis;
* series.valueMemberPath = "value";
* this.chart.series.add(series);
* ```
*/
export class IgrWaterfallSeries extends IgrHorizontalAnchoredCategorySeries {
    createImplementation() {
        return new WaterfallSeries();
    }
    /**
                                 * @hidden
                                 */
    get i() {
        return this._implementation;
    }
    constructor(props) {
        super(props);
    }
    /**
     * Gets whether the current series shows a waterfall column shape.
    */
    get isWaterfall() {
        return this.i.fk;
    }
    /**
     * Overridden by derived series classes to indicate when marker-less display is preferred or not.
    */
    get isMarkerlessDisplayPreferred() {
        return this.i.ez;
    }
    /**
     * Gets whether the series is financial waterfall
    */
    get isFinancialWaterfall() {
        return this.i.ep;
    }
    /**
     * Overridden by derived series classes to indicate when negative colors are supported or not.
    */
    get isNegativeColorSupported() {
        return this.i.e0;
    }
    /**
     * Gets or sets the brush to use for negative portions of the series.
    *
    * Gets or sets the color used to draw negative declines in values for this `WaterfallSeries`.
    *
    * ```ts
    *  <IgrDataChart
    *     dataSource={this.state.dataSource} >
    *
    *     <IgrCategoryXAxis name="xAxis" />
    *     <IgrNumericYAxis name="yAxis" />
    *
    *     <IgrWaterfallSeries
    *      name="series1"
    *     xAxisName="xAxis"
    * 	yAxisName="yAxis"
    * 	negativeBrush="#ff0000"
    * 	valueMemberPath="Value"/>
    *  </IgrDataChart>
    * ```
    *
    * ```ts
    * series.xAxis = this.xAxis;
    * series.yAxis = this.yAxis;
    * series.valueMemberPath = "value";
    * series.negativeBrush = "#ff0000";
    * this.chart.series.add(series);
    * ```
    */
    get negativeBrush() {
        return brushToString(this.i.zr);
    }
    set negativeBrush(v) {
        this.i.zr = stringToBrush(v);
    }
    /**
     * Gets or sets the x-radius of the ellipse that is used to round the corners of the column.
    *
    * Gets or sets the amount to round corners in the direction of the X axis in this series.
    *
    * ```ts
    *  <IgrDataChart
    *     dataSource={this.state.dataSource} >
    *
    *     <IgrCategoryXAxis name="xAxis" />
    *     <IgrNumericYAxis name="yAxis" />
    *
    *     <IgrWaterfallSeries
    *      name="series1"
    *     xAxisName="xAxis"
    * 	yAxisName="yAxis"
    * 	radiusX="15"
    *     radiusY="15"
    * 	valueMemberPath="Value"/>
    *  </IgrDataChart>
    * ```
    *
    * ```ts
    * series.xAxis = this.xAxis;
    * series.yAxis = this.yAxis;
    * series.valueMemberPath = "value";
    * series.radiusX = 15;
    * series.radiusY = 15;
    * this.chart.series.add(series);
    * ```
    */
    get radiusX() {
        return this.i.zh;
    }
    set radiusX(v) {
        this.i.zh = +v;
    }
    /**
     * Gets or sets the y-radius of the ellipse that is used to round the corners of the column.
    *
    * Gets or sets the amount to round corners in the direction of the Y axis in this series.
    *
    * ```ts
    *  <IgrDataChart
    *     dataSource={this.state.dataSource} >
    *
    *     <IgrCategoryXAxis name="xAxis" />
    *     <IgrNumericYAxis name="yAxis" />
    *
    *     <IgrWaterfallSeries
    *      name="series1"
    *     xAxisName="xAxis"
    * 	yAxisName="yAxis"
    * 	radiusX="15"
    *     radiusY="15"
    * 	valueMemberPath="Value"/>
    *  </IgrDataChart>
    * ```
    *
    * ```ts
    * series.xAxis = this.xAxis;
    * series.yAxis = this.yAxis;
    * series.valueMemberPath = "value";
    * series.radiusX = 15;
    * series.radiusY = 15;
    * this.chart.series.add(series);
    * ```
    */
    get radiusY() {
        return this.i.zi;
    }
    set radiusY(v) {
        this.i.zi = +v;
    }
    /**
     * Brush to use for outlining negative elements in the waterfall series.
    *
    * Gets or sets the color used to draw borders of negative declines in values for this `WaterfallSeries`.
    *
    * ```ts
    *  <IgrDataChart
    *     dataSource={this.state.dataSource} >
    *
    *     <IgrCategoryXAxis name="xAxis" />
    *     <IgrNumericYAxis name="yAxis" />
    *
    *     <IgrWaterfallSeries
    *      name="series1"
    *     xAxisName="xAxis"
    * 	yAxisName="yAxis"
    * 	negativeOutline="#ff0000"
    * 	valueMemberPath="Value"/>
    *  </IgrDataChart>
    * ```
    *
    * ```ts
    * series.xAxis = this.xAxis;
    * series.yAxis = this.yAxis;
    * series.valueMemberPath = "value";
    * series.negativeOutline = "#ff0000";
    * this.chart.series.add(series);
    * ```
    */
    get negativeOutline() {
        return brushToString(this.i.zs);
    }
    set negativeOutline(v) {
        this.i.zs = stringToBrush(v);
    }
    setNegativeColors(negativeBrush, negativeOutline) {
        this.i.p1(stringToBrush(negativeBrush), stringToBrush(negativeOutline));
    }
    /**
     * If possible, will return the best available value bounding box within the series that has the best value match for the world position provided.
    
    * @param world  * The world coordinate for which to get a value bounding box for
    *
    * Returns a bounding box `Rect` for a data value given a `Point`.
    */
    getSeriesValueBoundingBox(world) {
        let iv = this.i.tu(toPoint(world));
        return fromRect(iv);
    }
    /**
     * For a category plotted series, returns the current width of the items within the categories. This only returns a value if the items have some form of width (e.g. columns, bars, etc.) otherwise 0 is returned.
    
    *
    * Returns the width of items in the `WaterfallSeries`.
    *
    * ```ts
    * let itemSpan: number = series.GetItemSpan();
    * ```
    */
    getItemSpan() {
        let iv = this.i.h1();
        return (iv);
    }
}
