From adfc58a8afae46e6f4f5b8a70ca464763527f756 Mon Sep 17 00:00:00 2001 From: louisnw Date: Sat, 10 Jun 2023 23:15:10 +0100 Subject: [PATCH] - Synced Subcharts will now have synced crosshairs. - Fixed a bug causing Subcharts not to sync initially. - added `scale_margin_top` and `scale_margin_bottom` parameters to the `price_scale` method. - Added `price_line` and `price_label` parameters to `create_line`. - Lowered the default margins of the chart. --- docs/source/conf.py | 2 +- docs/source/docs.md | 12 ++--- lightweight_charts/js.py | 93 ++++++++++++++++++++++++++++++----- lightweight_charts/pkg.py | 4 +- lightweight_charts/polygon.py | 21 ++------ lightweight_charts/widgets.py | 8 ++- setup.py | 2 +- 7 files changed, 103 insertions(+), 39 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 3e8e1f6..471ffbe 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,7 +1,7 @@ project = 'lightweight-charts-python' copyright = '2023, louisnw' author = 'louisnw' -release = '1.0.11' +release = '1.0.12' extensions = ["myst_parser"] diff --git a/docs/source/docs.md b/docs/source/docs.md index 1c44083..b4481dc 100644 --- a/docs/source/docs.md +++ b/docs/source/docs.md @@ -57,7 +57,7 @@ If `cumulative_volume` is used, the volume data given to this method will be add ___ ### `create_line` -`color: str` | `width: int` | `-> Line` +`color: str` | `width: int` | `price_line: bool` | `price_label: bool` | `-> Line` Creates and returns a [Line](#line) object. ___ @@ -100,7 +100,7 @@ Removes a horizontal line at the given price. ___ ### `price_scale` -`mode: 'normal'/'logarithmic'/'percentage'/'index100'` | `align_labels: bool` | `border_visible: bool` | `border_color: str` | `text_color: str` | `entire_text_only: bool` | `ticks_visible: bool` +`mode: 'normal'/'logarithmic'/'percentage'/'index100'` | `align_labels: bool` | `border_visible: bool` | `border_color: str` | `text_color: str` | `entire_text_only: bool` | `ticks_visible: bool` | `scale_margin_top: float` | `scale_margin_bottom: float` Price scale options for the chart. ___ @@ -108,7 +108,7 @@ ___ ### `time_scale` `right_offset: int` | `min_bar_spacing: float` | `visible: bool` | `time_visible: bool` | `seconds_visible: bool` | `border_visible: bool` | `border_color: str` -Time scale options for the chart. +Timescale options for the chart. ___ ### `layout` @@ -212,7 +212,7 @@ Creates and returns a [SubChart](#subchart) object, placing it adjacent to the d `height` | `width`: Specifies the size of the `SubChart`, where `1` is the width/height of the window (100%) -`sync`: If given as `True`, the `SubChart`'s time scale will follow that of the declaring `Chart` or `SubChart`. If a `str` is passed, the `SubChart` will follow the panel with the given id. Chart ids can be accessed from the`chart.id` and `subchart.id` attributes. +`sync`: If given as `True`, the `SubChart`'s timescale and crosshair will follow that of the declaring `Chart` or `SubChart`. If a `str` is passed, the `SubChart` will follow the panel with the given id. Chart ids can be accessed from the`chart.id` and `subchart.id` attributes. ```{important} `width` and `height` must be given as a number between 0 and 1. @@ -330,10 +330,10 @@ from lightweight_charts import Chart if __name__ == '__main__': chart = Chart(inner_width=1, inner_height=0.8) + chart.time_scale(visible=False) chart2 = chart.create_subchart(width=1, height=0.2, sync=True, volume_enabled=False) - chart2.time_scale(visible=False) - + df = pd.read_csv('ohlcv.csv') df2 = pd.read_csv('rsi.csv') diff --git a/lightweight_charts/js.py b/lightweight_charts/js.py index b7a0e99..46dfa4a 100644 --- a/lightweight_charts/js.py +++ b/lightweight_charts/js.py @@ -123,17 +123,18 @@ class SeriesCommon: class Line(SeriesCommon): - def __init__(self, parent, color, width): + def __init__(self, parent, color, width, price_line, price_label): self._parent = parent self._rand = self._parent._rand self.id = f'window.{self._rand.generate()}' self.run_script = self._parent.run_script - - self._parent.run_script(f''' + self.run_script(f''' {self.id} = {{ series: {self._parent.id}.chart.addLineSeries({{ color: '{color}', lineWidth: {width}, + lastValueVisible: {_js_bool(price_label)}, + priceLineVisible: {_js_bool(price_line)}, }}), markers: [], horizontal_lines: [], @@ -240,6 +241,7 @@ class LWC(SeriesCommon): self.loaded = False self._html = HTML self._scripts = [] + self._final_scripts = [] self._script_func = None self._last_bar = None self._interval = None @@ -259,6 +261,7 @@ class LWC(SeriesCommon): return self.loaded = True [self.run_script(script) for script in self._scripts] + [self.run_script(script) for script in self._final_scripts] def _create_chart(self, autosize=True): self.run_script(f''' @@ -270,11 +273,14 @@ class LWC(SeriesCommon): def _make_search_box(self): self.run_script(f'{self.id}.search = makeSearchBox({self.id}, {self._js_api_code})') - def run_script(self, script): + def run_script(self, script, run_last=False): """ For advanced users; evaluates JavaScript within the Webview. """ - self._script_func(script) if self.loaded else self._scripts.append(script) + if self.loaded: + self._script_func(script) + return + self._scripts.append(script) if not run_last else self._final_scripts.append(script) def set(self, df: pd.DataFrame): """ @@ -409,11 +415,12 @@ class LWC(SeriesCommon): bar['volume'] = 0 self.update(bar, from_tick=True) - def create_line(self, color: str = 'rgba(214, 237, 255, 0.6)', width: int = 2) -> Line: + def create_line(self, color: str = 'rgba(214, 237, 255, 0.6)', width: int = 2, + price_line: bool = True, price_label: bool = True) -> Line: """ Creates and returns a Line object.)\n """ - self._lines.append(Line(self, color, width)) + self._lines.append(Line(self, color, width, price_line, price_label)) return self._lines[-1] def lines(self): @@ -424,9 +431,10 @@ class LWC(SeriesCommon): return self._lines def price_scale(self, mode: PRICE_SCALE_MODE = 'normal', align_labels: bool = True, border_visible: bool = False, - border_color: str = None, text_color: str = None, entire_text_only: bool = False, ticks_visible: bool = False): + border_color: str = None, text_color: str = None, entire_text_only: bool = False, + ticks_visible: bool = False, scale_margin_top: float = 0.2, scale_margin_bottom: float = 0.2): self.run_script(f''' - {self.id}.chart.priceScale('right').applyOptions({{ + {self.id}.series.priceScale().applyOptions({{ mode: {_price_scale_mode(mode)}, alignLabels: {_js_bool(align_labels)}, borderVisible: {_js_bool(border_visible)}, @@ -434,6 +442,7 @@ class LWC(SeriesCommon): {f'textColor: "{text_color}",' if text_color else ''} entireTextOnly: {_js_bool(entire_text_only)}, ticksVisible: {_js_bool(ticks_visible)}, + scaleMargins: {{top: {scale_margin_top}, bottom: {scale_margin_bottom}}} }})''') def time_scale(self, right_offset: int = 0, min_bar_spacing: float = 0.5, @@ -639,8 +648,11 @@ class SubChart(LWC): {sync_parent_id}.chart.timeScale().subscribeVisibleLogicalRangeChange((timeRange) => {{ {self.id}.chart.timeScale().setVisibleLogicalRange(timeRange) }}); - {self.id}.chart.timeScale().setVisibleLogicalRange({sync_parent_id}.chart.timeScale().getVisibleLogicalRange()) + syncCrosshairs({self.id}.chart, {sync_parent_id}.chart) ''') + self.run_script(f''' + {self.id}.chart.timeScale().setVisibleLogicalRange({sync_parent_id}.chart.timeScale().getVisibleLogicalRange()) + ''', run_last=True) SCRIPT = """ @@ -698,7 +710,10 @@ function makeChart(innerWidth, innerHeight, autoSize=true) { priceFormat: {type: 'volume'}, priceScaleId: '', }) - chart.chart.priceScale('').applyOptions({ + chart.series.priceScale().applyOptions({ + scaleMargins: {top: 0.2, bottom: 0.2}, + }); + chart.volumeSeries.priceScale().applyOptions({ scaleMargins: {top: 0.8, bottom: 0}, }); chart.legend.style.position = 'absolute' @@ -751,6 +766,62 @@ function makeHorizontalLine(chart, lineId, price, color, width, style, axisLabel function legendItemFormat(num) { return num.toFixed(2).toString().padStart(8, ' ') } +function syncCrosshairs(childChart, parentChart) { + let parent = 0 + let child = 0 + + let parentCrosshairHandler = (e) => { + parent ++ + if (parent < 10) { + return + } + child = 0 + parentChart.applyOptions({crosshair: { horzLine: { + visible: true, + labelVisible: true, + }}}) + childChart.applyOptions({crosshair: { horzLine: { + visible: false, + labelVisible: false, + }}}) + + childChart.unsubscribeCrosshairMove(childCrosshairHandler) + if (e.time !== undefined) { + let xx = childChart.timeScale().timeToCoordinate(e.time); + childChart.setCrosshairXY(xx,300,true); + } else if (e.point !== undefined){ + childChart.setCrosshairXY(e.point.x,300,false); + } + childChart.subscribeCrosshairMove(childCrosshairHandler) + } + + let childCrosshairHandler = (e) => { + child ++ + if (child < 10) { + return + } + parent = 0 + childChart.applyOptions({crosshair: {horzLine: { + visible: true, + labelVisible: true, + }}}) + parentChart.applyOptions({crosshair: {horzLine: { + visible: false, + labelVisible: false, + }}}) + + parentChart.unsubscribeCrosshairMove(parentCrosshairHandler) + if (e.time !== undefined) { + let xx = parentChart.timeScale().timeToCoordinate(e.time); + parentChart.setCrosshairXY(xx,300,true); + } else if (e.point !== undefined){ + parentChart.setCrosshairXY(e.point.x,300,false); + } + parentChart.subscribeCrosshairMove(parentCrosshairHandler) + } + parentChart.subscribeCrosshairMove(parentCrosshairHandler) + childChart.subscribeCrosshairMove(childCrosshairHandler) +} """ HTML = f""" diff --git a/lightweight_charts/pkg.py b/lightweight_charts/pkg.py index 0321a27..9c8742b 100644 --- a/lightweight_charts/pkg.py +++ b/lightweight_charts/pkg.py @@ -1,9 +1,9 @@ LWC_4_0_1 = """ /*! * @license - * TradingView Lightweight Charts™ v4.0.1 + * TradingView Lightweight Charts™ v4.1.0-dev+202306102016 * Copyright (c) 2023 TradingView, Inc. * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0 */ -!function(){"use strict";var t,i;function n(t,i){const n={0:[],1:[t.lineWidth,t.lineWidth],2:[2*t.lineWidth,2*t.lineWidth],3:[6*t.lineWidth,6*t.lineWidth],4:[t.lineWidth,4*t.lineWidth]}[i];t.setLineDash(n)}function s(t,i,n,s){t.beginPath();const e=t.lineWidth%2?.5:0;t.moveTo(n,i+e),t.lineTo(s,i+e),t.stroke()}function e(t,i){if(!t)throw new Error("Assertion failed"+(i?": "+i:""))}function r(t){if(void 0===t)throw new Error("Value is undefined");return t}function h(t){if(null===t)throw new Error("Value is null");return t}function l(t){return h(r(t))}!function(t){t[t.Simple=0]="Simple",t[t.WithSteps=1]="WithSteps",t[t.Curved=2]="Curved"}(t||(t={})),function(t){t[t.Solid=0]="Solid",t[t.Dotted=1]="Dotted",t[t.Dashed=2]="Dashed",t[t.LargeDashed=3]="LargeDashed",t[t.SparseDotted=4]="SparseDotted"}(i||(i={}));const a={khaki:"#f0e68c",azure:"#f0ffff",aliceblue:"#f0f8ff",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",gray:"#808080",green:"#008000",honeydew:"#f0fff0",floralwhite:"#fffaf0",lightblue:"#add8e6",lightcoral:"#f08080",lemonchiffon:"#fffacd",hotpink:"#ff69b4",lightyellow:"#ffffe0",greenyellow:"#adff2f",lightgoldenrodyellow:"#fafad2",limegreen:"#32cd32",linen:"#faf0e6",lightcyan:"#e0ffff",magenta:"#f0f",maroon:"#800000",olive:"#808000",orange:"#ffa500",oldlace:"#fdf5e6",mediumblue:"#0000cd",transparent:"#0000",lime:"#0f0",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",midnightblue:"#191970",orchid:"#da70d6",mediumorchid:"#ba55d3",mediumturquoise:"#48d1cc",orangered:"#ff4500",royalblue:"#4169e1",powderblue:"#b0e0e6",red:"#f00",coral:"#ff7f50",turquoise:"#40e0d0",white:"#fff",whitesmoke:"#f5f5f5",wheat:"#f5deb3",teal:"#008080",steelblue:"#4682b4",bisque:"#ffe4c4",aquamarine:"#7fffd4",aqua:"#0ff",sienna:"#a0522d",silver:"#c0c0c0",springgreen:"#00ff7f",antiquewhite:"#faebd7",burlywood:"#deb887",brown:"#a52a2a",beige:"#f5f5dc",chocolate:"#d2691e",chartreuse:"#7fff00",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cadetblue:"#5f9ea0",tomato:"#ff6347",fuchsia:"#f0f",blue:"#00f",salmon:"#fa8072",blanchedalmond:"#ffebcd",slateblue:"#6a5acd",slategray:"#708090",thistle:"#d8bfd8",tan:"#d2b48c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",blueviolet:"#8a2be2",black:"#000",darkmagenta:"#8b008b",darkslateblue:"#483d8b",darkkhaki:"#bdb76b",darkorchid:"#9932cc",darkorange:"#ff8c00",darkgreen:"#006400",darkred:"#8b0000",dodgerblue:"#1e90ff",darkslategray:"#2f4f4f",dimgray:"#696969",deepskyblue:"#00bfff",firebrick:"#b22222",forestgreen:"#228b22",indigo:"#4b0082",ivory:"#fffff0",lavenderblush:"#fff0f5",feldspar:"#d19275",indianred:"#cd5c5c",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightskyblue:"#87cefa",lightslategray:"#789",lightslateblue:"#8470ff",snow:"#fffafa",lightseagreen:"#20b2aa",lightsalmon:"#ffa07a",darksalmon:"#e9967a",darkviolet:"#9400d3",mediumpurple:"#9370d8",mediumaquamarine:"#66cdaa",skyblue:"#87ceeb",lavender:"#e6e6fa",lightsteelblue:"#b0c4de",mediumvioletred:"#c71585",mintcream:"#f5fffa",navajowhite:"#ffdead",navy:"#000080",olivedrab:"#6b8e23",palevioletred:"#d87093",violetred:"#d02090",yellow:"#ff0",yellowgreen:"#9acd32",lawngreen:"#7cfc00",pink:"#ffc0cb",paleturquoise:"#afeeee",palegoldenrod:"#eee8aa",darkolivegreen:"#556b2f",darkseagreen:"#8fbc8f",darkturquoise:"#00ced1",peachpuff:"#ffdab9",deeppink:"#ff1493",violet:"#ee82ee",palegreen:"#98fb98",mediumseagreen:"#3cb371",peru:"#cd853f",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",purple:"#800080",seagreen:"#2e8b57",seashell:"#fff5ee",papayawhip:"#ffefd5",mediumslateblue:"#7b68ee",plum:"#dda0dd",mediumspringgreen:"#00fa9a"};function o(t){return t<0?0:t>255?255:Math.round(t)||0}function _(t){return t<=0||t>0?t<0?0:t>1?1:Math.round(1e4*t)/1e4:0}const u=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,c=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,d=/^rgb\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*\)$/,f=/^rgba\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?[\d]{0,10}(?:\.\d+)?)\s*\)$/;function p(t){(t=t.toLowerCase())in a&&(t=a[t]);{const i=f.exec(t)||d.exec(t);if(i)return[o(parseInt(i[1],10)),o(parseInt(i[2],10)),o(parseInt(i[3],10)),_(i.length<5?1:parseFloat(i[4]))]}{const i=c.exec(t);if(i)return[o(parseInt(i[1],16)),o(parseInt(i[2],16)),o(parseInt(i[3],16)),1]}{const i=u.exec(t);if(i)return[o(17*parseInt(i[1],16)),o(17*parseInt(i[2],16)),o(17*parseInt(i[3],16)),1]}throw new Error(`Cannot parse color: ${t}`)}function v(t){const i=p(t);return{t:`rgb(${i[0]}, ${i[1]}, ${i[2]})`,i:(n=i,.199*n[0]+.687*n[1]+.114*n[2]>160?"black":"white")};var n}class m{constructor(){this.h=[]}l(t,i,n){const s={o:t,_:i,u:!0===n};this.h.push(s)}p(t){const i=this.h.findIndex((i=>t===i.o));i>-1&&this.h.splice(i,1)}v(t){this.h=this.h.filter((i=>i._!==t))}m(t,i,n){const s=[...this.h];this.h=this.h.filter((t=>!t.u)),s.forEach((s=>s.o(t,i,n)))}g(){return this.h.length>0}M(){this.h=[]}}function b(t,...i){for(const n of i)for(const i in n)void 0!==n[i]&&("object"!=typeof n[i]||void 0===t[i]?t[i]=n[i]:b(t[i],n[i]));return t}function g(t){return"number"==typeof t&&isFinite(t)}function w(t){return"number"==typeof t&&t%1==0}function M(t){return"string"==typeof t}function S(t){return"boolean"==typeof t}function x(t){const i=t;if(!i||"object"!=typeof i)return i;let n,s,e;for(s in n=Array.isArray(i)?[]:{},i)i.hasOwnProperty(s)&&(e=i[s],n[s]=e&&"object"==typeof e?x(e):e);return n}function y(t){return null!==t}function k(t){return null===t?void 0:t}const C="-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif";function T(t,i,n){return void 0===i&&(i=C),`${n=void 0!==n?`${n} `:""}${t}px ${i}`}class P{constructor(t){this.S={k:1,C:5,T:NaN,P:"",R:"",D:"",O:"",B:0,A:0,L:0,I:0,N:0},this.V=t}F(){const t=this.S,i=this.W(),n=this.j();return t.T===i&&t.R===n||(t.T=i,t.R=n,t.P=T(i,n),t.I=2.5/12*i,t.B=t.I,t.A=i/12*t.C,t.L=i/12*t.C,t.N=0),t.D=this.$(),t.O=this.H(),this.S}$(){return this.V.F().layout.textColor}H(){return this.V.U()}W(){return this.V.F().layout.fontSize}j(){return this.V.F().layout.fontFamily}}class R{constructor(){this.q=[]}Y(t){this.q=t}X(t,i,n){this.q.forEach((s=>{s.X(t,i,n)}))}}class D{X(t,i,n){t.useMediaCoordinateSpace((t=>this.Z(t,i,n)))}K(t,i,n){t.useMediaCoordinateSpace((t=>this.G(t,i,n)))}G(t,i,n){}}class O extends D{constructor(){super(...arguments),this.J=null}tt(t){this.J=t}Z({context:t}){if(null===this.J||null===this.J.it)return;const i=this.J.it,n=this.J,s=s=>{t.beginPath();for(let e=i.to-1;e>=i.from;--e){const i=n.nt[e];t.moveTo(i.st,i.et),t.arc(i.st,i.et,s,0,2*Math.PI)}t.fill()};n.rt>0&&(t.fillStyle=n.ht,s(n.lt+n.rt)),t.fillStyle=n.ot,s(n.lt)}}function B(){return{nt:[{st:0,et:0,_t:0,ut:0}],ot:"",ht:"",lt:0,rt:0,it:null}}const E={from:0,to:1};class A{constructor(t,i){this.ct=new R,this.dt=[],this.ft=[],this.vt=!0,this.V=t,this.bt=i,this.ct.Y(this.dt)}gt(t){const i=this.V.wt();i.length!==this.dt.length&&(this.ft=i.map(B),this.dt=this.ft.map((t=>{const i=new O;return i.tt(t),i})),this.ct.Y(this.dt)),this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.ct}St(){const t=this.V.wt(),i=this.bt.xt(),n=this.V.yt();t.forEach(((t,s)=>{var e;const r=this.ft[s],l=t.kt(i);if(null===l||!t.Ct())return void(r.it=null);const a=h(t.Tt());r.ot=l.Pt,r.lt=l.lt,r.rt=l.Rt,r.nt[0].ut=l.ut,r.nt[0].et=t.Ot().Dt(l.ut,a.Bt),r.ht=null!==(e=l.Et)&&void 0!==e?e:this.V.At(r.nt[0].et/t.Ot().Lt()),r.nt[0]._t=i,r.nt[0].st=n.zt(i),r.it=E}))}}class L{X(t,i,n){t.useBitmapCoordinateSpace((t=>this.Z(t,i,n)))}}class z extends L{constructor(t){super(),this.It=t}Z({context:t,bitmapSize:i,horizontalPixelRatio:e,verticalPixelRatio:r}){if(null===this.It)return;const h=this.It.Nt.Ct,l=this.It.Vt.Ct;if(!h&&!l)return;const a=Math.round(this.It.st*e),o=Math.round(this.It.et*r);t.lineCap="butt",h&&a>=0&&(t.lineWidth=Math.floor(this.It.Nt.rt*e),t.strokeStyle=this.It.Nt.D,t.fillStyle=this.It.Nt.D,n(t,this.It.Nt.Ft),function(t,i,n,s){t.beginPath();const e=t.lineWidth%2?.5:0;t.moveTo(i+e,n),t.lineTo(i+e,s),t.stroke()}(t,a,0,i.height)),l&&o>=0&&(t.lineWidth=Math.floor(this.It.Vt.rt*r),t.strokeStyle=this.It.Vt.D,t.fillStyle=this.It.Vt.D,n(t,this.It.Vt.Ft),s(t,o,0,i.width))}}class I{constructor(t){this.vt=!0,this.Wt={Nt:{rt:1,Ft:0,D:"",Ct:!1},Vt:{rt:1,Ft:0,D:"",Ct:!1},st:0,et:0},this.jt=new z(this.Wt),this.$t=t}gt(){this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.jt}St(){const t=this.$t.Ct(),i=h(this.$t.Ht()),n=i.Ut().F().crosshair,s=this.Wt;s.Vt.Ct=t&&this.$t.qt(i),s.Nt.Ct=t&&this.$t.Yt(),s.Vt.rt=n.horzLine.width,s.Vt.Ft=n.horzLine.style,s.Vt.D=n.horzLine.color,s.Nt.rt=n.vertLine.width,s.Nt.Ft=n.vertLine.style,s.Nt.D=n.vertLine.color,s.st=this.$t.Xt(),s.et=this.$t.Zt()}}function N(t,i,n,s,e,r){t.fillRect(i+r,n,s-2*r,r),t.fillRect(i+r,n+e-r,s-2*r,r),t.fillRect(i,n,r,e),t.fillRect(i+s-r,n,r,e)}function V(t,i,n,s,e,r){t.save(),t.globalCompositeOperation="copy",t.fillStyle=r,t.fillRect(i,n,s,e),t.restore()}function F(t,i){return Array.isArray(t)?t.map((t=>0===t?t:t+i)):t+i}function W(t,i,n,s,e,r){let h,l,a,o;if(Array.isArray(r))if(2===r.length){const t=Math.max(0,r[0]),i=Math.max(0,r[1]);h=t,l=t,a=i,o=i}else{if(4!==r.length)throw new Error("Wrong border radius - it should be like css border radius");h=Math.max(0,r[0]),l=Math.max(0,r[1]),a=Math.max(0,r[2]),o=Math.max(0,r[3])}else{const t=Math.max(0,r);h=t,l=t,a=t,o=t}t.beginPath(),t.moveTo(i+h,n),t.lineTo(i+s-l,n),0!==l&&t.arcTo(i+s,n,i+s,n+l,l),t.lineTo(i+s,n+e-a),0!==a&&t.arcTo(i+s,n+e,i+s-a,n+e,a),t.lineTo(i+o,n+e),0!==o&&t.arcTo(i,n+e,i,n+e-o,o),t.lineTo(i,n+h),0!==h&&t.arcTo(i,n,i+h,n,h)}function j(t,i,n,s,e,r,h=0,l=0,a=""){if(t.save(),!h||!a||a===r)return W(t,i,n,s,e,l),t.fillStyle=r,t.fill(),void t.restore();const o=h/2;if("transparent"!==r){W(t,i+h,n+h,s-2*h,e-2*h,F(l,-h)),t.fillStyle=r,t.fill()}if("transparent"!==a){W(t,i+o,n+o,s-h,e-h,F(l,-o)),t.lineWidth=h,t.strokeStyle=a,t.closePath(),t.stroke()}t.restore()}function $(t,i,n,s,e,r,h){t.save(),t.globalCompositeOperation="copy";const l=t.createLinearGradient(0,0,0,e);l.addColorStop(0,r),l.addColorStop(1,h),t.fillStyle=l,t.fillRect(i,n,s,e),t.restore()}class H{constructor(t,i){this.tt(t,i)}tt(t,i){this.It=t,this.Kt=i}Lt(t,i){return this.It.Ct?t.T+t.I+t.B:0}X(t,i,n,s){if(!this.It.Ct||0===this.It.Gt.length)return;const e=this.It.D,r=this.Kt.t,h=t.useBitmapCoordinateSpace((t=>{const h=t.context;h.font=i.P;const l=this.Jt(t,i,n,s),a=l.Qt,o=(t,i)=>{l.ti?j(h,a.ii,a.ni,a.si,a.ei,t,a.ri,[a.lt,0,0,a.lt],i):j(h,a.hi,a.ni,a.si,a.ei,t,a.ri,[0,a.lt,a.lt,0],i)};return o(r,"transparent"),this.It.li&&(h.fillStyle=e,h.fillRect(a.hi,a.ai,a.oi-a.hi,a._i)),o("transparent",r),this.It.ui&&(h.fillStyle=i.O,h.fillRect(l.ti?a.ci-a.ri:0,a.ni,a.ri,a.di-a.ni)),l}));t.useMediaCoordinateSpace((({context:t})=>{const n=h.fi;t.font=i.P,t.textAlign=h.ti?"right":"left",t.textBaseline="middle",t.fillStyle=e,t.fillText(this.It.Gt,n.pi,(n.ni+n.di)/2+n.vi)}))}Jt(t,i,n,s){var e;const{context:r,bitmapSize:h,mediaSize:l,horizontalPixelRatio:a,verticalPixelRatio:o}=t,_=this.It.li||!this.It.mi?i.C:0,u=this.It.bi?i.k:0,c=i.I+this.Kt.gi,d=i.B+this.Kt.wi,f=i.A,p=i.L,v=this.It.Gt,m=i.T,b=n.Mi(r,v),g=Math.ceil(n.Si(r,v)),w=m+c+d,M=i.k+f+p+g+_,S=Math.max(1,Math.floor(o));let x=Math.round(w*o);x%2!=S%2&&(x+=1);const y=u>0?Math.max(1,Math.floor(u*a)):0,k=Math.round(M*a),C=Math.round(_*a),T=null!==(e=this.Kt.xi)&&void 0!==e?e:this.Kt.yi,P=Math.round(T*o)-Math.floor(.5*o),R=Math.floor(P+S/2-x/2),D=R+x,O="right"===s,B=O?l.width-u:u,E=O?h.width-y:y;let A,L,z;return O?(A=E-k,L=E-C,z=B-_-f-u):(A=E+k,L=E+C,z=B+_+f),{ti:O,Qt:{ni:R,ai:P,di:D,si:k,ei:x,lt:2*a,ri:y,ii:A,hi:E,oi:L,_i:S,ci:h.width},fi:{ni:R/o,di:D/o,pi:z,vi:b}}}}class U{constructor(t){this.ki={yi:0,t:"#000",wi:0,gi:0},this.Ci={Gt:"",Ct:!1,li:!0,mi:!1,Et:"",D:"#FFF",ui:!1,bi:!1},this.Ti={Gt:"",Ct:!1,li:!1,mi:!0,Et:"",D:"#FFF",ui:!0,bi:!0},this.vt=!0,this.Pi=new(t||H)(this.Ci,this.ki),this.Ri=new(t||H)(this.Ti,this.ki)}Gt(){return this.Di(),this.Ci.Gt}yi(){return this.Di(),this.ki.yi}gt(){this.vt=!0}Lt(t,i=!1){return Math.max(this.Pi.Lt(t,i),this.Ri.Lt(t,i))}Oi(){return this.ki.xi||0}Bi(t){this.ki.xi=t}Ei(){return this.Di(),this.Ci.Ct||this.Ti.Ct}Ai(){return this.Di(),this.Ci.Ct}Mt(t){return this.Di(),this.Ci.li=this.Ci.li&&t.F().ticksVisible,this.Ti.li=this.Ti.li&&t.F().ticksVisible,this.Pi.tt(this.Ci,this.ki),this.Ri.tt(this.Ti,this.ki),this.Pi}Li(){return this.Di(),this.Pi.tt(this.Ci,this.ki),this.Ri.tt(this.Ti,this.ki),this.Ri}Di(){this.vt&&(this.Ci.li=!0,this.Ti.li=!1,this.zi(this.Ci,this.Ti,this.ki))}}class q extends U{constructor(t,i,n){super(),this.$t=t,this.Ii=i,this.Ni=n}zi(t,i,n){t.Ct=!1;const s=this.$t.F().horzLine;if(!s.labelVisible)return;const e=this.Ii.Tt();if(!this.$t.Ct()||this.Ii.Vi()||null===e)return;const r=v(s.labelBackgroundColor);n.t=r.t,t.D=r.i;const h=2/12*this.Ii.T();n.gi=h,n.wi=h;const l=this.Ni(this.Ii);n.yi=l.yi,t.Gt=this.Ii.Fi(l.ut,e),t.Ct=!0}}const Y=/[1-9]/g;class X{constructor(){this.It=null}tt(t){this.It=t}X(t,i){if(null===this.It||!1===this.It.Ct||0===this.It.Gt.length)return;const n=t.useMediaCoordinateSpace((({context:t})=>(t.font=i.P,Math.round(i.Wi.Si(t,h(this.It).Gt,Y)))));if(n<=0)return;const s=i.ji,e=n+2*s,r=e/2,l=this.It.$i;let a=this.It.yi,o=Math.floor(a-r)+.5;o<0?(a+=Math.abs(0-o),o=Math.floor(a-r)+.5):o+e>l&&(a-=Math.abs(l-(o+e)),o=Math.floor(a-r)+.5);const _=o+e,u=Math.ceil(0+i.k+i.C+i.I+i.T+i.B);t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:n,verticalPixelRatio:s})=>{const e=h(this.It);t.fillStyle=e.t;const r=Math.round(o*n),l=Math.round(0*s),a=Math.round(_*n),c=Math.round(u*s),d=Math.round(2*n);if(t.beginPath(),t.moveTo(r,l),t.lineTo(r,c-d),t.arcTo(r,c,r+d,c,d),t.lineTo(a-d,c),t.arcTo(a,c,a,c-d,d),t.lineTo(a,l),t.fill(),e.li){const r=Math.round(e.yi*n),h=l,a=Math.round((h+i.C)*s);t.fillStyle=e.D;const o=Math.max(1,Math.floor(n)),_=Math.floor(.5*n);t.fillRect(r-_,h,o,a-h)}})),t.useMediaCoordinateSpace((({context:t})=>{const n=h(this.It),e=0+i.k+i.C+i.I+i.T/2;t.font=i.P,t.textAlign="left",t.textBaseline="middle",t.fillStyle=n.D;const r=i.Wi.Mi(t,"Apr0");t.translate(o+s,e+r),t.fillText(n.Gt,0,0)}))}}class Z{constructor(t,i,n){this.vt=!0,this.jt=new X,this.Wt={Ct:!1,t:"#4c525e",D:"white",Gt:"",$i:0,yi:NaN,li:!0},this.bt=t,this.Hi=i,this.Ni=n}gt(){this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.jt.tt(this.Wt),this.jt}St(){const t=this.Wt;t.Ct=!1;const i=this.bt.F().vertLine;if(!i.labelVisible)return;const n=this.Hi.yt();if(n.Vi())return;t.$i=n.$i();const s=this.Ni();if(null===s)return;t.yi=s.yi;const e=n.Ui(this.bt.xt());t.Gt=n.qi(h(e)),t.Ct=!0;const r=v(i.labelBackgroundColor);t.t=r.t,t.D=r.i,t.li=n.F().ticksVisible}}class K{constructor(){this.Yi=null,this.Xi=0}Zi(){return this.Xi}Ki(t){this.Xi=t}Ot(){return this.Yi}Gi(t){this.Yi=t}Ji(t){return[]}Qi(){return[]}Ct(){return!0}}var G;!function(t){t[t.Normal=0]="Normal",t[t.Magnet=1]="Magnet"}(G||(G={}));class J extends K{constructor(t,i){super(),this.tn=null,this.nn=NaN,this.sn=0,this.en=!0,this.rn=new Map,this.hn=!1,this.ln=NaN,this.an=NaN,this.on=NaN,this._n=NaN,this.Hi=t,this.un=i,this.cn=new A(t,this);this.dn=((t,i)=>n=>{const s=i(),e=t();if(n===h(this.tn).fn())return{ut:e,yi:s};{const t=h(n.Tt());return{ut:n.pn(s,t),yi:s}}})((()=>this.nn),(()=>this.an));const n=((t,i)=>()=>{const n=this.Hi.yt().vn(t()),s=i();return n&&Number.isFinite(s)?{_t:n,yi:s}:null})((()=>this.sn),(()=>this.Xt()));this.mn=new Z(this,t,n),this.bn=new I(this)}F(){return this.un}gn(t,i){this.on=t,this._n=i}wn(){this.on=NaN,this._n=NaN}Mn(){return this.on}Sn(){return this._n}xn(t,i,n){this.hn||(this.hn=!0),this.en=!0,this.yn(t,i,n)}xt(){return this.sn}Xt(){return this.ln}Zt(){return this.an}Ct(){return this.en}kn(){this.en=!1,this.Cn(),this.nn=NaN,this.ln=NaN,this.an=NaN,this.tn=null,this.wn()}Tn(t){return null!==this.tn?[this.bn,this.cn]:[]}qt(t){return t===this.tn&&this.un.horzLine.visible}Yt(){return this.un.vertLine.visible}Pn(t,i){this.en&&this.tn===t||this.rn.clear();const n=[];return this.tn===t&&n.push(this.Rn(this.rn,i,this.dn)),n}Qi(){return this.en?[this.mn]:[]}Ht(){return this.tn}Dn(){this.bn.gt(),this.rn.forEach((t=>t.gt())),this.mn.gt(),this.cn.gt()}On(t){return t&&!t.fn().Vi()?t.fn():null}yn(t,i,n){this.Bn(t,i,n)&&this.Dn()}Bn(t,i,n){const s=this.ln,e=this.an,r=this.nn,h=this.sn,l=this.tn,a=this.On(n);this.sn=t,this.ln=isNaN(t)?NaN:this.Hi.yt().zt(t),this.tn=n;const o=null!==a?a.Tt():null;return null!==a&&null!==o?(this.nn=i,this.an=a.Dt(i,o)):(this.nn=NaN,this.an=NaN),s!==this.ln||e!==this.an||h!==this.sn||r!==this.nn||l!==this.tn}Cn(){const t=this.Hi.wt().map((t=>t.An().En())).filter(y),i=0===t.length?null:Math.max(...t);this.sn=null!==i?i:NaN}Rn(t,i,n){let s=t.get(i);return void 0===s&&(s=new q(this,i,n),t.set(i,s)),s}}function Q(t){return"left"===t||"right"===t}class tt{constructor(t){this.Ln=new Map,this.zn=[],this.In=t}Nn(t,i){const n=function(t,i){return void 0===t?i:{Vn:Math.max(t.Vn,i.Vn),Fn:t.Fn||i.Fn}}(this.Ln.get(t),i);this.Ln.set(t,n)}Wn(){return this.In}jn(t){const i=this.Ln.get(t);return void 0===i?{Vn:this.In}:{Vn:Math.max(this.In,i.Vn),Fn:i.Fn}}$n(){this.Hn(),this.zn=[{Un:0}]}qn(t){this.Hn(),this.zn=[{Un:1,Bt:t}]}Yn(t){this.Xn(),this.zn.push({Un:5,Bt:t})}Hn(){this.Xn(),this.zn.push({Un:6})}Zn(){this.Hn(),this.zn=[{Un:4}]}Kn(t){this.Hn(),this.zn.push({Un:2,Bt:t})}Gn(t){this.Hn(),this.zn.push({Un:3,Bt:t})}Jn(){return this.zn}Qn(t){for(const i of t.zn)this.ts(i);this.In=Math.max(this.In,t.In),t.Ln.forEach(((t,i)=>{this.Nn(i,t)}))}static ns(){return new tt(2)}static ss(){return new tt(3)}ts(t){switch(t.Un){case 0:this.$n();break;case 1:this.qn(t.Bt);break;case 2:this.Kn(t.Bt);break;case 3:this.Gn(t.Bt);break;case 4:this.Zn();break;case 5:this.Yn(t.Bt);break;case 6:this.Xn()}}Xn(){const t=this.zn.findIndex((t=>5===t.Un));-1!==t&&this.zn.splice(t,1)}}const it=".";function nt(t,i){if(!g(t))return"n/a";if(!w(i))throw new TypeError("invalid length");if(i<0||i>16)throw new TypeError("invalid length");if(0===i)return t.toString();return("0000000000000000"+t.toString()).slice(-i)}class st{constructor(t,i){if(i||(i=1),g(t)&&w(t)||(t=100),t<0)throw new TypeError("invalid base");this.Ii=t,this.es=i,this.rs()}format(t){const i=t<0?"−":"";return t=Math.abs(t),i+this.hs(t)}rs(){if(this.ls=0,this.Ii>0&&this.es>0){let t=this.Ii;for(;t>1;)t/=10,this.ls++}}hs(t){const i=this.Ii/this.es;let n=Math.floor(t),s="";const e=void 0!==this.ls?this.ls:NaN;if(i>1){let r=+(Math.round(t*i)-n*i).toFixed(this.ls);r>=i&&(r-=i,n+=1),s=it+nt(+r.toFixed(this.ls)*this.es,e)}else n=Math.round(n*i)/i,e>0&&(s=it+nt(0,e));return n.toFixed(0)+s}}class et extends st{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class rt{constructor(t){this.os=t}format(t){let i="";return t<0&&(i="-",t=-t),t<995?i+this._s(t):t<999995?i+this._s(t/1e3)+"K":t<999999995?(t=1e3*Math.round(t/1e3),i+this._s(t/1e6)+"M"):(t=1e6*Math.round(t/1e6),i+this._s(t/1e9)+"B")}_s(t){let i;const n=Math.pow(10,this.os);return i=(t=Math.round(t*n)/n)>=1e-15&&t<1?t.toFixed(this.os).replace(/\.?0+$/,""):String(t),i.replace(/(\.[1-9]*)0+$/,((t,i)=>i))}}function ht(t,i,n,s,e,r,h){if(0===i.length||s.from>=i.length||s.to<=0)return;const l=t.context,a=i[s.from];let o=r(t,a),_=a;if(s.to-s.from<2){const t=e/2;l.beginPath();const i={st:a.st-t,et:a.et},n={st:a.st+t,et:a.et};return l.moveTo(i.st,i.et),l.lineTo(n.st,n.et),void h(l,o,i,n)}const u=(t,i)=>{h(l,o,_,i),l.beginPath(),o=t,_=i};let c=_;l.beginPath(),l.moveTo(a.st,a.et);for(let e=s.from+1;e>1,h=s+e;n(t[h],i)?(s=h+1,r-=e+1):r=e}return s}function bt(t,i,n,s=0,e=t.length){let r=e-s;for(;0>1,h=s+e;n(i,t[h])?r=e:(s=h+1,r-=e+1)}return s}function gt(t,i){return t._t0&&r=s&&(l=r-1),h>0&&hObject.assign(Object.assign({},t),this.Ts.As().Es(t._t))))}Ls(){this.Cs=null}Ds(){this.xs&&(this.zs(),this.xs=!1),this.ys&&(this.Bs(),this.ys=!1),this.Ss&&(this.Is(),this.Ss=!1)}Is(){const t=this.Ts.Ot(),i=this.Ps.yt();if(this.Ls(),i.Vi()||t.Vi())return;const n=i.Ns();if(null===n)return;if(0===this.Ts.An().Vs())return;const s=this.Ts.Tt();null!==s&&(this.Cs=Mt(this.ks,n,this.Rs),this.Fs(t,i,s.Bt),this.Ws())}}class xt extends St{constructor(t,i){super(t,i,!0)}Fs(t,i,n){i.js(this.ks,k(this.Cs)),t.$s(this.ks,n,k(this.Cs))}Hs(t,i){return{_t:t,ut:i,st:NaN,et:NaN}}zs(){const t=this.Ts.As();this.ks=this.Ts.An().Us().map((i=>{const n=i.Bt[3];return this.qs(i.Ys,n,t)}))}}class yt extends xt{constructor(t,i){super(t,i),this.Os=new R,this.Xs=new dt,this.Zs=new vt,this.Os.Y([this.Xs,this.Zs])}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Es(t))}Ws(){const t=this.Ts.F();this.Xs.tt({cs:t.lineType,nt:this.ks,Ft:t.lineStyle,rt:t.lineWidth,ds:null,fs:t.invertFilledArea,it:this.Cs,us:this.Ps.yt().Ks()}),this.Zs.tt({cs:t.lineType,nt:this.ks,Ft:t.lineStyle,rt:t.lineWidth,it:this.Cs,us:this.Ps.yt().Ks()})}}class kt extends L{constructor(){super(...arguments),this.It=null,this.Gs=0,this.Js=0}tt(t){this.It=t}Z({context:t,horizontalPixelRatio:i,verticalPixelRatio:n}){if(null===this.It||0===this.It.An.length||null===this.It.it)return;if(this.Gs=this.Qs(i),this.Gs>=2){Math.max(1,Math.floor(i))%2!=this.Gs%2&&this.Gs--}this.Js=this.It.te?Math.min(this.Gs,Math.floor(i)):this.Gs;let s=null;const e=this.Js<=this.Gs&&this.It.Ks>=Math.floor(1.5*i);for(let r=this.It.it.from;rf+v-1&&(e=f+v-1,s=e-_+1),t.fillRect(i,s,o-i,e-s+1)}const i=a+m;let s=Math.max(f,Math.round(h.he*n)-l),e=s+_-1;e>f+v-1&&(e=f+v-1,s=e-_+1),t.fillRect(u+1,s,i-u,e-s+1)}}}Qs(t){const i=Math.floor(t);return Math.max(i,Math.floor(function(t,i){return Math.floor(.3*t*i)}(h(this.It).Ks,t)))}}class Ct extends St{constructor(t,i){super(t,i,!1)}Fs(t,i,n){i.js(this.ks,k(this.Cs)),t.le(this.ks,n,k(this.Cs))}ae(t,i,n){return{_t:t,oe:i.Bt[0],_e:i.Bt[1],ue:i.Bt[2],ce:i.Bt[3],st:NaN,re:NaN,ne:NaN,se:NaN,he:NaN}}zs(){const t=this.Ts.As();this.ks=this.Ts.An().Us().map((i=>this.qs(i.Ys,i,t)))}}class Tt extends Ct{constructor(){super(...arguments),this.Os=new kt}qs(t,i,n){return Object.assign(Object.assign({},this.ae(t,i,n)),n.Es(t))}Ws(){const t=this.Ts.F();this.Os.tt({An:this.ks,Ks:this.Ps.yt().Ks(),ee:t.openVisible,te:t.thinBars,it:this.Cs})}}function Pt(t,i,n){return Math.min(Math.max(t,i),n)}function Rt(t,i,n){return i-t<=n}function Dt(t){return t<=0?NaN:Math.log(t)/Math.log(10)}function Ot(t){const i=Math.ceil(t);return i%2==0?i-1:i}class Bt extends ct{constructor(){super(...arguments),this.vs=null}ps(t,i){var n;const{context:s,mediaSize:e}=t,r=this.J,{de:h,fe:l,pe:a,ve:o}=i,_=null!==(n=r.ds)&&void 0!==n?n:e.height,u=e.height;if(null!==this.vs&&this.vs.topFillColor1===h&&this.vs.topFillColor2===l&&this.vs.bottomFillColor1===a&&this.vs.bottomFillColor2===o&&this.vs.baseLevelCoordinate===_&&this.vs.bottom===u)return this.vs.fillStyle;const c=s.createLinearGradient(0,0,0,u),d=Pt(_/u,0,1);return c.addColorStop(0,h),c.addColorStop(d,l),c.addColorStop(d,a),c.addColorStop(1,o),this.vs={topFillColor1:h,topFillColor2:l,bottomFillColor1:a,bottomFillColor2:o,fillStyle:c,baseLevelCoordinate:_,bottom:u},c}}class Et extends pt{constructor(){super(...arguments),this.me=null}ws(t,i){const{context:n,mediaSize:s}=t,e=this.J,{be:r,ge:h}=i,{ds:l}=e,a=s.height;if(null!==this.me&&this.me.topLineColor===r&&this.me.bottomLineColor===h&&this.me.baseLevelCoordinate===l&&this.me.bottom===a)return this.me.strokeStyle;const o=n.createLinearGradient(0,0,0,a),_=Pt(l/a,0,1);return o.addColorStop(0,r),o.addColorStop(_,r),o.addColorStop(_,h),o.addColorStop(1,h),this.me={topLineColor:r,bottomLineColor:h,strokeStyle:o,baseLevelCoordinate:l,bottom:a},o}}class At extends xt{constructor(t,i){super(t,i),this.Os=new R,this.we=new Bt,this.Me=new Et,this.Os.Y([this.we,this.Me])}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Es(t))}Ws(){const t=this.Ts.Tt();if(null===t)return;const i=this.Ts.F(),n=this.Ts.Ot().Dt(i.baseValue.price,t.Bt),s=this.Ps.yt().Ks();this.we.tt({nt:this.ks,rt:i.lineWidth,Ft:i.lineStyle,cs:i.lineType,ds:n,fs:!1,it:this.Cs,us:s}),this.Me.tt({nt:this.ks,rt:i.lineWidth,Ft:i.lineStyle,cs:i.lineType,ds:n,it:this.Cs,us:s})}}class Lt extends L{constructor(){super(...arguments),this.It=null,this.Gs=0}tt(t){this.It=t}Z(t){if(null===this.It||0===this.It.An.length||null===this.It.it)return;const{horizontalPixelRatio:i}=t;if(this.Gs=function(t,i){if(t>=2.5&&t<=4)return Math.floor(3*i);const n=1-.2*Math.atan(Math.max(4,t)-4)/(.5*Math.PI),s=Math.floor(t*n*i),e=Math.floor(t*i),r=Math.min(s,e);return Math.max(Math.floor(i),r)}(this.It.Ks,i),this.Gs>=2){Math.floor(i)%2!=this.Gs%2&&this.Gs--}const n=this.It.An;this.It.Se&&this.xe(t,n,this.It.it),this.It.ui&&this.ye(t,n,this.It.it);const s=this.ke(i);(!this.It.ui||this.Gs>2*s)&&this.Ce(t,n,this.It.it)}xe(t,i,n){if(null===this.It)return;const{context:s,horizontalPixelRatio:e,verticalPixelRatio:r}=t;let h="",l=Math.min(Math.floor(e),Math.floor(this.It.Ks*e));l=Math.max(Math.floor(e),Math.min(l,this.Gs));const a=Math.floor(.5*l);let o=null;for(let t=n.from;t2*l)N(s,o,u,_-o+1,c-u+1,l);else{const t=_-o+1;s.fillRect(o,u,t,c-u+1)}a=_}}Ce(t,i,n){if(null===this.It)return;const{context:s,horizontalPixelRatio:e,verticalPixelRatio:r}=t;let h="";const l=this.ke(e);for(let t=n.from;to||s.fillRect(_,a,u-_+1,o-a+1)}}}class zt extends Ct{constructor(){super(...arguments),this.Os=new Lt}qs(t,i,n){return Object.assign(Object.assign({},this.ae(t,i,n)),n.Es(t))}Ws(){const t=this.Ts.F();this.Os.tt({An:this.ks,Ks:this.Ps.yt().Ks(),Se:t.wickVisible,ui:t.borderVisible,it:this.Cs})}}class It extends L{constructor(){super(...arguments),this.It=null,this.Re=[]}tt(t){this.It=t,this.Re=[]}Z({context:t,horizontalPixelRatio:i,verticalPixelRatio:n}){if(null===this.It||0===this.It.nt.length||null===this.It.it)return;this.Re.length||this.De(i);const s=Math.max(1,Math.floor(n)),e=Math.round(this.It.Oe*n)-Math.floor(s/2),r=e+s;for(let i=this.It.it.from;is.Ee?s.ci=n.Ms-i-1:n.Ms=s.ci+i+1))}let s=Math.ceil(this.It.Ks*t);for(let t=this.It.it.from;t0&&s<4)for(let t=this.It.it.from;ts&&(i.Be>i.Ee?i.ci-=1:i.Ms+=1)}}}class Nt extends xt{constructor(){super(...arguments),this.Os=new It}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Es(t))}Ws(){const t={nt:this.ks,Ks:this.Ps.yt().Ks(),it:this.Cs,Oe:this.Ts.Ot().Dt(this.Ts.F().base,h(this.Ts.Tt()).Bt)};this.Os.tt(t)}}class Vt extends xt{constructor(){super(...arguments),this.Os=new vt}qs(t,i,n){return Object.assign(Object.assign({},this.Hs(t,i)),n.Es(t))}Ws(){const t=this.Ts.F(),i={nt:this.ks,Ft:t.lineStyle,cs:t.lineType,rt:t.lineWidth,it:this.Cs,us:this.Ps.yt().Ks()};this.Os.tt(i)}}const Ft=/[2-9]/g;class Wt{constructor(t=50){this.Ae=0,this.Le=1,this.ze=1,this.Ie={},this.Ne=new Map,this.Ve=t}Fe(){this.Ae=0,this.Ne.clear(),this.Le=1,this.ze=1,this.Ie={}}Si(t,i,n){return this.We(t,i,n).width}Mi(t,i,n){const s=this.We(t,i,n);return((s.actualBoundingBoxAscent||0)-(s.actualBoundingBoxDescent||0))/2}We(t,i,n){const s=n||Ft,e=String(i).replace(s,"0");if(this.Ne.has(e))return r(this.Ne.get(e)).je;if(this.Ae===this.Ve){const t=this.Ie[this.ze];delete this.Ie[this.ze],this.Ne.delete(t),this.ze++,this.Ae--}t.save(),t.textBaseline="middle";const h=t.measureText(e);return t.restore(),0===h.width&&i.length||(this.Ne.set(e,{je:h,$e:this.Le}),this.Ie[this.Le]=e,this.Ae++,this.Le++),h}}class jt{constructor(t){this.He=null,this.S=null,this.Ue="right",this.qe=t}Ye(t,i,n){this.He=t,this.S=i,this.Ue=n}X(t){null!==this.S&&null!==this.He&&this.He.X(t,this.S,this.qe,this.Ue)}}class $t{constructor(t,i,n){this.Xe=t,this.qe=new Wt(50),this.Ze=i,this.V=n,this.W=-1,this.jt=new jt(this.qe)}Mt(){const t=this.V.Ke(this.Ze);if(null===t)return null;const i=t.Ge(this.Ze)?t.Je():this.Ze.Ot();if(null===i)return null;const n=t.Qe(i);if("overlay"===n)return null;const s=this.V.tr();return s.T!==this.W&&(this.W=s.T,this.qe.Fe()),this.jt.Ye(this.Xe.Li(),s,n),this.jt}}class Ht extends L{constructor(){super(...arguments),this.It=null}tt(t){this.It=t}ir(t,i){var n;if(!(null===(n=this.It)||void 0===n?void 0:n.Ct))return null;const{et:s,rt:e,nr:r}=this.It;return i>=s-e-7&&i<=s+e+7?{sr:this.It,nr:r}:null}Z({context:t,bitmapSize:i,horizontalPixelRatio:e,verticalPixelRatio:r}){if(null===this.It)return;if(!1===this.It.Ct)return;const h=Math.round(this.It.et*r);h<0||h>i.height||(t.lineCap="butt",t.strokeStyle=this.It.D,t.lineWidth=Math.floor(this.It.rt*e),n(t,this.It.Ft),s(t,h,0,i.width))}}class Ut{constructor(t){this.er={et:0,D:"rgba(0, 0, 0, 0)",rt:1,Ft:0,Ct:!1},this.rr=new Ht,this.vt=!0,this.Ts=t,this.Ps=t.Ut(),this.rr.tt(this.er)}gt(){this.vt=!0}Mt(){return this.Ts.Ct()?(this.vt&&(this.hr(),this.vt=!1),this.rr):null}}class qt extends Ut{constructor(t){super(t)}hr(){this.er.Ct=!1;const t=this.Ts.Ot(),i=t.lr().lr;if(2!==i&&3!==i)return;const n=this.Ts.F();if(!n.baseLineVisible||!this.Ts.Ct())return;const s=this.Ts.Tt();null!==s&&(this.er.Ct=!0,this.er.et=t.Dt(s.Bt,s.Bt),this.er.D=n.baseLineColor,this.er.rt=n.baseLineWidth,this.er.Ft=n.baseLineStyle)}}class Yt extends L{constructor(){super(...arguments),this.It=null}tt(t){this.It=t}ar(){return this.It}Z({context:t,horizontalPixelRatio:i,verticalPixelRatio:n}){const s=this.It;if(null===s)return;const e=Math.max(1,Math.floor(i)),r=e%2/2,h=Math.round(s.Ee.x*i)+r,l=s.Ee.y*n;t.fillStyle=s._r,t.beginPath();const a=Math.max(2,1.5*s.ur)*i;t.arc(h,l,a,0,2*Math.PI,!1),t.fill(),t.fillStyle=s.cr,t.beginPath(),t.arc(h,l,s.lt*i,0,2*Math.PI,!1),t.fill(),t.lineWidth=e,t.strokeStyle=s.dr,t.beginPath(),t.arc(h,l,s.lt*i+e/2,0,2*Math.PI,!1),t.stroke()}}const Xt=[{pr:0,vr:.25,mr:4,br:10,gr:.25,wr:0,Mr:.4,Sr:.8},{pr:.25,vr:.525,mr:10,br:14,gr:0,wr:0,Mr:.8,Sr:0},{pr:.525,vr:1,mr:14,br:14,gr:0,wr:0,Mr:0,Sr:0}];function Zt(t,i,n,s){return function(t,i){if("transparent"===t)return t;const n=p(t),s=n[3];return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${i*s})`}(t,n+(s-n)*i)}function Kt(t,i){const n=t%2600/2600;let s;for(const t of Xt)if(n>=t.pr&&n<=t.vr){s=t;break}e(void 0!==s,"Last price animation internal logic error");const r=(n-s.pr)/(s.vr-s.pr);return{cr:Zt(i,r,s.gr,s.wr),dr:Zt(i,r,s.Mr,s.Sr),lt:(h=r,l=s.mr,a=s.br,l+(a-l)*h)};var h,l,a}class Gt{constructor(t){this.jt=new Yt,this.vt=!0,this.yr=!0,this.kr=performance.now(),this.Cr=this.kr-1,this.Tr=t}Pr(){this.Cr=this.kr-1,this.gt()}Rr(){if(this.gt(),2===this.Tr.F().lastPriceAnimation){const t=performance.now(),i=this.Cr-t;if(i>0)return void(i<650&&(this.Cr+=2600));this.kr=t,this.Cr=t+2600}}gt(){this.vt=!0}Dr(){this.yr=!0}Ct(){return 0!==this.Tr.F().lastPriceAnimation}Or(){switch(this.Tr.F().lastPriceAnimation){case 0:return!1;case 1:return!0;case 2:return performance.now()<=this.Cr}}Mt(){return this.vt?(this.St(),this.vt=!1,this.yr=!1):this.yr&&(this.Br(),this.yr=!1),this.jt}St(){this.jt.tt(null);const t=this.Tr.Ut().yt(),i=t.Ns(),n=this.Tr.Tt();if(null===i||null===n)return;const s=this.Tr.Er(!0);if(s.Ar||!i.Lr(s.Ys))return;const e={x:t.zt(s.Ys),y:this.Tr.Ot().Dt(s.ut,n.Bt)},r=s.D,h=this.Tr.F().lineWidth,l=Kt(this.zr(),r);this.jt.tt({_r:r,ur:h,cr:l.cr,dr:l.dr,lt:l.lt,Ee:e})}Br(){const t=this.jt.ar();if(null!==t){const i=Kt(this.zr(),t._r);t.cr=i.cr,t.dr=i.dr,t.lt=i.lt}}zr(){return this.Or()?performance.now()-this.kr:2599}}function Jt(t,i){return Ot(Math.min(Math.max(t,12),30)*i)}function Qt(t,i){switch(t){case"arrowDown":case"arrowUp":return Jt(i,1);case"circle":return Jt(i,.8);case"square":return Jt(i,.7)}}function ti(t){return function(t){const i=Math.ceil(t);return i%2!=0?i-1:i}(Jt(t,1))}function ii(t){return Math.max(Jt(t,.1),3)}function ni(t,i,n,s,e){const r=Qt("square",n),h=(r-1)/2,l=t-h,a=i-h;return s>=l&&s<=l+r&&e>=a&&e<=a+r}function si(t,i,n,s,e){const r=(Qt("arrowUp",e)-1)/2,h=(Ot(e/2)-1)/2;i.beginPath(),t?(i.moveTo(n-r,s),i.lineTo(n,s-r),i.lineTo(n+r,s),i.lineTo(n+h,s),i.lineTo(n+h,s+r),i.lineTo(n-h,s+r),i.lineTo(n-h,s)):(i.moveTo(n-r,s),i.lineTo(n,s+r),i.lineTo(n+r,s),i.lineTo(n+h,s),i.lineTo(n+h,s-r),i.lineTo(n-h,s-r),i.lineTo(n-h,s)),i.fill()}function ei(t,i,n,s,e,r){return ni(i,n,s,e,r)}class ri extends D{constructor(){super(...arguments),this.It=null,this.qe=new Wt,this.W=-1,this.j="",this.Ir=""}tt(t){this.It=t}Ye(t,i){this.W===t&&this.j===i||(this.W=t,this.j=i,this.Ir=T(t,i),this.qe.Fe())}ir(t,i){if(null===this.It||null===this.It.it)return null;for(let n=this.It.it.from;n=t&&e<=t+n&&r>=i-h&&r<=i+h}(t.Gt.st,t.Gt.et,t.Gt.$i,t.Gt.Lt,i,n))||function(t,i,n){if(0===t.Vs)return!1;switch(t.Fr){case"arrowDown":case"arrowUp":return ei(0,t.st,t.et,t.Vs,i,n);case"circle":return function(t,i,n,s,e){const r=2+Qt("circle",n)/2,h=t-s,l=i-e;return Math.sqrt(h*h+l*l)<=r}(t.st,t.et,t.Vs,i,n);case"square":return ni(t.st,t.et,t.Vs,i,n)}}(t,i,n)}function ai(t,i,n,s,e,r,h,l,a){const o=g(n)?n:n.ce,_=g(n)?n:n._e,u=g(n)?n:n.ue,c=g(i.size)?Math.max(i.size,0):1,d=ti(l.Ks())*c,f=d/2;switch(t.Vs=d,i.position){case"inBar":return t.et=h.Dt(o,a),void(void 0!==t.Gt&&(t.Gt.et=t.et+f+r+.6*e));case"aboveBar":return t.et=h.Dt(_,a)-f-s.Wr,void 0!==t.Gt&&(t.Gt.et=t.et-f-.6*e,s.Wr+=1.2*e),void(s.Wr+=d+r);case"belowBar":return t.et=h.Dt(u,a)+f+s.jr,void 0!==t.Gt&&(t.Gt.et=t.et+f+r+.6*e,s.jr+=1.2*e),void(s.jr+=d+r)}i.position}class oi{constructor(t,i){this.vt=!0,this.$r=!0,this.Hr=!0,this.Ur=null,this.jt=new ri,this.Tr=t,this.Hi=i,this.It={nt:[],it:null}}gt(t){this.vt=!0,this.Hr=!0,"data"===t&&(this.$r=!0)}Mt(t){if(!this.Tr.Ct())return null;this.vt&&this.qr();const i=this.Hi.F().layout;return this.jt.Ye(i.fontSize,i.fontFamily),this.jt.tt(this.It),this.jt}Yr(){if(this.Hr){if(this.Tr.Xr().length>0){const t=this.Hi.yt().Ks(),i=ii(t),n=1.5*ti(t)+2*i;this.Ur={above:n,below:n}}else this.Ur=null;this.Hr=!1}return this.Ur}qr(){const t=this.Tr.Ot(),i=this.Hi.yt(),n=this.Tr.Xr();this.$r&&(this.It.nt=n.map((t=>({_t:t.time,st:0,et:0,Vs:0,Fr:t.shape,D:t.color,Nr:t.internalId,nr:t.id,Gt:void 0}))),this.$r=!1);const s=this.Hi.F().layout;this.It.it=null;const e=i.Ns();if(null===e)return;const r=this.Tr.Tt();if(null===r)return;if(0===this.It.nt.length)return;let h=NaN;const l=ii(i.Ks()),a={Wr:l,jr:l};this.It.it=Mt(this.It.nt,e,!0);for(let e=this.It.it.from;e0&&(_.Gt={Vr:o.text,st:0,et:0,$i:0,Lt:0});const u=this.Tr.Zr(o.time);null!==u&&ai(_,o,u,a,s.fontSize,l,t,i,r.Bt)}this.vt=!1}}class _i extends Ut{constructor(t){super(t)}hr(){const t=this.er;t.Ct=!1;const i=this.Ts.F();if(!i.priceLineVisible||!this.Ts.Ct())return;const n=this.Ts.Er(0===i.priceLineSource);n.Ar||(t.Ct=!0,t.et=n.yi,t.D=this.Ts.Kr(n.D),t.rt=i.priceLineWidth,t.Ft=i.priceLineStyle)}}class ui extends U{constructor(t){super(),this.$t=t}zi(t,i,n){t.Ct=!1,i.Ct=!1;const s=this.$t;if(!s.Ct())return;const e=s.F(),r=e.lastValueVisible,h=""!==s.Gr(),l=0===e.seriesLastValueMode,a=s.Er(!1);if(a.Ar)return;r&&(t.Gt=this.Jr(a,r,l),t.Ct=0!==t.Gt.length),(h||l)&&(i.Gt=this.Qr(a,r,h,l),i.Ct=i.Gt.length>0);const o=s.Kr(a.D),_=v(o);n.t=_.t,n.yi=a.yi,i.Et=s.Ut().At(a.yi/s.Ot().Lt()),t.Et=o,t.D=_.i,i.D=_.i}Qr(t,i,n,s){let e="";const r=this.$t.Gr();return n&&0!==r.length&&(e+=`${r} `),i&&s&&(e+=this.$t.Ot().th()?t.ih:t.nh),e.trim()}Jr(t,i,n){return i?n?this.$t.Ot().th()?t.nh:t.ih:t.Gt:""}}class ci{constructor(t,i){this.sh=t,this.eh=i}rh(t){return null!==t&&(this.sh===t.sh&&this.eh===t.eh)}hh(){return new ci(this.sh,this.eh)}lh(){return this.sh}ah(){return this.eh}oh(){return this.eh-this.sh}Vi(){return this.eh===this.sh||Number.isNaN(this.eh)||Number.isNaN(this.sh)}Qn(t){return null===t?this:new ci(Math.min(this.lh(),t.lh()),Math.max(this.ah(),t.ah()))}_h(t){if(!g(t))return;if(0===this.eh-this.sh)return;const i=.5*(this.eh+this.sh);let n=this.eh-i,s=this.sh-i;n*=t,s*=t,this.eh=i+n,this.sh=i+s}uh(t){g(t)&&(this.eh+=t,this.sh+=t)}dh(){return{minValue:this.sh,maxValue:this.eh}}static fh(t){return null===t?null:new ci(t.minValue,t.maxValue)}}class di{constructor(t,i){this.ph=t,this.mh=i||null}bh(){return this.ph}gh(){return this.mh}dh(){return null===this.ph?null:{priceRange:this.ph.dh(),margins:this.mh||void 0}}static fh(t){return null===t?null:new di(ci.fh(t.priceRange),t.margins)}}class fi extends Ut{constructor(t,i){super(t),this.wh=i}hr(){const t=this.er;t.Ct=!1;const i=this.wh.F();if(!this.Ts.Ct()||!i.lineVisible)return;const n=this.wh.Mh();null!==n&&(t.Ct=!0,t.et=n,t.D=i.color,t.rt=i.lineWidth,t.Ft=i.lineStyle,t.nr=this.wh.F().id)}}class pi extends U{constructor(t,i){super(),this.Tr=t,this.wh=i}zi(t,i,n){t.Ct=!1,i.Ct=!1;const s=this.wh.F(),e=s.axisLabelVisible,r=""!==s.title,h=this.Tr;if(!e||!h.Ct())return;const l=this.wh.Mh();if(null===l)return;r&&(i.Gt=s.title,i.Ct=!0),i.Et=h.Ut().At(l/h.Ot().Lt()),t.Gt=this.Sh(s.price),t.Ct=!0;const a=v(s.axisLabelColor||s.color);n.t=a.t;const o=s.axisLabelTextColor||a.i;t.D=o,i.D=o,n.yi=l}Sh(t){const i=this.Tr.Tt();return null===i?"":this.Tr.Ot().Fi(t,i.Bt)}}class vi{constructor(t,i){this.Tr=t,this.un=i,this.xh=new fi(t,this),this.Xe=new pi(t,this),this.yh=new $t(this.Xe,t,t.Ut())}kh(t){b(this.un,t),this.gt(),this.Tr.Ut().Ch()}F(){return this.un}Th(){return this.xh}Ph(){return this.yh}Rh(){return this.Xe}gt(){this.xh.gt(),this.Xe.gt()}Mh(){const t=this.Tr,i=t.Ot();if(t.Ut().yt().Vi()||i.Vi())return null;const n=t.Tt();return null===n?null:i.Dt(this.un.price,n.Bt)}}class mi extends K{constructor(t){super(),this.Hi=t}Ut(){return this.Hi}}const bi={Bar:(t,i,n,s)=>{var e;const r=i.upColor,a=i.downColor,o=h(t(n,s)),_=l(o.Bt[0])<=l(o.Bt[3]);return{ie:null!==(e=o.D)&&void 0!==e?e:_?r:a}},Candlestick:(t,i,n,s)=>{var e,r,a;const o=i.upColor,_=i.downColor,u=i.borderUpColor,c=i.borderDownColor,d=i.wickUpColor,f=i.wickDownColor,p=h(t(n,s)),v=l(p.Bt[0])<=l(p.Bt[3]);return{ie:null!==(e=p.D)&&void 0!==e?e:v?o:_,Pe:null!==(r=p.Et)&&void 0!==r?r:v?u:c,Te:null!==(a=p.Dh)&&void 0!==a?a:v?d:f}},Area:(t,i,n,s)=>{var e,r,l,a;const o=h(t(n,s));return{ie:null!==(e=o.ot)&&void 0!==e?e:i.lineColor,ot:null!==(r=o.ot)&&void 0!==r?r:i.lineColor,bs:null!==(l=o.bs)&&void 0!==l?l:i.topColor,gs:null!==(a=o.gs)&&void 0!==a?a:i.bottomColor}},Baseline:(t,i,n,s)=>{var e,r,l,a,o,_;const u=h(t(n,s));return{ie:u.Bt[3]>=i.baseValue.price?i.topLineColor:i.bottomLineColor,be:null!==(e=u.be)&&void 0!==e?e:i.topLineColor,ge:null!==(r=u.ge)&&void 0!==r?r:i.bottomLineColor,de:null!==(l=u.de)&&void 0!==l?l:i.topFillColor1,fe:null!==(a=u.fe)&&void 0!==a?a:i.topFillColor2,pe:null!==(o=u.pe)&&void 0!==o?o:i.bottomFillColor1,ve:null!==(_=u.ve)&&void 0!==_?_:i.bottomFillColor2}},Line:(t,i,n,s)=>{var e,r;const l=h(t(n,s));return{ie:null!==(e=l.D)&&void 0!==e?e:i.color,ot:null!==(r=l.D)&&void 0!==r?r:i.color}},Histogram:(t,i,n,s)=>{var e;return{ie:null!==(e=h(t(n,s)).D)&&void 0!==e?e:i.color}}};class gi{constructor(t){this.Oh=(t,i)=>void 0!==i?i.Bt:this.Tr.An().Bh(t),this.Tr=t,this.Eh=bi[t.Ah()]}Es(t,i){return this.Eh(this.Oh,this.Tr.F(),t,i)}}var wi;!function(t){t[t.NearestLeft=-1]="NearestLeft",t[t.None=0]="None",t[t.NearestRight=1]="NearestRight"}(wi||(wi={}));const Mi=30;class Si{constructor(){this.Lh=[],this.zh=new Map,this.Ih=new Map}Nh(){return this.Vs()>0?this.Lh[this.Lh.length-1]:null}Vh(){return this.Vs()>0?this.Fh(0):null}En(){return this.Vs()>0?this.Fh(this.Lh.length-1):null}Vs(){return this.Lh.length}Vi(){return 0===this.Vs()}Lr(t){return null!==this.Wh(t,0)}Bh(t){return this.jh(t)}jh(t,i=0){const n=this.Wh(t,i);return null===n?null:Object.assign(Object.assign({},this.$h(n)),{Ys:this.Fh(n)})}Us(){return this.Lh}Hh(t,i,n){if(this.Vi())return null;let s=null;for(const e of n){s=xi(s,this.Uh(t,i,e))}return s}tt(t){this.Ih.clear(),this.zh.clear(),this.Lh=t}Fh(t){return this.Lh[t].Ys}$h(t){return this.Lh[t]}Wh(t,i){const n=this.qh(t);if(null===n&&0!==i)switch(i){case-1:return this.Yh(t);case 1:return this.Xh(t);default:throw new TypeError("Unknown search mode")}return n}Yh(t){let i=this.Zh(t);return i>0&&(i-=1),i!==this.Lh.length&&this.Fh(i)t.Ysi.Ys>t))}Gh(t,i,n){let s=null;for(let e=t;es.Qh&&(s.Qh=t)))}return s}Uh(t,i,n){if(this.Vi())return null;let s=null;const e=h(this.Vh()),r=h(this.En()),l=Math.max(t,e),a=Math.min(i,r),o=Math.ceil(l/Mi)*Mi,_=Math.max(o,Math.floor(a/Mi)*Mi);{const t=this.Zh(l),e=this.Kh(Math.min(a,o,i));s=xi(s,this.Gh(t,e,n))}let u=this.zh.get(n);void 0===u&&(u=new Map,this.zh.set(n,u));for(let t=Math.max(o+1,l);t<_;t+=Mi){const i=Math.floor(t/Mi);let e=u.get(i);if(void 0===e){const t=this.Zh(i*Mi),s=this.Kh((i+1)*Mi-1);e=this.Gh(t,s,n),u.set(i,e)}s=xi(s,e)}{const t=this.Zh(_),i=this.Kh(a);s=xi(s,this.Gh(t,i,n))}return s}}function xi(t,i){if(null===t)return i;if(null===i)return t;return{Jh:Math.min(t.Jh,i.Jh),Qh:Math.max(t.Qh,i.Qh)}}class yi extends mi{constructor(t,i,n){super(t),this.It=new Si,this.xh=new _i(this),this.tl=[],this.il=new qt(this),this.nl=null,this.sl=null,this.el=[],this.rl=[],this.hl=null,this.un=i,this.ll=n;const s=new ui(this);this.rn=[s],this.yh=new $t(s,this,t),"Area"!==n&&"Line"!==n&&"Baseline"!==n||(this.nl=new Gt(this)),this.al(),this.ol()}M(){null!==this.hl&&clearTimeout(this.hl)}Kr(t){return this.un.priceLineColor||t}Er(t){const i={Ar:!0},n=this.Ot();if(this.Ut().yt().Vi()||n.Vi()||this.It.Vi())return i;const s=this.Ut().yt().Ns(),e=this.Tt();if(null===s||null===e)return i;let r,h;if(t){const t=this.It.Nh();if(null===t)return i;r=t,h=t.Ys}else{const t=this.It.jh(s.ci(),-1);if(null===t)return i;if(r=this.It.Bh(t.Ys),null===r)return i;h=t.Ys}const l=r.Bt[3],a=this.As().Es(h,{Bt:r}),o=n.Dt(l,e.Bt);return{Ar:!1,ut:l,Gt:n.Fi(l,e.Bt),ih:n._l(l),nh:n.ul(l,e.Bt),D:a.ie,yi:o,Ys:h}}As(){return null!==this.sl||(this.sl=new gi(this)),this.sl}F(){return this.un}kh(t){const i=t.priceScaleId;void 0!==i&&i!==this.un.priceScaleId&&this.Ut().cl(this,i),b(this.un,t),void 0!==t.priceFormat&&(this.al(),this.Ut().dl()),this.Ut().fl(this),this.Ut().pl(),this.bn.gt("options")}tt(t,i){this.It.tt(t),this.vl(),this.bn.gt("data"),this.cn.gt("data"),null!==this.nl&&(i&&i.ml?this.nl.Rr():0===t.length&&this.nl.Pr());const n=this.Ut().Ke(this);this.Ut().bl(n),this.Ut().fl(this),this.Ut().pl(),this.Ut().Ch()}gl(t){this.el=t,this.vl();const i=this.Ut().Ke(this);this.cn.gt("data"),this.Ut().bl(i),this.Ut().fl(this),this.Ut().pl(),this.Ut().Ch()}wl(){return this.el}Xr(){return this.rl}Ml(t){const i=new vi(this,t);return this.tl.push(i),this.Ut().fl(this),i}Sl(t){const i=this.tl.indexOf(t);-1!==i&&this.tl.splice(i,1),this.Ut().fl(this)}Ah(){return this.ll}Tt(){const t=this.xl();return null===t?null:{Bt:t.Bt[3],yl:t._t}}xl(){const t=this.Ut().yt().Ns();if(null===t)return null;const i=t.Ms();return this.It.jh(i,1)}An(){return this.It}Zr(t){const i=this.It.Bh(t);return null===i?null:"Bar"===this.ll||"Candlestick"===this.ll?{oe:i.Bt[0],_e:i.Bt[1],ue:i.Bt[2],ce:i.Bt[3]}:i.Bt[3]}kl(t){const i=this.nl;return null!==i&&i.Ct()?(null===this.hl&&i.Or()&&(this.hl=setTimeout((()=>{this.hl=null,this.Ut().Cl()}),0)),i.Dr(),[i]):[]}Tn(){const t=[];this.Tl()||t.push(this.il),t.push(this.bn,this.xh,this.cn);const i=this.tl.map((t=>t.Th()));return t.push(...i),t}Ji(t){return[this.yh,...this.tl.map((t=>t.Ph()))]}Pn(t,i){if(i!==this.Yi&&!this.Tl())return[];const n=[...this.rn];for(const t of this.tl)n.push(t.Rh());return n}Pl(t,i){if(void 0!==this.un.autoscaleInfoProvider){const n=this.un.autoscaleInfoProvider((()=>{const n=this.Rl(t,i);return null===n?null:n.dh()}));return di.fh(n)}return this.Rl(t,i)}Dl(){return this.un.priceFormat.minMove}Ol(){return this.Bl}Dn(){var t;this.bn.gt(),this.cn.gt();for(const t of this.rn)t.gt();for(const t of this.tl)t.gt();this.xh.gt(),this.il.gt(),null===(t=this.nl)||void 0===t||t.gt()}Ot(){return h(super.Ot())}kt(t){if(!(("Line"===this.ll||"Area"===this.ll||"Baseline"===this.ll)&&this.un.crosshairMarkerVisible))return null;const i=this.It.Bh(t);if(null===i)return null;return{ut:i.Bt[3],lt:this.El(),Et:this.Al(),Rt:this.Ll(),Pt:this.zl(t)}}Gr(){return this.un.title}Ct(){return this.un.visible}Tl(){return!Q(this.Ot().Il())}Rl(t,i){if(!w(t)||!w(i)||this.It.Vi())return null;const n="Line"===this.ll||"Area"===this.ll||"Baseline"===this.ll||"Histogram"===this.ll?[3]:[2,1],s=this.It.Hh(t,i,n);let e=null!==s?new ci(s.Jh,s.Qh):null;if("Histogram"===this.Ah()){const t=this.un.base,i=new ci(t,t);e=null!==e?e.Qn(i):i}return new di(e,this.cn.Yr())}El(){switch(this.ll){case"Line":case"Area":case"Baseline":return this.un.crosshairMarkerRadius}return 0}Al(){switch(this.ll){case"Line":case"Area":case"Baseline":{const t=this.un.crosshairMarkerBorderColor;if(0!==t.length)return t}}return null}Ll(){switch(this.ll){case"Line":case"Area":case"Baseline":return this.un.crosshairMarkerBorderWidth}return 0}zl(t){switch(this.ll){case"Line":case"Area":case"Baseline":{const t=this.un.crosshairMarkerBackgroundColor;if(0!==t.length)return t}}return this.As().Es(t).ie}al(){switch(this.un.priceFormat.type){case"custom":this.Bl={format:this.un.priceFormat.formatter};break;case"volume":this.Bl=new rt(this.un.priceFormat.precision);break;case"percent":this.Bl=new et(this.un.priceFormat.precision);break;default:{const t=Math.pow(10,this.un.priceFormat.precision);this.Bl=new st(t,this.un.priceFormat.minMove*t)}}null!==this.Yi&&this.Yi.Nl()}vl(){const t=this.Ut().yt();if(!t.Vl()||this.It.Vi())return void(this.rl=[]);const i=h(this.It.Vh());this.rl=this.el.map(((n,s)=>{const e=h(t.Fl(n.time,!0)),r=et instanceof yi)).reduce(((t,s)=>{if(n.Ge(s)||!s.Ct())return t;const e=s.Ot(),r=s.An();if(e.Vi()||!r.Lr(i))return t;const h=r.Bh(i);if(null===h)return t;const a=l(s.Tt());return t.concat([e.Dt(h.Bt[3],a.Bt)])}),[]);if(0===a.length)return s;a.sort(((t,i)=>Math.abs(t-h)-Math.abs(i-h)));const o=a[0];return s=e.pn(o,r),s}}class Ci extends L{constructor(){super(...arguments),this.It=null}tt(t){this.It=t}Z({context:t,bitmapSize:i,horizontalPixelRatio:s,verticalPixelRatio:e}){if(null===this.It)return;const r=Math.max(1,Math.floor(s));t.lineWidth=r,function(t,i){t.save(),t.lineWidth%2&&t.translate(.5,.5),i(),t.restore()}(t,(()=>{const l=h(this.It);if(l.$l){t.strokeStyle=l.Hl,n(t,l.Ul),t.beginPath();for(const n of l.ql){const e=Math.round(n.Yl*s);t.moveTo(e,-r),t.lineTo(e,i.height+r)}t.stroke()}if(l.Xl){t.strokeStyle=l.Zl,n(t,l.Kl),t.beginPath();for(const n of l.Gl){const s=Math.round(n.Yl*e);t.moveTo(-r,s),t.lineTo(i.width+r,s)}t.stroke()}}))}}class Ti{constructor(t){this.jt=new Ci,this.vt=!0,this.tn=t}gt(){this.vt=!0}Mt(){if(this.vt){const t=this.tn.Ut().F().grid,i={Xl:t.horzLines.visible,$l:t.vertLines.visible,Zl:t.horzLines.color,Hl:t.vertLines.color,Kl:t.horzLines.style,Ul:t.vertLines.style,Gl:this.tn.fn().Jl(),ql:this.tn.Ut().yt().Jl()||[]};this.jt.tt(i),this.vt=!1}return this.jt}}class Pi{constructor(t){this.bn=new Ti(t)}Th(){return this.bn}}const Ri={Ql:4,ta:1e-4};function Di(t,i){const n=100*(t-i)/i;return i<0?-n:n}function Oi(t,i){const n=Di(t.lh(),i),s=Di(t.ah(),i);return new ci(n,s)}function Bi(t,i){const n=100*(t-i)/i+100;return i<0?-n:n}function Ei(t,i){const n=Bi(t.lh(),i),s=Bi(t.ah(),i);return new ci(n,s)}function Ai(t,i){const n=Math.abs(t);if(n<1e-15)return 0;const s=Dt(n+i.ta)+i.Ql;return t<0?-s:s}function Li(t,i){const n=Math.abs(t);if(n<1e-15)return 0;const s=Math.pow(10,n-i.Ql)-i.ta;return t<0?-s:s}function zi(t,i){if(null===t)return null;const n=Ai(t.lh(),i),s=Ai(t.ah(),i);return new ci(n,s)}function Ii(t,i){if(null===t)return null;const n=Li(t.lh(),i),s=Li(t.ah(),i);return new ci(n,s)}function Ni(t){if(null===t)return Ri;const i=Math.abs(t.ah()-t.lh());if(i>=1||i<1e-15)return Ri;const n=Math.ceil(Math.abs(Math.log10(i))),s=Ri.Ql+n;return{Ql:s,ta:1/Math.pow(10,s)}}class Vi{constructor(t,i){if(this.ia=t,this.na=i,function(t){if(t<0)return!1;for(let i=t;i>1;i/=10)if(i%10!=0)return!1;return!0}(this.ia))this.sa=[2,2.5,2];else{this.sa=[];for(let t=this.ia;1!==t;){if(t%2==0)this.sa.push(2),t/=2;else{if(t%5!=0)throw new Error("unexpected base");this.sa.push(2,2.5),t/=5}if(this.sa.length>100)throw new Error("something wrong with base")}}}ea(t,i,n){const s=0===this.ia?0:1/this.ia;let e=Math.pow(10,Math.max(0,Math.ceil(Dt(t-i)))),r=0,h=this.na[0];for(;;){const t=Rt(e,s,1e-14)&&e>s+1e-14,i=Rt(e,n*h,1e-14),l=Rt(e,1,1e-14);if(!(t&&i&&l))break;e/=h,h=this.na[++r%this.na.length]}if(e<=s+1e-14&&(e=s),e=Math.max(1,e),this.sa.length>0&&(l=e,a=1,o=1e-14,Math.abs(l-a)s+1e-14;)e/=h,h=this.sa[++r%this.sa.length];var l,a,o;return e}}class Fi{constructor(t,i,n,s){this.ra=[],this.Ii=t,this.ia=i,this.ha=n,this.la=s}ea(t,i){if(t=o?1:-1;let d=null,f=0;for(let n=a-u;n>o;n-=_){const s=this.la(n,i,!0);null!==d&&Math.abs(s-d)l||(fh(t.Zi())-h(i.Zi())))}var ji;!function(t){t[t.Normal=0]="Normal",t[t.Logarithmic=1]="Logarithmic",t[t.Percentage=2]="Percentage",t[t.IndexedTo100=3]="IndexedTo100"}(ji||(ji={}));const $i=new et,Hi=new st(100,1);class Ui{constructor(t,i,n,s){this.fa=0,this.pa=null,this.ph=null,this.va=null,this.ma={ba:!1,ga:null},this.wa=0,this.Ma=0,this.Sa=new m,this.xa=new m,this.ya=[],this.ka=null,this.Ca=null,this.Ta=null,this.Pa=null,this.Bl=Hi,this.Ra=Ni(null),this.Da=t,this.un=i,this.Oa=n,this.Ba=s,this.Ea=new Fi(this,100,this.Aa.bind(this),this.La.bind(this))}Il(){return this.Da}F(){return this.un}kh(t){if(b(this.un,t),this.Nl(),void 0!==t.mode&&this.za({lr:t.mode}),void 0!==t.scaleMargins){const i=r(t.scaleMargins.top),n=r(t.scaleMargins.bottom);if(i<0||i>1)throw new Error(`Invalid top margin - expect value between 0 and 1, given=${i}`);if(n<0||n>1||i+n>1)throw new Error(`Invalid bottom margin - expect value between 0 and 1, given=${n}`);if(i+n>1)throw new Error(`Invalid margins - sum of margins must be less than 1, given=${i+n}`);this.Ia(),this.Ca=null}}Na(){return this.un.autoScale}da(){return 1===this.un.mode}th(){return 2===this.un.mode}Va(){return 3===this.un.mode}lr(){return{Fn:this.un.autoScale,Fa:this.un.invertScale,lr:this.un.mode}}za(t){const i=this.lr();let n=null;void 0!==t.Fn&&(this.un.autoScale=t.Fn),void 0!==t.lr&&(this.un.mode=t.lr,2!==t.lr&&3!==t.lr||(this.un.autoScale=!0),this.ma.ba=!1),1===i.lr&&t.lr!==i.lr&&(!function(t,i){if(null===t)return!1;const n=Li(t.lh(),i),s=Li(t.ah(),i);return isFinite(n)&&isFinite(s)}(this.ph,this.Ra)?this.un.autoScale=!0:(n=Ii(this.ph,this.Ra),null!==n&&this.Wa(n))),1===t.lr&&t.lr!==i.lr&&(n=zi(this.ph,this.Ra),null!==n&&this.Wa(n));const s=i.lr!==this.un.mode;s&&(2===i.lr||this.th())&&this.Nl(),s&&(3===i.lr||this.Va())&&this.Nl(),void 0!==t.Fa&&i.Fa!==t.Fa&&(this.un.invertScale=t.Fa,this.ja()),this.xa.m(i,this.lr())}$a(){return this.xa}T(){return this.Oa.fontSize}Lt(){return this.fa}Ha(t){this.fa!==t&&(this.fa=t,this.Ia(),this.Ca=null)}Ua(){if(this.pa)return this.pa;const t=this.Lt()-this.qa()-this.Ya();return this.pa=t,t}bh(){return this.Xa(),this.ph}Wa(t,i){const n=this.ph;(i||null===n&&null!==t||null!==n&&!n.rh(t))&&(this.Ca=null,this.ph=t)}Vi(){return this.Xa(),0===this.fa||!this.ph||this.ph.Vi()}Za(t){return this.Fa()?t:this.Lt()-1-t}Dt(t,i){return this.th()?t=Di(t,i):this.Va()&&(t=Bi(t,i)),this.La(t,i)}$s(t,i,n){this.Xa();const s=this.Ya(),e=h(this.bh()),r=e.lh(),l=e.ah(),a=this.Ua()-1,o=this.Fa(),_=a/(l-r),u=void 0===n?0:n.from,c=void 0===n?t.length:n.to,d=this.Ka();for(let n=u;nt.Dn()))}Nl(){this.Ca=null;const t=this.uo();let i=100;null!==t&&(i=Math.round(1/t.Dl())),this.Bl=Hi,this.th()?(this.Bl=$i,i=100):this.Va()?(this.Bl=new st(100,1),i=100):null!==t&&(this.Bl=t.Ol()),this.Ea=new Fi(this,i,this.Aa.bind(this),this.La.bind(this)),this.Ea.oa()}io(){this.ka=null}uo(){return this.ya[0]||null}qa(){return this.Fa()?this.un.scaleMargins.bottom*this.Lt()+this.Ma:this.un.scaleMargins.top*this.Lt()+this.wa}Ya(){return this.Fa()?this.un.scaleMargins.top*this.Lt()+this.wa:this.un.scaleMargins.bottom*this.Lt()+this.Ma}Xa(){this.ma.ba||(this.ma.ba=!0,this.fo())}Ia(){this.pa=null}La(t,i){if(this.Xa(),this.Vi())return 0;t=this.da()&&t?Ai(t,this.Ra):t;const n=h(this.bh()),s=this.Ya()+(this.Ua()-1)*(t-n.lh())/n.oh();return this.Za(s)}Aa(t,i){if(this.Xa(),this.Vi())return 0;const n=this.Za(t),s=h(this.bh()),e=s.lh()+s.oh()*((n-this.Ya())/(this.Ua()-1));return this.da()?Li(e,this.Ra):e}ja(){this.Ca=null,this.Ea.oa()}fo(){const t=this.ma.ga;if(null===t)return;let i=null;const n=this.co();let s=0,e=0;for(const r of n){if(!r.Ct())continue;const n=r.Tt();if(null===n)continue;const l=r.Pl(t.Ms(),t.ci());let a=l&&l.bh();if(null!==a){switch(this.un.mode){case 1:a=zi(a,this.Ra);break;case 2:a=Oi(a,n.Bt);break;case 3:a=Ei(a,n.Bt)}if(i=null===i?a:i.Qn(h(a)),null!==l){const t=l.gh();null!==t&&(s=Math.max(s,t.above),e=Math.max(s,t.below))}}}if(s===this.wa&&e===this.Ma||(this.wa=s,this.Ma=e,this.Ca=null,this.Ia()),null!==i){if(i.lh()===i.ah()){const t=this.uo(),n=5*(null===t||this.th()||this.Va()?1:t.Dl());this.da()&&(i=Ii(i,this.Ra)),i=new ci(i.lh()-n,i.ah()+n),this.da()&&(i=zi(i,this.Ra))}if(this.da()){const t=Ii(i,this.Ra),n=Ni(t);if(r=n,l=this.Ra,r.Ql!==l.Ql||r.ta!==l.ta){const s=null!==this.va?Ii(this.va,this.Ra):null;this.Ra=n,i=zi(t,n),null!==s&&(this.va=zi(s,n))}}this.Wa(i)}else null===this.ph&&(this.Wa(new ci(-.5,.5)),this.Ra=Ni(null));var r,l;this.ma.ba=!0}Ka(){return this.th()?Di:this.Va()?Bi:this.da()?t=>Ai(t,this.Ra):null}Sh(t,i){return void 0===this.Ba.priceFormatter?(void 0===i&&(i=this.Ol()),i.format(t)):this.Ba.priceFormatter(t)}}class qi{constructor(t,i){this.ya=[],this.po=new Map,this.fa=0,this.vo=0,this.mo=1e3,this.ka=null,this.bo=new m,this.wo=t,this.Hi=i,this.Mo=new Pi(this);const n=i.F();this.So=this.xo("left",n.leftPriceScale),this.yo=this.xo("right",n.rightPriceScale),this.So.$a().l(this.ko.bind(this,this.So),this),this.yo.$a().l(this.ko.bind(this,this.yo),this),this.Co(n)}Co(t){if(t.leftPriceScale&&this.So.kh(t.leftPriceScale),t.rightPriceScale&&this.yo.kh(t.rightPriceScale),t.localization&&(this.So.Nl(),this.yo.Nl()),t.overlayPriceScales){const i=Array.from(this.po.values());for(const n of i){const i=h(n[0].Ot());i.kh(t.overlayPriceScales),t.localization&&i.Nl()}}}To(t){switch(t){case"left":return this.So;case"right":return this.yo}return this.po.has(t)?r(this.po.get(t))[0].Ot():null}M(){this.Ut().Po().v(this),this.So.$a().v(this),this.yo.$a().v(this),this.ya.forEach((t=>{t.M&&t.M()})),this.bo.m()}Ro(){return this.mo}Do(t){this.mo=t}Ut(){return this.Hi}$i(){return this.vo}Lt(){return this.fa}Oo(t){this.vo=t,this.Bo()}Ha(t){this.fa=t,this.So.Ha(t),this.yo.Ha(t),this.ya.forEach((i=>{if(this.Ge(i)){const n=i.Ot();null!==n&&n.Ha(t)}})),this.Bo()}jl(){return this.ya}Ge(t){const i=t.Ot();return null===i||this.So!==i&&this.yo!==i}Qa(t,i,n){const s=void 0!==n?n:this.Ao().Eo+1;this.Lo(t,i,s)}no(t){const i=this.ya.indexOf(t);e(-1!==i,"removeDataSource: invalid data source"),this.ya.splice(i,1);const n=h(t.Ot()).Il();if(this.po.has(n)){const i=r(this.po.get(n)),s=i.indexOf(t);-1!==s&&(i.splice(s,1),0===i.length&&this.po.delete(n))}const s=t.Ot();s&&s.jl().indexOf(t)>=0&&s.no(t),null!==s&&(s.io(),this.zo(s)),this.ka=null}Qe(t){return t===this.So?"left":t===this.yo?"right":"overlay"}Io(){return this.So}No(){return this.yo}Vo(t,i){t.ro(i)}Fo(t,i){t.ho(i),this.Bo()}Wo(t){t.lo()}jo(t,i){t.ao(i)}$o(t,i){t.oo(i),this.Bo()}Ho(t){t._o()}Bo(){this.ya.forEach((t=>{t.Dn()}))}fn(){let t=null;return this.Hi.F().rightPriceScale.visible&&0!==this.yo.jl().length?t=this.yo:this.Hi.F().leftPriceScale.visible&&0!==this.So.jl().length?t=this.So:0!==this.ya.length&&(t=this.ya[0].Ot()),null===t&&(t=this.yo),t}Je(){let t=null;return this.Hi.F().rightPriceScale.visible?t=this.yo:this.Hi.F().leftPriceScale.visible&&(t=this.So),t}zo(t){null!==t&&t.Na()&&this.Uo(t)}qo(t){const i=this.wo.Ns();t.za({Fn:!0}),null!==i&&t.do(i),this.Bo()}Yo(){this.Uo(this.So),this.Uo(this.yo)}Xo(){this.zo(this.So),this.zo(this.yo),this.ya.forEach((t=>{this.Ge(t)&&this.zo(t.Ot())})),this.Bo(),this.Hi.Ch()}Ja(){return null===this.ka&&(this.ka=Wi(this.ya)),this.ka}Zo(){return this.bo}Ko(){return this.Mo}Uo(t){const i=t.co();if(i&&i.length>0&&!this.wo.Vi()){const i=this.wo.Ns();null!==i&&t.do(i)}t.Dn()}Ao(){const t=this.Ja();if(0===t.length)return{Go:0,Eo:0};let i=0,n=0;for(let s=0;sn&&(n=e))}return{Go:i,Eo:n}}Lo(t,i,n){let s=this.To(i);if(null===s&&(s=this.xo(i,this.Hi.F().overlayPriceScales)),this.ya.push(t),!Q(i)){const n=this.po.get(i)||[];n.push(t),this.po.set(i,n)}s.Qa(t),t.Gi(s),t.Ki(n),this.zo(s),this.ka=null}ko(t,i,n){i.lr!==n.lr&&this.Uo(t)}xo(t,i){const n=Object.assign({visible:!0,autoScale:!0},x(i)),s=new Ui(t,n,this.Hi.F().layout,this.Hi.F().localization);return s.Ha(this.Lt()),s}}const Yi=t=>t.getUTCFullYear(),Xi=t=>nt((t=>t.getUTCDate())(t),2),Zi=(t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"long"}),Ki=(t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"short"}),Gi=t=>nt((t=>t.getUTCMonth()+1)(t),2),Ji=t=>nt(Yi(t)%100,2),Qi=t=>nt(Yi(t),4);class tn{constructor(t="yyyy-MM-dd",i="default"){this.Jo=t,this.Qo=i}t_(t){return function(t,i,n){return i.replace(/yyyy/g,Qi(t)).replace(/yy/g,Ji(t)).replace(/MMMM/g,Zi(t,n)).replace(/MMM/g,Ki(t,n)).replace(/MM/g,Gi(t)).replace(/dd/g,Xi(t))}(t,this.Jo,this.Qo)}}class nn{constructor(t){this.i_=t||"%h:%m:%s"}t_(t){return this.i_.replace("%h",nt(t.getUTCHours(),2)).replace("%m",nt(t.getUTCMinutes(),2)).replace("%s",nt(t.getUTCSeconds(),2))}}const sn={n_:"yyyy-MM-dd",s_:"%h:%m:%s",e_:" ",r_:"default"};class en{constructor(t={}){const i=Object.assign(Object.assign({},sn),t);this.h_=new tn(i.n_,i.r_),this.l_=new nn(i.s_),this.a_=i.e_}t_(t){return`${this.h_.t_(t)}${this.a_}${this.l_.t_(t)}`}}class rn{constructor(t,i=50){this.Ae=0,this.Le=1,this.ze=1,this.Ne=new Map,this.Ie=new Map,this.o_=t,this.Ve=i}t_(t){const i=t._t,n=void 0===i.__?new Date(1e3*i.u_).getTime():new Date(Date.UTC(i.__.year,i.__.month-1,i.__.day)).getTime(),s=this.Ne.get(n);if(void 0!==s)return s.c_;if(this.Ae===this.Ve){const t=this.Ie.get(this.ze);this.Ie.delete(this.ze),this.Ne.delete(r(t)),this.ze++,this.Ae--}const e=this.o_(t);return this.Ne.set(n,{c_:e,$e:this.Le}),this.Ie.set(this.Le,n),this.Ae++,this.Le++,e}}class hn{constructor(t,i){e(t<=i,"right should be >= left"),this.d_=t,this.f_=i}Ms(){return this.d_}ci(){return this.f_}p_(){return this.f_-this.d_+1}Lr(t){return this.d_<=t&&t<=this.f_}rh(t){return this.d_===t.Ms()&&this.f_===t.ci()}}function ln(t,i){return null===t||null===i?t===i:t.rh(i)}class an{constructor(){this.v_=new Map,this.Ne=null}m_(t,i){this.b_(i),this.Ne=null;for(let n=i;n{t<=n[0].Ys?i.push(s):n.splice(mt(n,t,(i=>i.Ysi-t))){if(!this.v_.get(n))continue;const s=i;i=[];const e=s.length;let h=0;const l=r(this.v_.get(n)),a=l.length;let o=1/0,_=-1/0;for(let n=0;n=t&&a-_>=t&&(i.push(r),_=a)}for(;hthis.D_[this.D_.length-1]._t.u_)return i?this.D_.length-1:null;const n=mt(this.D_,t.u_,((t,i)=>t._t.u_0}Ns(){return this.Z_(),this.E_.C_()}K_(){return this.Z_(),this.E_.T_()}G_(){const t=this.Ns();if(null===t)return null;const i={from:t.Ms(),to:t.ci()};return this.J_(i)}J_(t){const i=Math.round(t.from),n=Math.round(t.to),s=h(this.Q_()),e=h(this.tu());return{from:h(this.vn(Math.max(s,i))),to:h(this.vn(Math.min(e,n)))}}iu(t){return{from:h(this.Fl(t.from,!0)),to:h(this.Fl(t.to,!0))}}$i(){return this.vo}Oo(t){if(!isFinite(t)||t<=0)return;if(this.vo===t)return;const i=this.K_(),n=this.vo;if(this.vo=t,this.A_=!0,this.un.lockVisibleTimeRangeOnResize&&0!==n){const i=this.j_*t/n;this.j_=i}if(this.un.fixLeftEdge&&null!==i&&i.Ms()<=0){const i=n-t;this.W_-=Math.round(i/this.j_)+1,this.A_=!0}this.nu(),this.su()}zt(t){if(this.Vi()||!w(t))return 0;const i=this.eu()+this.W_-t;return this.vo-(i+.5)*this.j_-1}js(t,i){const n=this.eu(),s=void 0===i?0:i.from,e=void 0===i?t.length:i.to;for(let i=s;ii/2&&!_?n.cu=!1:n.cu=u&&t.Ys<=a||c&&t.Ys>=o,d++}return this.F_.length=d,this.V_=this.F_,this.F_}du(){this.A_=!0,this.Kn(this.un.barSpacing),this.Gn(this.un.rightOffset)}fu(t){this.A_=!0,this.R_=t,this.su(),this.Y_()}pu(t,i){const n=this.hu(t),s=this.Ks(),e=s+i*(s/10);this.Kn(e),this.un.rightBarStaysOnScroll||this.Gn(this.ou()+(n-this.hu(t)))}ro(t){this.Pa&&this._o(),null===this.Ta&&null===this.N_&&(this.Vi()||(this.Ta=t,this.vu()))}ho(t){if(null===this.N_)return;const i=Pt(this.vo-t,0,this.vo),n=Pt(this.vo-h(this.Ta),0,this.vo);0!==i&&0!==n&&this.Kn(this.N_.Ks*i/n)}lo(){null!==this.Ta&&(this.Ta=null,this.mu())}ao(t){null===this.Pa&&null===this.N_&&(this.Vi()||(this.Pa=t,this.vu()))}oo(t){if(null===this.Pa)return;const i=(this.Pa-t)/this.Ks();this.W_=h(this.N_).ou+i,this.A_=!0,this.su()}_o(){null!==this.Pa&&(this.Pa=null,this.mu())}bu(){this.gu(this.un.rightOffset)}gu(t,i=400){if(!isFinite(t))throw new RangeError("offset is required and must be finite number");if(!isFinite(i)||i<=0)throw new RangeError("animationDuration (optional) must be finite positive number");const n=this.W_,s=performance.now();this.Hi.Yn({wu:t=>(t-s)/i>=1,Mu:e=>{const r=(e-s)/i;return r>=1?t:n+(t-n)*r}})}gt(t,i){this.A_=!0,this.D_=t,this.O_.m_(t,i),this.su()}Su(){return this.L_}xu(){return this.z_}yu(){return this.I_}eu(){return this.R_||0}ku(t){const i=t.p_();this.au(this.vo/i),this.W_=t.ci()-this.eu(),this.su(),this.A_=!0,this.Hi.lu(),this.Hi.Ch()}Cu(){const t=this.Q_(),i=this.tu();null!==t&&null!==i&&this.ku(new hn(t,i+this.un.rightOffset))}Tu(t){const i=new hn(t.from,t.to);this.ku(i)}qi(t){return void 0!==this.Ba.timeFormatter?this.Ba.timeFormatter(t.M_):this.Pu.t_(new Date(1e3*t._t.u_))}_u(){const{handleScroll:t,handleScale:i}=this.Hi.F();return!(t.horzTouchDrag||t.mouseWheel||t.pressedMouseMove||t.vertTouchDrag||i.axisDoubleClickReset.time||i.axisPressedMouseMove.time||i.mouseWheel||i.pinch)}Q_(){return 0===this.D_.length?null:0}tu(){return 0===this.D_.length?null:this.D_.length-1}Ru(t){return(this.vo-1-t)/this.j_}hu(t){const i=this.Ru(t),n=this.eu()+this.W_-i;return Math.round(1e6*n)/1e6}au(t){const i=this.j_;this.j_=t,this.nu(),i!==this.j_&&(this.A_=!0,this.Du())}Z_(){if(!this.A_)return;if(this.A_=!1,this.Vi())return void this.Ou(on.P_());const t=this.eu(),i=this.vo/this.j_,n=this.W_+t,s=new hn(n-i+1,n);this.Ou(new on(s))}nu(){const t=this.Bu();if(this.j_t&&(this.j_=t,this.A_=!0)}}Bu(){return this.un.fixLeftEdge&&this.un.fixRightEdge&&0!==this.D_.length?this.vo/this.D_.length:this.un.minBarSpacing}su(){const t=this.Eu();this.W_>t&&(this.W_=t,this.A_=!0);const i=this.Au();null!==i&&this.W_this.Lu(t))),this.B_.set(t.w_,i)),i.t_(t)}Lu(t){const i=function(t,i,n){switch(t){case 0:case 10:return i?n?4:3:2;case 20:case 21:case 22:case 30:case 31:case 32:case 33:return i?3:2;case 50:return 2;case 60:return 1;case 70:return 0}}(t.w_,this.un.timeVisible,this.un.secondsVisible);if(void 0!==this.un.tickMarkFormatter){const n=this.un.tickMarkFormatter(t.M_,i,this.Ba.locale);if(null!==n)return n}return function(t,i,n){const s={};switch(i){case 0:s.year="numeric";break;case 1:s.month="short";break;case 2:s.day="numeric";break;case 3:s.hour12=!1,s.hour="2-digit",s.minute="2-digit";break;case 4:s.hour12=!1,s.hour="2-digit",s.minute="2-digit",s.second="2-digit"}const e=void 0===t.__?new Date(1e3*t.u_):new Date(Date.UTC(t.__.year,t.__.month-1,t.__.day));return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()).toLocaleString(n,s)}(t._t,i,this.Ba.locale)}Ou(t){const i=this.E_;this.E_=t,ln(i.C_(),this.E_.C_())||this.L_.m(),ln(i.T_(),this.E_.T_())||this.z_.m(),this.Du()}Du(){this.V_=null}q_(){this.Du(),this.B_.clear()}H_(){const t=this.Ba.dateFormat;this.un.timeVisible?this.Pu=new en({n_:t,s_:this.un.secondsVisible?"%h:%m:%s":"%h:%m",e_:" ",r_:this.Ba.locale}):this.Pu=new tn(t,this.Ba.locale)}Y_(){if(!this.un.fixLeftEdge)return;const t=this.Q_();if(null===t)return;const i=this.Ns();if(null===i)return;const n=i.Ms()-t;if(n<0){const t=this.W_-n-1;this.Gn(t)}this.nu()}X_(){this.su(),this.nu()}}class vn extends D{constructor(t){super(),this.zu=new Map,this.It=t}Z(t){}G(t){if(!this.It.Ct)return;const{context:i,mediaSize:n}=t;let s=0;for(const t of this.It.Iu){if(0===t.Gt.length)continue;i.font=t.P;const e=this.Nu(i,t.Gt);e>n.width?t.pu=n.width/e:t.pu=1,s+=t.Vu*t.pu}let e=0;switch(this.It.Fu){case"top":e=0;break;case"center":e=Math.max((n.height-s)/2,0);break;case"bottom":e=Math.max(n.height-s,0)}i.fillStyle=this.It.D;for(const t of this.It.Iu){i.save();let s=0;switch(this.It.Wu){case"left":i.textAlign="left",s=t.Vu/2;break;case"center":i.textAlign="center",s=n.width/2;break;case"right":i.textAlign="right",s=n.width-1-t.Vu/2}i.translate(s,e),i.textBaseline="top",i.font=t.P,i.scale(t.pu,t.pu),i.fillText(t.Gt,0,t.ju),i.restore(),e+=t.Vu*t.pu}}Nu(t,i){const n=this.$u(t.font);let s=n.get(i);return void 0===s&&(s=t.measureText(i).width,n.set(i,s)),s}$u(t){let i=this.zu.get(t);return void 0===i&&(i=new Map,this.zu.set(t,i)),i}}class mn{constructor(t){this.vt=!0,this.Wt={Ct:!1,D:"",Iu:[],Fu:"center",Wu:"center"},this.jt=new vn(this.Wt),this.$t=t}gt(){this.vt=!0}Mt(){return this.vt&&(this.St(),this.vt=!1),this.jt}St(){const t=this.$t.F(),i=this.Wt;i.Ct=t.visible,i.Ct&&(i.D=t.color,i.Wu=t.horzAlign,i.Fu=t.vertAlign,i.Iu=[{Gt:t.text,P:T(t.fontSize,t.fontFamily,t.fontStyle),Vu:1.2*t.fontSize,ju:0,pu:0}])}}class bn extends K{constructor(t,i){super(),this.un=i,this.bn=new mn(this)}Pn(){return[]}Tn(){return[this.bn]}F(){return this.un}Dn(){this.bn.gt()}}!function(t){t[t.OnTouchEnd=0]="OnTouchEnd",t[t.OnNextTap=1]="OnNextTap"}(un||(un={}));class gn{constructor(t,i){this.Hu=[],this.Uu=[],this.vo=0,this.qu=null,this.Yu=new m,this.Xu=new m,this.Zu=null,this.Ku=t,this.un=i,this.Gu=new P(this),this.wo=new pn(this,i.timeScale,this.un.localization),this.bt=new J(this,i.crosshair),this.Ju=new ki(i.crosshair),this.Qu=new bn(this,i.watermark),this.tc(),this.Hu[0].Do(2e3),this.ic=this.nc(0),this.sc=this.nc(1)}dl(){this.ec(tt.ss())}Ch(){this.ec(tt.ns())}Cl(){this.ec(new tt(1))}fl(t){const i=this.rc(t);this.ec(i)}hc(){return this.qu}lc(t){const i=this.qu;this.qu=t,null!==i&&this.fl(i.ac),null!==t&&this.fl(t.ac)}F(){return this.un}kh(t){b(this.un,t),this.Hu.forEach((i=>i.Co(t))),void 0!==t.timeScale&&this.wo.kh(t.timeScale),void 0!==t.localization&&this.wo.U_(t.localization),(t.leftPriceScale||t.rightPriceScale)&&this.Yu.m(),this.ic=this.nc(0),this.sc=this.nc(1),this.dl()}oc(t,i){if("left"===t)return void this.kh({leftPriceScale:i});if("right"===t)return void this.kh({rightPriceScale:i});const n=this._c(t);null!==n&&(n.Ot.kh(i),this.Yu.m())}_c(t){for(const i of this.Hu){const n=i.To(t);if(null!==n)return{Ht:i,Ot:n}}return null}yt(){return this.wo}uc(){return this.Hu}cc(){return this.Qu}dc(){return this.bt}fc(){return this.Xu}vc(t,i){t.Ha(i),this.lu()}Oo(t){this.vo=t,this.wo.Oo(this.vo),this.Hu.forEach((i=>i.Oo(t))),this.lu()}tc(t){const i=new qi(this.wo,this);void 0!==t?this.Hu.splice(t,0,i):this.Hu.push(i);const n=void 0===t?this.Hu.length-1:t,s=tt.ss();return s.Nn(n,{Vn:0,Fn:!0}),this.ec(s),i}Vo(t,i,n){t.Vo(i,n)}Fo(t,i,n){t.Fo(i,n),this.pl(),this.ec(this.mc(t,2))}Wo(t,i){t.Wo(i),this.ec(this.mc(t,2))}jo(t,i,n){i.Na()||t.jo(i,n)}$o(t,i,n){i.Na()||(t.$o(i,n),this.pl(),this.ec(this.mc(t,2)))}Ho(t,i){i.Na()||(t.Ho(i),this.ec(this.mc(t,2)))}qo(t,i){t.qo(i),this.ec(this.mc(t,2))}bc(t){this.wo.ro(t)}gc(t,i){const n=this.yt();if(n.Vi()||0===i)return;const s=n.$i();t=Math.max(1,Math.min(t,s)),n.pu(t,i),this.lu()}wc(t){this.Mc(0),this.Sc(t),this.xc()}yc(t){this.wo.ho(t),this.lu()}kc(){this.wo.lo(),this.Ch()}Mc(t){this.wo.ao(t)}Sc(t){this.wo.oo(t),this.lu()}xc(){this.wo._o(),this.Ch()}wt(){return this.Uu}Cc(t,i,n,s){this.bt.gn(t,i);let e=NaN,r=this.wo.ru(t);const h=this.wo.Ns();null!==h&&(r=Math.min(Math.max(h.Ms(),r),h.ci()));const l=s.fn(),a=l.Tt();null!==a&&(e=l.pn(i,a)),e=this.Ju.Wl(e,r,s),this.bt.xn(r,e,s),this.Cl(),this.Xu.m(this.bt.xt(),{x:t,y:i},n)}Tc(){this.dc().kn(),this.Cl(),this.Xu.m(null,null,null)}pl(){const t=this.bt.Ht();if(null!==t){const i=this.bt.Mn(),n=this.bt.Sn();this.Cc(i,n,null,t)}this.bt.Dn()}Pc(t,i,n){const s=this.wo.vn(0);void 0!==i&&void 0!==n&&this.wo.gt(i,n);const e=this.wo.vn(0),r=this.wo.eu(),h=this.wo.Ns();if(null!==h&&null!==s&&null!==e){const i=h.Lr(r),n=s.u_>e.u_,l=null!==t&&t>r&&!n,a=i&&this.wo.F().shiftVisibleRangeOnNewBar;if(l&&!a){const i=t-r;this.wo.Gn(this.wo.ou()-i)}}this.wo.fu(t)}bl(t){null!==t&&t.Xo()}Ke(t){const i=this.Hu.find((i=>i.Ja().includes(t)));return void 0===i?null:i}lu(){this.Qu.Dn(),this.Hu.forEach((t=>t.Xo())),this.pl()}M(){this.Hu.forEach((t=>t.M())),this.Hu.length=0,this.un.localization.priceFormatter=void 0,this.un.localization.timeFormatter=void 0}Rc(){return this.Gu}tr(){return this.Gu.F()}Po(){return this.Yu}Dc(t,i){const n=this.Hu[0],s=this.Oc(i,t,n);return this.Uu.push(s),1===this.Uu.length?this.dl():this.Ch(),s}Bc(t){const i=this.Ke(t),n=this.Uu.indexOf(t);e(-1!==n,"Series not found"),this.Uu.splice(n,1),h(i).no(t),t.M&&t.M()}cl(t,i){const n=h(this.Ke(t));n.no(t);const s=this._c(i);if(null===s){const s=t.Zi();n.Qa(t,i,s)}else{const e=s.Ht===n?t.Zi():void 0;s.Ht.Qa(t,i,e)}}Cu(){const t=tt.ns();t.$n(),this.ec(t)}Ec(t){const i=tt.ns();i.qn(t),this.ec(i)}Zn(){const t=tt.ns();t.Zn(),this.ec(t)}Kn(t){const i=tt.ns();i.Kn(t),this.ec(i)}Gn(t){const i=tt.ns();i.Gn(t),this.ec(i)}Yn(t){const i=tt.ns();i.Yn(t),this.ec(i)}Hn(){const t=tt.ns();t.Hn(),this.ec(t)}Ac(){return this.un.rightPriceScale.visible?"right":"left"}Lc(){return this.sc}U(){return this.ic}At(t){const i=this.sc,n=this.ic;if(i===n)return i;if(t=Math.max(0,Math.min(100,Math.round(100*t))),null===this.Zu||this.Zu.bs!==n||this.Zu.gs!==i)this.Zu={bs:n,gs:i,zc:new Map};else{const i=this.Zu.zc.get(t);if(void 0!==i)return i}const s=function(t,i,n){const[s,e,r,h]=p(t),[l,a,u,c]=p(i),d=[o(s+n*(l-s)),o(e+n*(a-e)),o(r+n*(u-r)),_(h+n*(c-h))];return`rgba(${d[0]}, ${d[1]}, ${d[2]}, ${d[3]})`}(n,i,t/100);return this.Zu.zc.set(t,s),s}mc(t,i){const n=new tt(i);if(null!==t){const s=this.Hu.indexOf(t);n.Nn(s,{Vn:i})}return n}rc(t,i){return void 0===i&&(i=2),this.mc(this.Ke(t),i)}ec(t){this.Ku&&this.Ku(t),this.Hu.forEach((t=>t.Ko().Th().gt()))}Oc(t,i,n){const s=new yi(this,t,i),e=void 0!==t.priceScaleId?t.priceScaleId:this.Ac();return n.Qa(s,e),Q(e)||s.kh(t),s}nc(t){const i=this.un.layout;return"gradient"===i.background.type?0===t?i.background.topColor:i.background.bottomColor:i.background.color}}function wn(t){return!g(t)&&!M(t)}function Mn(t){return g(t)}function Sn(t){var i=t.width,n=t.height;if(i<0)throw new Error("Negative width is not allowed for Size");if(n<0)throw new Error("Negative height is not allowed for Size");return{width:i,height:n}}function xn(t,i){return t.width===i.width&&t.height===i.height}!function(t){t[t.Disabled=0]="Disabled",t[t.Continuous=1]="Continuous",t[t.OnDataUpdate=2]="OnDataUpdate"}(cn||(cn={})),function(t){t[t.LastBar=0]="LastBar",t[t.LastVisible=1]="LastVisible"}(dn||(dn={})),function(t){t.Solid="solid",t.VerticalGradient="gradient"}(fn||(fn={}));var yn=function(){function t(t){var i=this;this._resolutionListener=function(){return i._onResolutionChanged()},this._resolutionMediaQueryList=null,this._observers=[],this._window=t,this._installResolutionListener()}return t.prototype.dispose=function(){this._uninstallResolutionListener(),this._window=null},Object.defineProperty(t.prototype,"value",{get:function(){return this._window.devicePixelRatio},enumerable:!1,configurable:!0}),t.prototype.subscribe=function(t){var i=this,n={next:t};return this._observers.push(n),{unsubscribe:function(){i._observers=i._observers.filter((function(t){return t!==n}))}}},t.prototype._installResolutionListener=function(){if(null!==this._resolutionMediaQueryList)throw new Error("Resolution listener is already installed");var t=this._window.devicePixelRatio;this._resolutionMediaQueryList=this._window.matchMedia("all and (resolution: ".concat(t,"dppx)")),this._resolutionMediaQueryList.addListener(this._resolutionListener)},t.prototype._uninstallResolutionListener=function(){null!==this._resolutionMediaQueryList&&(this._resolutionMediaQueryList.removeListener(this._resolutionListener),this._resolutionMediaQueryList=null)},t.prototype._reinstallResolutionListener=function(){this._uninstallResolutionListener(),this._installResolutionListener()},t.prototype._onResolutionChanged=function(){var t=this;this._observers.forEach((function(i){return i.next(t._window.devicePixelRatio)})),this._reinstallResolutionListener()},t}();var kn=function(){function t(t,i,n){var s;this._canvasElement=null,this._bitmapSizeChangedListeners=[],this._suggestedBitmapSize=null,this._suggestedBitmapSizeChangedListeners=[],this._devicePixelRatioObservable=null,this._canvasElementResizeObserver=null,this._canvasElement=t,this._canvasElementClientSize=Sn({width:this._canvasElement.clientWidth,height:this._canvasElement.clientHeight}),this._transformBitmapSize=null!=i?i:function(t){return t},this._allowResizeObserver=null===(s=null==n?void 0:n.allowResizeObserver)||void 0===s||s,this._chooseAndInitObserver()}return t.prototype.dispose=function(){var t,i;if(null===this._canvasElement)throw new Error("Object is disposed");null===(t=this._canvasElementResizeObserver)||void 0===t||t.disconnect(),this._canvasElementResizeObserver=null,null===(i=this._devicePixelRatioObservable)||void 0===i||i.dispose(),this._devicePixelRatioObservable=null,this._suggestedBitmapSizeChangedListeners.length=0,this._bitmapSizeChangedListeners.length=0,this._canvasElement=null},Object.defineProperty(t.prototype,"canvasElement",{get:function(){if(null===this._canvasElement)throw new Error("Object is disposed");return this._canvasElement},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"canvasElementClientSize",{get:function(){return this._canvasElementClientSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bitmapSize",{get:function(){return Sn({width:this.canvasElement.width,height:this.canvasElement.height})},enumerable:!1,configurable:!0}),t.prototype.resizeCanvasElement=function(t){this._canvasElementClientSize=Sn(t),this.canvasElement.style.width="".concat(this._canvasElementClientSize.width,"px"),this.canvasElement.style.height="".concat(this._canvasElementClientSize.height,"px"),this._invalidateBitmapSize()},t.prototype.subscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners=this._bitmapSizeChangedListeners.filter((function(i){return i!==t}))},Object.defineProperty(t.prototype,"suggestedBitmapSize",{get:function(){return this._suggestedBitmapSize},enumerable:!1,configurable:!0}),t.prototype.subscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners=this._suggestedBitmapSizeChangedListeners.filter((function(i){return i!==t}))},t.prototype.applySuggestedBitmapSize=function(){if(null!==this._suggestedBitmapSize){var t=this._suggestedBitmapSize;this._suggestedBitmapSize=null,this._resizeBitmap(t),this._emitSuggestedBitmapSizeChanged(t,this._suggestedBitmapSize)}},t.prototype._resizeBitmap=function(t){var i=this.bitmapSize;xn(i,t)||(this.canvasElement.width=t.width,this.canvasElement.height=t.height,this._emitBitmapSizeChanged(i,t))},t.prototype._emitBitmapSizeChanged=function(t,i){var n=this;this._bitmapSizeChangedListeners.forEach((function(s){return s.call(n,t,i)}))},t.prototype._suggestNewBitmapSize=function(t){var i=this._suggestedBitmapSize,n=Sn(this._transformBitmapSize(t,this._canvasElementClientSize)),s=xn(this.bitmapSize,n)?null:n;null===i&&null===s||null!==i&&null!==s&&xn(i,s)||(this._suggestedBitmapSize=s,this._emitSuggestedBitmapSizeChanged(i,s))},t.prototype._emitSuggestedBitmapSizeChanged=function(t,i){var n=this;this._suggestedBitmapSizeChangedListeners.forEach((function(s){return s.call(n,t,i)}))},t.prototype._chooseAndInitObserver=function(){var t=this;this._allowResizeObserver?new Promise((function(t){var i=new ResizeObserver((function(n){t(n.every((function(t){return"devicePixelContentBoxSize"in t}))),i.disconnect()}));i.observe(document.body,{box:"device-pixel-content-box"})})).catch((function(){return!1})).then((function(i){return i?t._initResizeObserver():t._initDevicePixelRatioObservable()})):this._initDevicePixelRatioObservable()},t.prototype._initDevicePixelRatioObservable=function(){var t=this;if(null!==this._canvasElement){var i=Cn(this._canvasElement);if(null===i)throw new Error("No window is associated with the canvas");this._devicePixelRatioObservable=function(t){return new yn(t)}(i),this._devicePixelRatioObservable.subscribe((function(){return t._invalidateBitmapSize()})),this._invalidateBitmapSize()}},t.prototype._invalidateBitmapSize=function(){var t,i;if(null!==this._canvasElement){var n=Cn(this._canvasElement);if(null!==n){var s=null!==(i=null===(t=this._devicePixelRatioObservable)||void 0===t?void 0:t.value)&&void 0!==i?i:n.devicePixelRatio,e=this._canvasElement.getClientRects(),r=void 0!==e[0]?function(t,i){return Sn({width:Math.round(t.left*i+t.width*i)-Math.round(t.left*i),height:Math.round(t.top*i+t.height*i)-Math.round(t.top*i)})}(e[0],s):Sn({width:this._canvasElementClientSize.width*s,height:this._canvasElementClientSize.height*s});this._suggestNewBitmapSize(r)}}},t.prototype._initResizeObserver=function(){var t=this;null!==this._canvasElement&&(this._canvasElementResizeObserver=new ResizeObserver((function(i){var n=i.find((function(i){return i.target===t._canvasElement}));if(n&&n.devicePixelContentBoxSize&&n.devicePixelContentBoxSize[0]){var s=n.devicePixelContentBoxSize[0],e=Sn({width:s.inlineSize,height:s.blockSize});t._suggestNewBitmapSize(e)}})),this._canvasElementResizeObserver.observe(this._canvasElement,{box:"device-pixel-content-box"}))},t}();function Cn(t){return t.ownerDocument.defaultView}var Tn=function(){function t(t,i,n){if(0===i.width||0===i.height)throw new TypeError("Rendering target could only be created on a media with positive width and height");if(this._mediaSize=i,0===n.width||0===n.height)throw new TypeError("Rendering target could only be created using a bitmap with positive integer width and height");this._bitmapSize=n,this._context=t}return t.prototype.useMediaCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),this._context.scale(this._horizontalPixelRatio,this._verticalPixelRatio),t({context:this._context,mediaSize:this._mediaSize})}finally{this._context.restore()}},t.prototype.useBitmapCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),t({context:this._context,mediaSize:this._mediaSize,bitmapSize:this._bitmapSize,horizontalPixelRatio:this._horizontalPixelRatio,verticalPixelRatio:this._verticalPixelRatio})}finally{this._context.restore()}},Object.defineProperty(t.prototype,"_horizontalPixelRatio",{get:function(){return this._bitmapSize.width/this._mediaSize.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"_verticalPixelRatio",{get:function(){return this._bitmapSize.height/this._mediaSize.height},enumerable:!1,configurable:!0}),t}();function Pn(t,i){var n=t.canvasElementClientSize;if(0===n.width||0===n.height)return null;var s=t.bitmapSize;if(0===s.width||0===s.height)return null;var e=t.canvasElement.getContext("2d",i);return null===e?null:new Tn(e,n,s)}const Rn="undefined"!=typeof window;function Dn(){return!!Rn&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1}function On(){return!!Rn&&/iPhone|iPad|iPod/.test(window.navigator.platform)}function Bn(t){return t+t%2}function En(t,i){return t.Ic-i.Ic}function An(t,i,n){const s=(t.Ic-i.Ic)/(t._t-i._t);return Math.sign(s)*Math.min(Math.abs(s),n)}class Ln{constructor(t,i,n,s){this.Nc=null,this.Vc=null,this.Fc=null,this.Wc=null,this.jc=null,this.$c=0,this.Hc=0,this.Uc=t,this.qc=i,this.Yc=n,this.es=s}Xc(t,i){if(null!==this.Nc){if(this.Nc._t===i)return void(this.Nc.Ic=t);if(Math.abs(this.Nc.Ic-t)50)return;let n=0;const s=An(this.Nc,this.Vc,this.qc),e=En(this.Nc,this.Vc),r=[s],h=[e];if(n+=e,null!==this.Fc){const t=An(this.Vc,this.Fc,this.qc);if(Math.sign(t)===Math.sign(s)){const i=En(this.Vc,this.Fc);if(r.push(t),h.push(i),n+=i,null!==this.Wc){const t=An(this.Fc,this.Wc,this.qc);if(Math.sign(t)===Math.sign(s)){const i=En(this.Fc,this.Wc);r.push(t),h.push(i),n+=i}}}}let l=0;for(let t=0;t({width:Math.max(t.width,i.width),height:Math.max(t.height,i.height)})});return s.resizeCanvasElement(i),s}function In(t){Rn&&void 0!==window.chrome&&t.addEventListener("mousedown",(t=>{if(1===t.button)return t.preventDefault(),!1}))}class Nn{constructor(t,i,n){this.Kc=0,this.Gc=null,this.Jc={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY},this.Qc=0,this.td=null,this.nd={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY},this.sd=null,this.ed=!1,this.rd=null,this.hd=null,this.ld=!1,this.ad=!1,this.od=!1,this._d=null,this.ud=null,this.dd=null,this.fd=null,this.pd=null,this.vd=null,this.md=null,this.bd=0,this.gd=!1,this.wd=!1,this.Md=!1,this.Sd=0,this.xd=null,this.yd=!On(),this.kd=t=>{this.Cd(t)},this.Td=t=>{if(this.Pd(t)){const i=this.Rd(t);if(++this.Qc,this.td&&this.Qc>1){const{Dd:n}=this.Od(Wn(t),this.nd);n<30&&!this.od&&this.Bd(i,this.Ad.Ed),this.Ld()}}else{const i=this.Rd(t);if(++this.Kc,this.Gc&&this.Kc>1){const{Dd:n}=this.Od(Wn(t),this.Jc);n<5&&!this.ad&&this.zd(i,this.Ad.Id),this.Nd()}}},this.Vd=t,this.Ad=i,this.un=n,this.Fd()}M(){null!==this._d&&(this._d(),this._d=null),null!==this.ud&&(this.ud(),this.ud=null),null!==this.fd&&(this.fd(),this.fd=null),null!==this.pd&&(this.pd(),this.pd=null),null!==this.vd&&(this.vd(),this.vd=null),null!==this.dd&&(this.dd(),this.dd=null),this.Wd(),this.Nd()}jd(t){this.fd&&this.fd();const i=this.$d.bind(this);if(this.fd=()=>{this.Vd.removeEventListener("mousemove",i)},this.Vd.addEventListener("mousemove",i),this.Pd(t))return;const n=this.Rd(t);this.zd(n,this.Ad.Hd),this.yd=!0}Nd(){null!==this.Gc&&clearTimeout(this.Gc),this.Kc=0,this.Gc=null,this.Jc={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY}}Ld(){null!==this.td&&clearTimeout(this.td),this.Qc=0,this.td=null,this.nd={st:Number.NEGATIVE_INFINITY,et:Number.POSITIVE_INFINITY}}$d(t){if(this.Md||null!==this.hd)return;if(this.Pd(t))return;const i=this.Rd(t);this.zd(i,this.Ad.Ud),this.yd=!0}qd(t){const i=$n(t.changedTouches,h(this.xd));if(null===i)return;if(this.Sd=jn(t),null!==this.md)return;if(this.wd)return;this.gd=!0;const n=this.Od(Wn(i),h(this.hd)),{Yd:s,Xd:e,Dd:r}=n;if(this.ld||!(r<5)){if(!this.ld){const t=.5*s,i=e>=t&&!this.un.Zd(),n=t>e&&!this.un.Kd();i||n||(this.wd=!0),this.ld=!0,this.od=!0,this.Wd(),this.Ld()}if(!this.wd){const n=this.Rd(t,i);this.Bd(n,this.Ad.Gd),Fn(t)}}}Jd(t){if(0!==t.button)return;const i=this.Od(Wn(t),h(this.rd)),{Dd:n}=i;if(n>=5&&(this.ad=!0,this.Nd()),this.ad){const i=this.Rd(t);this.zd(i,this.Ad.Qd)}}Od(t,i){const n=Math.abs(i.st-t.st),s=Math.abs(i.et-t.et);return{Yd:n,Xd:s,Dd:n+s}}tf(t){let i=$n(t.changedTouches,h(this.xd));if(null===i&&0===t.touches.length&&(i=t.changedTouches[0]),null===i)return;this.xd=null,this.Sd=jn(t),this.Wd(),this.hd=null,this.vd&&(this.vd(),this.vd=null);const n=this.Rd(t,i);if(this.Bd(n,this.Ad.if),++this.Qc,this.td&&this.Qc>1){const{Dd:t}=this.Od(Wn(i),this.nd);t<30&&!this.od&&this.Bd(n,this.Ad.Ed),this.Ld()}else this.od||(this.Bd(n,this.Ad.nf),this.Ad.nf&&Fn(t));0===this.Qc&&Fn(t),0===t.touches.length&&this.ed&&(this.ed=!1,Fn(t))}Cd(t){if(0!==t.button)return;const i=this.Rd(t);if(this.rd=null,this.Md=!1,this.pd&&(this.pd(),this.pd=null),Dn()){this.Vd.ownerDocument.documentElement.removeEventListener("mouseleave",this.kd)}if(!this.Pd(t))if(this.zd(i,this.Ad.sf),++this.Kc,this.Gc&&this.Kc>1){const{Dd:n}=this.Od(Wn(t),this.Jc);n<5&&!this.ad&&this.zd(i,this.Ad.Id),this.Nd()}else this.ad||this.zd(i,this.Ad.ef)}Wd(){null!==this.sd&&(clearTimeout(this.sd),this.sd=null)}rf(t){if(null!==this.xd)return;const i=t.changedTouches[0];this.xd=i.identifier,this.Sd=jn(t);const n=this.Vd.ownerDocument.documentElement;this.od=!1,this.ld=!1,this.wd=!1,this.hd=Wn(i),this.vd&&(this.vd(),this.vd=null);{const i=this.qd.bind(this),s=this.tf.bind(this);this.vd=()=>{n.removeEventListener("touchmove",i),n.removeEventListener("touchend",s)},n.addEventListener("touchmove",i,{passive:!1}),n.addEventListener("touchend",s,{passive:!1}),this.Wd(),this.sd=setTimeout(this.hf.bind(this,t),240)}const s=this.Rd(t,i);this.Bd(s,this.Ad.lf),this.td||(this.Qc=0,this.td=setTimeout(this.Ld.bind(this),500),this.nd=Wn(i))}af(t){if(0!==t.button)return;const i=this.Vd.ownerDocument.documentElement;Dn()&&i.addEventListener("mouseleave",this.kd),this.ad=!1,this.rd=Wn(t),this.pd&&(this.pd(),this.pd=null);{const t=this.Jd.bind(this),n=this.Cd.bind(this);this.pd=()=>{i.removeEventListener("mousemove",t),i.removeEventListener("mouseup",n)},i.addEventListener("mousemove",t),i.addEventListener("mouseup",n)}if(this.Md=!0,this.Pd(t))return;const n=this.Rd(t);this.zd(n,this.Ad._f),this.Gc||(this.Kc=0,this.Gc=setTimeout(this.Nd.bind(this),500),this.Jc=Wn(t))}Fd(){this.Vd.addEventListener("mouseenter",this.jd.bind(this)),this.Vd.addEventListener("touchcancel",this.Wd.bind(this));{const t=this.Vd.ownerDocument,i=t=>{this.Ad.uf&&(t.composed&&this.Vd.contains(t.composedPath()[0])||t.target&&this.Vd.contains(t.target)||this.Ad.uf())};this.ud=()=>{t.removeEventListener("touchstart",i)},this._d=()=>{t.removeEventListener("mousedown",i)},t.addEventListener("mousedown",i),t.addEventListener("touchstart",i,{passive:!0})}On()&&(this.dd=()=>{this.Vd.removeEventListener("dblclick",this.Td)},this.Vd.addEventListener("dblclick",this.Td)),this.Vd.addEventListener("mouseleave",this.cf.bind(this)),this.Vd.addEventListener("touchstart",this.rf.bind(this),{passive:!0}),In(this.Vd),this.Vd.addEventListener("mousedown",this.af.bind(this)),this.df(),this.Vd.addEventListener("touchmove",(()=>{}),{passive:!1})}df(){void 0===this.Ad.ff&&void 0===this.Ad.pf&&void 0===this.Ad.vf||(this.Vd.addEventListener("touchstart",(t=>this.mf(t.touches)),{passive:!0}),this.Vd.addEventListener("touchmove",(t=>{if(2===t.touches.length&&null!==this.md&&void 0!==this.Ad.pf){const i=Vn(t.touches[0],t.touches[1])/this.bd;this.Ad.pf(this.md,i),Fn(t)}}),{passive:!1}),this.Vd.addEventListener("touchend",(t=>{this.mf(t.touches)})))}mf(t){1===t.length&&(this.gd=!1),2!==t.length||this.gd||this.ed?this.bf():this.gf(t)}gf(t){const i=this.Vd.getBoundingClientRect()||{left:0,top:0};this.md={st:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,et:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this.bd=Vn(t[0],t[1]),void 0!==this.Ad.ff&&this.Ad.ff(),this.Wd()}bf(){null!==this.md&&(this.md=null,void 0!==this.Ad.vf&&this.Ad.vf())}cf(t){if(this.fd&&this.fd(),this.Pd(t))return;if(!this.yd)return;const i=this.Rd(t);this.zd(i,this.Ad.wf),this.yd=!On()}hf(t){const i=$n(t.touches,h(this.xd));if(null===i)return;const n=this.Rd(t,i);this.Bd(n,this.Ad.Mf),this.od=!0,this.ed=!0}Pd(t){return t.sourceCapabilities&&void 0!==t.sourceCapabilities.firesTouchEvents?t.sourceCapabilities.firesTouchEvents:jn(t){"touchstart"!==t.type&&Fn(t)}}}}function Vn(t,i){const n=t.clientX-i.clientX,s=t.clientY-i.clientY;return Math.sqrt(n*n+s*s)}function Fn(t){t.cancelable&&t.preventDefault()}function Wn(t){return{st:t.pageX,et:t.pageY}}function jn(t){return t.timeStamp||performance.now()}function $n(t,i){for(let n=0;n{this.Of||this.tn.Ef().Ut().Ch()},this.Af=()=>{this.Of||this.tn.Ef().Ut().Ch()},this.tn=t,this.un=i,this.Oa=i.layout,this.Gu=n,this.Lf="left"===s,this.zf=document.createElement("div"),this.zf.style.height="100%",this.zf.style.overflow="hidden",this.zf.style.width="25px",this.zf.style.left="0",this.zf.style.position="relative",this.If=zn(this.zf,Sn({width:16,height:16})),this.If.subscribeSuggestedBitmapSizeChanged(this.Bf);const e=this.If.canvasElement;e.style.position="absolute",e.style.zIndex="1",e.style.left="0",e.style.top="0",this.Nf=zn(this.zf,Sn({width:16,height:16})),this.Nf.subscribeSuggestedBitmapSizeChanged(this.Af);const r=this.Nf.canvasElement;r.style.position="absolute",r.style.zIndex="2",r.style.left="0",r.style.top="0";const h={_f:this.Vf.bind(this),lf:this.Vf.bind(this),Qd:this.Ff.bind(this),Gd:this.Ff.bind(this),uf:this.Wf.bind(this),sf:this.jf.bind(this),if:this.jf.bind(this),Id:this.$f.bind(this),Ed:this.$f.bind(this),Hd:this.Hf.bind(this),wf:this.Uf.bind(this)};this.qf=new Nn(this.Nf.canvasElement,h,{Zd:()=>!1,Kd:()=>!0})}M(){this.qf.M(),this.Nf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.Nf.dispose(),this.If.unsubscribeSuggestedBitmapSizeChanged(this.Bf),this.If.dispose(),null!==this.Ii&&this.Ii.eo().v(this),this.Ii=null}Yf(){return this.zf}T(){return this.Oa.fontSize}Xf(){const t=this.Gu.F();return this.Ir!==t.P&&(this.Rf.Fe(),this.Ir=t.P),t}Zf(){if(null===this.Ii)return 0;let t=0;const i=this.Xf(),n=h(this.If.canvasElement.getContext("2d"));n.save();const s=this.Ii.Jl();n.font=this.Kf(),s.length>0&&(t=Math.max(this.Rf.Si(n,s[0].ua),this.Rf.Si(n,s[s.length-1].ua)));const e=this.Gf();for(let i=e.length;i--;){const s=this.Rf.Si(n,e[i].Gt());s>t&&(t=s)}const r=this.Ii.Tt();if(null!==r&&null!==this.Tf){const i=this.Ii.pn(1,r),s=this.Ii.pn(this.Tf.height-2,r);t=Math.max(t,this.Rf.Si(n,this.Ii.Fi(Math.floor(Math.min(i,s))+.11111111111111,r)),this.Rf.Si(n,this.Ii.Fi(Math.ceil(Math.max(i,s))-.11111111111111,r)))}n.restore();const l=t||34;return Bn(Math.ceil(i.k+i.C+i.A+i.L+5+l))}Jf(t){null!==this.Tf&&xn(this.Tf,t)||(this.Tf=t,this.Of=!0,this.If.resizeCanvasElement(t),this.Nf.resizeCanvasElement(t),this.Of=!1,this.zf.style.width=`${t.width}px`,this.zf.style.height=`${t.height}px`)}Qf(){return h(this.Tf).width}Gi(t){this.Ii!==t&&(null!==this.Ii&&this.Ii.eo().v(this),this.Ii=t,t.eo().l(this.Sa.bind(this),this))}Ot(){return this.Ii}Fe(){const t=this.tn.tp();this.tn.Ef().Ut().qo(t,h(this.Ot()))}ip(t){if(null===this.Tf)return;if(1!==t){this.np(),this.If.applySuggestedBitmapSize();const t=Pn(this.If);null!==t&&(t.useBitmapCoordinateSpace((t=>{this.sp(t),this.ye(t)})),this.ep(t),this.rp(t))}this.Nf.applySuggestedBitmapSize();const i=Pn(this.Nf);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this.hp(i))}lp(){return this.If.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.If.canvasElement,i,n)}gt(){var t;null===(t=this.Ii)||void 0===t||t.Jl()}Vf(t){if(null===this.Ii||this.Ii.Vi()||!this.un.handleScale.axisPressedMouseMove.price)return;const i=this.tn.Ef().Ut(),n=this.tn.tp();this.Pf=!0,i.Vo(n,this.Ii,t.localY)}Ff(t){if(null===this.Ii||!this.un.handleScale.axisPressedMouseMove.price)return;const i=this.tn.Ef().Ut(),n=this.tn.tp(),s=this.Ii;i.Fo(n,s,t.localY)}Wf(){if(null===this.Ii||!this.un.handleScale.axisPressedMouseMove.price)return;const t=this.tn.Ef().Ut(),i=this.tn.tp(),n=this.Ii;this.Pf&&(this.Pf=!1,t.Wo(i,n))}jf(t){if(null===this.Ii||!this.un.handleScale.axisPressedMouseMove.price)return;const i=this.tn.Ef().Ut(),n=this.tn.tp();this.Pf=!1,i.Wo(n,this.Ii)}$f(t){this.un.handleScale.axisDoubleClickReset.price&&this.Fe()}Hf(t){if(null===this.Ii)return;!this.tn.Ef().Ut().F().handleScale.axisPressedMouseMove.price||this.Ii.th()||this.Ii.Va()||this.op(1)}Uf(t){this.op(0)}Gf(){const t=[],i=null===this.Ii?void 0:this.Ii;return(n=>{for(let s=0;s{t.fillStyle=n.borderColor;const l=Math.max(1,Math.floor(h)),a=Math.floor(.5*h),o=Math.round(s.C*r);t.beginPath();for(const n of i)t.rect(Math.floor(e*r),Math.round(n.Yl*h)-a,o,l);t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{var r;t.font=this.Kf(),t.fillStyle=null!==(r=n.textColor)&&void 0!==r?r:this.Oa.textColor,t.textAlign=this.Lf?"right":"left",t.textBaseline="middle";const h=this.Lf?Math.round(e-s.A):Math.round(e+s.C+s.A),l=i.map((i=>this.Rf.Mi(t,i.ua)));for(let n=i.length;n--;){const s=i[n];t.fillText(s.ua,h,s.Yl+l[n])}}))}np(){if(null===this.Tf||null===this.Ii)return;let t=this.Tf.height/2;const i=[],n=this.Ii.Ja().slice(),s=this.tn.tp(),e=this.Xf();this.Ii===s.Je()&&this.tn.tp().Ja().forEach((t=>{s.Ge(t)&&n.push(t)}));const r=this.Ii.jl()[0],h=this.Ii;n.forEach((n=>{const e=n.Pn(s,h);e.forEach((t=>{t.Bi(null),t.Ei()&&i.push(t)})),r===n&&e.length>0&&(t=e[0].yi())})),i.forEach((t=>t.Bi(t.yi())));this.Ii.F().alignLabels&&this._p(i,e,t)}_p(t,i,n){if(null===this.Tf)return;const s=t.filter((t=>t.yi()<=n)),e=t.filter((t=>t.yi()>n));s.sort(((t,i)=>i.yi()-t.yi())),s.length&&e.length&&e.push(s[0]),e.sort(((t,i)=>t.yi()-i.yi()));for(const n of t){const t=Math.floor(n.Lt(i)/2),s=n.yi();s>-t&&sthis.Tf.height-t&&sl-r&&n.Bi(l-r)}for(let t=1;t{if(i.Ai()){i.Mt(h(this.Ii)).X(t,n,this.Rf,s)}}))}hp(t){if(null===this.Tf||null===this.Ii)return;const i=this.tn.Ef().Ut(),n=[],s=this.tn.tp(),e=i.dc().Pn(s,this.Ii);e.length&&n.push(e);const r=this.Xf(),l=this.Lf?"right":"left";n.forEach((i=>{i.forEach((i=>{i.Mt(h(this.Ii)).X(t,r,this.Rf,l)}))}))}op(t){this.zf.style.cursor=1===t?"ns-resize":"default"}Sa(){const t=this.Zf();this.Df{this.Of||null===this.Sp||this.Hi().Ch()},this.Af=()=>{this.Of||null===this.Sp||this.Hi().Ch()},this.xp=t,this.Sp=i,this.Sp.Zo().l(this.yp.bind(this),this,!0),this.kp=document.createElement("td"),this.kp.style.padding="0",this.kp.style.position="relative";const n=document.createElement("div");n.style.width="100%",n.style.height="100%",n.style.position="relative",n.style.overflow="hidden",this.Cp=document.createElement("td"),this.Cp.style.padding="0",this.Tp=document.createElement("td"),this.Tp.style.padding="0",this.kp.appendChild(n),this.If=zn(n,Sn({width:16,height:16})),this.If.subscribeSuggestedBitmapSizeChanged(this.Bf);const s=this.If.canvasElement;s.style.position="absolute",s.style.zIndex="1",s.style.left="0",s.style.top="0",this.Nf=zn(n,Sn({width:16,height:16})),this.Nf.subscribeSuggestedBitmapSizeChanged(this.Af);const e=this.Nf.canvasElement;e.style.position="absolute",e.style.zIndex="2",e.style.left="0",e.style.top="0",this.Pp=document.createElement("tr"),this.Pp.appendChild(this.Cp),this.Pp.appendChild(this.kp),this.Pp.appendChild(this.Tp),this.Rp(),this.qf=new Nn(this.Nf.canvasElement,this,{Zd:()=>null===this.bp&&!this.xp.F().handleScroll.vertTouchDrag,Kd:()=>null===this.bp&&!this.xp.F().handleScroll.horzTouchDrag})}M(){null!==this.up&&this.up.M(),null!==this.cp&&this.cp.M(),this.Nf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.Nf.dispose(),this.If.unsubscribeSuggestedBitmapSizeChanged(this.Bf),this.If.dispose(),null!==this.Sp&&this.Sp.Zo().v(this),this.qf.M()}tp(){return h(this.Sp)}Dp(t){null!==this.Sp&&this.Sp.Zo().v(this),this.Sp=t,null!==this.Sp&&this.Sp.Zo().l(Kn.prototype.yp.bind(this),this,!0),this.Rp()}Ef(){return this.xp}Yf(){return this.Pp}Rp(){if(null!==this.Sp&&(this.Op(),0!==this.Hi().wt().length)){if(null!==this.up){const t=this.Sp.Io();this.up.Gi(h(t))}if(null!==this.cp){const t=this.Sp.No();this.cp.Gi(h(t))}}}Bp(){null!==this.up&&this.up.gt(),null!==this.cp&&this.cp.gt()}Ro(){return null!==this.Sp?this.Sp.Ro():0}Do(t){this.Sp&&this.Sp.Do(t)}Hd(t){if(!this.Sp)return;this.Ep();const i=t.localX,n=t.localY;this.Ap(i,n,t)}_f(t){this.Ep(),this.Lp(),this.Ap(t.localX,t.localY,t)}Ud(t){if(!this.Sp)return;this.Ep();const i=t.localX,n=t.localY;this.Ap(i,n,t);const s=this.ir(i,n);this.Hi().lc(s&&{ac:s.ac,zp:s.zp})}ef(t){null!==this.Sp&&(this.Ep(),this.Ip(t))}Qd(t){this.Ep(),this.Np(t),this.Ap(t.localX,t.localY,t)}sf(t){null!==this.Sp&&(this.Ep(),this.mp=!1,this.Vp(t))}nf(t){null!==this.Sp&&this.Ip(t)}Mf(t){if(this.mp=!0,null===this.bp){const i={x:t.localX,y:t.localY};this.Fp(i,i,t)}}wf(t){null!==this.Sp&&(this.Ep(),this.Sp.Ut().lc(null),this.Wp())}jp(){return this.pp}ff(){this.vp=1,this.Hi().Hn()}pf(t,i){if(!this.xp.F().handleScale.pinch)return;const n=5*(i-this.vp);this.vp=i,this.Hi().gc(t.st,n)}lf(t){if(this.mp=!1,this.gp=null!==this.bp,this.Lp(),null!==this.bp){const i=this.Hi().dc();this.wp={x:i.Xt(),y:i.Zt()},this.bp={x:t.localX,y:t.localY}}}Gd(t){if(null===this.Sp)return;const i=t.localX,n=t.localY;if(null===this.bp)this.Np(t);else{this.gp=!1;const s=h(this.wp),e=s.x+(i-this.bp.x),r=s.y+(n-this.bp.y);this.Ap(e,r,t)}}if(t){0===this.Ef().F().trackingMode.exitMode&&(this.gp=!0),this.$p(),this.Vp(t)}ir(t,i){const n=this.Sp;if(null===n)return null;const s=n.Ja();for(const e of s){const s=this.Hp(e.Tn(n),t,i);if(null!==s)return{ac:e,kf:s.kf,zp:s.zp}}return null}Up(t,i){h("left"===i?this.up:this.cp).Jf(Sn({width:t,height:this.Tf.height}))}qp(){return this.Tf}Jf(t){xn(this.Tf,t)||(this.Tf=t,this.Of=!0,this.If.resizeCanvasElement(t),this.Nf.resizeCanvasElement(t),this.Of=!1,this.kp.style.width=t.width+"px",this.kp.style.height=t.height+"px")}Yp(){const t=h(this.Sp);t.zo(t.Io()),t.zo(t.No());for(const i of t.jl())if(t.Ge(i)){const n=i.Ot();null!==n&&t.zo(n),i.Dn()}}lp(){return this.If.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.If.canvasElement,i,n)}ip(t){if(0===t)return;if(null===this.Sp)return;if(t>1&&this.Yp(),null!==this.up&&this.up.ip(t),null!==this.cp&&this.cp.ip(t),1!==t){this.If.applySuggestedBitmapSize();const t=Pn(this.If);null!==t&&(t.useBitmapCoordinateSpace((t=>{this.sp(t)})),this.Sp&&(this.Xp(t),this.Zp(t),this.Kp(t,Yn),this.Kp(t,Xn)))}this.Nf.applySuggestedBitmapSize();const i=Pn(this.Nf);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this.Kp(i,Zn),this.Gp(i))}Jp(){return this.up}Qp(){return this.cp}yp(){null!==this.Sp&&this.Sp.Zo().v(this),this.Sp=null}Ip(t){const i=t.localX,n=t.localY;this.pp.g()&&this.pp.m(this.Hi().yt().ru(i),{x:i,y:n},t)}sp({context:t,bitmapSize:i}){const{width:n,height:s}=i,e=this.Hi(),r=e.U(),h=e.Lc();r===h?V(t,0,0,n,s,h):$(t,0,0,n,s,r,h)}Xp(t){const i=h(this.Sp).Ko().Th().Mt();null!==i&&i.X(t,!1)}Zp(t){const i=this.Hi().cc();this.tv(t,Yn,Un,i),this.tv(t,Yn,qn,i)}Gp(t){this.tv(t,Yn,qn,this.Hi().dc())}Kp(t,i){const n=h(this.Sp).Ja();for(const s of n)this.tv(t,i,Un,s);for(const s of n)this.tv(t,i,qn,s)}tv(t,i,n,s){const e=h(this.Sp),r=i(s,e),l=e.Ut().hc(),a=null!==l&&l.ac===s,o=null!==l&&a&&void 0!==l.zp?l.zp.sr:void 0;for(const i of r){const s=i.Mt();null!==s&&n(s,t,a,o)}}Hp(t,i,n){for(const s of t){const t=s.Mt();if(null!==t&&t.ir){const e=t.ir(i,n);if(null!==e)return{kf:s,zp:e}}}return null}Op(){if(null===this.Sp)return;const t=this.xp,i=this.Sp.Io().F().visible,n=this.Sp.No().F().visible;i||null===this.up||(this.Cp.removeChild(this.up.Yf()),this.up.M(),this.up=null),n||null===this.cp||(this.Tp.removeChild(this.cp.Yf()),this.cp.M(),this.cp=null);const s=t.Ut().Rc();i&&null===this.up&&(this.up=new Hn(this,t.F(),s,"left"),this.Cp.appendChild(this.up.Yf())),n&&null===this.cp&&(this.cp=new Hn(this,t.F(),s,"right"),this.Tp.appendChild(this.cp.Yf()))}iv(t){return t.Sf&&this.mp||null!==this.bp}nv(t){return Math.max(0,Math.min(t,this.Tf.width-1))}sv(t){return Math.max(0,Math.min(t,this.Tf.height-1))}Ap(t,i,n){this.Hi().Cc(this.nv(t),this.sv(i),n,h(this.Sp))}Wp(){this.Hi().Tc()}$p(){this.gp&&(this.bp=null,this.Wp())}Fp(t,i,n){this.bp=t,this.gp=!1,this.Ap(i.x,i.y,n);const s=this.Hi().dc();this.wp={x:s.Xt(),y:s.Zt()}}Hi(){return this.xp.Ut()}Vp(t){if(!this.fp)return;const i=this.Hi(),n=this.tp();if(i.Ho(n,n.fn()),this.dp=null,this.fp=!1,i.xc(),null!==this.Mp){const t=performance.now(),n=i.yt();this.Mp.pr(n.ou(),t),this.Mp.wu(t)||i.Yn(this.Mp)}}Ep(){this.bp=null}Lp(){if(!this.Sp)return;if(this.Hi().Hn(),document.activeElement!==document.body&&document.activeElement!==document.documentElement)h(document.activeElement).blur();else{const t=document.getSelection();null!==t&&t.removeAllRanges()}!this.Sp.fn().Vi()&&this.Hi().yt().Vi()}Np(t){if(null===this.Sp)return;const i=this.Hi(),n=i.yt();if(n.Vi())return;const s=this.xp.F(),e=s.handleScroll,r=s.kineticScroll;if((!e.pressedMouseMove||t.Sf)&&(!e.horzTouchDrag&&!e.vertTouchDrag||!t.Sf))return;const h=this.Sp.fn(),l=performance.now();if(null!==this.dp||this.iv(t)||(this.dp={x:t.clientX,y:t.clientY,u_:l,ev:t.localX,rv:t.localY}),null!==this.dp&&!this.fp&&(this.dp.x!==t.clientX||this.dp.y!==t.clientY)){if(t.Sf&&r.touch||!t.Sf&&r.mouse){const t=n.Ks();this.Mp=new Ln(.2/t,7/t,.997,15/t),this.Mp.Xc(n.ou(),this.dp.u_)}else this.Mp=null;h.Vi()||i.jo(this.Sp,h,t.localY),i.Mc(t.localX),this.fp=!0}this.fp&&(h.Vi()||i.$o(this.Sp,h,t.localY),i.Sc(t.localX),null!==this.Mp&&this.Mp.Xc(n.ou(),l))}}class Gn{constructor(t,i,n,s,e){this.vt=!0,this.Tf=Sn({width:0,height:0}),this.Bf=()=>this.ip(3),this.Lf="left"===t,this.Gu=n.Rc,this.un=i,this.hv=s,this.lv=e,this.zf=document.createElement("div"),this.zf.style.width="25px",this.zf.style.height="100%",this.zf.style.overflow="hidden",this.If=zn(this.zf,Sn({width:16,height:16})),this.If.subscribeSuggestedBitmapSizeChanged(this.Bf)}M(){this.If.unsubscribeSuggestedBitmapSizeChanged(this.Bf),this.If.dispose()}Yf(){return this.zf}qp(){return this.Tf}Jf(t){xn(this.Tf,t)||(this.Tf=t,this.If.resizeCanvasElement(t),this.zf.style.width=`${t.width}px`,this.zf.style.height=`${t.height}px`,this.vt=!0)}ip(t){if(t<3&&!this.vt)return;if(0===this.Tf.width||0===this.Tf.height)return;this.vt=!1,this.If.applySuggestedBitmapSize();const i=Pn(this.If);null!==i&&i.useBitmapCoordinateSpace((t=>{this.sp(t),this.ye(t)}))}lp(){return this.If.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.If.canvasElement,i,n)}ye({context:t,bitmapSize:i,horizontalPixelRatio:n,verticalPixelRatio:s}){if(!this.hv())return;t.fillStyle=this.un.timeScale.borderColor;const e=Math.floor(this.Gu.F().k*n),r=Math.floor(this.Gu.F().k*s),h=this.Lf?i.width-e:0;t.fillRect(h,0,e,r)}sp({context:t,bitmapSize:i}){V(t,0,0,i.width,i.height,this.lv())}}function Jn(t,i){return t.w_>i.w_?t:i}class Qn{constructor(t){this.av=null,this.ov=null,this.S=null,this._v=!1,this.Tf=Sn({width:0,height:0}),this.uv=new m,this.Rf=new Wt(5),this.Of=!1,this.Bf=()=>{this.Of||this.xp.Ut().Ch()},this.Af=()=>{this.Of||this.xp.Ut().Ch()},this.xp=t,this.un=t.F().layout,this.cv=document.createElement("tr"),this.dv=document.createElement("td"),this.dv.style.padding="0",this.fv=document.createElement("td"),this.fv.style.padding="0",this.zf=document.createElement("td"),this.zf.style.height="25px",this.zf.style.padding="0",this.pv=document.createElement("div"),this.pv.style.width="100%",this.pv.style.height="100%",this.pv.style.position="relative",this.pv.style.overflow="hidden",this.zf.appendChild(this.pv),this.If=zn(this.pv,Sn({width:16,height:16})),this.If.subscribeSuggestedBitmapSizeChanged(this.Bf);const i=this.If.canvasElement;i.style.position="absolute",i.style.zIndex="1",i.style.left="0",i.style.top="0",this.Nf=zn(this.pv,Sn({width:16,height:16})),this.Nf.subscribeSuggestedBitmapSizeChanged(this.Af);const n=this.Nf.canvasElement;n.style.position="absolute",n.style.zIndex="2",n.style.left="0",n.style.top="0",this.cv.appendChild(this.dv),this.cv.appendChild(this.zf),this.cv.appendChild(this.fv),this.vv(),this.xp.Ut().Po().l(this.vv.bind(this),this),this.qf=new Nn(this.Nf.canvasElement,this,{Zd:()=>!0,Kd:()=>!1})}M(){this.qf.M(),null!==this.av&&this.av.M(),null!==this.ov&&this.ov.M(),this.Nf.unsubscribeSuggestedBitmapSizeChanged(this.Af),this.Nf.dispose(),this.If.unsubscribeSuggestedBitmapSizeChanged(this.Bf),this.If.dispose()}Yf(){return this.cv}mv(){return this.av}bv(){return this.ov}_f(t){if(this._v)return;this._v=!0;const i=this.xp.Ut();!i.yt().Vi()&&this.xp.F().handleScale.axisPressedMouseMove.time&&i.bc(t.localX)}lf(t){this._f(t)}uf(){const t=this.xp.Ut();!t.yt().Vi()&&this._v&&(this._v=!1,this.xp.F().handleScale.axisPressedMouseMove.time&&t.kc())}Qd(t){const i=this.xp.Ut();!i.yt().Vi()&&this.xp.F().handleScale.axisPressedMouseMove.time&&i.yc(t.localX)}Gd(t){this.Qd(t)}sf(){this._v=!1;const t=this.xp.Ut();t.yt().Vi()&&!this.xp.F().handleScale.axisPressedMouseMove.time||t.kc()}if(){this.sf()}Id(){this.xp.F().handleScale.axisDoubleClickReset.time&&this.xp.Ut().Zn()}Ed(){this.Id()}Hd(){this.xp.Ut().F().handleScale.axisPressedMouseMove.time&&this.op(1)}wf(){this.op(0)}qp(){return this.Tf}gv(){return this.uv}wv(t,i,n){xn(this.Tf,t)||(this.Tf=t,this.Of=!0,this.If.resizeCanvasElement(t),this.Nf.resizeCanvasElement(t),this.Of=!1,this.zf.style.width=`${t.width}px`,this.zf.style.height=`${t.height}px`,this.uv.m(t)),null!==this.av&&this.av.Jf(Sn({width:i,height:t.height})),null!==this.ov&&this.ov.Jf(Sn({width:n,height:t.height}))}Mv(){const t=this.Sv();return Math.ceil(t.k+t.C+t.T+t.I+t.B+t.xv)}gt(){this.xp.Ut().yt().Jl()}lp(){return this.If.bitmapSize}ap(t,i,n){const s=this.lp();s.width>0&&s.height>0&&t.drawImage(this.If.canvasElement,i,n)}ip(t){if(0===t)return;if(1!==t){this.If.applySuggestedBitmapSize();const i=Pn(this.If);null!==i&&(i.useBitmapCoordinateSpace((t=>{this.sp(t),this.ye(t)})),this.ep(i)),null!==this.av&&this.av.ip(t),null!==this.ov&&this.ov.ip(t)}this.Nf.applySuggestedBitmapSize();const i=Pn(this.Nf);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this.yv([this.xp.Ut().dc()],i))}sp({context:t,bitmapSize:i}){V(t,0,0,i.width,i.height,this.xp.Ut().Lc())}ye({context:t,bitmapSize:i,verticalPixelRatio:n}){if(this.xp.F().timeScale.borderVisible){t.fillStyle=this.kv();const s=Math.max(1,Math.floor(this.Sv().k*n));t.fillRect(0,0,i.width,s)}}ep(t){const i=this.xp.Ut().yt(),n=i.Jl();if(!n||0===n.length)return;let s=n.reduce(Jn,n[0]).w_;s>30&&s<50&&(s=30);const e=this.Sv(),r=i.F();r.borderVisible&&r.ticksVisible&&t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:i,verticalPixelRatio:s})=>{t.strokeStyle=this.kv(),t.fillStyle=this.kv();const r=Math.max(1,Math.floor(i)),h=Math.floor(.5*i);t.beginPath();const l=Math.round(e.C*s);for(let s=n.length;s--;){const e=Math.round(n[s].Yl*i);t.rect(e-h,0,r,l)}t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{const i=e.k+e.C+e.I+e.T/2;t.textAlign="center",t.textBaseline="middle",t.fillStyle=this.$(),t.font=this.Kf();for(const e of n)if(e.w_=s){const n=e.cu?this.Cv(t,e.Yl,e.ua):e.Yl;t.fillText(e.ua,n,i)}}))}Cv(t,i,n){const s=this.Rf.Si(t,n),e=s/2,r=Math.floor(i-e)+.5;return r<0?i+=Math.abs(0-r):r+s>this.Tf.width&&(i-=Math.abs(this.Tf.width-(r+s))),i}yv(t,i){const n=this.Sv();for(const s of t)for(const t of s.Qi())t.Mt().X(i,n)}kv(){return this.xp.F().timeScale.borderColor}$(){return this.un.textColor}W(){return this.un.fontSize}Kf(){return T(this.W(),this.un.fontFamily)}Tv(){return T(this.W(),this.un.fontFamily,"bold")}Sv(){null===this.S&&(this.S={k:1,N:NaN,I:NaN,B:NaN,ji:NaN,C:5,T:NaN,P:"",Wi:new Wt,xv:0});const t=this.S,i=this.Kf();if(t.P!==i){const n=this.W();t.T=n,t.P=i,t.I=3*n/12,t.B=3*n/12,t.ji=9*n/12,t.N=0,t.xv=4*n/12,t.Wi.Fe()}return this.S}op(t){this.zf.style.cursor=1===t?"ew-resize":"default"}vv(){const t=this.xp.Ut(),i=t.F();i.leftPriceScale.visible||null===this.av||(this.dv.removeChild(this.av.Yf()),this.av.M(),this.av=null),i.rightPriceScale.visible||null===this.ov||(this.fv.removeChild(this.ov.Yf()),this.ov.M(),this.ov=null);const n={Rc:this.xp.Ut().Rc()},s=()=>i.leftPriceScale.borderVisible&&t.yt().F().borderVisible,e=()=>t.Lc();i.leftPriceScale.visible&&null===this.av&&(this.av=new Gn("left",i,n,s,e),this.dv.appendChild(this.av.Yf())),i.rightPriceScale.visible&&null===this.ov&&(this.ov=new Gn("right",i,n,s,e),this.fv.appendChild(this.ov.Yf()))}}const ts=!!Rn&&!!navigator.userAgentData&&navigator.userAgentData.brands.some((t=>t.brand.includes("Chromium")))&&!!Rn&&((null===(is=null===navigator||void 0===navigator?void 0:navigator.userAgentData)||void 0===is?void 0:is.platform)?"Windows"===navigator.userAgentData.platform:navigator.userAgent.toLowerCase().indexOf("win")>=0);var is;class ns{constructor(t,i){var n;this.Pv=[],this.Rv=0,this.fa=0,this.vo=0,this.Dv=0,this.Ov=0,this.Bv=null,this.Ev=!1,this.pp=new m,this.Xu=new m,this.Av=null,this.Lv=t,this.un=i,this.cv=document.createElement("div"),this.cv.classList.add("tv-lightweight-charts"),this.cv.style.overflow="hidden",this.cv.style.width="100%",this.cv.style.height="100%",(n=this.cv).style.userSelect="none",n.style.webkitUserSelect="none",n.style.msUserSelect="none",n.style.MozUserSelect="none",n.style.webkitTapHighlightColor="transparent",this.zv=document.createElement("table"),this.zv.setAttribute("cellspacing","0"),this.cv.appendChild(this.zv),this.Iv=this.Nv.bind(this),ss(this.un)&&this.Vv(!0),this.Hi=new gn(this.Ku.bind(this),this.un),this.Ut().fc().l(this.Fv.bind(this),this),this.Wv=new Qn(this),this.zv.appendChild(this.Wv.Yf());const s=i.autoSize&&this.jv();let e=this.un.width,r=this.un.height;if(s||0===e||0===r){const i=t.getBoundingClientRect();e=e||i.width,r=r||i.height}this.$v(e,r),this.Hv(),t.appendChild(this.cv),this.Uv(),this.Hi.yt().yu().l(this.Hi.dl.bind(this.Hi),this),this.Hi.Po().l(this.Hi.dl.bind(this.Hi),this)}Ut(){return this.Hi}F(){return this.un}qv(){return this.Pv}Yv(){return this.Wv}M(){this.Vv(!1),0!==this.Rv&&window.cancelAnimationFrame(this.Rv),this.Hi.fc().v(this),this.Hi.yt().yu().v(this),this.Hi.Po().v(this),this.Hi.M();for(const t of this.Pv)this.zv.removeChild(t.Yf()),t.jp().v(this),t.M();this.Pv=[],h(this.Wv).M(),null!==this.cv.parentElement&&this.cv.parentElement.removeChild(this.cv),this.Xu.M(),this.pp.M(),this.Xv()}$v(t,i,n=!1){if(this.fa===i&&this.vo===t)return;const s=function(t){const i=Math.floor(t.width),n=Math.floor(t.height);return Sn({width:i-i%2,height:n-n%2})}(Sn({width:t,height:i}));this.fa=s.height,this.vo=s.width;const e=this.fa+"px",r=this.vo+"px";h(this.cv).style.height=e,h(this.cv).style.width=r,this.zv.style.height=e,this.zv.style.width=r,n?this.Zv(tt.ss(),performance.now()):this.Hi.dl()}ip(t){void 0===t&&(t=tt.ss());for(let i=0;i{let s=0;for(let e=0;e{h("left"===i?this.Wv.mv():this.Wv.bv()).ap(h(t),n,s)};if(this.un.timeScale.visible){const i=this.Wv.lp();if(null!==t){let e=0;this.tm()&&(r("left",e,n),e=h(s.Jp()).lp().width),this.Wv.ap(t,e,n),e+=i.width,this.im()&&r("right",e,n)}n+=i.height}return Sn({width:i,height:n})}sm(){let t=0,i=0,n=0;for(const s of this.Pv)this.tm()&&(i=Math.max(i,h(s.Jp()).Zf())),this.im()&&(n=Math.max(n,h(s.Qp()).Zf())),t+=s.Ro();i=Bn(i),n=Bn(n);const s=this.vo,e=this.fa,r=Math.max(s-i-n,0),l=this.un.timeScale.visible;let a=l?this.Wv.Mv():0;var o;a=(o=a)+o%2;const _=0+a,u=e<_?0:e-_,c=u/t;let d=0;for(let t=0;t{t.Bp()})),3===(null===(n=this.Bv)||void 0===n?void 0:n.Wn())&&(this.Bv.Qn(t),this.hm(),this.lm(this.Bv),this.am(this.Bv,i),t=this.Bv,this.Bv=null)),this.ip(t)}am(t,i){for(const n of t.Jn())this.ts(n,i)}lm(t){const i=this.Hi.uc();for(let n=0;n{if(this.Ev=!1,this.Rv=0,null!==this.Bv){const i=this.Bv;this.Bv=null,this.Zv(i,t);for(const n of i.Jn())if(5===n.Un&&!n.Bt.wu(t)){this.Ut().Yn(n.Bt);break}}})))}hm(){this.Hv()}Hv(){const t=this.Hi.uc(),i=t.length,n=this.Pv.length;for(let t=i;t{const n=i.An().jh(t);null!==n&&e.set(i,n)}))}let r;if(null!==t){const i=null===(s=this.Hi.yt().Ui(t))||void 0===s?void 0:s.M_;void 0!==i&&(r=i)}const h=this.Ut().hc(),l=null!==h&&h.ac instanceof yi?h.ac:void 0,a=null!==h&&void 0!==h.zp?h.zp.nr:void 0;return{_t:r,Ys:null!=t?t:void 0,um:null!=i?i:void 0,dm:l,fm:e,pm:a,vm:null!=n?n:void 0}}om(t,i,n){this.pp.m((()=>this._m(t,i,n)))}Fv(t,i,n){this.Xu.m((()=>this._m(t,i,n)))}Uv(){const t=this.un.timeScale.visible?"":"none";this.Wv.Yf().style.display=t}tm(){return this.Pv[0].tp().Io().F().visible}im(){return this.Pv[0].tp().No().F().visible}jv(){return"ResizeObserver"in window&&(this.Av=new ResizeObserver((t=>{const i=t.find((t=>t.target===this.Lv));i&&this.$v(i.contentRect.width,i.contentRect.height)})),this.Av.observe(this.Lv,{box:"border-box"}),!0)}Xv(){null!==this.Av&&this.Av.disconnect()}}function ss(t){return Boolean(t.handleScroll.mouseWheel||t.handleScale.mouseWheel)}function es(t,i,n,s){const e=n.value,r={Ys:i,_t:t,Bt:[e,e,e,e],M_:s};return void 0!==n.color&&(r.D=n.color),r}function rs(t){return void 0!==t.Bt}function hs(t){return(i,n,s,e)=>{return void 0===(r=s).open&&void 0===r.value?{_t:i,Ys:n,M_:e}:t(i,n,s,e);var r}}const ls={Candlestick:hs((function(t,i,n,s){const e={Ys:i,_t:t,Bt:[n.open,n.high,n.low,n.close],M_:s};return void 0!==n.color&&(e.D=n.color),void 0!==n.borderColor&&(e.Et=n.borderColor),void 0!==n.wickColor&&(e.Dh=n.wickColor),e})),Bar:hs((function(t,i,n,s){const e={Ys:i,_t:t,Bt:[n.open,n.high,n.low,n.close],M_:s};return void 0!==n.color&&(e.D=n.color),e})),Area:hs((function(t,i,n,s){const e=n.value,r={Ys:i,_t:t,Bt:[e,e,e,e],M_:s};return void 0!==n.lineColor&&(r.ot=n.lineColor),void 0!==n.topColor&&(r.bs=n.topColor),void 0!==n.bottomColor&&(r.gs=n.bottomColor),r})),Baseline:hs((function(t,i,n,s){const e=n.value,r={Ys:i,_t:t,Bt:[e,e,e,e],M_:s};return void 0!==n.topLineColor&&(r.be=n.topLineColor),void 0!==n.bottomLineColor&&(r.ge=n.bottomLineColor),void 0!==n.topFillColor1&&(r.de=n.topFillColor1),void 0!==n.topFillColor2&&(r.fe=n.topFillColor2),void 0!==n.bottomFillColor1&&(r.pe=n.bottomFillColor1),void 0!==n.bottomFillColor2&&(r.ve=n.bottomFillColor2),r})),Histogram:hs(es),Line:hs(es)};function as(t){return ls[t]}function os(t){return 60*t*60*1e3}function _s(t){return 60*t*1e3}const us=[{bm:(cs=1,1e3*cs),w_:10},{bm:_s(1),w_:20},{bm:_s(5),w_:21},{bm:_s(30),w_:22},{bm:os(1),w_:30},{bm:os(3),w_:31},{bm:os(6),w_:32},{bm:os(12),w_:33}];var cs;function ds(t,i){if(t.getUTCFullYear()!==i.getUTCFullYear())return 70;if(t.getUTCMonth()!==i.getUTCMonth())return 60;if(t.getUTCDate()!==i.getUTCDate())return 50;for(let n=us.length-1;n>=0;--n)if(Math.floor(i.getTime()/us[n].bm)!==Math.floor(t.getTime()/us[n].bm))return us[n].w_;return 0}function fs(t,i=0){if(0===t.length)return;let n=0===i?null:t[i-1]._t.u_,s=null!==n?new Date(1e3*n):null,e=0;for(let r=i;r1){const i=Math.ceil(e/(t.length-1)),n=new Date(1e3*(t[0]._t.u_-i));t[0].g_=ds(new Date(1e3*t[0]._t.u_),n)}}function ps(t){if(!wn(t))throw new Error("time must be of type BusinessDay");const i=new Date(Date.UTC(t.year,t.month-1,t.day,0,0,0,0));return{u_:Math.round(i.getTime()/1e3),__:t}}function vs(t){if(!Mn(t))throw new Error("time must be of type isUTCTimestamp");return{u_:t}}function ms(t){return 0===t.length?null:wn(t[0].time)?ps:vs}function bs(t){return Mn(t)?vs(t):wn(t)?ps(t):ps(gs(t))}function gs(t){const i=new Date(t);if(isNaN(i.getTime()))throw new Error(`Invalid date string=${t}, expected format=yyyy-mm-dd`);return{day:i.getUTCDate(),month:i.getUTCMonth()+1,year:i.getUTCFullYear()}}function ws(t){M(t.time)&&(t.time=gs(t.time))}function Ms(t){return{Ys:0,gm:new Map,yl:t}}function Ss(t){if(void 0!==t&&0!==t.length)return{wm:t[0]._t.u_,Mm:t[t.length-1]._t.u_}}function xs(t){let i;return t.forEach((t=>{void 0===i&&(i=t.M_)})),r(i)}function ys(t){void 0===t.M_&&(t.M_=t.time)}class ks{constructor(){this.Sm=new Map,this.xm=new Map,this.ym=new Map,this.km=[]}M(){this.Sm.clear(),this.xm.clear(),this.ym.clear(),this.km=[]}Cm(t,i){let n=0!==this.Sm.size,s=!1;const e=this.xm.get(t);if(void 0!==e)if(1===this.xm.size)n=!1,s=!0,this.Sm.clear();else for(const i of this.km)i.pointData.gm.delete(t)&&(s=!0);let r=[];if(0!==i.length){const n=i;n.forEach((t=>ys(t))),function(t){t.forEach(ws)}(i);const e=h(ms(i)),l=as(t.Ah());r=n.map((i=>{const n=e(i.time);let r=this.Sm.get(n.u_);void 0===r&&(r=Ms(n),this.Sm.set(n.u_,r),s=!0);const h=l(n,r.Ys,i,i.M_);return r.gm.set(t,h),h}))}n&&this.Tm(),this.Pm(t,r);let l=-1;if(s){const t=[];this.Sm.forEach((i=>{t.push({g_:0,_t:i.yl,pointData:i,M_:xs(i.gm)})})),t.sort(((t,i)=>t._t.u_-i._t.u_)),l=this.Rm(t)}return this.Dm(t,l,function(t,i){const n=Ss(t),s=Ss(i);if(void 0!==n&&void 0!==s)return{ml:n.Mm>=s.Mm&&n.wm>=s.wm}}(this.xm.get(t),e))}Bc(t){return this.Cm(t,[])}Om(t,i){const n=i;ys(n),ws(i);const s=h(ms([i]))(i.time),e=this.ym.get(t);if(void 0!==e&&s.u_t._t.u_s._t.u_?rs(i)&&n.push(i):rs(i)?n[n.length-1]=i:n.splice(-1,1),this.ym.set(t,i._t)}Pm(t,i){0!==i.length?(this.xm.set(t,i.filter(rs)),this.ym.set(t,i[i.length-1]._t)):(this.xm.delete(t),this.ym.delete(t))}Tm(){for(const t of this.km)0===t.pointData.gm.size&&this.Sm.delete(t._t.u_)}Rm(t){let i=-1;for(let n=0;n{0!==i.length&&(t=Math.max(t,i[i.length-1].Ys))})),t}Dm(t,i,n){const s={Am:new Map,yt:{eu:this.Em()}};if(-1!==i)this.xm.forEach(((i,e)=>{s.Am.set(e,{ar:i,Lm:e===t?n:void 0})})),this.xm.has(t)||s.Am.set(t,{ar:[],Lm:n}),s.yt.zm=this.km,s.yt.Im=i;else{const i=this.xm.get(t);s.Am.set(t,{ar:i||[],Lm:n})}return s}}function Cs(t,i){t.Ys=i,t.gm.forEach((t=>{t.Ys=i}))}function Ts(t){return{value:t.Bt[3],time:t.M_}}function Ps(t){const i=Ts(t);return void 0!==t.D&&(i.color=t.D),i}function Rs(t){return{open:t.Bt[0],high:t.Bt[1],low:t.Bt[2],close:t.Bt[3],time:t.M_}}const Ds={Area:function(t){const i=Ts(t);return void 0!==t.ot&&(i.lineColor=t.ot),void 0!==t.bs&&(i.topColor=t.bs),void 0!==t.gs&&(i.bottomColor=t.gs),i},Line:Ps,Baseline:function(t){const i=Ts(t);return void 0!==t.be&&(i.topLineColor=t.be),void 0!==t.ge&&(i.bottomLineColor=t.ge),void 0!==t.de&&(i.topFillColor1=t.de),void 0!==t.fe&&(i.topFillColor2=t.fe),void 0!==t.pe&&(i.bottomFillColor1=t.pe),void 0!==t.ve&&(i.bottomFillColor2=t.ve),i},Histogram:Ps,Bar:function(t){const i=Rs(t);return void 0!==t.D&&(i.color=t.D),i},Candlestick:function(t){const i=Rs(t),{D:n,Et:s,Dh:e}=t;return void 0!==n&&(i.color=n),void 0!==s&&(i.borderColor=s),void 0!==e&&(i.wickColor=e),i}};function Os(t){return Ds[t]}const Bs={autoScale:!0,mode:0,invertScale:!1,alignLabels:!0,borderVisible:!0,borderColor:"#2B2B43",entireTextOnly:!1,visible:!1,ticksVisible:!1,scaleMargins:{bottom:.1,top:.2}},Es={color:"rgba(0, 0, 0, 0)",visible:!1,fontSize:48,fontFamily:C,fontStyle:"",text:"",horzAlign:"center",vertAlign:"center"},As={width:0,height:0,autoSize:!1,layout:{background:{type:"solid",color:"#FFFFFF"},textColor:"#191919",fontSize:12,fontFamily:C},crosshair:{vertLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},horzLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},mode:1},grid:{vertLines:{color:"#D6DCDE",style:0,visible:!0},horzLines:{color:"#D6DCDE",style:0,visible:!0}},overlayPriceScales:Object.assign({},Bs),leftPriceScale:Object.assign(Object.assign({},Bs),{visible:!1}),rightPriceScale:Object.assign(Object.assign({},Bs),{visible:!0}),timeScale:{rightOffset:0,barSpacing:6,minBarSpacing:.5,fixLeftEdge:!1,fixRightEdge:!1,lockVisibleTimeRangeOnResize:!1,rightBarStaysOnScroll:!1,borderVisible:!0,borderColor:"#2B2B43",visible:!0,timeVisible:!1,secondsVisible:!0,shiftVisibleRangeOnNewBar:!0,ticksVisible:!1},watermark:Es,localization:{locale:Rn?navigator.language:"",dateFormat:"dd MMM 'yy"},handleScroll:{mouseWheel:!0,pressedMouseMove:!0,horzTouchDrag:!0,vertTouchDrag:!0},handleScale:{axisPressedMouseMove:{time:!0,price:!0},axisDoubleClickReset:{time:!0,price:!0},mouseWheel:!0,pinch:!0},kineticScroll:{mouse:!1,touch:!0},trackingMode:{exitMode:1}},Ls={upColor:"#26a69a",downColor:"#ef5350",wickVisible:!0,borderVisible:!0,borderColor:"#378658",borderUpColor:"#26a69a",borderDownColor:"#ef5350",wickColor:"#737375",wickUpColor:"#26a69a",wickDownColor:"#ef5350"},zs={upColor:"#26a69a",downColor:"#ef5350",openVisible:!0,thinBars:!0},Is={color:"#2196f3",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},Ns={topColor:"rgba( 46, 220, 135, 0.4)",bottomColor:"rgba( 40, 221, 100, 0)",invertFilledArea:!1,lineColor:"#33D778",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},Vs={baseValue:{type:"price",price:0},topFillColor1:"rgba(38, 166, 154, 0.28)",topFillColor2:"rgba(38, 166, 154, 0.05)",topLineColor:"rgba(38, 166, 154, 1)",bottomFillColor1:"rgba(239, 83, 80, 0.05)",bottomFillColor2:"rgba(239, 83, 80, 0.28)",bottomLineColor:"rgba(239, 83, 80, 1)",lineWidth:3,lineStyle:0,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},Fs={color:"#26a69a",base:0},Ws={title:"",visible:!0,lastValueVisible:!0,priceLineVisible:!0,priceLineSource:0,priceLineWidth:1,priceLineColor:"",priceLineStyle:2,baseLineVisible:!0,baseLineWidth:1,baseLineColor:"#B2B5BE",baseLineStyle:0,priceFormat:{type:"price",precision:2,minMove:.01}};class js{constructor(t,i){this.Nm=t,this.Vm=i}applyOptions(t){this.Nm.Ut().oc(this.Vm,t)}options(){return this.Ii().F()}width(){return Q(this.Vm)?this.Nm.Qv(this.Vm):0}Ii(){return h(this.Nm.Ut()._c(this.Vm)).Ot}}const $s={color:"#FF0000",price:0,lineStyle:2,lineWidth:1,lineVisible:!0,axisLabelVisible:!0,title:"",axisLabelColor:"",axisLabelTextColor:""};class Hs{constructor(t){this.wh=t}applyOptions(t){this.wh.kh(t)}options(){return this.wh.F()}Fm(){return this.wh}}class Us{constructor(t,i,n){this.Ts=t,this.Wm=i,this.jm=n}priceFormatter(){return this.Ts.Ol()}priceToCoordinate(t){const i=this.Ts.Tt();return null===i?null:this.Ts.Ot().Dt(t,i.Bt)}coordinateToPrice(t){const i=this.Ts.Tt();return null===i?null:this.Ts.Ot().pn(t,i.Bt)}barsInLogicalRange(t){if(null===t)return null;const i=new on(new hn(t.from,t.to)).C_(),n=this.Ts.An();if(n.Vi())return null;const s=n.jh(i.Ms(),1),e=n.jh(i.ci(),-1),r=h(n.Vh()),l=h(n.En());if(null!==s&&null!==e&&s.Ys>e.Ys)return{barsBefore:t.from-r,barsAfter:l-t.to};const a={barsBefore:null===s||s.Ys===r?t.from-r:s.Ys-r,barsAfter:null===e||e.Ys===l?l-t.to:l-e.Ys};return null!==s&&null!==e&&(a.from=s._t.__||s._t.u_,a.to=e._t.__||e._t.u_),a}setData(t){this.Ts.Ah(),this.Wm.$m(this.Ts,t)}update(t){this.Ts.Ah(),this.Wm.Hm(this.Ts,t)}dataByIndex(t,i){const n=this.Ts.An().jh(t,i);return null===n?null:Os(this.seriesType())(n)}setMarkers(t){const i=t.map((t=>Object.assign(Object.assign({},t),{originalTime:t.time,time:bs(t.time)})));this.Ts.gl(i)}markers(){return this.Ts.wl().map((t=>{const{originalTime:i,time:n}=t,s=function(t,i){var n={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&i.indexOf(s)<0&&(n[s]=t[s]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var e=0;for(s=Object.getOwnPropertySymbols(t);e=1)return 0;let i=0;for(;i<8;i++){const n=Math.round(t);if(Math.abs(n-t)<1e-8)return i;t*=10}return i}(i.minMove))}function Xs(t){return function(t){if(S(t.handleScale)){const i=t.handleScale;t.handleScale={axisDoubleClickReset:{time:i,price:i},axisPressedMouseMove:{time:i,price:i},mouseWheel:i,pinch:i}}else if(void 0!==t.handleScale){const{axisPressedMouseMove:i,axisDoubleClickReset:n}=t.handleScale;S(i)&&(t.handleScale.axisPressedMouseMove={time:i,price:i}),S(n)&&(t.handleScale.axisDoubleClickReset={time:n,price:n})}const i=t.handleScroll;S(i)&&(t.handleScroll={horzTouchDrag:i,vertTouchDrag:i,mouseWheel:i,pressedMouseMove:i})}(t),t}class Zs{constructor(t,i){this.Zm=new ks,this.Km=new Map,this.Gm=new Map,this.Jm=new m,this.Qm=new m;const n=void 0===i?x(As):b(x(As),Xs(i));this.Nm=new ns(t,n),this.Nm.jp().l((t=>{this.Jm.g()&&this.Jm.m(this.tb(t()))}),this),this.Nm.fc().l((t=>{this.Qm.g()&&this.Qm.m(this.tb(t()))}),this);const s=this.Nm.Ut();this.ib=new qs(s,this.Nm.Yv())}remove(){this.Nm.jp().v(this),this.Nm.fc().v(this),this.ib.M(),this.Nm.M(),this.Km.clear(),this.Gm.clear(),this.Jm.M(),this.Qm.M(),this.Zm.M()}resize(t,i,n){this.autoSizeActive()||this.Nm.$v(t,i,n)}addAreaSeries(t){return this.nb("Area",Ns,t)}addBaselineSeries(t){return this.nb("Baseline",Vs,t)}addBarSeries(t){return this.nb("Bar",zs,t)}addCandlestickSeries(t={}){return function(t){void 0!==t.borderColor&&(t.borderUpColor=t.borderColor,t.borderDownColor=t.borderColor),void 0!==t.wickColor&&(t.wickUpColor=t.wickColor,t.wickDownColor=t.wickColor)}(t),this.nb("Candlestick",Ls,t)}addHistogramSeries(t){return this.nb("Histogram",Fs,t)}addLineSeries(t){return this.nb("Line",Is,t)}removeSeries(t){const i=r(this.Km.get(t)),n=this.Zm.Bc(i);this.Nm.Ut().Bc(i),this.sb(n),this.Km.delete(t),this.Gm.delete(i)}$m(t,i){this.sb(this.Zm.Cm(t,i))}Hm(t,i){this.sb(this.Zm.Om(t,i))}subscribeClick(t){this.Jm.l(t)}unsubscribeClick(t){this.Jm.p(t)}subscribeCrosshairMove(t){this.Qm.l(t)}unsubscribeCrosshairMove(t){this.Qm.p(t)}priceScale(t){return new js(this.Nm,t)}timeScale(){return this.ib}applyOptions(t){this.Nm.kh(Xs(t))}options(){return this.Nm.F()}takeScreenshot(){return this.Nm.Gv()}autoSizeActive(){return this.Nm.nm()}nb(t,i,n={}){Ys(n.priceFormat);const s=b(x(Ws),x(i),n),e=this.Nm.Ut().Dc(t,s),r=new Us(e,this,this);return this.Km.set(r,e),this.Gm.set(e,r),r}sb(t){const i=this.Nm.Ut();i.Pc(t.yt.eu,t.yt.zm,t.yt.Im),t.Am.forEach(((t,i)=>i.tt(t.ar,t.Lm))),i.lu()}eb(t){return r(this.Gm.get(t))}tb(t){const i=new Map;t.fm.forEach(((t,n)=>{const s=Os(n.Ah())(t);e(function(t){return void 0!==t.open||void 0!==t.value}(s)),i.set(this.eb(n),s)}));const n=void 0===t.dm?void 0:this.eb(t.dm);return{time:t._t,logical:t.Ys,point:t.um,hoveredSeries:n,hoveredObjectId:t.pm,seriesData:i,sourceEvent:t.vm}}}var Ks=Object.freeze({__proto__:null,get ColorType(){return fn},get CrosshairMode(){return G},get LastPriceAnimationMode(){return cn},get LineStyle(){return i},get LineType(){return t},get MismatchDirection(){return wi},get PriceLineSource(){return dn},get PriceScaleMode(){return ji},get TickMarkType(){return _n},get TrackingModeExitMode(){return un},createChart:function(t,i){let n;if(M(t)){const i=document.getElementById(t);e(null!==i,`Cannot find element in DOM with id=${t}`),n=i}else n=t;return new Zs(n,i)},isBusinessDay:wn,isUTCTimestamp:Mn,version:function(){return"4.0.1"}});window.LightweightCharts=Ks}(); +!function(){"use strict";var t,i;function s(t,i){const s={0:[],1:[t.lineWidth,t.lineWidth],2:[2*t.lineWidth,2*t.lineWidth],3:[6*t.lineWidth,6*t.lineWidth],4:[t.lineWidth,4*t.lineWidth]}[i];t.setLineDash(s)}function e(t,i,s,e){t.beginPath();const h=t.lineWidth%2?.5:0;t.moveTo(s,i+h),t.lineTo(e,i+h),t.stroke()}function h(t,i){if(!t)throw new Error("Assertion failed"+(i?": "+i:""))}function n(t){if(void 0===t)throw new Error("Value is undefined");return t}function r(t){if(null===t)throw new Error("Value is null");return t}function o(t){return r(n(t))}!function(t){t[t.Simple=0]="Simple",t[t.WithSteps=1]="WithSteps",t[t.Curved=2]="Curved"}(t||(t={})),function(t){t[t.Solid=0]="Solid",t[t.Dotted=1]="Dotted",t[t.Dashed=2]="Dashed",t[t.LargeDashed=3]="LargeDashed",t[t.SparseDotted=4]="SparseDotted"}(i||(i={}));const l={khaki:"#f0e68c",azure:"#f0ffff",aliceblue:"#f0f8ff",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",gray:"#808080",green:"#008000",honeydew:"#f0fff0",floralwhite:"#fffaf0",lightblue:"#add8e6",lightcoral:"#f08080",lemonchiffon:"#fffacd",hotpink:"#ff69b4",lightyellow:"#ffffe0",greenyellow:"#adff2f",lightgoldenrodyellow:"#fafad2",limegreen:"#32cd32",linen:"#faf0e6",lightcyan:"#e0ffff",magenta:"#f0f",maroon:"#800000",olive:"#808000",orange:"#ffa500",oldlace:"#fdf5e6",mediumblue:"#0000cd",transparent:"#0000",lime:"#0f0",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",midnightblue:"#191970",orchid:"#da70d6",mediumorchid:"#ba55d3",mediumturquoise:"#48d1cc",orangered:"#ff4500",royalblue:"#4169e1",powderblue:"#b0e0e6",red:"#f00",coral:"#ff7f50",turquoise:"#40e0d0",white:"#fff",whitesmoke:"#f5f5f5",wheat:"#f5deb3",teal:"#008080",steelblue:"#4682b4",bisque:"#ffe4c4",aquamarine:"#7fffd4",aqua:"#0ff",sienna:"#a0522d",silver:"#c0c0c0",springgreen:"#00ff7f",antiquewhite:"#faebd7",burlywood:"#deb887",brown:"#a52a2a",beige:"#f5f5dc",chocolate:"#d2691e",chartreuse:"#7fff00",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cadetblue:"#5f9ea0",tomato:"#ff6347",fuchsia:"#f0f",blue:"#00f",salmon:"#fa8072",blanchedalmond:"#ffebcd",slateblue:"#6a5acd",slategray:"#708090",thistle:"#d8bfd8",tan:"#d2b48c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",blueviolet:"#8a2be2",black:"#000",darkmagenta:"#8b008b",darkslateblue:"#483d8b",darkkhaki:"#bdb76b",darkorchid:"#9932cc",darkorange:"#ff8c00",darkgreen:"#006400",darkred:"#8b0000",dodgerblue:"#1e90ff",darkslategray:"#2f4f4f",dimgray:"#696969",deepskyblue:"#00bfff",firebrick:"#b22222",forestgreen:"#228b22",indigo:"#4b0082",ivory:"#fffff0",lavenderblush:"#fff0f5",feldspar:"#d19275",indianred:"#cd5c5c",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightskyblue:"#87cefa",lightslategray:"#789",lightslateblue:"#8470ff",snow:"#fffafa",lightseagreen:"#20b2aa",lightsalmon:"#ffa07a",darksalmon:"#e9967a",darkviolet:"#9400d3",mediumpurple:"#9370d8",mediumaquamarine:"#66cdaa",skyblue:"#87ceeb",lavender:"#e6e6fa",lightsteelblue:"#b0c4de",mediumvioletred:"#c71585",mintcream:"#f5fffa",navajowhite:"#ffdead",navy:"#000080",olivedrab:"#6b8e23",palevioletred:"#d87093",violetred:"#d02090",yellow:"#ff0",yellowgreen:"#9acd32",lawngreen:"#7cfc00",pink:"#ffc0cb",paleturquoise:"#afeeee",palegoldenrod:"#eee8aa",darkolivegreen:"#556b2f",darkseagreen:"#8fbc8f",darkturquoise:"#00ced1",peachpuff:"#ffdab9",deeppink:"#ff1493",violet:"#ee82ee",palegreen:"#98fb98",mediumseagreen:"#3cb371",peru:"#cd853f",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",purple:"#800080",seagreen:"#2e8b57",seashell:"#fff5ee",papayawhip:"#ffefd5",mediumslateblue:"#7b68ee",plum:"#dda0dd",mediumspringgreen:"#00fa9a"};function a(t){return t<0?0:t>255?255:Math.round(t)||0}function u(t){return t<=0||t>0?t<0?0:t>1?1:Math.round(1e4*t)/1e4:0}const c=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,d=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,f=/^rgb\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*\)$/,p=/^rgba\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?[\d]{0,10}(?:\.\d+)?)\s*\)$/;function m(t){(t=t.toLowerCase())in l&&(t=l[t]);{const i=p.exec(t)||f.exec(t);if(i)return[a(parseInt(i[1],10)),a(parseInt(i[2],10)),a(parseInt(i[3],10)),u(i.length<5?1:parseFloat(i[4]))]}{const i=d.exec(t);if(i)return[a(parseInt(i[1],16)),a(parseInt(i[2],16)),a(parseInt(i[3],16)),1]}{const i=c.exec(t);if(i)return[a(17*parseInt(i[1],16)),a(17*parseInt(i[2],16)),a(17*parseInt(i[3],16)),1]}throw new Error(`Cannot parse color: ${t}`)}function v(t){const i=m(t);return{background:`rgb(${i[0]}, ${i[1]}, ${i[2]})`,foreground:(s=i,.199*s[0]+.687*s[1]+.114*s[2]>160?"black":"white")};var s}class b{constructor(){this._listeners=[]}subscribe(t,i,s){const e={callback:t,linkedObject:i,singleshot:!0===s};this._listeners.push(e)}unsubscribe(t){const i=this._listeners.findIndex((i=>t===i.callback));i>-1&&this._listeners.splice(i,1)}unsubscribeAll(t){this._listeners=this._listeners.filter((i=>i.linkedObject!==t))}fire(t,i,s){const e=[...this._listeners];this._listeners=this._listeners.filter((t=>!t.singleshot)),e.forEach((e=>e.callback(t,i,s)))}hasListeners(){return this._listeners.length>0}destroy(){this._listeners=[]}}function g(t,...i){for(const s of i)for(const i in s)void 0!==s[i]&&("object"!=typeof s[i]||void 0===t[i]?t[i]=s[i]:g(t[i],s[i]));return t}function w(t){return"number"==typeof t&&isFinite(t)}function M(t){return"number"==typeof t&&t%1==0}function S(t){return"string"==typeof t}function x(t){return"boolean"==typeof t}function _(t){const i=t;if(!i||"object"!=typeof i)return i;let s,e,h;for(e in s=Array.isArray(i)?[]:{},i)i.hasOwnProperty(e)&&(h=i[e],s[e]=h&&"object"==typeof h?_(h):h);return s}function y(t){return null!==t}function k(t){return null===t?void 0:t}const C="-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif";function T(t,i,s){return void 0===i&&(i=C),`${s=void 0!==s?`${s} `:""}${t}px ${i}`}var P;!function(t){t[t.BorderSize=1]="BorderSize",t[t.TickLength=5]="TickLength"}(P||(P={}));class R{constructor(t){this._rendererOptions={borderSize:1,tickLength:5,fontSize:NaN,font:"",fontFamily:"",color:"",paneBackgroundColor:"",paddingBottom:0,paddingInner:0,paddingOuter:0,paddingTop:0,baselineOffset:0},this._chartModel=t}options(){const t=this._rendererOptions,i=this._fontSize(),s=this._fontFamily();return t.fontSize===i&&t.fontFamily===s||(t.fontSize=i,t.fontFamily=s,t.font=T(i,s),t.paddingTop=2.5/12*i,t.paddingBottom=t.paddingTop,t.paddingInner=i/12*t.tickLength,t.paddingOuter=i/12*t.tickLength,t.baselineOffset=0),t.color=this._textColor(),t.paneBackgroundColor=this._paneBackgroundColor(),this._rendererOptions}_textColor(){return this._chartModel.options().layout.textColor}_paneBackgroundColor(){return this._chartModel.backgroundTopColor()}_fontSize(){return this._chartModel.options().layout.fontSize}_fontFamily(){return this._chartModel.options().layout.fontFamily}}class D{constructor(){this._renderers=[]}setRenderers(t){this._renderers=t}draw(t,i,s){this._renderers.forEach((e=>{e.draw(t,i,s)}))}}class A{draw(t,i,s){t.useMediaCoordinateSpace((t=>this._drawImpl(t,i,s)))}drawBackground(t,i,s){t.useMediaCoordinateSpace((t=>this._drawBackgroundImpl(t,i,s)))}_drawBackgroundImpl(t,i,s){}}class E extends A{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t}){if(null===this._data||null===this._data.visibleRange)return;const i=this._data.visibleRange,s=this._data,e=e=>{t.beginPath();for(let h=i.to-1;h>=i.from;--h){const i=s.items[h];t.moveTo(i.x,i.y),t.arc(i.x,i.y,e,0,2*Math.PI)}t.fill()};s.lineWidth>0&&(t.fillStyle=s.backColor,e(s.radius+s.lineWidth)),t.fillStyle=s.lineColor,e(s.radius)}}function O(){return{items:[{x:0,y:0,time:0,price:0}],lineColor:"",backColor:"",radius:0,lineWidth:0,visibleRange:null}}const B={from:0,to:1};class L{constructor(t,i){this._compositeRenderer=new D,this._markersRenderers=[],this._markersData=[],this._invalidated=!0,this._chartModel=t,this._crosshair=i,this._compositeRenderer.setRenderers(this._markersRenderers)}update(t){const i=this._chartModel.serieses();i.length!==this._markersRenderers.length&&(this._markersData=i.map(O),this._markersRenderers=this._markersData.map((t=>{const i=new E;return i.setData(t),i})),this._compositeRenderer.setRenderers(this._markersRenderers)),this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._compositeRenderer}_updateImpl(){const t=this._chartModel.serieses(),i=this._crosshair.appliedIndex(),s=this._chartModel.timeScale();t.forEach(((t,e)=>{var h;const n=this._markersData[e],o=t.markerDataAtIndex(i);if(null===o||!t.visible())return void(n.visibleRange=null);const l=r(t.firstValue());n.lineColor=o.backgroundColor,n.radius=o.radius,n.lineWidth=o.borderWidth,n.items[0].price=o.price,n.items[0].y=t.priceScale().priceToCoordinate(o.price,l.value),n.backColor=null!==(h=o.borderColor)&&void 0!==h?h:this._chartModel.backgroundColorAtYPercentFromTop(n.items[0].y/t.priceScale().height()),n.items[0].time=i,n.items[0].x=s.indexToCoordinate(i),n.visibleRange=B}))}}class z{draw(t,i,s){t.useBitmapCoordinateSpace((t=>this._drawImpl(t,i,s)))}}class I extends z{constructor(t){super(),this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:h,verticalPixelRatio:n}){if(null===this._data)return;const r=this._data.vertLine.visible,o=this._data.horzLine.visible;if(!r&&!o)return;const l=Math.round(this._data.x*h),a=Math.round(this._data.y*n);t.lineCap="butt",r&&l>=0&&(t.lineWidth=Math.floor(this._data.vertLine.lineWidth*h),t.strokeStyle=this._data.vertLine.color,t.fillStyle=this._data.vertLine.color,s(t,this._data.vertLine.lineStyle),function(t,i,s,e){t.beginPath();const h=t.lineWidth%2?.5:0;t.moveTo(i+h,s),t.lineTo(i+h,e),t.stroke()}(t,l,0,i.height)),o&&a>=0&&(t.lineWidth=Math.floor(this._data.horzLine.lineWidth*n),t.strokeStyle=this._data.horzLine.color,t.fillStyle=this._data.horzLine.color,s(t,this._data.horzLine.lineStyle),e(t,a,0,i.width))}}class N{constructor(t){this._invalidated=!0,this._rendererData={vertLine:{lineWidth:1,lineStyle:0,color:"",visible:!1},horzLine:{lineWidth:1,lineStyle:0,color:"",visible:!1},x:0,y:0},this._renderer=new I(this._rendererData),this._source=t}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.visible(),i=r(this._source.pane()),s=i.model().options().crosshair,e=this._rendererData;e.horzLine.visible=t&&this._source.horzLineVisible(i),e.vertLine.visible=t&&this._source.vertLineVisible(),e.horzLine.lineWidth=s.horzLine.width,e.horzLine.lineStyle=s.horzLine.style,e.horzLine.color=s.horzLine.color,e.vertLine.lineWidth=s.vertLine.width,e.vertLine.lineStyle=s.vertLine.style,e.vertLine.color=s.vertLine.color,e.x=this._source.appliedX(),e.y=this._source.appliedY()}}function V(t,i,s,e,h,n){t.fillRect(i+n,s,e-2*n,n),t.fillRect(i+n,s+h-n,e-2*n,n),t.fillRect(i,s,n,h),t.fillRect(i+e-n,s,n,h)}function F(t,i,s,e,h,n){t.save(),t.globalCompositeOperation="copy",t.fillStyle=n,t.fillRect(i,s,e,h),t.restore()}function W(t,i){return Array.isArray(t)?t.map((t=>0===t?t:t+i)):t+i}function j(t,i,s,e,h,n){let r,o,l,a;if(Array.isArray(n))if(2===n.length){const t=Math.max(0,n[0]),i=Math.max(0,n[1]);r=t,o=t,l=i,a=i}else{if(4!==n.length)throw new Error("Wrong border radius - it should be like css border radius");r=Math.max(0,n[0]),o=Math.max(0,n[1]),l=Math.max(0,n[2]),a=Math.max(0,n[3])}else{const t=Math.max(0,n);r=t,o=t,l=t,a=t}t.beginPath(),t.moveTo(i+r,s),t.lineTo(i+e-o,s),0!==o&&t.arcTo(i+e,s,i+e,s+o,o),t.lineTo(i+e,s+h-l),0!==l&&t.arcTo(i+e,s+h,i+e-l,s+h,l),t.lineTo(i+a,s+h),0!==a&&t.arcTo(i,s+h,i,s+h-a,a),t.lineTo(i,s+r),0!==r&&t.arcTo(i,s,i+r,s,r)}function H(t,i,s,e,h,n,r=0,o=0,l=""){if(t.save(),!r||!l||l===n)return j(t,i,s,e,h,o),t.fillStyle=n,t.fill(),void t.restore();const a=r/2;if("transparent"!==n){j(t,i+r,s+r,e-2*r,h-2*r,W(o,-r)),t.fillStyle=n,t.fill()}if("transparent"!==l){j(t,i+a,s+a,e-r,h-r,W(o,-a)),t.lineWidth=r,t.strokeStyle=l,t.closePath(),t.stroke()}t.restore()}function $(t,i,s,e,h,n,r){t.save(),t.globalCompositeOperation="copy";const o=t.createLinearGradient(0,0,0,h);o.addColorStop(0,n),o.addColorStop(1,r),t.fillStyle=o,t.fillRect(i,s,e,h),t.restore()}class U{constructor(t,i){this.setData(t,i)}setData(t,i){this._data=t,this._commonData=i}height(t,i){return this._data.visible?t.fontSize+t.paddingTop+t.paddingBottom:0}draw(t,i,s,e){if(!this._data.visible||0===this._data.text.length)return;const h=this._data.color,n=this._commonData.background,r=t.useBitmapCoordinateSpace((t=>{const r=t.context;r.font=i.font;const o=this._calculateGeometry(t,i,s,e),l=o.bitmap,a=(t,i)=>{o.alignRight?H(r,l.xOutside,l.yTop,l.totalWidth,l.totalHeight,t,l.horzBorder,[l.radius,0,0,l.radius],i):H(r,l.xInside,l.yTop,l.totalWidth,l.totalHeight,t,l.horzBorder,[0,l.radius,l.radius,0],i)};return a(n,"transparent"),this._data.tickVisible&&(r.fillStyle=h,r.fillRect(l.xInside,l.yMid,l.xTick-l.xInside,l.tickHeight)),a("transparent",n),this._data.borderVisible&&(r.fillStyle=i.paneBackgroundColor,r.fillRect(o.alignRight?l.right-l.horzBorder:0,l.yTop,l.horzBorder,l.yBottom-l.yTop)),o}));t.useMediaCoordinateSpace((({context:t})=>{const s=r.media;t.font=i.font,t.textAlign=r.alignRight?"right":"left",t.textBaseline="middle",t.fillStyle=h,t.fillText(this._data.text,s.xText,(s.yTop+s.yBottom)/2+s.textMidCorrection)}))}_calculateGeometry(t,i,s,e){var h;const{context:n,bitmapSize:r,mediaSize:o,horizontalPixelRatio:l,verticalPixelRatio:a}=t,u=this._data.tickVisible||!this._data.moveTextToInvisibleTick?i.tickLength:0,c=this._data.separatorVisible?i.borderSize:0,d=i.paddingTop+this._commonData.additionalPaddingTop,f=i.paddingBottom+this._commonData.additionalPaddingBottom,p=i.paddingInner,m=i.paddingOuter,v=this._data.text,b=i.fontSize,g=s.yMidCorrection(n,v),w=Math.ceil(s.measureText(n,v)),M=b+d+f,S=i.borderSize+p+m+w+u,x=Math.max(1,Math.floor(a));let _=Math.round(M*a);_%2!=x%2&&(_+=1);const y=c>0?Math.max(1,Math.floor(c*l)):0,k=Math.round(S*l),C=Math.round(u*l),T=null!==(h=this._commonData.fixedCoordinate)&&void 0!==h?h:this._commonData.coordinate,P=Math.round(T*a)-Math.floor(.5*a),R=Math.floor(P+x/2-_/2),D=R+_,A="right"===e,E=A?o.width-c:c,O=A?r.width-y:y;let B,L,z;return A?(B=O-k,L=O-C,z=E-u-p-c):(B=O+k,L=O+C,z=E+u+p),{alignRight:A,bitmap:{yTop:R,yMid:P,yBottom:D,totalWidth:k,totalHeight:_,radius:2*l,horzBorder:y,xOutside:B,xInside:O,xTick:L,tickHeight:x,right:r.width},media:{yTop:R/a,yBottom:D/a,xText:z,textMidCorrection:g}}}}class q{constructor(t){this._commonRendererData={coordinate:0,background:"#000",additionalPaddingBottom:0,additionalPaddingTop:0},this._axisRendererData={text:"",visible:!1,tickVisible:!0,moveTextToInvisibleTick:!1,borderColor:"",color:"#FFF",borderVisible:!1,separatorVisible:!1},this._paneRendererData={text:"",visible:!1,tickVisible:!1,moveTextToInvisibleTick:!0,borderColor:"",color:"#FFF",borderVisible:!0,separatorVisible:!0},this._invalidated=!0,this._axisRenderer=new(t||U)(this._axisRendererData,this._commonRendererData),this._paneRenderer=new(t||U)(this._paneRendererData,this._commonRendererData)}text(){return this._updateRendererDataIfNeeded(),this._axisRendererData.text}coordinate(){return this._updateRendererDataIfNeeded(),this._commonRendererData.coordinate}update(){this._invalidated=!0}height(t,i=!1){return Math.max(this._axisRenderer.height(t,i),this._paneRenderer.height(t,i))}getFixedCoordinate(){return this._commonRendererData.fixedCoordinate||0}setFixedCoordinate(t){this._commonRendererData.fixedCoordinate=t}isVisible(){return this._updateRendererDataIfNeeded(),this._axisRendererData.visible||this._paneRendererData.visible}isAxisLabelVisible(){return this._updateRendererDataIfNeeded(),this._axisRendererData.visible}renderer(t){return this._updateRendererDataIfNeeded(),this._axisRendererData.tickVisible=this._axisRendererData.tickVisible&&t.options().ticksVisible,this._paneRendererData.tickVisible=this._paneRendererData.tickVisible&&t.options().ticksVisible,this._axisRenderer.setData(this._axisRendererData,this._commonRendererData),this._paneRenderer.setData(this._paneRendererData,this._commonRendererData),this._axisRenderer}paneRenderer(){return this._updateRendererDataIfNeeded(),this._axisRenderer.setData(this._axisRendererData,this._commonRendererData),this._paneRenderer.setData(this._paneRendererData,this._commonRendererData),this._paneRenderer}_updateRendererDataIfNeeded(){this._invalidated&&(this._axisRendererData.tickVisible=!0,this._paneRendererData.tickVisible=!1,this._updateRendererData(this._axisRendererData,this._paneRendererData,this._commonRendererData))}}class Y extends q{constructor(t,i,s){super(),this._source=t,this._priceScale=i,this._valueProvider=s}_updateRendererData(t,i,s){t.visible=!1;const e=this._source.options().horzLine;if(!e.labelVisible)return;const h=this._priceScale.firstValue();if(!this._source.visible()||this._priceScale.isEmpty()||null===h)return;const n=v(e.labelBackgroundColor);s.background=n.background,t.color=n.foreground;const r=2/12*this._priceScale.fontSize();s.additionalPaddingTop=r,s.additionalPaddingBottom=r;const o=this._valueProvider(this._priceScale);s.coordinate=o.coordinate,t.text=this._priceScale.formatPrice(o.price,h),t.visible=!0}}const X=/[1-9]/g;class Z{constructor(){this._data=null}setData(t){this._data=t}draw(t,i){if(null===this._data||!1===this._data.visible||0===this._data.text.length)return;const s=t.useMediaCoordinateSpace((({context:t})=>(t.font=i.font,Math.round(i.widthCache.measureText(t,r(this._data).text,X)))));if(s<=0)return;const e=i.paddingHorizontal,h=s+2*e,n=h/2,o=this._data.width;let l=this._data.coordinate,a=Math.floor(l-n)+.5;a<0?(l+=Math.abs(0-a),a=Math.floor(l-n)+.5):a+h>o&&(l-=Math.abs(o-(a+h)),a=Math.floor(l-n)+.5);const u=a+h,c=Math.ceil(0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize+i.paddingBottom);t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:s,verticalPixelRatio:e})=>{const h=r(this._data);t.fillStyle=h.background;const n=Math.round(a*s),o=Math.round(0*e),l=Math.round(u*s),d=Math.round(c*e),f=Math.round(2*s);if(t.beginPath(),t.moveTo(n,o),t.lineTo(n,d-f),t.arcTo(n,d,n+f,d,f),t.lineTo(l-f,d),t.arcTo(l,d,l,d-f,f),t.lineTo(l,o),t.fill(),h.tickVisible){const n=Math.round(h.coordinate*s),r=o,l=Math.round((r+i.tickLength)*e);t.fillStyle=h.color;const a=Math.max(1,Math.floor(s)),u=Math.floor(.5*s);t.fillRect(n-u,r,a,l-r)}})),t.useMediaCoordinateSpace((({context:t})=>{const s=r(this._data),h=0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize/2;t.font=i.font,t.textAlign="left",t.textBaseline="middle",t.fillStyle=s.color;const n=i.widthCache.yMidCorrection(t,"Apr0");t.translate(a+e,h+n),t.fillText(s.text,0,0)}))}}class K{constructor(t,i,s){this._invalidated=!0,this._renderer=new Z,this._rendererData={visible:!1,background:"#4c525e",color:"white",text:"",width:0,coordinate:NaN,tickVisible:!0},this._crosshair=t,this._model=i,this._valueProvider=s}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer.setData(this._rendererData),this._renderer}_updateImpl(){const t=this._rendererData;t.visible=!1;const i=this._crosshair.options().vertLine;if(!i.labelVisible)return;const s=this._model.timeScale();if(s.isEmpty())return;t.width=s.width();const e=this._valueProvider();if(null===e)return;t.coordinate=e.coordinate;const h=s.indexToTimeScalePoint(this._crosshair.appliedIndex());t.text=s.formatDateTime(r(h)),t.visible=!0;const n=v(i.labelBackgroundColor);t.background=n.background,t.color=n.foreground,t.tickVisible=s.options().ticksVisible}}class G{constructor(){this._priceScale=null,this._zorder=0}zorder(){return this._zorder}setZorder(t){this._zorder=t}priceScale(){return this._priceScale}setPriceScale(t){this._priceScale=t}labelPaneViews(t){return[]}timeAxisViews(){return[]}visible(){return!0}}var J,Q,tt,it;!function(t){t[t.Normal=0]="Normal",t[t.Magnet=1]="Magnet"}(J||(J={}));class st extends G{constructor(t,i){super(),this._pane=null,this._price=NaN,this._index=0,this._visible=!0,this._priceAxisViews=new Map,this._subscribed=!1,this._x=NaN,this._y=NaN,this._originX=NaN,this._originY=NaN,this._model=t,this._options=i,this._markersPaneView=new L(t,this);this._currentPosPriceProvider=((t,i)=>s=>{const e=i(),h=t();if(s===r(this._pane).defaultPriceScale())return{price:h,coordinate:e};{const t=r(s.firstValue());return{price:s.coordinateToPrice(e,t),coordinate:e}}})((()=>this._price),(()=>this._y));const s=((t,i)=>()=>{const s=this._model.timeScale().indexToTime(t()),e=i();return s&&Number.isFinite(e)?{time:s,coordinate:e}:null})((()=>this._index),(()=>this.appliedX()));this._timeAxisView=new K(this,t,s),this._paneView=new N(this)}options(){return this._options}saveOriginCoord(t,i){this._originX=t,this._originY=i}clearOriginCoord(){this._originX=NaN,this._originY=NaN}originCoordX(){return this._originX}originCoordY(){return this._originY}setPosition(t,i,s){this._subscribed||(this._subscribed=!0),this._visible=!0,this._tryToUpdateViews(t,i,s)}appliedIndex(){return this._index}appliedX(){return this._x}appliedY(){return this._y}visible(){return this._visible}clearPosition(){this._visible=!1,this._setIndexToLastSeriesBarIndex(),this._price=NaN,this._x=NaN,this._y=NaN,this._pane=null,this.clearOriginCoord()}paneViews(t){return null!==this._pane?[this._paneView,this._markersPaneView]:[]}horzLineVisible(t){return t===this._pane&&this._options.horzLine.visible}vertLineVisible(){return this._options.vertLine.visible}priceAxisViews(t,i){this._visible&&this._pane===t||this._priceAxisViews.clear();const s=[];return this._pane===t&&s.push(this._createPriceAxisViewOnDemand(this._priceAxisViews,i,this._currentPosPriceProvider)),s}timeAxisViews(){return this._visible?[this._timeAxisView]:[]}pane(){return this._pane}updateAllViews(){this._paneView.update(),this._priceAxisViews.forEach((t=>t.update())),this._timeAxisView.update(),this._markersPaneView.update()}_priceScaleByPane(t){return t&&!t.defaultPriceScale().isEmpty()?t.defaultPriceScale():null}_tryToUpdateViews(t,i,s){this._tryToUpdateData(t,i,s)&&this.updateAllViews()}_tryToUpdateData(t,i,s){const e=this._x,h=this._y,n=this._price,r=this._index,o=this._pane,l=this._priceScaleByPane(s);this._index=t,this._x=isNaN(t)?NaN:this._model.timeScale().indexToCoordinate(t),this._pane=s;const a=null!==l?l.firstValue():null;return null!==l&&null!==a?(this._price=i,this._y=l.priceToCoordinate(i,a)):(this._price=NaN,this._y=NaN),e!==this._x||h!==this._y||r!==this._index||n!==this._price||o!==this._pane}_setIndexToLastSeriesBarIndex(){const t=this._model.serieses().map((t=>t.bars().lastIndex())).filter(y),i=0===t.length?null:Math.max(...t);this._index=null!==i?i:NaN}_createPriceAxisViewOnDemand(t,i,s){let e=t.get(i);return void 0===e&&(e=new Y(this,i,s),t.set(i,e)),e}}function et(t){return"left"===t||"right"===t}!function(t){t.Left="left",t.Right="right"}(Q||(Q={})),function(t){t[t.None=0]="None",t[t.Cursor=1]="Cursor",t[t.Light=2]="Light",t[t.Full=3]="Full"}(tt||(tt={})),function(t){t[t.FitContent=0]="FitContent",t[t.ApplyRange=1]="ApplyRange",t[t.ApplyBarSpacing=2]="ApplyBarSpacing",t[t.ApplyRightOffset=3]="ApplyRightOffset",t[t.Reset=4]="Reset",t[t.Animation=5]="Animation",t[t.StopAnimation=6]="StopAnimation"}(it||(it={}));class ht{constructor(t){this._invalidatedPanes=new Map,this._timeScaleInvalidations=[],this._globalLevel=t}invalidatePane(t,i){const s=function(t,i){return void 0===t?i:{level:Math.max(t.level,i.level),autoScale:t.autoScale||i.autoScale}}(this._invalidatedPanes.get(t),i);this._invalidatedPanes.set(t,s)}fullInvalidation(){return this._globalLevel}invalidateForPane(t){const i=this._invalidatedPanes.get(t);return void 0===i?{level:this._globalLevel}:{level:Math.max(this._globalLevel,i.level),autoScale:i.autoScale}}setFitContent(){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:0}]}applyRange(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:1,value:t}]}setTimeScaleAnimation(t){this._removeTimeScaleAnimation(),this._timeScaleInvalidations.push({type:5,value:t})}stopTimeScaleAnimation(){this._removeTimeScaleAnimation(),this._timeScaleInvalidations.push({type:6})}resetTimeScale(){this.stopTimeScaleAnimation(),this._timeScaleInvalidations=[{type:4}]}setBarSpacing(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations.push({type:2,value:t})}setRightOffset(t){this.stopTimeScaleAnimation(),this._timeScaleInvalidations.push({type:3,value:t})}timeScaleInvalidations(){return this._timeScaleInvalidations}merge(t){for(const i of t._timeScaleInvalidations)this._applyTimeScaleInvalidation(i);this._globalLevel=Math.max(this._globalLevel,t._globalLevel),t._invalidatedPanes.forEach(((t,i)=>{this.invalidatePane(i,t)}))}static light(){return new ht(2)}static full(){return new ht(3)}_applyTimeScaleInvalidation(t){switch(t.type){case 0:this.setFitContent();break;case 1:this.applyRange(t.value);break;case 2:this.setBarSpacing(t.value);break;case 3:this.setRightOffset(t.value);break;case 4:this.resetTimeScale();break;case 5:this.setTimeScaleAnimation(t.value);break;case 6:this._removeTimeScaleAnimation()}}_removeTimeScaleAnimation(){const t=this._timeScaleInvalidations.findIndex((t=>5===t.type));-1!==t&&this._timeScaleInvalidations.splice(t,1)}}const nt=".";function rt(t,i){if(!w(t))return"n/a";if(!M(i))throw new TypeError("invalid length");if(i<0||i>16)throw new TypeError("invalid length");if(0===i)return t.toString();return("0000000000000000"+t.toString()).slice(-i)}class ot{constructor(t,i){if(i||(i=1),w(t)&&M(t)||(t=100),t<0)throw new TypeError("invalid base");this._priceScale=t,this._minMove=i,this._calculateDecimal()}format(t){const i=t<0?"−":"";return t=Math.abs(t),i+this._formatAsDecimal(t)}_calculateDecimal(){if(this._fractionalLength=0,this._priceScale>0&&this._minMove>0){let t=this._priceScale;for(;t>1;)t/=10,this._fractionalLength++}}_formatAsDecimal(t){const i=this._priceScale/this._minMove;let s=Math.floor(t),e="";const h=void 0!==this._fractionalLength?this._fractionalLength:NaN;if(i>1){let n=+(Math.round(t*i)-s*i).toFixed(this._fractionalLength);n>=i&&(n-=i,s+=1),e=nt+rt(+n.toFixed(this._fractionalLength)*this._minMove,h)}else s=Math.round(s*i)/i,h>0&&(e=nt+rt(0,h));return s.toFixed(0)+e}}class lt extends ot{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class at{constructor(t){this._precision=t}format(t){let i="";return t<0&&(i="-",t=-t),t<995?i+this._formatNumber(t):t<999995?i+this._formatNumber(t/1e3)+"K":t<999999995?(t=1e3*Math.round(t/1e3),i+this._formatNumber(t/1e6)+"M"):(t=1e6*Math.round(t/1e6),i+this._formatNumber(t/1e9)+"B")}_formatNumber(t){let i;const s=Math.pow(10,this._precision);return i=(t=Math.round(t*s)/s)>=1e-15&&t<1?t.toFixed(this._precision).replace(/\.?0+$/,""):String(t),i.replace(/(\.[1-9]*)0+$/,((t,i)=>i))}}function ut(t,i,s,e,h,n,r){if(0===i.length||e.from>=i.length||e.to<=0)return;const o=t.context,l=i[e.from];let a=n(t,l),u=l;if(e.to-e.from<2){const t=h/2;o.beginPath();const i={x:l.x-t,y:l.y},s={x:l.x+t,y:l.y};return o.moveTo(i.x,i.y),o.lineTo(s.x,s.y),void r(o,a,i,s)}const c=(t,i)=>{r(o,a,u,i),o.beginPath(),a=t,u=i};let d=u;o.beginPath(),o.moveTo(l.x,l.y);for(let h=e.from+1;h>1,r=e+h;s(t[r],i)?(e=r+1,n-=h+1):n=h}return e}function xt(t,i,s,e=0,h=t.length){let n=h-e;for(;0>1,r=e+h;s(i,t[r])?n=h:(e=r+1,n-=h+1)}return e}var _t,yt;function kt(t,i){return t.time0&&n=e&&(o=n-1),r>0&&rObject.assign(Object.assign({},t),this._series.barColorer().barStyle(t.time))))}_clearVisibleRange(){this._itemsVisibleRange=null}_makeValid(){this._dataInvalidated&&(this._fillRawPoints(),this._dataInvalidated=!1),this._optionsInvalidated&&(this._updateOptions(),this._optionsInvalidated=!1),this._invalidated&&(this._makeValidImpl(),this._invalidated=!1)}_makeValidImpl(){const t=this._series.priceScale(),i=this._model.timeScale();if(this._clearVisibleRange(),i.isEmpty()||t.isEmpty())return;const s=i.visibleStrictRange();if(null===s)return;if(0===this._series.bars().size())return;const e=this._series.firstValue();null!==e&&(this._itemsVisibleRange=Tt(this._items,s,this._extendedVisibleRange),this._convertToCoordinates(t,i,e.value),this._prepareRendererData())}}class Rt extends Pt{constructor(t,i){super(t,i,!0)}_convertToCoordinates(t,i,s){i.indexesToCoordinates(this._items,k(this._itemsVisibleRange)),t.pointsArrayToCoordinates(this._items,s,k(this._itemsVisibleRange))}_createRawItemBase(t,i){return{time:t,price:i,x:NaN,y:NaN}}_fillRawPoints(){const t=this._series.barColorer();this._items=this._series.bars().rows().map((i=>{const s=i.value[3];return this._createRawItem(i.index,s,t)}))}}class Dt extends Rt{constructor(t,i){super(t,i),this._renderer=new D,this._areaRenderer=new bt,this._lineRenderer=new Mt,this._renderer.setRenderers([this._areaRenderer,this._lineRenderer])}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._areaRenderer.setData({lineType:t.lineType,items:this._items,lineStyle:t.lineStyle,lineWidth:t.lineWidth,baseLevelCoordinate:null,invertFilledArea:t.invertFilledArea,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()}),this._lineRenderer.setData({lineType:t.lineType,items:this._items,lineStyle:t.lineStyle,lineWidth:t.lineWidth,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()})}}class At extends z{constructor(){super(...arguments),this._data=null,this._barWidth=0,this._barLineWidth=0}setData(t){this._data=t}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||0===this._data.bars.length||null===this._data.visibleRange)return;if(this._barWidth=this._calcBarWidth(i),this._barWidth>=2){Math.max(1,Math.floor(i))%2!=this._barWidth%2&&this._barWidth--}this._barLineWidth=this._data.thinBars?Math.min(this._barWidth,Math.floor(i)):this._barWidth;let e=null;const h=this._barLineWidth<=this._barWidth&&this._data.barSpacing>=Math.floor(1.5*i);for(let n=this._data.visibleRange.from;np+v-1&&(h=p+v-1,e=h-u+1),t.fillRect(i,e,a-i,h-e+1)}const i=l+b;let e=Math.max(p,Math.round(r.closeY*s)-o),h=e+u-1;h>p+v-1&&(h=p+v-1,e=h-u+1),t.fillRect(c+1,e,i-c,h-e+1)}}}_calcBarWidth(t){const i=Math.floor(t);return Math.max(i,Math.floor(function(t,i){return Math.floor(.3*t*i)}(r(this._data).barSpacing,t)))}}class Et extends Pt{constructor(t,i){super(t,i,!1)}_convertToCoordinates(t,i,s){i.indexesToCoordinates(this._items,k(this._itemsVisibleRange)),t.barPricesToCoordinates(this._items,s,k(this._itemsVisibleRange))}_createDefaultItem(t,i,s){return{time:t,open:i.value[0],high:i.value[1],low:i.value[2],close:i.value[3],x:NaN,openY:NaN,highY:NaN,lowY:NaN,closeY:NaN}}_fillRawPoints(){const t=this._series.barColorer();this._items=this._series.bars().rows().map((i=>this._createRawItem(i.index,i,t)))}}class Ot extends Et{constructor(){super(...arguments),this._renderer=new At}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createDefaultItem(t,i,s)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._renderer.setData({bars:this._items,barSpacing:this._model.timeScale().barSpacing(),openVisible:t.openVisible,thinBars:t.thinBars,visibleRange:this._itemsVisibleRange})}}function Bt(t,i,s){return Math.min(Math.max(t,i),s)}function Lt(t,i,s){return i-t<=s}function zt(t){return t<=0?NaN:Math.log(t)/Math.log(10)}function It(t){const i=Math.ceil(t);return i%2==0?i-1:i}class Nt extends vt{constructor(){super(...arguments),this._fillCache=null}_fillStyle(t,i){var s;const{context:e,mediaSize:h}=t,n=this._data,{topFillColor1:r,topFillColor2:o,bottomFillColor1:l,bottomFillColor2:a}=i,u=null!==(s=n.baseLevelCoordinate)&&void 0!==s?s:h.height,c=h.height;if(null!==this._fillCache&&this._fillCache.topFillColor1===r&&this._fillCache.topFillColor2===o&&this._fillCache.bottomFillColor1===l&&this._fillCache.bottomFillColor2===a&&this._fillCache.baseLevelCoordinate===u&&this._fillCache.bottom===c)return this._fillCache.fillStyle;const d=e.createLinearGradient(0,0,0,c),f=Bt(u/c,0,1);return d.addColorStop(0,r),d.addColorStop(f,o),d.addColorStop(f,l),d.addColorStop(1,a),this._fillCache={topFillColor1:r,topFillColor2:o,bottomFillColor1:l,bottomFillColor2:a,fillStyle:d,baseLevelCoordinate:u,bottom:c},d}}class Vt extends wt{constructor(){super(...arguments),this._strokeCache=null}_strokeStyle(t,i){const{context:s,mediaSize:e}=t,h=this._data,{topLineColor:n,bottomLineColor:r}=i,{baseLevelCoordinate:o}=h,l=e.height;if(null!==this._strokeCache&&this._strokeCache.topLineColor===n&&this._strokeCache.bottomLineColor===r&&this._strokeCache.baseLevelCoordinate===o&&this._strokeCache.bottom===l)return this._strokeCache.strokeStyle;const a=s.createLinearGradient(0,0,0,l),u=Bt(o/l,0,1);return a.addColorStop(0,n),a.addColorStop(u,n),a.addColorStop(u,r),a.addColorStop(1,r),this._strokeCache={topLineColor:n,bottomLineColor:r,strokeStyle:a,baseLevelCoordinate:o,bottom:l},a}}class Ft extends Rt{constructor(t,i){super(t,i),this._renderer=new D,this._baselineAreaRenderer=new Nt,this._baselineLineRenderer=new Vt,this._renderer.setRenderers([this._baselineAreaRenderer,this._baselineLineRenderer])}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.firstValue();if(null===t)return;const i=this._series.options(),s=this._series.priceScale().priceToCoordinate(i.baseValue.price,t.value),e=this._model.timeScale().barSpacing();this._baselineAreaRenderer.setData({items:this._items,lineWidth:i.lineWidth,lineStyle:i.lineStyle,lineType:i.lineType,baseLevelCoordinate:s,invertFilledArea:!1,visibleRange:this._itemsVisibleRange,barWidth:e}),this._baselineLineRenderer.setData({items:this._items,lineWidth:i.lineWidth,lineStyle:i.lineStyle,lineType:i.lineType,baseLevelCoordinate:s,visibleRange:this._itemsVisibleRange,barWidth:e})}}!function(t){t[t.BarBorderWidth=1]="BarBorderWidth"}(yt||(yt={}));class Wt extends z{constructor(){super(...arguments),this._data=null,this._barWidth=0}setData(t){this._data=t}_drawImpl(t){if(null===this._data||0===this._data.bars.length||null===this._data.visibleRange)return;const{horizontalPixelRatio:i}=t;if(this._barWidth=function(t,i){if(t>=2.5&&t<=4)return Math.floor(3*i);const s=1-.2*Math.atan(Math.max(4,t)-4)/(.5*Math.PI),e=Math.floor(t*s*i),h=Math.floor(t*i),n=Math.min(e,h);return Math.max(Math.floor(i),n)}(this._data.barSpacing,i),this._barWidth>=2){Math.floor(i)%2!=this._barWidth%2&&this._barWidth--}const s=this._data.bars;this._data.wickVisible&&this._drawWicks(t,s,this._data.visibleRange),this._data.borderVisible&&this._drawBorder(t,s,this._data.visibleRange);const e=this._calculateBorderWidth(i);(!this._data.borderVisible||this._barWidth>2*e)&&this._drawCandles(t,s,this._data.visibleRange)}_drawWicks(t,i,s){if(null===this._data)return;const{context:e,horizontalPixelRatio:h,verticalPixelRatio:n}=t;let r="",o=Math.min(Math.floor(h),Math.floor(this._data.barSpacing*h));o=Math.max(Math.floor(h),Math.min(o,this._barWidth));const l=Math.floor(.5*o);let a=null;for(let t=s.from;t2*o)V(e,a,c,u-a+1,d-c+1,o);else{const t=u-a+1;e.fillRect(a,c,t,d-c+1)}l=u}}_drawCandles(t,i,s){if(null===this._data)return;const{context:e,horizontalPixelRatio:h,verticalPixelRatio:n}=t;let r="";const o=this._calculateBorderWidth(h);for(let t=s.from;ta||e.fillRect(u,l,c-u+1,a-l+1)}}}class jt extends Et{constructor(){super(...arguments),this._renderer=new Wt}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createDefaultItem(t,i,s)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options();this._renderer.setData({bars:this._items,barSpacing:this._model.timeScale().barSpacing(),wickVisible:t.wickVisible,borderVisible:t.borderVisible,visibleRange:this._itemsVisibleRange})}}class Ht extends z{constructor(){super(...arguments),this._data=null,this._precalculatedCache=[]}setData(t){this._data=t,this._precalculatedCache=[]}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||0===this._data.items.length||null===this._data.visibleRange)return;this._precalculatedCache.length||this._fillPrecalculatedCache(i);const e=Math.max(1,Math.floor(s)),h=Math.round(this._data.histogramBase*s)-Math.floor(e/2),n=h+e;for(let i=this._data.visibleRange.from;ie.center?e.right=s.left-i-1:s.left=e.right+i+1))}let e=Math.ceil(this._data.barSpacing*t);for(let t=this._data.visibleRange.from;t0&&e<4)for(let t=this._data.visibleRange.from;te&&(i.roundedCenter>i.center?i.right-=1:i.left+=1)}}}class $t extends Rt{constructor(){super(...arguments),this._renderer=new Ht}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t={items:this._items,barSpacing:this._model.timeScale().barSpacing(),visibleRange:this._itemsVisibleRange,histogramBase:this._series.priceScale().priceToCoordinate(this._series.options().base,r(this._series.firstValue()).value)};this._renderer.setData(t)}}class Ut extends Rt{constructor(){super(...arguments),this._renderer=new Mt}_createRawItem(t,i,s){return Object.assign(Object.assign({},this._createRawItemBase(t,i)),s.barStyle(t))}_prepareRendererData(){const t=this._series.options(),i={items:this._items,lineStyle:t.lineStyle,lineType:t.lineType,lineWidth:t.lineWidth,visibleRange:this._itemsVisibleRange,barWidth:this._model.timeScale().barSpacing()};this._renderer.setData(i)}}const qt=/[2-9]/g;class Yt{constructor(t=50){this._actualSize=0,this._usageTick=1,this._oldestTick=1,this._tick2Labels={},this._cache=new Map,this._maxSize=t}reset(){this._actualSize=0,this._cache.clear(),this._usageTick=1,this._oldestTick=1,this._tick2Labels={}}measureText(t,i,s){return this._getMetrics(t,i,s).width}yMidCorrection(t,i,s){const e=this._getMetrics(t,i,s);return((e.actualBoundingBoxAscent||0)-(e.actualBoundingBoxDescent||0))/2}_getMetrics(t,i,s){const e=s||qt,h=String(i).replace(e,"0");if(this._cache.has(h))return n(this._cache.get(h)).metrics;if(this._actualSize===this._maxSize){const t=this._tick2Labels[this._oldestTick];delete this._tick2Labels[this._oldestTick],this._cache.delete(t),this._oldestTick++,this._actualSize--}t.save(),t.textBaseline="middle";const r=t.measureText(h);return t.restore(),0===r.width&&i.length||(this._cache.set(h,{metrics:r,tick:this._usageTick}),this._tick2Labels[this._usageTick]=h,this._actualSize++,this._usageTick++),r}}class Xt{constructor(t){this._priceAxisViewRenderer=null,this._rendererOptions=null,this._align="right",this._textWidthCache=t}setParams(t,i,s){this._priceAxisViewRenderer=t,this._rendererOptions=i,this._align=s}draw(t){null!==this._rendererOptions&&null!==this._priceAxisViewRenderer&&this._priceAxisViewRenderer.draw(t,this._rendererOptions,this._textWidthCache,this._align)}}class Zt{constructor(t,i,s){this._priceAxisView=t,this._textWidthCache=new Yt(50),this._dataSource=i,this._chartModel=s,this._fontSize=-1,this._renderer=new Xt(this._textWidthCache)}renderer(){const t=this._chartModel.paneForSource(this._dataSource);if(null===t)return null;const i=t.isOverlay(this._dataSource)?t.defaultVisiblePriceScale():this._dataSource.priceScale();if(null===i)return null;const s=t.priceScalePosition(i);if("overlay"===s)return null;const e=this._chartModel.priceAxisRendererOptions();return e.fontSize!==this._fontSize&&(this._fontSize=e.fontSize,this._textWidthCache.reset()),this._renderer.setParams(this._priceAxisView.paneRenderer(),e,s),this._renderer}}var Kt,Gt;!function(t){t[t.HitTestThreshold=7]="HitTestThreshold"}(Kt||(Kt={}));class Jt extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}hitTest(t,i){var s;if(!(null===(s=this._data)||void 0===s?void 0:s.visible))return null;const{y:e,lineWidth:h,externalId:n}=this._data;return i>=e-h-7&&i<=e+h+7?{hitTestData:this._data,externalId:n}:null}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:h,verticalPixelRatio:n}){if(null===this._data)return;if(!1===this._data.visible)return;const r=Math.round(this._data.y*n);r<0||r>i.height||(t.lineCap="butt",t.strokeStyle=this._data.color,t.lineWidth=Math.floor(this._data.lineWidth*h),s(t,this._data.lineStyle),e(t,r,0,i.width))}}class Qt{constructor(t){this._lineRendererData={y:0,color:"rgba(0, 0, 0, 0)",lineWidth:1,lineStyle:0,visible:!1},this._lineRenderer=new Jt,this._invalidated=!0,this._series=t,this._model=t.model(),this._lineRenderer.setData(this._lineRendererData)}update(){this._invalidated=!0}renderer(){return this._series.visible()?(this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._lineRenderer):null}}class ti extends Qt{constructor(t){super(t)}_updateImpl(){this._lineRendererData.visible=!1;const t=this._series.priceScale(),i=t.mode().mode;if(2!==i&&3!==i)return;const s=this._series.options();if(!s.baseLineVisible||!this._series.visible())return;const e=this._series.firstValue();null!==e&&(this._lineRendererData.visible=!0,this._lineRendererData.y=t.priceToCoordinate(e.value,e.value),this._lineRendererData.color=s.baseLineColor,this._lineRendererData.lineWidth=s.baseLineWidth,this._lineRendererData.lineStyle=s.baseLineStyle)}}class ii extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}data(){return this._data}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){const e=this._data;if(null===e)return;const h=Math.max(1,Math.floor(i)),n=h%2/2,r=Math.round(e.center.x*i)+n,o=e.center.y*s;t.fillStyle=e.seriesLineColor,t.beginPath();const l=Math.max(2,1.5*e.seriesLineWidth)*i;t.arc(r,o,l,0,2*Math.PI,!1),t.fill(),t.fillStyle=e.fillColor,t.beginPath(),t.arc(r,o,e.radius*i,0,2*Math.PI,!1),t.fill(),t.lineWidth=h,t.strokeStyle=e.strokeColor,t.beginPath(),t.arc(r,o,e.radius*i+h/2,0,2*Math.PI,!1),t.stroke()}}!function(t){t[t.AnimationPeriod=2600]="AnimationPeriod",t[t.Stage1Period=.25]="Stage1Period",t[t.Stage2Period=.275]="Stage2Period",t[t.Stage3Period=.475]="Stage3Period",t[t.Stage1StartCircleRadius=4]="Stage1StartCircleRadius",t[t.Stage1EndCircleRadius=10]="Stage1EndCircleRadius",t[t.Stage1StartFillAlpha=.25]="Stage1StartFillAlpha",t[t.Stage1EndFillAlpha=0]="Stage1EndFillAlpha",t[t.Stage1StartStrokeAlpha=.4]="Stage1StartStrokeAlpha",t[t.Stage1EndStrokeAlpha=.8]="Stage1EndStrokeAlpha",t[t.Stage2StartCircleRadius=10]="Stage2StartCircleRadius",t[t.Stage2EndCircleRadius=14]="Stage2EndCircleRadius",t[t.Stage2StartFillAlpha=0]="Stage2StartFillAlpha",t[t.Stage2EndFillAlpha=0]="Stage2EndFillAlpha",t[t.Stage2StartStrokeAlpha=.8]="Stage2StartStrokeAlpha",t[t.Stage2EndStrokeAlpha=0]="Stage2EndStrokeAlpha",t[t.Stage3StartCircleRadius=14]="Stage3StartCircleRadius",t[t.Stage3EndCircleRadius=14]="Stage3EndCircleRadius",t[t.Stage3StartFillAlpha=0]="Stage3StartFillAlpha",t[t.Stage3EndFillAlpha=0]="Stage3EndFillAlpha",t[t.Stage3StartStrokeAlpha=0]="Stage3StartStrokeAlpha",t[t.Stage3EndStrokeAlpha=0]="Stage3EndStrokeAlpha"}(Gt||(Gt={}));const si=[{start:0,end:.25,startRadius:4,endRadius:10,startFillAlpha:.25,endFillAlpha:0,startStrokeAlpha:.4,endStrokeAlpha:.8},{start:.25,end:.525,startRadius:10,endRadius:14,startFillAlpha:0,endFillAlpha:0,startStrokeAlpha:.8,endStrokeAlpha:0},{start:.525,end:1,startRadius:14,endRadius:14,startFillAlpha:0,endFillAlpha:0,startStrokeAlpha:0,endStrokeAlpha:0}];function ei(t,i,s,e){return function(t,i){if("transparent"===t)return t;const s=m(t),e=s[3];return`rgba(${s[0]}, ${s[1]}, ${s[2]}, ${i*e})`}(t,s+(e-s)*i)}function hi(t,i){const s=t%2600/2600;let e;for(const t of si)if(s>=t.start&&s<=t.end){e=t;break}h(void 0!==e,"Last price animation internal logic error");const n=(s-e.start)/(e.end-e.start);return{fillColor:ei(i,n,e.startFillAlpha,e.endFillAlpha),strokeColor:ei(i,n,e.startStrokeAlpha,e.endStrokeAlpha),radius:(r=n,o=e.startRadius,l=e.endRadius,o+(l-o)*r)};var r,o,l}class ni{constructor(t){this._renderer=new ii,this._invalidated=!0,this._stageInvalidated=!0,this._startTime=performance.now(),this._endTime=this._startTime-1,this._series=t}onDataCleared(){this._endTime=this._startTime-1,this.update()}onNewRealtimeDataReceived(){if(this.update(),2===this._series.options().lastPriceAnimation){const t=performance.now(),i=this._endTime-t;if(i>0)return void(i<650&&(this._endTime+=2600));this._startTime=t,this._endTime=t+2600}}update(){this._invalidated=!0}invalidateStage(){this._stageInvalidated=!0}visible(){return 0!==this._series.options().lastPriceAnimation}animationActive(){switch(this._series.options().lastPriceAnimation){case 0:return!1;case 1:return!0;case 2:return performance.now()<=this._endTime}}renderer(){return this._invalidated?(this._updateImpl(),this._invalidated=!1,this._stageInvalidated=!1):this._stageInvalidated&&(this._updateRendererDataStage(),this._stageInvalidated=!1),this._renderer}_updateImpl(){this._renderer.setData(null);const t=this._series.model().timeScale(),i=t.visibleStrictRange(),s=this._series.firstValue();if(null===i||null===s)return;const e=this._series.lastValueData(!0);if(e.noData||!i.contains(e.index))return;const h={x:t.indexToCoordinate(e.index),y:this._series.priceScale().priceToCoordinate(e.price,s.value)},n=e.color,r=this._series.options().lineWidth,o=hi(this._duration(),n);this._renderer.setData({seriesLineColor:n,seriesLineWidth:r,fillColor:o.fillColor,strokeColor:o.strokeColor,radius:o.radius,center:h})}_updateRendererDataStage(){const t=this._renderer.data();if(null!==t){const i=hi(this._duration(),t.seriesLineColor);t.fillColor=i.fillColor,t.strokeColor=i.strokeColor,t.radius=i.radius}}_duration(){return this.animationActive()?performance.now()-this._startTime:2599}}var ri,oi;function li(t,i){return It(Math.min(Math.max(t,12),30)*i)}function ai(t,i){switch(t){case"arrowDown":case"arrowUp":return li(i,1);case"circle":return li(i,.8);case"square":return li(i,.7)}}function ui(t){return function(t){const i=Math.ceil(t);return i%2!=0?i-1:i}(li(t,1))}function ci(t){return Math.max(li(t,.1),3)}function di(t,i,s,e,h){const n=ai("square",s),r=(n-1)/2,o=t-r,l=i-r;return e>=o&&e<=o+n&&h>=l&&h<=l+n}function fi(t,i,s,e,h){const n=(ai("arrowUp",h)-1)/2,r=(It(h/2)-1)/2;i.beginPath(),t?(i.moveTo(s-n,e),i.lineTo(s,e-n),i.lineTo(s+n,e),i.lineTo(s+r,e),i.lineTo(s+r,e+n),i.lineTo(s-r,e+n),i.lineTo(s-r,e)):(i.moveTo(s-n,e),i.lineTo(s,e+n),i.lineTo(s+n,e),i.lineTo(s+r,e),i.lineTo(s+r,e-n),i.lineTo(s-r,e-n),i.lineTo(s-r,e)),i.fill()}function pi(t,i,s,e,h,n){return di(i,s,e,h,n)}!function(t){t[t.MinShapeSize=12]="MinShapeSize",t[t.MaxShapeSize=30]="MaxShapeSize",t[t.MinShapeMargin=3]="MinShapeMargin"}(ri||(ri={}));class mi extends A{constructor(){super(...arguments),this._data=null,this._textWidthCache=new Yt,this._fontSize=-1,this._fontFamily="",this._font=""}setData(t){this._data=t}setParams(t,i){this._fontSize===t&&this._fontFamily===i||(this._fontSize=t,this._fontFamily=i,this._font=T(t,i),this._textWidthCache.reset())}hitTest(t,i){if(null===this._data||null===this._data.visibleRange)return null;for(let s=this._data.visibleRange.from;s=t&&h<=t+s&&n>=i-r&&n<=i+r}(t.text.x,t.text.y,t.text.width,t.text.height,i,s))||function(t,i,s){if(0===t.size)return!1;switch(t.shape){case"arrowDown":case"arrowUp":return pi(0,t.x,t.y,t.size,i,s);case"circle":return function(t,i,s,e,h){const n=2+ai("circle",s)/2,r=t-e,o=i-h;return Math.sqrt(r*r+o*o)<=n}(t.x,t.y,t.size,i,s);case"square":return di(t.x,t.y,t.size,i,s)}}(t,i,s)}function gi(t,i,s,e,h,n,r,o,l){const a=w(s)?s:s.close,u=w(s)?s:s.high,c=w(s)?s:s.low,d=w(i.size)?Math.max(i.size,0):1,f=ui(o.barSpacing())*d,p=f/2;switch(t.size=f,i.position){case"inBar":return t.y=r.priceToCoordinate(a,l),void(void 0!==t.text&&(t.text.y=t.y+p+n+.6*h));case"aboveBar":return t.y=r.priceToCoordinate(u,l)-p-e.aboveBar,void 0!==t.text&&(t.text.y=t.y-p-.6*h,e.aboveBar+=1.2*h),void(e.aboveBar+=f+n);case"belowBar":return t.y=r.priceToCoordinate(c,l)+p+e.belowBar,void 0!==t.text&&(t.text.y=t.y+p+n+.6*h,e.belowBar+=1.2*h),void(e.belowBar+=f+n)}i.position}!function(t){t[t.TextMargin=.1]="TextMargin"}(oi||(oi={}));class wi{constructor(t,i){this._invalidated=!0,this._dataInvalidated=!0,this._autoScaleMarginsInvalidated=!0,this._autoScaleMargins=null,this._renderer=new mi,this._series=t,this._model=i,this._data={items:[],visibleRange:null}}update(t){this._invalidated=!0,this._autoScaleMarginsInvalidated=!0,"data"===t&&(this._dataInvalidated=!0)}renderer(t){if(!this._series.visible())return null;this._invalidated&&this._makeValid();const i=this._model.options().layout;return this._renderer.setParams(i.fontSize,i.fontFamily),this._renderer.setData(this._data),this._renderer}autoScaleMargins(){if(this._autoScaleMarginsInvalidated){if(this._series.indexedMarkers().length>0){const t=this._model.timeScale().barSpacing(),i=ci(t),s=1.5*ui(t)+2*i;this._autoScaleMargins={above:s,below:s}}else this._autoScaleMargins=null;this._autoScaleMarginsInvalidated=!1}return this._autoScaleMargins}_makeValid(){const t=this._series.priceScale(),i=this._model.timeScale(),s=this._series.indexedMarkers();this._dataInvalidated&&(this._data.items=s.map((t=>({time:t.time,x:0,y:0,size:0,shape:t.shape,color:t.color,internalId:t.internalId,externalId:t.id,text:void 0}))),this._dataInvalidated=!1);const e=this._model.options().layout;this._data.visibleRange=null;const h=i.visibleStrictRange();if(null===h)return;const n=this._series.firstValue();if(null===n)return;if(0===this._data.items.length)return;let r=NaN;const o=ci(i.barSpacing()),l={aboveBar:o,belowBar:o};this._data.visibleRange=Tt(this._data.items,h,!0);for(let h=this._data.visibleRange.from;h0&&(u.text={content:a.text,x:0,y:0,width:0,height:0});const c=this._series.dataAt(a.time);null!==c&&gi(u,a,c,l,e.fontSize,o,t,i,n.value)}this._invalidated=!1}}class Mi extends Qt{constructor(t){super(t)}_updateImpl(){const t=this._lineRendererData;t.visible=!1;const i=this._series.options();if(!i.priceLineVisible||!this._series.visible())return;const s=this._series.lastValueData(0===i.priceLineSource);s.noData||(t.visible=!0,t.y=s.coordinate,t.color=this._series.priceLineColor(s.color),t.lineWidth=i.priceLineWidth,t.lineStyle=i.priceLineStyle)}}class Si extends q{constructor(t){super(),this._source=t}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const e=this._source;if(!e.visible())return;const h=e.options(),n=h.lastValueVisible,r=""!==e.title(),o=0===h.seriesLastValueMode,l=e.lastValueData(!1);if(l.noData)return;n&&(t.text=this._axisText(l,n,o),t.visible=0!==t.text.length),(r||o)&&(i.text=this._paneText(l,n,r,o),i.visible=i.text.length>0);const a=e.priceLineColor(l.color),u=v(a);s.background=u.background,s.coordinate=l.coordinate,i.borderColor=e.model().backgroundColorAtYPercentFromTop(l.coordinate/e.priceScale().height()),t.borderColor=a,t.color=u.foreground,i.color=u.foreground}_paneText(t,i,s,e){let h="";const n=this._source.title();return s&&0!==n.length&&(h+=`${n} `),i&&e&&(h+=this._source.priceScale().isPercentage()?t.formattedPriceAbsolute:t.formattedPricePercentage),h.trim()}_axisText(t,i,s){return i?s?this._source.priceScale().isPercentage()?t.formattedPricePercentage:t.formattedPriceAbsolute:t.text:""}}class xi{constructor(t,i){this._minValue=t,this._maxValue=i}equals(t){return null!==t&&(this._minValue===t._minValue&&this._maxValue===t._maxValue)}clone(){return new xi(this._minValue,this._maxValue)}minValue(){return this._minValue}maxValue(){return this._maxValue}length(){return this._maxValue-this._minValue}isEmpty(){return this._maxValue===this._minValue||Number.isNaN(this._maxValue)||Number.isNaN(this._minValue)}merge(t){return null===t?this:new xi(Math.min(this.minValue(),t.minValue()),Math.max(this.maxValue(),t.maxValue()))}scaleAroundCenter(t){if(!w(t))return;if(0===this._maxValue-this._minValue)return;const i=.5*(this._maxValue+this._minValue);let s=this._maxValue-i,e=this._minValue-i;s*=t,e*=t,this._maxValue=i+s,this._minValue=i+e}shift(t){w(t)&&(this._maxValue+=t,this._minValue+=t)}toRaw(){return{minValue:this._minValue,maxValue:this._maxValue}}static fromRaw(t){return null===t?null:new xi(t.minValue,t.maxValue)}}class _i{constructor(t,i){this._priceRange=t,this._margins=i||null}priceRange(){return this._priceRange}margins(){return this._margins}toRaw(){return null===this._priceRange?null:{priceRange:this._priceRange.toRaw(),margins:this._margins||void 0}}static fromRaw(t){return null===t?null:new _i(xi.fromRaw(t.priceRange),t.margins)}}class yi extends Qt{constructor(t,i){super(t),this._priceLine=i}_updateImpl(){const t=this._lineRendererData;t.visible=!1;const i=this._priceLine.options();if(!this._series.visible()||!i.lineVisible)return;const s=this._priceLine.yCoord();null!==s&&(t.visible=!0,t.y=s,t.color=i.color,t.lineWidth=i.lineWidth,t.lineStyle=i.lineStyle,t.externalId=this._priceLine.options().id)}}class ki extends q{constructor(t,i){super(),this._series=t,this._priceLine=i}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const e=this._priceLine.options(),h=e.axisLabelVisible,n=""!==e.title,r=this._series;if(!h||!r.visible())return;const o=this._priceLine.yCoord();if(null===o)return;n&&(i.text=e.title,i.visible=!0),i.borderColor=r.model().backgroundColorAtYPercentFromTop(o/r.priceScale().height()),t.text=this._formatPrice(e.price),t.visible=!0;const l=v(e.axisLabelColor||e.color);s.background=l.background;const a=e.axisLabelTextColor||l.foreground;t.color=a,i.color=a,s.coordinate=o}_formatPrice(t){const i=this._series.firstValue();return null===i?"":this._series.priceScale().formatPrice(t,i.value)}}class Ci{constructor(t,i){this._series=t,this._options=i,this._priceLineView=new yi(t,this),this._priceAxisView=new ki(t,this),this._panePriceAxisView=new Zt(this._priceAxisView,t,t.model())}applyOptions(t){g(this._options,t),this.update(),this._series.model().lightUpdate()}options(){return this._options}paneView(){return this._priceLineView}labelPaneView(){return this._panePriceAxisView}priceAxisView(){return this._priceAxisView}update(){this._priceLineView.update(),this._priceAxisView.update()}yCoord(){const t=this._series,i=t.priceScale();if(t.model().timeScale().isEmpty()||i.isEmpty())return null;const s=t.firstValue();return null===s?null:i.priceToCoordinate(this._options.price,s.value)}}class Ti extends G{constructor(t){super(),this._model=t}model(){return this._model}}const Pi={Bar:(t,i,s,e)=>{var h;const n=i.upColor,l=i.downColor,a=r(t(s,e)),u=o(a.value[0])<=o(a.value[3]);return{barColor:null!==(h=a.color)&&void 0!==h?h:u?n:l}},Candlestick:(t,i,s,e)=>{var h,n,l;const a=i.upColor,u=i.downColor,c=i.borderUpColor,d=i.borderDownColor,f=i.wickUpColor,p=i.wickDownColor,m=r(t(s,e)),v=o(m.value[0])<=o(m.value[3]);return{barColor:null!==(h=m.color)&&void 0!==h?h:v?a:u,barBorderColor:null!==(n=m.borderColor)&&void 0!==n?n:v?c:d,barWickColor:null!==(l=m.wickColor)&&void 0!==l?l:v?f:p}},Area:(t,i,s,e)=>{var h,n,o,l;const a=r(t(s,e));return{barColor:null!==(h=a.lineColor)&&void 0!==h?h:i.lineColor,lineColor:null!==(n=a.lineColor)&&void 0!==n?n:i.lineColor,topColor:null!==(o=a.topColor)&&void 0!==o?o:i.topColor,bottomColor:null!==(l=a.bottomColor)&&void 0!==l?l:i.bottomColor}},Baseline:(t,i,s,e)=>{var h,n,o,l,a,u;const c=r(t(s,e));return{barColor:c.value[3]>=i.baseValue.price?i.topLineColor:i.bottomLineColor,topLineColor:null!==(h=c.topLineColor)&&void 0!==h?h:i.topLineColor,bottomLineColor:null!==(n=c.bottomLineColor)&&void 0!==n?n:i.bottomLineColor,topFillColor1:null!==(o=c.topFillColor1)&&void 0!==o?o:i.topFillColor1,topFillColor2:null!==(l=c.topFillColor2)&&void 0!==l?l:i.topFillColor2,bottomFillColor1:null!==(a=c.bottomFillColor1)&&void 0!==a?a:i.bottomFillColor1,bottomFillColor2:null!==(u=c.bottomFillColor2)&&void 0!==u?u:i.bottomFillColor2}},Line:(t,i,s,e)=>{var h,n;const o=r(t(s,e));return{barColor:null!==(h=o.color)&&void 0!==h?h:i.color,lineColor:null!==(n=o.color)&&void 0!==n?n:i.color}},Histogram:(t,i,s,e)=>{var h;return{barColor:null!==(h=r(t(s,e)).color)&&void 0!==h?h:i.color}}};class Ri{constructor(t){this._findBar=(t,i)=>void 0!==i?i.value:this._series.bars().valueAt(t),this._series=t,this._styleGetter=Pi[t.seriesType()]}barStyle(t,i){return this._styleGetter(this._findBar,this._series.options(),t,i)}}var Di;!function(t){t[t.NearestLeft=-1]="NearestLeft",t[t.None=0]="None",t[t.NearestRight=1]="NearestRight"}(Di||(Di={}));const Ai=30;class Ei{constructor(){this._items=[],this._minMaxCache=new Map,this._rowSearchCache=new Map}last(){return this.size()>0?this._items[this._items.length-1]:null}firstIndex(){return this.size()>0?this._indexAt(0):null}lastIndex(){return this.size()>0?this._indexAt(this._items.length-1):null}size(){return this._items.length}isEmpty(){return 0===this.size()}contains(t){return null!==this._search(t,0)}valueAt(t){return this.search(t)}search(t,i=0){const s=this._search(t,i);return null===s?null:Object.assign(Object.assign({},this._valueAt(s)),{index:this._indexAt(s)})}rows(){return this._items}minMaxOnRangeCached(t,i,s){if(this.isEmpty())return null;let e=null;for(const h of s){e=Oi(e,this._minMaxOnRangeCachedImpl(t,i,h))}return e}setData(t){this._rowSearchCache.clear(),this._minMaxCache.clear(),this._items=t}_indexAt(t){return this._items[t].index}_valueAt(t){return this._items[t]}_search(t,i){const s=this._bsearch(t);if(null===s&&0!==i)switch(i){case-1:return this._searchNearestLeft(t);case 1:return this._searchNearestRight(t);default:throw new TypeError("Unknown search mode")}return s}_searchNearestLeft(t){let i=this._lowerbound(t);return i>0&&(i-=1),i!==this._items.length&&this._indexAt(i)t.indexi.index>t))}_plotMinMax(t,i,s){let e=null;for(let h=t;he.max&&(e.max=t)))}return e}_minMaxOnRangeCachedImpl(t,i,s){if(this.isEmpty())return null;let e=null;const h=r(this.firstIndex()),n=r(this.lastIndex()),o=Math.max(t,h),l=Math.min(i,n),a=Math.ceil(o/Ai)*Ai,u=Math.max(a,Math.floor(l/Ai)*Ai);{const t=this._lowerbound(o),h=this._upperbound(Math.min(l,a,i));e=Oi(e,this._plotMinMax(t,h,s))}let c=this._minMaxCache.get(s);void 0===c&&(c=new Map,this._minMaxCache.set(s,c));for(let t=Math.max(a+1,o);t{this._animationTimeoutId=null,this.model().cursorUpdate()}),0)),i.invalidateStage(),[i]):[]}paneViews(){const t=[];this._isOverlay()||t.push(this._baseHorizontalLineView),t.push(this._paneView,this._priceLineView,this._markersPaneView);const i=this._customPriceLines.map((t=>t.paneView()));return t.push(...i),t}labelPaneViews(t){return[this._panePriceAxisView,...this._customPriceLines.map((t=>t.labelPaneView()))]}priceAxisViews(t,i){if(i!==this._priceScale&&!this._isOverlay())return[];const s=[...this._priceAxisViews];for(const t of this._customPriceLines)s.push(t.priceAxisView());return s}autoscaleInfo(t,i){if(void 0!==this._options.autoscaleInfoProvider){const s=this._options.autoscaleInfoProvider((()=>{const s=this._autoscaleInfoImpl(t,i);return null===s?null:s.toRaw()}));return _i.fromRaw(s)}return this._autoscaleInfoImpl(t,i)}minMove(){return this._options.priceFormat.minMove}formatter(){return this._formatter}updateAllViews(){var t;this._paneView.update(),this._markersPaneView.update();for(const t of this._priceAxisViews)t.update();for(const t of this._customPriceLines)t.update();this._priceLineView.update(),this._baseHorizontalLineView.update(),null===(t=this._lastPriceAnimationPaneView)||void 0===t||t.update()}priceScale(){return r(super.priceScale())}markerDataAtIndex(t){if(!(("Line"===this._seriesType||"Area"===this._seriesType||"Baseline"===this._seriesType)&&this._options.crosshairMarkerVisible))return null;const i=this._data.valueAt(t);if(null===i)return null;return{price:i.value[3],radius:this._markerRadius(),borderColor:this._markerBorderColor(),borderWidth:this._markerBorderWidth(),backgroundColor:this._markerBackgroundColor(t)}}title(){return this._options.title}visible(){return this._options.visible}_isOverlay(){return!et(this.priceScale().id())}_autoscaleInfoImpl(t,i){if(!M(t)||!M(i)||this._data.isEmpty())return null;const s="Line"===this._seriesType||"Area"===this._seriesType||"Baseline"===this._seriesType||"Histogram"===this._seriesType?[3]:[2,1],e=this._data.minMaxOnRangeCached(t,i,s);let h=null!==e?new xi(e.min,e.max):null;if("Histogram"===this.seriesType()){const t=this._options.base,i=new xi(t,t);h=null!==h?h.merge(i):i}return new _i(h,this._markersPaneView.autoScaleMargins())}_markerRadius(){switch(this._seriesType){case"Line":case"Area":case"Baseline":return this._options.crosshairMarkerRadius}return 0}_markerBorderColor(){switch(this._seriesType){case"Line":case"Area":case"Baseline":{const t=this._options.crosshairMarkerBorderColor;if(0!==t.length)return t}}return null}_markerBorderWidth(){switch(this._seriesType){case"Line":case"Area":case"Baseline":return this._options.crosshairMarkerBorderWidth}return 0}_markerBackgroundColor(t){switch(this._seriesType){case"Line":case"Area":case"Baseline":{const t=this._options.crosshairMarkerBackgroundColor;if(0!==t.length)return t}}return this.barColorer().barStyle(t).barColor}_recreateFormatter(){switch(this._options.priceFormat.type){case"custom":this._formatter={format:this._options.priceFormat.formatter};break;case"volume":this._formatter=new at(this._options.priceFormat.precision);break;case"percent":this._formatter=new lt(this._options.priceFormat.precision);break;default:{const t=Math.pow(10,this._options.priceFormat.precision);this._formatter=new ot(t,this._options.priceFormat.minMove*t)}}null!==this._priceScale&&this._priceScale.updateFormatter()}_recalculateMarkers(){const t=this.model().timeScale();if(!t.hasPoints()||this._data.isEmpty())return void(this._indexedMarkers=[]);const i=r(this._data.firstIndex());this._indexedMarkers=this._markers.map(((s,e)=>{const h=r(t.timeToIndex(s.time,!0)),n=ht instanceof Bi)).reduce(((t,e)=>{if(s.isOverlay(e)||!e.visible())return t;const h=e.priceScale(),n=e.bars();if(h.isEmpty()||!n.contains(i))return t;const r=n.valueAt(i);if(null===r)return t;const l=o(e.firstValue());return t.concat([h.priceToCoordinate(r.value[3],l.value)])}),[]);if(0===l.length)return e;l.sort(((t,i)=>Math.abs(t-r)-Math.abs(i-r)));const a=l[0];return e=h.coordinateToPrice(a,n),e}}class zi extends z{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:e,verticalPixelRatio:h}){if(null===this._data)return;const n=Math.max(1,Math.floor(e));t.lineWidth=n,function(t,i){t.save(),t.lineWidth%2&&t.translate(.5,.5),i(),t.restore()}(t,(()=>{const o=r(this._data);if(o.vertLinesVisible){t.strokeStyle=o.vertLinesColor,s(t,o.vertLineStyle),t.beginPath();for(const s of o.timeMarks){const h=Math.round(s.coord*e);t.moveTo(h,-n),t.lineTo(h,i.height+n)}t.stroke()}if(o.horzLinesVisible){t.strokeStyle=o.horzLinesColor,s(t,o.horzLineStyle),t.beginPath();for(const s of o.priceMarks){const e=Math.round(s.coord*h);t.moveTo(-n,e),t.lineTo(i.width+n,e)}t.stroke()}}))}}class Ii{constructor(t){this._renderer=new zi,this._invalidated=!0,this._pane=t}update(){this._invalidated=!0}renderer(){if(this._invalidated){const t=this._pane.model().options().grid,i={horzLinesVisible:t.horzLines.visible,vertLinesVisible:t.vertLines.visible,horzLinesColor:t.horzLines.color,vertLinesColor:t.vertLines.color,horzLineStyle:t.horzLines.style,vertLineStyle:t.vertLines.style,priceMarks:this._pane.defaultPriceScale().marks(),timeMarks:this._pane.model().timeScale().marks()||[]};this._renderer.setData(i),this._invalidated=!1}return this._renderer}}class Ni{constructor(t){this._paneView=new Ii(t)}paneView(){return this._paneView}}const Vi={logicalOffset:4,coordOffset:1e-4};function Fi(t,i){const s=100*(t-i)/i;return i<0?-s:s}function Wi(t,i){const s=Fi(t.minValue(),i),e=Fi(t.maxValue(),i);return new xi(s,e)}function ji(t,i){const s=100*(t-i)/i+100;return i<0?-s:s}function Hi(t,i){const s=ji(t.minValue(),i),e=ji(t.maxValue(),i);return new xi(s,e)}function $i(t,i){const s=Math.abs(t);if(s<1e-15)return 0;const e=zt(s+i.coordOffset)+i.logicalOffset;return t<0?-e:e}function Ui(t,i){const s=Math.abs(t);if(s<1e-15)return 0;const e=Math.pow(10,s-i.logicalOffset)-i.coordOffset;return t<0?-e:e}function qi(t,i){if(null===t)return null;const s=$i(t.minValue(),i),e=$i(t.maxValue(),i);return new xi(s,e)}function Yi(t,i){if(null===t)return null;const s=Ui(t.minValue(),i),e=Ui(t.maxValue(),i);return new xi(s,e)}function Xi(t){if(null===t)return Vi;const i=Math.abs(t.maxValue()-t.minValue());if(i>=1||i<1e-15)return Vi;const s=Math.ceil(Math.abs(Math.log10(i))),e=Vi.logicalOffset+s;return{logicalOffset:e,coordOffset:1/Math.pow(10,e)}}var Zi;!function(t){t[t.TickSpanEpsilon=1e-14]="TickSpanEpsilon"}(Zi||(Zi={}));class Ki{constructor(t,i){if(this._base=t,this._integralDividers=i,function(t){if(t<0)return!1;for(let i=t;i>1;i/=10)if(i%10!=0)return!1;return!0}(this._base))this._fractionalDividers=[2,2.5,2];else{this._fractionalDividers=[];for(let t=this._base;1!==t;){if(t%2==0)this._fractionalDividers.push(2),t/=2;else{if(t%5!=0)throw new Error("unexpected base");this._fractionalDividers.push(2,2.5),t/=5}if(this._fractionalDividers.length>100)throw new Error("something wrong with base")}}}tickSpan(t,i,s){const e=0===this._base?0:1/this._base;let h=Math.pow(10,Math.max(0,Math.ceil(zt(t-i)))),n=0,r=this._integralDividers[0];for(;;){const t=Lt(h,e,1e-14)&&h>e+1e-14,i=Lt(h,s*r,1e-14),o=Lt(h,1,1e-14);if(!(t&&i&&o))break;h/=r,r=this._integralDividers[++n%this._integralDividers.length]}if(h<=e+1e-14&&(h=e),h=Math.max(1,h),this._fractionalDividers.length>0&&(o=h,l=1,a=1e-14,Math.abs(o-l)e+1e-14;)h/=r,r=this._fractionalDividers[++n%this._fractionalDividers.length];var o,l,a;return h}}class Gi{constructor(t,i,s,e){this._marks=[],this._priceScale=t,this._base=i,this._coordinateToLogicalFunc=s,this._logicalToCoordinateFunc=e}tickSpan(t,i){if(t=a?1:-1;let f=null,p=0;for(let s=l-c;s>a;s-=u){const e=this._logicalToCoordinateFunc(s,i,!0);null!==f&&Math.abs(e-f)o||(pr(t.zorder())-r(i.zorder())))}var Qi;!function(t){t[t.Normal=0]="Normal",t[t.Logarithmic=1]="Logarithmic",t[t.Percentage=2]="Percentage",t[t.IndexedTo100=3]="IndexedTo100"}(Qi||(Qi={}));const ts=new lt,is=new ot(100,1);class ss{constructor(t,i,s,e){this._height=0,this._internalHeightCache=null,this._priceRange=null,this._priceRangeSnapshot=null,this._invalidatedForRange={isValid:!1,visibleBars:null},this._marginAbove=0,this._marginBelow=0,this._onMarksChanged=new b,this._modeChanged=new b,this._dataSources=[],this._cachedOrderedSources=null,this._marksCache=null,this._scaleStartPoint=null,this._scrollStartPoint=null,this._formatter=is,this._logFormula=Xi(null),this._id=t,this._options=i,this._layoutOptions=s,this._localizationOptions=e,this._markBuilder=new Gi(this,100,this._coordinateToLogical.bind(this),this._logicalToCoordinate.bind(this))}id(){return this._id}options(){return this._options}applyOptions(t){if(g(this._options,t),this.updateFormatter(),void 0!==t.mode&&this.setMode({mode:t.mode}),void 0!==t.scaleMargins){const i=n(t.scaleMargins.top),s=n(t.scaleMargins.bottom);if(i<0||i>1)throw new Error(`Invalid top margin - expect value between 0 and 1, given=${i}`);if(s<0||s>1||i+s>1)throw new Error(`Invalid bottom margin - expect value between 0 and 1, given=${s}`);if(i+s>1)throw new Error(`Invalid margins - sum of margins must be less than 1, given=${i+s}`);this._invalidateInternalHeightCache(),this._marksCache=null}}isAutoScale(){return this._options.autoScale}isLog(){return 1===this._options.mode}isPercentage(){return 2===this._options.mode}isIndexedTo100(){return 3===this._options.mode}mode(){return{autoScale:this._options.autoScale,isInverted:this._options.invertScale,mode:this._options.mode}}setMode(t){const i=this.mode();let s=null;void 0!==t.autoScale&&(this._options.autoScale=t.autoScale),void 0!==t.mode&&(this._options.mode=t.mode,2!==t.mode&&3!==t.mode||(this._options.autoScale=!0),this._invalidatedForRange.isValid=!1),1===i.mode&&t.mode!==i.mode&&(!function(t,i){if(null===t)return!1;const s=Ui(t.minValue(),i),e=Ui(t.maxValue(),i);return isFinite(s)&&isFinite(e)}(this._priceRange,this._logFormula)?this._options.autoScale=!0:(s=Yi(this._priceRange,this._logFormula),null!==s&&this.setPriceRange(s))),1===t.mode&&t.mode!==i.mode&&(s=qi(this._priceRange,this._logFormula),null!==s&&this.setPriceRange(s));const e=i.mode!==this._options.mode;e&&(2===i.mode||this.isPercentage())&&this.updateFormatter(),e&&(3===i.mode||this.isIndexedTo100())&&this.updateFormatter(),void 0!==t.isInverted&&i.isInverted!==t.isInverted&&(this._options.invertScale=t.isInverted,this._onIsInvertedChanged()),this._modeChanged.fire(i,this.mode())}modeChanged(){return this._modeChanged}fontSize(){return this._layoutOptions.fontSize}height(){return this._height}setHeight(t){this._height!==t&&(this._height=t,this._invalidateInternalHeightCache(),this._marksCache=null)}internalHeight(){if(this._internalHeightCache)return this._internalHeightCache;const t=this.height()-this._topMarginPx()-this._bottomMarginPx();return this._internalHeightCache=t,t}priceRange(){return this._makeSureItIsValid(),this._priceRange}setPriceRange(t,i){const s=this._priceRange;(i||null===s&&null!==t||null!==s&&!s.equals(t))&&(this._marksCache=null,this._priceRange=t)}isEmpty(){return this._makeSureItIsValid(),0===this._height||!this._priceRange||this._priceRange.isEmpty()}invertedCoordinate(t){return this.isInverted()?t:this.height()-1-t}priceToCoordinate(t,i){return this.isPercentage()?t=Fi(t,i):this.isIndexedTo100()&&(t=ji(t,i)),this._logicalToCoordinate(t,i)}pointsArrayToCoordinates(t,i,s){this._makeSureItIsValid();const e=this._bottomMarginPx(),h=r(this.priceRange()),n=h.minValue(),o=h.maxValue(),l=this.internalHeight()-1,a=this.isInverted(),u=l/(o-n),c=void 0===s?0:s.from,d=void 0===s?t.length:s.to,f=this._getCoordinateTransformer();for(let s=c;st.updateAllViews()))}updateFormatter(){this._marksCache=null;const t=this._formatterSource();let i=100;null!==t&&(i=Math.round(1/t.minMove())),this._formatter=is,this.isPercentage()?(this._formatter=ts,i=100):this.isIndexedTo100()?(this._formatter=new ot(100,1),i=100):null!==t&&(this._formatter=t.formatter()),this._markBuilder=new Gi(this,i,this._coordinateToLogical.bind(this),this._logicalToCoordinate.bind(this)),this._markBuilder.rebuildTickMarks()}invalidateSourcesCache(){this._cachedOrderedSources=null}_formatterSource(){return this._dataSources[0]||null}_topMarginPx(){return this.isInverted()?this._options.scaleMargins.bottom*this.height()+this._marginBelow:this._options.scaleMargins.top*this.height()+this._marginAbove}_bottomMarginPx(){return this.isInverted()?this._options.scaleMargins.top*this.height()+this._marginAbove:this._options.scaleMargins.bottom*this.height()+this._marginBelow}_makeSureItIsValid(){this._invalidatedForRange.isValid||(this._invalidatedForRange.isValid=!0,this._recalculatePriceRangeImpl())}_invalidateInternalHeightCache(){this._internalHeightCache=null}_logicalToCoordinate(t,i){if(this._makeSureItIsValid(),this.isEmpty())return 0;t=this.isLog()&&t?$i(t,this._logFormula):t;const s=r(this.priceRange()),e=this._bottomMarginPx()+(this.internalHeight()-1)*(t-s.minValue())/s.length();return this.invertedCoordinate(e)}_coordinateToLogical(t,i){if(this._makeSureItIsValid(),this.isEmpty())return 0;const s=this.invertedCoordinate(t),e=r(this.priceRange()),h=e.minValue()+e.length()*((s-this._bottomMarginPx())/(this.internalHeight()-1));return this.isLog()?Ui(h,this._logFormula):h}_onIsInvertedChanged(){this._marksCache=null,this._markBuilder.rebuildTickMarks()}_recalculatePriceRangeImpl(){const t=this._invalidatedForRange.visibleBars;if(null===t)return;let i=null;const s=this.sourcesForAutoScale();let e=0,h=0;for(const n of s){if(!n.visible())continue;const s=n.firstValue();if(null===s)continue;const o=n.autoscaleInfo(t.left(),t.right());let l=o&&o.priceRange();if(null!==l){switch(this._options.mode){case 1:l=qi(l,this._logFormula);break;case 2:l=Wi(l,s.value);break;case 3:l=Hi(l,s.value)}if(i=null===i?l:i.merge(r(l)),null!==o){const t=o.margins();null!==t&&(e=Math.max(e,t.above),h=Math.max(e,t.below))}}}if(e===this._marginAbove&&h===this._marginBelow||(this._marginAbove=e,this._marginBelow=h,this._marksCache=null,this._invalidateInternalHeightCache()),null!==i){if(i.minValue()===i.maxValue()){const t=this._formatterSource(),s=5*(null===t||this.isPercentage()||this.isIndexedTo100()?1:t.minMove());this.isLog()&&(i=Yi(i,this._logFormula)),i=new xi(i.minValue()-s,i.maxValue()+s),this.isLog()&&(i=qi(i,this._logFormula))}if(this.isLog()){const t=Yi(i,this._logFormula),s=Xi(t);if(n=s,o=this._logFormula,n.logicalOffset!==o.logicalOffset||n.coordOffset!==o.coordOffset){const e=null!==this._priceRangeSnapshot?Yi(this._priceRangeSnapshot,this._logFormula):null;this._logFormula=s,i=qi(t,s),null!==e&&(this._priceRangeSnapshot=qi(e,s))}}this.setPriceRange(i)}else null===this._priceRange&&(this.setPriceRange(new xi(-.5,.5)),this._logFormula=Xi(null));var n,o;this._invalidatedForRange.isValid=!0}_getCoordinateTransformer(){return this.isPercentage()?Fi:this.isIndexedTo100()?ji:this.isLog()?t=>$i(t,this._logFormula):null}_formatValue(t,i,s){return void 0===i?(void 0===s&&(s=this.formatter()),s.format(t)):i(t)}_formatPrice(t,i){return this._formatValue(t,this._localizationOptions.priceFormatter,i)}_formatPercentage(t,i){return this._formatValue(t,this._localizationOptions.percentageFormatter,i)}}class es{constructor(t,i){this._dataSources=[],this._overlaySourcesByScaleId=new Map,this._height=0,this._width=0,this._stretchFactor=1e3,this._cachedOrderedSources=null,this._destroyed=new b,this._timeScale=t,this._model=i,this._grid=new Ni(this);const s=i.options();this._leftPriceScale=this._createPriceScale("left",s.leftPriceScale),this._rightPriceScale=this._createPriceScale("right",s.rightPriceScale),this._leftPriceScale.modeChanged().subscribe(this._onPriceScaleModeChanged.bind(this,this._leftPriceScale),this),this._rightPriceScale.modeChanged().subscribe(this._onPriceScaleModeChanged.bind(this,this._rightPriceScale),this),this.applyScaleOptions(s)}applyScaleOptions(t){if(t.leftPriceScale&&this._leftPriceScale.applyOptions(t.leftPriceScale),t.rightPriceScale&&this._rightPriceScale.applyOptions(t.rightPriceScale),t.localization&&(this._leftPriceScale.updateFormatter(),this._rightPriceScale.updateFormatter()),t.overlayPriceScales){const i=Array.from(this._overlaySourcesByScaleId.values());for(const s of i){const i=r(s[0].priceScale());i.applyOptions(t.overlayPriceScales),t.localization&&i.updateFormatter()}}}priceScaleById(t){switch(t){case"left":return this._leftPriceScale;case"right":return this._rightPriceScale}return this._overlaySourcesByScaleId.has(t)?n(this._overlaySourcesByScaleId.get(t))[0].priceScale():null}destroy(){this.model().priceScalesOptionsChanged().unsubscribeAll(this),this._leftPriceScale.modeChanged().unsubscribeAll(this),this._rightPriceScale.modeChanged().unsubscribeAll(this),this._dataSources.forEach((t=>{t.destroy&&t.destroy()})),this._destroyed.fire()}stretchFactor(){return this._stretchFactor}setStretchFactor(t){this._stretchFactor=t}model(){return this._model}width(){return this._width}height(){return this._height}setWidth(t){this._width=t,this.updateAllSources()}setHeight(t){this._height=t,this._leftPriceScale.setHeight(t),this._rightPriceScale.setHeight(t),this._dataSources.forEach((i=>{if(this.isOverlay(i)){const s=i.priceScale();null!==s&&s.setHeight(t)}})),this.updateAllSources()}dataSources(){return this._dataSources}isOverlay(t){const i=t.priceScale();return null===i||this._leftPriceScale!==i&&this._rightPriceScale!==i}addDataSource(t,i,s){const e=void 0!==s?s:this._getZOrderMinMax().maxZOrder+1;this._insertDataSource(t,i,e)}removeDataSource(t){const i=this._dataSources.indexOf(t);h(-1!==i,"removeDataSource: invalid data source"),this._dataSources.splice(i,1);const s=r(t.priceScale()).id();if(this._overlaySourcesByScaleId.has(s)){const i=n(this._overlaySourcesByScaleId.get(s)),e=i.indexOf(t);-1!==e&&(i.splice(e,1),0===i.length&&this._overlaySourcesByScaleId.delete(s))}const e=t.priceScale();e&&e.dataSources().indexOf(t)>=0&&e.removeDataSource(t),null!==e&&(e.invalidateSourcesCache(),this.recalculatePriceScale(e)),this._cachedOrderedSources=null}priceScalePosition(t){return t===this._leftPriceScale?"left":t===this._rightPriceScale?"right":"overlay"}leftPriceScale(){return this._leftPriceScale}rightPriceScale(){return this._rightPriceScale}startScalePrice(t,i){t.startScale(i)}scalePriceTo(t,i){t.scaleTo(i),this.updateAllSources()}endScalePrice(t){t.endScale()}startScrollPrice(t,i){t.startScroll(i)}scrollPriceTo(t,i){t.scrollTo(i),this.updateAllSources()}endScrollPrice(t){t.endScroll()}updateAllSources(){this._dataSources.forEach((t=>{t.updateAllViews()}))}defaultPriceScale(){let t=null;return this._model.options().rightPriceScale.visible&&0!==this._rightPriceScale.dataSources().length?t=this._rightPriceScale:this._model.options().leftPriceScale.visible&&0!==this._leftPriceScale.dataSources().length?t=this._leftPriceScale:0!==this._dataSources.length&&(t=this._dataSources[0].priceScale()),null===t&&(t=this._rightPriceScale),t}defaultVisiblePriceScale(){let t=null;return this._model.options().rightPriceScale.visible?t=this._rightPriceScale:this._model.options().leftPriceScale.visible&&(t=this._leftPriceScale),t}recalculatePriceScale(t){null!==t&&t.isAutoScale()&&this._recalculatePriceScaleImpl(t)}resetPriceScale(t){const i=this._timeScale.visibleStrictRange();t.setMode({autoScale:!0}),null!==i&&t.recalculatePriceRange(i),this.updateAllSources()}momentaryAutoScale(){this._recalculatePriceScaleImpl(this._leftPriceScale),this._recalculatePriceScaleImpl(this._rightPriceScale)}recalculate(){this.recalculatePriceScale(this._leftPriceScale),this.recalculatePriceScale(this._rightPriceScale),this._dataSources.forEach((t=>{this.isOverlay(t)&&this.recalculatePriceScale(t.priceScale())})),this.updateAllSources(),this._model.lightUpdate()}orderedSources(){return null===this._cachedOrderedSources&&(this._cachedOrderedSources=Ji(this._dataSources)),this._cachedOrderedSources}onDestroyed(){return this._destroyed}grid(){return this._grid}_recalculatePriceScaleImpl(t){const i=t.sourcesForAutoScale();if(i&&i.length>0&&!this._timeScale.isEmpty()){const i=this._timeScale.visibleStrictRange();null!==i&&t.recalculatePriceRange(i)}t.updateAllViews()}_getZOrderMinMax(){const t=this.orderedSources();if(0===t.length)return{minZOrder:0,maxZOrder:0};let i=0,s=0;for(let e=0;es&&(s=h))}return{minZOrder:i,maxZOrder:s}}_insertDataSource(t,i,s){let e=this.priceScaleById(i);if(null===e&&(e=this._createPriceScale(i,this._model.options().overlayPriceScales)),this._dataSources.push(t),!et(i)){const s=this._overlaySourcesByScaleId.get(i)||[];s.push(t),this._overlaySourcesByScaleId.set(i,s)}e.addDataSource(t),t.setPriceScale(e),t.setZorder(s),this.recalculatePriceScale(e),this._cachedOrderedSources=null}_onPriceScaleModeChanged(t,i,s){i.mode!==s.mode&&this._recalculatePriceScaleImpl(t)}_createPriceScale(t,i){const s=Object.assign({visible:!0,autoScale:!0},_(i)),e=new ss(t,s,this._model.options().layout,this._model.options().localization);return e.setHeight(this.height()),e}}const hs=t=>t.getUTCFullYear();function ns(t,i,s){return i.replace(/yyyy/g,(t=>rt(hs(t),4))(t)).replace(/yy/g,(t=>rt(hs(t)%100,2))(t)).replace(/MMMM/g,((t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"long"}))(t,s)).replace(/MMM/g,((t,i)=>new Date(t.getUTCFullYear(),t.getUTCMonth(),1).toLocaleString(i,{month:"short"}))(t,s)).replace(/MM/g,(t=>rt((t=>t.getUTCMonth()+1)(t),2))(t)).replace(/dd/g,(t=>rt((t=>t.getUTCDate())(t),2))(t))}class rs{constructor(t="yyyy-MM-dd",i="default"){this._dateFormat=t,this._locale=i}format(t){return ns(t,this._dateFormat,this._locale)}}class os{constructor(t){this._formatStr=t||"%h:%m:%s"}format(t){return this._formatStr.replace("%h",rt(t.getUTCHours(),2)).replace("%m",rt(t.getUTCMinutes(),2)).replace("%s",rt(t.getUTCSeconds(),2))}}const ls={dateFormat:"yyyy-MM-dd",timeFormat:"%h:%m:%s",dateTimeSeparator:" ",locale:"default"};class as{constructor(t={}){const i=Object.assign(Object.assign({},ls),t);this._dateFormatter=new rs(i.dateFormat,i.locale),this._timeFormatter=new os(i.timeFormat),this._separator=i.dateTimeSeparator}format(t){return`${this._dateFormatter.format(t)}${this._separator}${this._timeFormatter.format(t)}`}}class us{constructor(t,i=50){this._actualSize=0,this._usageTick=1,this._oldestTick=1,this._cache=new Map,this._tick2Labels=new Map,this._format=t,this._maxSize=i}format(t){const i=t.time,s=void 0===i.businessDay?new Date(1e3*i.timestamp).getTime():new Date(Date.UTC(i.businessDay.year,i.businessDay.month-1,i.businessDay.day)).getTime(),e=this._cache.get(s);if(void 0!==e)return e.string;if(this._actualSize===this._maxSize){const t=this._tick2Labels.get(this._oldestTick);this._tick2Labels.delete(this._oldestTick),this._cache.delete(n(t)),this._oldestTick++,this._actualSize--}const h=this._format(t);return this._cache.set(s,{string:h,tick:this._usageTick}),this._tick2Labels.set(this._usageTick,s),this._actualSize++,this._usageTick++,h}}class cs{constructor(t,i){h(t<=i,"right should be >= left"),this._left=t,this._right=i}left(){return this._left}right(){return this._right}count(){return this._right-this._left+1}contains(t){return this._left<=t&&t<=this._right}equals(t){return this._left===t.left()&&this._right===t.right()}}function ds(t,i){return null===t||null===i?t===i:t.equals(i)}class fs{constructor(){this._marksByWeight=new Map,this._cache=null}setTimeScalePoints(t,i){this._removeMarksSinceIndex(i),this._cache=null;for(let s=i;s{t<=s[0].index?i.push(e):s.splice(St(s,t,(i=>i.indexi-t))){if(!this._marksByWeight.get(s))continue;const e=i;i=[];const h=e.length;let r=0;const o=n(this._marksByWeight.get(s)),l=o.length;let a=1/0,u=-1/0;for(let s=0;s=t&&l-u>=t&&(i.push(n),u=l)}for(;rthis._points[this._points.length-1].time.timestamp)return i?this._points.length-1:null;const s=St(this._points,t.timestamp,((t,i)=>t.time.timestamp0}visibleStrictRange(){return this._updateVisibleRange(),this._visibleRange.strictRange()}visibleLogicalRange(){return this._updateVisibleRange(),this._visibleRange.logicalRange()}visibleTimeRange(){const t=this.visibleStrictRange();if(null===t)return null;const i={from:t.left(),to:t.right()};return this.timeRangeForLogicalRange(i)}timeRangeForLogicalRange(t){const i=Math.round(t.from),s=Math.round(t.to),e=r(this._firstIndex()),h=r(this._lastIndex());return{from:r(this.indexToTime(Math.max(e,i))),to:r(this.indexToTime(Math.min(h,s)))}}logicalRangeForTimeRange(t){return{from:r(this.timeToIndex(t.from,!0)),to:r(this.timeToIndex(t.to,!0))}}width(){return this._width}setWidth(t){if(!isFinite(t)||t<=0)return;if(this._width===t)return;const i=this.visibleLogicalRange(),s=this._width;if(this._width=t,this._visibleRangeInvalidated=!0,this._options.lockVisibleTimeRangeOnResize&&0!==s){const i=this._barSpacing*t/s;this._barSpacing=i}if(this._options.fixLeftEdge&&null!==i&&i.left()<=0){const i=s-t;this._rightOffset-=Math.round(i/this._barSpacing)+1,this._visibleRangeInvalidated=!0}this._correctBarSpacing(),this._correctOffset()}indexToCoordinate(t){if(this.isEmpty()||!M(t))return 0;const i=this.baseIndex()+this._rightOffset-t;return this._width-(i+.5)*this._barSpacing-1}indexesToCoordinates(t,i){const s=this.baseIndex(),e=void 0===i?0:i.from,h=void 0===i?t.length:i.to;for(let i=e;ii/2&&!u?s.needAlignCoordinate=!1:s.needAlignCoordinate=c&&t.index<=l||d&&t.index>=a,f++}return this._labels.length=f,this._timeMarksCache=this._labels,this._labels}restoreDefault(){this._visibleRangeInvalidated=!0,this.setBarSpacing(this._options.barSpacing),this.setRightOffset(this._options.rightOffset)}setBaseIndex(t){this._visibleRangeInvalidated=!0,this._baseIndexOrNull=t,this._correctOffset(),this._doFixLeftEdge()}zoom(t,i){const s=this._coordinateToFloatIndex(t),e=this.barSpacing(),h=e+i*(e/10);this.setBarSpacing(h),this._options.rightBarStaysOnScroll||this.setRightOffset(this.rightOffset()+(s-this._coordinateToFloatIndex(t)))}startScale(t){this._scrollStartPoint&&this.endScroll(),null===this._scaleStartPoint&&null===this._commonTransitionStartState&&(this.isEmpty()||(this._scaleStartPoint=t,this._saveCommonTransitionsStartState()))}scaleTo(t){if(null===this._commonTransitionStartState)return;const i=Bt(this._width-t,0,this._width),s=Bt(this._width-r(this._scaleStartPoint),0,this._width);0!==i&&0!==s&&this.setBarSpacing(this._commonTransitionStartState.barSpacing*i/s)}endScale(){null!==this._scaleStartPoint&&(this._scaleStartPoint=null,this._clearCommonTransitionsStartState())}startScroll(t){null===this._scrollStartPoint&&null===this._commonTransitionStartState&&(this.isEmpty()||(this._scrollStartPoint=t,this._saveCommonTransitionsStartState()))}scrollTo(t){if(null===this._scrollStartPoint)return;const i=(this._scrollStartPoint-t)/this.barSpacing();this._rightOffset=r(this._commonTransitionStartState).rightOffset+i,this._visibleRangeInvalidated=!0,this._correctOffset()}endScroll(){null!==this._scrollStartPoint&&(this._scrollStartPoint=null,this._clearCommonTransitionsStartState())}scrollToRealTime(){this.scrollToOffsetAnimated(this._options.rightOffset)}scrollToOffsetAnimated(t,i=400){if(!isFinite(t))throw new RangeError("offset is required and must be finite number");if(!isFinite(i)||i<=0)throw new RangeError("animationDuration (optional) must be finite positive number");const s=this._rightOffset,e=performance.now();this._model.setTimeScaleAnimation({finished:t=>(t-e)/i>=1,getPosition:h=>{const n=(h-e)/i;return n>=1?t:s+(t-s)*n}})}update(t,i){this._visibleRangeInvalidated=!0,this._points=t,this._tickMarks.setTimeScalePoints(t,i),this._correctOffset()}visibleBarsChanged(){return this._visibleBarsChanged}logicalRangeChanged(){return this._logicalRangeChanged}optionsApplied(){return this._optionsApplied}baseIndex(){return this._baseIndexOrNull||0}setVisibleRange(t){const i=t.count();this._setBarSpacing(this._width/i),this._rightOffset=t.right()-this.baseIndex(),this._correctOffset(),this._visibleRangeInvalidated=!0,this._model.recalculateAllPanes(),this._model.lightUpdate()}fitContent(){const t=this._firstIndex(),i=this._lastIndex();null!==t&&null!==i&&this.setVisibleRange(new cs(t,i+this._options.rightOffset))}setLogicalRange(t){const i=new cs(t.from,t.to);this.setVisibleRange(i)}formatDateTime(t){return void 0!==this._localizationOptions.timeFormatter?this._localizationOptions.timeFormatter(t.originalTime):this._dateTimeFormatter.format(new Date(1e3*t.time.timestamp))}_isAllScalingAndScrollingDisabled(){const{handleScroll:t,handleScale:i}=this._model.options();return!(t.horzTouchDrag||t.mouseWheel||t.pressedMouseMove||t.vertTouchDrag||i.axisDoubleClickReset.time||i.axisPressedMouseMove.time||i.mouseWheel||i.pinch)}_firstIndex(){return 0===this._points.length?null:0}_lastIndex(){return 0===this._points.length?null:this._points.length-1}_rightOffsetForCoordinate(t){return(this._width-1-t)/this._barSpacing}_coordinateToFloatIndex(t){const i=this._rightOffsetForCoordinate(t),s=this.baseIndex()+this._rightOffset-i;return Math.round(1e6*s)/1e6}_setBarSpacing(t){const i=this._barSpacing;this._barSpacing=t,this._correctBarSpacing(),i!==this._barSpacing&&(this._visibleRangeInvalidated=!0,this._resetTimeMarksCache())}_updateVisibleRange(){if(!this._visibleRangeInvalidated)return;if(this._visibleRangeInvalidated=!1,this.isEmpty())return void this._setVisibleRange(ps.invalid());const t=this.baseIndex(),i=this._width/this._barSpacing,s=this._rightOffset+t,e=new cs(s-i+1,s);this._setVisibleRange(new ps(e))}_correctBarSpacing(){const t=this._minBarSpacing();if(this._barSpacingt&&(this._barSpacing=t,this._visibleRangeInvalidated=!0)}}_minBarSpacing(){return this._options.fixLeftEdge&&this._options.fixRightEdge&&0!==this._points.length?this._width/this._points.length:this._options.minBarSpacing}_correctOffset(){const t=this._maxRightOffset();this._rightOffset>t&&(this._rightOffset=t,this._visibleRangeInvalidated=!0);const i=this._minRightOffset();null!==i&&this._rightOffsetthis._formatLabelImpl(t))),this._formattedByWeight.set(t.weight,i)),i.format(t)}_formatLabelImpl(t){const i=function(t,i,s){switch(t){case 0:case 10:return i?s?4:3:2;case 20:case 21:case 22:case 30:case 31:case 32:case 33:return i?3:2;case 50:return 2;case 60:return 1;case 70:return 0}}(t.weight,this._options.timeVisible,this._options.secondsVisible);if(void 0!==this._options.tickMarkFormatter){const s=this._options.tickMarkFormatter(t.originalTime,i,this._localizationOptions.locale);if(null!==s)return s}return function(t,i,s){const e={};switch(i){case 0:e.year="numeric";break;case 1:e.month="short";break;case 2:e.day="numeric";break;case 3:e.hour12=!1,e.hour="2-digit",e.minute="2-digit";break;case 4:e.hour12=!1,e.hour="2-digit",e.minute="2-digit",e.second="2-digit"}const h=void 0===t.businessDay?new Date(1e3*t.timestamp):new Date(Date.UTC(t.businessDay.year,t.businessDay.month-1,t.businessDay.day));return new Date(h.getUTCFullYear(),h.getUTCMonth(),h.getUTCDate(),h.getUTCHours(),h.getUTCMinutes(),h.getUTCSeconds(),h.getUTCMilliseconds()).toLocaleString(s,e)}(t.time,i,this._localizationOptions.locale)}_setVisibleRange(t){const i=this._visibleRange;this._visibleRange=t,ds(i.strictRange(),this._visibleRange.strictRange())||this._visibleBarsChanged.fire(),ds(i.logicalRange(),this._visibleRange.logicalRange())||this._logicalRangeChanged.fire(),this._resetTimeMarksCache()}_resetTimeMarksCache(){this._timeMarksCache=null}_invalidateTickMarks(){this._resetTimeMarksCache(),this._formattedByWeight.clear()}_updateDateTimeFormatter(){const t=this._localizationOptions.dateFormat;this._options.timeVisible?this._dateTimeFormatter=new as({dateFormat:t,timeFormat:this._options.secondsVisible?"%h:%m:%s":"%h:%m",dateTimeSeparator:" ",locale:this._localizationOptions.locale}):this._dateTimeFormatter=new rs(t,this._localizationOptions.locale)}_doFixLeftEdge(){if(!this._options.fixLeftEdge)return;const t=this._firstIndex();if(null===t)return;const i=this.visibleStrictRange();if(null===i)return;const s=i.left()-t;if(s<0){const t=this._rightOffset-s-1;this.setRightOffset(t)}this._correctBarSpacing()}_doFixRightEdge(){this._correctOffset(),this._correctBarSpacing()}}class ys extends A{constructor(t){super(),this._metricsCache=new Map,this._data=t}_drawImpl(t){}_drawBackgroundImpl(t){if(!this._data.visible)return;const{context:i,mediaSize:s}=t;let e=0;for(const t of this._data.lines){if(0===t.text.length)continue;i.font=t.font;const h=this._metrics(i,t.text);h>s.width?t.zoom=s.width/h:t.zoom=1,e+=t.lineHeight*t.zoom}let h=0;switch(this._data.vertAlign){case"top":h=0;break;case"center":h=Math.max((s.height-e)/2,0);break;case"bottom":h=Math.max(s.height-e,0)}i.fillStyle=this._data.color;for(const t of this._data.lines){i.save();let e=0;switch(this._data.horzAlign){case"left":i.textAlign="left",e=t.lineHeight/2;break;case"center":i.textAlign="center",e=s.width/2;break;case"right":i.textAlign="right",e=s.width-1-t.lineHeight/2}i.translate(e,h),i.textBaseline="top",i.font=t.font,i.scale(t.zoom,t.zoom),i.fillText(t.text,0,t.vertOffset),i.restore(),h+=t.lineHeight*t.zoom}}_metrics(t,i){const s=this._fontCache(t.font);let e=s.get(i);return void 0===e&&(e=t.measureText(i).width,s.set(i,e)),e}_fontCache(t){let i=this._metricsCache.get(t);return void 0===i&&(i=new Map,this._metricsCache.set(t,i)),i}}class ks{constructor(t){this._invalidated=!0,this._rendererData={visible:!1,color:"",lines:[],vertAlign:"center",horzAlign:"center"},this._renderer=new ys(this._rendererData),this._source=t}update(){this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.options(),i=this._rendererData;i.visible=t.visible,i.visible&&(i.color=t.color,i.horzAlign=t.horzAlign,i.vertAlign=t.vertAlign,i.lines=[{text:t.text,font:T(t.fontSize,t.fontFamily,t.fontStyle),lineHeight:1.2*t.fontSize,vertOffset:0,zoom:0}])}}class Cs extends G{constructor(t,i){super(),this._options=i,this._paneView=new ks(this)}priceAxisViews(){return[]}paneViews(){return[this._paneView]}options(){return this._options}updateAllViews(){this._paneView.update()}}!function(t){t[t.Top=0]="Top",t[t.Bottom=1]="Bottom"}(bs||(bs={})),function(t){t[t.OnTouchEnd=0]="OnTouchEnd",t[t.OnNextTap=1]="OnNextTap"}(gs||(gs={}));class Ts{constructor(t,i){this._panes=[],this._serieses=[],this._width=0,this._hoveredSource=null,this._priceScalesOptionsChanged=new b,this._crosshairMoved=new b,this._gradientColorsCache=null,this._invalidateHandler=t,this._options=i,this._rendererOptionsProvider=new R(this),this._timeScale=new _s(this,i.timeScale,this._options.localization),this._crosshair=new st(this,i.crosshair),this._magnet=new Li(i.crosshair),this._watermark=new Cs(this,i.watermark),this.createPane(),this._panes[0].setStretchFactor(2e3),this._backgroundTopColor=this._getBackgroundColor(0),this._backgroundBottomColor=this._getBackgroundColor(1)}fullUpdate(){this._invalidate(ht.full())}lightUpdate(){this._invalidate(ht.light())}cursorUpdate(){this._invalidate(new ht(1))}updateSource(t){const i=this._invalidationMaskForSource(t);this._invalidate(i)}hoveredSource(){return this._hoveredSource}setHoveredSource(t){const i=this._hoveredSource;this._hoveredSource=t,null!==i&&this.updateSource(i.source),null!==t&&this.updateSource(t.source)}options(){return this._options}applyOptions(t){g(this._options,t),this._panes.forEach((i=>i.applyScaleOptions(t))),void 0!==t.timeScale&&this._timeScale.applyOptions(t.timeScale),void 0!==t.localization&&this._timeScale.applyLocalizationOptions(t.localization),(t.leftPriceScale||t.rightPriceScale)&&this._priceScalesOptionsChanged.fire(),this._backgroundTopColor=this._getBackgroundColor(0),this._backgroundBottomColor=this._getBackgroundColor(1),this.fullUpdate()}applyPriceScaleOptions(t,i){if("left"===t)return void this.applyOptions({leftPriceScale:i});if("right"===t)return void this.applyOptions({rightPriceScale:i});const s=this.findPriceScale(t);null!==s&&(s.priceScale.applyOptions(i),this._priceScalesOptionsChanged.fire())}findPriceScale(t){for(const i of this._panes){const s=i.priceScaleById(t);if(null!==s)return{pane:i,priceScale:s}}return null}timeScale(){return this._timeScale}panes(){return this._panes}watermarkSource(){return this._watermark}crosshairSource(){return this._crosshair}crosshairMoved(){return this._crosshairMoved}setPaneHeight(t,i){t.setHeight(i),this.recalculateAllPanes()}setWidth(t){this._width=t,this._timeScale.setWidth(this._width),this._panes.forEach((i=>i.setWidth(t))),this.recalculateAllPanes()}createPane(t){const i=new es(this._timeScale,this);void 0!==t?this._panes.splice(t,0,i):this._panes.push(i);const s=void 0===t?this._panes.length-1:t,e=ht.full();return e.invalidatePane(s,{level:0,autoScale:!0}),this._invalidate(e),i}startScalePrice(t,i,s){t.startScalePrice(i,s)}scalePriceTo(t,i,s){t.scalePriceTo(i,s),this.updateCrosshair(),this._invalidate(this._paneInvalidationMask(t,2))}endScalePrice(t,i){t.endScalePrice(i),this._invalidate(this._paneInvalidationMask(t,2))}startScrollPrice(t,i,s){i.isAutoScale()||t.startScrollPrice(i,s)}scrollPriceTo(t,i,s){i.isAutoScale()||(t.scrollPriceTo(i,s),this.updateCrosshair(),this._invalidate(this._paneInvalidationMask(t,2)))}endScrollPrice(t,i){i.isAutoScale()||(t.endScrollPrice(i),this._invalidate(this._paneInvalidationMask(t,2)))}resetPriceScale(t,i){t.resetPriceScale(i),this._invalidate(this._paneInvalidationMask(t,2))}startScaleTime(t){this._timeScale.startScale(t)}zoomTime(t,i){const s=this.timeScale();if(s.isEmpty()||0===i)return;const e=s.width();t=Math.max(1,Math.min(t,e)),s.zoom(t,i),this.recalculateAllPanes()}scrollChart(t){this.startScrollTime(0),this.scrollTimeTo(t),this.endScrollTime()}scaleTimeTo(t){this._timeScale.scaleTo(t),this.recalculateAllPanes()}endScaleTime(){this._timeScale.endScale(),this.lightUpdate()}startScrollTime(t){this._timeScale.startScroll(t)}scrollTimeTo(t){this._timeScale.scrollTo(t),this.recalculateAllPanes()}endScrollTime(){this._timeScale.endScroll(),this.lightUpdate()}serieses(){return this._serieses}setAndSaveCurrentPosition(t,i,s,e){this._crosshair.saveOriginCoord(t,i);let h=NaN,n=this._timeScale.coordinateToIndex(t);const r=this._timeScale.visibleStrictRange();null!==r&&(n=Math.min(Math.max(r.left(),n),r.right()));const o=e.defaultPriceScale(),l=o.firstValue();null!==l&&(h=o.coordinateToPrice(i,l)),h=this._magnet.align(h,n,e),this._crosshair.setPosition(n,h,e),this.cursorUpdate(),this._crosshairMoved.fire(this._crosshair.appliedIndex(),{x:t,y:i},s)}setAndSaveCurrentPositionFire(t,i,s,e){this._crosshair.saveOriginCoord(t,i);let h=NaN,n=this._timeScale.coordinateToIndex(t);const r=this._timeScale.visibleStrictRange();null!==r&&(n=Math.min(Math.max(r.left(),n),r.right()));const o=e.defaultPriceScale(),l=o.firstValue();null!==l&&(h=o.coordinateToPrice(i,l)),h=this._magnet.align(h,n,e),this._crosshair.setPosition(n,h,e),this.cursorUpdate(),s&&this._crosshairMoved.fire(this._crosshair.appliedIndex(),{x:t,y:i},null)}clearCurrentPosition(){this.crosshairSource().clearPosition(),this.cursorUpdate(),this._crosshairMoved.fire(null,null,null)}updateCrosshair(){const t=this._crosshair.pane();if(null!==t){const i=this._crosshair.originCoordX(),s=this._crosshair.originCoordY();this.setAndSaveCurrentPosition(i,s,null,t)}this._crosshair.updateAllViews()}updateTimeScale(t,i,s){const e=this._timeScale.indexToTime(0);void 0!==i&&void 0!==s&&this._timeScale.update(i,s);const h=this._timeScale.indexToTime(0),n=this._timeScale.baseIndex(),r=this._timeScale.visibleStrictRange();if(null!==r&&null!==e&&null!==h){const i=r.contains(n),s=e.timestamp>h.timestamp,o=null!==t&&t>n&&!s,l=i&&this._timeScale.options().shiftVisibleRangeOnNewBar;if(o&&!l){const i=t-n;this._timeScale.setRightOffset(this._timeScale.rightOffset()-i)}}this._timeScale.setBaseIndex(t)}recalculatePane(t){null!==t&&t.recalculate()}paneForSource(t){const i=this._panes.find((i=>i.orderedSources().includes(t)));return void 0===i?null:i}recalculateAllPanes(){this._watermark.updateAllViews(),this._panes.forEach((t=>t.recalculate())),this.updateCrosshair()}destroy(){this._panes.forEach((t=>t.destroy())),this._panes.length=0,this._options.localization.priceFormatter=void 0,this._options.localization.percentageFormatter=void 0,this._options.localization.timeFormatter=void 0}rendererOptionsProvider(){return this._rendererOptionsProvider}priceAxisRendererOptions(){return this._rendererOptionsProvider.options()}priceScalesOptionsChanged(){return this._priceScalesOptionsChanged}createSeries(t,i){const s=this._panes[0],e=this._createSeries(i,t,s);return this._serieses.push(e),1===this._serieses.length?this.fullUpdate():this.lightUpdate(),e}removeSeries(t){const i=this.paneForSource(t),s=this._serieses.indexOf(t);h(-1!==s,"Series not found"),this._serieses.splice(s,1),r(i).removeDataSource(t),t.destroy&&t.destroy()}moveSeriesToScale(t,i){const s=r(this.paneForSource(t));s.removeDataSource(t);const e=this.findPriceScale(i);if(null===e){const e=t.zorder();s.addDataSource(t,i,e)}else{const h=e.pane===s?t.zorder():void 0;e.pane.addDataSource(t,i,h)}}fitContent(){const t=ht.light();t.setFitContent(),this._invalidate(t)}setTargetLogicalRange(t){const i=ht.light();i.applyRange(t),this._invalidate(i)}resetTimeScale(){const t=ht.light();t.resetTimeScale(),this._invalidate(t)}setBarSpacing(t){const i=ht.light();i.setBarSpacing(t),this._invalidate(i)}setRightOffset(t){const i=ht.light();i.setRightOffset(t),this._invalidate(i)}setTimeScaleAnimation(t){const i=ht.light();i.setTimeScaleAnimation(t),this._invalidate(i)}stopTimeScaleAnimation(){const t=ht.light();t.stopTimeScaleAnimation(),this._invalidate(t)}defaultVisiblePriceScaleId(){return this._options.rightPriceScale.visible?"right":"left"}backgroundBottomColor(){return this._backgroundBottomColor}backgroundTopColor(){return this._backgroundTopColor}backgroundColorAtYPercentFromTop(t){const i=this._backgroundBottomColor,s=this._backgroundTopColor;if(i===s)return i;if(t=Math.max(0,Math.min(100,Math.round(100*t))),null===this._gradientColorsCache||this._gradientColorsCache.topColor!==s||this._gradientColorsCache.bottomColor!==i)this._gradientColorsCache={topColor:s,bottomColor:i,colors:new Map};else{const i=this._gradientColorsCache.colors.get(t);if(void 0!==i)return i}const e=function(t,i,s){const[e,h,n,r]=m(t),[o,l,c,d]=m(i),f=[a(e+s*(o-e)),a(h+s*(l-h)),a(n+s*(c-n)),u(r+s*(d-r))];return`rgba(${f[0]}, ${f[1]}, ${f[2]}, ${f[3]})`}(s,i,t/100);return this._gradientColorsCache.colors.set(t,e),e}_paneInvalidationMask(t,i){const s=new ht(i);if(null!==t){const e=this._panes.indexOf(t);s.invalidatePane(e,{level:i})}return s}_invalidationMaskForSource(t,i){return void 0===i&&(i=2),this._paneInvalidationMask(this.paneForSource(t),i)}_invalidate(t){this._invalidateHandler&&this._invalidateHandler(t),this._panes.forEach((t=>t.grid().paneView().update()))}_createSeries(t,i,s){const e=new Bi(this,t,i),h=void 0!==t.priceScaleId?t.priceScaleId:this.defaultVisiblePriceScaleId();return s.addDataSource(e,h),et(h)||e.applyOptions(t),e}_getBackgroundColor(t){const i=this._options.layout;return"gradient"===i.background.type?0===t?i.background.topColor:i.background.bottomColor:i.background.color}}function Ps(t){return!w(t)&&!S(t)}function Rs(t){return w(t)}function Ds(t){var i=t.width,s=t.height;if(i<0)throw new Error("Negative width is not allowed for Size");if(s<0)throw new Error("Negative height is not allowed for Size");return{width:i,height:s}}function As(t,i){return t.width===i.width&&t.height===i.height}!function(t){t[t.Disabled=0]="Disabled",t[t.Continuous=1]="Continuous",t[t.OnDataUpdate=2]="OnDataUpdate"}(ws||(ws={})),function(t){t[t.LastPriceAndPercentageValue=0]="LastPriceAndPercentageValue",t[t.LastValueAccordingToScale=1]="LastValueAccordingToScale"}(Ms||(Ms={})),function(t){t[t.LastBar=0]="LastBar",t[t.LastVisible=1]="LastVisible"}(Ss||(Ss={})),function(t){t.Solid="solid",t.VerticalGradient="gradient"}(xs||(xs={}));var Es=function(){function t(t){var i=this;this._resolutionListener=function(){return i._onResolutionChanged()},this._resolutionMediaQueryList=null,this._observers=[],this._window=t,this._installResolutionListener()}return t.prototype.dispose=function(){this._uninstallResolutionListener(),this._window=null},Object.defineProperty(t.prototype,"value",{get:function(){return this._window.devicePixelRatio},enumerable:!1,configurable:!0}),t.prototype.subscribe=function(t){var i=this,s={next:t};return this._observers.push(s),{unsubscribe:function(){i._observers=i._observers.filter((function(t){return t!==s}))}}},t.prototype._installResolutionListener=function(){if(null!==this._resolutionMediaQueryList)throw new Error("Resolution listener is already installed");var t=this._window.devicePixelRatio;this._resolutionMediaQueryList=this._window.matchMedia("all and (resolution: ".concat(t,"dppx)")),this._resolutionMediaQueryList.addListener(this._resolutionListener)},t.prototype._uninstallResolutionListener=function(){null!==this._resolutionMediaQueryList&&(this._resolutionMediaQueryList.removeListener(this._resolutionListener),this._resolutionMediaQueryList=null)},t.prototype._reinstallResolutionListener=function(){this._uninstallResolutionListener(),this._installResolutionListener()},t.prototype._onResolutionChanged=function(){var t=this;this._observers.forEach((function(i){return i.next(t._window.devicePixelRatio)})),this._reinstallResolutionListener()},t}();var Os=function(){function t(t,i,s){var e;this._canvasElement=null,this._bitmapSizeChangedListeners=[],this._suggestedBitmapSize=null,this._suggestedBitmapSizeChangedListeners=[],this._devicePixelRatioObservable=null,this._canvasElementResizeObserver=null,this._canvasElement=t,this._canvasElementClientSize=Ds({width:this._canvasElement.clientWidth,height:this._canvasElement.clientHeight}),this._transformBitmapSize=null!=i?i:function(t){return t},this._allowResizeObserver=null===(e=null==s?void 0:s.allowResizeObserver)||void 0===e||e,this._chooseAndInitObserver()}return t.prototype.dispose=function(){var t,i;if(null===this._canvasElement)throw new Error("Object is disposed");null===(t=this._canvasElementResizeObserver)||void 0===t||t.disconnect(),this._canvasElementResizeObserver=null,null===(i=this._devicePixelRatioObservable)||void 0===i||i.dispose(),this._devicePixelRatioObservable=null,this._suggestedBitmapSizeChangedListeners.length=0,this._bitmapSizeChangedListeners.length=0,this._canvasElement=null},Object.defineProperty(t.prototype,"canvasElement",{get:function(){if(null===this._canvasElement)throw new Error("Object is disposed");return this._canvasElement},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"canvasElementClientSize",{get:function(){return this._canvasElementClientSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bitmapSize",{get:function(){return Ds({width:this.canvasElement.width,height:this.canvasElement.height})},enumerable:!1,configurable:!0}),t.prototype.resizeCanvasElement=function(t){this._canvasElementClientSize=Ds(t),this.canvasElement.style.width="".concat(this._canvasElementClientSize.width,"px"),this.canvasElement.style.height="".concat(this._canvasElementClientSize.height,"px"),this._invalidateBitmapSize()},t.prototype.subscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeBitmapSizeChanged=function(t){this._bitmapSizeChangedListeners=this._bitmapSizeChangedListeners.filter((function(i){return i!==t}))},Object.defineProperty(t.prototype,"suggestedBitmapSize",{get:function(){return this._suggestedBitmapSize},enumerable:!1,configurable:!0}),t.prototype.subscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners.push(t)},t.prototype.unsubscribeSuggestedBitmapSizeChanged=function(t){this._suggestedBitmapSizeChangedListeners=this._suggestedBitmapSizeChangedListeners.filter((function(i){return i!==t}))},t.prototype.applySuggestedBitmapSize=function(){if(null!==this._suggestedBitmapSize){var t=this._suggestedBitmapSize;this._suggestedBitmapSize=null,this._resizeBitmap(t),this._emitSuggestedBitmapSizeChanged(t,this._suggestedBitmapSize)}},t.prototype._resizeBitmap=function(t){var i=this.bitmapSize;As(i,t)||(this.canvasElement.width=t.width,this.canvasElement.height=t.height,this._emitBitmapSizeChanged(i,t))},t.prototype._emitBitmapSizeChanged=function(t,i){var s=this;this._bitmapSizeChangedListeners.forEach((function(e){return e.call(s,t,i)}))},t.prototype._suggestNewBitmapSize=function(t){var i=this._suggestedBitmapSize,s=Ds(this._transformBitmapSize(t,this._canvasElementClientSize)),e=As(this.bitmapSize,s)?null:s;null===i&&null===e||null!==i&&null!==e&&As(i,e)||(this._suggestedBitmapSize=e,this._emitSuggestedBitmapSizeChanged(i,e))},t.prototype._emitSuggestedBitmapSizeChanged=function(t,i){var s=this;this._suggestedBitmapSizeChangedListeners.forEach((function(e){return e.call(s,t,i)}))},t.prototype._chooseAndInitObserver=function(){var t=this;this._allowResizeObserver?new Promise((function(t){var i=new ResizeObserver((function(s){t(s.every((function(t){return"devicePixelContentBoxSize"in t}))),i.disconnect()}));i.observe(document.body,{box:"device-pixel-content-box"})})).catch((function(){return!1})).then((function(i){return i?t._initResizeObserver():t._initDevicePixelRatioObservable()})):this._initDevicePixelRatioObservable()},t.prototype._initDevicePixelRatioObservable=function(){var t=this;if(null!==this._canvasElement){var i=Bs(this._canvasElement);if(null===i)throw new Error("No window is associated with the canvas");this._devicePixelRatioObservable=function(t){return new Es(t)}(i),this._devicePixelRatioObservable.subscribe((function(){return t._invalidateBitmapSize()})),this._invalidateBitmapSize()}},t.prototype._invalidateBitmapSize=function(){var t,i;if(null!==this._canvasElement){var s=Bs(this._canvasElement);if(null!==s){var e=null!==(i=null===(t=this._devicePixelRatioObservable)||void 0===t?void 0:t.value)&&void 0!==i?i:s.devicePixelRatio,h=this._canvasElement.getClientRects(),n=void 0!==h[0]?function(t,i){return Ds({width:Math.round(t.left*i+t.width*i)-Math.round(t.left*i),height:Math.round(t.top*i+t.height*i)-Math.round(t.top*i)})}(h[0],e):Ds({width:this._canvasElementClientSize.width*e,height:this._canvasElementClientSize.height*e});this._suggestNewBitmapSize(n)}}},t.prototype._initResizeObserver=function(){var t=this;null!==this._canvasElement&&(this._canvasElementResizeObserver=new ResizeObserver((function(i){var s=i.find((function(i){return i.target===t._canvasElement}));if(s&&s.devicePixelContentBoxSize&&s.devicePixelContentBoxSize[0]){var e=s.devicePixelContentBoxSize[0],h=Ds({width:e.inlineSize,height:e.blockSize});t._suggestNewBitmapSize(h)}})),this._canvasElementResizeObserver.observe(this._canvasElement,{box:"device-pixel-content-box"}))},t}();function Bs(t){return t.ownerDocument.defaultView}var Ls=function(){function t(t,i,s){if(0===i.width||0===i.height)throw new TypeError("Rendering target could only be created on a media with positive width and height");if(this._mediaSize=i,0===s.width||0===s.height)throw new TypeError("Rendering target could only be created using a bitmap with positive integer width and height");this._bitmapSize=s,this._context=t}return t.prototype.useMediaCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),this._context.scale(this._horizontalPixelRatio,this._verticalPixelRatio),t({context:this._context,mediaSize:this._mediaSize})}finally{this._context.restore()}},t.prototype.useBitmapCoordinateSpace=function(t){try{return this._context.save(),this._context.setTransform(1,0,0,1,0,0),t({context:this._context,mediaSize:this._mediaSize,bitmapSize:this._bitmapSize,horizontalPixelRatio:this._horizontalPixelRatio,verticalPixelRatio:this._verticalPixelRatio})}finally{this._context.restore()}},Object.defineProperty(t.prototype,"_horizontalPixelRatio",{get:function(){return this._bitmapSize.width/this._mediaSize.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"_verticalPixelRatio",{get:function(){return this._bitmapSize.height/this._mediaSize.height},enumerable:!1,configurable:!0}),t}();function zs(t,i){var s=t.canvasElementClientSize;if(0===s.width||0===s.height)return null;var e=t.bitmapSize;if(0===e.width||0===e.height)return null;var h=t.canvasElement.getContext("2d",i);return null===h?null:new Ls(h,s,e)}const Is="undefined"!=typeof window;function Ns(){return!!Is&&window.navigator.userAgent.toLowerCase().indexOf("firefox")>-1}function Vs(){return!!Is&&/iPhone|iPad|iPod/.test(window.navigator.platform)}function Fs(t){return t+t%2}var Ws,js,Hs,$s,Us,qs,Ys,Xs;function Zs(t,i){return t.position-i.position}function Ks(t,i,s){const e=(t.position-i.position)/(t.time-i.time);return Math.sign(e)*Math.min(Math.abs(e),s)}!function(t){t[t.MaxStartDelay=50]="MaxStartDelay",t[t.EpsilonDistance=1]="EpsilonDistance"}(Ws||(Ws={}));class Gs{constructor(t,i,s,e){this._position1=null,this._position2=null,this._position3=null,this._position4=null,this._animationStartPosition=null,this._durationMsecs=0,this._speedPxPerMsec=0,this._minSpeed=t,this._maxSpeed=i,this._dumpingCoeff=s,this._minMove=e}addPosition(t,i){if(null!==this._position1){if(this._position1.time===i)return void(this._position1.position=t);if(Math.abs(this._position1.position-t)50)return;let s=0;const e=Ks(this._position1,this._position2,this._maxSpeed),h=Zs(this._position1,this._position2),n=[e],r=[h];if(s+=h,null!==this._position3){const t=Ks(this._position2,this._position3,this._maxSpeed);if(Math.sign(t)===Math.sign(e)){const i=Zs(this._position2,this._position3);if(n.push(t),r.push(i),s+=i,null!==this._position4){const t=Ks(this._position3,this._position4,this._maxSpeed);if(Math.sign(t)===Math.sign(e)){const i=Zs(this._position3,this._position4);n.push(t),r.push(i),s+=i}}}}let o=0;for(let t=0;t({width:Math.max(t.width,i.width),height:Math.max(t.height,i.height)})});return e.resizeCanvasElement(i),e}function Qs(t){Is&&void 0!==window.chrome&&t.addEventListener("mousedown",(t=>{if(1===t.button)return t.preventDefault(),!1}))}!function(t){t[t.ResetClick=500]="ResetClick",t[t.LongTap=240]="LongTap",t[t.PreventFiresTouchEvents=500]="PreventFiresTouchEvents"}(js||(js={})),function(t){t[t.CancelClickManhattanDistance=5]="CancelClickManhattanDistance",t[t.CancelTapManhattanDistance=5]="CancelTapManhattanDistance",t[t.DoubleClickManhattanDistance=5]="DoubleClickManhattanDistance",t[t.DoubleTapManhattanDistance=30]="DoubleTapManhattanDistance"}(Hs||(Hs={}));class te{constructor(t,i,s){this._clickCount=0,this._clickTimeoutId=null,this._clickPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartPosition=null,this._touchMoveStartPosition=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddlePoint=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!Vs(),this._onFirefoxOutsideMouseUp=t=>{this._mouseUpHandler(t)},this._onMobileSafariDoubleClick=t=>{if(this._firesTouchEvents(t)){const i=this._makeCompatEvent(t);if(++this._tapCount,this._tapTimeoutId&&this._tapCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._tapPosition);s<30&&!this._cancelTap&&this._processTouchEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}}else{const i=this._makeCompatEvent(t);if(++this._clickCount,this._clickTimeoutId&&this._clickCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._clickPosition);s<5&&!this._cancelClick&&this._processMouseEvent(i,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}}},this._target=t,this._handler=i,this._options=s,this._init()}destroy(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()}_mouseEnterHandler(t){this._unsubscribeMousemove&&this._unsubscribeMousemove();const i=this._mouseMoveHandler.bind(this);if(this._unsubscribeMousemove=()=>{this._target.removeEventListener("mousemove",i)},this._target.addEventListener("mousemove",i),this._firesTouchEvents(t))return;const s=this._makeCompatEvent(t);this._processMouseEvent(s,this._handler.mouseEnterEvent),this._acceptMouseLeave=!0}_resetClickTimeout(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}}_resetTapTimeout(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapPosition={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}}_mouseMoveHandler(t){if(this._mousePressed||null!==this._touchMoveStartPosition)return;if(this._firesTouchEvents(t))return;const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.mouseMoveEvent),this._acceptMouseLeave=!0}_touchMoveHandler(t){const i=ne(t.changedTouches,r(this._activeTouchId));if(null===i)return;if(this._lastTouchEventTimeStamp=he(t),null!==this._startPinchMiddlePoint)return;if(this._preventTouchDragProcess)return;this._pinchPrevented=!0;const s=this._touchMouseMoveWithDownInfo(ee(i),r(this._touchMoveStartPosition)),{xOffset:e,yOffset:h,manhattanDistance:n}=s;if(this._touchMoveExceededManhattanDistance||!(n<5)){if(!this._touchMoveExceededManhattanDistance){const t=.5*e,i=h>=t&&!this._options.treatVertTouchDragAsPageScroll(),s=t>h&&!this._options.treatHorzTouchDragAsPageScroll();i||s||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}if(!this._preventTouchDragProcess){const s=this._makeCompatEvent(t,i);this._processTouchEvent(s,this._handler.touchMoveEvent),se(t)}}}_mouseMoveWithDownHandler(t){if(0!==t.button)return;const i=this._touchMouseMoveWithDownInfo(ee(t),r(this._mouseMoveStartPosition)),{manhattanDistance:s}=i;if(s>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick){const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.pressedMouseMoveEvent)}}_touchMouseMoveWithDownInfo(t,i){const s=Math.abs(i.x-t.x),e=Math.abs(i.y-t.y);return{xOffset:s,yOffset:e,manhattanDistance:s+e}}_touchEndHandler(t){let i=ne(t.changedTouches,r(this._activeTouchId));if(null===i&&0===t.touches.length&&(i=t.changedTouches[0]),null===i)return;this._activeTouchId=null,this._lastTouchEventTimeStamp=he(t),this._clearLongTapTimeout(),this._touchMoveStartPosition=null,this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);const s=this._makeCompatEvent(t,i);if(this._processTouchEvent(s,this._handler.touchEndEvent),++this._tapCount,this._tapTimeoutId&&this._tapCount>1){const{manhattanDistance:t}=this._touchMouseMoveWithDownInfo(ee(i),this._tapPosition);t<30&&!this._cancelTap&&this._processTouchEvent(s,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processTouchEvent(s,this._handler.tapEvent),this._handler.tapEvent&&se(t));0===this._tapCount&&se(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,se(t))}_mouseUpHandler(t){if(0!==t.button)return;const i=this._makeCompatEvent(t);if(this._mouseMoveStartPosition=null,this._mousePressed=!1,this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),Ns()){this._target.ownerDocument.documentElement.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processMouseEvent(i,this._handler.mouseUpEvent),++this._clickCount,this._clickTimeoutId&&this._clickCount>1){const{manhattanDistance:s}=this._touchMouseMoveWithDownInfo(ee(t),this._clickPosition);s<5&&!this._cancelClick&&this._processMouseEvent(i,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processMouseEvent(i,this._handler.mouseClickEvent)}_clearLongTapTimeout(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)}_touchStartHandler(t){if(null!==this._activeTouchId)return;const i=t.changedTouches[0];this._activeTouchId=i.identifier,this._lastTouchEventTimeStamp=he(t);const s=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartPosition=ee(i),this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);{const i=this._touchMoveHandler.bind(this),e=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=()=>{s.removeEventListener("touchmove",i),s.removeEventListener("touchend",e)},s.addEventListener("touchmove",i,{passive:!1}),s.addEventListener("touchend",e,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),240)}const e=this._makeCompatEvent(t,i);this._processTouchEvent(e,this._handler.touchStartEvent),this._tapTimeoutId||(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapPosition=ee(i))}_mouseDownHandler(t){if(0!==t.button)return;const i=this._target.ownerDocument.documentElement;Ns()&&i.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartPosition=ee(t),this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);{const t=this._mouseMoveWithDownHandler.bind(this),s=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=()=>{i.removeEventListener("mousemove",t),i.removeEventListener("mouseup",s)},i.addEventListener("mousemove",t),i.addEventListener("mouseup",s)}if(this._mousePressed=!0,this._firesTouchEvents(t))return;const s=this._makeCompatEvent(t);this._processMouseEvent(s,this._handler.mouseDownEvent),this._clickTimeoutId||(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickPosition=ee(t))}_init(){this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));{const t=this._target.ownerDocument,i=t=>{this._handler.mouseDownOutsideEvent&&(t.composed&&this._target.contains(t.composedPath()[0])||t.target&&this._target.contains(t.target)||this._handler.mouseDownOutsideEvent())};this._unsubscribeOutsideTouchEvents=()=>{t.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=()=>{t.removeEventListener("mousedown",i)},t.addEventListener("mousedown",i),t.addEventListener("touchstart",i,{passive:!0})}Vs()&&(this._unsubscribeMobileSafariEvents=()=>{this._target.removeEventListener("dblclick",this._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),Qs(this._target),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",(()=>{}),{passive:!1})}_initPinch(){void 0===this._handler.pinchStartEvent&&void 0===this._handler.pinchEvent&&void 0===this._handler.pinchEndEvent||(this._target.addEventListener("touchstart",(t=>this._checkPinchState(t.touches)),{passive:!0}),this._target.addEventListener("touchmove",(t=>{if(2===t.touches.length&&null!==this._startPinchMiddlePoint&&void 0!==this._handler.pinchEvent){const i=ie(t.touches[0],t.touches[1])/this._startPinchDistance;this._handler.pinchEvent(this._startPinchMiddlePoint,i),se(t)}}),{passive:!1}),this._target.addEventListener("touchend",(t=>{this._checkPinchState(t.touches)})))}_checkPinchState(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)}_startPinch(t){const i=this._target.getBoundingClientRect()||{left:0,top:0};this._startPinchMiddlePoint={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=ie(t[0],t[1]),void 0!==this._handler.pinchStartEvent&&this._handler.pinchStartEvent(),this._clearLongTapTimeout()}_stopPinch(){null!==this._startPinchMiddlePoint&&(this._startPinchMiddlePoint=null,void 0!==this._handler.pinchEndEvent&&this._handler.pinchEndEvent())}_mouseLeaveHandler(t){if(this._unsubscribeMousemove&&this._unsubscribeMousemove(),this._firesTouchEvents(t))return;if(!this._acceptMouseLeave)return;const i=this._makeCompatEvent(t);this._processMouseEvent(i,this._handler.mouseLeaveEvent),this._acceptMouseLeave=!Vs()}_longTapHandler(t){const i=ne(t.touches,r(this._activeTouchId));if(null===i)return;const s=this._makeCompatEvent(t,i);this._processTouchEvent(s,this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0}_firesTouchEvents(t){return t.sourceCapabilities&&void 0!==t.sourceCapabilities.firesTouchEvents?t.sourceCapabilities.firesTouchEvents:he(t){"touchstart"!==t.type&&se(t)}}}}function ie(t,i){const s=t.clientX-i.clientX,e=t.clientY-i.clientY;return Math.sqrt(s*s+e*e)}function se(t){t.cancelable&&t.preventDefault()}function ee(t){return{x:t.pageX,y:t.pageY}}function he(t){return t.timeStamp||performance.now()}function ne(t,i){for(let s=0;s{this._isSettingSize||this._pane.chart().model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._pane.chart().model().lightUpdate()},this._pane=t,this._options=i,this._layoutOptions=i.layout,this._rendererOptionsProvider=s,this._isLeft="left"===e,this._cell=document.createElement("div"),this._cell.style.height="100%",this._cell.style.overflow="hidden",this._cell.style.width="25px",this._cell.style.left="0",this._cell.style.position="relative",this._canvasBinding=Js(this._cell,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const h=this._canvasBinding.canvasElement;h.style.position="absolute",h.style.zIndex="1",h.style.left="0",h.style.top="0",this._topCanvasBinding=Js(this._cell,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const n=this._topCanvasBinding.canvasElement;n.style.position="absolute",n.style.zIndex="2",n.style.left="0",n.style.top="0";const r={mouseDownEvent:this._mouseDownEvent.bind(this),touchStartEvent:this._mouseDownEvent.bind(this),pressedMouseMoveEvent:this._pressedMouseMoveEvent.bind(this),touchMoveEvent:this._pressedMouseMoveEvent.bind(this),mouseDownOutsideEvent:this._mouseDownOutsideEvent.bind(this),mouseUpEvent:this._mouseUpEvent.bind(this),touchEndEvent:this._mouseUpEvent.bind(this),mouseDoubleClickEvent:this._mouseDoubleClickEvent.bind(this),doubleTapEvent:this._mouseDoubleClickEvent.bind(this),mouseEnterEvent:this._mouseEnterEvent.bind(this),mouseLeaveEvent:this._mouseLeaveEvent.bind(this)};this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,r,{treatVertTouchDragAsPageScroll:()=>!1,treatHorzTouchDragAsPageScroll:()=>!0})}destroy(){this._mouseEventHandler.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose(),null!==this._priceScale&&this._priceScale.onMarksChanged().unsubscribeAll(this),this._priceScale=null}getElement(){return this._cell}fontSize(){return this._layoutOptions.fontSize}rendererOptions(){const t=this._rendererOptionsProvider.options();return this._font!==t.font&&(this._widthCache.reset(),this._font=t.font),t}optimalWidth(){if(null===this._priceScale)return 0;let t=0;const i=this.rendererOptions(),s=r(this._canvasBinding.canvasElement.getContext("2d"));s.save();const e=this._priceScale.marks();s.font=this._baseFont(),e.length>0&&(t=Math.max(this._widthCache.measureText(s,e[0].label),this._widthCache.measureText(s,e[e.length-1].label)));const h=this._backLabels();for(let i=h.length;i--;){const e=this._widthCache.measureText(s,h[i].text());e>t&&(t=e)}const n=this._priceScale.firstValue();if(null!==n&&null!==this._size){const i=this._priceScale.coordinateToPrice(1,n),e=this._priceScale.coordinateToPrice(this._size.height-2,n);t=Math.max(t,this._widthCache.measureText(s,this._priceScale.formatPrice(Math.floor(Math.min(i,e))+.11111111111111,n)),this._widthCache.measureText(s,this._priceScale.formatPrice(Math.ceil(Math.max(i,e))-.11111111111111,n)))}s.restore();const o=t||34;return Fs(Math.ceil(i.borderSize+i.tickLength+i.paddingInner+i.paddingOuter+5+o))}setSize(t){null!==this._size&&As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`)}getWidth(){return r(this._size).width}setPriceScale(t){this._priceScale!==t&&(null!==this._priceScale&&this._priceScale.onMarksChanged().unsubscribeAll(this),this._priceScale=t,t.onMarksChanged().subscribe(this._onMarksChanged.bind(this),this))}priceScale(){return this._priceScale}reset(){const t=this._pane.state();this._pane.chart().model().resetPriceScale(t,r(this.priceScale()))}paint(t){if(null===this._size)return;if(1!==t){this._alignLabels(),this._canvasBinding.applySuggestedBitmapSize();const t=zs(this._canvasBinding);null!==t&&(t.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)})),this._drawTickMarks(t),this._drawBackLabels(t))}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawCrosshairLabel(i))}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}update(){var t;null===(t=this._priceScale)||void 0===t||t.marks()}_mouseDownEvent(t){if(null===this._priceScale||this._priceScale.isEmpty()||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state();this._mousedown=!0,i.startScalePrice(s,this._priceScale,t.localY)}_pressedMouseMoveEvent(t){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state(),e=this._priceScale;i.scalePriceTo(s,e,t.localY)}_mouseDownOutsideEvent(){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const t=this._pane.chart().model(),i=this._pane.state(),s=this._priceScale;this._mousedown&&(this._mousedown=!1,t.endScalePrice(i,s))}_mouseUpEvent(t){if(null===this._priceScale||!this._options.handleScale.axisPressedMouseMove.price)return;const i=this._pane.chart().model(),s=this._pane.state();this._mousedown=!1,i.endScalePrice(s,this._priceScale)}_mouseDoubleClickEvent(t){this._options.handleScale.axisDoubleClickReset.price&&this.reset()}_mouseEnterEvent(t){if(null===this._priceScale)return;!this._pane.chart().model().options().handleScale.axisPressedMouseMove.price||this._priceScale.isPercentage()||this._priceScale.isIndexedTo100()||this._setCursor(1)}_mouseLeaveEvent(t){this._setCursor(0)}_backLabels(){const t=[],i=null===this._priceScale?void 0:this._priceScale;return(s=>{for(let e=0;e{t.fillStyle=s.borderColor;const o=Math.max(1,Math.floor(r)),l=Math.floor(.5*r),a=Math.round(e.tickLength*n);t.beginPath();for(const s of i)t.rect(Math.floor(h*n),Math.round(s.coord*r)-l,a,o);t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{var n;t.font=this._baseFont(),t.fillStyle=null!==(n=s.textColor)&&void 0!==n?n:this._layoutOptions.textColor,t.textAlign=this._isLeft?"right":"left",t.textBaseline="middle";const r=this._isLeft?Math.round(h-e.paddingInner):Math.round(h+e.tickLength+e.paddingInner),o=i.map((i=>this._widthCache.yMidCorrection(t,i.label)));for(let s=i.length;s--;){const e=i[s];t.fillText(e.label,r,e.coord+o[s])}}))}_alignLabels(){if(null===this._size||null===this._priceScale)return;let t=this._size.height/2;const i=[],s=this._priceScale.orderedSources().slice(),e=this._pane.state(),h=this.rendererOptions();this._priceScale===e.defaultVisiblePriceScale()&&this._pane.state().orderedSources().forEach((t=>{e.isOverlay(t)&&s.push(t)}));const n=this._priceScale.dataSources()[0],r=this._priceScale;s.forEach((s=>{const h=s.priceAxisViews(e,r);h.forEach((t=>{t.setFixedCoordinate(null),t.isVisible()&&i.push(t)})),n===s&&h.length>0&&(t=h[0].coordinate())})),i.forEach((t=>t.setFixedCoordinate(t.coordinate())));this._priceScale.options().alignLabels&&this._fixLabelOverlap(i,h,t)}_fixLabelOverlap(t,i,s){if(null===this._size)return;const e=t.filter((t=>t.coordinate()<=s)),h=t.filter((t=>t.coordinate()>s));e.sort(((t,i)=>i.coordinate()-t.coordinate())),e.length&&h.length&&h.push(e[0]),h.sort(((t,i)=>t.coordinate()-i.coordinate()));for(const s of t){const t=Math.floor(s.height(i)/2),e=s.coordinate();e>-t&&ethis._size.height-t&&eo-n&&s.setFixedCoordinate(o-n)}for(let t=1;t{if(i.isAxisLabelVisible()){i.renderer(r(this._priceScale)).draw(t,s,this._widthCache,e)}}))}_drawCrosshairLabel(t){if(null===this._size||null===this._priceScale)return;const i=this._pane.chart().model(),s=[],e=this._pane.state(),h=i.crosshairSource().priceAxisViews(e,this._priceScale);h.length&&s.push(h);const n=this.rendererOptions(),o=this._isLeft?"right":"left";s.forEach((i=>{i.forEach((i=>{i.renderer(r(this._priceScale)).draw(t,n,this._widthCache,o)}))}))}_setCursor(t){this._cell.style.cursor=1===t?"ns-resize":"default"}_onMarksChanged(){const t=this.optimalWidth();this._prevOptimalWidth{this._isSettingSize||null===this._state||this._model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||null===this._state||this._model().lightUpdate()},this._chart=t,this._state=i,this._state.onDestroyed().subscribe(this._onStateDestroyed.bind(this),this,!0),this._paneCell=document.createElement("td"),this._paneCell.style.padding="0",this._paneCell.style.position="relative";const s=document.createElement("div");s.style.width="100%",s.style.height="100%",s.style.position="relative",s.style.overflow="hidden",this._leftAxisCell=document.createElement("td"),this._leftAxisCell.style.padding="0",this._rightAxisCell=document.createElement("td"),this._rightAxisCell.style.padding="0",this._paneCell.appendChild(s),this._canvasBinding=Js(s,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const e=this._canvasBinding.canvasElement;e.style.position="absolute",e.style.zIndex="1",e.style.left="0",e.style.top="0",this._topCanvasBinding=Js(s,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const h=this._topCanvasBinding.canvasElement;h.style.position="absolute",h.style.zIndex="2",h.style.left="0",h.style.top="0",this._rowElement=document.createElement("tr"),this._rowElement.appendChild(this._leftAxisCell),this._rowElement.appendChild(this._paneCell),this._rowElement.appendChild(this._rightAxisCell),this.updatePriceAxisWidgetsStates(),this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,this,{treatVertTouchDragAsPageScroll:()=>null===this._startTrackPoint&&!this._chart.options().handleScroll.vertTouchDrag,treatHorzTouchDragAsPageScroll:()=>null===this._startTrackPoint&&!this._chart.options().handleScroll.horzTouchDrag})}destroy(){null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.destroy(),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose(),null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._mouseEventHandler.destroy()}state(){return r(this._state)}setState(t){null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._state=t,null!==this._state&&this._state.onDestroyed().subscribe(de.prototype._onStateDestroyed.bind(this),this,!0),this.updatePriceAxisWidgetsStates()}chart(){return this._chart}getElement(){return this._rowElement}updatePriceAxisWidgetsStates(){if(null!==this._state&&(this._recreatePriceAxisWidgets(),0!==this._model().serieses().length)){if(null!==this._leftPriceAxisWidget){const t=this._state.leftPriceScale();this._leftPriceAxisWidget.setPriceScale(r(t))}if(null!==this._rightPriceAxisWidget){const t=this._state.rightPriceScale();this._rightPriceAxisWidget.setPriceScale(r(t))}}}updatePriceAxisWidgets(){null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.update(),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.update()}stretchFactor(){return null!==this._state?this._state.stretchFactor():0}setStretchFactor(t){this._state&&this._state.setStretchFactor(t)}mouseEnterEvent(t){if(!this._state)return;this._onMouseEvent();const i=t.localX,s=t.localY;this._setCrosshairPosition(i,s,t)}mouseDownEvent(t){this._onMouseEvent(),this._mouseTouchDownEvent(),this._setCrosshairPosition(t.localX,t.localY,t)}mouseMoveEvent(t){if(!this._state)return;this._onMouseEvent();const i=t.localX,s=t.localY;this._setCrosshairPosition(i,s,t);const e=this.hitTest(i,s);this._model().setHoveredSource(e&&{source:e.source,object:e.object})}mouseClickEvent(t){null!==this._state&&(this._onMouseEvent(),this._fireClickedDelegate(t))}pressedMouseMoveEvent(t){this._onMouseEvent(),this._pressedMouseTouchMoveEvent(t),this._setCrosshairPosition(t.localX,t.localY,t)}mouseUpEvent(t){null!==this._state&&(this._onMouseEvent(),this._longTap=!1,this._endScroll(t))}tapEvent(t){null!==this._state&&this._fireClickedDelegate(t)}longTapEvent(t){if(this._longTap=!0,null===this._startTrackPoint){const i={x:t.localX,y:t.localY};this._startTrackingMode(i,i,t)}}mouseLeaveEvent(t){null!==this._state&&(this._onMouseEvent(),this._state.model().setHoveredSource(null),this._clearCrosshairPosition())}clicked(){return this._clicked}pinchStartEvent(){this._prevPinchScale=1,this._model().stopTimeScaleAnimation()}pinchEvent(t,i){if(!this._chart.options().handleScale.pinch)return;const s=5*(i-this._prevPinchScale);this._prevPinchScale=i,this._model().zoomTime(t.x,s)}touchStartEvent(t){if(this._longTap=!1,this._exitTrackingModeOnNextTry=null!==this._startTrackPoint,this._mouseTouchDownEvent(),null!==this._startTrackPoint){const i=this._model().crosshairSource();this._initCrosshairPosition={x:i.appliedX(),y:i.appliedY()},this._startTrackPoint={x:t.localX,y:t.localY}}}touchMoveEvent(t){if(null===this._state)return;const i=t.localX,s=t.localY;if(null===this._startTrackPoint)this._pressedMouseTouchMoveEvent(t);else{this._exitTrackingModeOnNextTry=!1;const e=r(this._initCrosshairPosition),h=e.x+(i-this._startTrackPoint.x),n=e.y+(s-this._startTrackPoint.y);this._setCrosshairPosition(h,n,t)}}touchEndEvent(t){0===this.chart().options().trackingMode.exitMode&&(this._exitTrackingModeOnNextTry=!0),this._tryExitTrackingMode(),this._endScroll(t)}hitTest(t,i){const s=this._state;if(null===s)return null;const e=s.orderedSources();for(const h of e){const e=this._hitTestPaneView(h.paneViews(s),t,i);if(null!==e)return{source:h,view:e.view,object:e.object}}return null}setPriceAxisSize(t,i){r("left"===i?this._leftPriceAxisWidget:this._rightPriceAxisWidget).setSize(Ds({width:t,height:this._size.height}))}getSize(){return this._size}setSize(t){As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._paneCell.style.width=t.width+"px",this._paneCell.style.height=t.height+"px")}recalculatePriceScales(){const t=r(this._state);t.recalculatePriceScale(t.leftPriceScale()),t.recalculatePriceScale(t.rightPriceScale());for(const i of t.dataSources())if(t.isOverlay(i)){const s=i.priceScale();null!==s&&t.recalculatePriceScale(s),i.updateAllViews()}}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}paint(t){if(0===t)return;if(null===this._state)return;if(t>1&&this.recalculatePriceScales(),null!==this._leftPriceAxisWidget&&this._leftPriceAxisWidget.paint(t),null!==this._rightPriceAxisWidget&&this._rightPriceAxisWidget.paint(t),1!==t){this._canvasBinding.applySuggestedBitmapSize();const t=zs(this._canvasBinding);null!==t&&(t.useBitmapCoordinateSpace((t=>{this._drawBackground(t)})),this._state&&(this._drawGrid(t),this._drawWatermark(t),this._drawSources(t,ae),this._drawSources(t,ue)))}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawSources(i,ce),this._drawCrosshair(i))}leftPriceAxisWidget(){return this._leftPriceAxisWidget}rightPriceAxisWidget(){return this._rightPriceAxisWidget}setCrosshair(t,i,s){if(this._state)if(s){const s=t,e=i;this._setCrosshairPositionNoFire(s,e)}else this._state.model().setHoveredSource(null),this._clearCrosshairPosition()}_onStateDestroyed(){null!==this._state&&this._state.onDestroyed().unsubscribeAll(this),this._state=null}_fireClickedDelegate(t){const i=t.localX,s=t.localY;this._clicked.hasListeners()&&this._clicked.fire(this._model().timeScale().coordinateToIndex(i),{x:i,y:s},t)}_drawBackground({context:t,bitmapSize:i}){const{width:s,height:e}=i,h=this._model(),n=h.backgroundTopColor(),r=h.backgroundBottomColor();n===r?F(t,0,0,s,e,r):$(t,0,0,s,e,n,r)}_drawGrid(t){const i=r(this._state).grid().paneView().renderer();null!==i&&i.draw(t,!1)}_drawWatermark(t){const i=this._model().watermarkSource();this._drawSourceImpl(t,ae,oe,i),this._drawSourceImpl(t,ae,le,i)}_drawCrosshair(t){this._drawSourceImpl(t,ae,le,this._model().crosshairSource())}_drawSources(t,i){const s=r(this._state).orderedSources();for(const e of s)this._drawSourceImpl(t,i,oe,e);for(const e of s)this._drawSourceImpl(t,i,le,e)}_drawSourceImpl(t,i,s,e){const h=r(this._state),n=i(e,h),o=h.model().hoveredSource(),l=null!==o&&o.source===e,a=null!==o&&l&&void 0!==o.object?o.object.hitTestData:void 0;for(const i of n){const e=i.renderer();null!==e&&s(e,t,l,a)}}_hitTestPaneView(t,i,s){for(const e of t){const t=e.renderer();if(null!==t&&t.hitTest){const h=t.hitTest(i,s);if(null!==h)return{view:e,object:h}}}return null}_recreatePriceAxisWidgets(){if(null===this._state)return;const t=this._chart,i=this._state.leftPriceScale().options().visible,s=this._state.rightPriceScale().options().visible;i||null===this._leftPriceAxisWidget||(this._leftAxisCell.removeChild(this._leftPriceAxisWidget.getElement()),this._leftPriceAxisWidget.destroy(),this._leftPriceAxisWidget=null),s||null===this._rightPriceAxisWidget||(this._rightAxisCell.removeChild(this._rightPriceAxisWidget.getElement()),this._rightPriceAxisWidget.destroy(),this._rightPriceAxisWidget=null);const e=t.model().rendererOptionsProvider();i&&null===this._leftPriceAxisWidget&&(this._leftPriceAxisWidget=new re(this,t.options(),e,"left"),this._leftAxisCell.appendChild(this._leftPriceAxisWidget.getElement())),s&&null===this._rightPriceAxisWidget&&(this._rightPriceAxisWidget=new re(this,t.options(),e,"right"),this._rightAxisCell.appendChild(this._rightPriceAxisWidget.getElement()))}_preventScroll(t){return t.isTouch&&this._longTap||null!==this._startTrackPoint}_correctXCoord(t){return Math.max(0,Math.min(t,this._size.width-1))}_correctYCoord(t){return Math.max(0,Math.min(t,this._size.height-1))}_setCrosshairPosition(t,i,s){this._model().setAndSaveCurrentPosition(this._correctXCoord(t),this._correctYCoord(i),s,r(this._state))}_setCrosshairPositionNoFire(t,i){this._model().setAndSaveCurrentPositionFire(this._correctXCoord(t),this._correctYCoord(i),!1,r(this._state))}_clearCrosshairPosition(){this._model().clearCurrentPosition()}_tryExitTrackingMode(){this._exitTrackingModeOnNextTry&&(this._startTrackPoint=null,this._clearCrosshairPosition())}_startTrackingMode(t,i,s){this._startTrackPoint=t,this._exitTrackingModeOnNextTry=!1,this._setCrosshairPosition(i.x,i.y,s);const e=this._model().crosshairSource();this._initCrosshairPosition={x:e.appliedX(),y:e.appliedY()}}_model(){return this._chart.model()}_endScroll(t){if(!this._isScrolling)return;const i=this._model(),s=this.state();if(i.endScrollPrice(s,s.defaultPriceScale()),this._startScrollingPos=null,this._isScrolling=!1,i.endScrollTime(),null!==this._scrollXAnimation){const t=performance.now(),s=i.timeScale();this._scrollXAnimation.start(s.rightOffset(),t),this._scrollXAnimation.finished(t)||i.setTimeScaleAnimation(this._scrollXAnimation)}}_onMouseEvent(){this._startTrackPoint=null}_mouseTouchDownEvent(){if(!this._state)return;if(this._model().stopTimeScaleAnimation(),document.activeElement!==document.body&&document.activeElement!==document.documentElement)r(document.activeElement).blur();else{const t=document.getSelection();null!==t&&t.removeAllRanges()}!this._state.defaultPriceScale().isEmpty()&&this._model().timeScale().isEmpty()}_pressedMouseTouchMoveEvent(t){if(null===this._state)return;const i=this._model(),s=i.timeScale();if(s.isEmpty())return;const e=this._chart.options(),h=e.handleScroll,n=e.kineticScroll;if((!h.pressedMouseMove||t.isTouch)&&(!h.horzTouchDrag&&!h.vertTouchDrag||!t.isTouch))return;const r=this._state.defaultPriceScale(),o=performance.now();if(null!==this._startScrollingPos||this._preventScroll(t)||(this._startScrollingPos={x:t.clientX,y:t.clientY,timestamp:o,localX:t.localX,localY:t.localY}),null!==this._startScrollingPos&&!this._isScrolling&&(this._startScrollingPos.x!==t.clientX||this._startScrollingPos.y!==t.clientY)){if(t.isTouch&&n.touch||!t.isTouch&&n.mouse){const t=s.barSpacing();this._scrollXAnimation=new Gs(.2/t,7/t,.997,15/t),this._scrollXAnimation.addPosition(s.rightOffset(),this._startScrollingPos.timestamp)}else this._scrollXAnimation=null;r.isEmpty()||i.startScrollPrice(this._state,r,t.localY),i.startScrollTime(t.localX),this._isScrolling=!0}this._isScrolling&&(r.isEmpty()||i.scrollPriceTo(this._state,r,t.localY),i.scrollTimeTo(t.localX),null!==this._scrollXAnimation&&this._scrollXAnimation.addPosition(s.rightOffset(),o))}}class fe{constructor(t,i,s,e,h){this._invalidated=!0,this._size=Ds({width:0,height:0}),this._canvasSuggestedBitmapSizeChangedHandler=()=>this.paint(3),this._isLeft="left"===t,this._rendererOptionsProvider=s.rendererOptionsProvider,this._options=i,this._borderVisible=e,this._bottomColor=h,this._cell=document.createElement("div"),this._cell.style.width="25px",this._cell.style.height="100%",this._cell.style.overflow="hidden",this._canvasBinding=Js(this._cell,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler)}destroy(){this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose()}getElement(){return this._cell}getSize(){return this._size}setSize(t){As(this._size,t)||(this._size=t,this._canvasBinding.resizeCanvasElement(t),this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`,this._invalidated=!0)}paint(t){if(t<3&&!this._invalidated)return;if(0===this._size.width||0===this._size.height)return;this._invalidated=!1,this._canvasBinding.applySuggestedBitmapSize();const i=zs(this._canvasBinding);null!==i&&i.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)}))}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}_drawBorder({context:t,bitmapSize:i,horizontalPixelRatio:s,verticalPixelRatio:e}){if(!this._borderVisible())return;t.fillStyle=this._options.timeScale.borderColor;const h=Math.floor(this._rendererOptionsProvider.options().borderSize*s),n=Math.floor(this._rendererOptionsProvider.options().borderSize*e),r=this._isLeft?i.width-h:0;t.fillRect(r,0,h,n)}_drawBackground({context:t,bitmapSize:i}){F(t,0,0,i.width,i.height,this._bottomColor())}}function pe(t,i){return t.weight>i.weight?t:i}!function(t){t[t.BorderSize=1]="BorderSize",t[t.TickLength=5]="TickLength"}(Ys||(Ys={})),function(t){t[t.Default=0]="Default",t[t.EwResize=1]="EwResize"}(Xs||(Xs={}));class me{constructor(t){this._leftStub=null,this._rightStub=null,this._rendererOptions=null,this._mouseDown=!1,this._size=Ds({width:0,height:0}),this._sizeChanged=new b,this._widthCache=new Yt(5),this._isSettingSize=!1,this._canvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._chart.model().lightUpdate()},this._topCanvasSuggestedBitmapSizeChangedHandler=()=>{this._isSettingSize||this._chart.model().lightUpdate()},this._chart=t,this._options=t.options().layout,this._element=document.createElement("tr"),this._leftStubCell=document.createElement("td"),this._leftStubCell.style.padding="0",this._rightStubCell=document.createElement("td"),this._rightStubCell.style.padding="0",this._cell=document.createElement("td"),this._cell.style.height="25px",this._cell.style.padding="0",this._dv=document.createElement("div"),this._dv.style.width="100%",this._dv.style.height="100%",this._dv.style.position="relative",this._dv.style.overflow="hidden",this._cell.appendChild(this._dv),this._canvasBinding=Js(this._dv,Ds({width:16,height:16})),this._canvasBinding.subscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler);const i=this._canvasBinding.canvasElement;i.style.position="absolute",i.style.zIndex="1",i.style.left="0",i.style.top="0",this._topCanvasBinding=Js(this._dv,Ds({width:16,height:16})),this._topCanvasBinding.subscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler);const s=this._topCanvasBinding.canvasElement;s.style.position="absolute",s.style.zIndex="2",s.style.left="0",s.style.top="0",this._element.appendChild(this._leftStubCell),this._element.appendChild(this._cell),this._element.appendChild(this._rightStubCell),this._recreateStubs(),this._chart.model().priceScalesOptionsChanged().subscribe(this._recreateStubs.bind(this),this),this._mouseEventHandler=new te(this._topCanvasBinding.canvasElement,this,{treatVertTouchDragAsPageScroll:()=>!0,treatHorzTouchDragAsPageScroll:()=>!1})}destroy(){this._mouseEventHandler.destroy(),null!==this._leftStub&&this._leftStub.destroy(),null!==this._rightStub&&this._rightStub.destroy(),this._topCanvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._topCanvasSuggestedBitmapSizeChangedHandler),this._topCanvasBinding.dispose(),this._canvasBinding.unsubscribeSuggestedBitmapSizeChanged(this._canvasSuggestedBitmapSizeChangedHandler),this._canvasBinding.dispose()}getElement(){return this._element}leftStub(){return this._leftStub}rightStub(){return this._rightStub}mouseDownEvent(t){if(this._mouseDown)return;this._mouseDown=!0;const i=this._chart.model();!i.timeScale().isEmpty()&&this._chart.options().handleScale.axisPressedMouseMove.time&&i.startScaleTime(t.localX)}touchStartEvent(t){this.mouseDownEvent(t)}mouseDownOutsideEvent(){const t=this._chart.model();!t.timeScale().isEmpty()&&this._mouseDown&&(this._mouseDown=!1,this._chart.options().handleScale.axisPressedMouseMove.time&&t.endScaleTime())}pressedMouseMoveEvent(t){const i=this._chart.model();!i.timeScale().isEmpty()&&this._chart.options().handleScale.axisPressedMouseMove.time&&i.scaleTimeTo(t.localX)}touchMoveEvent(t){this.pressedMouseMoveEvent(t)}mouseUpEvent(){this._mouseDown=!1;const t=this._chart.model();t.timeScale().isEmpty()&&!this._chart.options().handleScale.axisPressedMouseMove.time||t.endScaleTime()}touchEndEvent(){this.mouseUpEvent()}mouseDoubleClickEvent(){this._chart.options().handleScale.axisDoubleClickReset.time&&this._chart.model().resetTimeScale()}doubleTapEvent(){this.mouseDoubleClickEvent()}mouseEnterEvent(){this._chart.model().options().handleScale.axisPressedMouseMove.time&&this._setCursor(1)}mouseLeaveEvent(){this._setCursor(0)}getSize(){return this._size}sizeChanged(){return this._sizeChanged}setSizes(t,i,s){As(this._size,t)||(this._size=t,this._isSettingSize=!0,this._canvasBinding.resizeCanvasElement(t),this._topCanvasBinding.resizeCanvasElement(t),this._isSettingSize=!1,this._cell.style.width=`${t.width}px`,this._cell.style.height=`${t.height}px`,this._sizeChanged.fire(t)),null!==this._leftStub&&this._leftStub.setSize(Ds({width:i,height:t.height})),null!==this._rightStub&&this._rightStub.setSize(Ds({width:s,height:t.height}))}optimalHeight(){const t=this._getRendererOptions();return Math.ceil(t.borderSize+t.tickLength+t.fontSize+t.paddingTop+t.paddingBottom+t.labelBottomOffset)}update(){this._chart.model().timeScale().marks()}getBitmapSize(){return this._canvasBinding.bitmapSize}drawBitmap(t,i,s){const e=this.getBitmapSize();e.width>0&&e.height>0&&t.drawImage(this._canvasBinding.canvasElement,i,s)}paint(t){if(0===t)return;if(1!==t){this._canvasBinding.applySuggestedBitmapSize();const i=zs(this._canvasBinding);null!==i&&(i.useBitmapCoordinateSpace((t=>{this._drawBackground(t),this._drawBorder(t)})),this._drawTickMarks(i)),null!==this._leftStub&&this._leftStub.paint(t),null!==this._rightStub&&this._rightStub.paint(t)}this._topCanvasBinding.applySuggestedBitmapSize();const i=zs(this._topCanvasBinding);null!==i&&(i.useBitmapCoordinateSpace((({context:t,bitmapSize:i})=>{t.clearRect(0,0,i.width,i.height)})),this._drawLabels([this._chart.model().crosshairSource()],i))}_drawBackground({context:t,bitmapSize:i}){F(t,0,0,i.width,i.height,this._chart.model().backgroundBottomColor())}_drawBorder({context:t,bitmapSize:i,verticalPixelRatio:s}){if(this._chart.options().timeScale.borderVisible){t.fillStyle=this._lineColor();const e=Math.max(1,Math.floor(this._getRendererOptions().borderSize*s));t.fillRect(0,0,i.width,e)}}_drawTickMarks(t){const i=this._chart.model().timeScale(),s=i.marks();if(!s||0===s.length)return;let e=s.reduce(pe,s[0]).weight;e>30&&e<50&&(e=30);const h=this._getRendererOptions(),n=i.options();n.borderVisible&&n.ticksVisible&&t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:i,verticalPixelRatio:e})=>{t.strokeStyle=this._lineColor(),t.fillStyle=this._lineColor();const n=Math.max(1,Math.floor(i)),r=Math.floor(.5*i);t.beginPath();const o=Math.round(h.tickLength*e);for(let e=s.length;e--;){const h=Math.round(s[e].coord*i);t.rect(h-r,0,n,o)}t.fill()})),t.useMediaCoordinateSpace((({context:t})=>{const i=h.borderSize+h.tickLength+h.paddingTop+h.fontSize/2;t.textAlign="center",t.textBaseline="middle",t.fillStyle=this._textColor(),t.font=this._baseFont();for(const h of s)if(h.weight=e){const s=h.needAlignCoordinate?this._alignTickMarkLabelCoordinate(t,h.coord,h.label):h.coord;t.fillText(h.label,s,i)}}))}_alignTickMarkLabelCoordinate(t,i,s){const e=this._widthCache.measureText(t,s),h=e/2,n=Math.floor(i-h)+.5;return n<0?i+=Math.abs(0-n):n+e>this._size.width&&(i-=Math.abs(this._size.width-(n+e))),i}_drawLabels(t,i){const s=this._getRendererOptions();for(const e of t)for(const t of e.timeAxisViews())t.renderer().draw(i,s)}_lineColor(){return this._chart.options().timeScale.borderColor}_textColor(){return this._options.textColor}_fontSize(){return this._options.fontSize}_baseFont(){return T(this._fontSize(),this._options.fontFamily)}_baseBoldFont(){return T(this._fontSize(),this._options.fontFamily,"bold")}_getRendererOptions(){null===this._rendererOptions&&(this._rendererOptions={borderSize:1,baselineOffset:NaN,paddingTop:NaN,paddingBottom:NaN,paddingHorizontal:NaN,tickLength:5,fontSize:NaN,font:"",widthCache:new Yt,labelBottomOffset:0});const t=this._rendererOptions,i=this._baseFont();if(t.font!==i){const s=this._fontSize();t.fontSize=s,t.font=i,t.paddingTop=3*s/12,t.paddingBottom=3*s/12,t.paddingHorizontal=9*s/12,t.baselineOffset=0,t.labelBottomOffset=4*s/12,t.widthCache.reset()}return this._rendererOptions}_setCursor(t){this._cell.style.cursor=1===t?"ew-resize":"default"}_recreateStubs(){const t=this._chart.model(),i=t.options();i.leftPriceScale.visible||null===this._leftStub||(this._leftStubCell.removeChild(this._leftStub.getElement()),this._leftStub.destroy(),this._leftStub=null),i.rightPriceScale.visible||null===this._rightStub||(this._rightStubCell.removeChild(this._rightStub.getElement()),this._rightStub.destroy(),this._rightStub=null);const s={rendererOptionsProvider:this._chart.model().rendererOptionsProvider()},e=()=>i.leftPriceScale.borderVisible&&t.timeScale().options().borderVisible,h=()=>t.backgroundBottomColor();i.leftPriceScale.visible&&null===this._leftStub&&(this._leftStub=new fe("left",i,s,e,h),this._leftStubCell.appendChild(this._leftStub.getElement())),i.rightPriceScale.visible&&null===this._rightStub&&(this._rightStub=new fe("right",i,s,e,h),this._rightStubCell.appendChild(this._rightStub.getElement()))}}const ve=!!Is&&!!navigator.userAgentData&&navigator.userAgentData.brands.some((t=>t.brand.includes("Chromium")))&&!!Is&&((null===(be=null===navigator||void 0===navigator?void 0:navigator.userAgentData)||void 0===be?void 0:be.platform)?"Windows"===navigator.userAgentData.platform:navigator.userAgent.toLowerCase().indexOf("win")>=0);var be;class ge{constructor(t,i){var s;this._paneWidgets=[],this._drawRafId=0,this._height=0,this._width=0,this._leftPriceAxisWidth=0,this._rightPriceAxisWidth=0,this._invalidateMask=null,this._drawPlanned=!1,this._clicked=new b,this._crosshairMoved=new b,this._observer=null,this._container=t,this._options=i,this._element=document.createElement("div"),this._element.classList.add("tv-lightweight-charts"),this._element.style.overflow="hidden",this._element.style.direction="ltr",this._element.style.width="100%",this._element.style.height="100%",(s=this._element).style.userSelect="none",s.style.webkitUserSelect="none",s.style.msUserSelect="none",s.style.MozUserSelect="none",s.style.webkitTapHighlightColor="transparent",this._tableElement=document.createElement("table"),this._tableElement.setAttribute("cellspacing","0"),this._element.appendChild(this._tableElement),this._onWheelBound=this._onMousewheel.bind(this),we(this._options)&&this._setMouseWheelEventListener(!0),this._model=new Ts(this._invalidateHandler.bind(this),this._options),this.model().crosshairMoved().subscribe(this._onPaneWidgetCrosshairMoved.bind(this),this),this._timeAxisWidget=new me(this),this._tableElement.appendChild(this._timeAxisWidget.getElement());const e=i.autoSize&&this._installObserver();let h=this._options.width,n=this._options.height;if(e||0===h||0===n){const i=t.getBoundingClientRect();h=h||i.width,n=n||i.height}this.resize(h,n),this._syncGuiWithModel(),t.appendChild(this._element),this._updateTimeAxisVisibility(),this._model.timeScale().optionsApplied().subscribe(this._model.fullUpdate.bind(this._model),this),this._model.priceScalesOptionsChanged().subscribe(this._model.fullUpdate.bind(this._model),this)}model(){return this._model}options(){return this._options}paneWidgets(){return this._paneWidgets}timeAxisWidget(){return this._timeAxisWidget}destroy(){this._setMouseWheelEventListener(!1),0!==this._drawRafId&&window.cancelAnimationFrame(this._drawRafId),this._model.crosshairMoved().unsubscribeAll(this),this._model.timeScale().optionsApplied().unsubscribeAll(this),this._model.priceScalesOptionsChanged().unsubscribeAll(this),this._model.destroy();for(const t of this._paneWidgets)this._tableElement.removeChild(t.getElement()),t.clicked().unsubscribeAll(this),t.destroy();this._paneWidgets=[],r(this._timeAxisWidget).destroy(),null!==this._element.parentElement&&this._element.parentElement.removeChild(this._element),this._crosshairMoved.destroy(),this._clicked.destroy(),this._uninstallObserver()}resize(t,i,s=!1){if(this._height===i&&this._width===t)return;const e=function(t){const i=Math.floor(t.width),s=Math.floor(t.height);return Ds({width:i-i%2,height:s-s%2})}(Ds({width:t,height:i}));this._height=e.height,this._width=e.width;const h=this._height+"px",n=this._width+"px";r(this._element).style.height=h,r(this._element).style.width=n,this._tableElement.style.height=h,this._tableElement.style.width=n,s?this._drawImpl(ht.full(),performance.now()):this._model.fullUpdate()}paint(t){void 0===t&&(t=ht.full());for(let i=0;i{let e=0;for(let h=0;h{r("left"===i?this._timeAxisWidget.leftStub():this._timeAxisWidget.rightStub()).drawBitmap(r(t),s,e)};if(this._options.timeScale.visible){const i=this._timeAxisWidget.getBitmapSize();if(null!==t){let h=0;this._isLeftAxisVisible()&&(n("left",h,s),h=r(e.leftPriceAxisWidget()).getBitmapSize().width),this._timeAxisWidget.drawBitmap(t,h,s),h+=i.width,this._isRightAxisVisible()&&n("right",h,s)}s+=i.height}return Ds({width:i,height:s})}_adjustSizeImpl(){let t=0,i=0,s=0;for(const e of this._paneWidgets)this._isLeftAxisVisible()&&(i=Math.max(i,r(e.leftPriceAxisWidget()).optimalWidth())),this._isRightAxisVisible()&&(s=Math.max(s,r(e.rightPriceAxisWidget()).optimalWidth())),t+=e.stretchFactor();i=Fs(i),s=Fs(s);const e=this._width,h=this._height,n=Math.max(e-i-s,0),o=this._options.timeScale.visible;let l=o?this._timeAxisWidget.optimalHeight():0;var a;l=(a=l)+a%2;const u=0+l,c=h{t.updatePriceAxisWidgets()})),3===(null===(s=this._invalidateMask)||void 0===s?void 0:s.fullInvalidation())&&(this._invalidateMask.merge(t),this._updateGui(),this._applyMomentaryAutoScale(this._invalidateMask),this._applyTimeScaleInvalidations(this._invalidateMask,i),t=this._invalidateMask,this._invalidateMask=null)),this.paint(t)}_applyTimeScaleInvalidations(t,i){for(const s of t.timeScaleInvalidations())this._applyTimeScaleInvalidation(s,i)}_applyMomentaryAutoScale(t){const i=this._model.panes();for(let s=0;s{if(this._drawPlanned=!1,this._drawRafId=0,null!==this._invalidateMask){const i=this._invalidateMask;this._invalidateMask=null,this._drawImpl(i,t);for(const s of i.timeScaleInvalidations())if(5===s.type&&!s.value.finished(t)){this.model().setTimeScaleAnimation(s.value);break}}})))}_updateGui(){this._syncGuiWithModel()}_syncGuiWithModel(){const t=this._model.panes(),i=t.length,s=this._paneWidgets.length;for(let t=i;t{const s=i.bars().search(t);null!==s&&h.set(i,s)}))}let n;if(null!==t){const i=null===(e=this._model.timeScale().indexToTimeScalePoint(t))||void 0===e?void 0:e.originalTime;void 0!==i&&(n=i)}const r=this.model().hoveredSource(),o=null!==r&&r.source instanceof Bi?r.source:void 0,l=null!==r&&void 0!==r.object?r.object.externalId:void 0;return{time:n,index:null!=t?t:void 0,point:null!=i?i:void 0,hoveredSeries:o,seriesData:h,hoveredObject:l,touchMouseEventData:null!=s?s:void 0}}_onPaneWidgetClicked(t,i,s){this._clicked.fire((()=>this._getMouseEventParamsImpl(t,i,s)))}_onPaneWidgetCrosshairMoved(t,i,s){this._crosshairMoved.fire((()=>this._getMouseEventParamsImpl(t,i,s)))}_updateTimeAxisVisibility(){const t=this._options.timeScale.visible?"":"none";this._timeAxisWidget.getElement().style.display=t}_isLeftAxisVisible(){return this._paneWidgets[0].state().leftPriceScale().options().visible}_isRightAxisVisible(){return this._paneWidgets[0].state().rightPriceScale().options().visible}_installObserver(){return"ResizeObserver"in window&&(this._observer=new ResizeObserver((t=>{const i=t.find((t=>t.target===this._container));i&&this.resize(i.contentRect.width,i.contentRect.height)})),this._observer.observe(this._container,{box:"border-box"}),!0)}_uninstallObserver(){null!==this._observer&&this._observer.disconnect()}}function we(t){return Boolean(t.handleScroll.mouseWheel||t.handleScale.mouseWheel)}function Me(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.color&&(n.color=s.color),n}function Se(t){return void 0!==t.value}function xe(t){return(i,s,e,h)=>{return void 0===(n=e).open&&void 0===n.value?{time:i,index:s,originalTime:h}:t(i,s,e,h);var n}}const _e={Candlestick:xe((function(t,i,s,e){const h={index:i,time:t,value:[s.open,s.high,s.low,s.close],originalTime:e};return void 0!==s.color&&(h.color=s.color),void 0!==s.borderColor&&(h.borderColor=s.borderColor),void 0!==s.wickColor&&(h.wickColor=s.wickColor),h})),Bar:xe((function(t,i,s,e){const h={index:i,time:t,value:[s.open,s.high,s.low,s.close],originalTime:e};return void 0!==s.color&&(h.color=s.color),h})),Area:xe((function(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.lineColor&&(n.lineColor=s.lineColor),void 0!==s.topColor&&(n.topColor=s.topColor),void 0!==s.bottomColor&&(n.bottomColor=s.bottomColor),n})),Baseline:xe((function(t,i,s,e){const h=s.value,n={index:i,time:t,value:[h,h,h,h],originalTime:e};return void 0!==s.topLineColor&&(n.topLineColor=s.topLineColor),void 0!==s.bottomLineColor&&(n.bottomLineColor=s.bottomLineColor),void 0!==s.topFillColor1&&(n.topFillColor1=s.topFillColor1),void 0!==s.topFillColor2&&(n.topFillColor2=s.topFillColor2),void 0!==s.bottomFillColor1&&(n.bottomFillColor1=s.bottomFillColor1),void 0!==s.bottomFillColor2&&(n.bottomFillColor2=s.bottomFillColor2),n})),Histogram:xe(Me),Line:xe(Me)};function ye(t){return _e[t]}function ke(t){return 60*t*60*1e3}function Ce(t){return 60*t*1e3}const Te=[{divisor:(Pe=1,1e3*Pe),weight:10},{divisor:Ce(1),weight:20},{divisor:Ce(5),weight:21},{divisor:Ce(30),weight:22},{divisor:ke(1),weight:30},{divisor:ke(3),weight:31},{divisor:ke(6),weight:32},{divisor:ke(12),weight:33}];var Pe;function Re(t,i){if(t.getUTCFullYear()!==i.getUTCFullYear())return 70;if(t.getUTCMonth()!==i.getUTCMonth())return 60;if(t.getUTCDate()!==i.getUTCDate())return 50;for(let s=Te.length-1;s>=0;--s)if(Math.floor(i.getTime()/Te[s].divisor)!==Math.floor(t.getTime()/Te[s].divisor))return Te[s].weight;return 0}function De(t,i=0){if(0===t.length)return;let s=0===i?null:t[i-1].time.timestamp,e=null!==s?new Date(1e3*s):null,h=0;for(let n=i;n1){const i=Math.ceil(h/(t.length-1)),s=new Date(1e3*(t[0].time.timestamp-i));t[0].timeWeight=Re(new Date(1e3*t[0].time.timestamp),s)}}function Ae(t){if(!Ps(t))throw new Error("time must be of type BusinessDay");const i=new Date(Date.UTC(t.year,t.month-1,t.day,0,0,0,0));return{timestamp:Math.round(i.getTime()/1e3),businessDay:t}}function Ee(t){if(!Rs(t))throw new Error("time must be of type isUTCTimestamp");return{timestamp:t}}function Oe(t){return 0===t.length?null:Ps(t[0].time)?Ae:Ee}function Be(t){return Rs(t)?Ee(t):Ps(t)?Ae(t):Ae(Le(t))}function Le(t){const i=new Date(t);if(isNaN(i.getTime()))throw new Error(`Invalid date string=${t}, expected format=yyyy-mm-dd`);return{day:i.getUTCDate(),month:i.getUTCMonth()+1,year:i.getUTCFullYear()}}function ze(t){S(t.time)&&(t.time=Le(t.time))}function Ie(t){return{index:0,mapping:new Map,timePoint:t}}function Ne(t){if(void 0!==t&&0!==t.length)return{firstTime:t[0].time.timestamp,lastTime:t[t.length-1].time.timestamp}}function Ve(t){let i;return t.forEach((t=>{void 0===i&&(i=t.originalTime)})),n(i)}function Fe(t){void 0===t.originalTime&&(t.originalTime=t.time)}class We{constructor(){this._pointDataByTimePoint=new Map,this._seriesRowsBySeries=new Map,this._seriesLastTimePoint=new Map,this._sortedTimePoints=[]}destroy(){this._pointDataByTimePoint.clear(),this._seriesRowsBySeries.clear(),this._seriesLastTimePoint.clear(),this._sortedTimePoints=[]}setSeriesData(t,i){let s=0!==this._pointDataByTimePoint.size,e=!1;const h=this._seriesRowsBySeries.get(t);if(void 0!==h)if(1===this._seriesRowsBySeries.size)s=!1,e=!0,this._pointDataByTimePoint.clear();else for(const i of this._sortedTimePoints)i.pointData.mapping.delete(t)&&(e=!0);let n=[];if(0!==i.length){const s=i;s.forEach((t=>Fe(t))),function(t){t.forEach(ze)}(i);const h=r(Oe(i)),o=ye(t.seriesType());n=s.map((i=>{const s=h(i.time);let n=this._pointDataByTimePoint.get(s.timestamp);void 0===n&&(n=Ie(s),this._pointDataByTimePoint.set(s.timestamp,n),e=!0);const r=o(s,n.index,i,i.originalTime);return n.mapping.set(t,r),r}))}s&&this._cleanupPointsData(),this._setRowsToSeries(t,n);let o=-1;if(e){const t=[];this._pointDataByTimePoint.forEach((i=>{t.push({timeWeight:0,time:i.timePoint,pointData:i,originalTime:Ve(i.mapping)})})),t.sort(((t,i)=>t.time.timestamp-i.time.timestamp)),o=this._replaceTimeScalePoints(t)}return this._getUpdateResponse(t,o,function(t,i){const s=Ne(t),e=Ne(i);if(void 0!==s&&void 0!==e)return{lastBarUpdatedOrNewBarsAddedToTheRight:s.lastTime>=e.lastTime&&s.firstTime>=e.firstTime}}(this._seriesRowsBySeries.get(t),h))}removeSeries(t){return this.setSeriesData(t,[])}updateSeriesData(t,i){const s=i;Fe(s),ze(i);const e=r(Oe([i]))(i.time),h=this._seriesLastTimePoint.get(t);if(void 0!==h&&e.timestampt.time.timestampe.time.timestamp?Se(i)&&s.push(i):Se(i)?s[s.length-1]=i:s.splice(-1,1),this._seriesLastTimePoint.set(t,i.time)}_setRowsToSeries(t,i){0!==i.length?(this._seriesRowsBySeries.set(t,i.filter(Se)),this._seriesLastTimePoint.set(t,i[i.length-1].time)):(this._seriesRowsBySeries.delete(t),this._seriesLastTimePoint.delete(t))}_cleanupPointsData(){for(const t of this._sortedTimePoints)0===t.pointData.mapping.size&&this._pointDataByTimePoint.delete(t.time.timestamp)}_replaceTimeScalePoints(t){let i=-1;for(let s=0;s{0!==i.length&&(t=Math.max(t,i[i.length-1].index))})),t}_getUpdateResponse(t,i,s){const e={series:new Map,timeScale:{baseIndex:this._getBaseIndex()}};if(-1!==i)this._seriesRowsBySeries.forEach(((i,h)=>{e.series.set(h,{data:i,info:h===t?s:void 0})})),this._seriesRowsBySeries.has(t)||e.series.set(t,{data:[],info:s}),e.timeScale.points=this._sortedTimePoints,e.timeScale.firstChangedPointIndex=i;else{const i=this._seriesRowsBySeries.get(t);e.series.set(t,{data:i||[],info:s})}return e}}function je(t,i){t.index=i,t.mapping.forEach((t=>{t.index=i}))}function He(t){return{value:t.value[3],time:t.originalTime}}function $e(t){const i=He(t);return void 0!==t.color&&(i.color=t.color),i}function Ue(t){return{open:t.value[0],high:t.value[1],low:t.value[2],close:t.value[3],time:t.originalTime}}const qe={Area:function(t){const i=He(t);return void 0!==t.lineColor&&(i.lineColor=t.lineColor),void 0!==t.topColor&&(i.topColor=t.topColor),void 0!==t.bottomColor&&(i.bottomColor=t.bottomColor),i},Line:$e,Baseline:function(t){const i=He(t);return void 0!==t.topLineColor&&(i.topLineColor=t.topLineColor),void 0!==t.bottomLineColor&&(i.bottomLineColor=t.bottomLineColor),void 0!==t.topFillColor1&&(i.topFillColor1=t.topFillColor1),void 0!==t.topFillColor2&&(i.topFillColor2=t.topFillColor2),void 0!==t.bottomFillColor1&&(i.bottomFillColor1=t.bottomFillColor1),void 0!==t.bottomFillColor2&&(i.bottomFillColor2=t.bottomFillColor2),i},Histogram:$e,Bar:function(t){const i=Ue(t);return void 0!==t.color&&(i.color=t.color),i},Candlestick:function(t){const i=Ue(t),{color:s,borderColor:e,wickColor:h}=t;return void 0!==s&&(i.color=s),void 0!==e&&(i.borderColor=e),void 0!==h&&(i.wickColor=h),i}};function Ye(t){return qe[t]}const Xe={autoScale:!0,mode:0,invertScale:!1,alignLabels:!0,borderVisible:!0,borderColor:"#2B2B43",entireTextOnly:!1,visible:!1,ticksVisible:!1,scaleMargins:{bottom:.1,top:.2}},Ze={color:"rgba(0, 0, 0, 0)",visible:!1,fontSize:48,fontFamily:C,fontStyle:"",text:"",horzAlign:"center",vertAlign:"center"},Ke={width:0,height:0,autoSize:!1,layout:{background:{type:"solid",color:"#FFFFFF"},textColor:"#191919",fontSize:12,fontFamily:C},crosshair:{vertLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},horzLine:{color:"#9598A1",width:1,style:3,visible:!0,labelVisible:!0,labelBackgroundColor:"#131722"},mode:1},grid:{vertLines:{color:"#D6DCDE",style:0,visible:!0},horzLines:{color:"#D6DCDE",style:0,visible:!0}},overlayPriceScales:Object.assign({},Xe),leftPriceScale:Object.assign(Object.assign({},Xe),{visible:!1}),rightPriceScale:Object.assign(Object.assign({},Xe),{visible:!0}),timeScale:{rightOffset:0,barSpacing:6,minBarSpacing:.5,fixLeftEdge:!1,fixRightEdge:!1,lockVisibleTimeRangeOnResize:!1,rightBarStaysOnScroll:!1,borderVisible:!0,borderColor:"#2B2B43",visible:!0,timeVisible:!1,secondsVisible:!0,shiftVisibleRangeOnNewBar:!0,ticksVisible:!1},watermark:Ze,localization:{locale:Is?navigator.language:"",dateFormat:"dd MMM 'yy"},handleScroll:{mouseWheel:!0,pressedMouseMove:!0,horzTouchDrag:!0,vertTouchDrag:!0},handleScale:{axisPressedMouseMove:{time:!0,price:!0},axisDoubleClickReset:{time:!0,price:!0},mouseWheel:!0,pinch:!0},kineticScroll:{mouse:!1,touch:!0},trackingMode:{exitMode:1}},Ge={upColor:"#26a69a",downColor:"#ef5350",wickVisible:!0,borderVisible:!0,borderColor:"#378658",borderUpColor:"#26a69a",borderDownColor:"#ef5350",wickColor:"#737375",wickUpColor:"#26a69a",wickDownColor:"#ef5350"},Je={upColor:"#26a69a",downColor:"#ef5350",openVisible:!0,thinBars:!0},Qe={color:"#2196f3",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},th={topColor:"rgba( 46, 220, 135, 0.4)",bottomColor:"rgba( 40, 221, 100, 0)",invertFilledArea:!1,lineColor:"#33D778",lineStyle:0,lineWidth:3,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},ih={baseValue:{type:"price",price:0},topFillColor1:"rgba(38, 166, 154, 0.28)",topFillColor2:"rgba(38, 166, 154, 0.05)",topLineColor:"rgba(38, 166, 154, 1)",bottomFillColor1:"rgba(239, 83, 80, 0.05)",bottomFillColor2:"rgba(239, 83, 80, 0.28)",bottomLineColor:"rgba(239, 83, 80, 1)",lineWidth:3,lineStyle:0,lineType:0,crosshairMarkerVisible:!0,crosshairMarkerRadius:4,crosshairMarkerBorderColor:"",crosshairMarkerBorderWidth:2,crosshairMarkerBackgroundColor:"",lastPriceAnimation:0},sh={color:"#26a69a",base:0},eh={title:"",visible:!0,lastValueVisible:!0,priceLineVisible:!0,priceLineSource:0,priceLineWidth:1,priceLineColor:"",priceLineStyle:2,baseLineVisible:!0,baseLineWidth:1,baseLineColor:"#B2B5BE",baseLineStyle:0,priceFormat:{type:"price",precision:2,minMove:.01}};class hh{constructor(t,i){this._chartWidget=t,this._priceScaleId=i}applyOptions(t){this._chartWidget.model().applyPriceScaleOptions(this._priceScaleId,t)}options(){return this._priceScale().options()}width(){return et(this._priceScaleId)?this._chartWidget.getPriceAxisWidth(this._priceScaleId):0}_priceScale(){return r(this._chartWidget.model().findPriceScale(this._priceScaleId)).priceScale}}const nh={color:"#FF0000",price:0,lineStyle:2,lineWidth:1,lineVisible:!0,axisLabelVisible:!0,title:"",axisLabelColor:"",axisLabelTextColor:""};class rh{constructor(t){this._priceLine=t}applyOptions(t){this._priceLine.applyOptions(t)}options(){return this._priceLine.options()}priceLine(){return this._priceLine}}class oh{constructor(t,i,s){this._series=t,this._dataUpdatesConsumer=i,this._priceScaleApiProvider=s}priceFormatter(){return this._series.formatter()}priceToCoordinate(t){const i=this._series.firstValue();return null===i?null:this._series.priceScale().priceToCoordinate(t,i.value)}coordinateToPrice(t){const i=this._series.firstValue();return null===i?null:this._series.priceScale().coordinateToPrice(t,i.value)}barsInLogicalRange(t){if(null===t)return null;const i=new ps(new cs(t.from,t.to)).strictRange(),s=this._series.bars();if(s.isEmpty())return null;const e=s.search(i.left(),1),h=s.search(i.right(),-1),n=r(s.firstIndex()),o=r(s.lastIndex());if(null!==e&&null!==h&&e.index>h.index)return{barsBefore:t.from-n,barsAfter:o-t.to};const l={barsBefore:null===e||e.index===n?t.from-n:e.index-n,barsAfter:null===h||h.index===o?o-t.to:o-h.index};return null!==e&&null!==h&&(l.from=e.time.businessDay||e.time.timestamp,l.to=h.time.businessDay||h.time.timestamp),l}setData(t){this._series.seriesType(),this._dataUpdatesConsumer.applyNewData(this._series,t)}update(t){this._series.seriesType(),this._dataUpdatesConsumer.updateData(this._series,t)}dataByIndex(t,i){const s=this._series.bars().search(t,i);return null===s?null:Ye(this.seriesType())(s)}setMarkers(t){const i=t.map((t=>Object.assign(Object.assign({},t),{originalTime:t.time,time:Be(t.time)})));this._series.setMarkers(i)}markers(){return this._series.markers().map((t=>{const{originalTime:i,time:s}=t,e=function(t,i){var s={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&i.indexOf(e)<0&&(s[e]=t[e]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var h=0;for(e=Object.getOwnPropertySymbols(t);h=1)return 0;let i=0;for(;i<8;i++){const s=Math.round(t);if(Math.abs(s-t)<1e-8)return i;t*=10}return i}(i.minMove))}function ch(t){return function(t){if(x(t.handleScale)){const i=t.handleScale;t.handleScale={axisDoubleClickReset:{time:i,price:i},axisPressedMouseMove:{time:i,price:i},mouseWheel:i,pinch:i}}else if(void 0!==t.handleScale){const{axisPressedMouseMove:i,axisDoubleClickReset:s}=t.handleScale;x(i)&&(t.handleScale.axisPressedMouseMove={time:i,price:i}),x(s)&&(t.handleScale.axisDoubleClickReset={time:s,price:s})}const i=t.handleScroll;x(i)&&(t.handleScroll={horzTouchDrag:i,vertTouchDrag:i,mouseWheel:i,pressedMouseMove:i})}(t),t}class dh{constructor(t,i){this._dataLayer=new We,this._seriesMap=new Map,this._seriesMapReversed=new Map,this._clickedDelegate=new b,this._crosshairMovedDelegate=new b;const s=void 0===i?_(Ke):g(_(Ke),ch(i));this._chartWidget=new ge(t,s),this._chartWidget.clicked().subscribe((t=>{this._clickedDelegate.hasListeners()&&this._clickedDelegate.fire(this._convertMouseParams(t()))}),this),this._chartWidget.crosshairMoved().subscribe((t=>{this._crosshairMovedDelegate.hasListeners()&&this._crosshairMovedDelegate.fire(this._convertMouseParams(t()))}),this);const e=this._chartWidget.model();this._timeScaleApi=new ah(e,this._chartWidget.timeAxisWidget())}remove(){this._chartWidget.clicked().unsubscribeAll(this),this._chartWidget.crosshairMoved().unsubscribeAll(this),this._timeScaleApi.destroy(),this._chartWidget.destroy(),this._seriesMap.clear(),this._seriesMapReversed.clear(),this._clickedDelegate.destroy(),this._crosshairMovedDelegate.destroy(),this._dataLayer.destroy()}resize(t,i,s){this.autoSizeActive()||this._chartWidget.resize(t,i,s)}addAreaSeries(t){return this._addSeriesImpl("Area",th,t)}addBaselineSeries(t){return this._addSeriesImpl("Baseline",ih,t)}addBarSeries(t){return this._addSeriesImpl("Bar",Je,t)}addCandlestickSeries(t={}){return function(t){void 0!==t.borderColor&&(t.borderUpColor=t.borderColor,t.borderDownColor=t.borderColor),void 0!==t.wickColor&&(t.wickUpColor=t.wickColor,t.wickDownColor=t.wickColor)}(t),this._addSeriesImpl("Candlestick",Ge,t)}addHistogramSeries(t){return this._addSeriesImpl("Histogram",sh,t)}addLineSeries(t){return this._addSeriesImpl("Line",Qe,t)}removeSeries(t){const i=n(this._seriesMap.get(t)),s=this._dataLayer.removeSeries(i);this._chartWidget.model().removeSeries(i),this._sendUpdateToChart(s),this._seriesMap.delete(t),this._seriesMapReversed.delete(i)}applyNewData(t,i){this._sendUpdateToChart(this._dataLayer.setSeriesData(t,i))}updateData(t,i){this._sendUpdateToChart(this._dataLayer.updateSeriesData(t,i))}subscribeClick(t){this._clickedDelegate.subscribe(t)}unsubscribeClick(t){this._clickedDelegate.unsubscribe(t)}subscribeCrosshairMove(t){this._crosshairMovedDelegate.subscribe(t)}setCrosshairXY(t,i,s){this._chartWidget.paneWidgets()[0].setCrosshair(t,i,s)}unsubscribeCrosshairMove(t){this._crosshairMovedDelegate.unsubscribe(t)}priceScale(t){return new hh(this._chartWidget,t)}timeScale(){return this._timeScaleApi}applyOptions(t){this._chartWidget.applyOptions(ch(t))}options(){return this._chartWidget.options()}takeScreenshot(){return this._chartWidget.takeScreenshot()}autoSizeActive(){return this._chartWidget.autoSizeActive()}_addSeriesImpl(t,i,s={}){uh(s.priceFormat);const e=g(_(eh),_(i),s),h=this._chartWidget.model().createSeries(t,e),n=new oh(h,this,this);return this._seriesMap.set(n,h),this._seriesMapReversed.set(h,n),n}_sendUpdateToChart(t){const i=this._chartWidget.model();i.updateTimeScale(t.timeScale.baseIndex,t.timeScale.points,t.timeScale.firstChangedPointIndex),t.series.forEach(((t,i)=>i.setData(t.data,t.info))),i.recalculateAllPanes()}_mapSeriesToApi(t){return n(this._seriesMapReversed.get(t))}_convertMouseParams(t){const i=new Map;t.seriesData.forEach(((t,s)=>{const e=Ye(s.seriesType())(t);h(function(t){return void 0!==t.open||void 0!==t.value}(e)),i.set(this._mapSeriesToApi(s),e)}));const s=void 0===t.hoveredSeries?void 0:this._mapSeriesToApi(t.hoveredSeries);return{time:t.time,logical:t.index,point:t.point,hoveredSeries:s,hoveredObjectId:t.hoveredObject,seriesData:i,sourceEvent:t.touchMouseEventData}}}var fh=Object.freeze({__proto__:null,get ColorType(){return xs},get CrosshairMode(){return J},get LastPriceAnimationMode(){return ws},get LineStyle(){return i},get LineType(){return t},get MismatchDirection(){return Di},get PriceLineSource(){return Ss},get PriceScaleMode(){return Qi},get TickMarkType(){return vs},get TrackingModeExitMode(){return gs},createChart:function(t,i){let s;if(S(t)){const i=document.getElementById(t);h(null!==i,`Cannot find element in DOM with id=${t}`),s=i}else s=t;return new dh(s,i)},isBusinessDay:Ps,isUTCTimestamp:Rs,version:function(){return"4.1.0-dev+202306102016"}});window.LightweightCharts=fh}(); """ \ No newline at end of file diff --git a/lightweight_charts/polygon.py b/lightweight_charts/polygon.py index 97cf75c..f296630 100644 --- a/lightweight_charts/polygon.py +++ b/lightweight_charts/polygon.py @@ -96,7 +96,7 @@ class PolygonAPI: for child in self._lasts.values(): for subbed_chart in child['charts']: if subbed_chart == chart: - self._send_q.put(('_unsubscribe', chart, sec_type, ticker)) + self._send_q.put(('_unsubscribe', chart, ticker)) df = pd.DataFrame(data['results']) columns = ['t', 'o', 'h', 'l', 'c'] @@ -262,16 +262,6 @@ class PolygonChart(Chart): {self.id}.search.window.style.display = "block" {self.id}.search.box.focus() - - window.stat = document.createElement('div') - window.stat.style.position = 'absolute' - window.stat.style.backgroundColor = '#E35C58' - window.stat.style.borderRadius = '50%' - window.stat.style.height = '8px' - window.stat.style.width = '8px' - window.stat.style.top = '10px' - window.stat.style.right = '25px' - {self.id}.topBar.appendChild(window.stat) ''') def show(self): @@ -289,11 +279,12 @@ class PolygonChart(Chart): mult, span = _convert_timeframe(self.topbar['timeframe'].value) delta = dt.timedelta(**{span + 's': int(mult)}) + short_delta = (delta < dt.timedelta(days=7)) start_date = dt.datetime.now() remaining_bars = self.num_bars while remaining_bars > 0: start_date -= delta - if start_date.weekday() > 4: # Monday to Friday (0 to 4) + if start_date.weekday() > 4 and short_delta: # Monday to Friday (0 to 4) continue remaining_bars -= 1 epoch = dt.datetime.fromtimestamp(0) @@ -307,11 +298,7 @@ class PolygonChart(Chart): ) self.spinner(False) self.crosshair(vert_visible=True, horz_visible=True) if success else None - if not success: - self.run_script(f'window.stat.style.backgroundColor = "#E35C58"') - return False - self.run_script(f'window.stat.style.backgroundColor = "#4CDE67"') if self.live else None - return True + return True if success else False async def on_search(self, searched_string): self.topbar['symbol'].set(searched_string if self._polygon(searched_string) else '') diff --git a/lightweight_charts/widgets.py b/lightweight_charts/widgets.py index d06248a..f5995dc 100644 --- a/lightweight_charts/widgets.py +++ b/lightweight_charts/widgets.py @@ -116,12 +116,18 @@ class StaticLWC(LWC): self.height = height self._html = self._html.replace('\n\n', '') - def run_script(self, script): self._html += '\n' + script + def run_script(self, script, run_last=False): + if run_last: + self._final_scripts.append(script) + else: + self._html += '\n' + script def load(self): if self.loaded: return self.loaded = True + for script in self._final_scripts: + self._html += '\n' + script self._load() def _load(self): pass diff --git a/setup.py b/setup.py index 2030240..67bd786 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open('README.md', 'r', encoding='utf-8') as f: setup( name='lightweight_charts', - version='1.0.11', + version='1.0.12', packages=find_packages(), python_requires='>=3.9', install_requires=[