/*
THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE  AGREEMENT ("AGREEMENT") LOCATED HERE:
https://www.infragistics.com/legal/license/igultimate-la
https://www.infragistics.com/legal/license/igultimate-eula
GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE:  you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company.
*/
import { DataAnnotationAxisLayer } from "./DataAnnotationAxisLayer";
import { DependencyProperty } from "igniteui-angular-core";
import { OverlayTextLocation_$type } from "./OverlayTextLocation";
import { Brush } from "igniteui-angular-core";
import { enumGetBox, Number_$type, typeCast, fromEnum, Point_$type, markType, markDep, getInstanceType, runOn } from "igniteui-angular-core";
import { AnnotationAppearanceMode_$type } from "./AnnotationAppearanceMode";
import { OverlayTextUtil } from "./OverlayTextUtil";
import { OverlayTextUpdatingEventArgs } from "./OverlayTextUpdatingEventArgs";
import { DataAnnotationItem } from "./DataAnnotationItem";
import { DataAnnotationInfo } from "./DataAnnotationInfo";
import { DataAnnotationShapeLayerFrame } from "./DataAnnotationShapeLayerFrame";
import { Dictionary$2 } from "igniteui-angular-core";
import { Axis } from "./Axis";
import { Pool$1 } from "igniteui-angular-core";
import { AxisAnnotation } from "./AxisAnnotation";
import { IFastItemsSource_$type } from "igniteui-angular-core";
import { List$1 } from "igniteui-angular-core";
import { ScalerParams } from "./ScalerParams";
import { Defaults } from "./Defaults";
import { DataAnnotationShapeFrameManager } from "./DataAnnotationShapeFrameManager";
import { XamDataChart } from "./XamDataChart";
import { CategoryAxisBase } from "./CategoryAxisBase";
import { Size } from "igniteui-angular-core";
import { BrushUtil } from "igniteui-angular-core";
import { TextBlock } from "igniteui-angular-core";
import { Rectangle } from "igniteui-angular-core";
import { Extensions } from "igniteui-angular-core";
import { NumberFormatSpecifier } from "igniteui-angular-core";
import { BindingFormatter } from "igniteui-angular-core";
import { Path } from "igniteui-angular-core";
import { Tuple$2 } from "igniteui-angular-core";
import { PathFigure } from "igniteui-angular-core";
import { PathGeometry } from "igniteui-angular-core";
import { LineSegment } from "igniteui-angular-core";
import { OverlayTextInfo } from "./OverlayTextInfo";
import { DoubleCollection } from "igniteui-angular-core";
import { DeviceUtils } from "igniteui-angular-core";
import { PropertyMetadata } from "igniteui-angular-core";
import { truncate, isNaN_, log10, isInfinity } from "igniteui-angular-core";
import { stringIsNullOrEmpty } from "igniteui-angular-core";
import { round10N } from "igniteui-angular-core";
import { AnnotationLayerView } from "./AnnotationLayerView";
import { TranslateTransform } from "igniteui-angular-core";
import { LineGeometry } from "igniteui-angular-core";
/**
 * @hidden
 */
export let DataAnnotationShapeLayer = /*@__PURE__*/ (() => {
    class DataAnnotationShapeLayer extends DataAnnotationAxisLayer {
        constructor() {
            super();
            this.stylingOverlayText = null;
            this.stylingShapeAnnotation = null;
            this.stylingAxisAnnotation = null;
            this.aco = null;
            this.acm = null;
            this.ac1 = null;
            this.ac0 = null;
            this.ac2 = new List$1(DataAnnotationItem.$, 0);
            this.afj = null;
            this.adk = 0;
            this.acr = false;
            this.acd = null;
            this.ace = null;
            this.ack = null;
            this.acl = null;
            let a = new DataAnnotationShapeLayerFrame();
            let b = new DataAnnotationShapeLayerFrame();
            let c = new DataAnnotationShapeLayerFrame();
            let d = this.kh / 1000;
            this.xm = a;
            this.xl = b;
            this.xn = c;
            this.ab = DataAnnotationShapeLayer.$;
        }
        get_acz() {
            return true;
        }
        get acz() {
            return this.get_acz();
        }
        get acp() {
            return this.aco;
        }
        set acp(a) {
            if (this.aco != a) {
                let b = this.aco;
                this.aco = a;
                this.raisePropertyChanged("OverlayTextColumn", b, this.aco);
            }
        }
        get acn() {
            return this.acm;
        }
        set acn(a) {
            let b = this.acm;
            if (OverlayTextUtil.q(a)) {
                a = OverlayTextUtil.c();
            }
            this.acm = a;
            if (b != this.acm) {
                this.raisePropertyChanged("OverlayTextStyle", b, this.acm);
            }
        }
        rg(a, b, c, d) {
            if (b == "CrosshairPoint") {
                return;
            }
            super.rg(a, b, c, d);
            switch (b) {
                case "SeriesViewer":
                    if (d == null) {
                        if (this.ac0 != null && this.ac0.count > 0) {
                            let e;
                            if (this.d4()) {
                                e = this.xn;
                            }
                            else {
                                e = this.xl;
                            }
                            e.a3();
                            this.aep(e, true, true);
                        }
                    }
                    break;
                case DataAnnotationShapeLayer.$$p[0]:
                case "AreaFillOpacity":
                    this.ry(true);
                    break;
                case DataAnnotationShapeLayer.$$p[1]:
                case "OverlayTextColumn":
                case DataAnnotationShapeLayer.$$p[24]:
                case DataAnnotationShapeLayer.$$p[19]:
                case DataAnnotationShapeLayer.$$p[2]:
                case DataAnnotationShapeLayer.$$p[13]:
                case DataAnnotationShapeLayer.$$p[14]:
                case DataAnnotationShapeLayer.$$p[16]:
                case DataAnnotationShapeLayer.$$p[15]:
                case DataAnnotationShapeLayer.$$p[3]:
                case DataAnnotationShapeLayer.$$p[4]:
                case DataAnnotationShapeLayer.$$p[6]:
                case DataAnnotationShapeLayer.$$p[5]:
                case DataAnnotationShapeLayer.$$p[8]:
                case DataAnnotationShapeLayer.$$p[9]:
                case DataAnnotationShapeLayer.$$p[11]:
                case DataAnnotationShapeLayer.$$p[7]:
                case DataAnnotationShapeLayer.$$p[10]:
                case DataAnnotationShapeLayer.$$p[12]:
                case DataAnnotationShapeLayer.$$p[17]:
                case DataAnnotationShapeLayer.$$p[18]:
                case DataAnnotationShapeLayer.$$p[23]:
                case DataAnnotationShapeLayer.$$p[22]:
                    this.abj();
                    break;
                case "FastItemsSource":
                    this.aem(c, d);
                    this.abj();
                    break;
                case DataAnnotationShapeLayer.$$p[21]:
                case DataAnnotationShapeLayer.$$p[20]:
                    if (this.dp != null) {
                        this.dp.deregisterColumn(this.acp);
                        this.acp = this.dn(this.aea);
                    }
                    break;
            }
        }
        act(a) {
            return !stringIsNullOrEmpty(a);
        }
        dl(a) {
            if (this.dp == null) {
                return null;
            }
            if (!this.act(a)) {
                return null;
            }
            return super.dl(a);
        }
        dn(a) {
            if (this.dp == null) {
                return null;
            }
            if (!this.act(a)) {
                return null;
            }
            return super.dn(a);
        }
        aei(a) {
            if (this.dp != null) {
                this.dp.deregisterColumn(a);
            }
        }
        aem(a, b) {
            this.ac2.clear();
            if (typeCast(IFastItemsSource_$type, a) != null) {
                a.deregisterColumn(this.acp);
                this.acp = null;
            }
            if (typeCast(IFastItemsSource_$type, b) != null) {
                this.acp = this.dn(this.aea);
            }
        }
        ph(a, b, c, d) {
            super.ph(a, b, c, d);
            switch (a) {
                case 3:
                    this.aek(b);
                    break;
                case 1:
                    for (let e = b; e < b + c; e++) {
                        let f = new DataAnnotationItem();
                        this.ac2.insert(e, f);
                        this.aek(e);
                    }
                    break;
                case 0:
                    this.ac2.v(b, c);
                    break;
                case 2:
                    for (let g = b; g < b + c; g++) {
                        this.aek(g);
                    }
                    break;
                case 4:
                    this.aej();
                    break;
            }
            this.ry(true);
        }
        ct() {
            return new DataAnnotationShapeLayerView(this);
        }
        q7(a) {
            super.q7(a);
            this.acg = a;
        }
        ael() {
            this.jt = Defaults.dataAnnotationShapeThickness;
            this.im = Defaults.dataAnnotationShapeThickness;
            this.ig = Defaults.dataAnnotationShapeThickness;
            this.il = Defaults.dataAnnotationShapeFillOpacity;
            this.aau = Defaults.dataAnnotationLabelThickness;
            this.acm = OverlayTextUtil.c();
        }
        qv() {
            super.qv();
            if (!this.a1.c && !this.d4()) {
                return;
            }
            if (this.aal) {
                this.aal = false;
                this.aej();
            }
            if (this.d4()) {
                this.aeq(this.xn, false);
            }
            else {
                this.aeq(this.xl, false);
            }
        }
        aej() {
            this.ac2.clear();
            if (this.dp == null || this.dp.count == 0) {
                return;
            }
            for (let a = 0; a < this.dp.count; a++) {
                let b = new DataAnnotationItem();
                this.ac2.add(b);
                this.aek(a);
            }
        }
        aek(a) {
        }
        aeq(a, b) {
            let c = false;
            if (this.ac0 == null) {
                c = true;
                this.ac1 = new List$1(Axis.$, 0);
                this.ac0 = new Dictionary$2(Axis.$, Pool$1.$.specialize(AxisAnnotation.$), 0);
            }
            this.aep(a, c, b);
        }
        aep(a, b, c) {
            DataAnnotationShapeFrameManager.c(this, a, b, this.ac0, this.ac1, c, this.aax, this.aaw);
        }
        y3(a, b) {
            super.y3(a, b);
            let c = a;
            let d = true;
            c.a3();
            this.adk = 0;
            if (this.aai != null) {
                if (this.aaq(this.aai)) {
                    this.aeo(this.aai, c, d);
                }
            }
            else {
                if (typeCast(XamDataChart.$, this.dc) !== null) {
                    let e = this.dc;
                    let f = true;
                    for (let g of fromEnum(e.axes)) {
                        if (!this.aaq(g)) {
                            continue;
                        }
                        if (!g.dh) {
                            f = false;
                        }
                    }
                    for (let h of fromEnum(e.axes)) {
                        if (!this.aaq(h)) {
                            continue;
                        }
                        if (this.aak == 0) {
                            if (typeCast(CategoryAxisBase.$, h) !== null) {
                                this.aeo(h, c, d);
                            }
                            else if (h.dh && !h.dq && f) {
                                this.aeo(h, c, d);
                            }
                        }
                        else if (this.aak == 1 && (h.c8 || h.dc)) {
                            this.aeo(h, c, d);
                        }
                        else if (this.aak == 4 && h.c8) {
                            this.aeo(h, c, d);
                        }
                        else if (this.aak == 5 && h.dc) {
                            this.aeo(h, c, d);
                        }
                        else if (this.aak == 6 && h.dh && !h.dq) {
                            this.aeo(h, c, d);
                        }
                        else if (this.aak == 7 && h.dh && h.dq) {
                            this.aeo(h, c, d);
                        }
                        else if (this.aak == 3 && h.dq) {
                            this.aeo(h, c, d);
                        }
                        else if (this.aak == 2 && !h.dq) {
                            this.aeo(h, c, d);
                        }
                    }
                }
            }
        }
        aeo(a, b, c) {
            this.acd = null;
            this.ace = null;
            this.ack = null;
            this.acl = null;
            let d = this.getEffectiveViewport();
            let e = this.dc.xm;
            if (a.dq) {
                this.ace = a;
                if (this.ace.am != null) {
                    this.acd = this.ace.am;
                }
                else {
                    this.acd = this.acc(a);
                }
                this.acr = false;
            }
            else {
                this.acd = a;
                if (this.acd.am != null) {
                    this.ace = this.acd.am;
                }
                else {
                    this.ace = this.acc(a);
                }
                this.acr = true;
            }
            if (this.acd == null) {
                return;
            }
            if (this.ace == null) {
                return;
            }
            this.acl = new ScalerParams(1, e, this.ace.n1, this.ace.df);
            this.ack = new ScalerParams(1, e, this.acd.n1, this.acd.df);
            this.ack.c = d;
            this.acl.c = d;
            let f = this.ig;
            let g = this.zy();
            if (g == null) {
                g = BrushUtil.j(255, 0, 0, 0);
            }
            let h = this.acz ? this.zz() : g;
            if (h == null) {
                h = BrushUtil.j(255, 0, 0, 0);
            }
            g = OverlayTextUtil.ah(g, this.xx, this.w8);
            h = OverlayTextUtil.ah(h, this.xx, this.w8);
            let i = this.acr;
            this.aej();
            this.acg.cu();
            this.aen();
            let j = this.acn;
            let k = OverlayTextUtil.o(j, this.acy);
            let l = this.aci;
            if (l == 18) {
                k = false;
            }
            if (k) {
                this.acg.cq.count = this.ac2.count;
                this.acg.cp.count = this.ac2.count;
            }
            for (let m = 0; m < this.ac2.count; m++) {
                let n = this.ac2._inner[m];
                n.dataIndex = m;
                n.shapeBrush = n.shapeBrush != null ? n.shapeBrush : g;
                n.shapeOutline = n.shapeOutline != null ? n.shapeOutline : h;
                if (this.acz) {
                    n.shapeBrush = BrushUtil.s(n.shapeBrush, this.il);
                }
                n.shapeThickness = !isNaN_(n.shapeThickness) ? n.shapeThickness : f;
                n.h = 1.7976931348623157E+308;
                n.f = 1.7976931348623157E+308;
                n.g = -1.7976931348623157E+308;
                n.d = -1.7976931348623157E+308;
                let o = new List$1(Point_$type, 0);
                for (let p = 0; p < n.c.count; p++) {
                    let q = n.c._inner[p];
                    let r = this.afm(q.y, false);
                    o.add(r);
                    let s = this.afm(q.y, true);
                    n.h = Math.min(s.y, n.h);
                    n.d = Math.max(s.y, n.d);
                    n.f = Math.min(s.x, n.f);
                    n.g = Math.max(s.x, n.g);
                }
                let t = new List$1(DataAnnotationInfo.$, 0);
                t = new List$1(DataAnnotationInfo.$, 0);
                t.o(n.c);
                t.o(n.b);
                if (this.stylingShapeAnnotation != null) {
                    this.stylingShapeAnnotation(this, n);
                }
                b.ay.add(o);
                b.aw.add(n.a);
                b.av.add(n.shapeBrush);
                b.ax.add(n.shapeOutline);
                b.az.add(n.shapeThickness);
                b.a0.add(this.acq);
                let u = this.ab5;
                if (u == null) {
                    u = this.aam ? g : Defaults.dataAnnotationLabelBackground;
                }
                let v = this.ab6;
                if (v == null) {
                    v = this.aan ? h : Defaults.dataAnnotationLabelBorderStroke;
                }
                let w = this.acz ? n.shapeOutline : n.shapeBrush;
                let x = this.ab7;
                if (x == null) {
                    x = this.aap ? w : this.ab7;
                }
                let y = OverlayTextUtil.t(this.aau, Defaults.dataAnnotationLabelBorderThickness);
                let z = OverlayTextUtil.t(this.aas, Defaults.dataAnnotationLabelBorderRadius);
                for (let aa of fromEnum(t)) {
                    if (aa.borderColor == null) {
                        aa.borderColor = v;
                    }
                    if (aa.background == null) {
                        aa.background = u;
                    }
                    if (aa.textColor == null) {
                        aa.textColor = x;
                    }
                    aa.borderColor = OverlayTextUtil.ah(aa.borderColor, this.aat, this.aag);
                    aa.background = OverlayTextUtil.ah(aa.background, this.aar, this.aaf);
                    aa.textColor = OverlayTextUtil.af(aa.background, aa.textColor, this.aav, this.aah);
                    if (isNaN_(aa.borderThickness)) {
                        aa.borderThickness = y;
                    }
                    if (isNaN_(aa.borderRadius)) {
                        aa.borderRadius = z;
                    }
                    let ab = this.afm(aa.y, false);
                    aa.xAxisPixel = ab.x;
                    aa.yAxisPixel = ab.y;
                    aa.xAxisWindow = this.adi(ab.x);
                    aa.yAxisWindow = this.adj(ab.y);
                    aa.xAxisValue = aa.c ? this.acd.fw(ab.x, this.ack) : NaN;
                    aa.yAxisValue = aa.d ? this.ace.fw(ab.y, this.acl) : NaN;
                    aa.xAxisLabel = this.adm(this.acd, aa, true);
                    aa.yAxisLabel = this.adm(this.ace, aa, false);
                    aa.dataIndex = n.dataIndex;
                    if (this.stylingAxisAnnotation != null) {
                        this.stylingAxisAnnotation(this, aa);
                    }
                }
                if (this.aao) {
                    for (let ac = 0; ac < t.count; ac++) {
                        let ad = t._inner[ac];
                        let ae = !stringIsNullOrEmpty(ad.xAxisLabel);
                        let af = !stringIsNullOrEmpty(ad.yAxisLabel);
                        DataAnnotationShapeFrameManager.b(b, ad.xAxisValue, ad.yAxisValue, ad.xAxisLabel, ad.yAxisLabel, ad.textColor, ad.background, ad.borderColor, ad.borderThickness, ad.borderRadius, this.ab8, ae, af, this.acd, this.ace, this.ack, this.acl);
                    }
                }
                let ag = this.adq;
                if (stringIsNullOrEmpty(ag)) {
                    ag = this.ado(m, this.acp);
                }
                let ah = new Size(1, 0, 0);
                let ai = { $type: Point_$type, x: NaN, y: NaN };
                let aj = this.afi;
                if (aj == null && this.acx) {
                    aj = g;
                }
                let ak = this.afg;
                if (ak == null && this.acv) {
                    ak = g;
                }
                let al = this.afh;
                if (al == null && this.acw) {
                    al = g;
                }
                let am = new OverlayTextUpdatingEventArgs();
                am.dataIndex = m;
                am.backgroundMode = this.ab9;
                am.backgroundShift = this.ac9;
                am.background = ak;
                am.borderMode = this.aca;
                am.borderShift = this.adb;
                am.borderStroke = al;
                am.borderRadius = this.ada;
                am.borderThickness = this.adc;
                am.textLocation = this.aci;
                am.textAngle = this.ac8;
                am.textVisible = this.acy;
                am.textContent = ag;
                am.textColorMode = this.acb;
                am.textColorShift = this.add;
                am.textColor = aj;
                am.shapeBrush = g;
                am.shapeOutline = h;
                am.f = !i;
                am.horizontalMargin = this.ade;
                am.verticalPadding = this.adh;
                am.verticalMargin = this.adg;
                am.horizontalPadding = this.adf;
                if (this.stylingOverlayText != null && k) {
                    this.stylingOverlayText(this, am);
                }
                OverlayTextUtil.ad(am);
                if (k && !am.textEmpty && am.textVisible) {
                    ah = this.cw.cc(am.textContent, j);
                    ai = OverlayTextUtil.ak(am.textLocation, ah, am.textAngle, am.horizontalMargin, am.verticalMargin, am.horizontalPadding, am.verticalPadding, n.ac, i);
                }
                else {
                    am.textVisible = false;
                }
                if (!Extensions.a(ai)) {
                    am.textVisible = false;
                }
                b.aj.add(am.borderThickness);
                b.ah.add(am.borderStroke);
                b.ai.add(am.borderRadius);
                b.ag.add(am.background);
                b.ar.add(ah);
                b.am.add(j);
                b.ak.add(am.textColor);
                b.af.add(am.textAngle);
                b.al.add(am.textContent);
                b.ao.add(am.horizontalPadding);
                b.at.add(am.verticalPadding);
                b.an.add(am.horizontalMargin);
                b.as.add(am.verticalMargin);
                b.au.add(am.textVisible);
                b.ap.add(ai.x);
                b.aq.add(ai.y);
            }
        }
        aen() {
            if (OverlayTextUtil.q(this.acm)) {
                this.acm = OverlayTextUtil.c();
            }
            else if (OverlayTextUtil.k(this.acm)) {
                this.acm = this.cw.l(this.acm.fontString);
            }
        }
        adn(a, b, c, d) {
            if (isNaN_(b)) {
                return null;
            }
            if (c >= 0) {
                let e = new NumberFormatSpecifier();
                e.minimumFractionDigits = c;
                e.maximumFractionDigits = d > 0 ? d : c;
                let f = new BindingFormatter();
                f.j = "{0}";
                f.d = [e];
                return f.i(b);
            }
            let g = 0;
            if (d >= 0) {
                g = d;
            }
            else if (a.dh) {
                let h = a.f5();
                g = h == 0 ? 0 : truncate(Math.max(-Math.floor(log10(h)), 0));
                g += 1;
            }
            return round10N(b, g).toString();
        }
        adm(a, b, c) {
            let d = c ? b.dataValueX : b.dataValueY;
            let e = c ? b.dataLabelX : b.dataLabelY;
            let f = c ? b.xAxisValue : b.yAxisValue;
            let g = c ? b.xAxisPixel : b.yAxisPixel;
            let h = c ? b.xAxisWindow : b.yAxisWindow;
            let i = c ? b.a : b.b;
            if (i == 6) {
                return null;
            }
            if (this.aaj != 0 && i == 0) {
                i = this.aaj;
            }
            if (i == 0) {
                if (!stringIsNullOrEmpty(e)) {
                    return e;
                }
                else if (!isNaN_(d)) {
                    return this.adn(a, d, this.aax, this.aaw);
                }
            }
            else if (i == 1) {
                return this.adn(a, d, this.aax, this.aaw);
            }
            else if (i == 2) {
                if (stringIsNullOrEmpty(e)) {
                    return null;
                }
                else {
                    return e;
                }
            }
            else if (i == 4) {
                let j = this.aax;
                if (j < 0) {
                    j = 0;
                }
                let k = this.aax;
                if (k < 0) {
                    k = 0;
                }
                return this.adn(a, g, j, k);
            }
            else if (i == 5) {
                let l = this.aax;
                if (l < 0) {
                    l = 2;
                }
                let m = this.aax;
                if (m < 0) {
                    m = 2;
                }
                return this.adn(a, h, l, m);
            }
            else if (i == 3) {
                if (a.dh) {
                    return this.adn(a, f, this.aax, this.aaw);
                }
                else {
                    return a.ih(d);
                }
            }
            return null;
        }
        y6(a, b) {
            super.y6(a, b);
            let c = this.acg.co;
            let d = a;
            let e = d.ay.count;
            let f = 0;
            let g = b.b9.top;
            let h = b.b9.left;
            let i = b.b9.right;
            let j = b.b9.bottom;
            let k = Math.min(h, i);
            let l = Math.min(g, j);
            let m = Math.max(h, i);
            let n = Math.max(g, j);
            let o = m - k;
            let p = n - l;
            for (let q = 0; q < e; q++) {
                if (!d.a0._inner[q]) {
                    continue;
                }
                let r = null;
                let s = this.aeh(c, f, q, d);
                r = s.c;
                f = s.d;
                let t = true;
                let u = new List$1(PathFigure.$, 0);
                let v = null;
                for (let w of fromEnum(d.ay._inner[q])) {
                    if (!Extensions.a(w)) {
                        t = true;
                        if (v != null && v._segments.count > 0) {
                            u.add(v);
                        }
                        continue;
                    }
                    if (t) {
                        t = false;
                        v = new PathFigure();
                        v._startPoint = w;
                    }
                    else {
                        let x = ((() => {
                            let $ret = new LineSegment(1);
                            $ret.c = w;
                            return $ret;
                        })());
                        v._segments.add(x);
                    }
                }
                if (v != null && v._segments.count > 0) {
                    u.add(v);
                }
                let y = new PathGeometry();
                for (let z of fromEnum(u)) {
                    z._isClosed = d.aw._inner[q];
                    y.c.add(z);
                }
                r.an = y;
                if (d.au._inner[q]) {
                    this.acg.cq.item(q)._visibility = 0;
                    this.acg.cp.item(q)._visibility = 0;
                }
                else {
                    this.acg.cq.item(q)._visibility = 1;
                    this.acg.cp.item(q)._visibility = 1;
                }
                if (d.au._inner[q]) {
                    let aa = new OverlayTextInfo();
                    aa.background = d.ag._inner[q];
                    aa.textColor = d.ak._inner[q];
                    aa.verticalPadding = d.at._inner[q];
                    aa.horizontalPadding = d.ao._inner[q];
                    aa.horizontalMargin = d.an._inner[q];
                    aa.verticalMargin = d.as._inner[q];
                    aa.borderThickness = d.aj._inner[q];
                    aa.borderStroke = d.ah._inner[q];
                    aa.borderRadius = d.ai._inner[q];
                    aa.textLocation = this.aci;
                    aa.textAngle = d.af._inner[q];
                    aa.textVisible = d.au._inner[q];
                    aa.textContent = d.al._inner[q];
                    aa.f = d.am._inner[q];
                    aa.ad = d.ar._inner[q];
                    aa.u = this.acg.cq.item(q);
                    aa.ac = this.acg.cp.item(q);
                    let ab = d.ap._inner[q];
                    let ac = d.aq._inner[q];
                    aa.aa = { $type: Point_$type, x: ab, y: ac };
                    OverlayTextUtil.y(aa.ac, aa.background, aa.borderStroke, aa.borderThickness, aa.borderRadius);
                    OverlayTextUtil.z(aa.u, aa.textColor);
                    OverlayTextUtil.x(aa);
                    OverlayTextUtil.w(aa);
                    this.cw.av(aa.u, aa.f);
                    this.cw.aw(aa.u, aa.f);
                }
            }
            c.count = f;
            if (this.d4()) {
                this.aeq(this.xn, true);
            }
            else {
                this.aeq(this.xl, false);
            }
        }
        aeh(a, b, c, d) {
            let e = a.item(b);
            b++;
            e.ad = d.az._inner[c];
            e._stroke = d.ax._inner[c];
            e._fill = d.av._inner[c];
            e.ai = this.z0;
            e.am = this.wf;
            e.al = this.we;
            e.ak = this.we;
            e.aj = this.wd;
            e.ac = this.jk;
            return new Tuple$2(Path.$, Number_$type, e, b);
        }
        xc() {
            return 3;
        }
        xz() {
            return 0.1;
        }
        x2() {
            return -0.4;
        }
        x1() {
            return NaN;
        }
        zb() {
            super.zb();
            this.xx = this.x5();
        }
        x5() {
            if (isNaN_(this.x8)) {
                switch (this.w8) {
                    case 1: return this.xz();
                    case 2: return this.x2();
                    case 4:
                    case 3: return this.x1();
                }
            }
            return this.x8;
        }
        z3() {
            if (this.afj == null) {
                this.afj = new DoubleCollection();
                this.afj.add(DeviceUtils.g(2));
                this.afj.add(DeviceUtils.g(4));
            }
            return this.afj;
        }
        ado(a, b) {
            if (b == null || b.count <= a) {
                return null;
            }
            let c = b.item(a);
            return c != null ? c.toString() : null;
        }
        ac7(a, b) {
            if (b == null || b.count <= a) {
                return NaN;
            }
            return b.item(a);
        }
        afl(a, b) {
            if (b == null || b.count <= a) {
                return { $type: Point_$type, x: NaN, y: NaN };
            }
            let c = b.item(a);
            if (c == null || getInstanceType(c) != Point_$type) {
                return { $type: Point_$type, x: NaN, y: NaN };
            }
            return b.item(a);
        }
        afm(a, b = false) {
            let c = b ? 1 : 2;
            let d = b ? 0 : -1;
            if (this.acu) {
                let e = a.x;
                let f = a.y;
                if (isInfinity(e) && e > 0) {
                    e = c;
                }
                if (isInfinity(e) && e < 0) {
                    e = d;
                }
                if (isInfinity(f) && f > 0) {
                    f = c;
                }
                if (isInfinity(f) && f < 0) {
                    f = d;
                }
                return this.dc.xe({ $type: Point_$type, x: e, y: f });
            }
            else {
                let g = a.x;
                let h = a.y;
                let i = false;
                let j = false;
                if (isInfinity(g) && g > 0) {
                    g = Math.floor(this.ac5(c));
                    i = true;
                }
                if (isInfinity(g) && g < 0) {
                    g = Math.floor(this.ac5(d));
                    i = true;
                }
                if (isInfinity(h) && h > 0) {
                    h = Math.floor(this.ac6(c));
                    j = true;
                }
                if (isInfinity(h) && h < 0) {
                    h = Math.floor(this.ac6(d));
                    j = true;
                }
                if (!i && !isNaN_(g)) {
                    g = this.acd.ft(g, this.ack);
                }
                if (!j && !isNaN_(h)) {
                    h = this.ace.ft(h, this.acl);
                }
                return { $type: Point_$type, x: g, y: h };
            }
        }
        ac3(a) {
            return this.acd.ft(a, this.ack);
        }
        ac4(a) {
            return this.ace.ft(a, this.acl);
        }
        acs(a) {
            if (this.acd == null) {
                return false;
            }
            if (this.ace == null) {
                return false;
            }
            if (this.ack == null) {
                return false;
            }
            if (this.acl == null) {
                return false;
            }
            if (this.dp == null) {
                return false;
            }
            if (a < 0 || a >= this.dp.count) {
                return false;
            }
            if (this.ac2 == null) {
                return false;
            }
            if (a < 0 || a >= this.ac2.count) {
                return false;
            }
            return true;
        }
        acc(a) {
            if (typeCast(XamDataChart.$, this.dc) !== null) {
                let b = this.dc;
                for (let c of fromEnum(b.axes)) {
                    if (c.dq && !a.dq) {
                        return c;
                    }
                    if (!c.dq && a.dq) {
                        return c;
                    }
                }
            }
            return null;
        }
        afk(a) {
            return this.dc.xe(a);
        }
        ac5(a) {
            return this.dc.xe({ $type: Point_$type, x: a, y: NaN }).x;
        }
        ac6(a) {
            return this.dc.xe({ $type: Point_$type, x: NaN, y: a }).y;
        }
        afn(a) {
            return this.dc.xg(a);
        }
        adi(a) {
            return this.dc.xg({ $type: Point_$type, x: a, y: NaN }).x;
        }
        adj(a) {
            return this.dc.xg({ $type: Point_$type, x: NaN, y: a }).y;
        }
    }
    DataAnnotationShapeLayer.$t = markType(DataAnnotationShapeLayer, 'DataAnnotationShapeLayer', DataAnnotationAxisLayer.$);
    DataAnnotationShapeLayer.$$p = markDep(DependencyProperty, PropertyMetadata, DataAnnotationShapeLayer, 'raisePropertyChanged', ['AnnotationShapeVisible:acq:aer', [0, true], 'ItemsUseWorldCoordinates:acu:aes', [0, false], 'OverlayTextAngle:ac8:aet', [1, NaN], 'OverlayTextBackgroundMatchLayer:acv:aeu', [0, false], 'OverlayTextBackgroundMode:ab9:aev', [AnnotationAppearanceMode_$type, enumGetBox(AnnotationAppearanceMode_$type, 0)], 'OverlayTextBackground:afg:aew', [Brush.$, null], 'OverlayTextBackgroundShift:ac9:aex', [1, NaN], 'OverlayTextBorderColor:afh:aey', [Brush.$, null], 'OverlayTextBorderMatchLayer:acw:aez', [0, false], 'OverlayTextBorderMode:aca:ae0', [AnnotationAppearanceMode_$type, enumGetBox(AnnotationAppearanceMode_$type, 0)], 'OverlayTextBorderRadius:ada:ae1', [1, NaN], 'OverlayTextBorderShift:adb:ae2', [1, NaN], 'OverlayTextBorderThickness:adc:ae3', [1, 1], 'OverlayTextColorMatchLayer:acx:ae4', [0, true], 'OverlayTextColorMode:acb:ae5', [AnnotationAppearanceMode_$type, enumGetBox(AnnotationAppearanceMode_$type, 0)], 'OverlayTextColor:afi:ae6', [Brush.$, null], 'OverlayTextColorShift:add:ae7', [1, NaN], 'OverlayTextHorizontalMargin:ade:ae8', [1, NaN], 'OverlayTextHorizontalPadding:adf:ae9', [1, NaN], 'OverlayTextLocation:aci:afa', [OverlayTextLocation_$type, enumGetBox(OverlayTextLocation_$type, 0)], 'OverlayTextMemberPath:aea:afb', [2, null], 'OverlayText:adq:afc', [2, null], 'OverlayTextVerticalMargin:adg:afd', [1, NaN], 'OverlayTextVerticalPadding:adh:afe', [1, NaN], 'OverlayTextVisible:acy:aff', [0, true]]);
    return DataAnnotationShapeLayer;
})();
/**
 * @hidden
 */
export let DataAnnotationShapeLayerView = /*@__PURE__*/ (() => {
    class DataAnnotationShapeLayerView extends AnnotationLayerView {
        constructor(a) {
            super(a);
            this.cn = null;
            this.co = null;
            this.ct = null;
            this.cs = null;
            this.cq = null;
            this.cr = null;
            this.cp = null;
            this.cn = a;
            this.ct = new List$1(Path.$, 0);
        }
        a4() {
            super.a4();
            this.co = ((() => {
                let $ret = new Pool$1(Path.$);
                $ret.create = runOn(this, this.c6);
                $ret.activate = runOn(this, this.cv);
                $ret.disactivate = runOn(this, this.cx);
                $ret.destroy = runOn(this, this.cw);
                return $ret;
            })());
            this.cs = new List$1(TextBlock.$, 0);
            this.cq = ((() => {
                let $ret = new Pool$1(TextBlock.$);
                $ret.create = runOn(this, this.c5);
                $ret.activate = runOn(this, this.c1);
                $ret.disactivate = runOn(this, this.c3);
                $ret.destroy = runOn(this, this.c2);
                return $ret;
            })());
            this.cr = new List$1(Rectangle.$, 0);
            this.cp = ((() => {
                let $ret = new Pool$1(Rectangle.$);
                $ret.create = runOn(this, this.c7);
                $ret.activate = runOn(this, this.cy);
                $ret.disactivate = runOn(this, this.c0);
                $ret.destroy = runOn(this, this.cz);
                return $ret;
            })());
            this.cn.ael();
        }
        cu() {
        }
        c5() {
            let a = new TextBlock();
            this.cs.add(a);
            return a;
        }
        c2(a) {
            if (this.cs.contains(a)) {
                this.cs.remove(a);
            }
        }
        c1(a) {
            a._visibility = 0;
            a.s = 0;
        }
        c3(a) {
            a._visibility = 1;
        }
        c7() {
            let a = new Rectangle();
            this.cr.add(a);
            return a;
        }
        cz(a) {
            a.dataContext = null;
            if (this.cr.contains(a)) {
                this.cr.remove(a);
            }
        }
        cy(a) {
            a._visibility = 0;
        }
        c0(a) {
            a._visibility = 1;
        }
        c6() {
            let a = new Path();
            a.j = new TranslateTransform();
            this.ct.add(a);
            return a;
        }
        cv(a) {
            a._visibility = 0;
        }
        cx(a) {
            a._visibility = 1;
        }
        cw(a) {
            this.ct.remove(a);
        }
        c4(a, b, c, d) {
            if (a.an == null || a.an.c.x != d || a.an.d.x != c) {
                let e = ((() => {
                    let $ret = new LineGeometry();
                    $ret.d = { $type: Point_$type, x: c, y: b };
                    $ret.c = { $type: Point_$type, x: d, y: b };
                    return $ret;
                })());
                a.an = e;
            }
        }
        bj(a, b) {
            super.bj(a, b);
            if (a.d && !b) {
                for (let c = 0; c < this.ct.count; c++) {
                    let d = this.ct._inner[c];
                    if (d._visibility == 0) {
                        a.t(d);
                    }
                }
                for (let e = 0; e < this.cr.count; e++) {
                    let f = this.cr._inner[e];
                    if (f._visibility == 0) {
                        a.w(f);
                    }
                }
                for (let g = 0; g < this.cs.count; g++) {
                    let h = this.cs._inner[g];
                    if (h._visibility == 0) {
                        a.ae(h.dataContext);
                        a.x(h);
                    }
                }
            }
        }
        ax(a) {
            super.ax(a);
            for (let b = 0; b < this.ct.count; b++) {
                this.f.bc.exportPathData(a, this.ct._inner[b], "DataAnnotationPath", ["Main", "DataAnnotation"]);
            }
        }
    }
    DataAnnotationShapeLayerView.$t = markType(DataAnnotationShapeLayerView, 'DataAnnotationShapeLayerView', AnnotationLayerView.$);
    return DataAnnotationShapeLayerView;
})();
