UNPKG

@santiment-network/chart

Version:
7 lines 299 kB
/*! * @license * TradingView Lightweight Charts™ v1.0.22 * Copyright (c) 2026 TradingView, Inc. * Licensed under Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0 */ !function(){"use strict";const t={title:"",visible:!0,opacity:1,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=function(t,i){switch(t){case 0:default:return[];case 1:return[i,i];case 2:return[2*i,2*i];case 3:return[6*i,6*i];case 4:return[i,4*i]}}(i,t.lineWidth);return t.setLineDash(s),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 y{draw(t,i,s){t.useBitmapCoordinateSpace((t=>this._drawImpl(t,i,s)))}}class P extends y{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 P;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 y{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 I(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 z(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 B(t,i,s,h,e,n,r=0,o=[0,0,0,0],l=""){if(t.save(),!r||!l||l===n)return z(t,i,s,h,e,o),t.fillStyle=n,t.fill(),void t.restore();const a=r/2;var u;z(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 A(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?B(r,l.xOutside,l.yTop,l.totalWidth,l.totalHeight,n,l.horzBorder,[l.radius,0,0,l.radius],n):B(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),y=Math.round(a*o),P=this._commonData.fixedCoordinate??this._commonData.renderCoordinate??this._commonData.coordinate,k=Math.round(P*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,I=D?n.width-x:x;let E,z,B;return D?(E=I-_,z=I-y,B=V-a-f-u):(E=I+_,z=I+y,B=V+a+f),{alignRight:D,bitmap:{yTop:T,yMid:k,yBottom:R,totalWidth:_,totalHeight:S,radius:2*o,horzBorder:x,xOutside:E,xInside:I,xTick:z,tickHeight:C,right:n.width},media:{yTop:T/l,yBottom:R/l,xText:B,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??null}getRenderCoordinate(){return this._commonRendererData.fixedCoordinate??this._commonRendererData.renderCoordinate??this.coordinate()}setRenderCoordinate(t){this._commonRendererData.renderCoordinate=t??void 0}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 F{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 H{constructor(t,i,s){this._invalidated=!0,this._renderer=new F,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 H(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()}snapToVisibleSeriesIfNeeded(t){if(!this._options.doNotSnapToHiddenSeriesIndices)return t;const i=this._model,s=i.timeScale();let h=null,e=null;for(const s of i.visibleSerieses()){const i=s.bars().search(t,-1);if(i){if(i.index===t)return t;(null===h||i.index>h)&&(h=i.index)}const n=s.bars().search(t,1);if(n){if(n.index===t)return t;(null===e||n.index<e)&&(e=n.index)}}const n=[h,e].filter(v);if(0===n.length)return t;const r=s.indexToCoordinate(t),o=n.map((t=>Math.abs(r-s.indexToCoordinate(t))));return n[o.indexOf(Math.min(...o))]}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 G{formatTickmarks(t){return t.map((t=>this.format(t)))}}const K=".";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 X extends G{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=K+Z(+n.toFixed(this._fractionalLength)*this._minMove,e)}else s=Math.round(s*i)/i,e>0&&(h=K+Z(0,e));return s.toFixed(0)+h}}class J extends X{constructor(t=100){super(t)}format(t){return`${super.format(t)}%`}}class Q extends G{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 y{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 y{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)}}const mt=[2,4,8,16,32,64,128,256,512],vt="Custom series with conflation reducer must have a priceValueBuilder method";class wt 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 gt 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 Mt{constructor(t,i){this._series=t,this._options=i,this._priceLineView=new wt(t,this),this._priceAxisView=new gt(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 bt{constructor(){this._dataCache=new WeakMap}calculateConflationLevelWithSmoothing(t,i,s){const h=1/i*s;if(t>=h)return 1;const e=h/t,n=Math.pow(2,Math.floor(Math.log2(e)));return Math.min(n,512)}conflateByFactor(t,i,s,h=!1,e){if(0===t.length||i<=1)return t;const n=this._normalizeConflationLevel(i);if(n<=1)return t;const r=this._getValidatedCacheEntry(t);let o=r.levelResults.get(n);return void 0!==o||(o=this._buildRecursively(t,n,s,h,e,r.levelResults),r.levelResults.set(n,o)),o}updateLastConflatedChunk(t,i,s,h,e=!1,n){if(s<1||0===t.length)return t;const r=this._getValidatedCacheEntry(t),o=r.levelResults.get(s);if(!o)return this.conflateByFactor(t,s,h,e,n);const l=this._updateLastChunkInCache(t,i,s,o,e,h,n);return r.levelResults.set(s,l),l}_normalizeConflationLevel(t){if(t<=2)return 2;for(const i of mt)if(t<=i)return i;return 512}_getDataVersion(t){if(0===t.length)return 0;const i=t[0],s=t[t.length-1];return 31*t.length+17*i.index+13*s.index}_buildRecursively(t,i,s,h=!1,e,n=new Map){if(2===i)return this._buildLevelFromOriginal(t,2,s,h,e);const r=i/2;let o=n.get(r);return o||(o=this._buildRecursively(t,r,s,h,e,n),n.set(r,o)),this._buildLevelFromPrevious(o,s,h,e)}_buildLevelFromOriginal(t,i,s,h=!1,e){const n=this._buildChunksFromData(t,i,s,h,e);return this._chunksToSeriesPlotRows(n,h)}_buildLevelFromPrevious(t,i,s=!1,h){const e=this._buildChunksFromData(t,2,i,s,h);return this._chunksToSeriesPlotRows(e,s)}_buildChunksFromData(t,i,s,h=!1,e){const n=[];for(let r=0;r<t.length;r+=i){if(t.length-r>=i){const i=this._mergeTwoRows(t[r],t[r+1],s,h,e);i.isRemainder=!1,n.push(i)}else if(0===n.length)n.push(this._plotRowToChunk(t[r],!0));else{const i=n[n.length-1];n[n.length-1]=this._mergeChunkAndRow(i,t[r],s,h,e)}}return n}_sumCount(t,i){return(t??1)+(i??1)}_mergeTwoRows(t,i,s,h=!1,e){if(!h||!s||!e){const s=t.value[1]>i.value[1]?t.value[1]:i.value[1],h=t.value[2]<i.value[2]?t.value[2]:i.value[2];return{startIndex:t.index,endIndex:i.index,startTime:t.time,endTime:i.time,open:t.value[0],high:s,low:h,close:i.value[3],originalDataCount:this._sumCount(t.originalDataCount,i.originalDataCount),conflatedData:void 0,isRemainder:!1}}const n=s(this._convertToContext(t,e),this._convertToContext(i,e)),r=e(n),o=r.length?r[r.length-1]:0;return{startIndex:t.index,endIndex:i.index,startTime:t.time,endTime:i.time,open:t.value[0],high:Math.max(t.value[1],o),low:Math.min(t.value[2],o),close:o,originalDataCount:this._sumCount(t.originalDataCount,i.originalDataCount),conflatedData:n,isRemainder:!1}}_mergeChunkAndRow(t,i,s,h=!1,e){if(!h||!s||!e)return{startIndex:t.startIndex,endIndex:i.index,startTime:t.startTime,endTime:i.time,open:t.open,high:t.high>i.value[1]?t.high:i.value[1],low:t.low<i.value[2]?t.low:i.value[2],close:i.value[3],originalDataCount:t.originalDataCount+(i.originalDataCount??1),conflatedData:t.conflatedData,isRemainder:!1};const n=t.conflatedData,r=this._convertToContext(i,e),o=n?{data:n,index:t.startIndex,originalTime:t.startTime,time:t.startTime,priceValues:e(n)}:null,l=o?s(o,r):r.data,a=o?e(l):r.priceValues,u=a.length?a[a.length-1]:0;return{startIndex:t.startIndex,endIndex:i.index,startTime:t.startTime,endTime:i.time,open:t.open,high:Math.max(t.high,u),low:Math.min(t.low,u),close:u,originalDataCount:t.originalDataCount+(i.originalDataCount??1),conflatedData:l,isRemainder:!1}}_mergeRangeWithOverride(t,i,s,h,e,n,r=!1,o){const l=i===h?e:t[i];if(s-i==1)return this._plotRowToChunk(l,!0);const a=i+1===h?e:t[i+1];let u=this._mergeTwoRows(l,a,n,r,o);for(let l=i+2;l<s;l++){const i=l===h?e:t[l];u=this._mergeChunkAndRow(u,i,n,r,o)}return u}_convertToContext(t,i){const s=t.data??{};return{data:t.data,index:t.index,originalTime:t.originalTime,time:t.time,priceValues:i(s)}}_chunkToSeriesPlotRow(t,i=!1){const s=!0===i,h=!!t.conflatedData;return{...{index:t.startIndex,time:t.startTime,originalTime:t.startTime,value:[s?t.close:t.open,t.high,t.low,t.close],originalDataCount:t.originalDataCount},data:s?h?t.conflatedData:{time:t.startTime}:void 0}}_chunksToSeriesPlotRows(t,i=!1){return t.map((t=>this._chunkToSeriesPlotRow(t,i)))}_updateLastChunkInCache(t,i,s,h,e=!1,n,r){if(0===h.length)return h;const o=t.length-1,l=Math.floor(o/s)*s;if(Math.min(l+s,t.length)-l<s&&t.length>s){const h=t.slice();return h[h.length-1]=i,this.conflateByFactor(h,s,n,e,r)}if(Math.floor((o-1)/s)===Math.floor(o/s)||1===h.length){const a=Math.min(l+s,t.length),u=a-l;if(u<=0)return h;const c=1===u?this._plotRowToChunk(l===o?i:t[l],!0):this._mergeRangeWithOverride(t,l,a,o,i,n,e,r);return h[h.length-1]=this._chunkToSeriesPlotRow(c,e),h}{const h=t.slice();return h[h.length-1]=i,this.conflateByFactor(h,s,n,e,r)}}_plotRowToChunk(t,i=!1){return{startIndex:t.index,endIndex:t.index,startTime:t.time,endTime:t.time,open:t.value[0],high:t.value[1],low:t.value[2],close:t.value[3],originalDataCount:t.originalDataCount??1,conflatedData:t.data,isRemainder:i}}_getValidatedCacheEntry(t){const i=this._ensureCacheEntry(t),s=this._getDataVersion(t);return i.version!==s&&(i.levelResults.clear(),i.version=s),i}_ensureCacheEntry(t){let i=this._dataCache.get(t);return void 0===i&&(i={version:this._getDataVersion(t),levelResults:new Map},this._dataCache.set(t,i)),i}}class Ct extends U{constructor(t){super(),this._model=t}model(){return this._model}}const St={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 xt{constructor(t){this._findBar=(t,i)=>void 0!==i?i.value:this._series.bars().valueAt(t),this._series=t,this._styleGetter=St[t.seriesType()]}barStyle(t,i){return this._styleGetter(this._findBar,this._series.options(),t,i)}}function _t(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 yt=_t.bind(null,!0),Pt=_t.bind(null,!1);var kt;!function(t){t[t.NearestLeft=-1]="NearestLeft",t[t.None=0]="None",t[t.NearestRight=1]="NearestRight"}(kt||(kt={}));const Tt=30;class Rt{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=Dt(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 yt(this._items,t,((t,i)=>t.index<i))}_upperbound(t){return Pt(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/Tt)*Tt,u=Math.max(a,Math.floor(l/Tt)*Tt);{const t=this._lowerbound(r),e=this._upperbound(Math.min(l,a,i));h=Dt(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+=Tt){const i=Math.floor(t/Tt);let e=c.get(i);if(void 0===e){const t=this._lowerbound(i*Tt),h=this._upperbound((i+1)*Tt-1);e=this._plotMinMax(t,h,s),c.set(i,e)}h=Dt(h,e)}{const t=this._lowerbound(u),i=this._upperbound(l);h=Dt(h,this._plotMinMax(t,i,s))}return h}}function Dt(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)}}function Vt(){return new Rt}const It={setLineStyle:h};class Et{constructor(t){this._baseRenderer=t}draw(t,i,s){this._baseRenderer.draw(t,It)}drawBackground(t,i,s){this._baseRenderer.drawBackground?.(t,It)}}class zt{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 Et(t);return this._cache={base:t,wrapper:i},i}zOrder(){return this._paneView.zOrder?.()??"normal"}}class Bt{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 zt(t)));return this._paneViewsCache={base:t,wrapper:i},i}hitTest(t,i){return this._primitive.hitTest?.(t,i)??null}}let At=class extends Bt{labelPaneViews(){return[]}};class Lt{constructor(t){this._baseRenderer=t}draw(t,i,s){this._baseRenderer.draw(t,It)}drawBackground(t,i,s){this._baseRenderer.drawBackground?.(t,It)}}class Ot{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 Lt(t);return this._cache={base:t,wrapper:i},i}zOrder(){return this._paneView.zOrder?.()??"normal"}}function Nt(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 Wt{constructor(t,i){this._renderer=new F,this._baseView=t,this._timeScale=i}renderer(){return this._renderer.setData({width:this._timeScale.width(),...Nt(this._baseView)}),this._renderer}}class Ft extends O{constructor(t,i){super(),this._baseView=t,this._priceScale=i}_updateRendererData(t,i,s){const h=Nt(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 Ht extends Bt{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 Wt(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 Ft(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 Ot(t)));return this._priceAxisPaneViewsCache={ba