UNPKG

igniteui-webcomponents-charts

Version:

Ignite UI Web Components charting components for building rich data visualizations using TypeScript APIs.

5,116 lines 157 kB
/*
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 { HighlightingManager } from "igniteui-webcomponents-core";
import { Base, markType, runOn, delegateCombine, delegateRemove, fromEnum, String_$type, INotifyPropertyChanged_$type, PropertyChangedEventArgs, EventArgs, fromEn, EnumUtil, enumGetBox, typeGetValue, Point_$type } from "igniteui-webcomponents-core";
import { TreemapHighlightingMode_$type } from "./TreemapHighlightingMode";
import { RenderingContext } from "igniteui-webcomponents-core";
import { FontInfo } from "igniteui-webcomponents-core";
import { FontDefaults } from "igniteui-webcomponents-core";
import { DeviceUtils } from "igniteui-webcomponents-core";
import { Brush } from "igniteui-webcomponents-core";
import { Rect } from "igniteui-webcomponents-core";
import { CanvasViewRenderer } from "igniteui-webcomponents-core";
import { CanvasGestureDOMEventProxy } from "igniteui-webcomponents-core";
import { TreemapVisualData } from "./TreemapVisualData";
import { List$1 } from "igniteui-webcomponents-core";
import { TreemapVisual } from "./TreemapVisual";
import { Pool$1 } from "igniteui-webcomponents-core";
import { FontUtil } from "igniteui-webcomponents-core";
import { BrushUtil } from "igniteui-webcomponents-core";
import { DOMExecutionContext } from "igniteui-webcomponents-core";
import { truncate, isNaN_, logBase } from "igniteui-webcomponents-core";
import { Rectangle } from "igniteui-webcomponents-core";
import { TextBlock } from "igniteui-webcomponents-core";
import { HorizontalAlignment_$type } from "igniteui-webcomponents-core";
import { VerticalAlignment_$type } from "igniteui-webcomponents-core";
import { Thickness } from "igniteui-webcomponents-core";
import { TreemapNodeVisualData } from "./TreemapNodeVisualData";
import { TreemapLabelVisualData } from "./TreemapLabelVisualData";
import { RectangleVisualData } from "igniteui-webcomponents-core";
import { AppearanceHelper } from "igniteui-webcomponents-core";
import { PointData } from "igniteui-webcomponents-core";
import { SizeData } from "igniteui-webcomponents-core";
import { HashSet$1 } from "igniteui-webcomponents-core";
import { TreemapOrientation_$type } from "./TreemapOrientation";
import { Size } from "igniteui-webcomponents-core";
import { AreaInfo } from "./AreaInfo";
import { Dictionary$2 } from "igniteui-webcomponents-core";
import { DoubleAnimator } from "igniteui-webcomponents-core";
import { TreemapHighlightedValueDisplayMode_$type } from "./TreemapHighlightedValueDisplayMode";
import { BrushCollection } from "igniteui-webcomponents-core";
import { TreemapFillScaleMode_$type } from "./TreemapFillScaleMode";
import { TreemapLabelVerticalFitMode_$type } from "./TreemapLabelVerticalFitMode";
import { TreemapLabelHorizontalFitMode_$type } from "./TreemapLabelHorizontalFitMode";
import { TreemapHeaderDisplayMode_$type } from "./TreemapHeaderDisplayMode";
import { TreemapLayoutType_$type } from "./TreemapLayoutType";
import { FastItemsSource } from "igniteui-webcomponents-core";
import { HighlightingInfo } from "igniteui-webcomponents-core";
import { EasingFunctions } from "igniteui-webcomponents-core";
import { NotifyCollectionChangedEventArgs } from "igniteui-webcomponents-core";
import { ObservableCollection$1 } from "igniteui-webcomponents-core";
import { RectData } from "igniteui-webcomponents-core";
import { TreemapNodeVisualDataList } from "./TreemapNodeVisualDataList";
import { BrushCollectionUtil } from "igniteui-webcomponents-core";
import { TreemapValueMappingMode_$type } from "./TreemapValueMappingMode";
import { TreemapNodePointerEventArgs } from "./TreemapNodePointerEventArgs";
import { TreemapNodeStyleMappingTargetType_$type } from "./TreemapNodeStyleMappingTargetType";
import { stringIsNullOrEmpty, stringReplace } from "igniteui-webcomponents-core";
/**
 * @hidden
 */
export let TreemapHighlightingManager = /*@__PURE__*/ (() => {
    class TreemapHighlightingManager extends HighlightingManager {
        isCrossContextHighlight(a) {
            let b = a;
            return b.au == 3;
        }
    }
    TreemapHighlightingManager.$t = /*@__PURE__*/ markType(TreemapHighlightingManager, 'TreemapHighlightingManager', HighlightingManager.$);
    return TreemapHighlightingManager;
})();
/**
 * @hidden
 */
export let TreemapView = /*@__PURE__*/ (() => {
    class TreemapView extends Base {
        constructor() {
            super();
            this.b = null;
            this.a = null;
            this.p = false;
            this.af = null;
            this.m = null;
            this.ad = null;
            this.t = 0;
            this.s = 0;
            this.g = null;
            this.ae = null;
            this.w = 1;
            this.ac = null;
            this.c = null;
            this.u = 0;
            this.v = 0;
            this.a4 = null;
            this.i = ((() => {
                let $ret = new FontInfo();
                $ret.q = FontDefaults.treemapFontFamily;
                $ret.f = DeviceUtils.f(FontDefaults.treemapFontSize);
                return $ret;
            })());
            this.h = ((() => {
                let $ret = new FontInfo();
                $ret.q = FontDefaults.treemapFontFamily;
                $ret.f = DeviceUtils.f(FontDefaults.treemapFontSize);
                return $ret;
            })());
            this.r = null;
            this.n = null;
            this.a5 = ((() => {
                let $ret = new Brush();
                $ret.fill = "rgba(0,0,0, 0.0)";
                return $ret;
            })());
            this.f = ((() => {
                let $ret = new FontInfo();
                $ret.q = FontDefaults.treemapFontFamily;
                $ret.f = DeviceUtils.f(FontDefaults.treemapFontSize);
                return $ret;
            })());
            this.e = ((() => {
                let $ret = new FontInfo();
                $ret.q = FontDefaults.treemapHeaderFontFamily;
                $ret.f = DeviceUtils.f(FontDefaults.treemapHeaderFontSize);
                return $ret;
            })());
            this.o = true;
            this.b = new TreemapViewRenderer();
            this.b.j = ((() => {
                let $ret = new Brush();
                $ret.fill = "white";
                return $ret;
            })());
        }
        ax() {
        }
        a1() {
            this.a0();
        }
        a2() {
            if (!this.p) {
                this.p = true;
                if (this.ad != null) {
                    this.ad.setTimeout(runOn(this, this.ag), 0);
                }
                else {
                    window.setTimeout(runOn(this, this.ag), 0);
                }
            }
        }
        ag() {
            if (this.p) {
                this.p = false;
                this.a.i1();
            }
        }
        q() {
            return true;
        }
        ay() {
            this.w = this.a.dg;
            this.a2();
        }
        au(a) {
            if (a == null) {
                this.af = null;
                this.ad = null;
                this.m = null;
                if (this.ac != null) {
                    window.removeEventListener("resize", this.ac, false);
                    this.ac = null;
                }
                this.ah();
                return;
            }
            this.ad = a;
            this.ae = a;
            let b = this.ae.rootWrapper.width();
            let c = this.ae.rootWrapper.height();
            this.ar();
            this.w = (isNaN_(this.a.ee) ? this.a.dg : this.a.ee);
            let d = this.w;
            let e = Math.round(a.rootWrapper.width());
            let f = Math.round(a.rootWrapper.height());
            let g = e * d;
            let h = f * d;
            this.ad.rootWrapper.setStyleProperty("position", "relative");
            let i = a.createElement("canvas");
            i.setStyleProperty("position", "absolute");
            this.ad.rootWrapper.append(i);
            this.t = b;
            this.s = c;
            i.setAttribute("width", g.toString());
            i.setAttribute("height", h.toString());
            i.setStyleProperty("width", e.toString() + "px");
            i.setStyleProperty("height", f.toString() + "px");
            this.n = i.listen("contextmenu", (j) => j.preventDefault());
            this.a.kb = new Rect(0, 0, 0, e, f);
            this.af = i;
            let j = this.ad.get2DCanvasContext(this.af);
            this.m = new RenderingContext(new CanvasViewRenderer(), j);
            this.aq();
            this.a3();
            this.m.ad(this.g);
            this.a0();
            this.c = new CanvasGestureDOMEventProxy(this.af, this.ad, true);
            this.c.ao = (k) => true;
            this.c.bl = this.a.kb;
            let k = this.c;
            k.onMouseOver = delegateCombine(k.onMouseOver, runOn(this, this.am));
            let l = this.c;
            l.onMouseUp = delegateCombine(l.onMouseUp, runOn(this, this.an));
            let m = this.c;
            m.onMouseDown = delegateCombine(m.onMouseDown, runOn(this, this.aj));
            let n = this.c;
            n.onMouseEnter = delegateCombine(n.onMouseEnter, runOn(this, this.ak));
            let o = this.c;
            o.onMouseLeave = delegateCombine(o.onMouseLeave, runOn(this, this.al));
        }
        al(a) {
            this.a.iq(a);
        }
        ao(a) {
            this.b.e(a, this.r, this);
        }
        ak(a) {
            this.a.ip(a);
        }
        ar() {
            if (this.ac == null) {
                this.ac = (a) => {
                    let b = this.a.ee;
                    let c = this.a.dg;
                    if (!isNaN_(b) && b != 0) {
                        return;
                    }
                    if (window.devicePixelRatio != undefined && window.devicePixelRatio != c) {
                        this.a.dg = window.devicePixelRatio;
                    }
                };
                let e_ = this.ac;
                window.addEventListener("resize", e_, false);
            }
            this.ac(null);
        }
        ah() {
            if (this.n != null) {
                this.n();
                this.n = null;
            }
            if (this.c != null) {
                let a = this.c;
                a.onMouseOver = delegateRemove(a.onMouseOver, runOn(this, this.am));
                let b = this.c;
                b.onMouseUp = delegateRemove(b.onMouseUp, runOn(this, this.an));
                let c = this.c;
                c.onMouseDown = delegateRemove(c.onMouseDown, runOn(this, this.aj));
                let d = this.c;
                d.onMouseEnter = delegateRemove(d.onMouseEnter, runOn(this, this.ak));
                let e = this.c;
                e.onMouseLeave = delegateRemove(e.onMouseLeave, runOn(this, this.al));
                this.c.ao = null;
                this.c.av();
            }
        }
        aj(a) {
            if (this.c.al) {
                this.a.iu(a);
            }
            else {
                this.a.io(a);
            }
        }
        an(a) {
            if (this.c.al) {
                this.a.iv(a);
            }
            else {
                this.a.is(a);
            }
        }
        am(a, b, c) {
            this.a.ir(a);
        }
        aq() {
        }
        l() {
            return this.b.b;
        }
        a3() {
            this.g = FontUtil.getFont(this.ad);
            if (this.h != null) {
                this.u = this.x(this.h);
            }
            else {
                this.u = this.x(this.g);
            }
            if (this.i != null) {
                this.v = this.x(this.i);
            }
            else {
                this.v = this.x(this.g);
            }
            this.a4 = new Brush();
            this.a4._fill = this.ad.rootWrapper.getStyleProperty("color");
            if (this.m != null) {
                this.m.ad(this.g);
            }
        }
        as() {
            let a = this.ae.rootWrapper.width();
            let b = this.ae.rootWrapper.height();
            this.a.kb = new Rect(0, 0, 0, a, b);
            this.ar();
        }
        ap() {
            if (this.p) {
                this.ag();
            }
        }
        a0() {
            if (this.m == null) {
                return;
            }
            let a = this.a.kb.width;
            let b = this.a.kb.height;
            let c = Math.round(a * this.w);
            let d = Math.round(b * this.w);
            if (this.t != c || this.s != d) {
                this.af.setAttribute("width", c.toString());
                this.af.setAttribute("height", d.toString());
                this.af.setStyleProperty("width", a.toString() + "px");
                this.af.setStyleProperty("height", b.toString() + "px");
                this.t = truncate(Math.round(c));
                this.s = truncate(Math.round(d));
            }
            if (this.m.d && this.w != 1) {
                this.m.aa();
                this.m.ab(this.w, this.w);
            }
            this.b.f(this.m, this.a.kb, this.r, this.u);
            if (this.m.d && this.w != 1) {
                this.m.z();
            }
        }
        aw(a) {
            this.i = a;
            if (this.i != null) {
                this.v = this.x(this.i);
            }
            else {
                this.v = this.x(this.g);
            }
        }
        az(a) {
            this.h = a;
            if (this.h != null) {
                this.u = this.x(this.h);
            }
            else {
                this.u = this.x(this.g);
            }
            if (this.i != null) {
                this.v = this.x(this.i);
            }
            else {
                this.v = this.x(this.g);
            }
        }
        ai(a) {
            this.r = a;
            this.a0();
        }
        ab(a) {
            if (a != null) {
                if (this.h != null) {
                    this.m.ad(this.h);
                }
                else {
                    this.m.ad(this.f);
                }
                return this.m.g(a);
            }
            return 0;
        }
        z(a) {
            if (a != null) {
                if (this.i != null) {
                    this.m.ad(this.i);
                }
                else {
                    this.m.ad(this.f);
                }
                return this.m.g(a);
            }
            return 0;
        }
        x(a) {
            return FontUtil.getCurrentFontHeight(this.ad, a);
        }
        aa(a) {
            return this.u;
        }
        y(a) {
            return this.v;
        }
        a7() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "rgb(220,220,220)";
                return $ret;
            })());
        }
        a9() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "rgb(240, 240, 240)";
                return $ret;
            })());
        }
        a8() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "rgb(102, 102, 102)";
                return $ret;
            })());
        }
        bf() {
            return this.a5;
        }
        bb() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "black";
                return $ret;
            })());
        }
        ba() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "rgb(240,240,240)";
                return $ret;
            })());
        }
        be() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "rgb(240, 240, 240)";
                return $ret;
            })());
        }
        a6() {
            return ((() => {
                let $ret = new Brush();
                $ret.fill = "rgb(102, 102, 102)";
                return $ret;
            })());
        }
        k() {
            return this.f;
        }
        j() {
            return this.e;
        }
        bc() {
            return BrushUtil.j(153, 25, 25, 25);
        }
        bd() {
            return BrushUtil.j(153, 45, 45, 45);
        }
        at() {
            this.o = true;
            this.ar();
            if (this.c != null) {
                this.c.at(this.ad.rootWrapper, "");
            }
        }
        av() {
            this.o = false;
            if (this.c != null && this.ad != null) {
                this.c.bh(this.ad.rootWrapper, "");
            }
        }
        d() {
            return new DOMExecutionContext(this.ad);
        }
    }
    TreemapView.$t = /*@__PURE__*/ markType(TreemapView, 'TreemapView');
    return TreemapView;
})();
/**
 * @hidden
 */
export let TreemapViewRenderer = /*@__PURE__*/ (() => {
    class TreemapViewRenderer extends Base {
        constructor() {
            super();
            this.b = null;
            this.c = null;
            this.j = null;
            this.c = new List$1(TreemapVisual.$, 0);
            this.b = ((() => {
                let $ret = new Pool$1(TreemapVisual.$);
                $ret.create = runOn(this, this.a);
                $ret.activate = runOn(this, this.g);
                $ret.disactivate = runOn(this, this.i);
                $ret.destroy = runOn(this, this.h);
                return $ret;
            })());
        }
        a() {
            let a = new TreemapVisual();
            this.c.add(a);
            return a;
        }
        g(a) {
            a.x = 0;
        }
        i(a) {
            a.x = 1;
        }
        h(a) {
            this.c.remove(a);
        }
        d(a) {
            if (a.c.count != 5) {
                a.c.add1(new Rectangle());
                a.c.add1(new Rectangle());
                a.c.add1(new TextBlock());
                a.c.add1(new Rectangle());
                a.c.add1(new Rectangle());
            }
        }
        f(a, b, c, d) {
            a.l(b.left, b.top, b.width, b.height);
            if (c != null) {
                for (let e = 0; e < c.count; e++) {
                    let f = c._inner[e];
                    this.d(f);
                    let g = f.c._inner[0];
                    let h = f.c._inner[1];
                    let i = f.c._inner[2];
                    let j = f.c._inner[3];
                    let k = f.c._inner[4];
                    g._fill = f.l;
                    g._opacity = f.d;
                    g.width = f.p.width;
                    g.height = f.p.height;
                    g.n = f.p.left;
                    g.o = f.p.top;
                    j._fill = f.l;
                    j.width = !f.q.isEmpty ? f.q.width : 0;
                    j.height = !f.q.isEmpty ? f.q.height : 0;
                    j.n = !f.q.isEmpty ? f.q.left : 0;
                    j.o = !f.q.isEmpty ? f.q.top : 0;
                    k._fill = null;
                    k._stroke = f.o;
                    k.ad = f.i;
                    k.width = f.p.width;
                    k.height = f.p.height;
                    k.n = f.p.left;
                    k.o = f.p.top;
                    a.ad(f.a);
                    let l = a.g(f.j);
                    if (f.b) {
                        i.al = f.j;
                        switch (f.k) {
                            case 0:
                                i.n = f.p.left + f.s.left;
                                break;
                            case 1:
                            case 3:
                                i.n = f.p.left + f.p.width / 2 - f.f / 2;
                                break;
                            case 2:
                                i.n = Math.max(f.p.left + f.s.left, f.p.right - (l + f.s.right));
                                break;
                        }
                        switch (f.t) {
                            case 0:
                                i.o = f.p.top + f.s.top;
                                break;
                            case 1:
                            case 3:
                                i.o = f.p.top + f.p.height / 2 - f.e / 2;
                                break;
                            case 2:
                                i.o = Math.max(f.p.top + f.s.top, f.p.bottom - (d + f.s.bottom));
                                break;
                        }
                        i.ao = f.n;
                    }
                    else {
                        h._fill = f.m;
                        h._stroke = f.o;
                        h.ad = f.i;
                        h.width = f.p.width;
                        h.height = f.e;
                        h.n = f.p.left;
                        h.o = f.p.top;
                        if (f.w == 0) {
                            h.width = l + f.r.left + f.r.right;
                        }
                        i.n = f.p.left + f.r.left;
                        i.o = f.p.top + f.r.top;
                        i.al = f.j;
                        i.ao = f.n;
                    }
                    a.ae(f.h);
                    if (f.b) {
                        a.l(g.n, g.o, g.width, g.height);
                    }
                    a.w(g);
                    if (!f.q.isEmpty) {
                        a.w(j);
                    }
                    if (k.ad > 0) {
                        a.w(k);
                    }
                    if (f.u == 0) {
                        if (!f.b) {
                            a.w(h);
                        }
                    }
                    a.aa();
                    a.af(f.p);
                    if (f.w == 0) {
                        if (!f.b) {
                            a.w(h);
                        }
                    }
                    a.x(i);
                    a.z();
                }
            }
        }
        e(a, b, c) {
            if (b != null) {
                for (let d = 0; d < b.count; d++) {
                    let e = b._inner[d];
                    this.d(e);
                    let f = e.c._inner[0];
                    let g = e.c._inner[1];
                    let h = e.c._inner[2];
                    let i = e.c._inner[3];
                    let j = e.c._inner[4];
                    let k = new TreemapNodeVisualData();
                    k.d = new RectangleVisualData(1, "NodePath", f);
                    k.d.appearance.stroke = AppearanceHelper.b(j._stroke);
                    k.d.appearance.strokeExtended = AppearanceHelper.a(j._stroke);
                    k.d.appearance.strokeThickness = j.ad;
                    k.b = new RectangleVisualData(1, "HeaderRect", g);
                    k.c = new RectangleVisualData(1, "HighlightRect", i);
                    let l = new TreemapLabelVisualData();
                    l.labelPosition = new PointData(h.n, h.o);
                    if (e.b) {
                        l.labelSize = new SizeData(c.ab(h.al), c.aa(h.al));
                    }
                    else {
                        l.labelSize = new SizeData(c.z(h.al), c.y(h.al));
                    }
                    l.labelValue = h.al;
                    l.appearance = AppearanceHelper.c(h, e.a);
                    k.a = l;
                    a.nodes.add(k);
                }
            }
        }
    }
    TreemapViewRenderer.$t = /*@__PURE__*/ markType(TreemapViewRenderer, 'TreemapViewRenderer');
    return TreemapViewRenderer;
})();
/**
 * @hidden
 */
export let TreemapLayoutCalculator = /*@__PURE__*/ (() => {
    class TreemapLayoutCalculator extends Base {
        static c(a, b, c, d) {
            let e = a.e();
            let f = d.f;
            let g = f * f / (b.width * b.height);
            if (e / c < g) {
                return true;
            }
            return false;
        }
        static a(a, b, c, d, e) {
            for (let f = 0; f < c.count; f++) {
                let g = c._inner[f];
                if (!a.contains(g)) {
                    return false;
                }
            }
            return true;
        }
        static b(a, b) {
            if (a.width < b.f || a.height < b.f) {
                return true;
            }
            return false;
        }
        h(a, b, c) {
            return a.o(b);
        }
        i(a, b, c) {
            let d = a.o(b);
            if (d.isEmpty) {
                return d;
            }
            if (b.b != null && b.b.count > 0) {
                let e = c.i;
                let f = e.left + e.right;
                let g = e.top + e.bottom;
                let h = a.b(b);
                if (!h) {
                    return d;
                }
                let i = new Rect(0, d.left - e.left, d.top - e.top, d.width + f, d.height + g);
                return i;
            }
            else {
                return d;
            }
        }
        g(a, b, c, d) {
            if (b.b != null && b.b.count > 0) {
                let e = d.i;
                let f = e.left + e.right;
                let g = e.top + e.bottom;
                if (c.width < f || c.height < g) {
                    a.m(b, c);
                    return;
                }
                let h = new Rect(0, c.left + e.left, c.top + e.top, c.width - f, c.height - g);
                a.m(b, h);
                a.n(b, true);
            }
            else {
                a.m(b, c);
            }
        }
        f(a, b, c, d, e, f) {
            if (!TreemapLayoutCalculator.a(a, b, c, e, f)) {
                while (d > 0) {
                    let g = 0;
                    for (let h of fromEnum(c)) {
                        if (a.contains(h)) {
                            continue;
                        }
                        if (d > 0) {
                            let i = (d > 1) ? 1 : d;
                            let j = this.i(b, h, f);
                            if (j.isEmpty) {
                                continue;
                            }
                            this.g(b, h, new Rect(0, j.x + g, j.y, j.width + i, j.height), f);
                            d -= i;
                            g += i;
                        }
                        else {
                            let k = this.i(b, h, f);
                            if (k.isEmpty) {
                                continue;
                            }
                            this.g(b, h, new Rect(0, k.x + g, k.y, k.width, k.height), f);
                        }
                    }
                }
            }
        }
        e(a, b, c, d, e, f) {
            if (!TreemapLayoutCalculator.a(a, b, c, e, f)) {
                while (d > 0) {
                    let g = 0;
                    for (let h of fromEnum(c)) {
                        if (a.contains(h)) {
                            continue;
                        }
                        if (d > 0) {
                            let i = (d > 1) ? 1 : d;
                            let j = this.i(b, h, f);
                            if (j.isEmpty) {
                                continue;
                            }
                            this.g(b, h, new Rect(0, j.x, j.y + g, j.width, j.height + i), f);
                            d -= i;
                            g += i;
                        }
                        else {
                            let k = this.i(b, h, f);
                            if (k.isEmpty) {
                                continue;
                            }
                            this.g(b, h, new Rect(0, k.x, k.y + g, k.width, k.height), f);
                        }
                    }
                }
            }
        }
    }
    TreemapLayoutCalculator.$t = /*@__PURE__*/ markType(TreemapLayoutCalculator, 'TreemapLayoutCalculator');
    return TreemapLayoutCalculator;
})();
/**
 * @hidden
 */
export let StrippedCalculator = /*@__PURE__*/ (() => {
    class StrippedCalculator extends TreemapLayoutCalculator {
        d(a, b) {
            a.g();
            this.o(a, b.b.a, b.h, b, 0);
        }
        q(a, b, c) {
            return c.j;
        }
        o(a, b, c, d, e) {
            if (d.g >= 0 && e > d.g) {
                return;
            }
            if (b == d.c) {
                d.d = true;
                this.g(a, b, c, d);
                let f = new Rect(0, c.left, c.top + d.e, c.width, c.height - d.e);
                c = f;
            }
            if (!d.d) {
                for (let g of fromEnum(b.b)) {
                    this.o(a, g, c, d, e + 1);
                }
                return;
            }
            let h = this.q(b, c, d);
            let i = h.left + h.right;
            let j = h.top + h.bottom;
            let k = new Rect(0, c.left, c.top, c.width, c.height);
            let l = d.a;
            if (i >= k.width || j >= k.height) {
                return;
            }
            k.x = k.x + h.left;
            k.width = k.width - i;
            k.y = k.y + h.top;
            k.height = k.height - j;
            let m = new HashSet$1(TreemapTreeNode.$, 0);
            StrippedCalculator.p(m, d, b.b, k);
            let n = 0;
            for (let o = 0; o < b.b.count; o++) {
                let p = b.b._inner[o];
                if (!m.contains(p)) {
                    n += p.e();
                }
            }
            let q = n;
            let r = (k.width * k.height) / q;
            let s = l == 0 ? k.width : k.height;
            let t = new List$1(TreemapTreeNode.$, 0);
            let u = new List$1(TreemapTreeNode.$, 0);
            for (let v = 0; v < b.b.count; v++) {
                let w = b.b._inner[v];
                if (m.contains(w) || isNaN_(w.e())) {
                    continue;
                }
                let x = StrippedCalculator.j(u, s, r);
                u.add(w);
                let y = StrippedCalculator.j(u, s, r);
                if (x < y) {
                    if (t.count > 0) {
                        let z = this.m(m, a, d, t, r, k, l, false);
                        k = z.p5;
                    }
                    u.removeAt(u.count - 1);
                    t.o(u);
                    u.clear();
                    u.add(w);
                }
            }
            let aa = StrippedCalculator.j(t, s, r);
            let ab = StrippedCalculator.j(u, s, r);
            let ac = new List$1(TreemapTreeNode.$, 0);
            ac.o(t);
            ac.o(u);
            let ad = StrippedCalculator.j(ac, s, r);
            if (ad < (aa + ab) / 2 || k.height < d.f * 2) {
                let ae = this.m(m, a, d, ac, r, k, l, true);
                k = ae.p5;
            }
            else {
                let af = this.m(m, a, d, t, r, k, l, false);
                k = af.p5;
                let ag = this.m(m, a, d, u, r, k, l, true);
                k = ag.p5;
            }
            for (let ah = 0; ah < b.b.count; ah++) {
                let ai = b.b._inner[ah];
                if (m.contains(ai)) {
                    continue;
                }
                let aj = this.h(a, ai, d);
                if (aj.isEmpty) {
                    continue;
                }
                let ak = new Rect(0, aj.left, aj.top + d.e, aj.width, Math.max(aj.height - d.e, 0));
                this.o(a, ai, ak, d, e + 1);
            }
            if (b == d.c) {
                d.d = false;
            }
        }
        m(a, b, c, d, e, f, g, h) {
            if (d.count == 0) {
                return {
                    p5: f
                };
            }
            if (g == 0) {
                let i = this.l(a, b, c, d, e, f, h);
                f = i.p5;
            }
            else {
                let j = this.n(a, b, c, d, e, f, h);
                f = j.p5;
            }
            return {
                p5: f
            };
        }
        l(a, b, c, d, e, f, g) {
            let h = StrippedCalculator.k(d);
            if (h <= 0) {
                return {
                    p5: f
                };
            }
            let i = f.width;
            let j = (h * e) / i;
            let k = f.x;
            let l = 0;
            for (let m = 0; m < d.count; ++m) {
                let n = d._inner[m];
                let o = Math.floor((n.e() / h) * i);
                let p = new Rect(0, k, f.y, o, j);
                if (TreemapLayoutCalculator.b(p, c)) {
                    a.add_1(n);
                }
                else {
                    l = p.right;
                    this.g(b, n, p, c);
                }
                if (a.contains(n)) {
                    h -= n.e();
                }
                else {
                    k += o;
                }
            }
            this.f(a, b, d, f.right - k, f, c);
            f.y = f.y + j;
            if (f.height < j) {
                f.height = 0;
            }
            else {
                f.height = f.height - j;
            }
            d.clear();
            return {
                p5: f
            };
        }
        n(a, b, c, d, e, f, g) {
            let h = StrippedCalculator.k(d);
            if (h <= 0) {
                return {
                    p5: f
                };
            }
            let i = f.height;
            let j = (h * e) / i;
            let k = f.y;
            let l = 0;
            for (let m = 0; m < d.count; ++m) {
                let n = d._inner[m];
                let o = Math.floor((n.e() / h) * i);
                let p = new Rect(0, f.x, k, j, o);
                if (TreemapLayoutCalculator.b(p, c)) {
                    a.add_1(n);
                }
                else {
                    l = p.bottom;
                    this.g(b, n, p, c);
                }
                if (a.contains(n)) {
                    h -= n.e();
                }
                else {
                    k += o;
                }
            }
            this.e(a, b, d, f.bottom - k, f, c);
            f.x = f.x + j;
            if (f.width < j) {
                f.width = 0;
            }
            else {
                f.width = f.width - j;
            }
            d.clear();
            return {
                p5: f
            };
        }
        static j(a, b, c) {
            if (a.count == 0) {
                return 1.7976931348623157E+308;
            }
            let d = StrippedCalculator.k(a);
            let e = (d * c) / b;
            let f = 0;
            for (let g = 0; g < a.count; g++) {
                let h = a._inner[g];
                let i = (h.e() / d) * b;
                f += Math.max(i / e, e / i);
            }
            f /= a.count;
            return f;
        }
        static k(a) {
            let b = 0;
            for (let c = 0; c < a.count; c++) {
                let d = a._inner[c];
                b += d.e();
            }
            return b;
        }
        static p(a, b, c, d) {
            let e = 0;
            for (let f = 0; f < c.count; f++) {
                let g = c._inner[f];
            }
            let h = e;
            let i = b.f * b.f / (d.width * d.height);
            for (let j = 0; j < c.count; j++) {
                let k = c._inner[j];
                if (k.e() / h < i) {
                    a.add_1(k);
                }
            }
        }
    }
    StrippedCalculator.$t = /*@__PURE__*/ markType(StrippedCalculator, 'StrippedCalculator', TreemapLayoutCalculator.$);
    return StrippedCalculator;
})();
/**
 * @hidden
 */
export let SliceAndDiceCalculator = /*@__PURE__*/ (() => {
    class SliceAndDiceCalculator extends TreemapLayoutCalculator {
        d(a, b) {
            a.g();
            this.m(a, b.b.a, b.h, b, 0);
        }
        o(a, b, c) {
            return c.j;
        }
        m(a, b, c, d, e) {
            if (d.g >= 0 && e > d.g) {
                return;
            }
            if (b == d.c) {
                d.d = true;
                this.g(a, b, c, d);
                let f = new Rect(0, c.left, c.top + d.e, c.width, c.height - d.e);
                c = f;
            }
            if (!d.d) {
                for (let g of fromEnum(b.b)) {
                    this.m(a, g, c, d, e + 1);
                }
                return;
            }
            let h = this.o(b, c, d);
            let i = SliceAndDiceCalculator.j(b, d, e);
            let j = h.left + h.right;
            let k = h.top + h.bottom;
            let l = new Rect(0, c.left, c.top, c.width, c.height);
            if (j >= l.width || k >= l.height) {
                return;
            }
            l.x = l.x + h.left;
            l.width = l.width - j;
            l.y = l.y + h.top;
            l.height = l.height - k;
            let m = new Size(1, l.width, l.height);
            let n = l.left;
            let o = l.top;
            let p = new HashSet$1(TreemapTreeNode.$, 0);
            let q = SliceAndDiceCalculator.k(b.b, b, d, m, p);
            if (q) {
                SliceAndDiceCalculator.n(b.b, b, d, m, p);
            }
            let r = 0;
            for (let s = 0; s < b.b.count; s++) {
                let t = b.b._inner[s];
                if (!p.contains(t)) {
                    r += t.e();
                }
            }
            let u = (i == 0) ? m.height : m.width;
            let v = new Rect(4);
            for (let w = 0; w < b.b.count; w++) {
                let x = b.b._inner[w];
                if (p.contains(x) || isNaN_(x.e())) {
                    continue;
                }
                if (r <= 0 || u <= 0) {
                    break;
                }
                let y = x.e() / r;
                v.x = n;
                v.y = o;
                if (i == 0) {
                    v.width = m.width;
                    v.height = Math.round(u * y);
                }
                else {
                    v.width = Math.round(u * y);
                    v.height = m.height;
                }
                this.g(a, x, new Rect(0, v.left, v.top, v.width, v.height), d);
                if (i == 0) {
                    o += v.height;
                    u -= v.height;
                }
                else {
                    n += v.width;
                    u -= v.width;
                }
                r -= x.e();
                let z = this.h(a, x, d);
                if (z.isEmpty) {
                    continue;
                }
                let aa = new Rect(0, z.left, z.top + d.e, z.width, Math.max(z.height - d.e, 0));
                this.m(a, x, aa, d, e + 1);
            }
            if (b == d.c) {
                d.d = false;
            }
        }
        static j(a, b, c) {
            let d = 0;
            if (b.a == 0) {
                d = (c % 2 == 0) ? 0 : 1;
            }
            else {
                d = (c % 2 == 0) ? 1 : 0;
            }
            return d;
        }
        static k(a, b, c, d, e) {
            let f = true;
            let g = b.e();
            let h = Math.min(d.width, d.height);
            for (let i = 0; i < a.count; i++) {
                let j = a._inner[i];
                if (Math.round(j.e() / g * h) < c.f) {
                    if (!e.contains(j)) {
                        e.add_1(j);
                    }
                }
                else {
                    f = false;
                }
            }
            return f;
        }
        static n(a, b, c, d, e) {
            let f = new List$1(TreemapTreeNode.$, 0);
            f.o(a);
            f.aa((g, h) => {
                if (g.e() > h.e()) {
                    return 1;
                }
                else if (g.e() < h.e()) {
                    return -1;
                }
                return 0;
            });
            let g = 0;
            let h = Math.min(d.width, d.height);
            for (let i = 0; i < f.count; i++) {
                let j = f._inner[i];
                if (isNaN_(j.e())) {
                    continue;
                }
                g += j.e();
                if (j.e() / g * h < c.f) {
                    break;
                }
                else {
                    if (e.contains(j)) {
                        e.remove(j);
                    }
                }
            }
        }
    }
    SliceAndDiceCalculator.$t = /*@__PURE__*/ markType(SliceAndDiceCalculator, 'SliceAndDiceCalculator', TreemapLayoutCalculator.$);
    SliceAndDiceCalculator.l = null;
    return SliceAndDiceCalculator;
})();
/**
 * @hidden
 */
export let TreemapLayoutSettings = /*@__PURE__*/ (() => {
    class TreemapLayoutSettings extends Base {
        constructor() {
            super();
            this.a = 0;
            this.h = null;
            this.b = null;
            this.j = null;
            this.i = null;
            this.e = 0;
            this.f = 0;
            this.g = 0;
            this.c = null;
            this.d = false;
            this.g = -1;
            this.d = false;
        }
    }
    TreemapLayoutSettings.$t = /*@__PURE__*/ markType(TreemapLayoutSettings, 'TreemapLayoutSettings');
    return TreemapLayoutSettings;
})();
/**
 * @hidden
 */
export let SquarifiedCalculator = /*@__PURE__*/ (() => {
    class SquarifiedCalculator extends TreemapLayoutCalculator {
        n(a, b, c, d, e) {
            if (d.g >= 0 && e > d.g) {
                return;
            }
            if (b == d.c) {
                d.d = true;
                this.g(a, b, c, d);
                let f = new Rect(0, c.left, c.top + d.e, c.width, c.height - d.e);
                c = f;
            }
            if (!d.d) {
                for (let g of fromEnum(b.b)) {
                    this.n(a, g, c, d, e + 1);
                }
                return;
            }
            let h = this.o(b, c, d);
            let i = new Rect(0, c.left, c.top, c.width, c.height);
            let j = h.left + h.right;
            let k = h.top + h.bottom;
            if (j >= i.width || k >= i.height) {
                return;
            }
            i.x = i.x + h.left;
            i.width = i.width - j;
            i.y = i.y + h.top;
            i.height = i.height - k;
            let l = i.left;
            let m = i.top;
            let n = new List$1(TreemapTreeNode.$, 0);
            let o = b.e();
            let p = new Rect(0, i.left, i.top, i.width, i.height);
            let q = (i.width * i.height) / o;
            let r = new List$1(TreemapTreeNode.$, 1, b.b);
            r.aa((s, t) => {
                if (t.e() < s.e()) {
                    return -1;
                }
                if (t.e() > s.e()) {
                    return 1;
                }
                return 0;
            });
            let s = new AreaInfo();
            s.b = i;
            s.a = o;
            let t = new HashSet$1(TreemapTreeNode.$, 0);
            for (let u of fromEnum(r)) {
                if (TreemapLayoutCalculator.c(u, p, o, d) || isNaN_(u.e())) {
                    t.add_1(u);
                    continue;
                }
                let v = Math.min(i.width, i.height);
                let w = SquarifiedCalculator.j(n, v, q);
                n.add(u);
                let x = SquarifiedCalculator.j(n, v, q);
                if (w <= x) {
                    n.removeAt(n.count - 1);
                    this.l(t, a, n, s, d);
                    i = s.b;
                    n.add(u);
                }
            }
            this.l(t, a, n, s, d);
            i = s.b;
            for (let y of fromEnum(b.b)) {
                if (t.contains(y)) {
                    continue;
                }
                let z = this.h(a, y, d);
                if (z.isEmpty) {
                    continue;
                }
                let aa = new Rect(0, z.left, z.top + d.e, z.width, Math.max(z.height - d.e, 0));
                this.n(a, y, aa, d, e + 1);
            }
            if (b == d.c) {
                d.d = false;
            }
        }
        o(a, b, c) {
            return c.j;
        }
        static j(a, b, c) {
            if (a.count == 0) {
                return 1.7976931348623157E+308;
            }
            let d = 0;
            let e = 1.7976931348623157E+308;
            let f = -1.7976931348623157E+308;
            for (let g of fromEnum(a)) {
                let h = g.e() * c;
                if (e > h) {
                    e = h;
                }
                if (f < h) {
                    f = h;
                }
                d += h;
            }
            let i = (b * b * f) / (d * d);
            let j = (d * d) / (b * b * e);
            return Math.max(i, j);
        }
        l(a, b, c, d, e) {
            if (c.count < 1) {
                return;
            }
            let f = 0;
            for (let g = 0; g < c.count; ++g) {
                f += c._inner[g].e();
            }
            if (f <= 0) {
                return;
            }
            if (d.b.width > d.b.height) {
                this.k(a, b, c, f, d, e);
            }
            else {
                this.m(a, b, c, f, d, e);
            }
        }
        m(a, b, c, d, e, f) {
            let g = e.b;
            let h = e.a;
            let i = Math.round((d / h) * g.height);
            let j = g.x;
            for (let k = 0; k < c.count; ++k) {
                let l = c._inner[k];
                if (g.right < j) {
                    a.add_1(l);
                    continue;
                }
                let m = Math.floor((l.e() / d) * g.width);
                let n = new Rect(0, j, g.y, m, i);
                if (TreemapLayoutCalculator.b(n, f)) {
                    a.add_1(l);
                    continue;
                }
                this.g(b, l, n, f);
                j += n.width;
            }
            this.f(a, b, c, g.right - j, g, f);
            g.y = g.y + i;
            if (g.height < i) {
                g.height = 0;
            }
            else {
                g.height = g.height - i;
            }
            h -= d;
            e.a = h;
            e.b = g;
            c.clear();
        }
        k(a, b, c, d, e, f) {
            let g = e.b;
            let h = e.a;
            let i = Math.round((d / h) * g.width);
            let j = g.y;
            for (let k = 0; k < c.count; ++k) {
                let l = c._inner[k];
                if (g.bottom < j) {
                    a.add_1(l);
                    continue;
                }
                let m = Math.floor((l.e() / d) * g.height);
                let n = new Rect(0, g.x, j, i, m);
                if (TreemapLayoutCalculator.b(n, f)) {
                    a.add_1(l);
                    continue;
                }
                this.g(b, l, n, f);
                j += n.height;
            }
            this.e(a, b, c, g.bottom - j, g, f);
            g.x = g.x + i;
            if (g.width < i) {
                g.width = 0;
            }
            else {
                g.width = g.width - i;
            }
            h -= d;
            e.a = h;
            e.b = g;
            c.clear();
        }
        d(a, b) {
            a.g();
            this.n(a, b.b.a, b.h, b, 0);
        }
    }
    SquarifiedCalculator.$t = /*@__PURE__*/ markType(SquarifiedCalculator, 'SquarifiedCalculator', TreemapLayoutCalculator.$);
    return SquarifiedCalculator;
})();
/**
 * @hidden
 */
export let TreemapTreeData = /*@__PURE__*/ (() => {
    class TreemapTreeData extends Base {
        constructor() {
            super();
            this.a = null;
            this.b = null;
            this.d = null;
            this.c = null;
            this.b = new Dictionary$2(String_$type, TreemapTreeNode.$, 0);
            this.d = new List$1(String_$type, 0);
            this.c = new Dictionary$2(String_$type, List$1.$.specialize(TreemapTreeNode.$), 0);
            this.a = new TreemapTreeNode();
        }
        e(a) {
            this.b.addItem(a.l, a);
            this.d.add(a.l);
            if (a.n == null) {
                this.a.b.add(a);
            }
            else if (this.b.containsKey(a.n)) {
                this.b.item(a.n).b.add(a);
            }
            else {
                let b;
                if (!((() => { let c = this.c.tryGetValue(a.n, b); b = c.p1; return c.ret; })())) {
                    b = new List$1(TreemapTreeNode.$, 0);
                    this.c.item(a.n, b);
                }
                b.add(a);
            }
            if (this.c.containsKey(a.l)) {
                for (let c of fromEnum(this.c.item(a.l))) {
                    a.b.add(c);
                }
                this.c.removeItem(a.l);
            }
        }
        g(a) {
            if (isNaN_(a.h)) {
                if (a.b.count > 0) {
                    a.d = 0;
                }
                for (let b = 0; b < a.b.count; b++) {
                    let c = a.b._inner[b];
                    this.g(c);
                    if (isNaN_(c.h)) {
                        a.d = a.d + c.d;
                    }
                    else {
                        a.d = a.d + c.h;
                    }
                }
            }
        }
        f() {
            this.g(this.a);
        }
    }
    TreemapTreeData.$t = /*@__PURE__*/ markType(TreemapTreeData, 'TreemapTreeData');
    return TreemapTreeData;
})();
/**
 * @hidden
 */
export let TreemapTreeNode = /*@__PURE__*/ (() => {
    class TreemapTreeNode extends Base {
        constructor() {
            super();
            this.l = null;
            this.n = null;
            this.b = null;
            this.c = null;
            this.h = 0;
            this.g = 0;
            this.f = 0;
            this.j = null;
            this.d = 0;
            this.m = null;
            this.k = null;
            this.i = 0;
            this.a = false;
            this.b = new List$1(TreemapTreeNode.$, 0);
            this.h = NaN;
            this.g = NaN;
            this.f = NaN;
            this.j = null;
            this.c = new List$1(TreemapNodeStyleMapping.$, 0);
            this.d = 0;
        }
        e() {
            if (isNaN_(this.h)) {
                return this.d;
            }
            return this.h;
        }
    }
    TreemapTreeNode.$t = /*@__PURE__*/ markType(TreemapTreeNode, 'TreemapTreeNode');
    return TreemapTreeNode;
})();
/**
 * @hidden
 */
export let Treemap = /*@__PURE__*/ (() => {
    class Treemap extends Base {
        constructor() {
            super();
            this.g = null;
            this.f = null;
            this.e = null;
            this.bq = false;
            this.aq = null;
            this.j9 = null;
            this.ay = null;
            this.fd = null;
            this.fc = "Root";
            this.e6 = " : ";
            this.fb = null;
            this.fa = null;
            this.e7 = null;
            this.e9 = null;
            this.b9 = null;
            this.b8 = null;
            this.e8 = null;
            this.cr = NaN;
            this.k = 0;
            this.a = new BrushCollection();
            this.ag = new TreemapNodeStyleMappingCollection();
            this.c = 0;
            this.br = false;
            this.ew = 10;
            this.cl = NaN;
            this.ck = NaN;
            this.p = 0;
            this.m = 0;
            this.jl = null;
            this.jf = null;
            this.jd = null;
            this.jk = null;
            this.ji = null;
            this.je = null;
            this.jm = null;
            this.jc = null;
            this.jh = null;
            this.jg = null;
            this.a5 = null;
            this.a4 = null;
            this.h = 0;
            this.co = DeviceUtils.g(5);
            this.cq = DeviceUtils.g(3);
            this.cp = DeviceUtils.g(5);
            this.cn = DeviceUtils.g(3);
            this.c1 = DeviceUtils.g(10);
            this.c3 = DeviceUtils.g(10);
            this.c2 = DeviceUtils.g(10);
            this.c0 = DeviceUtils.g(10);
            this.cv = DeviceUtils.g(5);
            this.cx = DeviceUtils.g(3);
            this.cw = DeviceUtils.g(5);
            this.cu = DeviceUtils.g(3);
            this.c6 = DeviceUtils.g(0);
            this.da = DeviceUtils.g(0);
            this.c8 = DeviceUtils.g(0);
            this.c4 = DeviceUtils.g(0);
            this.c7 = DeviceUtils.g(3);
            this.db = DeviceUtils.g(3);
            this.c9 = DeviceUtils.g(3);
            this.c5 = DeviceUtils.g(3);
            this.i9 = 1;
            this.kc = 1;
            this.cm = NaN;
            this.jj = null;
            this.dd = NaN;
            this.cz = NaN;
            this.ak = 0;
            this.t = 0;
            this.cy = DeviceUtils.g(3);
            this.ey = 500;
            this.de = 0;
            this.eu = null;
            this.a0 = null;
            this.ev = null;
            this.a1 = null;
            this.bf = null;
            this.ba = null;
            this.be = null;
            this.bc = null;
            this.bd = null;
            this.bb = null;
            this.dc = NaN;
            this.cd = 1;
            this.ct = NaN;
            this.cc = 0.5;
            this.ex = 300;
            this.at = 1;
            this.as = 1;
            this.cs = NaN;
            this.a9 = null;
            this.az = null;
            this.ar = null;
            this.bp = false;
            this.bw = false;
            this.b0 = false;
            this.bv = false;
            this.am = null;
            this.s = null;
            this.ce = NaN;
            this.cj = DeviceUtils.g(1);
            this.ci = 1;
            this.cf = 0.3;
            this.ch = 0.2;
            this.cg = 1;
            this.propertyChanged = null;
            this.y = null;
            this.v = null;
            this.e4 = null;
            this.ap = null;
            this.ao = null;
            this.j8 = null;
            this.nodeStyling = null;
            this.nodeRenderStyling = null;
            this.nodePointerOver = null;
            this.nodePointerEnter = null;
            this.nodePointerLeave = null;
            this.nodePointerPressed = null;
            this.nodePointerReleased = null;
            let a = new TreemapView();
            a.a = this;
            this.s = new SquarifiedCalculator();
            this.aq = a;
            this.aq.ax();
            this.eu = (b, c) => this.h4(c.action, c.position, c.count, c.propertyName);
            this.ev = (b, c) => this.h4(c.action, c.position, c.count, c.propertyName);
            this.j9 = Rect.empty;
            this.g = new TreemapFrame();
            this.f = new TreemapFrame();
            this.e = new TreemapFrame();
            this.bw = true;
            this.ay = new DoubleAnimator(0, 1, this.e3);
            this.ay.b = EasingFunctions.cubicEase;
            let b = this.ay;
            b.propertyChanged = delegateCombine(b.propertyChanged, runOn(this, this.h2));
            this.az = new DoubleAnimator(0, 1, this.e1);
            let c = this.az;
            c.propertyChanged = delegateCombine(c.propertyChanged, runOn(this, this.ia));
            let d = this.ag;
            d.collectionChanged = delegateCombine(d.collectionChanged, runOn(this, this.h0));
            let e = this.ag;
            e.collectionResetting = delegateCombine(e.collectionResetting, runOn(this, this.h1));
        }
        h1(a, b) {
            for (let c of fromEnum(this.styleMappings)) {
                c.propertyChanged = delegateRemove(c.propertyChanged, runOn(this, this.i4));
            }
            this.bw = true;
            this.b0 = true;
            this.aq.a2();
        }
        h0(a, b) {
            if (b.oldItems != null) {
                for (let c of fromEn(b.oldItems)) {
                    let d = c;
                    if (d != null) {
                        d.propertyChanged = delegateRemove(d.propertyChanged, runOn(this, this.i4));
                    }
                }
            }
            if (b.newItems != null) {
                for (let e of fromEn(b.newItems)) {
                    let f = e;
                    if (f != null) {
                        f.propertyChanged = delegateCombine(f.propertyChanged, runOn(this, this.i4));
                    }
                }
            }
            this.bw = true;
            this.b0 = true;
            this.aq.a2();
        }
        i4(a, b) {
            this.bw = true;
            this.b0 = true;
            this.aq.a2();
        }
        h4(a, b, c, d) {
            this.am = null;
            this.bw = true;
            this.bv = true;
            this.b0 = true;
            this.aq.a2();
        }
        notifySizeChanged() {
            this.aq.as();
        }
        destroy() {
            this.provideContainer(null);
        }
        ax() {
            let a = new TreemapVisualData();
            a.viewport = new RectData(this.kb.left, this.kb.top, this.kb.width, this.kb.height);
            a.nodes = new TreemapNodeVisualDataList();
            this.aq.ao(a);
            return a;
        }
        fn() {
            let a = this.ax();
            a.scaleByViewport();
            return a.serialize();
        }
        it(a, b, c) {
            if (this.propertyChanged != null) {
                this.propertyChanged(this, new PropertyChangedEventArgs(a));
            }
            this.iy(a, b, c);
        }
        iy(a, b, c) {
            switch (a) {
                case "FocusItem":
                    this.im();
                    break;
                case "LayoutType":
                    {
                        switch (EnumUtil.getEnumValue(TreemapLayoutType_$type, c)) {
                            case 0:
                                this.s = new SquarifiedCalculator();
                                break;
                            case 1:
                                this.s = new SliceAndDiceCalculator();
                                break;
                            case 2:
                                this.s = new StrippedCalculator();
                                break;
                        }
                        this.bw = true;
                        this.aq.a2();
                    }
                    break;
                case "BreadcrumbSequence":
                    this.bw = true;
                    this.aq.a2();
                    break;
                case "RootTitle":
                    this.bw = true;
                    this.aq.a2();
                    break;
                case "ValueMemberPath":
                    if (this.a2 != null) {
                        this.a2.deregisterColumn(this.bn);
                        this.bn = this.bl(this.a2, this.hx);
                        this.am = null;
                    }
                    this.h6();
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "CustomValueMemberPath":
                    if (this.a2 != null) {
                        this.a2.deregisterColumn(this.bg);
                        this.bg = this.bm(this.fk);
                        this.am = null;
                    }
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "IdMemberPath":
                    if (this.a2 != null) {
                        this.a2.deregisterColumn(this.bi);
                        this.bi = this.bm(this.gj);
                        this.am = null;
                    }
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "LabelMemberPath":
                    if (this.a2 != null) {
                        this.a2.deregisterColumn(this.bj);
                        this.bj = this.bm(this.gt);
                        this.am = null;
                    }
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "ParentIdMemberPath":
                    if (this.a2 != null) {
                        this.a2.deregisterColumn(this.bk);
                        this.bk = this.bm(this.hb);
                        this.am = null;
                    }
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "ItemsSource":
                    this.a2 = ((() => {
                        let $ret = new FastItemsSource();
                        $ret.e = this.dataSource;
                        return $ret;
                    })());
                    break;
                case "HighlightedValueMemberPath":
                    this.h6();
                    this.am = null;
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "HighlightedItemsSource":
                    this.a3 = ((() => {
                        let $ret = new FastItemsSource();
                        $ret.e = this.highlightedDataSource;
                        return $ret;
                    })());
                    break;
                case "HighlightedValuesDisplayMode":
                    this.am = null;
                    this.bw = true;
                    this.bv = true;
                    this.aq.a2();
                    break;
                case "HeaderLabelLeftMargin":
                case "HeaderLabelTopMargin":
                case "HeaderLabelRightMargin":
                case "HeaderLabelBottomMargin":
                case "LabelLeftMargin":
                case "LabelTopMargin":
                case "LabelRightMargin":
                case "LabelBottomMargin":
                case "ParentNodeLeftMargin":
                case "ParentNodeTopMargin":
                case "ParentNodeRightMargin":
                case "ParentNodeBottomMargin":
                case "ParentNodeLeftPadding":
                case "ParentNodeTopPadding":
                case "ParentNodeRightPadding":
                case "ParentNodeBottomPadding":
                case "HeaderTextColor":
                case "HeaderHoverTextColor":
                case "OverlayHeaderHoverBackground":
                case "HeaderHoverBackground":
                case "StrokeThickness":
                case "Outline":
                case "FillBrushes":
                case "IsFillScaleLogarithmic":
                case "FillScaleMinimumValue":
                case "FillScaleMaximumValue":
                case "HeaderBackground":
                case "OverlayHeaderBackground":
                case "HeaderHeight":
                case "FillScaleLogarithmBase":
                case "FillScaleMode":
                case "MinimumDisplaySize":
                case "LayoutOrientation":
                case "LabelHorizontalAlignment":
                case "LabelVerticalAlignment":
                case "HeaderDisplayMode":
                case "LabelHorizontalFitMode":
                case "LabelVerticalFitMode":
                case "HighlightedValueOpacity":
                    this.bw = true;
                    this.aq.a2();
                    break;
                case "TextStyle":
                    this.aq.az(this.a8);
                    this.bw = true;
                    this.aq.a2();
                    break;
                case "HeaderTextStyle":
                    this.aq.aw(this.a6);
                    this.bw = true;
                    this.aq.a2();
                    break;
                case "PixelScalingRatio":
                    if (!isNaN_(c)) {
                        this.dg = c;
                    }
                    break;
                case "ActualPixelScalingRatio":
                    if (isNaN_(this.dv)) {
                        this.df = this.dg / 2;
                    }
                    if (this.aq != null) {
                        this.aq.ay();
                    }
                    break;
                case "InteractionPixelScalingRatio":
                    if (!isNaN_(c)) {
                        this.df = c;
                    }
                    break;
                case "ActualInteractionPixelScalingRatio":
                    if (this.aq != null) {
                        this.aq.ay();
                    }
                    break;
                case "TransitionProgress":
                    this.e.h(this.et, this.g, this.f);
                    if (this.et >= 1) {
                        this.ay.w();
                        this.aq.ay();
                        let d = this.f;
                        this.f = this.g;
                        this.g = d;
                        this.ix();
                        this.i0(this.f);
                        this.aq.a1();
                        this.aq.a2();
                        return;
                    }
                    this.i0(this.e);
                    this.aq.a1();
                    break;
                case "Viewport":
                    this.bw = true;
                    this.aq.a2();
                    break;
                case "FastItemsSource":
                    {
                        let e = b;
                        let f = c;
                        if (b != null) {
                            e.event = delegateRemove(e.event, this.eu);
                            this.bp = false;
                            e.deregisterColumn(this.bn);
                            e.deregisterColumn(this.bi);
                            e.deregisterColumn(this.bk);
                            e.deregisterColumn(this.bj);
                            e.deregisterColumn(this.bg);
                            e.deregisterColumn(this.bh);
                            this.bn = null;
                            this.bi = null;
                            this.bk = null;
                            this.bj = null;
                            this.am = null;
                            if (this.a3 == null) {
                                this.bh = null;
                            }
                        }
                        if (c != null) {
                            f.event = delegateCombine(f.event, this.eu);
                            this.bp = true;
                            this.bn = this.bl(f, this.hx);
                            this.bi = this.bm(this.gj);
                            this.bk = this.bm(this.hb);
                            this.bj = this.bm(this.gt);
                            this.bg = this.bm(this.fk);
                            if (this.a3 == null) {
                                this.bh = this.bl(f, this.gb);
                            }
                        }
                        this.bw = true;
                        this.bv = true;
                        this.aq.a2();
                    }
                    break;
                case "HighlightedFastItemsSource":
                    {
                        let g = b;
                        let h = c;
                        if (b != null) {
                            g.event = delegateRemove(g.event, this.ev);
                            g.deregisterColumn(this.bh);
                            this.bh = null;
                            if (this.a2 != null) {
                                this.bh = this.bl(this.a2, this.gb);
                            }
                        }
                        if (c != null) {
                            if (this.a2 != null) {
                                this.a2.deregisterColumn(this.bh);
                                this.bh = null;
                            }
                            h.event = delegateCombine(h.event, this.ev);
                            if (!stringIsNullOrEmpty(this.gb)) {
                                this.bh = this.bl(h, this.gb);
                            }
                            else {
                                this.bh = this.bl(h, this.hx);
                            }
                        }
                        this.am = null;
                        this.bw = true;
                        this.bv = true;
                        this.aq.a2();
                    }
                    break;
                case "TransitionDuration":
                    this.ay.r = this.e3;
                    break;
                case "HighlightingTransitionDuration":
                    this.az.r = this.e1;
                    break;
                case "HighlightingMode":
                    this.au = this.av();
                    break;
            }
        }
        h6() {
            if (this.a3 != null) {
                let a = this.hx;
                if (!stringIsNullOrEmpty(this.gb)) {
                    a = this.gb;
                }
                this.a2.deregisterColumn(this.bh);
                this.a3.deregisterColumn(this.bh);
                this.bh = this.bl(this.a3, a);
                this.am = null;
            }
            else if (this.a2 != null) {
                let b = this.gb;
                this.a2.deregisterColumn(this.bh);
                this.bh = this.bl(this.a2, b);
                this.am = null;
            }
        }
        im() {
            if (this.bq) {
                return;
            }
            if (this.am == null) {
                return;
            }
            if (this.e5 == null) {
                this.ao = null;
                this.bw = true;
                this.aq.a2();
                return;
            }
            for (let a = 0; a < this.am.d.count; a++) {
                let b = this.am.b.item(this.am.d._inner[a]);
                if (b.k == this.e5) {
                    this.ao = b;
                    this.bw = true;
                    this.aq.a2();
                    break;
                }
            }
        }
        get kb() {
            return this.j9;
        }
        set kb(a) {
            let b = this.j9;
            this.j9 = a;
            if (!b.equals1(this.j9)) {
                this.it("Viewport", b, this.j9);
            }
        }
        h2(a, b) {
            this.et = this.ay.o;
        }
        get hx() {
            return this.fd;
        }
        set hx(a) {
            let b = this.fd;
            this.fd = a;
            if (b != this.fd) {
                this.iy("ValueMemberPath", b, a);
            }
        }
        get hn() {
            return this.fc;
        }
        set hn(a) {
            let b = this.fc;
            this.fc = a;
            if (b != this.fc) {
                this.iy("RootTitle", b, a);
            }
        }
        get fh() {
            return this.e6;
        }
        set fh(a) {
            let b = this.e6;
            this.e6 = a;
            if (b != this.fc) {
                this.iy("BreadcrumbSequence", b, a);
            }
        }
        get hb() {
            return this.fb;
        }
        set hb(a) {
            let b = this.fb;
            this.fb = a;
            if (b != this.fb) {
                this.it("ParentIdMemberPath", b, a);
            }
        }
        get gt() {
            return this.fa;
        }
        set gt(a) {
            let b = this.fa;
            this.fa = a;
            if (b != this.fa) {
                this.it("LabelMemberPath", b, a);
            }
        }
        get fk() {
            return this.e7;
        }
        set fk(a) {
            let b = this.e7;
            this.e7 = a;
            if (b != this.e7) {
                this.it("CustomValueMemberPath", b, a);
            }
        }
        get gj() {
            return this.e9;
        }
        set gj(a) {
            let b = this.e9;
            this.e9 = a;
            if (b != this.e9) {
                this.it("IdMemberPath", b, a);
            }
        }
        get dataSource() {
            return this.b9;
        }
        set dataSource(a) {
            let b = this.b9;
            this.b9 = a;
            if (b != this.b9) {
                this.it("ItemsSource", b, a);
            }
        }
        get highlightedDataSource() {
            return this.b8;
        }
        set highlightedDataSource(a) {
            let b = this.b8;
            this.b8 = a;
            if (b != this.b8) {
                this.it("HighlightedItemsSource", b, a);
            }
        }
        get gb() {
            return this.e8;
        }
        set gb(a) {
            let b = this.e8;
            this.e8 = a;
            if (b != this.e8) {
                this.it("HighlightedValueMemberPath", b, a);
            }
        }
        get dt() {
            return this.cr;
        }
        set dt(a) {
            let b = this.cr;
            this.cr = a;
            if (b != this.cr) {
                this.it("HighlightedValueOpacity", b, a);
            }
        }
        get l() {
            return this.k;
        }
        set l(a) {
            let b = this.k;
            this.k = a;
            if (b != this.k) {
                this.it("HighlightedValuesDisplayMode", enumGetBox(TreemapHighlightedValueDisplayMode_$type, b), enumGetBox(TreemapHighlightedValueDisplayMode_$type, a));
            }
        }
        get b() {
            return this.a;
        }
        set b(a) {
            let b = this.a;
            this.a = a;
            if (b != this.a) {
                this.it("FillBrushes", b, a);
            }
        }
        get styleMappings() {
            return this.ag;
        }
        get d() {
            return this.c;
        }
        set d(a) {
            let b = this.c;
            this.c = a;
            if (b != this.c) {
                this.it("FillScaleMode", enumGetBox(TreemapFillScaleMode_$type, b), enumGetBox(TreemapFillScaleMode_$type, a));
            }
        }
        get bx() {
            return this.br;
        }
        set bx(a) {
            let b = this.br;
            this.br = a;
            if (b != this.br) {
                this.it("IsFillScaleLogarithmic", b, a);
            }
        }
        get ez() {
            return this.ew;
        }
        set ez(a) {
            let b = this.ew;
            this.ew = a;
            if (b != this.ew) {
                this.it("FillScaleLogarithmBase", b, a);
            }
        }
        get dl() {
            return this.cl;
        }
        set dl(a) {
            let b = this.cl;
            this.cl = a;
            if (b != this.cl) {
                this.it("FillScaleMinimumValue", b, a);
            }
        }
        get dk() {
            return this.ck;
        }
        set dk(a) {
            let b = this.ck;
            this.ck = a;
            if (b != this.ck) {
                this.it("FillScaleMaximumValue", b, a);
            }
        }
        get r() {
            return this.p;
        }
        set r(a) {
            let b = this.p;
            this.p = a;
            if (b != this.p) {
                this.it("LabelVerticalFitMode", enumGetBox(TreemapLabelVerticalFitMode_$type, b), enumGetBox(TreemapLabelVerticalFitMode_$type, a));
            }
        }
        get q() {
            return this.r == 0 ? 1 : this.r;
        }
        get o() {
            return this.m;
        }
        set o(a) {
            let b = this.m;
            this.m = a;
            if (b != this.m) {
                this.it("LabelHorizontalFitMode", enumGetBox(TreemapLabelHorizontalFitMode_$type, b), enumGetBox(TreemapLabelHorizontalFitMode_$type, a));
            }
        }
        get n() {
            return this.o == 0 ? 1 : this.o;
        }
        get jx() {
            return this.jl;
        }
        set jx(a) {
            let b = this.jl;
            this.jl = a;
            if (b != this.jl) {
                this.it("OverlayHeaderHoverBackground", b, a);
            }
        }
        get jr() {
            return this.jf;
        }
        set jr(a) {
            let b = this.jf;
            this.jf = a;
            if (b != this.jf) {
                this.it("HeaderHoverBackground", b, a);
            }
        }
        get jp() {
            return this.jd;
        }
        set jp(a) {
            let b = this.jd;
            this.jd = a;
            if (b != this.jd) {
                this.it("HeaderBackground", b, a);
            }
        }
        get jw() {
            return this.jk;
        }
        set jw(a) {
            let b = this.jk;
            this.jk = a;
            if (b != this.jk) {
                this.it("OverlayHeaderBackground", b, a);
            }
        }
        get ju() {
            return this.ji;
        }
        set ju(a) {
            let b = this.ji;
            this.ji = a;
            if (b != this.ji) {
                this.it("HeaderTextColor", b, a);
            }
        }
        get jq() {
            return this.je;
        }
        set jq(a) {
            let b = this.je;
            this.je = a;
            if (b != this.je) {
                this.it("HeaderDarkTextColor", b, a);
            }
        }
        get j7() {
            return this.jm;
        }
        set j7(a) {
            let b = this.jm;
            this.jm = a;
            if (b != this.jm) {
                this.it("TextColor", b, a);
            }
        }
        get jo() {
            return this.jc;
        }
        set jo(a) {
            let b = this.jc;
            this.jc = a;
            if (b != this.jc) {
                this.it("DarkTextColor", b, a);
            }
        }
        get jt() {
            return this.jh;
        }
        set jt(a) {
            let b = this.jh;
            this.jh = a;
            if (b != this.jh) {
                this.it("HeaderHoverTextColor", b, a);
            }
        }
        get js() {
            return this.jg;
        }
        set js(a) {
            let b = this.jg;
            this.jg = a;
            if (b != this.jg) {
                this.it("HeaderHoverDarkTextColor", b, a);
            }
        }
        get a8() {
            return this.a5;
        }
        set a8(a) {
            let b = this.a5;
            this.a5 = a;
            if (b != this.a5) {
                this.it("TextStyle", b, this.a5);
            }
        }
        get a6() {
            return this.a4;
        }
        set a6(a) {
            let b = this.a4;
            this.a4 = a;
            if (b != this.a4) {
                this.it("HeaderTextStyle", b, this.a4);
            }
        }
        get j() {
            return this.h;
        }
        set j(a) {
            let b = this.h;
            this.h = a;
            if (b != this.h) {
                this.it("HeaderDisplayMode", enumGetBox(TreemapHeaderDisplayMode_$type, b), enumGetBox(TreemapHeaderDisplayMode_$type, this.h));
            }
        }
        get i() {
            return this.j == 0 ? 1 : this.j;
        }
        get dq() {
            return this.co;
        }
        set dq(a) {
            let b = this.co;
            this.co = a;
            if (b != this.co) {
                this.it("HeaderLabelLeftMargin", b, a);
            }
        }
        get ds() {
            return this.cq;
        }
        set ds(a) {
            let b = this.cq;
            this.cq = a;
            if (b != this.cq) {
                this.it("HeaderLabelTopMargin", b, a);
            }
        }
        get dr() {
            return this.cp;
        }
        set dr(a) {
            let b = this.cp;
            this.cp = a;
            if (b != this.cp) {
                this.it("HeaderLabelRightMargin", b, a);
            }
        }
        get dp() {
            return this.cn;
        }
        set dp(a) {
            let b = this.cn;
            this.cn = a;
            if (b != this.cn) {
                this.it("HeaderLabelBottomMargin", b, a);
            }
        }
        get d3() {
            return this.c1;
        }
        set d3(a) {
            let b = this.c1;
            this.c1 = a;
            if (b != this.c1) {
                this.it("OverlayHeaderLabelLeftMargin", b, a);
            }
        }
        get d5() {
            return this.c3;
        }
        set d5(a) {
            let b = this.c3;
            this.c3 = a;
            if (b != this.c3) {
                this.it("OverlayHeaderLabelTopMargin", b, a);
            }
        }
        get d4() {
            return this.c2;
        }
        set d4(a) {
            let b = this.c2;
            this.c2 = a;
            if (b != this.c2) {
                this.it("OverlayHeaderLabelRightMargin", b, a);
            }
        }
        get d2() {
            return this.c0;
        }
        set d2(a) {
            let b = this.c0;
            this.c0 = a;
            if (b != this.c0) {
                this.it("OverlayHeaderLabelBottomMargin", b, a);
            }
        }
        get dx() {
            return this.cv;
        }
        set dx(a) {
            let b = this.cv;
            this.cv = a;
            if (b != this.cv) {
                this.it("LabelLeftMargin", b, a);
            }
        }
        get dz() {
            return this.cx;
        }
        set dz(a) {
            let b = this.cx;
            this.cx = a;
            if (b != this.cx) {
                this.it("LabelTopMargin", b, a);
            }
        }
        get dy() {
            return this.cw;
        }
        set dy(a) {
            let b = this.cw;
            this.cw = a;
            if (b != this.cw) {
                this.it("LabelRightMargin", b, a);
            }
        }
        get dw() {
            return this.cu;
        }
        set dw(a) {
            let b = this.cu;
            this.cu = a;
            if (b != this.cu) {
                this.it("LabelBottomMargin", b, a);
            }
        }
        get d8() {
            return this.c6;
        }
        set d8(a) {
            let b = this.c6;
            this.c6 = a;
            if (b != this.c6) {
                this.it("ParentNodeLeftMargin", b, a);
            }
        }
        get ec() {
            return this.da;
        }
        set ec(a) {
            let b = this.da;
            this.da = a;
            if (b != this.da) {
                this.it("ParentNodeTopMargin", b, a);
            }
        }
        get ea() {
            return this.c8;
        }
        set ea(a) {
            let b = this.c8;
            this.c8 = a;
            if (b != this.c8) {
                this.it("ParentNodeRightMargin", b, a);
            }
        }
        get d6() {
            return this.c4;
        }
        set d6(a) {
            let b = this.c4;
            this.c4 = a;
            if (b != this.c4) {
                this.it("ParentNodeBottomMargin", b, a);
            }
        }
        get d9() {
            return this.c7;
        }
        set d9(a) {
            let b = this.c7;
            this.c7 = a;
            if (b != this.c7) {
                this.it("ParentNodeLeftPadding", b, a);
            }
        }
        get ed() {
            return this.db;
        }
        set ed(a) {
            let b = this.db;
            this.db = a;
            if (b != this.db) {
                this.it("ParentNodeTopPadding", b, a);
            }
        }
        get eb() {
            return this.c9;
        }
        set eb(a) {
            let b = this.c9;
            this.c9 = a;
            if (b != this.c9) {
                this.it("ParentNodeRightPadding", b, a);
            }
        }
        get d7() {
            return this.c5;
        }
        set d7(a) {
            let b = this.c5;
            this.c5 = a;
            if (b != this.c5) {
                this.it("ParentNodeBottomPadding", b, a);
            }
        }
        get ja() {
            return this.i9;
        }
        set ja(a) {
            let b = this.i9;
            this.i9 = a;
            if (b != this.i9) {
                this.it("LabelHorizontalAlignment", enumGetBox(HorizontalAlignment_$type, b), enumGetBox(HorizontalAlignment_$type, a));
            }
        }
        get kd() {
            return this.kc;
        }
        set kd(a) {
            let b = this.kc;
            this.kc = a;
            if (b != this.kc) {
                this.it("LabelVerticalAlignment", enumGetBox(VerticalAlignment_$type, b), enumGetBox(VerticalAlignment_$type, a));
            }
        }
        get dn() {
            return this.cm;
        }
        set dn(a) {
            let b = this.cm;
            this.cm = a;
            if (b != this.cm) {
                this.it("HeaderHeight", b, a);
            }
        }
        get jv() {
            return this.jj;
        }
        set jv(a) {
            let b = this.jj;
            this.jj = a;
            if (b != this.jj) {
                this.it("Outline", b, a);
            }
        }
        get es() {
            return this.dd;
        }
        set es(a) {
            let b = this.dd;
            this.dd = a;
            if (b != this.dd) {
                this.it("StrokeThickness", b, a);
            }
        }
        get d1() {
            return this.cz;
        }
        set d1(a) {
            let b = this.cz;
            this.cz = a;
            if (b != this.cz) {
                this.it("NodeOpacity", b, a);
            }
        }
        get al() {
            return this.ak;
        }
        set al(a) {
            let b = this.ak;
            this.ak = a;
            if (b != this.ak) {
                this.it("LayoutOrientation", enumGetBox(TreemapOrientation_$type, b), enumGetBox(TreemapOrientation_$type, a));
            }
        }
        get u() {
            return this.t;
        }
        set u(a) {
            let b = this.t;
            this.t = a;
            if (b != this.t) {
                this.it("LayoutType", enumGetBox(TreemapLayoutType_$type, b), enumGetBox(TreemapLayoutType_$type, a));
            }
        }
        get d0() {
            return this.cy;
        }
        set d0(a) {
            let b = this.cy;
            this.cy = a;
            if (b != this.cy) {
                this.it("MinimumDisplaySize", b, a);
            }
        }
        get e3() {
            return this.ey;
        }
        set e3(a) {
            let b = this.ey;
            this.ey = a;
            if (b != this.ey) {
                this.it("TransitionDuration", b, a);
            }
        }
        get et() {
            return this.de;
        }
        set et(a) {
            let b = this.de;
            this.de = a;
            if (b != this.de) {
                this.it("TransitionProgress", b, a);
            }
        }
        get a2() {
            return this.a0;
        }
        set a2(a) {
            let b = this.a0;
            this.a0 = a;
            if (b != this.a0) {
                this.it("FastItemsSource", b, this.a0);
            }
        }
        get a3() {
            return this.a1;
        }
        set a3(a) {
            let b = this.a1;
            this.a1 = a;
            if (b != this.a1) {
                this.it("HighlightedFastItemsSource", b, this.a1);
            }
        }
        get bn() {
            return this.bf;
        }
        set bn(a) {
            this.bf = a;
        }
        get bg() {
            return this.ba;
        }
        set bg(a) {
            this.ba = a;
        }
        get bk() {
            return this.be;
        }
        set bk(a) {
            this.be = a;
        }
        get bi() {
            return this.bc;
        }
        set bi(a) {
            this.bc = a;
        }
        get bj() {
            return this.bd;
        }
        set bj(a) {
            this.bd = a;
        }
        get bh() {
            return this.bb;
        }
        set bh(a) {
            this.bb = a;
        }
        get ee() {
            return this.dc;
        }
        set ee(a) {
            let b = this.dc;
            this.dc = a;
            if (b != this.dc) {
                this.it("PixelScalingRatio", b, a);
            }
        }
        get dg() {
            return this.cd;
        }
        set dg(a) {
            let b = this.cd;
            this.cd = a;
            if (b != this.cd) {
                this.it("ActualPixelScalingRatio", b, a);
            }
        }
        get dv() {
            return this.ct;
        }
        set dv(a) {
            let b = this.ct;
            this.ct = a;
            if (b != this.ct) {
                this.it("InteractionPixelScalingRatio", b, a);
            }
        }
        get df() {
            return this.cc;
        }
        set df(a) {
            let b = this.cc;
            this.cc = a;
            if (b != this.cc) {
                this.it("ActualInteractionPixelScalingRatio", b, a);
            }
        }
        get e1() {
            return this.ex;
        }
        set e1(a) {
            let b = this.ex;
            this.ex = a;
            if (b != this.ex) {
                this.it("HighlightingTransitionDuration", b, a);
            }
        }
        get aw() {
            return this.at;
        }
        set aw(a) {
            let b = this.at;
            this.at = a;
            if (b != this.at) {
                this.it("HighlightingMode", enumGetBox(TreemapHighlightingMode_$type, b), enumGetBox(TreemapHighlightingMode_$type, a));
            }
        }
        get au() {
            return this.as;
        }
        set au(a) {
            let b = this.as;
            this.as = a;
            if (b != this.as) {
                this.it("ActualHighlightingMode", enumGetBox(TreemapHighlightingMode_$type, b), enumGetBox(TreemapHighlightingMode_$type, a));
            }
        }
        av() {
            if (this.aw != 0) {
                return this.aw;
            }
            return 2;
        }
        get du() {
            return this.cs;
        }
        set du(a) {
            let b = this.cs;
            this.cs = a;
            if (b != this.cs) {
                this.it("HighlightingFadeOpacity", b, a);
            }
        }
        get bo() {
            if (this.ar == null) {
                this.ar = new TreemapHighlightingManager();
                this.ar.executionContext = this.aq.d();
                this.ar.ensureAnimator = runOn(this, this.h7);
            }
            return this.ar;
        }
        h7() {
            let a = this.az;
            if (!a.f() && a.r > 0) {
                a.v();
            }
            if (a.r == 0) {
                this.i7(1);
            }
        }
        h3() {
            this.a9 = null;
        }
        ia(a, b) {
            this.i7(this.az.o);
        }
        i7(a) {
            let b = this.bo.tick(a);
            if (a == 1 && b && this.az.r > 0) {
                this.az.v();
            }
            if (this.bs) {
                this.i0(this.e);
            }
            else {
                this.i0(this.f);
            }
            if (!b) {
                this.az.w();
            }
        }
        id(a, b, c, d) {
            if (c) {
                return;
            }
            if (this.au == 1) {
                return;
            }
            let e = null;
            let f = this.bo;
            let g = d;
            let h = !g;
            if (g && this.a9 != null) {
                e = this.a9;
            }
            else {
                if (a != null) {
                    e = a.f(this);
                }
                if (this.a9 != null && this.a9 != e) {
                    f.endHighlight(this.a9);
                }
                this.a9 = e;
            }
            if (g) {
                f.endHighlight(e);
            }
            else if (h) {
                f.startHighlight(e);
            }
            this.h7();
        }
        bl(a, b) {
            let c = null;
            return a.registerColumn(b, c, false);
        }
        bm(a) {
            let b = null;
            return this.a2.registerColumnObject(a, b, false);
        }
        ic() {
            this.bw = true;
            this.aq.a2();
        }
        get bs() {
            return this.ay.f();
        }
        bz() {
            if (this.l == 2) {
                return false;
            }
            if (this.bh == null) {
                return false;
            }
            if (this.a3 == null && stringIsNullOrEmpty(this.gb)) {
                return false;
            }
            return true;
        }
        an() {
            let a = new TreemapTreeData();
            if (this.bn == null || (this.bj == null && this.bi == null)) {
                return null;
            }
            for (let b = 0; b < this.a2.count; b++) {
                let c = null;
                if (this.bg != null && this.bg.count > b) {
                    c = this.bg.item(b);
                }
                let d = NaN;
                if (this.bz() && this.bh != null && this.bh.count > b) {
                    d = this.bh.item(b);
                    if (isNaN_(d)) {
                        d = 0;
                    }
                }
                let e = this.bn.item(b);
                let f = null;
                let g = "";
                if (this.bj != null) {
                    g = this.bj.item(b) != null ? this.bj.item(b).toString() : "";
                }
                if (this.bi != null) {
                    if (this.bi.item(b) == null) {
                        continue;
                    }
                    f = stringReplace(this.bi.item(b).toString(), " ", "_");
                }
                if (f == null) {
                    f = stringReplace(g, " ", "_");
                    if (stringIsNullOrEmpty(f)) {
                        continue;
                    }
                }
                let h = null;
                if (this.bk != null) {
                    h = this.bk.item(b) != null ? stringReplace(this.bk.item(b).toString(), " ", "_") : null;
                }
                let i = new TreemapTreeNode();
                i.l = f;
                i.n = h;
                i.k = this.a2.item(b);
                i.i = b;
                i.h = e;
                i.g = d;
                if (!isNaN_(i.h) && !isNaN_(i.g)) {
                    i.f = Math.max(0, Math.min(1, i.g / i.h));
                }
                i.j = c;
                i.m = g;
                a.e(i);
            }
            a.f();
            return a;
        }
        ix() {
            if (this.am == null) {
                this.am = this.an();
                if (this.am == null) {
                    return;
                }
                this.b0 = true;
                this.im();
            }
            if (this.b0) {
                this.b0 = false;
                for (let a = 0; a < this.am.d.count; a++) {
                    let b = this.am.b.item(this.am.d._inner[a]);
                    b.c.clear();
                    for (let c = 0; c < this.styleMappings.count; c++) {
                        if (this.bt(this.styleMappings._inner[c], b)) {
                            b.c.add(this.styleMappings._inner[c]);
                        }
                    }
                }
            }
            if (!this.aq.q()) {
                return;
            }
            let d = new TreemapLayoutSettings();
            d.b = this.am;
            if (this.ao != null && !this.am.b.containsKey(this.ao.l)) {
                this.ao = null;
                this.i5(null);
            }
            else {
                if (this.ao != null) {
                    let e = this.am.b.item(this.ao.l);
                    if (e != this.ao) {
                        this.ao = e;
                        this.i5(this.ao);
                    }
                }
            }
            d.h = this.kb;
            d.c = this.ao;
            d.f = this.d0;
            d.a = this.al;
            let f = this.i;
            let g = this.ei();
            let h = this.ek();
            let i = this.ej();
            let j = this.eh();
            let k = this.en();
            let l = this.ep();
            let m = this.eo();
            let n = this.em();
            let o = this.jb();
            let p = this.ke();
            let q = this.aq.y("M");
            let r = this.aq.aa("M");
            let s = q + h + j;
            let t = r + l + n;
            d.j = new Thickness(1, this.d9, this.ed, this.eb, this.d7);
            d.i = new Thickness(1, this.d8, this.ec, this.ea, this.d6);
            if (!isNaN_(this.dn)) {
                s = this.dn;
            }
            d.e = s;
            if (f == 2) {
                d.e = 0;
            }
            d.d = this.ao == null;
            this.s.d(this.f, d);
            let u = 1.7976931348623157E+308;
            let v = -1.7976931348623157E+308;
            if (this.d == 1 || this.d == 3) {
                for (let w = 0; w < this.am.d.count; w++) {
                    let x = 0;
                    if (this.d == 1) {
                        x = this.am.b.item(this.am.d._inner[w]).e();
                    }
                    else {
                        x = this.am.b.item(this.am.d._inner[w]).h;
                    }
                    if (!isNaN_(x)) {
                        u = Math.min(x, u);
                        v = Math.max(x, v);
                    }
                }
            }
            else {
                for (let y = 0; y < this.f.e.count; y++) {
                    let z = 0;
                    if (this.d == 0) {
                        z = this.am.b.item(this.f.e._inner[y]).e();
                    }
                    else {
                        z = this.am.b.item(this.f.e._inner[y]).h;
                    }
                    if (!isNaN_(z)) {
                        u = Math.min(z, u);
                        v = Math.max(z, v);
                    }
                }
            }
            for (let aa = 0; aa < this.f.e.count; aa++) {
                let ab = this.f.e._inner[aa];
                let ac = this.am.b.item(ab);
                let ad = this.jy(ac, u, v);
                let ae = this.j3(ac);
                let af = this.jz(ac);
                let ag = this.er(ac);
                let ah = this.eq(ac);
                let ai = this.ef(ac);
                let aj = this.hm(this.f, ac, g, i, k, m, s, t);
                let ak = this.j2(ac, ad, af);
                let al = this.a7(ac);
                let am = 0;
                if (this.by(ac)) {
                    am = this.aq.z(aj);
                }
                else {
                    am = this.aq.ab(aj);
                }
                let an = 0;
                if (this.by(ac)) {
                    an = s;
                }
                else {
                    an = this.aq.aa(aj);
                }
                let ao = this.el(ac);
                let ap = this.eg(ac);
                this.f.l(ac, aj, ad, ae, af, ak, ag, ah, ai, f, am, an, g, h, i, j, k, l, m, n, o, p, ao, ap);
                if (ac.c.count > 0) {
                    for (let aq = 0; aq < ac.c.count; aq++) {
                        let ar = ac.b != null && ac.b.count > 0;
                        if (ac.c._inner[aq].bo == 2 && ar) {
                            continue;
                        }
                        this.f.f(ac, ac.c._inner[aq], runOn(this, this.j2));
                    }
                }
                if (this.nodeStyling != null) {
                    let as = new TreemapNodeStylingEventArgs();
                    as.item = ac.k;
                    if (ac.n != null) {
                        if (this.am.b.containsKey(ac.n)) {
                            let at = this.am.b.item(ac.n);
                            as.parentItem = at.k;
                            as.parentLabel = at.m;
                            as.parentSum = at.e();
                            as.parentValue = at.h;
                        }
                    }
                    as.sum = ac.e();
                    as.value = ac.h;
                    as.label = ac.m;
                    as.customValue = ac.j;
                    if (ac.b != null && ac.b.count > 0) {
                        as.isParent = true;
                    }
                    as.style = new TreemapNodeStyle();
                    as.highlightingInfo = this.bo.getHighlightingInfo(this, this.a2, ac.i, ac.i, false);
                    this.nodeStyling(this, as);
                    this.f.f(ac, as.style, runOn(this, this.j2));
                }
            }
        }
        by(a) {
            return a.b != null && a.b.count > 0;
        }
        em() {
            return this.dw;
        }
        eo() {
            return this.dy;
        }
        ep() {
            return this.dz;
        }
        en() {
            return this.dx;
        }
        jb() {
            return this.ja;
        }
        ke() {
            return this.kd;
        }
        eh() {
            if (this.i == 2) {
                return this.d2;
            }
            return this.dp;
        }
        ej() {
            if (this.i == 2) {
                return this.d4;
            }
            return this.dr;
        }
        ek() {
            if (this.i == 2) {
                return this.d5;
            }
            return this.ds;
        }
        ei() {
            if (this.i == 2) {
                return this.d2;
            }
            return this.dq;
        }
        hv(a, b, c, d, e) {
            let f = b.length;
            let g = b;
            let h = ("\u2026");
            if (isNaN_(this.ce)) {
                if (this.by(a)) {
                    this.ce = this.aq.z(h);
                }
                else {
                    this.ce = this.aq.ab(h);
                }
            }
            if (c <= (this.ce + d + e)) {
                if (this.n == 2) {
                    return "";
                }
                return h;
            }
            let i = 0;
            if (this.by(a)) {
                i = this.aq.z(b);
            }
            else {
                i = this.aq.ab(b);
            }
            if (i + d + e <= c) {
                return b;
            }
            let j = c / (i + d + e);
            let k = truncate(Math.ceil(f * j));
            let l = b.substr(0, k) + h;
            let m = 0;
            if (this.by(a)) {
                m = this.aq.z(l);
            }
            else {
                m = this.aq.ab(l);
            }
            if ((m + d + e) > c) {
                f = k;
            }
            else {
                k = k + 1;
                l = b.substr(0, k) + h;
                if (this.by(a)) {
                    m = this.aq.z(l);
                }
                else {
                    m = this.aq.ab(l);
                }
                if ((m + d + e) > c) {
                    f = k;
                }
            }
            while ((i + d + e) > c && f > 0) {
                f--;
                b = b.substr(0, f) + h;
                if (this.n == 2) {
                    return "";
                }
                if (this.by(a)) {
                    i = this.aq.z(b);
                }
                else {
                    i = this.aq.ab(b);
                }
            }
            return b;
        }
        hm(a, b, c, d, e, f, g, h) {
            if (b == null) {
                if (this.fh != null && this.hn != null && !stringIsNullOrEmpty(this.hn)) {
                    return this.hn + this.fh;
                }
                return "";
            }
            let i = a.o(b);
            let j = i.width;
            let k = i.height;
            let l = b.m;
            if (this.ao != null && this.ao == b && this.fh != null) {
                let m = null;
                let n = b;
                while (n.n != null) {
                    if (this.am.b.containsKey(n.n)) {
                        m = this.am.b.item(n.n);
                        if (m.m != null) {
                            l = m.m + this.fh + l;
                        }
                        n = m;
                    }
                }
                if (this.hn != null && !stringIsNullOrEmpty(this.hn)) {
                    l = this.hn + this.fh + l;
                }
            }
            let o = 0;
            let p = 0;
            if (a.c(b.l)) {
                let q = a.a(b.l);
                if (b.b.count > 0) {
                    o = c;
                    p = d;
                    if (this.q == 2) {
                        if (k < g) {
                            return "";
                        }
                    }
                }
                else {
                    o = e;
                    p = f;
                    if (this.q == 2) {
                        if (k < h) {
                            return "";
                        }
                    }
                }
            }
            return this.hv(b, l, j, o, p);
        }
        er(a) {
            if (!isNaN_(this.es)) {
                return this.es;
            }
            return this.cj;
        }
        eq(a) {
            if (!isNaN_(this.d1)) {
                return this.d1;
            }
            return this.ci;
        }
        ef(a) {
            if (!isNaN_(this.du)) {
                return this.du;
            }
            return this.cf;
        }
        el(a) {
            if (!isNaN_(this.dt)) {
                return this.dt;
            }
            return this.ch;
        }
        eg(a) {
            return this.cg;
        }
        jz(a) {
            if (this.i == 2) {
                return this.j4(a);
            }
            if (a == this.ap) {
                return this.j0(a);
            }
            if (this.jp != null) {
                return this.jp;
            }
            return this.aq.a7();
        }
        j4(a) {
            if (a == this.ap) {
                return this.j5(a);
            }
            if (this.jw != null) {
                return this.jw;
            }
            return this.aq.bc();
        }
        j2(a, b, c) {
            if (a.b.count > 0) {
                if (a == this.ap) {
                    return this.j1(a, c);
                }
                let d = this.aq.a8();
                let e = this.aq.a9();
                if (this.ju != null) {
                    e = this.ju;
                }
                if (this.jq != null) {
                    d = this.jq;
                }
                return BrushUtil.l(c, d, e);
            }
            else {
                let f = this.aq.a6();
                let g = this.aq.be();
                if (this.j7 != null) {
                    g = this.j7;
                }
                if (this.jo != null) {
                    f = this.jo;
                }
                return BrushUtil.l(b, f, g);
            }
        }
        a7(a) {
            if (a.b.count > 0) {
                if (this.a6 != null) {
                    return this.a6;
                }
                return this.aq.j();
            }
            else {
                if (this.a8 != null) {
                    return this.a8;
                }
                return this.aq.k();
            }
        }
        onDetachedFromUI() {
            this.aq.av();
        }
        onAttachedToUI() {
            this.aq.at();
        }
        j0(a) {
            if (this.jr != null) {
                return this.jr;
            }
            return this.aq.ba();
        }
        j5(a) {
            if (this.jx != null) {
                return this.jx;
            }
            return this.aq.bd();
        }
        j1(a, b) {
            let c = this.aq.a8();
            let d = this.aq.a9();
            if (this.ju != null) {
                d = this.ju;
            }
            if (this.jq != null) {
                c = this.jq;
            }
            if (this.jt != null) {
                d = this.jt;
            }
            if (this.js != null) {
                c = this.js;
            }
            return BrushUtil.l(b, c, d);
        }
        j3(a) {
            if (this.jv != null) {
                return this.jv;
            }
            return this.aq.bb();
        }
        jy(a, b, c) {
            if (this.b == null || this.b.count == 0) {
                return this.j6(a);
            }
            let d = this.dm(a);
            if (isNaN_(d)) {
                return this.j6(a);
            }
            let e = 0;
            if (this.bx && this.ez > 0) {
                if (d > 0) {
                    e = (logBase(d, this.ez) - logBase(b, this.ez)) / (logBase(c, this.ez) - logBase(b, this.ez));
                }
                else {
                    return this.j6(a);
                }
            }
            else {
                let f = c - b;
                if (f == 0) {
                    e = 0;
                }
                else {
                    e = (d - b) / (c - b);
                }
            }
            e = e * (this.b.count - 1);
            return BrushCollectionUtil.d(this.b, e);
        }
        dm(a) {
            switch (this.d) {
                case 0:
                case 1: return a.e();
                case 2:
                case 3: return a.h;
            }
            return a.e();
        }
        j6(a) {
            return this.aq.a7();
        }
        i0(a) {
            let b = new List$1(TreemapVisual.$, 0);
            let c = this.aq.l();
            let d = 0;
            if (this.i == 2) {
                d = this.e2(a, false, d, c, (e) => true, b);
                d = this.e2(a, true, d, c, (e) => e.e.b != null && e.e.b.count > 0, b);
            }
            else {
                d = this.e2(a, false, d, c, (e) => true, b);
            }
            c.count = d;
            this.aq.ai(b);
        }
        e2(a, b, c, d, e, f) {
            for (let g = 0; g < a.e.count; g++) {
                let h = a.e._inner[g];
                let i = a.a(h);
                if (!e(i)) {
                    continue;
                }
                let j = d.item(c);
                if (i.ae.isEmpty || (i.ae.width == 0 && i.ae.height == 0)) {
                    j.x = 1;
                    continue;
                }
                c++;
                f.add(j);
                let k = i.e;
                let l = true;
                if (this.nodeRenderStyling != null) {
                    let m = new TreemapNodeStylingEventArgs();
                    m.item = k.k;
                    if (k.n != null) {
                        if (this.am.b.containsKey(k.n)) {
                            let n = this.am.b.item(k.n);
                            m.parentItem = n.k;
                            m.parentLabel = n.m;
                            m.parentSum = n.e();
                            m.parentValue = n.h;
                        }
                    }
                    m.sum = k.e();
                    m.value = k.h;
                    m.label = k.m;
                    m.customValue = k.j;
                    if (k.b != null && k.b.count > 0) {
                        m.isParent = true;
                    }
                    m.style = new TreemapNodeStyle();
                    m.isHighlightInProgress = this.bo.inProgress;
                    m.totalHighlightProgress = this.bo.totalHighlightingProgress;
                    m.highlightingInfo = this.bo.getHighlightingInfo(this, this.a2, k.i, k.i, false);
                    this.nodeRenderStyling(this, m);
                    l = !m.highlightingHandled;
                    i.y(k, m.style, runOn(this, this.j2));
                }
                let o = i.e.b.count == 0;
                let p = !o && i.a == 2;
                j.a = this.a7(i.e);
                j.l = i.aa;
                j.o = i.ad;
                j.m = i.ab;
                j.r = new Thickness(1, i.l, i.n, i.m, i.k);
                j.s = new Thickness(1, i.r, i.t, i.s, i.q);
                j.n = i.ac;
                j.j = i.x;
                j.i = i.v;
                j.x = 0;
                j.p = this.ka(i.ae, i.v);
                j.b = o;
                j.u = !o && !p ? 0 : 1;
                j.w = !o && p ? 0 : 1;
                j.v = o ? 0 : 1;
                j.f = i.o;
                j.e = i.j;
                j.k = i.z;
                j.t = i.ag;
                j.h = i.u;
                j.d = i.i;
                j.q = Rect.empty;
                if (i.af.height != i.ae.height) {
                    j.q = this.ka(i.af, i.v);
                    j.d = i.p;
                }
                if (!b && !o && p) {
                    j.w = 1;
                }
                if (b && !o && p) {
                    j.l = null;
                    j.o = null;
                }
                if (this.au != 1 && l) {
                    let q = this.bo.getHighlightingInfo(this, this.a2, k.i, k.i, false);
                    j.l = this.jn(q, this.au, j.l);
                    j.o = this.jn(q, this.au, j.o);
                    j.h = this.di(q, this.au, j.h, i.h, this.bo.totalHighlightingProgress, this.bo.totalHighlightingProgress);
                }
            }
            return c;
        }
        di(a, b, c, d, e, f) {
            if (b == 3) {
                let g = 0;
                if (a != null) {
                    g = a.e;
                }
                if (g > 1) {
                    g = 1;
                }
                if (e > 1) {
                    e = 1;
                }
                if (f > 1) {
                    f = 1;
                }
                g = g - Math.max(e, f);
                return d + (1 + g) * (1 - d);
            }
            return c;
        }
        jn(a, b, c) {
            if (c != null && b == 2) {
                let d = 0;
                if (a != null) {
                    d = a.e;
                }
                let e = d;
                e = e * 0.5;
                if (e == 0) {
                    return c;
                }
                return BrushUtil.o(c, e);
            }
            return c;
        }
        ka(a, b) {
            let c = this.dh(Math.floor(a.left), b);
            let d = this.dh(Math.floor(a.right), b);
            let e = this.dh(Math.floor(a.top), b);
            let f = this.dh(Math.floor(a.bottom), b);
            return new Rect(0, c, e, d - c, f - e);
        }
        dh(a, b) {
            let c = a;
            if (b > 0) {
                let d = b % 2;
                if (d == 0 || d == 1) {
                    let e = 1;
                    c = Math.floor(a);
                    if (c + 0.5 < a) {
                        e = -1;
                        c = Math.ceil(a);
                    }
                    if (d == 1) {
                        c += 0.5 * e;
                    }
                }
            }
            return c;
        }
        b4() {
            return !this.kb.isEmpty && this.aq.q();
        }
        i1() {
            if (!this.b4()) {
                return;
            }
            if (this.bw) {
                if (this.bs) {
                    if (this.ay.g) {
                        this.ay.t();
                    }
                    let a = this.g;
                    this.g = this.e;
                    this.e = a;
                }
                else {
                    let b = this.g;
                    this.g = this.f;
                    this.f = b;
                }
            }
            else if (this.bs) {
                this.e.h(this.et, this.g, this.f);
                this.i0(this.e);
            }
            if (this.bw) {
                this.ix();
            }
            if (this.bw && this.b5) {
                this.i3();
                this.e.h(this.et, this.g, this.f);
                this.i0(this.e);
            }
            else {
                if (this.bw) {
                    this.i0(this.f);
                }
            }
            this.bw = false;
            this.aq.a1();
        }
        bt(a, b) {
            let c = null;
            switch (a.bq) {
                case 1:
                    c = b.h;
                    break;
                case 0:
                    c = b.e();
                    break;
                case 2:
                    c = b.j;
                    break;
            }
            if (this.b1(c)) {
                let d = this.dj(c);
                if (a.bw != null) {
                    if (this.b1(a.bw)) {
                        let e = this.dj(a.bw);
                        if (isNaN_(e) && isNaN_(d)) {
                            return true;
                        }
                        if (d == e) {
                            return true;
                        }
                    }
                }
                else if (!isNaN_(a.bu) || !isNaN_(a.bt)) {
                    let f = a.bu;
                    let g = a.bt;
                    if (d >= f && d <= g) {
                        return true;
                    }
                }
            }
            else if (this.b3(c)) {
                if (a.bw != null) {
                    if (this.b3(a.bw)) {
                        let h = (a.bw);
                        if (Base.equalsStatic(h, c)) {
                            return true;
                        }
                    }
                }
            }
            else {
                if (Base.equalsStatic(c, a.bw)) {
                    return true;
                }
            }
            return false;
        }
        b3(a) {
            return typeof a === 'string';
        }
        dj(a) {
            if (typeof a === 'number') {
                return a;
            }
            if (typeof a === 'number') {
                return typeGetValue(a);
            }
            if (typeof a === 'number') {
                return typeGetValue(a);
            }
            if (typeof a === 'number') {
                return typeGetValue(a);
            }
            if (typeof a === 'number') {
                return a;
            }
            if (typeof a === 'number') {
                return typeGetValue(a);
            }
            if (typeof a === 'number') {
                return a;
            }
            return NaN;
        }
        b1(a) {
            if (typeof a === 'number') {
                return true;
            }
            if (typeof a === 'number') {
                return true;
            }
            if (typeof a === 'number') {
                return true;
            }
            if (typeof a === 'number') {
                return true;
            }
            if (typeof a === 'number') {
                return true;
            }
            if (typeof a === 'number') {
                return true;
            }
            if (typeof a === 'number') {
                return true;
            }
            return false;
        }
        w(a) {
            let b = this.f;
            if (this.bs) {
                b = this.e;
            }
            let c = new List$1(TreemapNodeFrame.$, 0);
            for (let d = 0; d < b.e.count; d++) {
                let e = b.e._inner[d];
                let f = b.a(e);
                if (a.x >= f.ae.left && a.x <= f.ae.right && a.y >= f.ae.top && a.y <= f.ae.bottom) {
                    c.add(f);
                }
            }
            c.aa((g, h) => {
                let i = this.e0(h);
                let j = this.e0(g);
                if (i > j) {
                    return 1;
                }
                else if (j > i) {
                    return -1;
                }
                return 0;
            });
            for (let g of fromEnum(c)) {
                if (g.e.b.count > 0) {
                    return g;
                }
            }
            return null;
        }
        e0(a) {
            let b = a.e;
            let c = 0;
            while (b.n != null) {
                if (this.am == null) {
                    break;
                }
                if (this.am.b.containsKey(b.n)) {
                    c++;
                    b = this.am.b.item(b.n);
                }
                else {
                    break;
                }
            }
            return c;
        }
        x(a) {
            let b = this.f;
            if (this.bs) {
                b = this.e;
            }
            let c = new List$1(TreemapNodeFrame.$, 0);
            for (let d = 0; d < b.e.count; d++) {
                let e = b.e._inner[d];
                let f = b.a(e);
                if (a.x >= f.ae.left && a.x <= f.ae.right && a.y >= f.ae.top && a.y <= f.ae.bottom) {
                    c.add(f);
                }
            }
            c.aa((g, h) => {
                let i = this.e0(h);
                let j = this.e0(g);
                if (i > j) {
                    return 1;
                }
                else if (j > i) {
                    return -1;
                }
                return 0;
            });
            if (this.i == 2) {
                for (let g of fromEnum(c)) {
                    if (g.e.b.count > 0) {
                        if (this.b2(a, g)) {
                            return g;
                        }
                    }
                }
            }
            for (let h of fromEnum(c)) {
                return h;
            }
            return null;
        }
        i3() {
            this.de = 0;
            this.ay.w();
            this.ay.v();
            this.aq.ay();
        }
        get b5() {
            return this.e3 > 0;
        }
        provideContainer(a) {
            this.aq.au(a);
            this.ay.u(a);
            this.az.u(a);
        }
        h9() {
            this.aq.ap();
        }
        get z() {
            return this.v;
        }
        set z(a) {
            let b = this.v;
            this.v = a;
            if (b != a) {
                this.ib(b);
                this.h8(a);
            }
        }
        h8(a) {
            if (a != null) {
                if (this.nodePointerEnter != null) {
                    this.nodePointerEnter(this, this.aa(a));
                }
            }
        }
        ib(a) {
            if (a != null) {
                if (this.nodePointerLeave != null) {
                    this.nodePointerLeave(this, this.aa(a));
                }
            }
        }
        aa(a) {
            let b = new TreemapNodePointerEventArgs();
            if (a != null) {
                b.customValue = a.e.j;
                b.item = a.e.k;
                b.position = this.j8;
                b.sum = a.e.e();
                b.value = a.e.h;
                b.label = a.e.m;
                b.isOverHeader = this.b2(this.j8, a);
                if (a.e.n != null && this.am != null && this.am.b.containsKey(a.e.n)) {
                    let c = this.am.b.item(a.e.n);
                    b.parentItem = c.k;
                    b.parentSum = c.e();
                    b.parentValue = c.h;
                    b.parentLabel = c.m;
                }
            }
            b.isRightButton = false;
            return b;
        }
        get e5() {
            return this.e4;
        }
        set e5(a) {
            let b = this.e4;
            this.e4 = a;
            if (b != this.e4) {
                this.it("FocusItem", b, a);
            }
        }
        io(a) {
            this.i8(a);
            if (this.nodePointerPressed != null && this.z != null) {
                let b = this.aa(this.z);
                this.nodePointerPressed(this, b);
            }
        }
        is(a) {
            this.i8(a);
            let b = false;
            if (this.nodePointerReleased != null && this.z != null) {
                let c = this.aa(this.z);
                this.nodePointerReleased(this, c);
                b = c.isHandled;
            }
            if (!b) {
                if (this.y != null) {
                    if (this.y.e == this.ao && this.b2(a, this.y)) {
                        this.ao = null;
                        this.bw = true;
                        this.aq.a2();
                        this.i5(null);
                        return;
                    }
                    this.ao = this.y.e;
                    this.i5(this.y.e);
                    this.bw = true;
                    this.aq.a2();
                }
                else {
                    this.ao = null;
                    this.bw = true;
                    this.i5(null);
                    this.aq.a2();
                }
            }
        }
        i5(a) {
            try {
                this.bq = true;
                if (a == null) {
                    this.e5 = null;
                }
                else {
                    this.e5 = a.k;
                }
                this.bq = false;
            }
            finally {
                this.bq = false;
            }
        }
        b2(a, b) {
            let c = this.f;
            if (this.bs) {
                c = this.e;
            }
            if (b == null) {
                return false;
            }
            let d = b;
            if (a.x >= d.ae.left && a.x <= d.ae.right && a.y >= d.ae.top && a.y <= d.ae.bottom) {
                if (a.y - d.ae.top <= d.j) {
                    return true;
                }
            }
            return false;
        }
        ii(source_, a, b, c) {
            if (source_.dataView && source_.dataSource) {
                source_ = source_.dataView();
            }
            ;
            let d = null;
            if (this.b6(source_)) {
                d = this.a2;
            }
            if (this.bu(source_)) {
                d = this.a3;
            }
            if (d == null) {
                return;
            }
            d.handleCollectionChanged(new NotifyCollectionChangedEventArgs(2, 2, c, b, a));
        }
        ie(source_) {
            if (source_.dataView && source_.dataSource) {
                source_ = source_.dataView();
            }
            ;
            let a = null;
            if (this.b6(source_)) {
                a = this.a2;
            }
            if (this.bu(source_)) {
                a = this.a3;
            }
            if (a == null) {
                return;
            }
            a.handleCollectionChanged(new NotifyCollectionChangedEventArgs(0, 4));
        }
        b6(a) {
            return Treemap.b7(a, this.dataSource);
        }
        bu(a) {
            return Treemap.b7(a, this.highlightedDataSource);
        }
        static b7(a, b) {
            return a == b;
        }
        ig(source_, a, b) {
            if (source_.dataView && source_.dataSource) {
                source_ = source_.dataView();
            }
            ;
            let c = null;
            if (this.b6(source_)) {
                c = this.a2;
            }
            if (this.bu(source_)) {
                c = this.a3;
            }
            if (c == null) {
                return;
            }
            c.handleCollectionChanged(new NotifyCollectionChangedEventArgs(1, 0, b, a));
        }
        ih(source_, a, b) {
            if (source_.dataView && source_.dataSource) {
                source_ = source_.dataView();
            }
            ;
            let c = null;
            if (this.b6(source_)) {
                c = this.a2;
            }
            if (this.bu(source_)) {
                c = this.a3;
            }
            if (c == null) {
                return;
            }
            c.handleCollectionChanged(new NotifyCollectionChangedEventArgs(1, 1, b, a));
        }
        ip(a) {
            this.i8(a);
            this.id(this.z, a, false, false);
        }
        iq(a) {
            this.id(this.z, a, false, true);
            this.i8(a);
            this.y = null;
            this.z = null;
            if (!this.bs) {
                this.bw = true;
                this.aq.a2();
            }
        }
        i8(a) {
            this.j8 = { $type: Point_$type, x: a.x, y: a.y };
            this.y = this.w(a);
            this.z = this.x(a);
            this.i6(a);
        }
        i2(a) {
            this.ir(a);
        }
        ir(a) {
            this.i8(a);
            this.id(this.z, a, false, false);
            if (this.z != null) {
                if (this.nodePointerOver != null) {
                    this.nodePointerOver(this, this.aa(this.z));
                }
            }
        }
        i6(a) {
            if (!this.bs) {
                if (this.b2(a, this.y)) {
                    let b = this.ap;
                    this.ap = this.y.e;
                    if (this.ap != b) {
                        this.bw = true;
                        this.aq.a2();
                    }
                }
                else {
                    let c = this.ap;
                    this.ap = null;
                    if (this.ap != c) {
                        this.bw = true;
                        this.aq.a2();
                    }
                }
            }
        }
        iu(a) {
            this.i8(a);
            if (this.nodePointerPressed != null && this.z != null) {
                let b = this.aa(this.z);
                b.isRightButton = true;
                this.nodePointerPressed(this, b);
            }
        }
        iv(a) {
            this.i8(a);
            let b = false;
            if (this.nodePointerReleased != null && this.z != null) {
                let c = this.aa(this.z);
                c.isRightButton = true;
                this.nodePointerReleased(this, c);
                b = c.isHandled;
            }
            if (!b) {
                this.y = null;
                this.ao = null;
                this.i5(null);
                this.bw = true;
                this.aq.a2();
            }
        }
        iw(a) {
            this.bw = true;
            this.aq.a2();
        }
    }
    Treemap.$t = /*@__PURE__*/ markType(Treemap, 'Treemap', Base.$, [INotifyPropertyChanged_$type]);
    return Treemap;
})();
/**
 * @hidden
 */
export let TreemapNodeStyle = /*@__PURE__*/ (() => {
    class TreemapNodeStyle extends Base {
        constructor() {
            super(...arguments);
            this.a = null;
            this.e = new HashSet$1(String_$type, 0);
            this.a9 = null;
            this.a8 = null;
            this.bb = null;
            this.ad = null;
            this.bd = null;
            this.ba = null;
            this.i = DeviceUtils.g(5);
            this.k = DeviceUtils.g(3);
            this.j = DeviceUtils.g(5);
            this.h = DeviceUtils.g(3);
            this.m = DeviceUtils.g(5);
            this.o = DeviceUtils.g(3);
            this.n = DeviceUtils.g(5);
            this.l = DeviceUtils.g(3);
            this.g = NaN;
            this.a5 = 1;
            this.bl = 1;
            this.a7 = null;
            this.bc = null;
            this.q = NaN;
            this.p = NaN;
            this.f = NaN;
            this.b = false;
            this.propertyChanged = null;
        }
        a3(a, b, c) {
            if (this.propertyChanged != null) {
                this.propertyChanged(this, new PropertyChangedEventArgs(a));
            }
            this.a4(a, b, c);
        }
        a2() {
            this.e.clear();
        }
        d(a) {
            return this.e.contains(a);
        }
        a4(a, b, c) {
            if (!this.e.contains(a)) {
                this.e.add_1(a);
            }
            if (this.a != null) {
                this.a.iw(this);
            }
        }
        get bg() {
            return this.a9;
        }
        set bg(a) {
            let b = this.a9;
            this.a9 = a;
            if (b != this.a9) {
                this.a3("HeaderHoverBackground", b, a);
            }
        }
        get bf() {
            return this.a8;
        }
        set bf(a) {
            let b = this.a8;
            this.a8 = a;
            if (b != this.a8) {
                this.a3("HeaderBackground", b, a);
            }
        }
        get bi() {
            return this.bb;
        }
        set bi(a) {
            let b = this.bb;
            this.bb = a;
            if (b != this.bb) {
                this.a3("HeaderTextColor", b, a);
            }
        }
        get aq() {
            return this.ad;
        }
        set aq(a) {
            let b = this.ad;
            this.ad = a;
            if (b != this.ad) {
                this.a3("Label", b, a);
            }
        }
        get bk() {
            return this.bd;
        }
        set bk(a) {
            let b = this.bd;
            this.bd = a;
            if (b != this.bd) {
                this.a3("TextColor", b, a);
            }
        }
        get bh() {
            return this.ba;
        }
        set bh(a) {
            let b = this.ba;
            this.ba = a;
            if (b != this.ba) {
                this.a3("HeaderHoverTextColor", b, a);
            }
        }
        get u() {
            return this.i;
        }
        set u(a) {
            let b = this.i;
            this.i = a;
            if (b != this.i) {
                this.a3("HeaderLabelLeftMargin", b, a);
            }
        }
        get w() {
            return this.k;
        }
        set w(a) {
            let b = this.k;
            this.k = a;
            if (b != this.k) {
                this.a3("HeaderLabelTopMargin", b, a);
            }
        }
        get v() {
            return this.j;
        }
        set v(a) {
            let b = this.j;
            this.j = a;
            if (b != this.j) {
                this.a3("HeaderLabelRightMargin", b, a);
            }
        }
        get t() {
            return this.h;
        }
        set t(a) {
            let b = this.h;
            this.h = a;
            if (b != this.h) {
                this.a3("HeaderLabelBottomMargin", b, a);
            }
        }
        get y() {
            return this.m;
        }
        set y(a) {
            let b = this.m;
            this.m = a;
            if (b != this.m) {
                this.a3("LabelLeftMargin", b, a);
            }
        }
        get aa() {
            return this.o;
        }
        set aa(a) {
            let b = this.o;
            this.o = a;
            if (b != this.o) {
                this.a3("LabelTopMargin", b, a);
            }
        }
        get z() {
            return this.n;
        }
        set z(a) {
            let b = this.n;
            this.n = a;
            if (b != this.n) {
                this.a3("LabelRightMargin", b, a);
            }
        }
        get x() {
            return this.l;
        }
        set x(a) {
            let b = this.l;
            this.l = a;
            if (b != this.l) {
                this.a3("LabelBottomMargin", b, a);
            }
        }
        get s() {
            return this.g;
        }
        set s(a) {
            let b = this.g;
            this.g = a;
            if (b != this.g) {
                this.a3("HeaderHeight", b, a);
            }
        }
        get a6() {
            return this.a5;
        }
        set a6(a) {
            let b = this.a5;
            this.a5 = a;
            if (b != this.a5) {
                this.a3("LabelHorizontalAlignment", enumGetBox(HorizontalAlignment_$type, b), enumGetBox(HorizontalAlignment_$type, a));
            }
        }
        get bm() {
            return this.bl;
        }
        set bm(a) {
            let b = this.bl;
            this.bl = a;
            if (b != this.bl) {
                this.a3("LabelVerticalAlignment", enumGetBox(VerticalAlignment_$type, b), enumGetBox(VerticalAlignment_$type, a));
            }
        }
        get be() {
            return this.a7;
        }
        set be(a) {
            let b = this.a7;
            this.a7 = a;
            if (b != this.a7) {
                this.a3("Fill", b, a);
            }
        }
        get bj() {
            return this.bc;
        }
        set bj(a) {
            let b = this.bc;
            this.bc = a;
            if (b != this.bc) {
                this.a3("Outline", b, a);
            }
        }
        get ac() {
            return this.q;
        }
        set ac(a) {
            let b = this.q;
            this.q = a;
            if (b != this.q) {
                this.a3("StrokeThickness", b, a);
            }
        }
        get ab() {
            return this.p;
        }
        set ab(a) {
            let b = this.p;
            this.p = a;
            if (b != this.p) {
                this.a3("Opacity", b, a);
            }
        }
        get r() {
            return this.f;
        }
        set r(a) {
            let b = this.f;
            this.f = a;
            if (b != this.f) {
                this.a3("FadeOpacity", b, a);
            }
        }
        get c() {
            return this.b;
        }
        set c(a) {
            let b = this.b;
            this.b = a;
            if (b != this.b) {
                this.a3("HighlightingHandled", b, a);
            }
        }
    }
    TreemapNodeStyle.$t = /*@__PURE__*/ markType(TreemapNodeStyle, 'TreemapNodeStyle', Base.$, [INotifyPropertyChanged_$type]);
    return TreemapNodeStyle;
})();
/**
 * @hidden
 */
export let TreemapNodeStyleMapping = /*@__PURE__*/ (() => {
    class TreemapNodeStyleMapping extends TreemapNodeStyle {
        constructor() {
            super(...arguments);
            this.bn = 0;
            this.bx = null;
            this.bs = NaN;
            this.br = NaN;
            this.bv = null;
            this.bp = 1;
        }
        get bo() {
            return this.bn;
        }
        set bo(a) {
            let b = this.bn;
            this.bn = a;
            if (b != this.bn) {
                this.a3("TargetType", enumGetBox(TreemapNodeStyleMappingTargetType_$type, b), enumGetBox(TreemapNodeStyleMappingTargetType_$type, a));
            }
        }
        get b1() {
            return this.bx;
        }
        set b1(a) {
            let b = this.bx;
            this.bx = a;
            if (b != this.bx) {
                this.a3("Name", b, a);
            }
        }
        get bu() {
            return this.bs;
        }
        set bu(a) {
            let b = this.bs;
            this.bs = a;
            if (b != this.bs) {
                this.a3("MinimumValue", b, a);
            }
        }
        get bt() {
            return this.br;
        }
        set bt(a) {
            let b = this.br;
            this.br = a;
            if (b != this.br) {
                this.a3("MaximumValue", b, a);
            }
        }
        get bw() {
            return this.bv;
        }
        set bw(a) {
            let b = this.bv;
            this.bv = a;
            if (b != this.bv) {
                this.a3("Value", b, a);
            }
        }
        get bq() {
            return this.bp;
        }
        set bq(a) {
            let b = this.bp;
            this.bp = a;
            if (b != this.bp) {
                this.a3("MappingMode", enumGetBox(TreemapValueMappingMode_$type, b), enumGetBox(TreemapValueMappingMode_$type, a));
            }
        }
    }
    TreemapNodeStyleMapping.$t = /*@__PURE__*/ markType(TreemapNodeStyleMapping, 'TreemapNodeStyleMapping', TreemapNodeStyle.$);
    return TreemapNodeStyleMapping;
})();
/**
 * @hidden
 */
export let TreemapNodeStyleMappingCollection = /*@__PURE__*/ (() => {
    class TreemapNodeStyleMappingCollection extends ObservableCollection$1 {
        constructor() {
            super(TreemapNodeStyleMapping.$, 0);
            this.collectionResetting = null;
        }
        p() {
            if (this.collectionResetting != null) {
                this.collectionResetting(this, null);
            }
            super.p();
        }
    }
    TreemapNodeStyleMappingCollection.$t = /*@__PURE__*/ markType(TreemapNodeStyleMappingCollection, 'TreemapNodeStyleMappingCollection', /*@__PURE__*/ ObservableCollection$1.$.specialize(TreemapNodeStyleMapping.$));
    return TreemapNodeStyleMappingCollection;
})();
/**
 * @hidden
 */
export let TreemapNodeStylingEventArgs = /*@__PURE__*/ (() => {
    class TreemapNodeStylingEventArgs extends EventArgs {
        constructor() {
            super(...arguments);
            this._value = 0;
            this._sum = 0;
            this._customValue = null;
            this._item = null;
            this._parentItem = null;
            this._label = null;
            this._parentValue = 0;
            this._parentLabel = null;
            this._parentSum = 0;
            this._isParent = false;
            this._style = null;
            this._highlightingInfo = null;
            this._highlightingHandled = false;
            this._isHighlightInProgress = false;
            this._totalHighlightProgress = 0;
        }
        get value() {
            return this._value;
        }
        set value(a) {
            this._value = a;
        }
        get sum() {
            return this._sum;
        }
        set sum(a) {
            this._sum = a;
        }
        get customValue() {
            return this._customValue;
        }
        set customValue(a) {
            this._customValue = a;
        }
        get item() {
            return this._item;
        }
        set item(a) {
            this._item = a;
        }
        get parentItem() {
            return this._parentItem;
        }
        set parentItem(a) {
            this._parentItem = a;
        }
        get label() {
            return this._label;
        }
        set label(a) {
            this._label = a;
        }
        get parentValue() {
            return this._parentValue;
        }
        set parentValue(a) {
            this._parentValue = a;
        }
        get parentLabel() {
            return this._parentLabel;
        }
        set parentLabel(a) {
            this._parentLabel = a;
        }
        get parentSum() {
            return this._parentSum;
        }
        set parentSum(a) {
            this._parentSum = a;
        }
        get isParent() {
            return this._isParent;
        }
        set isParent(a) {
            this._isParent = a;
        }
        get style() {
            return this._style;
        }
        set style(a) {
            this._style = a;
        }
        get highlightingInfo() {
            return this._highlightingInfo;
        }
        set highlightingInfo(a) {
            this._highlightingInfo = a;
        }
        get highlightingHandled() {
            return this._highlightingHandled;
        }
        set highlightingHandled(a) {
            this._highlightingHandled = a;
        }
        get isHighlightInProgress() {
            return this._isHighlightInProgress;
        }
        set isHighlightInProgress(a) {
            this._isHighlightInProgress = a;
        }
        get totalHighlightProgress() {
            return this._totalHighlightProgress;
        }
        set totalHighlightProgress(a) {
            this._totalHighlightProgress = a;
        }
    }
    TreemapNodeStylingEventArgs.$t = /*@__PURE__*/ markType(TreemapNodeStylingEventArgs, 'TreemapNodeStylingEventArgs', EventArgs.$);
    return TreemapNodeStylingEventArgs;
})();
/**
 * @hidden
 */
export let TreemapFrame = /*@__PURE__*/ (() => {
    class TreemapFrame extends Base {
        constructor() {
            super();
            this.d = null;
            this.e = null;
            this.e = new List$1(String_$type, 0);
            this.d = new Dictionary$2(String_$type, TreemapNodeFrame.$, 0);
        }
        h(a, b, c) {
            this.g();
            this.k(a, b, c);
            this.j(a, b, c);
            this.i(a, b, c);
        }
        i(a, b, c) {
            for (let d = 0; d < b.e.count; d++) {
                let e = b.e._inner[d];
                if (c.d.containsKey(e)) {
                    let f = TreemapNodeFrame.b(a, b.d.item(e), c.d.item(e));
                    this.d.addItem(f.w, f);
                    this.e.add(f.w);
                }
            }
        }
        j(a, b, c) {
            for (let d = 0; d < c.e.count; d++) {
                let e = c.e._inner[d];
                if (!b.d.containsKey(e)) {
                    let f = TreemapNodeFrame.c(a, c.d.item(e));
                    this.d.addItem(f.w, f);
                    this.e.add(f.w);
                }
            }
        }
        k(a, b, c) {
            for (let d = 0; d < b.e.count; d++) {
                let e = b.e._inner[d];
                if (!c.d.containsKey(e)) {
                    let f = TreemapNodeFrame.d(a, b.d.item(e));
                    this.d.addItem(f.w, f);
                    this.e.add(f.w);
                }
            }
        }
        m(a, b) {
            let c;
            if (!((() => { let d = this.d.tryGetValue(a.l, c); c = d.p1; return d.ret; })())) {
                c = new TreemapNodeFrame();
                c.w = a.l;
                c.e = a;
                this.d.item(c.w, c);
                this.e.add(c.w);
            }
            c.ae = b;
            let d = c.ae;
            if (!isNaN_(a.f)) {
                let e = b.height * a.f;
                let f = b.height - e;
                d = new Rect(0, b.x, b.y + f, b.width, e);
            }
            c.af = d;
        }
        n(a, b) {
            this.d.item(a.l).g = b;
        }
        b(a) {
            if (!this.d.containsKey(a.l)) {
                return false;
            }
            return this.d.item(a.l).g;
        }
        o(a) {
            let b;
            if (!((() => { let c = this.d.tryGetValue(a.l, b); b = c.p1; return c.ret; })())) {
                return Rect.empty;
            }
            return b.ae;
        }
        l(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) {
            let y;
            if (!((() => { let z = this.d.tryGetValue(a.l, y); y = z.p1; return z.ret; })())) {
                return;
            }
            y.x = b;
            y.aa = c;
            y.ad = d;
            y.v = g;
            y.u = h;
            y.ab = e;
            y.a = j;
            y.o = k;
            y.j = l;
            y.ac = f;
            y.l = m;
            y.n = n;
            y.m = o;
            y.k = p;
            y.r = q;
            y.t = r;
            y.s = s;
            y.q = t;
            y.z = u;
            y.ag = v;
            y.h = i;
            y.p = w;
            y.i = x;
        }
        g() {
            this.e.clear();
            this.d.clear();
        }
        c(a) {
            return this.d.containsKey(a);
        }
        a(a) {
            return this.d.item(a);
        }
        f(a, b, c) {
            let d;
            if (!((() => { let e = this.d.tryGetValue(a.l, d); d = e.p1; return e.ret; })())) {
                return;
            }
            d.y(a, b, c);
        }
    }
    TreemapFrame.$t = /*@__PURE__*/ markType(TreemapFrame, 'TreemapFrame');
    return TreemapFrame;
})();
/**
 * @hidden
 */
export let TreemapNodeFrame = /*@__PURE__*/ (() => {
    class TreemapNodeFrame extends Base {
        constructor() {
            super();
            this.ae = null;
            this.af = null;
            this.p = 0;
            this.i = 0;
            this.e = null;
            this.w = null;
            this.x = null;
            this.aa = null;
            this.ad = null;
            this.v = 0;
            this.u = 0;
            this.h = 0;
            this.l = 0;
            this.n = 0;
            this.m = 0;
            this.k = 0;
            this.r = 0;
            this.t = 0;
            this.s = 0;
            this.q = 0;
            this.ac = null;
            this.ab = null;
            this.a = 0;
            this.o = 0;
            this.j = 0;
            this.z = 0;
            this.ag = 0;
            this.g = false;
            this.ae = Rect.empty;
            this.u = 1;
            this.h = 0.3;
        }
        static b(a, b, c) {
            let d = new TreemapNodeFrame();
            d.e = c.e;
            d.w = c.w;
            d.x = c.x;
            let e = c.ae;
            if (e.isEmpty) {
                e = new Rect(0, 0, 0, 0, 0);
            }
            let f = b.ae;
            if (f.isEmpty) {
                f = new Rect(0, 0, 0, 0, 0);
            }
            d.ae = new Rect(0, f.left + (e.left - f.left) * a, f.top + (e.top - f.top) * a, f.width + (e.width - f.width) * a, f.height + (e.height - f.height) * a);
            let g = c.af;
            if (g.isEmpty) {
                g = new Rect(0, 0, 0, 0, 0);
            }
            let h = b.af;
            if (h.isEmpty) {
                h = new Rect(0, 0, 0, 0, 0);
            }
            d.af = new Rect(0, h.left + (g.left - h.left) * a, h.top + (g.top - h.top) * a, h.width + (g.width - h.width) * a, h.height + (g.height - h.height) * a);
            d.aa = BrushUtil.n(b.aa, a, c.aa, 0);
            d.ad = BrushUtil.n(b.ad, a, c.ad, 0);
            d.ab = BrushUtil.n(b.ab, a, c.ab, 0);
            d.ac = BrushUtil.n(b.ac, a, c.ac, 0);
            d.v = b.v + (c.v - b.v) * a;
            d.l = b.l + (c.l - b.l) * a;
            d.n = b.n + (c.n - b.n) * a;
            d.m = b.m + (c.m - b.m) * a;
            d.k = b.k + (c.k - b.k) * a;
            d.r = b.r + (c.r - b.r) * a;
            d.t = b.t + (c.t - b.t) * a;
            d.s = b.s + (c.s - b.s) * a;
            d.q = b.q + (c.q - b.q) * a;
            d.o = b.o + (c.o - b.o) * a;
            d.j = b.j + (c.j - b.j) * a;
            d.z = a < 0.5 ? b.z : c.z;
            d.ag = a < 0.5 ? b.ag : c.ag;
            d.a = a < 0.5 ? b.a : c.a;
            d.u = b.u + (c.u - b.u) * a;
            d.h = b.h + (c.h - b.h) * a;
            d.p = b.p + (c.p - b.p) * a;
            d.i = b.i + (c.i - b.i) * a;
            return d;
        }
        static d(a, b) {
            let c = new Rect(0, 0, 0, 0, 0);
            let d = new TreemapNodeFrame();
            d.e = b.e;
            d.x = b.x;
            d.w = b.w;
            let e = b.ae;
            if (e.isEmpty) {
                e = new Rect(0, 0, 0, 0, 0);
            }
            d.ae = new Rect(0, e.left + (c.left - e.left) * a, e.top + (c.top - e.top) * a, e.width + (c.width - e.width) * a, e.height + (c.height - e.height) * a);
            let f = b.af;
            if (f.isEmpty) {
                f = new Rect(0, 0, 0, 0, 0);
            }
            d.af = new Rect(0, f.left + (c.left - f.left) * a, f.top + (c.top - f.top) * a, f.width + (c.width - f.width) * a, f.height + (c.height - f.height) * a);
            d.aa = BrushUtil.n(b.aa, a, null, 0);
            d.ad = BrushUtil.n(b.ad, a, null, 0);
            d.ab = BrushUtil.n(b.ab, a, null, 0);
            d.ac = BrushUtil.n(b.ac, a, null, 0);
            d.v = b.v + (0 - b.v) * a;
            d.l = b.l + (0 - b.l) * a;
            d.n = b.n + (0 - b.n) * a;
            d.m = b.m + (0 - b.m) * a;
            d.k = b.k + (0 - b.k) * a;
            d.r = b.r + (0 - b.r) * a;
            d.t = b.t + (0 - b.t) * a;
            d.s = b.s + (0 - b.s) * a;
            d.q = b.q + (0 - b.q) * a;
            d.o = b.o + (0 - b.o) * a;
            d.j = b.j + (0 - b.j) * a;
            d.z = b.z;
            d.ag = b.ag;
            d.a = b.a;
            d.u = b.u + (0 - b.u) * a;
            d.h = b.h + (0 - b.h) * a;
            d.p = b.p + (0 - b.p) * a;
            d.i = b.i + (0 - b.i) * a;
            return d;
        }
        static c(a, b) {
            let c = new Rect(0, 0, 0, 0, 0);
            let d = new TreemapNodeFrame();
            d.e = b.e;
            d.x = b.x;
            d.w = b.w;
            let e = b.ae;
            if (e.isEmpty) {
                e = new Rect(0, 0, 0, 0, 0);
            }
            d.ae = new Rect(0, c.left + (e.left - c.left) * a, c.top + (e.top - c.top) * a, c.width + (e.width - c.width) * a, c.height + (e.height - c.height) * a);
            let f = b.af;
            if (f.isEmpty) {
                f = new Rect(0, 0, 0, 0, 0);
            }
            d.af = new Rect(0, c.left + (f.left - c.left) * a, c.top + (f.top - c.top) * a, c.width + (f.width - c.width) * a, c.height + (f.height - c.height) * a);
            d.aa = BrushUtil.n(null, a, b.aa, 0);
            d.ad = BrushUtil.n(null, a, b.ad, 0);
            d.ab = BrushUtil.n(null, a, b.ab, 0);
            d.ac = BrushUtil.n(null, a, b.ac, 0);
            d.v = 0 + (b.v - 0) * a;
            d.l = 0 + (b.l - 0) * a;
            d.n = 0 + (b.n - 0) * a;
            d.m = 0 + (b.m - 0) * a;
            d.k = 0 + (b.k - 0) * a;
            d.r = 0 + (b.r - 0) * a;
            d.t = 0 + (b.t - 0) * a;
            d.s = 0 + (b.s - 0) * a;
            d.q = 0 + (b.q - 0) * a;
            d.o = 0 + (b.o - 0) * a;
            d.j = 0 + (b.j - 0) * a;
            d.z = b.z;
            d.ag = b.ag;
            d.a = b.a;
            d.u = 0 + (b.u - 0) * a;
            d.h = 0 + (b.h - 0) * a;
            d.p = 0 + (b.p - 0) * a;
            d.i = 0 + (b.i - 0) * a;
            return d;
        }
        f(a) {
            let b = new HighlightingInfo();
            b.i = a;
            b.g = this.e.i;
            b.f = this.e.i;
            return b;
        }
        y(a, b, c) {
            let d;
            d = this;
            let e = a.b != null && a.b.count > 0;
            if (b.d("Label")) {
                d.x = b.aq;
            }
            if (b.d("Fill")) {
                d.aa = b.be;
            }
            if (b.d("LabelHorizontalAlignment")) {
                d.z = b.a6;
            }
            if (b.d("Outline")) {
                d.ad = b.bj;
            }
            if (b.d("StrokeThickness")) {
                d.v = b.ac;
            }
            if (b.d("Opacity")) {
                d.u = b.ab;
            }
            if (b.d("FadeOpacity")) {
                d.h = b.r;
            }
            if (b.d("HeaderBackground")) {
                d.ab = b.bf;
            }
            if (e) {
                if (b.d("HeaderTextColor")) {
                    d.ac = b.bi;
                }
                else if (b.d("Fill") || b.d("HeaderBackground")) {
                    d.ac = c(a, d.aa, d.ab);
                }
            }
            else {
                if (b.d("TextColor")) {
                    d.ac = b.bk;
                }
                else if (b.d("Fill") || b.d("HeaderBackground")) {
                    d.ac = c(a, d.aa, d.ab);
                }
            }
            if (b.d("HeaderLabelLeftMargin")) {
                d.l = b.u;
            }
            if (b.d("HeaderLabelTopMargin")) {
                d.n = b.w;
            }
            if (b.d("HeaderLabelRightMargin")) {
                d.m = b.v;
            }
            if (b.d("HeaderLabelBottomMargin")) {
                d.k = b.t;
            }
            if (b.d("LabelLeftMargin")) {
                d.r = b.y;
            }
            if (b.d("LabelTopMargin")) {
                d.t = b.aa;
            }
            if (b.d("LabelRightMargin")) {
                d.s = b.z;
            }
            if (b.d("LabelBottomMargin")) {
                d.q = b.x;
            }
        }
    }
    TreemapNodeFrame.$t = /*@__PURE__*/ markType(TreemapNodeFrame, 'TreemapNodeFrame');
    return TreemapNodeFrame;
})();