UNPKG

@santiment-network/chart

Version:
7 lines 279 kB
/*! * @license * TradingView Lightweight Charts™ v1.0.12 * Copyright (c) 2025 TradingView, Inc. * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0 */ !function(){"use strict";const t={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}};var i,s;function h(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,h){t.beginPath();const e=t.lineWidth%2?.5:0;t.moveTo(s,i+e),t.lineTo(h,i+e),t.stroke()}function n(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 o(t){if(null===t)throw new Error("Value is null");return t}function l(t){return o(r(t))}!function(t){t[t.Simple=0]="Simple",t[t.WithSteps=1]="WithSteps",t[t.Curved=2]="Curved"}(i||(i={})),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"}(s||(s={}));class a{constructor(){this._listeners=[]}subscribe(t,i,s){const h={callback:t,linkedObject:i,singleshot:!0===s};this._listeners.push(h)}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 h=[...this._listeners];this._listeners=this._listeners.filter((t=>!t.singleshot)),h.forEach((h=>h.callback(t,i,s)))}hasListeners(){return this._listeners.length>0}destroy(){this._listeners=[]}}function u(t,...i){for(const s of i)for(const i in s)void 0!==s[i]&&Object.prototype.hasOwnProperty.call(s,i)&&!["__proto__","constructor","prototype"].includes(i)&&("object"!=typeof s[i]||void 0===t[i]||Array.isArray(s[i])?t[i]=s[i]:u(t[i],s[i]));return t}function c(t){return"number"==typeof t&&isFinite(t)}function d(t){return"number"==typeof t&&t%1==0}function f(t){return"string"==typeof t}function p(t){return"boolean"==typeof t}function m(t){const i=t;if(!i||"object"!=typeof i)return i;let s,h,e;for(h in s=Array.isArray(i)?[]:{},i)i.hasOwnProperty(h)&&(e=i[h],s[h]=e&&"object"==typeof e?m(e):e);return s}function v(t){return null!==t}function w(t){return null===t?void 0:t}const g="-apple-system, BlinkMacSystemFont, 'Trebuchet MS', Roboto, Ubuntu, sans-serif";function M(t,i,s){return void 0===i&&(i=g),`${s=void 0!==s?`${s} `:""}${t}px ${i}`}class b{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=M(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}}function C(t){return t<0?0:t>255?255:Math.round(t)||0}function S(t){return.199*t[0]+.687*t[1]+.114*t[2]}class x{constructor(t,i){this._rgbaCache=new Map,this._customParsers=t,i&&(this._rgbaCache=i)}applyAlpha(t,i){if("transparent"===t)return t;const s=this._parseColor(t),h=s[3];return`rgba(${s[0]}, ${s[1]}, ${s[2]}, ${i*h})`}generateContrastColors(t){const i=this._parseColor(t);return{background:`rgb(${i[0]}, ${i[1]}, ${i[2]})`,foreground:S(i)>160?"black":"white"}}colorStringToGrayscale(t){return S(this._parseColor(t))}gradientColorAtPercent(t,i,s){const[h,e,n,r]=this._parseColor(t),[o,l,a,u]=this._parseColor(i),c=[C(h+s*(o-h)),C(e+s*(l-e)),C(n+s*(a-n)),(d=r+s*(u-r),d<=0||d>1?Math.min(Math.max(d,0),1):Math.round(1e4*d)/1e4)];var d;return`rgba(${c[0]}, ${c[1]}, ${c[2]}, ${c[3]})`}_parseColor(t){const i=this._rgbaCache.get(t);if(i)return i;const s=function(t){const i=document.createElement("div");i.style.display="none",document.body.appendChild(i),i.style.color=t;const s=window.getComputedStyle(i).color;return document.body.removeChild(i),s}(t),h=s.match(/^rgba?\s*\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d*\.?\d+))?\)$/);if(!h){if(this._customParsers.length)for(const i of this._customParsers){const s=i(t);if(s)return this._rgbaCache.set(t,s),s}throw new Error(`Failed to parse color: ${t}`)}const e=[parseInt(h[1],10),parseInt(h[2],10),parseInt(h[3],10),h[4]?parseFloat(h[4]):1];return this._rgbaCache.set(t,e),e}}class _{constructor(){this._renderers=[]}setRenderers(t){this._renderers=t}draw(t,i,s){this._renderers.forEach((h=>{h.draw(t,i,s)}))}}class P{draw(t,i,s){t.useBitmapCoordinateSpace((t=>this._drawImpl(t,i,s)))}}class y extends P{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){if(null===this._data||null===this._data.visibleRange)return;const h=this._data.visibleRange,e=this._data,n=Math.max(1,Math.floor(i))%2/2,r=r=>{t.beginPath();for(let o=h.to-1;o>=h.from;--o){const h=e.items[o],l=Math.round(h.x*i)+n,a=h.y*s,u=r*s+n;t.moveTo(l,a),t.arc(l,a,u,0,2*Math.PI)}t.fill()};e.lineWidth>0&&(t.fillStyle=e.backColor,r(e.radius+e.lineWidth)),t.fillStyle=e.lineColor,r(e.radius)}}function k(){return{items:[{x:0,y:0,time:0,price:0}],lineColor:"",backColor:"",radius:0,lineWidth:0,visibleRange:null}}const T={from:0,to:1};class R{constructor(t,i,s){this._compositeRenderer=new _,this._markersRenderers=[],this._markersData=[],this._invalidated=!0,this._chartModel=t,this._crosshair=i,this._pane=s,this._compositeRenderer.setRenderers(this._markersRenderers)}update(t){this._createMarkerRenderersIfNeeded(),this._invalidated=!0}renderer(){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._compositeRenderer}_createMarkerRenderersIfNeeded(){const t=this._pane.orderedSources();t.length!==this._markersRenderers.length&&(this._markersData=t.map(k),this._markersRenderers=this._markersData.map((t=>{const i=new y;return i.setData(t),i})),this._compositeRenderer.setRenderers(this._markersRenderers))}_updateImpl(){const t=2===this._crosshair.options().mode||!this._crosshair.visible(),i=this._pane.orderedSeries(),s=this._crosshair.appliedIndex(),h=this._chartModel.timeScale();this._createMarkerRenderersIfNeeded(),i.forEach(((i,e)=>{const n=this._markersData[e],r=i.markerDataAtIndex(s),o=i.firstValue();!t&&null!==r&&i.visible()&&null!==o?(n.lineColor=r.backgroundColor,n.radius=r.radius,n.lineWidth=r.borderWidth,n.items[0].price=r.price,n.items[0].y=i.priceScale().priceToCoordinate(r.price,o.value),n.backColor=r.borderColor??this._chartModel.backgroundColorAtYPercentFromTop(n.items[0].y/i.priceScale().height()),n.items[0].time=s,n.items[0].x=h.indexToCoordinate(s),n.visibleRange=T):n.visibleRange=null}))}}class D extends P{constructor(t){super(),this._data=t}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:s,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*s),a=Math.round(this._data.y*n);t.lineCap="butt",r&&l>=0&&(t.lineWidth=Math.floor(this._data.vertLine.lineWidth*s),t.strokeStyle=this._data.vertLine.color,t.fillStyle=this._data.vertLine.color,h(t,this._data.vertLine.lineStyle),function(t,i,s,h){t.beginPath();const e=t.lineWidth%2?.5:0;t.moveTo(i+e,s),t.lineTo(i+e,h),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,h(t,this._data.horzLine.lineStyle),e(t,a,0,i.width))}}class V{constructor(t,i){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 D(this._rendererData),this._source=t,this._pane=i}update(){this._invalidated=!0}renderer(t){return this._invalidated&&(this._updateImpl(),this._invalidated=!1),this._renderer}_updateImpl(){const t=this._source.visible(),i=this._pane.model().options().crosshair,s=this._rendererData;if(2===i.mode)return s.horzLine.visible=!1,void(s.vertLine.visible=!1);s.horzLine.visible=t&&this._source.horzLineVisible(this._pane),s.vertLine.visible=t&&this._source.vertLineVisible(),s.horzLine.lineWidth=i.horzLine.width,s.horzLine.lineStyle=i.horzLine.style,s.horzLine.color=i.horzLine.color,s.vertLine.lineWidth=i.vertLine.width,s.vertLine.lineStyle=i.vertLine.style,s.vertLine.color=i.vertLine.color,s.x=this._source.appliedX(),s.y=this._source.appliedY()}}function z(t,i,s,h,e,n){t.fillRect(i+n,s,h-2*n,n),t.fillRect(i+n,s+e-n,h-2*n,n),t.fillRect(i,s,n,e),t.fillRect(i+h-n,s,n,e)}function E(t,i,s,h,e,n){t.save(),t.globalCompositeOperation="copy",t.fillStyle=n,t.fillRect(i,s,h,e),t.restore()}function I(t,i,s,h,e,n){t.beginPath(),t.roundRect?t.roundRect(i,s,h,e,n):(t.lineTo(i+h-n[1],s),0!==n[1]&&t.arcTo(i+h,s,i+h,s+n[1],n[1]),t.lineTo(i+h,s+e-n[2]),0!==n[2]&&t.arcTo(i+h,s+e,i+h-n[2],s+e,n[2]),t.lineTo(i+n[3],s+e),0!==n[3]&&t.arcTo(i,s+e,i,s+e-n[3],n[3]),t.lineTo(i,s+n[0]),0!==n[0]&&t.arcTo(i,s,i+n[0],s,n[0]))}function A(t,i,s,h,e,n,r=0,o=[0,0,0,0],l=""){if(t.save(),!r||!l||l===n)return I(t,i,s,h,e,o),t.fillStyle=n,t.fill(),void t.restore();const a=r/2;var u;I(t,i+a,s+a,h-r,e-r,(u=-a,o.map((t=>0===t?t:t+u)))),"transparent"!==n&&(t.fillStyle=n,t.fill()),"transparent"!==l&&(t.lineWidth=r,t.strokeStyle=l,t.closePath(),t.stroke()),t.restore()}function B(t,i,s,h,e,n,r){t.save(),t.globalCompositeOperation="copy";const o=t.createLinearGradient(0,0,0,e);o.addColorStop(0,n),o.addColorStop(1,r),t.fillStyle=o,t.fillRect(i,s,h,e),t.restore()}class L{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,h){if(!this._data.visible||0===this._data.text.length)return;const e=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,h),l=o.bitmap;return o.alignRight?A(r,l.xOutside,l.yTop,l.totalWidth,l.totalHeight,n,l.horzBorder,[l.radius,0,0,l.radius],n):A(r,l.xInside,l.yTop,l.totalWidth,l.totalHeight,n,l.horzBorder,[0,l.radius,l.radius,0],n),this._data.tickVisible&&(r.fillStyle=e,r.fillRect(l.xInside,l.yMid,l.xTick-l.xInside,l.tickHeight)),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=e,t.fillText(this._data.text,s.xText,(s.yTop+s.yBottom)/2+s.textMidCorrection)}))}_calculateGeometry(t,i,s,h){const{context:e,bitmapSize:n,mediaSize:r,horizontalPixelRatio:o,verticalPixelRatio:l}=t,a=this._data.tickVisible||!this._data.moveTextToInvisibleTick?i.tickLength:0,u=this._data.separatorVisible?i.borderSize:0,c=i.paddingTop+this._commonData.additionalPaddingTop,d=i.paddingBottom+this._commonData.additionalPaddingBottom,f=i.paddingInner,p=i.paddingOuter,m=this._data.text,v=i.fontSize,w=s.yMidCorrection(e,m),g=Math.ceil(s.measureText(e,m)),M=v+c+d,b=i.borderSize+f+p+g+a,C=Math.max(1,Math.floor(l));let S=Math.round(M*l);S%2!=C%2&&(S+=1);const x=u>0?Math.max(1,Math.floor(u*o)):0,_=Math.round(b*o),P=Math.round(a*o),y=this._commonData.fixedCoordinate??this._commonData.coordinate,k=Math.round(y*l)-Math.floor(.5*l),T=Math.floor(k+C/2-S/2),R=T+S,D="right"===h,V=D?r.width-u:u,z=D?n.width-x:x;let E,I,A;return D?(E=z-_,I=z-P,A=V-a-f-u):(E=z+_,I=z+P,A=V+a+f),{alignRight:D,bitmap:{yTop:T,yMid:k,yBottom:R,totalWidth:_,totalHeight:S,radius:2*o,horzBorder:x,xOutside:E,xInside:z,xTick:I,tickHeight:C,right:n.width},media:{yTop:T/l,yBottom:R/l,xText:A,textMidCorrection:w}}}}class O{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||L)(this._axisRendererData,this._commonRendererData),this._paneRenderer=new(t||L)(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 N extends O{constructor(t,i,s){super(),this._source=t,this._priceScale=i,this._valueProvider=s}_updateRendererData(t,i,s){if(t.visible=!1,2===this._source.options().mode)return;const h=this._source.options().horzLine;if(!h.labelVisible)return;const e=this._priceScale.firstValue();if(!this._source.visible()||this._priceScale.isEmpty()||null===e)return;const n=this._priceScale.colorParser().generateContrastColors(h.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,e),t.visible=!0}}const W=/[1-9]/g;class H{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,o(this._data).text,W)))));if(s<=0)return;const h=i.paddingHorizontal,e=s+2*h,n=e/2,r=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+e>r&&(l-=Math.abs(r-(a+e)),a=Math.floor(l-n)+.5);const u=a+e,c=Math.ceil(0+i.borderSize+i.tickLength+i.paddingTop+i.fontSize+i.paddingBottom);t.useBitmapCoordinateSpace((({context:t,horizontalPixelRatio:s,verticalPixelRatio:h})=>{const e=o(this._data);t.fillStyle=e.background;const n=Math.round(a*s),r=Math.round(0*h),l=Math.round(u*s),d=Math.round(c*h),f=Math.round(2*s);if(t.beginPath(),t.moveTo(n,r),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,r),t.fill(),e.tickVisible){const n=Math.round(e.coordinate*s),o=r,l=Math.round((o+i.tickLength)*h);t.fillStyle=e.color;const a=Math.max(1,Math.floor(s)),u=Math.floor(.5*s);t.fillRect(n-u,o,a,l-o)}})),t.useMediaCoordinateSpace((({context:t})=>{const s=o(this._data),e=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+h,e+n),t.fillText(s.text,0,0)}))}}class F{constructor(t,i,s){this._invalidated=!0,this._renderer=new H,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;if(t.visible=!1,2===this._crosshair.options().mode)return;const i=this._crosshair.options().vertLine;if(!i.labelVisible)return;const s=this._model.timeScale();if(s.isEmpty())return;t.width=s.width();const h=this._valueProvider();if(null===h)return;t.coordinate=h.coordinate;const e=s.indexToTimeScalePoint(this._crosshair.appliedIndex());t.text=s.formatDateTime(o(e)),t.visible=!0;const n=this._model.colorParser().generateContrastColors(i.labelBackgroundColor);t.background=n.background,t.color=n.foreground,t.tickVisible=s.options().ticksVisible}}class U{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 $;!function(t){t[t.Normal=0]="Normal",t[t.Magnet=1]="Magnet",t[t.Hidden=2]="Hidden",t[t.MagnetOHLC=3]="MagnetOHLC"}($||($={}));class j extends U{constructor(t,i){super(),this._pane=null,this._price=NaN,this._index=0,this._visible=!1,this._priceAxisViews=new Map,this._subscribed=!1,this._crosshairPaneViewCache=new WeakMap,this._markersPaneViewCache=new WeakMap,this._x=NaN,this._y=NaN,this._originX=NaN,this._originY=NaN,this._model=t,this._options=i;this._currentPosPriceProvider=((t,i)=>s=>{const h=i(),e=t();if(s===o(this._pane).defaultPriceScale())return{price:e,coordinate:h};{const t=o(s.firstValue());return{price:s.coordinateToPrice(h,t),coordinate:h}}})((()=>this._price),(()=>this._y));const s=((t,i)=>()=>{const s=this._model.timeScale().indexToTime(t()),h=i();return s&&Number.isFinite(h)?{time:s,coordinate:h}:null})((()=>this._index),(()=>this.appliedX()));this._timeAxisView=new F(this,t,s)}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(),this.updateAllViews()}paneViews(t){let i=this._crosshairPaneViewCache.get(t);i||(i=new V(this,t),this._crosshairPaneViewCache.set(t,i));let s=this._markersPaneViewCache.get(t);return s||(s=new R(this._model,this,t),this._markersPaneViewCache.set(t,s)),[i,s]}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._model.panes().forEach((t=>{this._crosshairPaneViewCache.get(t)?.update(),this._markersPaneViewCache.get(t)?.update()})),this._priceAxisViews.forEach((t=>t.update())),this._timeAxisView.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 h=this._x,e=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),h!==this._x||e!==this._y||r!==this._index||n!==this._price||o!==this._pane}_setIndexToLastSeriesBarIndex(){const t=this._model.serieses().map((t=>t.bars().lastIndex())).filter(v),i=0===t.length?null:Math.max(...t);this._index=null!==i?i:NaN}_createPriceAxisViewOnDemand(t,i,s){let h=t.get(i);return void 0===h&&(h=new N(this,i,s),t.set(i,h)),h}}function q(t){return"left"===t||"right"===t||t.startsWith("right-")}class Y{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 Y(2)}static full(){return new Y(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)}}class K{formatTickmarks(t){return t.map((t=>this.format(t)))}}const X=".";function Z(t,i){if(!c(t))return"n/a";if(!d(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 G extends K{constructor(t,i){if(super(),i||(i=1),c(t)&&d(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),h="";const e=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),h=X+Z(+n.toFixed(this._fractionalLength)*this._minMove,e)}else s=Math.round(s*i)/i,e>0&&(h=X+Z(0,e));return s.toFixed(0)+h}}class J extends G{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class Q extends K{constructor(t){super(),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))}}const tt=/[2-9]/g;class it{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 h=this._getMetrics(t,i,s);return((h.actualBoundingBoxAscent||0)-(h.actualBoundingBoxDescent||0))/2}_getMetrics(t,i,s){const h=s||tt,e=String(i).replace(h,"0");if(this._cache.has(e))return r(this._cache.get(e)).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 n=t.measureText(e);return t.restore(),0===n.width&&i.length||(this._cache.set(e,{metrics:n,tick:this._usageTick}),this._tick2Labels[this._usageTick]=e,this._actualSize++,this._usageTick++),n}}class st{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 ht{constructor(t,i,s){this._priceAxisView=t,this._textWidthCache=new it(50),this._dataSource=i,this._chartModel=s,this._fontSize=-1,this._renderer=new st(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 h=this._chartModel.priceAxisRendererOptions();return h.fontSize!==this._fontSize&&(this._fontSize=h.fontSize,this._textWidthCache.reset()),this._renderer.setParams(this._priceAxisView.paneRenderer(),h,s),this._renderer}}class et extends P{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}hitTest(t,i){if(!this._data?.visible)return null;const{y:s,lineWidth:h,externalId:e}=this._data;return i>=s-h-7&&i<=s+h+7?{hitTestData:this._data,externalId:e}:null}_drawImpl({context:t,bitmapSize:i,horizontalPixelRatio:s,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*s),h(t,this._data.lineStyle),e(t,r,0,i.width))}}class nt{constructor(t){this._lineRendererData={y:0,color:"rgba(0, 0, 0, 0)",lineWidth:1,lineStyle:0,visible:!1},this._lineRenderer=new et,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 rt extends nt{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 h=this._series.firstValue();null!==h&&(this._lineRendererData.visible=!0,this._lineRendererData.y=t.priceToCoordinate(h.value,h.value),this._lineRendererData.color=s.baseLineColor,this._lineRendererData.lineWidth=s.baseLineWidth,this._lineRendererData.lineStyle=s.baseLineStyle)}}class ot extends P{constructor(){super(...arguments),this._data=null}setData(t){this._data=t}data(){return this._data}_drawImpl({context:t,horizontalPixelRatio:i,verticalPixelRatio:s}){const h=this._data;if(null===h)return;const e=Math.max(1,Math.floor(i)),n=e%2/2,r=Math.round(h.center.x*i)+n,o=h.center.y*s;t.fillStyle=h.seriesLineColor,t.beginPath();const l=Math.max(2,1.5*h.seriesLineWidth)*i;t.arc(r,o,l,0,2*Math.PI,!1),t.fill(),t.fillStyle=h.fillColor,t.beginPath(),t.arc(r,o,h.radius*i,0,2*Math.PI,!1),t.fill(),t.lineWidth=e,t.strokeStyle=h.strokeColor,t.beginPath(),t.arc(r,o,h.radius*i+e/2,0,2*Math.PI,!1),t.stroke()}}const lt=[{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}];class at{constructor(t){this._renderer=new ot,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 h=this._series.lastValueData(!0);if(h.noData||!i.contains(h.index))return;const e={x:t.indexToCoordinate(h.index),y:this._series.priceScale().priceToCoordinate(h.price,s.value)},n=h.color,r=this._series.options().lineWidth,o=this._animationData(this._duration(),n);this._renderer.setData({seriesLineColor:n,seriesLineWidth:r,fillColor:o.fillColor,strokeColor:o.strokeColor,radius:o.radius,center:e})}_updateRendererDataStage(){const t=this._renderer.data();if(null!==t){const i=this._animationData(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}_color(t,i,s,h){const e=s+(h-s)*i;return this._series.model().colorParser().applyAlpha(t,e)}_animationData(t,i){const s=t%2600/2600;let h;for(const t of lt)if(s>=t.start&&s<=t.end){h=t;break}n(void 0!==h,"Last price animation internal logic error");const e=(s-h.start)/(h.end-h.start);return{fillColor:this._color(i,e,h.startFillAlpha,h.endFillAlpha),strokeColor:this._color(i,e,h.startStrokeAlpha,h.endStrokeAlpha),radius:(r=e,o=h.startRadius,l=h.endRadius,o+(l-o)*r)};var r,o,l}}class ut extends nt{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 ct extends O{constructor(t){super(),this._source=t}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const h=this._source;if(!h.visible())return;const e=h.options(),n=e.lastValueVisible,r=""!==h.title(),o=0===e.seriesLastValueMode,l=h.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=h.priceLineColor(l.color),u=this._source.model().colorParser().generateContrastColors(a);s.background=u.background,s.coordinate=l.coordinate,i.borderColor=h.model().backgroundColorAtYPercentFromTop(l.coordinate/h.priceScale().height()),t.borderColor=a,t.color=u.foreground,i.color=u.foreground}_paneText(t,i,s,h){let e="";const n=this._source.title();return s&&0!==n.length&&(e+=`${n} `),i&&h&&(e+=this._source.priceScale().isPercentage()?t.formattedPriceAbsolute:t.formattedPricePercentage),e.trim()}_axisText(t,i,s){return i?s?this._source.priceScale().isPercentage()?t.formattedPricePercentage:t.formattedPriceAbsolute:t.text:""}}function dt(t,i,s,h){const e=Number.isFinite(i),n=Number.isFinite(s);return e&&n?t(i,s):e||n?e?i:s:h}class ft{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 ft(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 ft(dt(Math.min,this.minValue(),t.minValue(),-1/0),dt(Math.max,this.maxValue(),t.maxValue(),1/0))}scaleAroundCenter(t){if(!c(t))return;if(0===this._maxValue-this._minValue)return;const i=.5*(this._maxValue+this._minValue);let s=this._maxValue-i,h=this._minValue-i;s*=t,h*=t,this._maxValue=i+s,this._minValue=i+h}shift(t){c(t)&&(this._maxValue+=t,this._minValue+=t)}toRaw(){return{minValue:this._minValue,maxValue:this._maxValue}}static fromRaw(t){return null===t?null:new ft(t.minValue,t.maxValue)}}class pt{constructor(t,i){this._priceRange=t,this._margins=i||null}priceRange(){return this._priceRange}margins(){return this._margins}toRaw(){return{priceRange:null===this._priceRange?null:this._priceRange.toRaw(),margins:this._margins||void 0}}static fromRaw(t){return null===t?null:new pt(ft.fromRaw(t.priceRange),t.margins)}}class mt extends nt{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 vt extends O{constructor(t,i){super(),this._series=t,this._priceLine=i}_updateRendererData(t,i,s){t.visible=!1,i.visible=!1;const h=this._priceLine.options(),e=h.axisLabelVisible,n=""!==h.title,r=this._series;if(!e||!r.visible())return;const o=this._priceLine.yCoord();if(null===o)return;n&&(i.text=h.title,i.visible=!0),i.borderColor=r.model().backgroundColorAtYPercentFromTop(o/r.priceScale().height()),t.text=this._formatPrice(h.price),t.visible=!0;const l=this._series.model().colorParser().generateContrastColors(h.axisLabelColor||h.color);s.background=l.background;const a=h.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 wt{constructor(t,i){this._series=t,this._options=i,this._priceLineView=new mt(t,this),this._priceAxisView=new vt(t,this),this._panePriceAxisView=new ht(this._priceAxisView,t,t.model())}applyOptions(t){u(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 gt extends U{constructor(t){super(),this._model=t}model(){return this._model}}const Mt={Bar:(t,i,s,h)=>{const e=i.upColor,n=i.downColor,r=o(t(s,h)),a=l(r.value[0])<=l(r.value[3]);return{barColor:r.color??(a?e:n)}},Candlestick:(t,i,s,h)=>{const e=i.upColor,n=i.downColor,r=i.borderUpColor,a=i.borderDownColor,u=i.wickUpColor,c=i.wickDownColor,d=o(t(s,h)),f=l(d.value[0])<=l(d.value[3]);return{barColor:d.color??(f?e:n),barBorderColor:d.borderColor??(f?r:a),barWickColor:d.wickColor??(f?u:c)}},Custom:(t,i,s,h)=>({barColor:o(t(s,h)).color??i.color}),Area:(t,i,s,h)=>{const e=o(t(s,h));return{barColor:e.lineColor??i.lineColor,lineColor:e.lineColor??i.lineColor,topColor:e.topColor??i.topColor,bottomColor:e.bottomColor??i.bottomColor}},Baseline:(t,i,s,h)=>{const e=o(t(s,h));return{barColor:e.value[3]>=i.baseValue.price?i.topLineColor:i.bottomLineColor,topLineColor:e.topLineColor??i.topLineColor,bottomLineColor:e.bottomLineColor??i.bottomLineColor,topFillColor1:e.topFillColor1??i.topFillColor1,topFillColor2:e.topFillColor2??i.topFillColor2,bottomFillColor1:e.bottomFillColor1??i.bottomFillColor1,bottomFillColor2:e.bottomFillColor2??i.bottomFillColor2}},Line:(t,i,s,h)=>{const e=o(t(s,h));return{barColor:e.color??i.color,lineColor:e.color??i.color}},Histogram:(t,i,s,h)=>({barColor:o(t(s,h)).color??i.color})};class bt{constructor(t){this._findBar=(t,i)=>void 0!==i?i.value:this._series.bars().valueAt(t),this._series=t,this._styleGetter=Mt[t.seriesType()]}barStyle(t,i){return this._styleGetter(this._findBar,this._series.options(),t,i)}}function Ct(t,i,s,h,e=0,n=i.length){let r=n-e;for(;0<r;){const n=r>>1,o=e+n;h(i[o],s)===t?(e=o+1,r-=n+1):r=n}return e}const St=Ct.bind(null,!0),xt=Ct.bind(null,!1);var _t;!function(t){t[t.NearestLeft=-1]="NearestLeft",t[t.None=0]="None",t[t.NearestRight=1]="NearestRight"}(_t||(_t={}));const Pt=30;class yt{constructor(){this._items=[],this._minMaxCache=new Map,this._rowSearchCache=new Map,this._indices=[]}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:{...this._valueAt(s),index:this._indexAt(s)}}rows(){return this._items}minMaxOnRangeCached(t,i,s){if(this.isEmpty())return null;let h=null;for(const e of s){h=kt(h,this._minMaxOnRangeCachedImpl(t,i,e))}return h}setData(t){this._rowSearchCache.clear(),this._minMaxCache.clear(),this._items=t,this._indices=t.map((t=>t.index))}indices(){return this._indices}_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?i:null}_searchNearestRight(t){const i=this._upperbound(t);return i!==this._items.length&&t<this._indexAt(i)?i:null}_bsearch(t){const i=this._lowerbound(t);return i===this._items.length||t<this._items[i].index?null:i}_lowerbound(t){return St(this._items,t,((t,i)=>t.index<i))}_upperbound(t){return xt(this._items,t,((t,i)=>t.index>i))}_plotMinMax(t,i,s){let h=null;for(let e=t;e<i;e++){const t=this._items[e].value[s];Number.isNaN(t)||(null===h?h={min:t,max:t}:(t<h.min&&(h.min=t),t>h.max&&(h.max=t)))}return h}_minMaxOnRangeCachedImpl(t,i,s){if(this.isEmpty())return null;let h=null;const e=o(this.firstIndex()),n=o(this.lastIndex()),r=Math.max(t,e),l=Math.min(i,n),a=Math.ceil(r/Pt)*Pt,u=Math.max(a,Math.floor(l/Pt)*Pt);{const t=this._lowerbound(r),e=this._upperbound(Math.min(l,a,i));h=kt(h,this._plotMinMax(t,e,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,r);t<u;t+=Pt){const i=Math.floor(t/Pt);let e=c.get(i);if(void 0===e){const t=this._lowerbound(i*Pt),h=this._upperbound((i+1)*Pt-1);e=this._plotMinMax(t,h,s),c.set(i,e)}h=kt(h,e)}{const t=this._lowerbound(u),i=this._upperbound(l);h=kt(h,this._plotMinMax(t,i,s))}return h}}function kt(t,i){if(null===t)return i;if(null===i)return t;return{min:Math.min(t.min,i.min),max:Math.max(t.max,i.max)}}class Tt{constructor(t){this._baseRenderer=t}draw(t,i,s){this._baseRenderer.draw(t)}drawBackground(t,i,s){this._baseRenderer.drawBackground?.(t)}}class Rt{constructor(t){this._cache=null,this._paneView=t}renderer(){const t=this._paneView.renderer();if(null===t)return null;if(this._cache?.base===t)return this._cache.wrapper;const i=new Tt(t);return this._cache={base:t,wrapper:i},i}zOrder(){return this._paneView.zOrder?.()??"normal"}}class Dt{constructor(t){this._paneViewsCache=null,this._primitive=t}primitive(){return this._primitive}updateAllViews(){this._primitive.updateAllViews?.()}paneViews(){const t=this._primitive.paneViews?.()??[];if(this._paneViewsCache?.base===t)return this._paneViewsCache.wrapper;const i=t.map((t=>new Rt(t)));return this._paneViewsCache={base:t,wrapper:i},i}hitTest(t,i){return this._primitive.hitTest?.(t,i)??null}}let Vt=class extends Dt{labelPaneViews(){return[]}};class zt{constructor(t){this._baseRenderer=t}draw(t,i,s){this._baseRenderer.draw(t)}drawBackground(t,i,s){this._baseRenderer.drawBackground?.(t)}}class Et{constructor(t){this._cache=null,this._paneView=t}renderer(){const t=this._paneView.renderer();if(null===t)return null;if(this._cache?.base===t)return this._cache.wrapper;const i=new zt(t);return this._cache={base:t,wrapper:i},i}zOrder(){return this._paneView.zOrder?.()??"normal"}}function It(t){return{text:t.text(),coordinate:t.coordinate(),fixedCoordinate:t.fixedCoordinate?.(),color:t.textColor(),background:t.backColor(),visible:t.visible?.()??!0,tickVisible:t.tickVisible?.()??!0}}class At{constructor(t,i){this._renderer=new H,this._baseView=t,this._timeScale=i}renderer(){return this._renderer.setData({width:this._timeScale.width(),...It(this._baseView)}),this._renderer}}class Bt extends O{constructor(t,i){super(),this._baseView=t,this._priceScale=i}_updateRendererData(t,i,s){const h=It(this._baseView);s.background=h.background,t.color=h.color;const e=2/12*this._priceScale.fontSize();s.additionalPaddingTop=e,s.additionalPaddingBottom=e,s.coordinate=h.coordinate,s.fixedCoordinate=h.fixedCoordinate,t.text=h.text,t.visible=h.visible,t.tickVisible=h.tickVisible}}class Lt extends Dt{constructor(t,i){super(t),this._timeAxisViewsCache=null,this._priceAxisViewsCache=null,this._priceAxisPaneViewsCache=null,this._timeAxisPaneViewsCache=null,this._series=i}timeAxisViews(){const t=this._primitive.timeAxisViews?.()??[];if(this._timeAxisViewsCache?.base===t)return this._timeAxisViewsCache.wrapper;const i=this._series.model().timeScale(),s=t.map((t=>new At(t,i)));return this._timeAxisViewsCache={base:t,wrapper:s},s}priceAxisViews(){const t=this._primitive.priceAxisViews?.()??[];if(this._priceAxisViewsCache?.base===t)return this._priceAxisViewsCache.wrapper;const i=this._series.priceScale(),s=t.map((t=>new Bt(t,i)));return this._priceAxisViewsCache={base:t,wrapper:s},s}priceAxisPaneViews(){const t=this._primitive.priceAxisPaneViews?.()??[];if(this._priceAxisPaneViewsCache?.base===t)return this._priceAxisPaneViewsCache.wrapper;const i=t.map((t=>new Et(t)));return this._priceAxisPaneViewsCache={base:t,wrapper:i},i}timeAxisPaneViews(){const t=this._primitive.timeAxisPaneViews?.()??[];if(this._timeAxisPaneViewsCache?.base===t)return this._timeAxisPaneViewsCache.wrapper;const i=t.map((t=>new Et(t)));return this._timeAxisPaneViewsCache={base:t,wrapper:i},i}autoscaleInfo(t,i){return this._primitive.autoscaleInfo?.(t,i)??null}}function Ot(t,i,s,h){t.forEach((t=>{i(t).forEach((t=>{t.zOrder()===s&&h.push(t)}))}))}function Nt(t){return t.paneViews()}function Wt(t){return t.priceAxisPaneViews()}function Ht(t){return t.timeAxisPaneViews()}const Ft=["Area","Line","Baseline"];class Ut extends gt{constructor(t,i,s,h,e){super(t),this._data=new yt,this._priceLineView=new ut(this),this._customPriceLines=[],this._baseHorizontalLineView=new rt(this),this._lastPriceAnimationPaneView=null,this._barColorerCache=null,this._animationTimeoutId=null,this._primitives=[],Number.isFinite(s.zOrder)&&this.setZorder(s.zOrder),this._options=s,this._seriesType=i;const n=new ct(this);this._priceAxisViews=[n],this._panePriceAxisView=new ht(n,this,t),Ft.includes(this._seriesType)&&(this._lastPriceAnimationPaneView=new at(this)),this._recreateFormatter(),this._paneView=h(this,this.model(),e)}destroy(){null!==this._animationTimeoutId&&clearTimeout(this._animationTimeoutId)}priceLineColor(t){return this._options.priceLineColor||t}lastValueData(t){const i={noData:!0},s=this.priceScale();if(this.model().timeScale().isEmpty()||s.isEmpty()||this._data.isEmpty())return i;const h=this.model().timeScale().visibleStrictRange(),e=this.firstValue();if(null===h||null===e)return i;let n,r;if(t){const t=this._data.last();if(null===t)return i;n=t,r=t.index}else{const t=this._data.search(h.right(),-1);if(null===t)return i;if(n=this._data.valueAt(t.index),null===n)return i;r=t.index}const o=n.value[3],l=this.barColorer().barStyle(r,{value:n}),a=s.priceToCoordinate(o,e.value);return{noData:!1,price:o,text:s.formatPrice(o,e.value),formattedPriceAbsolute:s.formatPriceAbsolute(o),formattedPricePercentage:s.formatPricePercentage(o,e.value),color:l.barColor,coordinate:a,index:r}}barColorer(){return null!==this._barColorerCache||(this._barColorerCache=new bt(this)),this._barColorerCache}options(){return this._options}applyOptions(t){const i=t.priceScaleId;void 0!==i&&i!==this._options.priceScaleId&&this.model().moveSeriesToScale(this,i),u(this._options,t),void 0!==t.priceFormat&&(this._recreateFormatter(),this.model().fullUpdate()),this.model().updateSource(this),this.model().updateCrosshair(),this._paneView.update("options")}setData(t,i){this._priceScale?.autoScaleNewData(),this._data.setData(t),this._paneView.update("data"),null!==this._lastPriceAnimationPaneView&&(i&&i.lastBarUpdatedOrNewBarsAddedToTheRight?this._lastPriceAnimationPaneView.onNewRealtimeDataReceived():0===t.length&&this._lastPriceAnimationPaneView.onDataCleared());const s=this.model().paneForSource(this);this.model().recalculatePane(s),this.model().updateSource(this),this.model().updateCrosshair(),this.model().lightUpdate()}createPriceLine(t){const i=new wt(this,t);return this._customPriceLines.push(i),this.model().updateSource(this),i}removePriceLine(t){const i=this._customPriceLines.indexOf(t);-1!==i&&this._customPriceLines.splice(i,1),this.model().updateSource(this)}priceLines(){return this._customPriceLines}seriesType(){return this._seriesType}firstValue(){const t=this.firstBar();return null===t?null:{value:t.value[3],timePoint:t.time}}firstBar(){const t=this.model().timeScale().visibleStrictRange();if(null===t)return null;const i=t.left();return this._data.search(i,1)}bars(){return this._data}dataAt(t){const i=this._data.valueAt(t);return null===i?null:"Bar"===this._seriesType||"Candlestick"===this._seriesType||"Custom"===this._seriesType?{open:i.value[0],high:i.value[1],low:i.value[2],close:i.value[3]}:i.value[3]}topPaneViews(t){const i=[];Ot(this._primitives,Nt,"top",i);const s=this._lastPriceAnimationPaneView;return null!==s&&s.visible()?(null===this._animationTimeoutId&&s.animationActive()&&(this._animationTimeoutId=setTimeout((()=>{this._animationTimeoutId=null,this.model().cursorUpdate()}),0)),s.invalidateStage(),i.unshift(s),i):i}paneViews(){const t=[];this._isOverlay()||t.push(this._baseHorizontalLineView),t.push(this._paneView,this._priceLineView);const i=this._customPriceLines.map((t=>t.paneView()));return t.push(...i),Ot(this._primitives,Nt,"normal",t),t}bottomPaneViews(){return this._extractPaneViews(Nt,"bottom")}pricePaneViews(t){return this._extractPaneViews(Wt,t)}timePaneViews(t){return this._extractPaneViews(Ht,t)}primitiveHitTest(t,i){return this._primitives.map((s=>s.hitTest(t,i))).filter((t=>null!==t))}labelPaneViews(){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 this._primitives.forEach((t=>{s.push(...t.priceAxisViews())})),s}timeAxisViews(){const t=[];return this._primitives.forEach((i=>{t.push(...i.timeAxisViews())})),t}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 pt.fromRaw(s)}return this._autoscaleInfoImpl(t,i)}minMove(){return this._options.priceFormat.minMove}formatter(){return this._formatter}updateAllViews(){this._paneView.update();for(const t of this._priceAxisViews)t.update();for(const t of this._customPriceLines)t.update();this._priceLineView.update(),this._baseHorizontalLineView.update(),this._lastPriceAnimationPaneView?.update(),this._primitives.forEach((t=>t.updateAllViews()))}priceScale(){return o(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._marker