UNPKG

igniteui-angular-charts

Version:

Ignite UI Angular charting components for building rich data visualizations for modern web apps.

873 lines (872 loc) 32.7 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 { FinancialSeries } from "./FinancialSeries"; import { ITrendLineSeries_$type } from "./ITrendLineSeries"; import { IndicatorDisplayType_$type } from "./IndicatorDisplayType"; import { DependencyProperty } from "igniteui-angular-core"; import { TrendLineType_$type } from "igniteui-angular-core"; import { Brush } from "igniteui-angular-core"; import { PenLineCap_$type } from "igniteui-angular-core"; import { DoubleCollection } from "igniteui-angular-core"; import { List$1 } from "igniteui-angular-core"; import { AxisRange } from "./AxisRange"; import { CategoryFrame } from "./CategoryFrame"; import { Number_$type, typeCast, enumGetBox, EnumUtil, runOn, markType, markDep } from "igniteui-angular-core"; import { Rect } from "igniteui-angular-core"; import { ScalerParams } from "./ScalerParams"; import { ISortingAxis_$type } from "./ISortingAxis"; import { CategoryTrendLineManagerFactory } from "./CategoryTrendLineManagerFactory"; import { FinancialSeriesView } from "./FinancialSeriesView"; import { FinancialBucketCalculator } from "./FinancialBucketCalculator"; import { TrendResolutionParams } from "./TrendResolutionParams"; import { CategorySeries } from "./CategorySeries"; import { NotImplementedException } from "igniteui-angular-core"; import { Path } from "igniteui-angular-core"; import { PropertyMetadata } from "igniteui-angular-core"; import { isNaN_ } from "igniteui-angular-core"; import { PathGeometry } from "igniteui-angular-core"; import { GeometryGroup } from "igniteui-angular-core"; import { Pool$1 } from "igniteui-angular-core"; import { LineGeometry } from "igniteui-angular-core"; import { Defaults } from "./Defaults"; import { Extensions } from "igniteui-angular-core"; import { IndicatorRenderer } from "./IndicatorRenderer"; /** * @hidden */ export let FinancialIndicator = /*@__PURE__*/ (() => { class FinancialIndicator extends FinancialSeries { constructor() { super(); this._indicatorColumn = null; this.aaz = null; this.w9 = new CategoryFrame(3); this.xb = new CategoryFrame(3); this.w7 = new CategoryFrame(3); this.indicatorColumn = new List$1(Number_$type, 0); this.aaz = new AxisRange(-100, 100); } get_e7() { return true; } cs() { return new FinancialIndicatorView(this); } q0(a) { super.q0(a); this.aa0 = a; } abd(a) { if (this.xo != null && !this.xo.c1()) { this.rq(true); } } aa5(a, b, c) { if (isNaN_(b.x) || isNaN_(b.y)) { return false; } let d = this.xo; let e = 0; if (d != null) { e = d.e6(d.me); } if ((a.y >= e && a.y <= b.y) || (a.y <= e && a.y >= b.y)) { return true; } return false; } b2() { if (this.b3 == 0) { return 1; } else { return super.b2(); } } wm(a) { if (this.w5 == null || this.xo == null) { return Rect.empty; } let b = this.v6(a); let c = this.cv.by; let d = this.cv.bx; let e = this.getEffectiveViewport1(this.cv); let f = new ScalerParams(0, c, d, this.xo.ch, e); f.b = this.ix(); let g = this.an(this.w5, this.w7.f, this.y2(this.cv), this.y4(this.cv), a, true); if (g == null) { return Rect.empty; } let h = g[0]; let i = g[1]; let j = Math.abs(b.x - h[0]); let k = Math.abs(b.x - i[0]); let l = this.xo.el(this.xo.me, f); let m = 1; if (j < k) { let n = h[0] - 0.5 * m; let o = h[1]; let p = l; return new Rect(0, n, Math.min(o, p), m, Math.max(o, p) - Math.min(o, p)); } else { let q = i[0] - 0.5 * m; let r = i[1]; let s = l; return new Rect(0, q, Math.min(r, s), m, Math.max(r, s) - Math.min(r, s)); } } gv(a, b) { let c = this.wb(this.wg(a), true, false); if (this.aa2 == 1) { if (this.aa5(a, c, b)) { return true; } } if (this.aa2 == 1 || this.aa2 == 0) { if (this.gu(a, b)) { return true; } } if (this.aa2 == 2) { if (this.gy(a, b)) { return true; } } return false; } pa(a, b, c, d) { super.pa(a, b, c, d); if (this.w5 != null && typeCast(ISortingAxis_$type, this.w5) !== null) { this.w5.i$i(); } if (this.aa0.ca) { this.aa0.b8.g$e(a, b, c, d); } if (d != null && this.yh.containsKey(d)) { let e = this.yh.tryGetValue(d, d); d = e.p1; } if (this.w5 != null && typeCast(ISortingAxis_$type, this.w5) !== null) { a = 4; b = 0; c = this.dn.count; } switch (a) { case 3: if (this.aa4(b, c, d)) { this.abf(b, c, d); this.abd(true); } break; case 2: if (this.aa4(b, this.dn.count - b, d)) { this.abf(b, this.dn.count - b, d); this.abd(true); } break; case 1: if (this.aa4(b, this.dn.count - b, d)) { let f = new Array(c); for (let g = 0; g < c; g++) { f[g] = 0; } this.indicatorColumn.s(b, f); this.abf(b, this.dn.count - b, d); this.abd(true); } break; case 0: if (this.aa4(b, this.dn.count - b, d)) { this.indicatorColumn.v(b, c); this.abf(b, this.dn.count - b, d); this.abd(true); } break; case 4: if (this.aa4(b, this.dn.count - b, d)) { this.indicatorColumn = new List$1(Number_$type, 2, this.dn.count); let h = new Array(c); for (let i = 0; i < c; i++) { h[i] = 0; } this.indicatorColumn.s(0, h); this.abf(b, this.dn.count - b, d); this.abd(true); } break; } } get_aa1() { return 0; } get aa1() { return this.get_aa1(); } get abq() { return this.c(FinancialIndicator.abg); } set abq(a) { this.h(FinancialIndicator.abg, a); } aba() { return -1; } get indicatorColumn() { return this._indicatorColumn; } set indicatorColumn(a) { this._indicatorColumn = a; } q8(a, b, c, d) { switch (b) { case "XAxis": this.aa0.cg(); break; case "TrendLineType": let e = EnumUtil.getEnumValue(TrendLineType_$type, d); if (e != 0) { this.aa0.b8 = CategoryTrendLineManagerFactory.a(this.aa0.b8, this.w5, this.su, this, this.dr); } break; } super.q8(a, b, c, d); if (this.aa0.ca && this.aa0.b8.g$b(a, b, c, d)) { this.rq(false); let f = typeCast(FinancialIndicatorView.$, this.cu); if (f != null && f.ca) { f.b8.g$b(a, b, c, d); } this.qk(); } switch (b) { case "FastItemsSource": if (this.dn != null) { this.indicatorColumn = new List$1(Number_$type, 2, this.dn.count); let g = new Array(this.dn.count); for (let h = 0; h < this.dn.count; h++) { g[h] = 0; } this.indicatorColumn.s(0, g); this.abf(0, this.dn.count, null); if (this.xo != null && !this.xo.c1()) { this.xm.b0.e(this.ic); this.rq(this.gf && c != null); } } break; case "TrendLineBrush": this.re(b); break; case FinancialIndicator.$$p[0]: this.o4(true, this.cv); this.sh(); this.rq(false); this.qk(); break; case "OpenColumn": case "HighColumn": case "LowColumn": case "CloseColumn": case "VolumeColumn": if (this.dn != null) { if (this.indicatorColumn.count != this.dn.count) { this.indicatorColumn = new List$1(Number_$type, 2, this.dn.count); let i = new Array(this.dn.count); for (let j = 0; j < this.dn.count; j++) { i[j] = 0; } this.indicatorColumn.s(0, i); } if (this.aa4(0, this.dn.count - 1, b)) { this.abe(); } } break; case "XAxis": if (this.w5 != null && (typeCast(ISortingAxis_$type, this.w5) !== null || typeCast(ISortingAxis_$type, c) !== null)) { this.abe(); } break; case "YAxis": case FinancialIndicator.$$p[1]: this.abe(); this.qk(); break; case "TrendLineType": this.qk(); break; } } i4(a, b, c) { if (this.indicatorColumn == null) { return super.i4(a, b, c); } let d = this.getEffectiveViewport1(this.cv); let e = this.yw(this.cv.by, this.cv.bx, d); let f = new ScalerParams(0, this.cv.by, this.cv.bx, this.w5.ch, d); f.c = this.db.wk; return this.i6(this.indicatorColumn, a, this.w5, f, e, runOn(this, this.yv), b, c); } j9(a, b) { if (this.indicatorColumn == null) { return super.j9(a, b); } return this.ka(a, b, this.w5, runOn(this, this.yv), this.indicatorColumn); } j7(a, b) { if (this.indicatorColumn == null) { return super.j7(a, b); } return this.j8(a, b, this.w5, runOn(this, this.yv), this.indicatorColumn); } get_hc() { return true; } aa4(a, b, c) { if (c == null) { return true; } if (this.aa6(a, b).contains(c)) { return true; } return false; } abf(a, b, c) { this.aa3(a, b); } ay(a) { if (this.dn == null) { return null; } if (a != null && a == this.xo) { return this.aaz; } return null; } gc(a) { let b = this.dn != null ? this.dn.indexOf(a) : -1; let c = this.cv.by; c = c.copy(); let d = this.cv.bx; let e = new Rect(0, 0, 0, 1, 1); let f = this.wk(this.cv); if (b >= 0 && Rect.l_op_Inequality(c, null) && Rect.l_op_Inequality(d, null)) { if (this.w5 != null) { let g = new ScalerParams(0, e, e, this.w5.ch, f); let h = this.w5.el(b, g); if (h < c.left + 0.1 * c.width) { h = h + 0.4 * c.width; } if (h > c.right - 0.1 * c.width) { h = h - 0.4 * c.width; } c.x = h - 0.5 * c.width; } if (this.xo != null && this.indicatorColumn != null && b < this.indicatorColumn.count) { let i = new ScalerParams(0, e, e, this.xo.ch, f); i.b = this.ix(); let j = this.xo.el(this.indicatorColumn._inner[b], i); if (j < c.top + 0.1 * c.height) { j = j + 0.4 * c.height; } if (j > c.bottom - 0.1 * c.height) { j = j - 0.4 * c.height; } c.y = j - 0.5 * c.height; } this.c3.au(this.db, c, true); } return b >= 0; } hd(a, b, c) { let d = super.hd(a, b, c); if (this.indicatorColumn == null || this.indicatorColumn.count == 0) { d = false; } return d; } aab(a, b) { super.aab(a, b); let c = b.by; let d = b.bx; let e = this.getEffectiveViewport1(b); let f = this.w5; let g = this.xo; let h = new ScalerParams(0, c, d, f.ch, e); let i = new ScalerParams(0, c, d, g.ch, e); i.b = this.ix(); let j = this.w5.ag(); let k = j[0]; let l = j[1]; a.f.clear(); a.n.clear(); a.q.clear(); let m = 0; let n = typeCast(ISortingAxis_$type, this.w5); if (n != null && n.i$b.count != this.dn.count) { return; } m = this.yw(c, d, e); let o = this.aba(); if (o == -1) { o = this.trendLinePeriod; } let p = typeCast(FinancialIndicatorView.$, b); if (p.ca) { p.b8.prepareLineCore(a.q, this.trendLineType, this.indicatorColumn, o, (q) => this.w5.el(q, h), (q) => this.xo.el(q, i), ((() => { let $ret = new TrendResolutionParams(); $ret.e = b.b0.b; $ret.f = b.b0.c; $ret.g = b.b0.d; $ret.a = m; $ret.d = this.ic; $ret.i = d; $ret.j = c; $ret.h = e; $ret.b = l; $ret.c = k; return $ret; })())); } let q = this.w5.eo(2, h) - this.w5.eo(1, h); for (let r = b.b0.c; r <= b.b0.d; ++r) { let s; if (n == null) { s = b.b0.getBucket(r); } else { let t = n.i$b._inner[r]; let u = n.i$d(t); let v = this.indicatorColumn._inner[r]; let w = v; let x = u; while (r < b.b0.d) { t = n.i$b._inner[r + 1]; x = n.i$d(t); if (x - u > q) { break; } r++; let y = this.indicatorColumn._inner[r]; v = Math.min(v, y); w = Math.max(w, y); } let z = NaN; if (!isNaN_(u)) { z = this.w5.el(u, h); } s = [z, v, w]; } if (!isNaN_(s[0])) { if (this.w5 != null && typeCast(ISortingAxis_$type, this.w5) !== null) { s[0] = s[0] + m; } else { s[0] = f.el(s[0], h) + m; } s[1] = g.el(s[1], i); if (b.b0.b > 1 || n != null) { s[2] = g.el(s[2], i); } else { s[2] = s[1]; } a.f.add(s); } } return; } o4(a, b) { super.o4(a, b); let c = b; c.cb(a); if (c.ca) { c.b8.g$d(); } } xf() { switch (this.aa2) { case 1: return 1; case 2: return 1; case 0: return 12; } return 1; } aad(a, b) { super.aad(a, b); let c = typeCast(FinancialIndicatorView.$, b); let d = (e) => a.f._inner[e][0]; let e = (f) => a.f._inner[f][1]; if (c.ca) { c.b8.g$d(); c.b8.g$g(a.q); } let f = b.bx; let g = this.getEffectiveViewport1(b); let h = 0; let i = this.u8; let j = this.aav; if (b.b3(a)) { c.cb(false); if (a.f.count > 0) { switch (this.aa2) { case 0: let k = CategorySeries.ym(a.f, a.f.count - 1, f, b.by, false); c.cf(a.f.count, d, e, true, k); break; case 1: if (this.xo != null) { h = this.y0(b); } else { h = 0.5 * (f.top + f.bottom); } let l = CategorySeries.ym(a.f, a.f.count - 1, f, b.by, false); c.cd(a.f.count, d, e, true, h, l); break; case 2: h = this.y0(b); c.ce(a.f.count, d, e, true, h); break; default: throw new NotImplementedException(0); } } b.b5(a); } let m = a.f; let n = this.dn.count; this.xe.a2(this, this.yd(), runOn(this, this.wx), this.y2(b), this.y4(b)); let o = false; let p = this.xe.b; if (p != null) { o = true; } this.xe.ak = i; this.xe.ag = i; if (o) { let q = new ScalerParams(0, b.by, b.bx, this.w5.ch, g); this.xe.f = false; this.aaa(m, -1, n, this.w5, q, b.q, -1); } this.xe.ad(c.cx, true, false, true, false); this.xe.ad(c.cz, true, false, true, false); this.xe.ad(c.cy, false, true, false, false); c.cy._opacity = 0.8 * this.xe.j * this.h8; this.xe.ad(c.cw, true, false, false, false); this.xe.ak = j; this.xe.ag = j; if (o) { let r = new ScalerParams(0, b.by, b.bx, this.w5.ch, g); this.xe.f = true; this.aaa(m, -1, n, this.w5, r, b.q, -1); } this.xe.ad(c.ct, true, false, true, false); this.xe.ad(c.cv, true, false, true, false); this.xe.ad(c.cu, false, true, false, false); c.cu._opacity = 0.8 * this.xe.j * this.h8; this.xe.ad(c.cs, true, false, false, false); c.ch(); } sg() { super.sg(); if (this.index < 0) { return; } if (this.aa0.ca) { this.aa0.ci(); } } abe() { if (this.aa0.ca) { this.aa0.b8.g$i(); } this.aa3(0, this.indicatorColumn.count); if (this.xo != null && !this.xo.c1()) { this.rq(this.gf && this.d7); } } py(a) { super.py(a); this.bc.exportTrendlineData(this, a, this.aa0.b8.g$j); } be(a) { if (this.aa2 == 1 || this.aa2 == 2) { return 3; } else if (this.aa2 == 0) { return 2; } return a; } } FinancialIndicator.$t = markType(FinancialIndicator, 'FinancialIndicator', FinancialSeries.$, [ITrendLineSeries_$type]); FinancialIndicator.abg = DependencyProperty.i("ActualTrendLineBrush", Brush.$, FinancialIndicator.$, new PropertyMetadata(2, null, (a, b) => a.raisePropertyChanged("ActualTrendLineBrush", b.oldValue, b.newValue))); FinancialIndicator.$$p = markDep(DependencyProperty, PropertyMetadata, FinancialIndicator, 'raisePropertyChanged', ['DisplayType:aa2:abh', [IndicatorDisplayType_$type, enumGetBox(IndicatorDisplayType_$type, 0)], 'IgnoreFirst:aa8:abi', [1, 0], 'TrendLineType::abo', [TrendLineType_$type, enumGetBox(TrendLineType_$type, 0)], 'TrendLineThickness::abn', [1, 1.5], 'TrendLinePeriod::abm', [1, 7], 'TrendLineBrush::abj', [Brush.$, null], 'TrendLineZIndex:aa9:abp', [1, 1001], 'TrendLineDashArray:abr:abk', [DoubleCollection.$], 'TrendLineDashCap:abs:abl', [PenLineCap_$type, enumGetBox(PenLineCap_$type, 0)]]); return FinancialIndicator; })(); /** * @hidden */ export let FinancialIndicatorBucketCalculator = /*@__PURE__*/ (() => { class FinancialIndicatorBucketCalculator extends FinancialBucketCalculator { constructor(a) { super(a); this.f = null; this.f = a; } getBucket(a) { let b = a * this.b; let c = Math.min(b + this.b - 1, this.f.b6.indicatorColumn.count - 1); let d = NaN; let e = NaN; for (let f = b; f <= c; ++f) { let g = this.f.b6.indicatorColumn._inner[f]; if (!isNaN_(d)) { if (!isNaN_(g)) { d = Math.min(d, g); e = Math.max(e, g); } } else { d = g; e = g; } } if (!isNaN_(d)) { return [0.5 * (b + c), d, e]; } return [NaN, NaN, NaN]; } } FinancialIndicatorBucketCalculator.$t = markType(FinancialIndicatorBucketCalculator, 'FinancialIndicatorBucketCalculator', FinancialBucketCalculator.$); return FinancialIndicatorBucketCalculator; })(); /** * @hidden */ export let FinancialIndicatorView = /*@__PURE__*/ (() => { class FinancialIndicatorView extends FinancialSeriesView { constructor(a) { super(a); this.b6 = null; this.b9 = null; this.cx = ((() => { let $ret = new Path(); $ret.an = new PathGeometry(); return $ret; })()); this.ct = ((() => { let $ret = new Path(); $ret.an = new PathGeometry(); return $ret; })()); this.cy = ((() => { let $ret = new Path(); $ret.an = new PathGeometry(); return $ret; })()); this.cu = ((() => { let $ret = new Path(); $ret.an = new PathGeometry(); return $ret; })()); this.cz = ((() => { let $ret = new Path(); $ret.an = new PathGeometry(); return $ret; })()); this.cv = ((() => { let $ret = new Path(); $ret.an = new PathGeometry(); return $ret; })()); this.cw = ((() => { let $ret = new Path(); $ret.an = new GeometryGroup(); return $ret; })()); this.cs = ((() => { let $ret = new Path(); $ret.an = new GeometryGroup(); return $ret; })()); this.b7 = null; this.cp = new Path(); this.cr = new Path(); this.cq = new Path(); this.co = new Path(); this.cl = new Path(); this.cn = new Path(); this.cm = new Path(); this.ck = new Path(); this.b6 = a; this.b9 = ((() => { let $ret = new Pool$1(LineGeometry.$); $ret.create = runOn(this, this.cj); $ret.destroy = runOn(this, this.cc); return $ret; })()); } b1() { return new FinancialIndicatorBucketCalculator(this); } au() { super.au(); if (!this.q) { this.b6.aav = Defaults.ah; this.b6.aa2 = this.b6.aa1; } } cj() { return new LineGeometry(); } cc(a) { } get b8() { if (this.b7 == null) { this.b7 = CategoryTrendLineManagerFactory.a(this.b7, this.e.a0(), this.e.su, this.e, this.e.dr); } return this.b7; } set b8(a) { this.b7 = a; } get ca() { return this.b7 != null; } cb(a) { Extensions.e(this.cx.an); Extensions.e(this.cy.an); Extensions.e(this.cz.an); Extensions.e(this.ct.an); Extensions.e(this.cu.an); Extensions.e(this.cv.an); Extensions.d(this.cw.an); Extensions.d(this.cs.an); if (a) { this.b9.count = 0; } this.as(); } ch() { } cf(a, b, c, d, e) { IndicatorRenderer.g(a, b, c, d, this.by, this.bx, this.cx, this.ct, this.b0.b, this.e.ic, e); this.as(); } cd(a, b, c, d, e, f) { IndicatorRenderer.e(a, b, c, d, this.by, this.bx, this.cx, this.cy, this.ct, this.cu, e, this.b0.b, this.e.ic, f); this.as(); } ce(a, b, c, d, e) { IndicatorRenderer.f(a, b, c, d, this.bx, e, this.b9, this.cw, this.cs); this.as(); } ci() { this.b6.abq = null; if (this.b6.trendLineBrush != null) { this.b6.abq = this.b6.trendLineBrush; } else { this.b6.abq = this.b6.u8; } } be() { super.be(); let a = this.br(); this.cp.an = this.cx.an; this.cr.an = this.cz.an; this.cq.an = this.cy.an; this.co.an = this.cw.an; this.cl.an = this.ct.an; this.cn.an = this.cv.an; this.cm.an = this.cu.an; this.ck.an = this.cs.an; this.cp._stroke = a; this.cr._stroke = a; this.cp.ad = this.e.id + 3; this.cr.ad = this.e.id + 3; this.cq._fill = a; this.cq._opacity = 1; this.co._stroke = a; this.co.ad = this.e.id + 3; this.cl._stroke = a; this.cn._stroke = a; this.cl.ad = this.e.id + 3; this.cn.ad = this.e.id + 3; this.cm._fill = a; this.cm._opacity = 1; this.ck._stroke = a; this.ck.ad = this.e.id + 3; } a8(a, b) { super.a8(a, b); if (a.d) { if (b) { if (this.b6.aa2 == 2) { a.t(this.co); a.t(this.ck); } else { a.t(this.cq); a.t(this.cp); a.t(this.cr); a.t(this.cm); a.t(this.cl); a.t(this.cn); } } else { if (this.b6.aa2 == 2) { a.t(this.cw); a.t(this.cs); } else { a.t(this.cy); a.t(this.cx); a.t(this.cz); a.t(this.cu); a.t(this.ct); a.t(this.cv); } } } } a7(a, b) { if (a.d) { if (this.b6.trendLineType != 0 && !b) { let c = this.b8.g$j; c.ad = this.b6.trendLineThickness; c._stroke = this.b6.abq; c.aj = this.b6.abs; c.ai = this.b6.abr; a.v(c); } } super.a7(a, b); } an(a) { super.an(a); this.e.bc.exportPathData(a, this.cw, "positiveColumnsShape", ["Positive", "Main"]); this.e.bc.exportPathData(a, this.cs, "negativeColumnsShape", ["Negative"]); this.e.bc.exportPathData(a, this.cx, "positive0", ["Positive", "Main"]); this.e.bc.exportPathData(a, this.cz, "positive1", ["Positive"]); this.e.bc.exportPathData(a, this.cy, "positive01", ["PositiveFill"]); this.e.bc.exportPathData(a, this.ct, "negative0", ["Negative", "Main"]); this.e.bc.exportPathData(a, this.cv, "negative1", ["Negative"]); this.e.bc.exportPathData(a, this.cu, "negative01", ["NegativeFill"]); } cg() { if (this.ca) { this.b7 = CategoryTrendLineManagerFactory.a(this.b7, this.e.a0(), this.e.su, this.e, this.e.dr); } } } FinancialIndicatorView.$t = markType(FinancialIndicatorView, 'FinancialIndicatorView', FinancialSeriesView.$); return FinancialIndicatorView; })();