/*
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 { Base, Point_$type, runOn, fromEnum, markType, PointUtil } from "igniteui-angular-core";
import { ISeriesViewerInteractionManager_$type } from "./ISeriesViewerInteractionManager";
import { SeriesHighlightingManager } from "./SeriesHighlightingManager";
import { SeriesSelectionHighlightingManager } from "./SeriesSelectionHighlightingManager";
import { SeriesFocusHighlightingManager } from "./SeriesFocusHighlightingManager";
import { SeriesViewerScrollbarManager } from "./SeriesViewerScrollbarManager";
import { Rect } from "igniteui-angular-core";
import { TileZoomManager } from "./TileZoomManager";
import { ChartSelection } from "./ChartSelection";
import { ViewportUtils } from "./ViewportUtils";
import { Size } from "igniteui-angular-core";
import { MathUtil } from "igniteui-angular-core";
import { MouseEventArgs } from "igniteui-angular-core";
import { MouseButtonEventArgs } from "igniteui-angular-core";
import { truncate, intDivide, isNaN_ } from "igniteui-angular-core";
/**
 * @hidden
 */
export let SeriesViewerInteractionManager = /*@__PURE__*/ (() => {
    class SeriesViewerInteractionManager extends Base {
        constructor() {
            super();
            this.y = 0;
            this.z = 0;
            this.ar = null;
            this.v = 0;
            this.w = 0;
            this.u = 0;
            this.x = 0;
            this.k = false;
            this.l = false;
            this.as = null;
            this.au = null;
            this.m = false;
            this.q = false;
            this.h = null;
            this.e = null;
            this.f = null;
            this.d = null;
            this.g = null;
            this.at = null;
            this.av = null;
            this.c = null;
            this.a = null;
            this.j = false;
            this.at = Rect.empty;
            this.as = Rect.empty;
        }
        get f$e() {
            if (this.e == null) {
                this.e = new SeriesHighlightingManager();
            }
            return this.e;
        }
        get f$f() {
            if (this.f == null) {
                this.f = new SeriesSelectionHighlightingManager();
            }
            return this.f;
        }
        get f$d() {
            if (this.d == null) {
                this.d = new SeriesFocusHighlightingManager();
            }
            return this.d;
        }
        get f$b() {
            if (this.g == null) {
                this.g = new SeriesViewerScrollbarManager();
            }
            return this.g;
        }
        f$j(a, b, c) {
            let d = a.dc;
            if (a.bo != null) {
                a = a.bo;
            }
            if (a.bl != null) {
                a = a.bl;
            }
            let e = ((() => {
                let $ret = new ChartSelection();
                $ret.item = b;
                $ret.series = a;
                return $ret;
            })());
            let f = a.dc.selectedSeriesItems;
            if (f.contains(e)) {
                return;
            }
            a.dc.selectedSeriesItems.add(e);
        }
        f$aq(a, b, c) {
            let d = a.dc;
            if (a.bo != null) {
                a = a.bo;
            }
            if (a.bl != null) {
                a = a.bl;
            }
            let e = ((() => {
                let $ret = new ChartSelection();
                $ret.item = b;
                $ret.series = a;
                return $ret;
            })());
            let f = a.dc.selectedSeriesItems;
            if (!f.contains(e)) {
                return;
            }
            a.dc.selectedSeriesItems.remove(e);
        }
        f$as(a, b) {
            let c = null;
            let d = null;
            let e = null;
            e = a.dp.e();
            let f;
            let g = ((() => { let h = a.dp.f(b, false, f, false); f = h.p2; return h.ret; })());
            if (g != e) {
                if (e != null && e.ba.a$e) {
                    e.ba.a$af(e, b, null, null, false);
                }
            }
            c = f;
            if (a != null) {
                a.st(b);
                a.oi(b, false, false, false, false);
            }
            if (g != null && !g.ba.a$e) {
                g.ba.a$ae(g, b, c, d, false);
            }
        }
        f$a(a) {
            if (a.a7 != 0) {
                return a.a7;
            }
            let b = 1;
            let c = false;
            let d = false;
            for (let e = 0; e < a.series.count; e++) {
                let f = a.series._inner[e];
                if (f.isStacked) {
                    f.p9((g) => {
                        if (g.b2 == 2) {
                            c = true;
                        }
                        if (g.b2 == 1) {
                            d = true;
                        }
                        return true;
                    });
                }
                else {
                    if (f.b2 == 2) {
                        c = true;
                    }
                    if (f.b2 == 1) {
                        d = true;
                    }
                }
            }
            if (d) {
                b = 1;
            }
            if (c) {
                b = 2;
            }
            if (c && d) {
                b = 3;
            }
            return b;
        }
        f$ar(a) {
            let b = a.xd;
            let c = b;
            let d = a.dp;
            let e = a.ex();
            let f = a.e0;
            let g = a.gf;
            let h = a.gr;
            if (!e) {
                c = { $type: Point_$type, x: NaN, y: NaN };
            }
            if (c.x < 0 || c.x > 1 || c.y < 0 || c.y > 1) {
                c = { $type: Point_$type, x: NaN, y: NaN };
            }
            for (let i = 0; i < a.series.count; i++) {
                let j = a.series._inner[i];
                j.qi(c);
            }
            a.o8(c);
            let k = a.df == 0 && !a.fk && (a.e6 || f) && !g && !h;
            let l = a.x4;
            let m = a.xq;
            if (k && !isNaN_(b.x) && !l.isEmpty) {
                let n = ViewportUtils.e(b.x, a.xm, l, m);
                d.eo(n, l.top, n, l.bottom);
                d.ed();
                d.ei(n);
            }
            else {
                d.cl();
            }
            if (k && !isNaN_(b.y) && !l.isEmpty) {
                let o = ViewportUtils.i(b.y, a.xm, l, m);
                d.eh(l.left, o, l.right, o);
                d.d9();
            }
            else {
                d.cg();
            }
        }
        f$aj(a) {
            switch (a.df) {
                case 0:
                    a.dp.d5();
                    this.f$ar(a);
                    a.dp.cd();
                    break;
                case 1:
                    a.dp.d7();
                    a.dp.ck();
                    this.f$ar(a);
                    a.dp.cc();
                    break;
                case 2:
                    a.dp.d7();
                    a.dp.ck();
                    this.f$ar(a);
                    a.dp.ce();
                    break;
            }
        }
        f$t(a, b) {
            if (b.x >= 0 && b.y >= 0 && b.x <= a.x4.width && b.y <= a.x4.height) {
                this.an(a, b);
            }
            else {
                a.ou();
            }
        }
        an(a, b) {
            let c = a.dp;
            let d = a.x4;
            if (a.fl || a.fk) {
                return;
            }
            if (a.e0 && a.e6) {
                let e = d.height > d.width;
                c.bv(e);
                for (let f of fromEnum(a.series)) {
                    if (f.isStacked) {
                        f.p9((g) => {
                            if (g._visibility == 0) {
                                g.sd(b, runOn(c, c.bm));
                            }
                            if (g.ei) {
                                g.p7((h) => {
                                    if (h._visibility == 0) {
                                        h.sd(b, runOn(c, c.bm));
                                    }
                                    return true;
                                });
                            }
                            return true;
                        });
                    }
                    else if (f.ei) {
                        if (f._visibility == 0) {
                            if (f._visibility == 0) {
                                f.sd(b, runOn(c, c.bm));
                            }
                        }
                        f.p7((g) => {
                            if (g._visibility == 0) {
                                g.sd(b, runOn(c, c.bm));
                            }
                            return true;
                        });
                    }
                    else {
                        if (f._visibility == 0) {
                            f.sd(b, runOn(c, c.bm));
                        }
                    }
                }
                c.ea();
            }
        }
        am(a, b) {
            if (a.e6 || a.fi) {
                a.e0 = true;
                a.q8();
                this.as = new Rect(0, b.x, b.y, 0, 0);
                this.au = new Rect(0, b.x, b.y, 0, 0);
                a.df = 0;
                a.oe(a.xg(b));
            }
        }
        f$ah(a, b) {
            this.am(a, b);
            this.an(a, b);
            this.f$ar(a);
        }
        f$u(a, b, c) {
            if (!a.e0) {
                this.ap(a, b, c);
            }
        }
        f$s(a, b) {
            this.at = Rect.empty;
            a.ou();
        }
        f$ao(a, b) {
            if (this.m) {
                this.f$b.onScrollbarDragCancel();
                this.m = false;
            }
            let c = a.dp;
            this.x = 1;
            this.ah(a);
            a.df = 0;
            this.k = true;
            a.gf = true;
            a.q9(true, b);
        }
        ah(a) {
            let b = a.dp;
            a.e0 = false;
            b.cj();
            b.cf();
            b.ch();
            a.oe({ $type: Point_$type, x: NaN, y: NaN });
            b.cg();
            b.cl();
            b.ck();
        }
        f$ag(a, b) {
            this.f$ao(a, b);
        }
        f$ap(a, b, c, d, e) {
            this.y = b.x;
            this.z = b.y;
            this.v = c;
            this.w = d;
            this.u = e;
            this.ar = a.xm;
            this.f$ao(a, b);
        }
        f$af(a, b) {
            let c = a.dp;
            c.cg();
            c.cl();
            if (c.av) {
                this.ad(a, b);
            }
            else {
                this.af(a, b);
                this.x = b;
            }
        }
        f$al(a, b, c, d, e) {
            let f = a.dp;
            f.cg();
            f.cl();
            this.v = this.v * c;
            this.w = this.w * d;
            this.u = this.u * e;
            if (a.fr) {
                this.v = this.u;
                this.w = this.u;
            }
            let g = a.xm;
            let h = a.x4;
            let i = b.x - this.y;
            let j = b.y - this.z;
            this.y = b.x;
            this.z = b.y;
            let k = g.width;
            let l = g.height;
            let m = this.ar.width / this.v;
            let n = this.ar.height / this.w;
            if (m > 1) {
                m = 1;
            }
            if (n > 1) {
                n = 1;
            }
            let o = { $type: Point_$type, x: b.x, y: b.y };
            let p = { $type: Point_$type, x: (o.x - h.left) / h.width * g.width + g.left, y: (o.y - h.top) / h.height * g.height + g.top };
            let q = new Rect(0, g.left, g.top, m, n);
            let r = { $type: Point_$type, x: (p.x - q.left) / q.width * h.width + h.left, y: (p.y - q.top) / q.height * h.height + h.top };
            let s = (r.x - o.x) - i;
            let t = (r.y - o.y) - j;
            let u = s / h.width * q.width;
            let v = t / h.height * q.height;
            q = new Rect(0, q.left + u, q.top + v, q.width, q.height);
            g = q;
            a.s9(g, true);
        }
        f$ac(a, b) {
            this.as = new Rect(0, b.x, b.y, 0, 0);
            this.au = new Rect(0, b.x, b.y, 0, 0);
        }
        ae(a, b, c) {
            let d = a.xm.width;
            let e = a.xm.height;
            let f = a.xm.left + d / 2;
            let g = a.xm.top + e / 2;
            d = d / b;
            e = e / b;
            let h = f - d / 2;
            let i = g - e / 2;
            a.s9(new Rect(0, h, i, d, e), true);
        }
        f$ae(a, b) {
            let c = a.dp;
            if (c.av) {
                this.ad(a, b);
            }
            else {
                this.af(a, b);
            }
            this.as = Rect.empty;
            a.gf = false;
        }
        f$v(a, b) {
            a.gf = false;
            this.as = Rect.empty;
            a.ou();
        }
        f$ab(a, b) {
            a.n7();
        }
        f$ak(a, b, c, d, e) {
            a.gf = false;
            this.as = Rect.empty;
            a.ou();
        }
        ad(a, b) {
            let c = a.x5;
            let d = 1 / b;
            let e = { $type: Point_$type, x: c.x + c.width / 2, y: c.y + c.height / 2 };
            let f = { $type: Point_$type, x: c.x - e.x, y: c.y - e.y };
            let g = new Rect(0, f.x * d + e.x, f.y * d + e.y, c.width * d, c.height * d);
            a.s9(g, true);
        }
        af(a, b) {
            let c = a.x4;
            let d = a.x5;
            let e = b - this.x;
            if (e != 0) {
                let f = 0.03;
                let g = e < 0 ? 1 + f : 1 - f;
                let h = { $type: Point_$type, x: d.x + d.width / 2, y: d.y + d.height / 2 };
                let i = { $type: Point_$type, x: d.x - h.x, y: d.y - h.y };
                let j = new Rect(0, i.x * g + h.x, i.y * g + h.y, d.width * g, d.height * g);
                a.s9(j, true);
            }
        }
        f$q(a, b, c) {
            if (!this.p(a, b, true)) {
                return;
            }
            if (!a.gf) {
                this.k = false;
            }
            let d = false;
            if (a.e1) {
                if (this.f$b.shouldHandleInteraction(b, c)) {
                    this.m = true;
                    d = true;
                    this.ah(a);
                    a.dp.dr();
                    return;
                }
            }
            this.ap(a, b, c);
            a.qm(b, c);
        }
        ap(a, b, c) {
            let d;
            let e = a.dp;
            if (a.dc != 0) {
                d = a.dc;
            }
            else if (e.ez == 0) {
                let f = a.dd(c);
                switch (f) {
                    case 1:
                        d = a.f1() ? f : 0;
                        break;
                    default:
                        d = f;
                        break;
                }
            }
            else {
                if (e.ez == a.wj) {
                    d = 1;
                }
                else if (e.ez == a.wk) {
                    d = 2;
                }
                else if (e.ez == a.wl) {
                    d = 3;
                }
                else {
                    d = 0;
                }
            }
            switch (d) {
                case 1:
                case 2:
                case 3:
                    a.dp.ca();
                    a.dp.dr();
                    break;
            }
            a.df = d;
            switch (a.df) {
                case 1:
                    this.as = new Rect(0, b.x, b.y, 0, 0);
                    this.au = new Rect(0, b.x, b.y, 0, 0);
                    this.at = new Rect(0, b.x, b.y, 0, 0);
                    e.d8();
                    e.eg(this.as);
                    a.re(Rect.empty, true);
                    break;
                case 2:
                    this.as = new Rect(0, b.x, b.y, 0, 0);
                    this.at = new Rect(0, b.x, b.y, 0, 0);
                    break;
                case 3:
                    this.as = new Rect(0, b.x, b.y, 0, 0);
                    this.au = new Rect(0, b.x, b.y, 0, 0);
                    this.at = new Rect(0, b.x, b.y, 0, 0);
                    e.d8();
                    e.eg(this.as);
                    a.re(Rect.empty, true);
                    break;
            }
            this.av = a.xm;
            a.x6 = a.xm;
        }
        f$an(a) {
            a.su();
            a.dp.dl();
        }
        f$am(a) {
            a.oj();
            a.dp.dk();
        }
        f$at(a) {
            if (a.ew && !this.q) {
                this.q = true;
                this.ao(a);
            }
        }
        f$n(a) {
            if (this.q) {
                this.ag(a);
                this.q = false;
            }
        }
        f$k(a) {
            if (this.h == null) {
                return;
            }
            this.i.ab();
        }
        get i() {
            return this.h;
        }
        ao(a) {
            if (this.h == null) {
                this.h = new TileZoomManager(a, true, a.jo);
                this.h.h = !a.gg;
            }
            a.fh = true;
            a.rd();
            this.h.al();
            a.dp.br();
            a.dp.bs();
        }
        ag(a) {
            if (this.h == null) {
                return;
            }
            a.fh = false;
            a.dp.dg();
            this.h.ah();
            a.sb();
            a.dp.by();
        }
        f$m(a) {
            a.oc();
            a.sd();
        }
        s(a) {
            return a.df == 2;
        }
        t(a, b) {
            return a.c2 == 1 || b || a.ew;
        }
        r(a) {
            return a.df == 1;
        }
        f$p(a, b, c) {
            let d = a.dp;
            if (this.m) {
                a.bp.onScrollbarDrag(b, c);
                return;
            }
            if (this.as.isEmpty && c) {
                this.ap(a, b, c);
            }
            let e = 2;
            if (c) {
                e = 10;
            }
            let f = false;
            let g = false;
            let h = new Rect(2, { $type: Point_$type, x: this.as.x, y: this.as.y }, b);
            let i = new Rect(0, 0, 0, 0, 0);
            if (!this.at.isEmpty) {
                i = new Rect(2, { $type: Point_$type, x: this.at.x, y: this.at.y }, b);
            }
            if (i.width > e || i.height > e) {
                g = true;
            }
            if (i.width > e && i.height > e) {
                f = true;
            }
            if (!a.gf) {
                if (f) {
                    this.k = false;
                }
            }
            if (!a.gf && (a.e0 || !c)) {
                a.oe(a.xg(b));
            }
            if (a.df == 3) {
                if (f) {
                    let j = a.x2(h);
                    a.re(j, true);
                }
                else {
                    a.re(Rect.empty, true);
                }
                a.pl(g, b);
                d.eg(h);
            }
            if (this.r(a)) {
                if (f) {
                    let k = a.x2(h);
                    a.re(k, true);
                }
                else {
                    a.re(Rect.empty, true);
                }
                a.pn(g, b);
                d.eg(h);
            }
            let l = a.x4;
            let m = a.xm;
            if (this.s(a)) {
                let n = l;
                let o = m.left + m.width * (this.as.x - b.x) / n.width;
                let p = m.top + m.height * (this.as.y - b.y) / n.height;
                let q = new Rect(0, o, p, m.width, m.height);
                if (this.t(a, c)) {
                    if (i.width != 0 || i.height != 0) {
                        a.q9(g, b);
                    }
                    a.re(Rect.empty, true);
                    let r = a.xm;
                    a.s9(q, true);
                    let s = a.xm;
                    if (r.equals1(s) && a.dp.k.ac) {
                        a.dp.k.au();
                    }
                    this.as = new Rect(3, b, new Size(1, 0, 0));
                    this.au = new Rect(3, b, new Size(1, 0, 0));
                }
                else {
                    a.re(q, true);
                }
            }
            this.au = new Rect(3, b, new Size(1, 0, 0));
            d.bu(b);
        }
        f$o(a, b, c, d) {
            let e = a.dp;
            let f = 2;
            if (c) {
                f = 10;
            }
            let g = a.x4;
            let h = a.xm;
            if (!d) {
                if (this.m) {
                    this.f$b.onScrollbarDragComplete(b, c);
                    this.m = false;
                    e.bw();
                    return;
                }
            }
            if (!this.k) {
                let i = false;
                let j = new Rect(2, { $type: Point_$type, x: this.as.x, y: this.as.y }, b);
                if (j.width > f && j.height > f) {
                    i = true;
                }
                if (a.df == 3 && i) {
                    a.pk();
                    a.n3(j);
                    e.cf();
                }
                if (a.df == 1) {
                    a.pm();
                    e.cf();
                    if (i) {
                        a.s9(a.x2(j), true);
                    }
                }
                if (a.df == 2) {
                    let k = g;
                    let l = h.left + h.width * (this.as.x - b.x) / k.width;
                    let m = h.top + h.height * (this.as.y - b.y) / k.height;
                    a.s9(new Rect(0, l, m, h.width, h.height), true);
                }
            }
            let n = false;
            let o = new Rect(2, { $type: Point_$type, x: this.at.x, y: this.at.y }, b);
            if (o.width > f || o.height > f) {
                n = true;
            }
            if (n) {
                a.gr = true;
            }
            a.df = 0;
            a.re(Rect.empty, true);
            e.bw();
            a.gr = false;
            e.cg();
            e.cl();
            if (c) {
                e.ck();
                e.cg();
                e.cl();
                e.ch();
            }
            a.ou();
            a.q8();
            a.qn(b, c, d);
        }
        f$ai(a) {
            if (this.i != null) {
                this.i.h = !a.gg;
            }
        }
        f$g(a, b) {
            let c = a.dp;
            let d = a.xm;
            if (a.df == 2 && b == 8) {
                c.bt();
                a.df = 0;
                a.q8();
                a.re(Rect.empty, true);
                if (a.c2 == 1) {
                    a.s9(this.av, true);
                }
                return true;
            }
            if (a.df == 1 && b == 8) {
                c.bt();
                a.df = 0;
                a.q8();
                c.cf();
                a.re(Rect.empty, true);
                return true;
            }
            let e = Rect.empty;
            let f = false;
            switch (b) {
                case 13:
                    f = true;
                    e = new Rect(0, 0, 0, 1, 1);
                    break;
                case 11:
                    f = true;
                    e = new Rect(0, d.left - 0.1 * d.width, d.top - 0.1 * d.height, 1.2 * d.width, 1.2 * d.height);
                    break;
                case 10:
                    f = true;
                    e = new Rect(0, d.left + 0.1 * d.width, d.top + 0.1 * d.height, 0.8 * d.width, 0.8 * d.height);
                    break;
                case 14:
                    if (c.ez == 2) {
                        f = true;
                        this.ai(a);
                    }
                    else {
                        f = true;
                        e = new Rect(0, d.left - 0.1 * d.width, d.top, d.width, d.height);
                        e.x = e.x - Math.min(e.left, 0);
                    }
                    break;
                case 16:
                    if (c.ez == 2) {
                        f = true;
                        this.al(a);
                    }
                    else {
                        f = true;
                        e = new Rect(0, d.left + 0.1 * d.width, d.top, d.width, d.height);
                        e.x = e.x - Math.max(e.right - 1, 0);
                    }
                    break;
                case 9:
                    if (a.focusedSeriesItems.count > 0) {
                        f = true;
                        for (let g of fromEnum(a.focusedSeriesItems)) {
                            a.qs(g.series, g.item);
                        }
                    }
                    break;
                case 15:
                    if (c.ez == 2) {
                        f = true;
                        this.ak(a);
                    }
                    else {
                        f = true;
                        e = new Rect(0, d.left, d.top - 0.1 * d.height, d.width, d.height);
                        e.y = e.y - Math.min(e.top, 0);
                    }
                    break;
                case 17:
                    if (c.ez == 2) {
                        f = true;
                        this.aj(a);
                    }
                    else {
                        f = true;
                        e = new Rect(0, d.left, d.top + 0.1 * d.height, d.width, d.height);
                        e.y = e.y - Math.max(e.bottom - 1, 0);
                    }
                    break;
            }
            if (!e.isEmpty && Rect.l_op_Inequality(e, d)) {
                a.s9(e, true);
            }
            return f;
        }
        al(a) {
            let b = null;
            if (a.focusedSeriesItems.count > 0) {
                b = a.focusedSeriesItems._inner[0];
            }
            let c = null;
            if (b != null) {
                c = b.series;
            }
            if (c == null) {
                if (a.series.count == 0) {
                    return;
                }
                c = a.series._inner[0];
            }
            if (c != null && c.dp != null) {
                if (b == null) {
                    let d = ((() => {
                        let $ret = new ChartSelection();
                        $ret.series = c;
                        $ret.item = c.dp.item(0);
                        return $ret;
                    })());
                    a.focusedSeriesItems.clear();
                    a.focusedSeriesItems.add(d);
                    return;
                }
                let e = c.dp.indexOf(b.item);
                if (e == -1) {
                    return;
                }
                e++;
                if (e > c.dp.count - 1) {
                    return;
                }
                let f = ((() => {
                    let $ret = new ChartSelection();
                    $ret.series = c;
                    $ret.item = c.dp.item(e);
                    return $ret;
                })());
                a.focusedSeriesItems.clear();
                a.focusedSeriesItems.add(f);
            }
        }
        ai(a) {
            let b = null;
            if (a.focusedSeriesItems.count > 0) {
                b = a.focusedSeriesItems._inner[0];
            }
            let c = null;
            if (b != null) {
                c = b.series;
            }
            if (c == null) {
                if (a.series.count == 0) {
                    return;
                }
                c = a.series._inner[0];
            }
            if (c != null && c.dp != null) {
                if (b == null) {
                    let d = ((() => {
                        let $ret = new ChartSelection();
                        $ret.series = c;
                        $ret.item = c.dp.item(0);
                        return $ret;
                    })());
                    a.focusedSeriesItems.clear();
                    a.focusedSeriesItems.add(d);
                    return;
                }
                let e = c.dp.indexOf(b.item);
                if (e == -1) {
                    return;
                }
                e--;
                if (e < 0) {
                    return;
                }
                let f = ((() => {
                    let $ret = new ChartSelection();
                    $ret.series = c;
                    $ret.item = c.dp.item(e);
                    return $ret;
                })());
                a.focusedSeriesItems.clear();
                a.focusedSeriesItems.add(f);
            }
        }
        ak(a) {
            let b = null;
            if (a.focusedSeriesItems.count > 0) {
                b = a.focusedSeriesItems._inner[0];
            }
            let c = null;
            if (b != null) {
                c = b.series;
            }
            if (c == null) {
                if (a.series.count == 0) {
                    return;
                }
                c = a.series._inner[0];
            }
            if (c != null) {
                let d = a.series.indexOf(c);
                if (d == -1) {
                    return;
                }
                let e = 0;
                if (b != null && b.item != null && c.dp != null) {
                    e = c.dp.indexOf(b.item);
                    if (e == -1) {
                        e = 0;
                    }
                }
                d--;
                if (d < 0) {
                    return;
                }
                c = a.series._inner[d];
                if (c.dp == null) {
                    let f = ((() => {
                        let $ret = new ChartSelection();
                        $ret.series = c;
                        $ret.item = null;
                        return $ret;
                    })());
                    a.focusedSeriesItems.clear();
                    a.focusedSeriesItems.add(f);
                    return;
                }
                if (e > c.dp.count - 1) {
                    e = 0;
                }
                let g = ((() => {
                    let $ret = new ChartSelection();
                    $ret.series = c;
                    $ret.item = c.dp.item(e);
                    return $ret;
                })());
                a.focusedSeriesItems.clear();
                a.focusedSeriesItems.add(g);
            }
        }
        aj(a) {
            let b = null;
            if (a.focusedSeriesItems.count > 0) {
                b = a.focusedSeriesItems._inner[0];
            }
            let c = null;
            if (b != null) {
                c = b.series;
            }
            if (c == null) {
                if (a.series.count == 0) {
                    return;
                }
                c = a.series._inner[0];
            }
            if (c != null) {
                let d = a.series.indexOf(c);
                if (d == -1) {
                    return;
                }
                let e = 0;
                if (b != null && b.item != null && c.dp != null) {
                    e = c.dp.indexOf(b.item);
                    if (e == -1) {
                        e = 0;
                    }
                }
                d++;
                if (d > a.series.count - 1) {
                    return;
                }
                c = a.series._inner[d];
                if (c.dp == null) {
                    let f = ((() => {
                        let $ret = new ChartSelection();
                        $ret.series = c;
                        $ret.item = null;
                        return $ret;
                    })());
                    a.focusedSeriesItems.clear();
                    a.focusedSeriesItems.add(f);
                    return;
                }
                if (e > c.dp.count - 1) {
                    e = 0;
                }
                let g = ((() => {
                    let $ret = new ChartSelection();
                    $ret.series = c;
                    $ret.item = c.dp.item(e);
                    return $ret;
                })());
                a.focusedSeriesItems.clear();
                a.focusedSeriesItems.add(g);
            }
        }
        f$h(a, b, c) {
            let d = a.dp;
            let e = a.xm;
            let f = e.left + e.width * b.x / a.x4.width;
            let g = e.top + e.height * b.y / a.x4.height;
            let h = 1 - MathUtil.d(c, -0.5, 0.5);
            let i = Math.max(0, f - h * (f - e.left));
            let j = Math.min(1, g + h * (e.bottom - g));
            let k = Math.min(1, f + h * (e.right - f));
            let l = Math.max(0, g - h * (g - e.top));
            a.q9(true, b);
            this.ac(a, 1000);
            a.s9(new Rect(0, i, l, k - i, j - l), true);
            return a.f1();
        }
        ac(a, b) {
            a.dp.bz(b);
        }
        f$r(a, b) {
            let c = a.xm;
            let d = c.left + c.width * b.x / a.x4.width;
            let e = c.top + c.height * b.y / a.x4.height;
            let f = 0.7;
            let g = Math.max(0, d - f * (d - c.left));
            let h = Math.min(1, e + f * (c.bottom - e));
            let i = Math.min(1, d + f * (c.right - d));
            let j = Math.max(0, e - f * (e - c.top));
            a.s9(new Rect(0, g, j, i - g, h - j), true);
        }
        f$l(a) {
            this.i.ac();
        }
        p(a, b, c) {
            let d = b.x;
            let e = b.y;
            if (c) {
                d += a.x4.left;
                e += a.x4.top;
            }
            return d >= a.x4.left && e >= a.x4.top && d <= a.x4.left + a.x4.width && e <= a.x4.top + a.x4.height;
        }
        f$c(a, b, c, d, e, f, g) {
            let h = true;
            let i = false;
            let j = false;
            let k = a;
            if (k.a6 == 1) {
                h = false;
                i = true;
            }
            if (k.a6 == 3 || k.a6 == 4) {
                i = true;
            }
            if (k.a6 == 4) {
                j = true;
            }
            let l = truncate(Math.round(d.x));
            let m = truncate(Math.round(d.y));
            f = null;
            let n = -1;
            if (h && c != null) {
                let o = l;
                let p = m;
                if (a.h2 != 1) {
                    o = truncate(Math.round(d.x * a.h2));
                    p = truncate(Math.round(d.y * a.h2));
                }
                let q = c.a(o, p);
                if (q == null || q.length == 0) {
                    f = null;
                    return {
                        ret: null,
                        p5: f
                    };
                }
                if ((q[0] > 0 || q[1] > 0 || q[2] > 0) && q[3] == 255) {
                    let num2_ = q[2];
                    if (num2_ % 4 != 0) {
                        num2_ = num2_ + (4 - (num2_ % 4));
                    }
                    let num1_ = q[1];
                    if (num1_ % 4 != 0) {
                        num1_ = num1_ + (4 - (num1_ % 4));
                    }
                    let num0_ = q[0];
                    if (num0_ % 4 != 0) {
                        num0_ = num0_ + (4 - (num0_ % 4));
                    }
                    let num_ = 0;
                    num_ = (num2_ >> 2);
                    num_ = (num_ << 6);
                    num_ = (num_ | (num1_ >> 2));
                    num_ = (num_ << 6);
                    num_ = (num_ | (num0_ >> 2));
                    n = truncate(Math.floor((intDivide(num_, 1000))));
                    n--;
                }
            }
            let r = null;
            let s = -1;
            if (n >= 0) {
                let t = false;
                let u = 0;
                for (let v of fromEnum(b)) {
                    if (!v.f9) {
                        continue;
                    }
                    if (t) {
                        break;
                    }
                    if (v.isStacked) {
                        v.p9((w) => {
                            if (w.kk == n) {
                                r = w;
                                s = u;
                                t = true;
                                return false;
                            }
                            return true;
                        });
                    }
                    else if (v.kk == n) {
                        r = v;
                        s = u;
                        break;
                    }
                    u++;
                }
            }
            let w = null;
            if (i) {
                let x = false;
                for (let y = b.count - 1; y >= 0; y--) {
                    let z = b._inner[y];
                    if (!z.f9) {
                        continue;
                    }
                    let aa = z.cw;
                    if (!z.hf(aa.b9, aa.ca, aa)) {
                        continue;
                    }
                    if (!x && y < s && h && !j) {
                        if (r != null) {
                            w = r;
                            x = true;
                            break;
                        }
                    }
                    if (z != null && z.b2 == 1) {
                        if (z.gx(d, g)) {
                            w = z;
                            break;
                        }
                    }
                }
                if (h && !x) {
                    if (r != null) {
                        w = r;
                        x = true;
                    }
                }
            }
            else {
                w = r;
            }
            if (w != null) {
                let ab = w.a2({ $type: Point_$type, x: l, y: m }, g);
                if (ab != null) {
                    f = ab;
                }
                return {
                    ret: w,
                    p5: f
                };
            }
            return {
                ret: null,
                p5: f
            };
        }
        f$i(a, b) {
            if (PointUtil.equals(b, null)) {
                return false;
            }
            if (this.m) {
                return true;
            }
            if (this.p(a, b, false)) {
                let c = a.dh;
                if (c != null && c.viewShouldInteract(b)) {
                    return false;
                }
                return true;
            }
            return this.o(a, b);
        }
        o(a, b) {
            return a.fu(b);
        }
        b(a) {
            if (a != null) {
                return a.bq();
            }
            else {
                return null;
            }
        }
        f$z(a, b, c, d, e, f) {
            a.oi(d, f, false, false, false);
            if (!this.p(a, d, false)) {
                if (this.l) {
                    this.l = false;
                    this.f$y(a, d);
                }
                return;
            }
            this.l = true;
            if (!f && a.ev) {
                this.aq(a, false);
            }
            let g = new MouseEventArgs();
            g.position = d;
            if (a.df == 2 || a.df == 1 || a.gf || (a.dh != null && a.dh.isPinching)) {
                if (!a.fb && this.c != null) {
                    this.c.ba.a$af(this.c, g.position, this.a, g, f);
                    this.c = null;
                }
                return;
            }
            let h = null;
            let i = ((() => { let j = this.f$c(a, b, c, d, !e, h, f); h = j.p5; return j.ret; })());
            this.a = h;
            let j = this.b(i);
            if (i != null) {
                let k = false;
                let l = false;
                if (this.c != i) {
                    l = true;
                }
                if (this.c == null || l) {
                    k = true;
                }
                if (k) {
                    if (l) {
                        if (this.c != null) {
                            j = this.b(this.c);
                            this.c.ba.a$af(this.c, g.position, h, g, f);
                            if (j != null) {
                                j.ba.a$af(j, g.position, h, g, f);
                            }
                        }
                    }
                    this.c = i;
                    j = this.b(this.c);
                    i.q0(g.position, h, g, f);
                    if (j != null) {
                        j.q0(g.position, h, g, f);
                    }
                }
                else {
                    this.c = i;
                    j = this.b(this.c);
                    i.ba.a$ah(i, g.position, h, g, f);
                    if (j != null) {
                        j.ba.a$ah(j, g.position, h, g, f);
                    }
                }
            }
            else {
                if (this.c != null) {
                    j = this.b(this.c);
                    this.c.ba.a$af(this.c, g.position, h, g, f);
                    if (j != null) {
                        j.ba.a$af(j, g.position, h, g, f);
                    }
                    this.c = null;
                }
                for (let m = 0; m < a.series.count; m++) {
                    let n = a.series._inner[m];
                    if (n.ba.a$c) {
                        j = this.b(n);
                        n.ba.a$af(n, g.position, n.ba.a$s, g, f);
                        if (j != null) {
                            j.ba.a$af(j, g.position, n.ba.a$s, g, f);
                        }
                    }
                }
            }
        }
        f$y(a, b) {
            if (this.c != null) {
                let c = this.b(this.c);
                let d = new MouseEventArgs();
                d.position = b;
                this.c.ba.a$af(this.c, d.position, null, d, false);
                if (c != null) {
                    c.ba.a$af(c, d.position, null, d, false);
                }
                this.c = null;
            }
            a.qh(b, a.df != 0 || a.f6);
            a.oi(b, false, false, false, false);
        }
        f$x(a, b, c) {
            if (this.c != null) {
                let d = new MouseButtonEventArgs();
                d.position = c;
                if (b.al) {
                    this.c.ba.a$ai(this.c, d.position, this.a, d);
                }
                else {
                    this.c.ba.a$ac(this.c, d.position, this.a, d);
                }
            }
            a.oi(c, false, true, false, false);
        }
        f$aa(a, b, c) {
            let d;
            let e = (this.c != null) ? this.c : ((() => { let f = a.dp.f(c, false, d, false); d = f.p2; return f.ret; })());
            if (e != null) {
                let f = new MouseButtonEventArgs();
                f.position = c;
                if (b.al) {
                    e.ba.a$aj(e, f.position, this.a, f);
                }
                else {
                    e.ba.a$ag(e, f.position, this.a, f);
                }
            }
            a.oi(c, false, false, true, false);
        }
        f$w(a, b, c) {
            if (!this.p(a, b, false)) {
                return;
            }
            if (!c && a.f8) {
                this.aq(a, false);
            }
            if (c && !a.f8) {
                this.aq(a, true);
            }
            a.ps(b, c);
        }
        aq(a, b) {
            if (a != null) {
                if (!this.n) {
                    a.ev = b;
                }
            }
        }
        f$ad(a, b) {
            this.j = true;
        }
        get n() {
            return this.j;
        }
    }
    SeriesViewerInteractionManager.$t = markType(SeriesViewerInteractionManager, 'SeriesViewerInteractionManager', Base.$, [ISeriesViewerInteractionManager_$type]);
    return SeriesViewerInteractionManager;
})();
