acttrader-charts 1.3.0-beta.25 → 1.3.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1013,6 +1013,12 @@ it on the next load with `crosshairEnabled: false`. `enableCrosshairToggle` is t
1013
1013
  name of the same flag and still works. Native wrappers get the same switch via their
1014
1014
  `enableCrossHairHeader` init option, the `onCrosshairToggle` callback and `setCrosshairEnabled()`.
1015
1015
 
1016
+ ### Native UI catalog (webview bridge only)
1017
+
1018
+ The webview bridge used by the Android and iOS wrappers posts a **`catalog`** event right after every `init` command, and again on the **`getCatalog`** command (which also works before `init`). It lists everything a native app needs to build its own header, drawing-tools sheet, indicators list and chart-settings screen: timeframes, chart types, cursors, drawing tool groups (with point counts and style fields), drawing-toolbar options, indicators (with pane and editable settings fields), the Chart Settings dialog (tabs → sections → items with types, options and defaults), canvas colour keys, price sources and limits. Every entry carries `available` (`true` = works in this version, `false` = planned). `catalogVersion` is the library version, stamped at build time.
1019
+
1020
+ Source: `src/core/mobileCatalog.ts`. `src/__tests__/mobileCatalog.test.ts` fails the build if an `available: true` id does not exist in the engine, or an engine tool / indicator is missing from the catalog — update the catalog together with any new chart type, tool or indicator. The web `ChartEngine` API is unchanged.
1021
+
1016
1022
  ### Viewport
1017
1023
 
1018
1024
  ```ts
@@ -275,6 +275,6 @@
275
275
  .${Md}:hover,
276
276
  .${Md}:focus-visible { text-decoration: underline; }
277
277
  .${Md}:focus { outline: none; }
278
- `,document.head.appendChild(e)}function Pd(){return typeof window<`u`&&(`ontouchstart`in window||navigator.maxTouchPoints>1)}function Fd(e=2,t=!1,n=Od,r,i,a){if(i&&i>0&&a&&a>0){let e=Math.floor(i/a);return Math.max(10,Math.min(500,e))}return!t&&!Pd()?n:r===void 0?Math.max(10,Math.round(n/e)):r}var Id=4;function Ld(e,t){let n=(e.min+e.max)/2,r=(e.max-e.min)/2;return{min:n-r*t,max:n+r*t}}function Rd(e){let t=e.max-e.min;return t>=100?0:t>=10?1:t>=1?2:t>=.1?3:4}var zd=class n{get _tb(){var e,t,n;return(e=(t=(n=this.topBar)==null?this.advancedToolbar:n)==null?this.compactToolbar:t)==null?this.mobileHeader:e}visibleStates(){return this.activeIndicators.filter(e=>{if(!e.visible)return!1;let t=e.currentParams.timeframe;return!(t&&t!==`Chart`&&t!==this.timeframe)})}get indicators(){return this.visibleStates().map(e=>e.indicator)}scheduleViewportPersist(){this._viewportPersistTimer&&clearTimeout(this._viewportPersistTimer),this._viewportPersistTimer=setTimeout(()=>{this._viewportPersistTimer=null,this.emitStateChange()},500)}get isFullscreen(){return this._isCssFullscreen||!!document.fullscreenElement}get _isTradingActive(){var e,t,n,r,i,a,o,s;return((e=(t=this.tradePopover)==null?void 0:t.isVisible)==null?!1:e)||((n=(r=this.tradeActionBar)==null?void 0:r.isVisible)==null?!1:n)||this.draftOrderLabel!==null||((i=(a=this.tradeDragHandler)==null?void 0:a.active)==null?!1:i)||((o=(s=this.orderTimeDragHandler)==null?void 0:s.active)==null?!1:o)||this.pendingLevelDrags.size>0}_enabledGates(){var e;return Object.entries((e=this._features)==null?{}:e).filter(([,e])=>e===!0).map(([e])=>e)}constructor(i){var a,o,c,l,u,f,p,m,h,v,y,b,x,S,C,w,T,E,D,k,j,M,N,P,F,I,R,z,V,ee,te,ne,re;if(this.topBar=null,this.advancedToolbar=null,this.compactToolbar=null,this.mobileHeader=null,this.bottomBar=null,this.leftBar=null,this.leftBarVisible=!0,this.layoutPopover=null,this.snapshotPopover=null,this.currentPresetId=`1`,this.currentSync={...pi},this.drawingToolsEnabled=!0,this.settingsEnabled=!0,this.fullscreenEnabled=!0,this._mobileLayout=!1,this.indicatorOverlay=null,this.subPaneOverlays=new Map,this.isinPickerModal=null,this.isins=[],this.compareManager=null,this.compareLegend=null,this.comparePickerModal=null,this.compareDataLoader=null,this.compareHoveredIndex=null,this.siEl=null,this.siStreamDot=null,this.siSymbolSpan=null,this.siOHLCSpan=null,this.siOHLC2Span=null,this.tickActivityTimer=null,this.tickActivityMs=3e4,this.streamStatus=`disconnected`,this._isDestroyed=!1,this.indicatorSettingsDialog=null,this.chartSettingsDialog=null,this.tradeButton=null,this.tradePopover=null,this.tradeActionBar=null,this._onAddAlert=null,this.drawingStylePopover=null,this.draftOrderLabel=null,this._minLots=1,this._showQuantityField=!1,this._qtyFieldMin=1,this._qtyFieldMax=100,this._draftQtyFlyout=null,this._draftQtyPillArea=void 0,this._activeQtyPillLabel=void 0,this.pendingQtyChanges=new Map,this.originalQtyByLabel=new Map,this._onOrderSubmit=void 0,this.scrollToEndBtn=null,this.scrollToEndVisible=!1,this.scrollAnimId=null,this.resetViewBtn=null,this.resetViewVisible=!1,this._defaultVisibleBars=Od,this.dataStore=new t,this.scaleManager=new r,this.emitter=new s,this.themeName=`dark`,this._debug=!1,this.symbol=``,this.resolvedInstrument=null,this.resolvedInstrumentPrecision=-1,this.showBidAskLines=!1,this.showActLogo=!1,this.hideLevelConfirmCancel=!1,this.deselectActiveOnOutsideClick=!1,this.tradeLevelButtonScale=1,this.tradeLevelBadgeScale=1,this.tradeLevelBadgeAnchor=`auto`,this._bracketLabel={...Ye},this.levelClusteringEnabled=!0,this.clusterThresholdDistance=20,this.enableThemeToggle=!1,this.activeIndicators=[],this.indicatorInstanceSeq=0,this.indicatorResults=new Map,this.viewport={startIndex:0,endIndex:Fd(),candleWidth:8,candleGap:2},this._targetViewport={startIndex:0,endIndex:Fd(),candleWidth:8,candleGap:2},this._isPanning=!1,this.crosshair=null,this.drawingManager=new cl,this.textInputEl=null,this.textInputDrawing=null,this._pendingDrawDrag=null,this._pendingDrawResize=null,this._pendingTradeDrag=null,this.paneHeightOverrides=new Map,this.separatorDrag=null,this.priceAxisWidth=Cd,this.timeAxisHeight=wd,this.priceScaleFactor=1,this.pricePanOffset=0,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this._lastInCompareMode=!1,this._pendingViewportRestore=null,this._viewportPersistTimer=null,this.axisDrag=null,this.subPaneScaleFactors=new Map,this._mobileCrosshairActive=!1,this._mobileTapStartXY=null,this._longPressTimer=null,this._longPressPoint=null,this._lastTouchTime=0,this._tradeButtonClickData=null,this.disposeVvListener=()=>{},this.rafId=null,this.countdownRafId=null,this.countdownActive=!1,this._cachedWrapRect=null,this._cachedDrawRect=null,this._drawTouchAnchorActive=!1,this._lastDrawingTouchPoint=null,this._drawTouchStartXY=null,this._mobileDrawingFlyout=null,this._isCssFullscreen=!1,this.timezone=`UTC`,this.settingsCanvasColors={},this.streamAdapter=null,this.liveBidAsk=null,this.liveLtp=null,this.tickClosePriceSource=`bid`,this._reloadOnPriceSourceChange=!0,this._suppressTicks=!1,this.levels=[],this.tradeLevelHitAreas=[],this.offViewportHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeLevelDragAreas=[],this.tradeLevelConfirmAreas=[],this.tradeAddBracketAreas=[],this.clusterBadgeAreas=[],this.lastClusters=[],this.expandedClusters=new Set,this.hoveredTradeLabel=null,this.selectedTradeLabel=null,this._editOpenLabel=null,this.draftBracketPnl={},this.tradeDragHandler=null,this.orderTimeDragHandler=null,this.tradeDragNewBarIndex=null,this.pnlPill=null,this.pnlPillExpanded=!1,this._pnlPillExpandPass=!1,this.pnlPillVisible=!0,this._orderTimeDragEnabled=!1,this._orderLineDragSnap=!0,this._timeAnchorOverride=new Map,this._orderLineAnchorStore=null,this._orderLineDefaultAnchor=`timestamp`,this.tradeDragNewPrice=null,this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null,this._pendingBracketOrderLabel=null,this._slSiblingOrderLabel=null,this._tpSiblingOrderLabel=null,this._isBracketNew=!1,this.pendingLevelDrags=new Map,this.tfcEnabled=!0,this.crosshairEnabled=!0,this.tfcActive=!0,this.tradeDisplayFilter=`all`,this.positionRenderStyle=`dot`,this.tradesThresholdForHorizontalLine=2,this.positionRenderStyleOverride=null,this.RENDER_STYLE_LS_KEY=`finchart:positionRenderStyle`,this.dataLoader=null,this.isFetching=!1,this.noMoreData=!1,this._loadGeneration=0,this.maxCandles=200,this._durationTimeframeMap={..._i},this.minInitialBars=10,this.maxLookbackMs=365*24*60*60*1e3,this.prefetchThreshold=80,this.defaultVisibleBars=Od,this.defaultMobileVisibleBars=void 0,this.mobileBarDivisor=2,this.explicitMobileDivisor=!1,this._autoVisibleBars=!0,this.targetCandleWidth=kd,this.maxSubPanes=3,this.showCandleCountdown=!0,this.showTradeLevelsAlways=!1,this._revealNewBrackets=!1,this.showPriceAxisCountdown=!1,this.SHOW_SLTP_ALWAYS_LS_KEY=`finchart.showTradeLevelsAlways`,this.PRICE_AXIS_COUNTDOWN_LS_KEY=`finchart.showPriceAxisCountdown`,this.loadingOverlayEl=null,this.noDataOverlayEl=null,this.loadingLabelEl=null,this.noDataLabelEl=null,this.logoImage=null,this.isRestoringState=!1,this.onPointerEnter=()=>{this._cachedWrapRect=null,this._cachedDrawRect=null},this.onMouseMove=e=>{var t,r,i,a,o,s,c;if(this._mobileCrosshairActive||Date.now()-this._lastTouchTime<500)return;let l=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,u=e.clientX-l.left,d=e.clientY-l.top,{chartW:f,priceH:p}=this.getChartLayout(),m=(r=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):r,h=l.height-this.timeAxisHeight,g=u<f&&d<h,_=this.scaleManager.pixelToBarIndex(u,this.viewport,f),v=this.scaleManager.pixelToPrice(d,m,p),y=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(_))),b=(i=this.dataStore.all[y])==null?null:i;this.crosshair=g&&this.crosshairEnabled&&!((a=this.tradePopover)!=null&&a.isVisible)&&!((o=this.tradeActionBar)!=null&&o.isVisible)&&this.selectedTradeLabel===null?{x:u,y:d,barIndex:y,price:v,bar:b}:null,this.emitter.emit(`crosshair`,this.crosshair);let x=this.positionRenderStyle===`dot`&&this.hoveredTradeLabel!==null;if(this.tradeButton&&(g&&this.crosshairEnabled&&d>=0&&d<=p&&!this._isTradingActive&&!x?(this.tradeButton.setY(d),qt(d,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)?this.tradeButton.hide():this.tfcActive&&this.tradeButton.show(),this._tradeButtonClickData={price:v,y:d}):this.tradeButton.hide()),this._pendingDrawResize){let e=u-this._pendingDrawResize.startX,t=d-this._pendingDrawResize.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startResize(this._pendingDrawResize.drawing,this._pendingDrawResize.pointIndex,this._pendingDrawResize.handle),this._pendingDrawResize=null)}if(this._pendingDrawDrag){let e=u-this._pendingDrawDrag.startX,t=d-this._pendingDrawDrag.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startDrag(this._pendingDrawDrag.drawing,this.makeDrawingPoint(_,v)),this._pendingDrawDrag=null)}if(this.drawingManager.onMouseMove(this.makeDrawingPoint(_,v)),this.axisDrag){if(this.axisDrag.axis===`price`){let e=d-this.axisDrag.startPos;this.priceScaleFactor=Math.max(.1,Math.min(10,this.axisDrag.startSize*1.005**e))}else if(this.axisDrag.axis===`subpane`&&this.axisDrag.instanceId){let e=d-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.instanceId,t)}else{let e=u-this.axisDrag.startPos,t=Math.max(10,Math.min(500,Math.round(this.axisDrag.startSize+e*.5))),n=(this.viewport.startIndex+this.viewport.endIndex)/2,r=Math.max(0,n-t/2);this.viewport={...this.viewport,startIndex:r,endIndex:r+t},this._targetViewport={...this.viewport}}this.drawCanvas.style.cursor=this.axisDrag.axis===`time`?`ew-resize`:`ns-resize`,this.scheduleRender();return}if(this.separatorDrag){let e=this.separatorDrag.startY-d,t=Math.max(40,Math.min(300,this.separatorDrag.startH+e));this.paneHeightOverrides.set(this.separatorDrag.instanceId,t),this.drawCanvas.style.cursor=`ns-resize`,this.scheduleRender();return}if(this._pendingTradeDrag){var S;if(!this._upgradePendingTradeDrag(u,d))return;this.drawCanvas.style.cursor=(S=this.orderTimeDragHandler)!=null&&S.active?`grabbing`:`ns-resize`}if((s=this.orderTimeDragHandler)!=null&&s.active){let e=this.orderTimeDragHandler.onMove(u,this.scaleManager,this.viewport,f);this.tradeDragNewBarIndex=e,this.drawCanvas.style.cursor=`grabbing`,this.renderTradeLayer();let t=this.orderTimeDragHandler.dragLabel,n=e===null?void 0:this.barIndexToTimestamp(e);t&&e!==null&&n!==void 0&&this.emitter.emit(`orderLineMoving`,{label:t,toTimestamp:n,toBarIndex:e,isFullscreen:this.isFullscreen});return}if((c=this.tradeDragHandler)!=null&&c.active){var C,w,T;let e=this.tradeDragHandler.onMouseMove(d,this.scaleManager,m,p);if(this.tradeDragNewPrice=(C=e==null?void 0:e.newPrice)==null?null:C,this.tradeDragNewSLPrice=(w=e==null?void 0:e.derivedSLPrice)==null?null:w,this.tradeDragNewTPPrice=(T=e==null?void 0:e.derivedTPPrice)==null?null:T,this.drawCanvas.style.cursor=`ns-resize`,this.renderTradeLayer(),this.tradeDragNewPrice!==null&&e){let t=e.label.indexOf(`:`),n=t===-1?e.label:e.label.slice(0,t),r=t===-1?void 0:e.label.slice(t+1),i=this.levels.find(e=>e.label===n);i&&this.emitter.emit(`tradeLevelDrag`,{label:i.label,newPrice:this.tradeDragNewPrice,data:i.data,bracketType:r,...e.derivedSLPrice===void 0?{}:{derivedSLPrice:e.derivedSLPrice},...e.derivedTPPrice===void 0?{}:{derivedTPPrice:e.derivedTPPrice},isFullscreen:this.isFullscreen})}return}if(!this.drawingManager.getActiveTool()){var E;if(Oe(u,d,this.clusterBadgeAreas)||Dt(u,d,this.tradeLevelHitAreas)||Ot(u,d,this.tradeLevelEditAreas)||kt(u,d,this.tradeLevelConfirmAreas)||Kt(u,d,this.offViewportHitAreas)){this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}let e=jt(u,d,this.tradeLevelDragAreas);if(e){let t=this.levels.find(t=>t.label===e.label);this.drawCanvas.style.cursor=this._orderTimeDragEnabled&&e.timeDrag===!0?t&&this._needsDragAxisLock(e,t)?`move`:`grab`:`ns-resize`,e.label!==this.hoveredTradeLabel&&(this.hoveredTradeLabel=e.label,this.renderTradeLayer()),this.scheduleRender();return}let t=At(u,d,this.tradeHoverAreas),n=(E=t==null?void 0:t.label)==null?null:E;if(n!==this.hoveredTradeLabel&&(this.hoveredTradeLabel=n,this.renderTradeLayer()),this.positionRenderStyle===`dot`&&n!==null){this.crosshair=null,this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}if(this.getSeparatorPositions().find(e=>Math.abs(d-e.y)<=4))this.drawCanvas.style.cursor=`ns-resize`;else if(u>=f)this.drawCanvas.style.cursor=`ns-resize`;else if(d>=h)this.drawCanvas.style.cursor=`ew-resize`;else if(this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing())this.drawCanvas.style.cursor=`grabbing`;else{let e=this.drawingManager.getHandleAtPoint(u,d,this.scaleManager,this.viewport,m,f,p);if(e)this.drawCanvas.style.cursor=e.handle.cursor;else{let e=this.drawingManager.hitTest(u,d,this.scaleManager,this.viewport,m,f,p);this.drawCanvas.style.cursor=e?`move`:`default`}}}this.scheduleRender()},this.onMouseLeave=e=>{if(!(this.tradeButton&&this.tradeButton.el.contains(e.relatedTarget))&&!this._mobileCrosshairActive){if(this.crosshair=null,this.emitter.emit(`crosshair`,null),!this._isTradingActive){var t;(t=this.tradeButton)==null||t.hide()}this.hoveredTradeLabel!==null&&(this.hoveredTradeLabel=null,this.renderTradeLayer()),this.scheduleRender()}},this.onMouseUp=()=>{var e;if(this.drawingManager.isFreehandStroke()){var t;let{chartW:e,priceH:n}=this.getChartLayout(),r=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):t;this.drawingManager.finishFreehand(this.scaleManager,this.viewport,r,e,n),this._pendingDrawDrag=null,this._pendingDrawResize=null,this.scheduleRender();return}if(this._pendingTradeDrag){let{level:e}=this._pendingTradeDrag;if(this._pendingTradeDrag=null,this._editOpenLabel===e.label&&!this.pendingLevelDrags.has(e.label)){this._cancelEditAndDeselect(e.label);return}this._openTradeLevelEditForm(e);return}if(!this._endOrderTimeDrag()){if((e=this.tradeDragHandler)!=null&&e.active){let e=this.tradeDragHandler.endDrag();if(e){var n;this._finalizeMainDragWithBrackets(e,(n=this._pendingBracketOrderLabel)==null?void 0:n)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.drawCanvas.style.cursor=`default`,this.renderTradeLayer();return}if(this.axisDrag){let e=this.axisDrag.axis===`price`||this.axisDrag.axis===`time`;this.axisDrag=null,this.drawCanvas.style.cursor=`default`,this.scheduleRender(),e&&this.scheduleViewportPersist()}this.separatorDrag&&(this.separatorDrag=null,this.drawCanvas.style.cursor=`default`,this.scheduleRender()),this._pendingDrawDrag=null,this._pendingDrawResize=null,this.drawingManager.isDraggingDrawing()&&(this.drawingManager.endDrag(),this.drawCanvas.style.cursor=`default`,this.scheduleRender()),this.drawingManager.isResizingDrawing()&&(this.drawingManager.endResize(),this.drawCanvas.style.cursor=`default`,this.scheduleRender())}},this.onDrawingTouchStart=e=>{var t;if(e.touches.length!==1)return;let r=e.touches[0],i=this.touchToDrawingPoint(r),a=this.drawingManager.getActiveTool(),o=this.drawingManager.isPlacing();if(a!==null||o){e.preventDefault(),this._lastDrawingTouchPoint=i,o?(this._drawTouchAnchorActive=!1,this.drawingManager.onMouseMove(i)):(this.drawingManager.onMouseDown(i),this._drawTouchAnchorActive=this.drawingManager.isPlacing()&&!this.drawingManager.isFreehandStroke()),this.scheduleRender();return}let s=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,c=r.clientX-s.left,l=r.clientY-s.top,{chartW:u,priceH:d}=this.getChartLayout(),f=this.getScaledPriceRange(this.viewport);if(c>=u){if(e.preventDefault(),l<=d)this.axisDrag={axis:`price`,startPos:l,startSize:this.priceScaleFactor};else{let e=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),t=d+Dd;for(let n of e){let e=this.paneH(n);if(l>=t&&l<t+e){var p;this.axisDrag={axis:`subpane`,startPos:l,startSize:(p=this.subPaneScaleFactors.get(n.instanceId))==null?1:p,instanceId:n.instanceId};break}t+=e+Dd}}this.scheduleRender();return}let m=s.height-this.timeAxisHeight;if(l>=m){e.preventDefault(),this.axisDrag={axis:`time`,startPos:c,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let h=this.drawingManager.getHandleAtPoint(c,l,this.scaleManager,this.viewport,f,u,d,n.TOUCH_HANDLE_SLOP_PX);if(h){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(h.drawing),this.drawingManager.startResize(h.drawing,h.handle.pointIndex,h.handle),this.hideMobileDrawingFlyout(),this.scheduleRender();return}let g=this.drawingManager.hitTest(c,l,this.scaleManager,this.viewport,f,u,d);if(g){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(g),this.drawingManager.startDrag(g,i),this._drawTouchStartXY={x:r.clientX,y:r.clientY},this.hideMobileDrawingFlyout(),this.scheduleRender();return}let _=Oe(c,l,this.clusterBadgeAreas);if(_){e.preventDefault(),this.panHandler.cancel(),this.expandedClusters.has(_.clusterId)?this.expandedClusters.delete(_.clusterId):this.expandedClusters.add(_.clusterId),this.renderTradeLayer();return}let v=Kt(c,l,this.offViewportHitAreas);if(v){e.preventDefault(),this.panHandler.cancel(),this.scrollToCenterPrice(v.targetPrice);return}let y=kt(c,l,this.tradeLevelConfirmAreas);if(y){e.preventDefault(),y.action===`confirm`?this.applyPendingChanges(y.label):this.revertPendingChanges(y.label);return}if(this._showQuantityField&&this._draftQtyPillArea){let t=this._draftQtyPillArea;if(c>=t.pillX&&c<=t.pillX+t.pillW&&l>=t.pillY&&l<=t.pillY+t.pillH){e.preventDefault(),e.stopPropagation(),this.openDraftQtyFlyout(t);return}}let b=Dt(c,l,this.tradeLevelHitAreas);if(b){e.preventDefault(),this._handleTradeLevelClose(b);return}if(!this.drawingManager.getActiveTool()){let t=Ot(c,l,this.tradeLevelEditAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);n&&this._openTradeLevelEditForm(n);return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=jt(c,l,this.tradeLevelDragAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);if(n){let e=this.selectedTradeLabel===n.label,r=t.isBracket||this._orderTimeDragEnabled&&t.timeDrag===!0||n.type===`pending`&&n.orderType!==`market`&&(e||!t.isBox);if(this.hideLevelConfirmCancel&&!r){let e=this.pendingLevelDrags.has(n.label);if(this.selectedTradeLabel===n.label&&!e){this._cancelEditAndDeselect(n.label);return}this._openTradeLevelEditForm(n);return}if(this._needsDragAxisLock(t,n)){this._pendingTradeDrag={dragHit:t,level:n,hitY:l,startX:c,startY:l,axisLock:!0};return}this._startTradeDragFromHit(t,n,l,c),this.scheduleRender();return}}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=Mt(c,l,this.tradeAddBracketAreas);if(t){e.preventDefault(),this._startAddBracketFromHit(t,l),this.scheduleRender();return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=At(c,l,this.tradeHoverAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);if(n){let e=this.pendingLevelDrags.has(t.label);if(this.selectedTradeLabel===t.label&&!e){this._cancelEditAndDeselect(t.label);return}this._openTradeLevelEditForm(n);return}}}this.drawingManager.selectDrawing(null),this.hideMobileDrawingFlyout(),this.expandedClusters.size>0&&(this.expandedClusters.clear(),this.renderTradeLayer()),c<u&&l<m&&(this._mobileCrosshairActive?(this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null),this._mobileTapStartXY={x:c,y:l}):(this._longPressTimer!==null&&clearTimeout(this._longPressTimer),this._longPressPoint={x:c,y:l},this._longPressTimer=setTimeout(()=>{this._longPressTimer=null,this._longPressPoint&&(this._activateMobileCrosshair(this._longPressPoint.x,this._longPressPoint.y),this._longPressPoint=null)},500)))},this.onDrawingTouchMove=e=>{var t,n;if(e.touches.length!==1)return;let r=this.touchToDrawingPoint(e.touches[0]);if(this._lastDrawingTouchPoint=r,this.axisDrag){var i;e.preventDefault();let t=e.touches[0],n=(i=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():i,r=t.clientX-n.left,a=t.clientY-n.top;if(this.axisDrag.axis===`price`){let e=a-this.axisDrag.startPos;this.priceScaleFactor=Math.max(.1,Math.min(10,this.axisDrag.startSize*1.005**e))}else if(this.axisDrag.axis===`subpane`&&this.axisDrag.instanceId){let e=a-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.instanceId,t)}else{let e=r-this.axisDrag.startPos,t=Math.max(10,Math.min(500,Math.round(this.axisDrag.startSize+e*.5))),n=(this.viewport.startIndex+this.viewport.endIndex)/2,i=Math.max(0,n-t/2);this.viewport={...this.viewport,startIndex:i,endIndex:i+t}}this.scheduleRender();return}if(this.drawingManager.isPlacing()&&!this._drawTouchAnchorActive){e.preventDefault(),this.drawingManager.onMouseMove(r),this.scheduleRender();return}if(this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing()){e.preventDefault(),e.stopPropagation(),this.drawingManager.onMouseMove(r),this.scheduleRender();return}if(this._pendingTradeDrag){var a;e.preventDefault();let t=e.touches[0],n=(a=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():a;if(!this._upgradePendingTradeDrag(t.clientX-n.left,t.clientY-n.top))return}if((t=this.orderTimeDragHandler)!=null&&t.active){var o;e.preventDefault();let t=e.touches[0],n=(o=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():o,r=t.clientX-n.left,{chartW:i}=this.getChartLayout(),a=this.orderTimeDragHandler.onMove(r,this.scaleManager,this.viewport,i);this.tradeDragNewBarIndex=a,this.renderTradeLayer();let s=this.orderTimeDragHandler.dragLabel,c=a===null?void 0:this.barIndexToTimestamp(a);s&&a!==null&&c!==void 0&&this.emitter.emit(`orderLineMoving`,{label:s,toTimestamp:c,toBarIndex:a,isFullscreen:this.isFullscreen});return}if((n=this.tradeDragHandler)!=null&&n.active){var s,c,l,u,d;e.preventDefault();let t=e.touches[0],n=(s=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():s,r=t.clientY-n.top,{priceH:i}=this.getChartLayout(),a=(c=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):c,o=this.tradeDragHandler.onMouseMove(r,this.scaleManager,a,i);if(this.tradeDragNewPrice=(l=o==null?void 0:o.newPrice)==null?null:l,this.tradeDragNewSLPrice=(u=o==null?void 0:o.derivedSLPrice)==null?null:u,this.tradeDragNewTPPrice=(d=o==null?void 0:o.derivedTPPrice)==null?null:d,this.renderTradeLayer(),this.tradeDragNewPrice!==null&&o){let e=o.label.indexOf(`:`),t=e===-1?o.label:o.label.slice(0,e),n=e===-1?void 0:o.label.slice(e+1),r=this.levels.find(e=>e.label===t);r&&this.emitter.emit(`tradeLevelDrag`,{label:r.label,newPrice:this.tradeDragNewPrice,data:r.data,bracketType:n,...o.derivedSLPrice===void 0?{}:{derivedSLPrice:o.derivedSLPrice},...o.derivedTPPrice===void 0?{}:{derivedTPPrice:o.derivedTPPrice},isFullscreen:this.isFullscreen})}return}if(this._mobileTapStartXY||this._longPressTimer!==null){var f,p;let t=e.touches[0],n=(f=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():f,r=(p=this._mobileTapStartXY)==null?this._longPressPoint:p;if(r){let e=t.clientX-n.left-r.x,i=t.clientY-n.top-r.y;Math.sqrt(e*e+i*i)>6&&(this._mobileTapStartXY=null,this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null))}}if(this._mobileCrosshairActive){var m,h;e.preventDefault();let t=e.touches[0],n=(m=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():m,r=t.clientX-n.left,i=t.clientY-n.top,{chartW:a,priceH:o}=this.getChartLayout(),s=(h=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):h,c=n.height-this.timeAxisHeight;if(r<a&&i<c){var g;let e=this.scaleManager.pixelToBarIndex(r,this.viewport,a),t=this.scaleManager.pixelToPrice(i,s,o),n=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(e))),c=(g=this.dataStore.all[n])==null?null:g;this.crosshair=this.selectedTradeLabel===null?{x:r,y:i,barIndex:n,price:t,bar:c}:null,this.tradeButton&&(this.tradeButton.setY(i),this._isTradingActive||qt(i,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)?this.tradeButton.hide():this.tfcActive&&this.tradeButton.show(),this._tradeButtonClickData={price:t,y:i}),this.scheduleRender()}}},this.onDrawingTouchCancel=e=>{var t,n;this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null);let r=!1;this._pendingTradeDrag=null,(t=this.orderTimeDragHandler)!=null&&t.active&&(this.orderTimeDragHandler.cancel(),this.tradeDragNewBarIndex=null,r=!0),(n=this.tradeDragHandler)!=null&&n.active&&(this.tradeDragHandler.cancelDrag(),this.tradeDragNewPrice=null,this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null,this._pendingBracketOrderLabel=null,r=!0),this._pendingTradeDrag=null,r&&this.renderTradeLayer()},this.onDrawingTouchEnd=e=>{var t;if(this._lastTouchTime=Date.now(),this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null),this._pendingTradeDrag){let{level:e}=this._pendingTradeDrag;this._pendingTradeDrag=null;let t=this.pendingLevelDrags.has(e.label);if(this.selectedTradeLabel===e.label&&!t){this._cancelEditAndDeselect(e.label);return}this._openTradeLevelEditForm(e);return}if(this._endOrderTimeDrag())return;if((t=this.tradeDragHandler)!=null&&t.active){let e=this.tradeDragHandler.endDrag();if(e){var n;this._finalizeMainDragWithBrackets(e,(n=this._pendingBracketOrderLabel)==null?void 0:n)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.renderTradeLayer();return}if(this.axisDrag){let e=this.axisDrag.axis===`price`||this.axisDrag.axis===`time`;this.axisDrag=null,this.scheduleRender(),e&&this.scheduleViewportPersist();return}let r=this._drawTouchAnchorActive;if(this._drawTouchAnchorActive=!1,this.drawingManager.isFreehandStroke()){var i;let{chartW:e,priceH:t}=this.getChartLayout(),n=(i=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):i;this.drawingManager.finishFreehand(this.scaleManager,this.viewport,n,e,t),this._lastDrawingTouchPoint=null,this.scheduleRender();return}if(!r&&this.drawingManager.isPlacing()&&this._lastDrawingTouchPoint){this.drawingManager.onMouseDown(this._lastDrawingTouchPoint),this._lastDrawingTouchPoint=null,this.scheduleRender();return}if(this.drawingManager.isDraggingDrawing()){let t=e.changedTouches[0],n=this._drawTouchStartXY;if(this._drawTouchStartXY=null,this.drawingManager.endDrag(),t&&n&&this.drawingManager.getSelectedDrawing()){let e=t.clientX-n.x,r=t.clientY-n.y;Math.sqrt(e*e+r*r)<8&&this.showMobileDrawingFlyout(t.clientX,t.clientY)}this.scheduleRender()}if(this.drawingManager.isResizingDrawing()&&(this.drawingManager.endResize(),this.scheduleRender()),this._mobileTapStartXY){var a;this._mobileTapStartXY=null,this._mobileCrosshairActive=!1,this.crosshair=null,(a=this.tradeButton)==null||a.hide(),this.scheduleRender()}},this.onCanvasClick=e=>{var t,n;let r=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,i=e.clientX-r.left,a=e.clientY-r.top,{chartW:o,priceH:s}=this.getChartLayout(),c=(n=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):n,l=this.scaleManager.pixelToBarIndex(i,this.viewport,o),u=this.scaleManager.pixelToPrice(a,c,s),d=Math.round(l),f=Oe(i,a,this.clusterBadgeAreas);if(f){this.expandedClusters.has(f.clusterId)?this.expandedClusters.delete(f.clusterId):this.expandedClusters.add(f.clusterId),this.renderTradeLayer();return}let p=Kt(i,a,this.offViewportHitAreas);if(p){this.scrollToCenterPrice(p.targetPrice);return}let m=kt(i,a,this.tradeLevelConfirmAreas);if(m){m.action===`confirm`?this.applyPendingChanges(m.label):this.revertPendingChanges(m.label);return}if(this._showQuantityField&&this._draftQtyPillArea){let t=this._draftQtyPillArea;if(i>=t.pillX&&i<=t.pillX+t.pillW&&a>=t.pillY&&a<=t.pillY+t.pillH){e.preventDefault(),e.stopPropagation(),this.openDraftQtyFlyout(t);return}}let h=Dt(i,a,this.tradeLevelHitAreas);if(h){this._handleTradeLevelClose(h);return}if(!this.drawingManager.getActiveTool()){let e=Ot(i,a,this.tradeLevelEditAreas);if(e){let t=this.levels.find(t=>t.label===e.label);t&&this._openTradeLevelEditForm(t);return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=Mt(i,a,this.tradeAddBracketAreas);if(e){this._startAddBracketFromHit(e,a);return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=jt(i,a,this.tradeLevelDragAreas);if(e){let t=this.levels.find(t=>t.label===e.label);if(t&&!(this.hideLevelConfirmCancel&&!e.isBracket)){this._pendingTradeDrag={dragHit:e,level:t,hitY:a,startX:i,startY:a,axisLock:this._needsDragAxisLock(e,t)};return}}}let g=At(i,a,this.tradeHoverAreas);if(g){let e=this.pendingLevelDrags.has(g.label);if(this.selectedTradeLabel===g.label&&!e){this._cancelEditAndDeselect(g.label);return}let t=this.levels.find(e=>e.label===g.label);t?this._openTradeLevelEditForm(t):(this.selectedTradeLabel=g.label,this.renderTradeLayer());return}else if(this.selectedTradeLabel!==null&&!this.hideLevelConfirmCancel&&this.deselectActiveOnOutsideClick){let e=this.selectedTradeLabel,t=this.pendingLevelDrags.get(e);!t||t.length===0?this._cancelEditAndDeselect(e):this.revertPendingChanges(e)}this.expandedClusters.size>0&&(this.expandedClusters.clear(),this.renderTradeLayer());let _=r.height-this.timeAxisHeight;if(i>=o){if(a<=s)this.axisDrag={axis:`price`,startPos:a,startSize:this.priceScaleFactor};else{let e=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),t=s+Dd;for(let n of e){let e=this.paneH(n);if(a>=t&&a<t+e){var v;this.axisDrag={axis:`subpane`,startPos:a,startSize:(v=this.subPaneScaleFactors.get(n.instanceId))==null?1:v,instanceId:n.instanceId};break}t+=e+Dd}}this.scheduleRender();return}if(a>=_){this.axisDrag={axis:`time`,startPos:i,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let y=this.getSeparatorPositions().find(e=>Math.abs(a-e.y)<=4);if(y){var b,x;let e=this.activeIndicators.find(e=>e.instanceId===y.instanceId),t=(b=(x=this.paneHeightOverrides.get(y.instanceId))==null?e==null?void 0:e.indicator.paneHeight:x)==null?Ed:b;this.separatorDrag={instanceId:y.instanceId,startY:a,startH:t},this.scheduleRender();return}if(!this.drawingManager.onMouseDown(this.makeDrawingPoint(l,u))){var S;let e=this.drawingManager.getHandleAtPoint(i,a,this.scaleManager,this.viewport,c,o,s);if(e)this.drawingManager.selectDrawing(e.drawing),this._pendingDrawResize={drawing:e.drawing,pointIndex:e.handle.pointIndex,handle:e.handle,startX:i,startY:a};else{let e=this.drawingManager.hitTest(i,a,this.scaleManager,this.viewport,c,o,s);this.drawingManager.selectDrawing(e),e&&(this._pendingDrawDrag={drawing:e,startX:i,startY:a})}let t=(S=this.dataStore.all[d])==null?null:S;this.emitter.emit(`click`,{x:i,y:a,barIndex:d,price:u,bar:t})}this.scheduleRender()},this.onDoubleClick=e=>{var t;this.drawingManager.finalizePlacing();let n=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,r=e.clientX-n.left,i=e.clientY-n.top,{chartW:a,priceH:o}=this.getChartLayout(),s=n.height-this.timeAxisHeight;if(r>=a){this.resetPriceAxis();return}if(i>=s){this.resetTimeAxis();return}let c=new Set([`text`,`callout`,`anchoredNote`]),l=this.drawingManager.getSelectedDrawing();if(l&&c.has(l.type)){let e=this.getScaledPriceRange(this.viewport);if(l.hitTest(r,i,this.scaleManager,this.viewport,e,a,o)){this.showTextInput(l);return}}this.scheduleRender()},this.onKeyDown=e=>{var t;if(e.key===`Escape`&&(t=this.orderTimeDragHandler)!=null&&t.active){this.orderTimeDragHandler.cancel(),this.tradeDragNewBarIndex=null,this.drawCanvas.style.cursor=`default`,this.renderTradeLayer(),e.preventDefault();return}if(e.key===`Escape`&&this.pnlPillExpanded){var n;this.pnlPillExpanded=!1,(n=this.pnlPill)==null||n.setExpanded(!1),this.recomputeRenderStyle(),this.renderTradeLayer()}if(e.key===`Escape`&&this.expandedClusters.size>0){this.expandedClusters.clear(),this.renderTradeLayer(),e.preventDefault();return}if(e.key===`Escape`&&this.pendingLevelDrags.size>0){this.revertPendingChanges(),e.preventDefault();return}let r=(e.ctrlKey||e.metaKey)&&e.key===`z`?`z`:e.key;if(this.drawingManager.onKeyDown(r)){var i;e.preventDefault(),this.hideMobileDrawingFlyout(),(i=this.leftBar)==null||i.setActiveTool(this.drawingManager.getActiveTool()),this.drawCanvas.style.cursor=this.drawingManager.getActiveTool()?`crosshair`:`default`,this.scheduleRender()}},this.onTick=e=>{var t;if(this._isDestroyed)return;let n=this.dataStore.all;if(n.length===0||this._suppressTicks)return;this.liveBidAsk={bid:e.bid,ask:e.ask},e.ltp!=null&&e.ltp>0&&(this.liveLtp=e.ltp),this.setDotTickActive();let r=n[n.length-1],i=this.timeframeToMs(this.timeframe),a=this.tickClosePriceSource===`ltp`?(t=this.liveLtp)==null?e.bid:t:this.tickClosePriceSource===`ask`?e.ask:e.bid;if(e.time<r.time+i){var o;let t={...r,high:Math.max(r.high,a),low:Math.min(r.low,a),close:a,volume:((o=r.volume)==null?0:o)+e.volume};n[n.length-1]=t}else{let t=r,o=Math.floor(e.time/i)*i;n.push({time:o,open:a,high:a,low:a,close:a,volume:e.volume}),this._debug&&console.warn(`[tick] → NEW candle @ ${new Date(o).toISOString()} (closed ${new Date(t.time).toISOString()}) | total bars=${n.length}`);let s=n[n.length-1];this._targetViewport.endIndex>=n.length&&(this._targetViewport={...this._targetViewport,startIndex:this._targetViewport.startIndex+1,endIndex:this._targetViewport.endIndex+1}),this.emitter.emit(`newBar`,{completedBar:t,openingBar:s,intervalMs:i}),this.correctCompletedBar(t.time,i),o>t.time+i&&this.fillTickGap(t.time,o)}this.recomputeIndicators(),this.scheduleRender()},typeof window>`u`||typeof document>`u`)throw Error(`acttrader-charts requires a browser environment`);Vn();let ie=()=>{this._cachedWrapRect=null,this._cachedDrawRect=null},ae=window.visualViewport;ae&&(ae.addEventListener(`resize`,ie),ae.addEventListener(`scroll`,ie)),document.addEventListener(`scroll`,ie,{capture:!0,passive:!0}),window.addEventListener(`resize`,ie);let oe=typeof ResizeObserver<`u`?new ResizeObserver(ie):null;oe==null||oe.observe(document.documentElement),document.body&&(oe==null||oe.observe(document.body)),this.disposeVvListener=()=>{ae&&(ae.removeEventListener(`resize`,ie),ae.removeEventListener(`scroll`,ie)),document.removeEventListener(`scroll`,ie,{capture:!0}),window.removeEventListener(`resize`,ie),oe==null||oe.disconnect()};let{container:se,theme:ce=`dark`,series:le=`candlestick`,showVolume:ue=!0,showUI:de=!0,timeframe:fe=`1D`,duration:pe=void 0,symbol:me=``,isins:he,onIsinSelect:ge,onSymbolClick:_e,onOrderSubmit:ve,dataLoader:ye,uiConfig:be,labels:xe,tickActivityMs:Se=3e4,hideSymbolAndTick:Ce=!1,hideOHLCV:we=!1,showBottomBar:Te=!1}=i;if(this.dataLoader=ye==null?null:ye,this.compareDataLoader=(a=i.compareDataLoader)==null?null:a,this.compareManager=new lu({emitter:this.emitter,loader:this.compareDataLoader,maxCompares:i.maxCompares}),this.drawingToolsEnabled=i.showDrawingTools!==!1,this.settingsEnabled=i.showSettings!==!1,this.fullscreenEnabled=i.showFullscreenButton!==!1,this.uiConfig=O(be),this.labels=A(xe),this.tickActivityMs=Se,this.maxCandles=(o=i.maxCandles)==null?200:o,this._durationTimeframeMap={..._i,...i.durationTimeframeMap},this.minInitialBars=Math.max(0,(c=i.minInitialBars)==null?10:c),this.maxLookbackMs=Math.max(0,(l=i.maxLookbackMs)==null?365*24*60*60*1e3:l),this.prefetchThreshold=(u=i.prefetchThreshold)==null?80:u,this.defaultVisibleBars=(f=i.defaultVisibleBars)==null?Od:f,this.defaultMobileVisibleBars=i.defaultMobileVisibleBars,this.explicitMobileDivisor=i.mobileBarDivisor!==void 0,this.mobileBarDivisor=(p=i.mobileBarDivisor)==null?2:p,this._autoVisibleBars=i.defaultVisibleBars==null&&i.defaultMobileVisibleBars==null,this.targetCandleWidth=(m=i.targetCandleWidth)==null?kd:m,this.viewport={...this.viewport,endIndex:Fd(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)},this._targetViewport={...this.viewport},this.maxSubPanes=(h=i.maxSubPanes)==null?3:h,this.tickClosePriceSource=(v=i.tickClosePriceSource)==null?`bid`:v,this._reloadOnPriceSourceChange=i.reloadOnPriceSourceChange!==!1,this.showLtpPrice=i.showLtpPrice,this.tradesThresholdForHorizontalLine=(y=i.tradesThresholdForHorizontalLine)==null?2:y,i.positionRenderStyle===`line`||i.positionRenderStyle===`dot`)this.positionRenderStyleOverride=i.positionRenderStyle;else{let e=localStorage.getItem(this.RENDER_STYLE_LS_KEY);(e===`line`||e===`dot`)&&(this.positionRenderStyleOverride=e)}i.tradeDisplayFilter&&(this.tradeDisplayFilter=i.tradeDisplayFilter),i.canvasColors&&(this.settingsCanvasColors=i.canvasColors),this.recomputeRenderStyle(),this.showBidAskLines=(b=i.showBidAskLines)==null?!1:b,this.showAskLine=i.showAskLine,this.showBidLine=i.showBidLine,this.showActLogo=(x=i.showActLogo)==null?!1:x,this.hideLevelConfirmCancel=(S=i.hideLevelConfirmCancel)==null?!1:S,this.deselectActiveOnOutsideClick=(C=i.deselectActiveOnOutsideClick)==null?!1:C,this._orderTimeDragEnabled=((w=i.features)==null?void 0:w.orderLineTimeDrag)===!0,this._features=i.features,this.drawingManager.setFreehandEnabled(((T=i.features)==null?void 0:T.enableForecasting)===!0),this._orderLineDragSnap=i.orderLineDragSnap!==!1,this._orderLineDefaultAnchor=i.orderLineDefaultAnchor===`center`?`center`:`timestamp`,this._orderTimeDragEnabled&&i.orderLineAnchorPersistence!==!1&&(this._orderLineAnchorStore=new Tu(Tu.browserStorage())),this.tradeLevelButtonScale=Math.min(Math.max((E=i.tradeLevelButtonScale)==null?1:E,1),3),this.tradeLevelBadgeScale=Math.min(Math.max((D=i.tradeLevelBadgeScale)==null?1:D,.5),1),this.tradeLevelBadgeAnchor=i.tradeLevelBadgeAnchor===`left`?`left`:`auto`,this._bracketLabel={mode:(k=i.bracketLabelMode)==null?`price`:k,currencySymbol:(j=i.currencySymbol)==null?`$`:j},this.levelClusteringEnabled=(M=i.levelClusteringEnabled)==null?!0:M,this.clusterThresholdDistance=(N=i.clusterThresholdDistance)==null?20:N,this.enableThemeToggle=(P=i.enableThemeToggle)==null?!1:P,this.tfcEnabled=i.tfcEnabled!==!1,this.crosshairEnabled=i.crosshairEnabled!==!1,this.tfcActive=this.tfcEnabled,this.showCandleCountdown=(F=i.showCandleCountdown)==null?!0:F,this.candleCountdownTimeframes=i.candleCountdownTimeframes,this.showTradeLevelsAlways=(I=i.showTradeLevelsAlways)==null?!0:I,this.showPriceAxisCountdown=(R=i.showPriceAxisCountdown)==null?!1:R,this._revealNewBrackets=i.revealNewBrackets===!0;try{let e=localStorage.getItem(this.SHOW_SLTP_ALWAYS_LS_KEY);e!==null&&(this.showTradeLevelsAlways=e===`true`);let t=localStorage.getItem(this.PRICE_AXIS_COUNTDOWN_LS_KEY);t!==null&&(this.showPriceAxisCountdown=t===`true`)}catch(e){}this._onOrderSubmit=ve,this._onAddAlert=(z=i.onAddAlert)==null?null:z,i.minLots!==void 0&&(console.warn(`[acttrader-charts] ChartConfig.minLots is deprecated. DraftOrderQtyInput has been removed. The value is stored and used as the submitted lot size.`),this._minLots=i.minLots),i.showQuantityField!==void 0&&(this._showQuantityField=i.showQuantityField),i.quantityFieldConfig&&(i.quantityFieldConfig.minLots!==void 0&&(this._qtyFieldMin=i.quantityFieldConfig.minLots),i.quantityFieldConfig.maxLots!==void 0&&(this._qtyFieldMax=i.quantityFieldConfig.maxLots)),i.onLotsChange!==void 0&&console.warn(`[acttrader-charts] ChartConfig.onLotsChange is deprecated. DraftOrderQtyInput has been removed; this callback will never fire.`),i.hideQtyButton!==void 0&&console.warn(`[acttrader-charts] ChartConfig.hideQtyButton is deprecated and is a no-op. DraftOrderQtyInput has been removed.`),this.themeName=ce===`dark`?`dark`:`light`,this.themeOverrides=i.themeOverrides,this.timezone=i.timezone===`local`?Intl.DateTimeFormat().resolvedOptions().timeZone:(V=i.timezone)==null?`UTC`:V,this.aggregateFrom=i.aggregateFrom;let Ee=this.themeName===`dark`?g:_;this.theme=d(Ee,(ee=this.themeOverrides)==null?void 0:ee[this.themeName]),this.chromeTheme=this.theme,this.series=le,this.showVolume=ue,this.timeframe=fe,this.duration=pe,this.symbol=me,this.instrumentSpec=i.instrument,this.accountSpec=i.account,this.wrapper=document.createElement(`div`),Object.assign(this.wrapper.style,{display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,overflow:`hidden`,boxSizing:`border-box`});let De=i.headerLayout===`advanced`||i.headerLayout===void 0&&((te=i.features)==null?void 0:te.advancedToolbar)===!0,ke=i.headerLayout===`compact`,Ae=i.headerLayout===`mobile`,je=i.hideHeader===!0,Me=i.enableMultipleLayouts===!0,Ne=i.enableSnapshot===!0,Pe=i.enableCrossHairHeader===!0||i.enableCrosshairToggle===!0;i.layoutSync&&(this.currentSync={...pi,...i.layoutSync}),Me&&typeof i.onLayoutClick==`function`&&console.warn("[ActCharts] `enableMultipleLayouts: true` owns the Layout button — the deprecated `onLayoutClick` callback is ignored. Listen to the `layoutChange` event instead."),Ne&&typeof i.onScreenshotClick==`function`&&console.warn("[ActCharts] `enableSnapshot: true` owns the Snapshot button — the deprecated `onScreenshotClick` callback is ignored. Listen to the `snapshot` event instead."),typeof i.onOneClickTradeToggle==`function`&&typeof i.onOneClickToggle==`function`&&console.warn("[ActCharts] Both `onOneClickTradeToggle` and the deprecated `onOneClickToggle` were provided — using `onOneClickTradeToggle`. Remove the legacy field.");let Fe=(ne=i.onOneClickTradeToggle)==null?i.onOneClickToggle:ne;if(de){let e=e=>{this.timeframe=e,this.emitter.emit(`timeframeChange`,{timeframe:e}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`timeframe`)},t=md.filter(e=>e.enabled).map(e=>({value:e.short_name,label:`${e.name} (${e.short_name})`,category:e.type})),n=()=>{if(Me)this.openLayoutPopover();else{var e;(e=i.onLayoutClick)==null||e.call(i)}},r=()=>{if(Ne)this.openSnapshotPopover();else{var e;(e=i.onScreenshotClick)==null||e.call(i)}},a=Me||typeof i.onLayoutClick==`function`,o=Ne||typeof i.onScreenshotClick==`function`;if(!je)if(Ae){var Ie,Le;let t=this.drawingToolsEnabled?{setDrawingTool:e=>{this.setDrawingTool(e)},clearAllDrawings:()=>{this.clearAllDrawings()},addIndicator:(e,t)=>{this.addIndicatorByName(e,t)},removeIndicator:e=>{this.removeIndicator(e)},...Pe?{setCrosshairEnabled:e=>{this.setCrosshairEnabled(e)}}:{}}:null;this.mobileHeader=new Yr(e,t,(Ie=i.onAskAiClick)==null?null:Ie,this.settingsEnabled?()=>this.openChartSettings():null,e=>this.setSeries(e),this.timeframe,this.series,this.theme,(Le=this.uiConfig.topBar)==null?void 0:Le.dropBtnFontFamily,this._enabledGates(),Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)}),this.wrapper.appendChild(this.mobileHeader.el)}else if(ke)this.compactToolbar=new Or(e=>this.setSeries(e),e,e=>this.addIndicatorByName(e),this.series,this.timeframe,this.theme,Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)}),this.compactToolbar.setIndicatorOptions(t),this.wrapper.appendChild(this.compactToolbar.el);else if(De){var Re,ze,Be,Ve;this.advancedToolbar=new br(e=>this.setSeries(e),e,e=>this.addIndicatorByName(e),()=>this.openChartSettings(),()=>this.toggleFullscreen(),this.drawingToolsEnabled?()=>this.toggleDrawingTools():null,this.drawingToolsEnabled,this.settingsEnabled,this.fullscreenEnabled,this.series,this.timeframe,this.theme,this.compareDataLoader?()=>this.openComparePicker():void 0,n,Fe,r,a,o,(Re=i.priceSourceSelector)==null?null:Re,this.tickClosePriceSource,e=>this._applyPriceSource(e,!0),Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)},((ze=i.features)==null?void 0:ze.pnlPill)===!0,((Be=i.pnlPill)==null?void 0:Be.visible)!==!1,e=>{this.setPnlPillVisible(e)},i.headerOverflowMenu===!0,(Ve=i.timeframes)==null?null:Ve,this._onAddAlert?()=>{var e;(e=this._onAddAlert)==null||e.call(this,this._currentMarketPrice())}:null),this.advancedToolbar.setIndicatorOptions(t),this.wrapper.appendChild(this.advancedToolbar.el),this.advancedToolbar.setFullscreen(this.isFullscreen)}else{var He,Ue,H,We;let s=this._durationTimeframeMap;this.topBar=new qn(e=>this.setSeries(e),e,e=>this.addIndicatorByName(e),(e,t)=>{var n,r;this.duration=e,this.timeframe=t,(n=this._tb)==null||n.setTimeframe(t),(r=this.bottomBar)==null||r.setActive(e),this.emitter.emit(`durationChange`,{duration:e,timeframe:t}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`)},()=>this.openChartSettings(),()=>this.toggleFullscreen(),this.drawingToolsEnabled?()=>this.toggleDrawingTools():null,this.drawingToolsEnabled,this.settingsEnabled,this.fullscreenEnabled,this.tfcEnabled,this.tfcActive,this.tfcEnabled?e=>{this.setTfcActive(e)}:null,this.series,this.timeframe,null,s,this.theme,this.uiConfig.topBar,this.labels.topBar,()=>this.emitUiState(),a,o,n,r,Fe==null?null:Fe,(He=i.priceSourceSelector)==null?null:He,this.tickClosePriceSource,e=>this._applyPriceSource(e,!0),Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)},((Ue=i.features)==null?void 0:Ue.pnlPill)===!0,((H=i.pnlPill)==null?void 0:H.visible)!==!1,e=>{this.setPnlPillVisible(e)},(We=i.timeframes)==null?null:We),this.topBar.setIndicatorOptions(t),this.wrapper.appendChild(this.topBar.el),this.topBar.setFullscreen(this.isFullscreen)}Me&&(this.layoutPopover=new hi(this.theme,this.currentPresetId,this.currentSync,e=>this.handleLayoutPresetSelect(e),e=>this.handleSyncToggle(e),()=>this.emitUiState())),Ne&&(this.snapshotPopover=new gi(this.theme,e=>this.handleSnapshot(e),()=>this.emitUiState()))}let U=document.createElement(`div`);if(Object.assign(U.style,{display:`flex`,flex:`1`,minHeight:`0`,overflow:`hidden`,position:`relative`}),de&&this.drawingToolsEnabled&&(this.leftBar=new Ci(e=>this.setDrawingTool(e),e=>{switch(e){case`undo`:this.undoDrawing();break;case`redo`:this.redoDrawing();break;case`delete_selected`:this.deleteSelectedDrawing();break;case`clear_all`:this.clearAllDrawings();break;case`hide_all`:this.hideAllDrawings();break;case`show_all`:this.showAllDrawings();break;case`lock_all`:this.lockAllDrawings();break;case`unlock_all`:this.unlockAllDrawings();break}},()=>{var e;this.leftBarVisible=!1,(e=this._tb)==null||e.setDrawingsBtnActive(!1)},this.theme,this.uiConfig.drawingToolbar,this.labels.drawingToolbar,this._enabledGates()),U.appendChild(this.leftBar.el)),this.canvasWrap=document.createElement(`div`),Object.assign(this.canvasWrap.style,{flex:`1`,position:`relative`,overflow:`hidden`,touchAction:`none`}),this.canvas=document.createElement(`canvas`),Object.assign(this.canvas.style,{position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,pointerEvents:`none`}),this.canvasWrap.appendChild(this.canvas),this.tradeCanvas=document.createElement(`canvas`),Object.assign(this.tradeCanvas.style,{position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,pointerEvents:`none`}),this.canvasWrap.appendChild(this.tradeCanvas),this.drawCanvas=document.createElement(`canvas`),Object.assign(this.drawCanvas.style,{position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,cursor:`crosshair`,touchAction:`none`,userSelect:`none`}),this.drawCanvas.style.webkitUserSelect=`none`,this.drawCanvas.style.webkitTouchCallout=`none`,this.canvasWrap.appendChild(this.drawCanvas),this.textInputEl=document.createElement(`input`),this.textInputEl.type=`text`,this.textInputEl.enterKeyHint=`go`,Object.assign(this.textInputEl.style,{position:`absolute`,display:`none`,zIndex:`15`,background:`transparent`,border:`none`,borderBottom:`1px solid #2196f3`,color:`#f5f5f5`,font:`16px system-ui, sans-serif`,outline:`none`,minWidth:`60px`,padding:`0 2px`}),this.canvasWrap.appendChild(this.textInputEl),de){this.loadingOverlayEl=document.createElement(`div`),Object.assign(this.loadingOverlayEl.style,{display:`none`,position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,alignItems:`center`,justifyContent:`center`,pointerEvents:`none`,zIndex:`20`});let e=document.createElement(`span`);e.textContent=this.labels.chart.loading,Object.assign(e.style,{fontSize:`13px`,padding:`4px 12px`,borderRadius:`4px`}),this.loadingLabelEl=e,this.loadingOverlayEl.appendChild(e),this.canvasWrap.appendChild(this.loadingOverlayEl),this.noDataOverlayEl=document.createElement(`div`),Object.assign(this.noDataOverlayEl.style,{display:`none`,position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,alignItems:`center`,justifyContent:`center`,pointerEvents:`none`,zIndex:`19`});let t=document.createElement(`span`);t.textContent=this.labels.chart.noData,Object.assign(t.style,{fontSize:`13px`,padding:`4px 12px`,borderRadius:`4px`}),this.noDataLabelEl=t,this.noDataOverlayEl.appendChild(t),this.applyOverlayLabelStyles(),this.canvasWrap.appendChild(this.noDataOverlayEl)}if(de&&!(Ce&&we)){if(this.siEl=document.createElement(`div`),Object.assign(this.siEl.style,{position:`absolute`,top:`6px`,left:`6px`,zIndex:`10`,display:`flex`,alignItems:`center`,gap:`8px`,pointerEvents:`none`}),!Ce){this.siSymbolSpan=document.createElement(`span`),Object.assign(this.siSymbolSpan.style,{color:this.theme.tooltip.text,fontSize:`13px`,fontFamily:`inherit`,fontWeight:`700`,letterSpacing:`-0.025em`,display:me?`inline`:`none`}),this.siSymbolSpan.textContent=me==null?``:me;let e=()=>{var e;let t=(e=i.symbolNameDecoration)==null?`underline`:e;t===`hover`?(Nd(),this.siSymbolSpan.classList.add(Md),this.siSymbolSpan.tabIndex=0,this.siSymbolSpan.style.textDecoration=`none`):this.siSymbolSpan.style.textDecoration=t===`none`?`none`:`underline`};_e?(Object.assign(this.siSymbolSpan.style,{cursor:`pointer`,pointerEvents:`auto`}),e(),this.siSymbolSpan.addEventListener(`click`,()=>{var e,t;_e((e=(t=this.siSymbolSpan)==null?void 0:t.textContent)==null?``:e)})):ge&&(he&&(this.isins=he),this.isinPickerModal=new ou(this.chromeTheme,ge,()=>this.emitUiState()),this.getFloatingRoot().appendChild(this.isinPickerModal.el),Object.assign(this.siSymbolSpan.style,{cursor:`pointer`,pointerEvents:`auto`}),e(),this.siSymbolSpan.addEventListener(`click`,()=>{var e;this.isinPickerModal.show(this.isins,(e=this.siSymbolSpan.textContent)==null?``:e)})),this.siStreamDot=document.createElement(`span`),this.siStreamDot.className=`live-dot`,Object.assign(this.siStreamDot.style,{width:`8px`,height:`8px`,borderRadius:`9999px`,background:this.theme.ui.stream.disconnected,display:`inline-block`,flexShrink:`0`})}we||(this.siOHLCSpan=document.createElement(`span`),Object.assign(this.siOHLCSpan.style,{fontSize:`11px`,fontFamily:`inherit`,whiteSpace:`nowrap`}),this.siOHLC2Span=document.createElement(`span`),Object.assign(this.siOHLC2Span.style,{fontSize:`11px`,fontFamily:`inherit`,whiteSpace:`nowrap`}));let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,gap:`8px`}),this.siStreamDot&&e.append(this.siStreamDot),this.siSymbolSpan&&e.append(this.siSymbolSpan),this.siOHLCSpan&&e.append(this.siOHLCSpan),this.siEl.append(e),this.siOHLC2Span&&this.siEl.append(this.siOHLC2Span),this.canvasWrap.appendChild(this.siEl)}if(de&&(this.indicatorOverlay=new ul(this.theme,this.uiConfig.indicatorOverlay,this.labels.chart),this.canvasWrap.appendChild(this.indicatorOverlay.el),this.indicatorSettingsDialog=new dl(this.chromeTheme,this.labels.dialogs,()=>this.emitUiState()),this.getFloatingRoot().appendChild(this.indicatorSettingsDialog.el),this.scrollToEndBtn=document.createElement(`button`),this.scrollToEndBtn.title=this.labels.chart.scrollToLatest,this.applyScrollToEndBtnStyles(),this.scrollToEndBtn.addEventListener(`click`,()=>this.scrollToEnd()),this.canvasWrap.appendChild(this.scrollToEndBtn),this.resetViewBtn=document.createElement(`button`),this.resetViewBtn.title=`Reset view`,this.applyResetViewBtnStyles(),this.resetViewBtn.addEventListener(`click`,()=>this.resetView()),this.canvasWrap.appendChild(this.resetViewBtn)),this.tradeDragHandler=new yu,this.orderTimeDragHandler=new bu,i.onLevelDragEnd&&this.emitter.on(`tradeLevelDragEnd`,i.onLevelDragEnd),i.onLevelEdit&&this.emitter.on(`tradeLevelEdit`,i.onLevelEdit),ve){var Ge;this.tradePopover=new Jl(this.chromeTheme,.01,this.symbol,(e,t,n)=>{var r;(r=this.tradeActionBar)==null||r.hide(),this.createDraftOrder(e,t,n)},this.labels.trade,()=>this.emitUiState(),i.headerLayout===`mobile`),this.canvasWrap.appendChild(this.tradePopover.el),((Ge=i.features)==null?void 0:Ge.tradeActionBar)===!0&&(this.tradeActionBar=new Kl({theme:this.chromeTheme,labels:this.labels.trade,onAlert:this._onAddAlert?e=>{var t;(t=this._onAddAlert)==null||t.call(this,e)}:null,onPendingPick:(e,t,n)=>{this.createDraftOrder(e,t,n)},onBulkLevels:(e,t)=>{this.emitter.emit(`bulkLevelsRequested`,{kind:e,price:t,isFullscreen:this.isFullscreen,source:`actionBar`})},onVisibilityChange:()=>this.emitUiState()}),this.canvasWrap.appendChild(this.tradeActionBar.el)),this.tradeButton=new ql(this.theme,this.priceAxisWidth,()=>{if(this._tradeButtonClickData&&this.tradePopover){var e;(e=this.tradeButton)==null||e.hide();let t=this.priceAxisWidth+10+22+4,{price:n,y:r}=this._tradeButtonClickData;if(this.tradeActionBar){this.tradePopover.hide();let e=ml(this.levels,this.draftOrderLabel);this.tradeActionBar.show(n,r,t,{pricePrecision:this.dataStore.getPricePrecision(),buyOrderType:this._orderTypeForPrice(`buy`,n),sellOrderType:this._orderTypeForPrice(`sell`,n),symbol:this.symbol,positionCount:e.count,mixedSides:e.mixed});return}this.tradePopover.show(n,r,t,this.dataStore.getPricePrecision(),this._orderTypeForPrice(`buy`,n),this._orderTypeForPrice(`sell`,n))}},this.labels.trade,this.uiConfig.tradeButton),this.canvasWrap.appendChild(this.tradeButton.el),this.tradeButton.el.addEventListener(`mouseenter`,()=>{this.crosshair=null,this.emitter.emit(`crosshair`,null),this.scheduleRender()}),this.tradeButton.el.addEventListener(`mousemove`,e=>{var t;if(e.buttons!==0)return;let n=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,r=e.clientY-n.top,{priceH:i}=this.getChartLayout();if(qt(r,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)){var a;(a=this.tradeButton)==null||a.hide();return}if(r>=0&&r<=i){var o,s;(o=this.tradeButton)==null||o.setY(r);let e=(s=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):s,t=this.scaleManager.pixelToPrice(r,e,i);this._tradeButtonClickData={price:t,y:r}}})}if(U.appendChild(this.canvasWrap),this.wrapper.appendChild(U),de&&Te){var Ke;let e=this._durationTimeframeMap;this.bottomBar=new yi((e,t)=>{var n;this.duration=e,this.timeframe=t,(n=this._tb)==null||n.setTimeframe(t),this.emitter.emit(`durationChange`,{duration:e,timeframe:t}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`)},(Ke=this.duration)==null?null:Ke,this.theme,e,this.uiConfig.bottomBar,this.labels.bottomBar),this.wrapper.appendChild(this.bottomBar.el)}se.appendChild(this.wrapper),(this.themeOverrides||Object.keys(this.settingsCanvasColors).length>0)&&(this.theme=this.buildTheme(this.themeName),this.chromeTheme=this.buildChromeTheme(this.themeName),this.applyThemeToComponents());let qe=this.canvas.getContext(`2d`);if(!qe)throw Error(`Canvas 2D context unavailable`);this.ctx=qe;let Je=this.drawCanvas.getContext(`2d`);if(!Je)throw Error(`Drawing canvas 2D context unavailable`);this.drawCtx=Je;let Xe=this.tradeCanvas.getContext(`2d`);if(!Xe)throw Error(`Trade canvas 2D context unavailable`);if(this.tradeCtx=Xe,this.showActLogo){let t=new Image;t.onload=()=>{this.logoImage=t,this.scheduleRender()},t.src=e}this.drawingManager.setOnComplete(()=>{var e;(e=this.leftBar)==null||e.setActiveTool(null),this.drawCanvas.style.cursor=`default`}),this.drawingManager.onDrawingsChange=()=>this.emitStateChange(),this.drawingManager.onPointsMutated=e=>{for(let t of e.points){let e=this.barIndexToTimestamp(t.barIndex);e!=null&&(t.timestamp=e)}},this.drawingManager.onStartTextEdit=e=>this.showTextInput(e),this.drawingStylePopover=new nu(this.canvasWrap,this.chromeTheme,(e,t)=>this.updateDrawingStyle(e,t)),this.drawingManager.onSelectionChange=e=>{if(e&&e.complete&&e.locked!==!0){var t,n;let r=this.computeDrawingAnchorPx(e);r?(t=this.drawingStylePopover)==null||t.show(e,r.x,r.y):(n=this.drawingStylePopover)==null||n.hide()}else{var r;(r=this.drawingStylePopover)==null||r.hide()}},this.panHandler=new L(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender(),this.scheduleViewportPersist(),this.emitter.emit(`pan`,{viewport:e})},()=>this.dataStore.length,()=>this.scheduleRender(),()=>{var e,t,n,r;return this.drawingManager.getActiveTool()!==null||this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing()||this.separatorDrag!==null||this.axisDrag!==null||((e=(t=this.tradeDragHandler)==null?void 0:t.active)==null?!1:e)||((n=(r=this.orderTimeDragHandler)==null?void 0:r.active)==null?!1:n)||this._pendingTradeDrag!==null||this._mobileCrosshairActive},e=>{var t;if(this.priceScaleFactor===1)return;let{priceH:n}=this.getChartLayout(),r=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this._targetViewport):t,i=(r.max-r.min)/n;this.pricePanOffset+=e*i,this.scheduleRender(),this.scheduleViewportPersist()},()=>{this._isPanning=!0},()=>{this._isPanning=!1},{enabled:i.momentumScrollEnabled,decay:i.momentumDecay,threshold:i.momentumThreshold,maxVelocity:i.momentumMaxVelocity}),this.zoomHandler=new B(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender(),this.scheduleViewportPersist(),this.emitter.emit(`zoom`,{viewport:e})},()=>this.dataStore.length,()=>this.scheduleRender(),()=>{var e;return(e=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():e},()=>this.getChartLayout().chartW,e=>{let t=this._targetViewport,n=t.endIndex-t.startIndex,r=e*(n/this.drawCanvas.width),i=Math.max(0,this.dataStore.length-Math.floor(n/2)),a=Math.max(0,Math.min(i,t.startIndex+r));this._targetViewport={...t,startIndex:a,endIndex:a+n},this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender(),this.emitter.emit(`pan`,{viewport:this._targetViewport}),this.scheduleViewportPersist()}),this.drawCanvas.addEventListener(`mouseenter`,this.onPointerEnter),this.drawCanvas.addEventListener(`mousemove`,this.onMouseMove),this.drawCanvas.addEventListener(`mouseleave`,this.onMouseLeave),this.drawCanvas.addEventListener(`mousedown`,this.onCanvasClick),this.drawCanvas.addEventListener(`dblclick`,this.onDoubleClick),window.addEventListener(`mouseup`,this.onMouseUp),this.drawCanvas.addEventListener(`touchstart`,this.onDrawingTouchStart,{passive:!1}),this.drawCanvas.addEventListener(`touchmove`,this.onDrawingTouchMove,{passive:!1}),this.drawCanvas.addEventListener(`touchend`,this.onDrawingTouchEnd,{passive:!1}),this.drawCanvas.addEventListener(`touchcancel`,this.onDrawingTouchCancel,{passive:!1}),this.drawCanvas.addEventListener(`contextmenu`,e=>e.preventDefault()),document.addEventListener(`keydown`,this.onKeyDown);let Ze=()=>{var e;let t=!!document.fullscreenElement;t||(this._isCssFullscreen=!1),(e=this._tb)==null||e.setFullscreen(t),this.reparentFloatingElements()};if(this.wrapper.addEventListener(`fullscreenchange`,Ze),document.addEventListener(`fullscreenchange`,Ze),this.resizeObserver=new ResizeObserver(()=>this.onResize()),this.resizeObserver.observe(this.canvasWrap),this.onResize(),((re=i.features)==null?void 0:re.pnlPill)===!0&&this.initPnlPill(i),this.dataLoader&&this.triggerLoad(`initial`),this.initCompareUi(),i.initialCompares&&i.initialCompares.length>0){let e=i.initialCompares.slice(),t=this.emitter.on(`dataLoaded`,()=>{t();for(let t of e)this.addCompare(t)})}}resetData(){return++this._loadGeneration,this.setLoading(!1),this.setNoData(!1),this.drawingManager.clearAll(),this.levels=[],this.refreshPnlPill(),this._draftQtyPillArea=void 0,this._pendingBracketOrderLabel=null,this.loadData([])}loadData(e,t=!1){var n,r,i;this.isFetching=!1,this.noMoreData=!1,this._suppressTicks=!1,e.length>0&&this.setNoData(!1),this.liveBidAsk=null,this.liveLtp=null,this.pricePanOffset=0,this.priceScaleFactor=1,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this.dataStore.set(e),this.updateCompareRange();let a=((n=(r=this._cachedWrapRect)==null?void 0:r.width)==null?this.canvasWrap.getBoundingClientRect().width:n)-this.priceAxisWidth,o=this._autoVisibleBars&&a>0?a:void 0,s=Fd(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars,o,this.targetCandleWidth);this._defaultVisibleBars=s,this.viewport={...this.viewport,startIndex:t?0:Math.max(0,e.length-s+Id),endIndex:e.length+Id},this._targetViewport={...this.viewport};let c=this.dataStore.hasVolumeData;if(c||(this.showVolume=!1),(i=this._tb)==null||i.setVolumeControl(this.showVolume,c),this.showVolume&&c){var l;(l=this.indicatorOverlay)==null||l.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this._tb)==null||t.setVolumeControl(!1,this.dataStore.hasVolumeData)},null,()=>{var e;this.setVolume(!this.showVolume),(e=this.indicatorOverlay)==null||e.updatePillVisibility(`VOL`,this.showVolume),this.scheduleRender()})}if(this.recomputeIndicators(),this.reanchorDrawingsByTimestamp(),this._pendingViewportRestore){let e=this._pendingViewportRestore;this._pendingViewportRestore=null,e.priceScale&&(this.priceScaleFactor=e.priceScale.factor,this.pricePanOffset=e.priceScale.panOffset,this._displayedPriceRange=null,this._lockedAutoFitBase=null),e.viewport&&this.applyViewportFromTimestamps(e.viewport.startTime,e.viewport.endTime)}return this.updateCountdownState(),this.scheduleRender(),this}prependData(e){if(e.length===0)return this.noMoreData=!0,this.isFetching=!1,this;let t=this.dataStore.prepend(e);return t>0&&(this.viewport={...this.viewport,startIndex:this.viewport.startIndex+t,endIndex:this.viewport.endIndex+t},this._targetViewport={...this.viewport},this.drawingManager.shiftBarIndices(t),this.reanchorDrawingsByTimestamp(),this.recomputeIndicators(),this.updateCompareRange(),this.scheduleRender()),this.isFetching=!1,this}setLoading(e){return this.loadingOverlayEl&&(this.loadingOverlayEl.style.display=e?`flex`:`none`),e&&this.setNoData(!1),this}setNoData(e){return this.noDataOverlayEl&&(this.noDataOverlayEl.style.display=e?`flex`:`none`),this}timeframeToMs(e){var t;let n=6e4;return(t={"1m":1*n,"3m":3*n,"4m":4*n,"5m":5*n,"10m":10*n,"15m":15*n,"30m":30*n,"1h":60*n,"2h":120*n,"4h":240*n,"8h":480*n,"1D":1440*n,"1W":10080*n,"1M":43200*n}[e])==null?1440*n:t}getBaseInterval(){var e,t;return(e=(t=this.aggregateFrom)==null?void 0:t[this.timeframe])==null?this.timeframe:e}shouldAggregate(){let e=this.getBaseInterval();return e!==this.timeframe&&this.timeframeToMs(e)<this.timeframeToMs(this.timeframe)}maybeAggregate(e){return this.shouldAggregate()?hd(e,this.timeframeToMs(this.timeframe)):e}timeframeToInterval(e){var t;return(t={"1m":`1min`,"3m":`3min`,"4m":`4min`,"5m":`5min`,"10m":`10min`,"15m":`15min`,"30m":`30min`,"1h":`1h`,"2h":`2h`,"4h":`4h`,"8h":`8h`,"1D":`1day`,"1W":`1week`,"1M":`1month`}[e])==null?`1day`:t}durationToMs(e){var t;let n=1440*60*1e3;return(t={"1D":1*n,"5D":5*n,"1M":30*n,"3M":90*n,"6M":180*n,"1Y":365*n,"5Y":5*365*n,All:20*365*n}[e])==null?365*n:t}triggerLoad(e){if(!this.dataLoader)return;let t=++this._loadGeneration;this._suppressTicks=!0,this.isFetching=!0,this.noMoreData=!1;let n=new Date,r=this.maxCandles*this.timeframeToMs(this.timeframe),i=this.duration?this.durationToMs(this.duration):r,a=this.duration?i:r,o=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0);let s=this.dataLoader,c=[1,5,25,125],l=this.minInitialBars,u=this.maxLookbackMs,d=(r,i)=>{s({start:i,end:n,interval:o,priceSource:this.tickClosePriceSource}).then(s=>{if(t!==this._loadGeneration)return;let f=this.maybeAggregate(s),p=n.getTime()-i.getTime()>=u;if(f.length>=l||r+1>=c.length||p){this.loadData(f,e===`duration`),this.setLoading(!1),f.length===0&&this.setNoData(!0),this.emitter.emit(`dataLoaded`,{timeframe:this.timeframe,interval:o,start:i,end:n,priceSource:this.tickClosePriceSource});return}let m=Math.min(a*c[r+1],u),h=new Date(n.getTime()-m);d(r+1,h)}).catch(()=>{t===this._loadGeneration&&(this.isFetching=!1,this.setLoading(!1))})},f=Math.min(a*c[0],u);d(0,new Date(n.getTime()-f))}checkNeedMoreData(){if(!this.dataLoader||this.isFetching||this.noMoreData)return;let e=Math.max(20,this.prefetchThreshold);if(this._targetViewport.startIndex>e||this.dataStore.length===0)return;let t=this._loadGeneration;this.isFetching=!0;let n=this.dataStore.all[0].time,r=new Date(n-1),i=this.maxCandles*this.timeframeToMs(this.timeframe),a=this.duration?this.durationToMs(this.duration):i,o=this.duration?a:i,s=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0);let c=this.dataLoader,l=[1,5,25,125],u=this.minInitialBars,d=this.maxLookbackMs,f=(e,n)=>{c({start:n,end:r,interval:s,priceSource:this.tickClosePriceSource}).then(i=>{if(t!==this._loadGeneration)return;let a=this.maybeAggregate(i),s=r.getTime()-n.getTime()>=d;if(a.length>=u||e+1>=l.length||s){this.prependData(a),this.setLoading(!1);return}let c=Math.min(o*l[e+1],d),p=new Date(r.getTime()-c);f(e+1,p)}).catch(()=>{t===this._loadGeneration&&(this.isFetching=!1,this.setLoading(!1))})},p=Math.min(o*l[0],d);f(0,new Date(r.getTime()-p))}addIndicator(e,t){var n,r;if(e.pane===`sub`&&this.activeIndicators.filter(e=>e.indicator.pane===`sub`).length>=this.maxSubPanes)return this;let i=Sd.find(t=>t.shortName===e.name),a=i?Object.fromEntries(i.fields.map(e=>[e.key,e.default])):{};a.timeframe=`Chart`,t&&Object.assign(a,t);let o=uu(e.name,++this.indicatorInstanceSeq),s={instanceId:o,indicator:e,shortName:e.name,currentParams:a,visible:!0};this.activeIndicators.push(s),this.dataStore.length>0&&this.indicatorResults.set(o,e.compute(this.dataStore.all));let c=i!==void 0&&i.fields.length>0,l=xd(e.name,a,i),u=(n=a.timeframe)==null?`Chart`:n;if(e.pane===`sub`){let t=new ul(this.theme,this.uiConfig.indicatorOverlay,this.labels.chart);Object.assign(t.el.style,{position:`absolute`,top:`6px`,left:`6px`,zIndex:`10`}),this.canvasWrap.appendChild(t.el),this.subPaneOverlays.set(o,t),t.addPill(o,e.color,l,u,s.visible,()=>this.removeIndicator(o),c?()=>this.openIndicatorSettings(o):null,()=>{s.visible=!s.visible,t.updatePillVisibility(o,s.visible),this.scheduleRender(),this.emitStateChange()})}else{var d;(d=this.indicatorOverlay)==null||d.addPill(o,e.color,l,u,s.visible,()=>this.removeIndicator(o),c?()=>this.openIndicatorSettings(o):null,()=>{var e;s.visible=!s.visible,(e=this.indicatorOverlay)==null||e.updatePillVisibility(o,s.visible),this.scheduleRender(),this.emitStateChange()})}return(r=this._tb)==null||r.setIndicatorOptionActive(e.name,!0,this.activeIndicators.filter(t=>t.shortName===e.name).length),this.scheduleRender(),this.emitStateChange(),this.isRestoringState||this.emitter.emit(`indicatorAdded`,{instanceId:o,shortName:s.shortName,params:{...s.currentParams}}),this}removeIndicator(e){let t=fu(this.activeIndicators,e);if(t.length===0)return this;let n=new Set(t.map(e=>e.instanceId));this.activeIndicators=this.activeIndicators.filter(e=>!n.has(e.instanceId));for(let e of t){this.indicatorResults.delete(e.instanceId),this.subPaneScaleFactors.delete(e.instanceId),this.paneHeightOverrides.delete(e.instanceId);let t=this.subPaneOverlays.get(e.instanceId);if(t)t.destroy(),t.el.remove(),this.subPaneOverlays.delete(e.instanceId);else{var r;(r=this.indicatorOverlay)==null||r.removePill(e.instanceId)}}let i=new Set(t.map(e=>e.shortName));for(let e of i){var a;let t=this.activeIndicators.filter(t=>t.shortName===e).length;(a=this._tb)==null||a.setIndicatorOptionActive(e,t>0,t)}if(this.scheduleRender(),this.emitStateChange(),!this.isRestoringState)for(let e of t)this.emitter.emit(`indicatorRemoved`,{instanceId:e.instanceId,shortName:e.shortName});return this}addIndicatorByName(e,t){if(e===`VOL`){var n;if(this.setVolume(!this.showVolume),this.showVolume){var r;(r=this.indicatorOverlay)==null||r.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this._tb)==null||t.setVolumeControl(!1,this.dataStore.hasVolumeData)},null,()=>{var e;this.setVolume(!this.showVolume),(e=this.indicatorOverlay)==null||e.updatePillVisibility(`VOL`,this.showVolume),this.scheduleRender()})}else{var i;(i=this.indicatorOverlay)==null||i.removePill(`VOL`)}(n=this._tb)==null||n.setVolumeControl(this.showVolume,this.dataStore.hasVolumeData);return}let a=Sd.find(t=>t.shortName===e),o=yd.find(t=>t.shortName===e);if(!(!a&&!o)){if(_d.has(e)&&this.activeIndicators.some(t=>t.shortName===e)){this.removeIndicator(e);return}if(a){let n=Object.fromEntries(a.fields.map(e=>[e.key,e.default]));if(a.fields.some(e=>e.key===`color`)){let t=this.activeIndicators.filter(t=>t.shortName===e).length;n.color=du(vd,t)}t&&Object.assign(n,t);let r={...n};delete r.timeframe,this.addIndicator(a.factory(r),n)}else o&&this.addIndicator(o.factory(),t)}}openIndicatorSettings(e){var t;let n=this.activeIndicators.find(t=>t.instanceId===e);if(!n)return;let r=Sd.find(e=>e.shortName===n.shortName);if(!r||r.fields.length===0)return;let i={...r,fields:[...r.fields,bd]};(t=this.indicatorSettingsDialog)==null||t.show(i,n.currentParams,t=>this.updateIndicatorParams(e,t),()=>this.removeIndicator(e))}updateIndicatorParams(e,t){var n;let r=this.activeIndicators.find(t=>t.instanceId===e);if(!r)return;let i=Sd.find(e=>e.shortName===r.shortName);if(!i)return;let{timeframe:a,...o}=t,s=i.factory(o);r.indicator=s,r.currentParams={...t},this.indicatorResults.delete(e),this.dataStore.length>0&&this.indicatorResults.set(e,s.compute(this.dataStore.all));let c=(n=this.subPaneOverlays.get(e))==null?this.indicatorOverlay:n;c==null||c.updatePillColor(e,s.color),c==null||c.updatePillLabel(e,xd(r.shortName,r.currentParams,i)),c==null||c.updatePillTimeframe(e,a==null?`Chart`:a),this.scheduleRender(),this.emitStateChange()}on(e,t){return this.emitter.on(e,t)}canvasColorOverride(e,t){var n,r,i,a,o,s;let c=this.settingsCanvasColors[e];if(c)return{...t&&{...c.background!==void 0&&{background:c.background},...c.grid!==void 0&&{grid:c.grid},...c.axisText!==void 0&&{axisText:c.axisText},...c.axisBorder!==void 0&&{axisBorder:c.axisBorder},...c.crosshair!==void 0&&{crosshair:c.crosshair}},...((n=(r=(i=(a=(o=c.candleUp)==null?c.candleDown:o)==null?c.wickUp:a)==null?c.wickDown:i)==null?c.borderUp:r)==null?c.borderDown:n)!==void 0&&{candle:{...c.candleUp!==void 0&&{up:c.candleUp},...c.candleDown!==void 0&&{down:c.candleDown},...c.wickUp!==void 0&&{wickUp:c.wickUp},...c.wickDown!==void 0&&{wickDown:c.wickDown},...c.borderUp!==void 0&&{borderUp:c.borderUp},...c.borderDown!==void 0&&{borderDown:c.borderDown}}},...((s=c.volumeUp)==null?c.volumeDown:s)!==void 0&&{volume:{...c.volumeUp!==void 0&&{up:c.volumeUp},...c.volumeDown!==void 0&&{down:c.volumeDown}}}}}overlayTextColor(e){let t=this.settingsCanvasColors[this.themeName];return(t==null?void 0:t.axisText)===void 0?(t==null?void 0:t.background)===void 0?e:u(this.theme.background):t.axisText}buildTheme(e){var t;return p(d(d(e===`dark`?g:_,(t=this.themeOverrides)==null?void 0:t[e]),this.canvasColorOverride(e,!0)),this.wrapper)}buildChromeTheme(e){var t;return p(d(d(e===`dark`?g:_,(t=this.themeOverrides)==null?void 0:t[e]),this.canvasColorOverride(e,!1)),this.wrapper)}initPnlPill(e){var t,n,r;this.pnlPill=new Ml({theme:this.theme,labels:this.labels.pnlPill,currency:(t=e.pnlPill)==null?void 0:t.currency,format:(n=e.pnlPill)==null?void 0:n.format,getBounds:()=>{var e;let t=(e=this._cachedWrapRect)==null?this.canvasWrap.getBoundingClientRect():e;return{width:t.width,height:t.height,right:this.priceAxisWidth,bottom:this.timeAxisHeight}},onToggleExpand:()=>this.togglePnlPillExpanded(),onBulkLevels:()=>{ml(this.levels,this.draftOrderLabel).mixed||this.emitter.emit(`bulkLevelsRequested`,{kind:`sl`,price:null,isFullscreen:this.isFullscreen,source:`pill`})},onCloseAll:()=>this.emitPnlPillCloseAll()}),this.canvasWrap.appendChild(this.pnlPill.el),this.pnlPillVisible=((r=e.pnlPill)==null?void 0:r.visible)!==!1,this.pnlPill.setHidden(!this.pnlPillVisible),this.pnlPill.setExpanded(this.pnlPillExpanded&&this.tfcActive),this.emitter.on(`tfcToggle`,({enabled:e})=>{var t;(t=this.pnlPill)==null||t.setExpanded(this.pnlPillExpanded&&e)}),this.refreshPnlPill()}refreshPnlPill(){var e,t;this.pnlPill&&(this.pnlPill.update(ml(this.levels,this.draftOrderLabel),this.symbol),(e=this.advancedToolbar)==null||e.setPnlPillActive(this.pnlPillVisible,this.symbol),(t=this.topBar)==null||t.setPnlPillActive(this.pnlPillVisible,this.symbol))}setPnlPillVisible(e){var t,n,r;return this.pnlPillVisible===e?this:(this.pnlPillVisible=e,(t=this.pnlPill)==null||t.setHidden(!e),(n=this.advancedToolbar)==null||n.setPnlPillActive(e,this.symbol),(r=this.topBar)==null||r.setPnlPillActive(e,this.symbol),this.emitter.emit(`pnlPillToggle`,{visible:e}),this)}togglePnlPillExpanded(){var e;this.pnlPillExpanded=!this.pnlPillExpanded,this.pnlPillExpanded&&this.tfcEnabled&&!this.tfcActive&&this.setTfcActive(!0),this.pnlPillExpanded||this.expandedClusters.clear(),(e=this.pnlPill)==null||e.setExpanded(this.pnlPillExpanded&&this.tfcActive),this.recomputeRenderStyle(),this.renderTradeLayer()}emitPnlPillCloseAll(){let e=ml(this.levels,this.draftOrderLabel);e.count!==0&&this.emitter.emit(`pnlPillCloseAll`,{count:e.count,pnl:e.hasPnl?e.pnl:null,labels:e.positions.map(e=>e.label),data:e.positions.map(e=>e.data),isFullscreen:this.isFullscreen})}applyThemeToComponents(){var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g;(e=this._tb)==null||e.setTheme(this.chromeTheme),(t=this.bottomBar)==null||t.setTheme(this.chromeTheme),(n=this.leftBar)==null||n.setTheme(this.chromeTheme),(r=this.tradePopover)==null||r.setTheme(this.chromeTheme),(i=this.tradeActionBar)==null||i.setTheme(this.chromeTheme),(a=this.drawingStylePopover)==null||a.setTheme(this.chromeTheme),(o=this._draftQtyFlyout)==null||o.setTheme(this.chromeTheme),(s=this.indicatorSettingsDialog)==null||s.setTheme(this.chromeTheme),(c=this.chartSettingsDialog)==null||c.setTheme(this.chromeTheme),(l=this.layoutPopover)==null||l.setTheme(this.chromeTheme),(u=this.snapshotPopover)==null||u.setTheme(this.chromeTheme),(d=this.comparePickerModal)==null||d.setTheme(this.chromeTheme),(f=this.isinPickerModal)==null||f.setTheme(this.chromeTheme),(p=this.tradeButton)==null||p.setTheme(this.theme,this.priceAxisWidth),(m=this.compareLegend)==null||m.setTheme(this.theme),(h=this.pnlPill)==null||h.setTheme(this.theme),(g=this.indicatorOverlay)==null||g.setTheme(this.theme);for(let e of this.subPaneOverlays.values())e.setTheme(this.theme)}setTheme(e){return this.themeName=e,this.theme=this.buildTheme(e),this.chromeTheme=this.buildChromeTheme(e),this.applyThemeToComponents(),this.applyScrollToEndBtnStyles(),this.applyResetViewBtnStyles(),this.applyMobileDrawingFlyoutTheme(),this.siSymbolSpan&&(this.siSymbolSpan.style.color=this.overlayTextColor(this.theme.tooltip.text)),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus]),this.applyOverlayLabelStyles(),this.scheduleRender(),this.emitStateChange(),this}getTimeframe(){return this.timeframe}setDuration(e,t){var n,r,i;let a=(n=t==null?this._durationTimeframeMap[e]:t)==null?this.timeframe:n;return this.duration=e,this.timeframe=a,(r=this._tb)==null||r.setTimeframe(a),(i=this.bottomBar)==null||i.setActive(e),this.emitter.emit(`durationChange`,{duration:e,timeframe:a}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`),this}getDuration(){var e;return(e=this.duration)==null?null:e}setTimeframe(e){var t;return this.timeframe=e,(t=this._tb)==null||t.setTimeframe(e),this.emitter.emit(`timeframeChange`,{timeframe:e}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`timeframe`),this}setCrosshair(e){var t,n;if(e===null||!this.crosshairEnabled){if(this.crosshair===null)return;this.crosshair=null,this.scheduleRender();return}let{chartW:r,priceH:i}=this.getChartLayout(),a=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):t,o=this.scaleManager.xToPixel(e.barIndex,this.viewport,r),s=this.scaleManager.yToPixel(e.price,a,i),c=this.dataStore.all,l=(n=c[Math.max(0,Math.min(c.length-1,Math.round(e.barIndex)))])==null?null:n;this.crosshair={x:o,y:s,barIndex:e.barIndex,price:e.price,bar:l},this.scheduleRender()}setViewport(e){e.startIndex===this.viewport.startIndex&&e.endIndex===this.viewport.endIndex||(this.viewport={...this.viewport,startIndex:e.startIndex,endIndex:e.endIndex},this._targetViewport={...this.viewport},this.scheduleRender())}timeToBarIndex(e){let t=this.dataStore.all;if(t.length===0)return null;let n=t[0],r=t[t.length-1];return!n||!r||e<n.time||e>r.time?null:this.timestampToBarIndex(e)}setThemeOverrides(e){return this.themeOverrides=e,this.theme=this.buildTheme(this.themeName),this.chromeTheme=this.buildChromeTheme(this.themeName),this.applyThemeToComponents(),this.scheduleRender(),this}setCanvasColors(e){return this.settingsCanvasColors=e==null?{}:e,this.setTheme(this.themeName),this}setTimezone(e){return this.timezone=e===`local`?Intl.DateTimeFormat().resolvedOptions().timeZone:e,this.scheduleRender(),this}setSeries(e){var t;return this.series=e,(t=this._tb)==null||t.setSeries(e),this.emitter.emit(`seriesChange`,{series:e}),this.scheduleRender(),this.emitStateChange(),this}setTfcActive(e){var t;if(!this.tfcEnabled)return this;if(this.tfcActive=e,(t=this._tb)==null||t.setTfcActive(e),!e){var n,r,i;(n=this.tradeButton)==null||n.hide(),(r=this.tradePopover)==null||r.hide(),(i=this.tradeActionBar)==null||i.hide(),this.draftOrderLabel!==null&&this.removeDraftOrder()}return this.chartSettingsDialog&&(this.chartSettingsDialog.destroy(),this.chartSettingsDialog=null),this.renderTradeLayer(),this.emitter.emit(`tfcToggle`,{enabled:e}),this.emitStateChange(),this}setCrosshairEnabled(e){var t,n,r,i;if(this.crosshairEnabled===e)return this;if(this.crosshairEnabled=e,(t=this.advancedToolbar)==null||t.setCrosshairActive(e),(n=this.topBar)==null||n.setCrosshairActive(e),(r=this.compactToolbar)==null||r.setCrosshairActive(e),(i=this.mobileHeader)==null||i.setCrosshairActive(e),!e){var a;this.crosshair!==null&&(this.crosshair=null,this.emitter.emit(`crosshair`,null)),this._mobileCrosshairActive=!1,(a=this.tradeButton)==null||a.hide(),this.scheduleRender()}return this.emitter.emit(`crosshairToggle`,{enabled:e}),this}clearDuration(){var e,t;this.duration!==void 0&&(this.duration=void 0,(e=this._tb)==null||e.setActiveDuration(void 0),(t=this.bottomBar)==null||t.setActive(void 0),this.emitStateChange())}setVolume(e){return this.showVolume=e,this.scheduleRender(),this.emitStateChange(),this}dismissAllUI(){var e,t,n,r,i,a,o,s;return this.isAnyUIOpen()?((e=this._draftQtyFlyout)==null||e.hide(),(t=this.isinPickerModal)==null||t.hide(),(n=this.comparePickerModal)==null||n.hide(),(r=this.indicatorSettingsDialog)==null||r.hide(),(i=this.chartSettingsDialog)==null||i.hide(),(a=this.tradePopover)==null||a.hide(),(o=this.tradeActionBar)==null||o.hide(),(s=this._tb)==null||s.closeDropdown(),this.hideMobileDrawingFlyout(),!0):!1}isAnyUIOpen(){var e,t,n,r,i,a,o,s,c,l;return((e=this._draftQtyFlyout)==null?void 0:e.isVisible)===!0||((t=this.isinPickerModal)==null?void 0:t.isVisible)===!0||((n=this.comparePickerModal)==null?void 0:n.isVisible)===!0||((r=this.indicatorSettingsDialog)==null?void 0:r.isVisible)===!0||((i=this.chartSettingsDialog)==null?void 0:i.isVisible)===!0||((a=this.tradePopover)==null?void 0:a.isVisible)===!0||((o=this.tradeActionBar)==null?void 0:o.isVisible)===!0||((s=this._tb)==null?void 0:s.hasOpenDropdown)===!0||((c=(l=this._mobileDrawingFlyout)==null?void 0:l.style.display)==null?`none`:c)!==`none`}emitUiState(){this.emitter.emit(`uiStateChange`,{hasOpenUI:this.isAnyUIOpen()})}emitStateChange(){this.isRestoringState||this.emitter.emit(`stateChange`,{symbol:this.symbol,state:this.getState()})}getState(){return{symbol:this.symbol,timeframe:this.timeframe,duration:this.duration,series:this.series,showVolume:this.showVolume,theme:this.themeName,indicators:this.activeIndicators.map(e=>({shortName:e.shortName,params:{...e.currentParams},visible:e.visible,instanceId:e.instanceId})),drawings:this.drawingManager.getDrawingsSnapshot().map(e=>({...e,points:e.points.map(e=>{var t;return{...e,timestamp:(t=e.timestamp)==null?this.barIndexToTimestamp(e.barIndex):t}})})),positionRenderStyle:this.baseRenderStyle(),tradeDisplayFilter:this.tradeDisplayFilter,canvasColors:Object.keys(this.settingsCanvasColors).length>0?{...this.settingsCanvasColors}:void 0,tfcEnabled:this.tfcActive,viewport:this.getViewportTimestamps(),priceScale:this.priceScaleFactor!==1||this.pricePanOffset!==0?{factor:this.priceScaleFactor,panOffset:this.pricePanOffset}:void 0,compares:this.compareManager&&this.compareManager.isActive()?this.compareManager.list().map(e=>e.symbol):void 0}}getViewportTimestamps(){if(this.dataStore.all.length===0)return;let e=this.barIndexToTimestamp(this.viewport.startIndex),t=this.barIndexToTimestamp(this.viewport.endIndex);if(!(e==null||t==null))return{startTime:e,endTime:t}}applyViewportFromTimestamps(e,t){let n=this.timestampToBarIndex(e),r=this.timestampToBarIndex(t);this.viewport={...this.viewport,startIndex:n,endIndex:r},this._targetViewport={...this.viewport}}setState(e){this.isRestoringState=!0;try{if(this.setSeries(e.series),this.setVolume(e.showVolume),e.theme!=null&&this.setTheme(e.theme),e.timeframe!=null){var t,n,r;this.timeframe=e.timeframe,this.duration=e.duration,(t=this._tb)==null||t.setTimeframe(e.timeframe),(n=this._tb)==null||n.setActiveDuration(e.duration),(r=this.bottomBar)==null||r.setActive(e.duration),this.updateCountdownState()}let s=this.activeIndicators.map(e=>e.instanceId);for(let e of s)this.removeIndicator(e);for(let t of e.indicators){var i,a;let e=Sd.find(e=>e.shortName===t.shortName);if(!e)continue;let n={...t.params};delete n.timeframe,this.addIndicator(e.factory(n),t.params);let r=this.activeIndicators[this.activeIndicators.length-1];if(!r)continue;r.currentParams={...t.params};let o=(i=this.subPaneOverlays.get(r.instanceId))==null?this.indicatorOverlay:i;t.visible===!1&&(r.visible=!1,o==null||o.updatePillVisibility(r.instanceId,!1));let s=(a=t.params.timeframe)==null?`Chart`:a;o==null||o.updatePillTimeframe(r.instanceId,s)}let c=e.drawings.map(e=>({...e,points:e.points.map(e=>e.timestamp==null||this.dataStore.all.length===0?e:{...e,barIndex:this.timestampToBarIndex(e.timestamp)})}));if(this.drawingManager.loadDrawings(c),e.positionRenderStyle&&(this.positionRenderStyleOverride=e.positionRenderStyle,this.positionRenderStyle=e.positionRenderStyle),e.tradeDisplayFilter&&(this.tradeDisplayFilter=e.tradeDisplayFilter),e.canvasColors&&(this.settingsCanvasColors=e.canvasColors),e.tfcEnabled!==void 0&&this.tfcEnabled){var o;this.tfcActive=e.tfcEnabled,(o=this._tb)==null||o.setTfcActive(e.tfcEnabled)}if(e.priceScale&&(this.priceScaleFactor=e.priceScale.factor,this.pricePanOffset=e.priceScale.panOffset,this._displayedPriceRange=null,this._lockedAutoFitBase=null),e.viewport&&(this.dataStore.all.length>0?this.applyViewportFromTimestamps(e.viewport.startTime,e.viewport.endTime):this._pendingViewportRestore={viewport:e.viewport,priceScale:e.priceScale}),e.compares&&e.compares.length>0&&this.compareManager){this.compareManager.clear();for(let t of e.compares)this.compareManager.add(t);this.refreshCompareLegend()}}finally{this.isRestoringState=!1}return this.emitStateChange(),this.scheduleRender(),this}barIndexToTimestamp(e){let t=this.dataStore.all,n=t.length;if(n===0)return;let r=t[0];if(!r)return;if(n===1)return r.time;let i=Math.floor(e),a=e-i;if(i<0){let n=t[1];return n?r.time+e*(n.time-r.time):r.time}if(i>=n-1){let i=t[n-1],a=t[n-2];return!i||!a?r.time:i.time+(e-(n-1))*(i.time-a.time)}let o=t[i],s=t[i+1];return!o||!s?r.time:o.time+a*(s.time-o.time)}timestampToBarIndex(e){let t=this.dataStore.all,n=t.length;if(n===0)return 0;let r=t[0];if(!r||n===1)return 0;if(e<=r.time){let n=t[1];if(!n)return 0;let i=n.time-r.time;return i>0?(e-r.time)/i:0}let i=n-1,a=t[i],o=t[i-1];if(!a||!o)return 0;if(e>=a.time){let t=a.time-o.time;return i+(t>0?(e-a.time)/t:0)}let s=0,c=i;for(;s<c;){var l,u;let n=s+c+1>>1;((l=(u=t[n])==null?void 0:u.time)==null?0:l)<=e?s=n:c=n-1}let d=t[s],f=t[s+1];if(!d||!f)return s;let p=f.time-d.time;return s+(p>0?(e-d.time)/p:0)}reanchorDrawingsByTimestamp(){if(this.dataStore.all.length!==0)for(let e of this.drawingManager.getDrawings())for(let t of e.points){if(t.timestamp==null){let e=this.barIndexToTimestamp(t.barIndex);e!=null&&(t.timestamp=e);continue}t.barIndex=this.timestampToBarIndex(t.timestamp)}}backfillDrawingTimestamps(){if(this.dataStore.all.length!==0)for(let e of this.drawingManager.getDrawings())for(let t of e.points){if(t.timestamp!=null)continue;let e=this.barIndexToTimestamp(t.barIndex);e!=null&&(t.timestamp=e)}}resetChartSettings(){return this.setState({symbol:this.symbol,series:`candlestick`,theme:`dark`,timeframe:`1D`,duration:void 0,showVolume:!0,indicators:[],drawings:[]}),this.positionRenderStyleOverride=null,localStorage.removeItem(this.RENDER_STYLE_LS_KEY),this.recomputeRenderStyle(),this.settingsCanvasColors={},this.setTheme(`dark`),this.emitStateChange(),this}setInstrument(e){return this.instrumentSpec=e,this.resolvedInstrument=null,this.scheduleRender(),this}getInstrument(){let e=this.dataStore.getPricePrecision();return(!this.resolvedInstrument||this.resolvedInstrumentPrecision!==e)&&(this.resolvedInstrument=M(this.instrumentSpec,e),this.resolvedInstrumentPrecision=e),this.resolvedInstrument}setAccount(e){return this.accountSpec=e,this.scheduleRender(),this}getAccount(){return this.accountSpec}setSymbol(e){var t,n;return this.symbol=e,(t=this.tradePopover)==null||t.setSymbol(e),this.siSymbolSpan&&(this.siSymbolSpan.textContent=e,this.siSymbolSpan.style.display=e?`inline`:`none`),(n=this.isinPickerModal)==null||n.setCurrentSymbol(e),this.tickActivityTimer!==null&&(clearTimeout(this.tickActivityTimer),this.tickActivityTimer=null),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus]),this.liveBidAsk=null,this.liveLtp=null,this}setIsins(e){var t;return this.isins=e,(t=this.isinPickerModal)==null||t.setIsins(e),this}renderSymbolInfoOHLC(e){if(!this.siOHLCSpan)return;if(!e){this.siOHLCSpan.innerHTML=``,this.siOHLC2Span&&(this.siOHLC2Span.innerHTML=``);return}let t=e.close>=e.open?this.theme.candle.up:this.theme.candle.down,n=this.overlayTextColor(this.theme.axisText),r=e=>e.toFixed(this.dataStore.getPricePrecision()),i=e=>e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(1)+`K`:e.toFixed(0),a=this.labels.ohlc,o=(e,t)=>{e.innerHTML=``;for(let[r,i,a]of t){let t=document.createElement(`span`);t.style.marginRight=`8px`;let o=document.createElement(`span`);o.textContent=r+`\xA0`,o.style.color=n,o.style.opacity=`0.6`;let s=document.createElement(`span`);s.textContent=i,s.style.color=a,t.append(o,s),e.appendChild(t)}};o(this.siOHLCSpan,[[a.open,r(e.open),n],[a.high,r(e.high),n]]),this.siOHLC2Span&&o(this.siOHLC2Span,[[a.low,r(e.low),n],[a.close,r(e.close),t],...e.volume!=null&&e.volume!==0?[[a.volume,i(e.volume),n]]:[]])}setMinLots(e){var t;return console.warn(`[acttrader-charts] setMinLots() is deprecated. Pass minLots in the initial ChartConfig instead.`),this._minLots=e,(t=this.tradePopover)==null||t.setLots(e),this}setDraftQty(e){return this.draftOrderLabel&&this.setLevelQty(this.draftOrderLabel,e),this}updateLevelQty(e,t){return!e||e===this.draftOrderLabel||!Number.isFinite(t)||t<=0||this.setLevelQty(e,t),this}setLevelQty(e,t){var n,r;let i=this.levels.findIndex(t=>t.label===e);if(i===-1)return;let a=this.levels[i];if(a.lots===t)return;this.originalQtyByLabel.has(e)||this.originalQtyByLabel.set(e,a.lots);let o=(n=(r=this.originalQtyByLabel.get(e))==null?a.lots:r)==null?t:n;this.levels=[...this.levels.slice(0,i),{...a,lots:t},...this.levels.slice(i+1)],e!==this.draftOrderLabel&&this.pendingQtyChanges.set(e,t),this.emitter.emit(`tradeLevelQtyChange`,{label:e,type:e===this.draftOrderLabel?`draft`:a.type,newLots:t,previousLots:o,isFullscreen:this.isFullscreen}),this.renderTradeLayer()}openDraftQtyFlyout(e){var t;this._draftQtyFlyout||(this._draftQtyFlyout=new ru(this.chromeTheme,e=>{this._activeQtyPillLabel&&this.setLevelQty(this._activeQtyPillLabel,e)},()=>this.emitUiState()),this.getFloatingRoot().appendChild(this._draftQtyFlyout.el)),this._activeQtyPillLabel=e.label;let n=this.levels.find(t=>t.label===e.label),r=(t=n==null?void 0:n.lots)==null?this._qtyFieldMin:t,i=this.canvasWrap.getBoundingClientRect(),a=i.left+e.pillX,o=i.top+e.pillY+e.pillH;this._draftQtyFlyout.show(a,o,r,this._qtyFieldMin,this._qtyFieldMax)}setDraftOrderLabels(e){return console.warn(`[acttrader-charts] setDraftOrderLabels() is deprecated and is a no-op. DraftOrderQtyInput has been removed.`),this}setDrawingTool(e){var t;return this.drawingManager.setActiveTool(e),(t=this.leftBar)==null||t.setActiveTool(e),this.drawCanvas.style.cursor=e?`crosshair`:`default`,this.scheduleRender(),this}undoDrawing(){return this.drawingManager.undo(),this.scheduleRender(),this}redoDrawing(){return this.drawingManager.redo(),this.scheduleRender(),this}hideAllDrawings(){return this.drawingManager.hideAll(),this.scheduleRender(),this}showAllDrawings(){return this.drawingManager.showAll(),this.scheduleRender(),this}lockAllDrawings(){return this.drawingManager.lockAll(),this.scheduleRender(),this}unlockAllDrawings(){return this.drawingManager.unlockAll(),this.scheduleRender(),this}deleteSelectedDrawing(){return this.drawingManager.deleteSelected(),this.hideMobileDrawingFlyout(),this.scheduleRender(),this}clearAllDrawings(){return this.drawingManager.clearAll(),this.scheduleRender(),this}getActiveTool(){return this.drawingManager.getActiveTool()}getDrawings(){return this.drawingManager.getDrawings()}getDrawingById(e){return this.drawingManager.getDrawingById(e)}getSelectedDrawing(){return this.drawingManager.getSelectedDrawing()}updateDrawingStyle(e,t){return this.drawingManager.updateDrawingStyle(e,t),this.scheduleRender(),this}connectStream(e){return this.streamAdapter=e,e.onTick(e=>this.onTick(e)),e.onStatus(e=>{this.streamStatus=e,this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[e],this.siStreamDot.title=`Stream ${e}`),this.emitter.emit(`streamStatus`,{status:e})}),e.connect(),this}disconnectStream(){var e;return(e=this.streamAdapter)==null||e.disconnect(),this.streamAdapter=null,this}setTickClosePriceSource(e){return this._applyPriceSource(e,!1),this}_applyPriceSource(e,t){var n,r;let i=e!==this.tickClosePriceSource;if(this.tickClosePriceSource=e,(n=this.topBar)==null||n.setPriceSource(e),(r=this.advancedToolbar)==null||r.setPriceSource(e),this.scheduleRender(),i&&this._reloadOnPriceSourceChange&&this.dataLoader&&!this._isDestroyed){let e=this.getViewportTimestamps();if(e){var a;this._pendingViewportRestore={...(a=this._pendingViewportRestore)==null?{}:a,viewport:e}}this.triggerLoad(`priceSource`)}t&&this.emitter.emit(`priceSourceChange`,{source:e})}setShowLtpPrice(e){return this.showLtpPrice=e,this.scheduleRender(),this}setShowAskLine(e){return this.showAskLine=e,this.scheduleRender(),this}setShowBidLine(e){return this.showBidLine=e,this.scheduleRender(),this}pushTick(e){let t=e.T==null?Date.now():typeof e.T==`string`?new Date(e.T).getTime():e.T;return this.onTick({time:t,bid:e.B,ask:e.A,volume:e.LTPV!=null&&e.LTPV>0?e.LTPV:0,ltp:e.LTP!=null&&e.LTP>0?e.LTP:void 0}),this}setLevels(e,t,n,r,i,a){let o=e.map(e=>{if(r===`position`){let r={label:String(e[t]),price:Number(e[n]),type:`position`,data:e};return e.text!==void 0&&(r.text=String(e.text)),i!==void 0&&e[i]!==void 0&&(r.pnl=Number(e[i])),a!==void 0&&e[a]!==void 0&&(r.pnlText=String(e[a])),e.side!==void 0&&(r.side=e.side),e.stopLossPrice!==void 0&&(r.stopLossPrice=Number(e.stopLossPrice)),e.stopLossTrailing&&(r.stopLossTrailing=!0),e.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.contractSize!==void 0&&(r.contractSize=Number(e.contractSize)),e.valuePerPoint!==void 0&&(r.valuePerPoint=Number(e.valuePerPoint)),e.currencySymbol!==void 0&&(r.currencySymbol=String(e.currencySymbol)),e.entryPriceEditable&&(r.entryPriceEditable=!0),e.orderType!==void 0&&(r.orderType=e.orderType),e.lots!==void 0&&(r.lots=Number(e.lots)),e.timestamp!==void 0&&(r.timestamp=Number(e.timestamp)),e.timeDraggable&&(r.timeDraggable=!0),r}if(r===`pending`){var o,s;let r={label:String(e[t]),price:Number(e[n]),type:`pending`,side:(o=e.side)==null?`buy`:o,orderType:(s=e.orderType)==null?`limit`:s,data:e};return e.text!==void 0&&(r.text=String(e.text)),e.lots!==void 0&&(r.lots=Number(e.lots)),e.stopLossPrice!==void 0&&(r.stopLossPrice=Number(e.stopLossPrice)),e.stopLossTrailing&&(r.stopLossTrailing=!0),e.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.ToClose!==void 0&&(r.ToClose=String(e.ToClose)),e.timestamp!==void 0&&(r.timestamp=Number(e.timestamp)),e.timeDraggable&&(r.timeDraggable=!0),r}return{label:String(e[t]),price:Number(e[n]),type:`trade`,text:e.text===void 0?void 0:String(e.text),data:e}});if(this.hideLevelConfirmCancel&&this.pendingLevelDrags.size>0)for(let e of o){let t=this.pendingLevelDrags.get(e.label);if(!(t!=null&&t.length))continue;let n=e;t.every(t=>t.isRemoval?t.field===`stopLoss`?n.stopLossPrice===void 0:n.takeProfitPrice===void 0:t.field===`main`?e.price===t.newPrice:t.field===`stopLoss`?n.stopLossPrice===t.newPrice:n.takeProfitPrice===t.newPrice)&&(this.pendingLevelDrags.delete(e.label),this.selectedTradeLabel===e.label&&(this.selectedTradeLabel=null))}if(this.pendingQtyChanges.size>0)for(let e=0;e<o.length;e++){let t=o[e],n=this.pendingQtyChanges.get(t.label);if(n===void 0||t.type!==`pending`&&t.type!==`position`)continue;let r=t;this.originalQtyByLabel.set(t.label,r.lots),o[e]={...r,lots:n}}let s=this.draftOrderLabel===null?void 0:this.levels.find(e=>e.type===r&&e.label===this.draftOrderLabel&&!o.some(t=>t.label===e.label)),c=new Map(this.levels.map(e=>[e.label,e]));if(this.levels=[...this.levels.filter(e=>e.type!==r),...o,...s?[s]:[]],this._revealNewBrackets){let e=[];for(let t of o){let n=c.get(t.label);if(!n)continue;let r=t;r.stopLossPrice!==void 0&&n.stopLossPrice===void 0&&e.push(r.stopLossPrice),r.takeProfitPrice!==void 0&&n.takeProfitPrice===void 0&&e.push(r.takeProfitPrice)}e.length>0&&this._revealPrices(e)}if(this._timeAnchorOverride.size>0)for(let e of[...this._timeAnchorOverride.keys()]){let t=this.levels.find(t=>t.label===e);if(!t){this._timeAnchorOverride.delete(e);continue}let n=t.timestamp,r=this._timeAnchorOverride.get(e);this._honorsLevelTimestamp(t)&&n!==void 0&&r!==void 0&&Math.round(this.timestampToBarIndex(n))===Math.round(this.timestampToBarIndex(r))&&this._timeAnchorOverride.delete(e)}return this.selectedTradeLabel!==null&&!this.levels.some(e=>e.label===this.selectedTradeLabel)&&(this.selectedTradeLabel=null),this.recomputeRenderStyle(),this.renderTradeLayer(),this.refreshPnlPill(),this}removeLevelByLabel(e){return this.levels=this.levels.filter(t=>t.label!==e),this.renderTradeLayer(),this.refreshPnlPill(),this}showDraftOrder(e,t,n){if(this.draftOrderLabel){let e=this.levels.find(e=>e.label===this.draftOrderLabel);if((e==null?void 0:e.side)===t&&(e==null?void 0:e.orderType)===n)return this}return this.clearDraftOrder(),this.createDraftOrder(t,e,n),this}showMarketDraft(e,t){this.clearDraftOrder();let n=`__draft_${Date.now()}`,r={type:`pending`,label:n,side:t,price:e,orderType:`market`,data:{_isDraft:!0}};return this.levels=[...this.levels,r],this.draftOrderLabel=n,this.renderTradeLayer(),this.emitter.emit(`draftInitiated`,{side:t,price:e,orderType:`market`,isFullscreen:this.isFullscreen}),this}clearDraftOrder(){return this.removeDraftOrder(),this}updateLevelBracket(e,t,n){var r;let i=t===`sl`?`stopLoss`:`takeProfit`,a=this.levels.find(t=>t.label===e);if(!a)return this;let o=t===`sl`?a.stopLossPrice:a.takeProfitPrice,s=(r=this.pendingLevelDrags.get(e))==null?[]:r,c=s.find(e=>e.field===i),l=s.filter(e=>e.field!==i);if(this.levels=this.levels.map(r=>{if(r.label!==e)return r;let i=r;return t===`sl`?{...i,stopLossPrice:n==null?void 0:n}:{...i,takeProfitPrice:n==null?void 0:n}}),n===null){if(o!==void 0){var u;let e=(u=c==null?void 0:c.oldPrice)==null?o:u;l.push({field:i,newPrice:o,oldPrice:e,isRemoval:!0})}l.length===0?this.pendingLevelDrags.delete(e):this.pendingLevelDrags.set(e,l)}else{var d;let t=(d=c==null?void 0:c.isNew)==null?o===void 0:d,r=c&&!c.isRemoval?c.oldPrice:o==null?n:o;l.push({field:i,newPrice:n,oldPrice:r,isNew:t}),this.pendingLevelDrags.set(e,l),this._revealNewBrackets&&t&&this._revealPrices([n])}return this.renderTradeLayer(),this}addLevelBracket(e,t){var n,r,i,a,o;let s=this.levels.find(t=>t.label===e);if(!s)return this;let c=t===`sl`?`stopLoss`:`takeProfit`,l=t===`sl`?s.stopLossPrice!==void 0:s.takeProfitPrice!==void 0,u=(n=(r=this.pendingLevelDrags.get(e))==null?void 0:r.some(e=>e.field===c&&!e.isRemoval))==null?!1:n;if(l||u)return this;let{priceH:d}=this.getChartLayout(),f=(i=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):i,p=this.scaleManager.yToPixel(s.price,f,d),m=(a=s.side)==null?`buy`:a,h=p+(m===`buy`&&t===`sl`||m===`sell`&&t===`tp`?30:-30),g=this.scaleManager.pixelToPrice(h,f,d);this.updateLevelBracket(e,t,g);let _=((o=this.pendingLevelDrags.get(e))==null?[]:o).filter(e=>e.field!==c);return _.push({field:c,newPrice:g,oldPrice:g,isNew:!0}),this.pendingLevelDrags.set(e,_),this.emitter.emit(`tradeLevelBracketActivated`,{label:e,bracketType:t,price:g,isFullscreen:this.isFullscreen}),this.emitter.emit(`tradeLevelDrag`,{label:e,newPrice:g,data:s.data,bracketType:t===`sl`?`stopLoss`:`takeProfit`,isFullscreen:this.isFullscreen}),this}addBracket(e,t){var n,r;if(t)return this.addLevelBracket(t,e);if(!this.draftOrderLabel)return this;let i=this.draftOrderLabel,a=this.levels.find(e=>e.label===i);if(!a||(e===`sl`?a.stopLossPrice!==void 0:a.takeProfitPrice!==void 0))return this;let{priceH:o}=this.getChartLayout(),s=(n=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):n,c=this.scaleManager.yToPixel(a.price,s,o),l=(r=a.side)==null?`buy`:r,u=c+(l===`buy`&&e===`sl`||l===`sell`&&e===`tp`?30:-30),d=this.scaleManager.pixelToPrice(u,s,o);return this.updateDraftOrderBracket(e,d),this.emitter.emit(`tradeLevelBracketActivated`,{label:``,bracketType:e,price:d,isFullscreen:this.isFullscreen}),this.emitter.emit(`tradeLevelDrag`,{label:i,newPrice:d,data:a.data,bracketType:e===`sl`?`stopLoss`:`takeProfit`,isFullscreen:this.isFullscreen}),this}removeBracket(e,t){if(t){var n,r;let i=e===`sl`?`stopLoss`:`takeProfit`,a=this.levels.find(e=>e.label===t);if(!a)return this;let o=(n=this.pendingLevelDrags.get(t))==null?void 0:n.find(e=>e.field===i),s=o&&!o.isRemoval?o.newPrice:e===`sl`?a.stopLossPrice:a.takeProfitPrice;if(s===void 0)return this;let c=((r=this.pendingLevelDrags.get(t))==null?[]:r).filter(e=>e.field!==i);return c.push({field:i,newPrice:s,oldPrice:s,isRemoval:!0}),this.pendingLevelDrags.set(t,c),this.renderTradeLayer(),this}return e===`sl`?this.draftBracketPnl={...this.draftBracketPnl,sl:void 0}:this.draftBracketPnl={...this.draftBracketPnl,tp:void 0},this.updateDraftOrderBracket(e,null)}updateLevelMainPrice(e,t){var n;let r=this.levels.find(t=>t.label===e);if(!r)return this;let i=(n=this.pendingLevelDrags.get(e))==null?[]:n,a=i.find(e=>e.field===`main`),o=a?a.oldPrice:r.price,s=i.filter(e=>e.field!==`main`);return s.push({field:`main`,newPrice:t,oldPrice:o}),this.pendingLevelDrags.set(e,s),r.price=t,this.renderTradeLayer(),this}setBracketLabelMode(e,t){return this._bracketLabel={mode:e,currencySymbol:t==null?this._bracketLabel.currencySymbol:t},this.scheduleRender(),this}setDraftBracketPnl(e,t){return e===`sl`?this.draftBracketPnl={...this.draftBracketPnl,sl:t==null?void 0:t}:this.draftBracketPnl={...this.draftBracketPnl,tp:t==null?void 0:t},this.renderTradeLayer(),this}updateDraftOrderBracket(e,t){return this.draftOrderLabel?(this.levels=this.levels.map(n=>{if(n.label!==this.draftOrderLabel)return n;let r=n;return e===`sl`?{...r,stopLossPrice:t==null?void 0:t}:{...r,takeProfitPrice:t==null?void 0:t}}),this._revealNewBrackets&&t!==null&&this._revealPrices([t]),this.scheduleRender(),this):this}updateDraftOrderPrice(e){if(!this.draftOrderLabel)return!1;this.levels=this.levels.map(t=>t.label===this.draftOrderLabel?{...t,price:e}:t);let t=this.pendingLevelDrags.get(this.draftOrderLabel);if(t){let n=t.find(e=>e.field===`main`);n&&(n.newPrice=e)}return this.renderTradeLayer(),!0}cancelLevelEdit(e){var t;if(this.undoIsNewBracketMutations(e),this.pendingLevelDrags.delete(e),this.pendingQtyChanges.has(e)){this.pendingQtyChanges.delete(e);let t=this.levels.findIndex(t=>t.label===e);if(t!==-1&&this.originalQtyByLabel.has(e)){let n=this.originalQtyByLabel.get(e),r=this.levels[t];this.levels=[...this.levels.slice(0,t),{...r,lots:n},...this.levels.slice(t+1)]}this.originalQtyByLabel.delete(e)}return e===((t=this.draftOrderLabel)==null?this.selectedTradeLabel:t)&&(this.draftBracketPnl={}),this.selectedTradeLabel===e&&(this.selectedTradeLabel=null),this.renderTradeLayer(),this}cancelCurrentEdit(){return this.draftOrderLabel?this.clearDraftOrder():this.selectedTradeLabel&&this.revertPendingChanges(this.selectedTradeLabel),this}selectLevel(e){if(!this.draftOrderLabel&&e!==this.selectedTradeLabel&&(this.draftBracketPnl={}),this.selectedTradeLabel=e,e!==null){this.crosshair=null;let t=this.lastClusters.find(t=>t.members.some(t=>t.level.label===e));t&&this.expandedClusters.add(t.id)}return this.renderTradeLayer(),this}setLevelClusteringEnabled(e){return this.levelClusteringEnabled=e,this.expandedClusters.clear(),this.renderTradeLayer(),this}setClusterThresholdDistance(e){return this.clusterThresholdDistance=e,this.expandedClusters.clear(),this.renderTradeLayer(),this}setTradeLevelButtonScale(e){return this.tradeLevelButtonScale=Math.min(Math.max(e,1),3),this.renderTradeLayer(),this}toDataUrl(){return this.captureToDataUrl()}drawOnto(e,t,n,r,i){e.fillStyle=this.theme.background,e.fillRect(t,n,r,i);let a=[this.canvas,this.drawCanvas];for(let o of a)o&&o.width&&o.height&&e.drawImage(o,t,n,r,i)}captureToDataUrl(){let e=this.canvas;if(!e.width||!e.height)return null;let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)return null;n.fillStyle=this.theme.background,n.fillRect(0,0,t.width,t.height);let r=[this.canvas,this.drawCanvas];for(let e of r)e&&e.width&&e.height&&n.drawImage(e,0,0);return t.toDataURL(`image/png`)}openLayoutPopover(){var e,t,n;if(!this.layoutPopover)return;let r=(e=(t=this.advancedToolbar)==null?void 0:t.getLayoutBtnEl())==null?(n=this.topBar)==null?void 0:n.getLayoutBtnEl():e;if(r)if(this.layoutPopover.isVisible)this.layoutPopover.hide();else{let e=this.getFloatingRoot();this.layoutPopover.el.parentElement!==e&&e.appendChild(this.layoutPopover.el),this.layoutPopover.show(r)}}openSnapshotPopover(){var e,t,n;if(!this.snapshotPopover)return;let r=(e=(t=this.advancedToolbar)==null?void 0:t.getSnapshotBtnEl())==null?(n=this.topBar)==null?void 0:n.getSnapshotBtnEl():e;if(r)if(this.snapshotPopover.isVisible)this.snapshotPopover.hide();else{let e=this.getFloatingRoot();this.snapshotPopover.el.parentElement!==e&&e.appendChild(this.snapshotPopover.el),this.snapshotPopover.show(r)}}handleLayoutPresetSelect(e){var t,n,r,i;this.currentPresetId=e;let a=fi(e);(t=this._tb)==null||(n=t.setLayoutPresetIcon)==null||n.call(t,a.icon,!0),(r=this.layoutPopover)==null||r.setPreset(e),(i=this.layoutPopover)==null||i.hide(),this.emitter.emit(`layoutChange`,{presetId:e,preset:a,sync:this.currentSync})}handleSyncToggle(e){var t;this.currentSync={...this.currentSync,[e]:!this.currentSync[e]},(t=this.layoutPopover)==null||t.setSync(this.currentSync),this.emitter.emit(`layoutChange`,{presetId:this.currentPresetId,preset:fi(this.currentPresetId),sync:this.currentSync})}async handleSnapshot(e){var t;let n=this.captureToDataUrl();if(n){if(this.emitter.emit(`snapshot`,{dataUrl:n,action:e}),e===`download`){let e=document.createElement(`a`);e.download=`${this.snapshotFileName()}.png`,e.href=n,e.click()}else try{var r;let e=await(await fetch(n)).blob(),t=globalThis.ClipboardItem;t&&(r=navigator.clipboard)!=null&&r.write&&await navigator.clipboard.write([new t({"image/png":e})])}catch(e){}(t=this.snapshotPopover)==null||t.hide()}}snapshotFileName(){let e=this.symbol.trim().replace(/[\\/:*?"<>|]+/g,`_`).replace(/\s+/g,`_`);return e.length>0?e:`chart-${Date.now()}`}setLayoutPreset(e){this.handleLayoutPresetSelect(e)}getLayoutPreset(){return this.currentPresetId}getLayoutSync(){return{...this.currentSync}}setLayoutSync(e){var t;let n={...this.currentSync,...e};Object.keys(n).some(e=>n[e]!==this.currentSync[e])&&(this.currentSync=n,(t=this.layoutPopover)==null||t.setSync(this.currentSync))}destroy(){var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y;this._isDestroyed=!0,this.panHandler.destroy(),this.zoomHandler.destroy(),this.resizeObserver.disconnect(),this.disposeVvListener(),(e=this.indicatorOverlay)==null||e.destroy();for(let e of this.subPaneOverlays.values())e.destroy();this.subPaneOverlays.clear(),(t=this.indicatorSettingsDialog)==null||t.destroy(),(n=this.chartSettingsDialog)==null||n.destroy(),(r=this.isinPickerModal)==null||r.destroy(),(i=this.comparePickerModal)==null||i.destroy(),(a=this.compareLegend)==null||a.destroy(),(o=this.pnlPill)==null||o.destroy(),(s=this.tradePopover)==null||s.destroy(),(c=this.tradeActionBar)==null||c.destroy(),(l=this.drawingStylePopover)==null||l.destroy(),(u=this._draftQtyFlyout)==null||u.destroy(),(d=this.advancedToolbar)==null||d.destroy(),(f=this.mobileHeader)==null||f.destroy(),(p=this.leftBar)==null||p.destroy(),this.drawCanvas.removeEventListener(`mouseenter`,this.onPointerEnter),this.drawCanvas.removeEventListener(`mousemove`,this.onMouseMove),this.drawCanvas.removeEventListener(`mouseleave`,this.onMouseLeave),this.drawCanvas.removeEventListener(`mousedown`,this.onCanvasClick),this.drawCanvas.removeEventListener(`dblclick`,this.onDoubleClick),window.removeEventListener(`mouseup`,this.onMouseUp),this.drawCanvas.removeEventListener(`touchstart`,this.onDrawingTouchStart),this.drawCanvas.removeEventListener(`touchmove`,this.onDrawingTouchMove),this.drawCanvas.removeEventListener(`touchend`,this.onDrawingTouchEnd),this.drawCanvas.removeEventListener(`touchcancel`,this.onDrawingTouchCancel),document.removeEventListener(`keydown`,this.onKeyDown),(m=this.streamAdapter)==null||m.disconnect(),this.rafId!==null&&cancelAnimationFrame(this.rafId),this.scrollAnimId!==null&&cancelAnimationFrame(this.scrollAnimId),this.stopCountdownLoop(),(h=this.resetViewBtn)==null||h.remove(),(g=this.textInputEl)==null||g.remove(),(_=this._mobileDrawingFlyout)==null||_.remove(),(v=this.layoutPopover)==null||v.destroy(),(y=this.snapshotPopover)==null||y.destroy(),this.wrapper.remove()}createMobileDrawingFlyout(){let e=document.createElement(`div`);Object.assign(e.style,{position:`fixed`,display:`none`,alignItems:`center`,gap:`2px`,zIndex:`10000`,background:this.theme.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`8px`,padding:`4px`,boxShadow:`0 4px 16px rgba(0,0,0,0.45)`,pointerEvents:`auto`});let t=(e,t,n)=>{let r=document.createElement(`button`);return r.title=t,r.innerHTML=e,Object.assign(r.style,{display:`flex`,alignItems:`center`,justifyContent:`center`,width:`34px`,height:`34px`,padding:`0`,border:`none`,borderRadius:`6px`,background:`transparent`,color:n?this.theme.candle.down:this.theme.axisText,cursor:`pointer`,flexShrink:`0`}),r.addEventListener(`pointerenter`,()=>{r.style.background=n?`${this.theme.candle.down}22`:this.theme.axisBorder}),r.addEventListener(`pointerleave`,()=>{r.style.background=`transparent`}),r},n=t(pn,`Delete drawing`,!0);n.addEventListener(`pointerdown`,e=>{e.stopPropagation(),this.deleteSelectedDrawing(),this.hideMobileDrawingFlyout()});let r=t(un,`Deselect`,!1);return r.addEventListener(`pointerdown`,e=>{e.stopPropagation(),this.drawingManager.selectDrawing(null),this.hideMobileDrawingFlyout(),this.scheduleRender()}),e.appendChild(n),e.appendChild(r),this.wrapper.appendChild(e),e}showMobileDrawingFlyout(e,t){if(!Pd())return;this._mobileDrawingFlyout||(this._mobileDrawingFlyout=this.createMobileDrawingFlyout());let n=this._mobileDrawingFlyout,r=n.style.display!==`none`&&n.style.display!==``;n.style.display=`flex`,requestAnimationFrame(()=>{let r=n.offsetWidth||78,i=n.offsetHeight||42,a=window.innerWidth,o=window.innerHeight,s=Math.min(Math.max(e-r/2,8),a-r-8),c=Math.min(Math.max(t-i-12,8),o-i-8);n.style.left=`${s}px`,n.style.top=`${c}px`}),r||this.emitUiState()}hideMobileDrawingFlyout(){if(this._mobileDrawingFlyout){let e=this._mobileDrawingFlyout.style.display!==`none`&&this._mobileDrawingFlyout.style.display!==``;this._mobileDrawingFlyout.style.display=`none`,e&&this.emitUiState()}}applyMobileDrawingFlyoutTheme(){if(!this._mobileDrawingFlyout)return;let e=this._mobileDrawingFlyout;e.style.background=this.theme.background,e.style.border=`1px solid ${this.theme.axisBorder}`;let[t,n]=Array.from(e.querySelectorAll(`button`));t&&(t.style.color=this.theme.candle.down),n&&(n.style.color=this.theme.axisText)}scheduleRender(){this._isDestroyed||this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.render(),this.renderTradeLayer()}))}startCountdownLoop(){if(this.countdownRafId!==null)return;let e=0,t=n=>{if(!this.countdownActive){this.countdownRafId=null;return}n-e>=1e3&&(e=n,this.scheduleRender()),this.countdownRafId=requestAnimationFrame(t)};this.countdownRafId=requestAnimationFrame(t)}stopCountdownLoop(){this.countdownActive=!1,this.countdownRafId!==null&&(cancelAnimationFrame(this.countdownRafId),this.countdownRafId=null)}updateCountdownState(){var e;let t=this.candleCountdownTimeframes===`all`?!0:((e=this.candleCountdownTimeframes)==null?[`1m`,`3m`,`4m`,`5m`,`10m`,`15m`,`30m`,`1h`,`2h`,`4h`,`8h`]:e).includes(this.timeframe),n=(this.showCandleCountdown||this.showPriceAxisCountdown)&&t&&this.dataStore.length>0;n&&!this.countdownActive?(this.countdownActive=!0,this.startCountdownLoop()):!n&&this.countdownActive&&this.stopCountdownLoop()}openChartSettings(){this.chartSettingsDialog||(this.chartSettingsDialog=new pl(this.chromeTheme,{tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.baseRenderStyle(),theme:this.themeName,showTradeLevelsAlways:this.showTradeLevelsAlways,showPriceAxisCountdown:this.showPriceAxisCountdown},this.labels.dialogs,!!this._onOrderSubmit&&this.tfcActive,this.enableThemeToggle,()=>this.emitUiState()),this.getFloatingRoot().appendChild(this.chartSettingsDialog.el)),this.chartSettingsDialog.show({tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.baseRenderStyle(),theme:this.themeName,showTradeLevelsAlways:this.showTradeLevelsAlways,showPriceAxisCountdown:this.showPriceAxisCountdown,canvasColors:{...this.settingsCanvasColors}},e=>{if(this.tradeDisplayFilter=e.tradeDisplayFilter,this.positionRenderStyleOverride=e.positionRenderStyle,localStorage.setItem(this.RENDER_STYLE_LS_KEY,e.positionRenderStyle),this.positionRenderStyle=e.positionRenderStyle,e.canvasColors&&(this.settingsCanvasColors=e.canvasColors),this.showTradeLevelsAlways!==e.showTradeLevelsAlways){this.showTradeLevelsAlways=e.showTradeLevelsAlways;try{localStorage.setItem(this.SHOW_SLTP_ALWAYS_LS_KEY,String(e.showTradeLevelsAlways))}catch(e){}}if(this.showPriceAxisCountdown!==e.showPriceAxisCountdown){this.showPriceAxisCountdown=e.showPriceAxisCountdown;try{localStorage.setItem(this.PRICE_AXIS_COUNTDOWN_LS_KEY,String(e.showPriceAxisCountdown))}catch(e){}this.updateCountdownState(),this.scheduleRender()}this.setTheme(e.theme),this.renderTradeLayer(),this.emitStateChange()},()=>{this.resetChartSettings()})}getFloatingRoot(){var e;return(e=document.fullscreenElement)==null?document.body:e}reparentFloatingElements(){var e,t,n,r,i,a,o,s,c;let l=this.getFloatingRoot();(e=this._tb)==null||e.reparentFlyout(l),(t=this.leftBar)==null||t.reparentFlyout(l);let u=[(n=this.isinPickerModal)==null?void 0:n.el,(r=this.comparePickerModal)==null?void 0:r.el,(i=this.indicatorSettingsDialog)==null?void 0:i.el,(a=this.chartSettingsDialog)==null?void 0:a.el,(o=this._draftQtyFlyout)==null?void 0:o.el,(s=this.layoutPopover)==null?void 0:s.el,(c=this.snapshotPopover)==null?void 0:c.el];for(let e of u)e&&e.parentElement!==l&&l.appendChild(e)}toggleDrawingTools(){var e,t;this.leftBarVisible=!this.leftBarVisible,(e=this.leftBar)==null||e.setVisible(this.leftBarVisible),(t=this._tb)==null||t.setDrawingsBtnActive(this.leftBarVisible)}_applyCssFullscreen(e){var t;this._isCssFullscreen=e,e?Object.assign(this.wrapper.style,{position:`fixed`,inset:`0`,width:`100vw`,height:`100vh`,zIndex:`9999`}):Object.assign(this.wrapper.style,{position:``,inset:``,width:``,height:``,zIndex:``}),(t=this._tb)==null||t.setFullscreen(e),this.reparentFloatingElements(),requestAnimationFrame(()=>this.onResize())}toggleFullscreen(){let e=!!document.fullscreenElement;!e&&!this._isCssFullscreen?this.wrapper.requestFullscreen?this.wrapper.requestFullscreen().then(()=>{var e;(e=this._tb)==null||e.setFullscreen(!0)}).catch(()=>{this._applyCssFullscreen(!0)}):this._applyCssFullscreen(!0):e?document.exitFullscreen().catch(()=>{}):this._applyCssFullscreen(!1)}baseRenderStyle(){return this.positionRenderStyleOverride===null?this.levels.filter(e=>e.type===`position`||e.type===`pending`).length>this.tradesThresholdForHorizontalLine?`dot`:`line`:this.positionRenderStyleOverride}recomputeRenderStyle(){this.positionRenderStyle=this.pnlPillExpanded?`line`:this.baseRenderStyle()}renderTradeLayer(){var e,t,n,r,i,a;if(this._isDestroyed)return;let o=window.devicePixelRatio||1,{tradeCtx:s,tradeCanvas:c,theme:l,viewport:u}=this;if(s.clearRect(0,0,c.width,c.height),!this.tfcActive||this.levels.length===0||this.dataStore.length===0){this.tradeLevelHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeAddBracketAreas=[],this.offViewportHitAreas=[];return}let{chartW:d,priceH:f}=this.getChartLayout(),p=(e=this._displayedPriceRange)==null?this.getScaledPriceRange(u):e,m=this.levels.filter(e=>e.type===`pending`&&e.ToClose!=null),h=this.levels.filter(e=>!(e.type===`pending`&&e.ToClose!=null)).map(e=>{var t,n,r,i;let a=(t=this.pendingLevelDrags.get(e.label))==null?[]:t,o=a.find(e=>e.field===`stopLoss`),s=a.find(e=>e.field===`takeProfit`),c=o&&!o.isRemoval?o.newPrice:void 0,l=s&&!s.isRemoval?s.newPrice:void 0,u=(n=o==null?void 0:o.isRemoval)==null?!1:n,d=(r=s==null?void 0:s.isRemoval)==null?!1:r,f=(i=a.find(e=>e.field===`main`))==null?void 0:i.newPrice,p=m.filter(t=>t.ToClose===e.label);if(p.length===0&&c===void 0&&l===void 0&&f===void 0&&!u&&!d)return e;let h={...e};if(f!==void 0&&(h.price=f),c===void 0?u&&(h.stopLossPrice=void 0):h.stopLossPrice=c,l===void 0?d&&(h.takeProfitPrice=void 0):h.takeProfitPrice=l,p.length>0){var g;let t=(g=e.side)==null?`buy`:g;for(let n of p)if(t===`buy`?n.price<e.price:n.price>e.price){var _;h.stopLossPrice=u?void 0:(_=c==null?h.stopLossPrice:c)==null?n.price:_,h._slOrderLabel=n.label}else{var v;h.takeProfitPrice=d?void 0:(v=l==null?h.takeProfitPrice:l)==null?n.price:v,h._tpOrderLabel=n.label}}return h});s.save(),s.scale(o,o),s.save(),s.beginPath(),s.rect(0,0,d,f),s.clip();let g=e=>e.type===`position`&&!!e.entryPriceEditable,_=this.selectedTradeLabel===null?this.tradeDisplayFilter===`none`?[]:this.tradeDisplayFilter===`positions`?h.filter(e=>e.type===`position`&&!g(e)):this.tradeDisplayFilter===`orders`?h.filter(e=>e.type===`pending`||g(e)):h:h.filter(e=>e.label===this.selectedTradeLabel),v=this.levelClusteringEnabled?this.clusterThresholdDistance:0,y=(t=this.orderTimeDragHandler)!=null&&t.active?this.orderTimeDragHandler.dragLabel:null,b=y!==null&&this.hoveredTradeLabel===y?null:this.hoveredTradeLabel,x=y!==null&&this.selectedTradeLabel===y?null:this.selectedTradeLabel,S=ft(s,_,this.scaleManager,p,l,d,f,this.dataStore.getPricePrecision(),b,(n=(r=this.tradeDragHandler)==null?void 0:r.dragLabel)==null?null:n,this.tradeDragNewPrice,x,new Set([...this.pendingLevelDrags.keys(),...this._editOpenLabel===null?[]:[this._editOpenLabel]]),this.positionRenderStyle,this.hideLevelConfirmCancel,this.draftOrderLabel,this.draftBracketPnl,this.expandedClusters,v,this._showQuantityField,this.tradeDragNewSLPrice,this.tradeDragNewTPPrice,this.tradeLevelButtonScale,this.showTradeLevelsAlways,this._orderTimeDragEnabled?e=>this._orderLineAnchorX(e,d):null,this._orderTimeDragEnabled,this._bracketLabel,this.tradeLevelBadgeScale,this.tradeLevelBadgeAnchor);s.restore();let C=Gt(s,_,p,l,d,f,(i=(a=this.tradeDragHandler)==null?void 0:a.dragLabel)==null?null:i,this.selectedTradeLabel);if(this.offViewportHitAreas=C.hitAreas,Nt(s,_,this.scaleManager,p,l,d,f,this.dataStore.getPricePrecision()),s.restore(),this.tradeLevelHitAreas=S.hitAreas,this.tradeLevelEditAreas=S.editAreas,this.tradeHoverAreas=S.hoverAreas,this.tradeLevelDragAreas=S.dragAreas,this.tradeLevelConfirmAreas=S.confirmAreas,this.tradeAddBracketAreas=S.addBracketAreas,this.clusterBadgeAreas=S.clusterBadgeAreas,this.lastClusters=S.clusters,this._draftQtyPillArea=S.draftQtyPillArea,this.expandedClusters.size>0){let e=new Set(S.clusters.map(e=>e.id));for(let t of this.expandedClusters)e.has(t)||this.expandedClusters.delete(t)}if(this.pnlPillExpanded&&!this._pnlPillExpandPass){let e=S.clusters.filter(e=>!this.expandedClusters.has(e.id)&&e.members.some(e=>e.level.type===`position`));if(e.length>0){for(let t of e)this.expandedClusters.add(t.id);this._pnlPillExpandPass=!0;try{this.renderTradeLayer()}finally{this._pnlPillExpandPass=!1}}}}_orderLineAnchorX(e,t){var n;if(!this._orderTimeDragEnabled)return null;if((n=this.orderTimeDragHandler)!=null&&n.active&&this.orderTimeDragHandler.dragLabel===e.label&&this.tradeDragNewBarIndex!==null)return this.scaleManager.xToPixel(this.tradeDragNewBarIndex,this.viewport,t);let r=this._resolvedTimeAnchor(e);return r===void 0?null:this.scaleManager.xToPixel(this.timestampToBarIndex(r),this.viewport,t)}_resolvedTimeAnchor(e){var t;let n=this._timeAnchorOverride.get(e.label);if(n!==void 0)return n;let r=(t=this._orderLineAnchorStore)==null?void 0:t.get(e.label);return r===void 0?this._honorsLevelTimestamp(e)?e.timestamp:void 0:r}_honorsLevelTimestamp(e){return!((this._orderLineDefaultAnchor===`center`||this.tradeLevelBadgeAnchor===`left`)&&e.timeDraggable===!0)}_effectiveEntryPrice(e,t){var n,r;let i=this.pendingLevelDrags.get(e);return(n=i==null||(r=i.find(e=>e.field===`main`))==null?void 0:r.newPrice)==null?t:n}_effectiveBracketPrice(e,t,n){var r;let i=this.pendingLevelDrags.get(e),a=i==null||(r=i.find(e=>e.field===t))==null?void 0:r.newPrice;return a==null?n:a}_resolveBracketPrices(e){let t=e.stopLossPrice,n=e.takeProfitPrice,r,i;if(t===void 0||n===void 0){let o=this.levels.filter(t=>t.type===`pending`&&t.ToClose===e.label);if(o.length>0){var a;let s=(a=e.side)==null?`buy`:a;for(let a of o){let o=s===`buy`?a.price<e.price:a.price>e.price;o&&t===void 0?(t=a.price,r=a.label):!o&&n===void 0&&(n=a.price,i=a.label)}}}return{slPrice:t,tpPrice:n,slSiblingLabel:r,tpSiblingLabel:i}}_finalizeMainDragWithBrackets(e,t){var n;let r=this.levels.find(t=>t.label===e.label),i=e.derivedSLPrice!==void 0&&e.slStartPrice!==void 0&&e.derivedSLPrice!==e.slStartPrice,a=e.derivedTPPrice!==void 0&&e.tpStartPrice!==void 0&&e.derivedTPPrice!==e.tpStartPrice,o=!i&&!a;if(this.storePendingChange(e,e.startPrice,t,!o),!((n=this.pendingLevelDrags.get(e.label))!=null&&n.some(t=>t.field===`main`&&t.newPrice===e.newPrice))){this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null;return}if(i){var s,c,l;let n=!a,i=r,o=r,u=(s=(c=i==null?void 0:i.stopLossData)==null?o==null?void 0:o.stopLossData:c)==null?e.data:s;this.storePendingChange({label:e.label,type:e.type,newPrice:e.derivedSLPrice,data:u,bracketType:`stopLoss`},e.slStartPrice,(l=this._slSiblingOrderLabel)==null?t:l,!n)}if(a){var u,d,f;let n=r,i=r,a=(u=(d=n==null?void 0:n.takeProfitData)==null?i==null?void 0:i.takeProfitData:d)==null?e.data:u;this.storePendingChange({label:e.label,type:e.type,newPrice:e.derivedTPPrice,data:a,bracketType:`takeProfit`},e.tpStartPrice,(f=this._tpSiblingOrderLabel)==null?t:f,!1)}this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null,this._slSiblingOrderLabel=null,this._tpSiblingOrderLabel=null}storePendingChange(e,t,n,r=!1){var i,a,o,s,c;if(e.bracketType){var l,u,d,f,p;let n=this.levels.find(t=>t.label===e.label),r=(l=n==null?void 0:n.side)==null?`buy`:l,i=this._effectiveEntryPrice(e.label,(u=n==null?void 0:n.price)==null?t:u),a=(n==null?void 0:n.entryPriceEditable)===!0,o=(n==null||(d=n.data)==null?void 0:d._isDraft)===!0,s=this.dataStore.all,c=e.type===`position`&&!a&&!o?(f=(p=s[s.length-1])==null?void 0:p.close)==null?0:f:0;if(!yu.isBracketPriceValid(e.newPrice,e.bracketType,i,r,c)){this.tradeDragNewPrice=null,this.renderTradeLayer();return}}if(!e.bracketType){let t=this.levels.find(t=>t.label===e.label);if(t!=null&&t.orderType&&t!=null&&t.side){var m,h;let n=this.dataStore.all,r=(m=(h=n[n.length-1])==null?void 0:h.close)==null?0:m;if(r>0&&!(t.side===`buy`&&t.orderType===`limit`||t.side===`sell`&&t.orderType===`stop`?e.newPrice<r:e.newPrice>r)){this.tradeDragNewPrice=null,this.renderTradeLayer();return}}}if(e.newPrice===t){this.tradeDragNewPrice=null,this.renderTradeLayer();return}let g=(i=e.bracketType)==null?`main`:i,_=this._isBracketNew;this._isBracketNew=!1;let v=this.levels.find(t=>t.label===e.label);if((v==null?void 0:v.orderType)===`market`&&(v==null||(a=v.data)==null?void 0:a._isDraft)===!0){g!==`main`&&(this.updateDraftOrderBracket(g===`stopLoss`?`sl`:`tp`,e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:v==null?void 0:v.data,bracketType:g,isFullscreen:this.isFullscreen})),this.tradeDragNewPrice=null,this.renderTradeLayer();return}if(v!==void 0&&g!==`main`&&(v==null||(o=v.data)==null?void 0:o._isDraft)===!0){this.updateDraftOrderBracket(g===`stopLoss`?`sl`:`tp`,e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:v==null?void 0:v.data,bracketType:g,isFullscreen:this.isFullscreen}),this.tradeDragNewPrice=null,this.renderTradeLayer();return}if(v!==void 0&&g===`main`&&(v==null||(s=v.data)==null?void 0:s._isDraft)===!0&&v.orderType!==`market`&&this.hideLevelConfirmCancel){this.updateDraftOrderPrice(e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:v==null?void 0:v.data,bracketType:void 0,isFullscreen:this.isFullscreen}),this.tradeDragNewPrice=null,this.renderTradeLayer();return}let y=((c=this.pendingLevelDrags.get(e.label))==null?[]:c).filter(e=>e.field!==g);if(y.push({field:g,newPrice:e.newPrice,oldPrice:t,isNew:_,bracketOrderLabel:n}),this.pendingLevelDrags.set(e.label,y),this.tradeDragNewPrice=null,this.hideLevelConfirmCancel&&!r){this.applyPendingChanges(e.label);return}this.renderTradeLayer()}_orderTypeForPrice(e,t){let n=this.dataStore.all,r=n.length>0?n[n.length-1].close:t;return e===`buy`?t<r?`limit`:`stop`:t>r?`limit`:`stop`}createDraftOrder(e,t,n){if(this.draftOrderLabel)return;let r=`__draft_${Date.now()}`,i={type:`pending`,label:r,side:e,price:t,orderType:n,lots:this._qtyFieldMin,data:{_isDraft:!0}};this.levels=[...this.levels,i],this.draftOrderLabel=r,this.selectedTradeLabel=r,this.pendingLevelDrags.set(r,[{field:`main`,newPrice:t,oldPrice:t}]),this.crosshair=null,this.renderTradeLayer(),this.emitter.emit(`draftInitiated`,{side:e,price:t,orderType:n,isFullscreen:this.isFullscreen})}removeDraftOrder(){var e;if(!this.draftOrderLabel)return;let t=this.draftOrderLabel;this.levels=this.levels.filter(e=>e.label!==t),this.pendingLevelDrags.delete(t),this.selectedTradeLabel=null,this.draftOrderLabel=null,this.draftBracketPnl={},(e=this._draftQtyFlyout)==null||e.hide(),this._draftQtyPillArea=void 0,this.renderTradeLayer(),this.emitter.emit(`draftCancelled`,{label:t,isFullscreen:this.isFullscreen})}applyPendingChanges(e){let t=this.pendingLevelDrags.get(e);if(!t){if(this._editOpenLabel===e){let t=this.levels.find(t=>t.label===e);this._editOpenLabel=null,this.selectedTradeLabel=null,this.renderTradeLayer(),t&&this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:t.type,isFullscreen:this.isFullscreen})}return}let n=this.levels.find(t=>t.label===e);if(!n)return;if(this._editOpenLabel===e&&(this._editOpenLabel=null),e===this.draftOrderLabel){var r,i,a;let o=t.find(e=>e.field===`main`),s=n;(r=this._onOrderSubmit)==null||r.call(this,{price:(i=o==null?void 0:o.newPrice)==null?s.price:i,lots:(a=s.lots)==null?this._qtyFieldMin:a,side:s.side,orderType:s.orderType,...s.stopLossPrice===void 0?{}:{stopLoss:s.stopLossPrice},...s.takeProfitPrice===void 0?{}:{takeProfit:s.takeProfitPrice}}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:`draft`,isFullscreen:this.isFullscreen}),this.removeDraftOrder();return}let o=this.pendingQtyChanges.get(e);this.pendingQtyChanges.delete(e),this.originalQtyByLabel.delete(e);let s=o!==void 0&&n.data&&typeof n.data==`object`?{...n.data,lots:o}:n.data;this.emitter.emit(`tradeLevelEdit`,{label:e,type:n.type,data:s,isFullscreen:this.isFullscreen,...o===void 0?{}:{newLots:o},changes:t.map(e=>{let t=n.data,r=s;if(e.field===`stopLoss`){var i;r=(i=t.stopLossData)==null?n.data:i}else if(e.field===`takeProfit`){var a;r=(a=t.takeProfitData)==null?n.data:a}if(e.bracketOrderLabel){let t=this.levels.find(t=>t.label===e.bracketOrderLabel);t&&(r=t.data)}let c;return c=e.field===`main`?`MAIN`:e.field===`stopLoss`?e.isRemoval?`REMOVE_SL`:e.isNew?`ADD_SL`:`SL`:e.isRemoval?`REMOVE_TP`:e.isNew?`ADD_TP`:`TP`,{field:c,newPrice:e.newPrice,data:r,...c===`MAIN`&&o!==void 0?{newLots:o}:{},bracketOrderLabel:e.bracketOrderLabel}})}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:n.type,isFullscreen:this.isFullscreen}),this.hideLevelConfirmCancel||(this.pendingLevelDrags.delete(e),this.selectedTradeLabel=null,this.draftBracketPnl={}),this.renderTradeLayer()}revertPendingChanges(e){var t;if(e&&e===this.draftOrderLabel){this.removeDraftOrder();return}if(!e&&this.draftOrderLabel&&this.removeDraftOrder(),e&&!this.pendingLevelDrags.has(e)&&this._editOpenLabel===e){this._cancelEditAndDeselect(e);return}let n=e?this.pendingLevelDrags.has(e)||this.pendingQtyChanges.has(e)?[[e,(t=this.pendingLevelDrags.get(e))==null?[]:t]]:[]:[...this.pendingLevelDrags.entries(),...[...this.pendingQtyChanges.keys()].filter(e=>!this.pendingLevelDrags.has(e)).map(e=>[e,[]])];for(let[e]of n){if(this.undoIsNewBracketMutations(e),this.pendingLevelDrags.delete(e),this.pendingQtyChanges.has(e)){this.pendingQtyChanges.delete(e);let t=this.levels.findIndex(t=>t.label===e);if(t!==-1&&this.originalQtyByLabel.has(e)){let n=this.originalQtyByLabel.get(e),r=this.levels[t];this.levels=[...this.levels.slice(0,t),{...r,lots:n},...this.levels.slice(t+1)]}this.originalQtyByLabel.delete(e)}let t=this.levels.find(t=>t.label===e);t&&(this._editOpenLabel===e&&(this._editOpenLabel=null),this.emitter.emit(`tradeLevelEditCancelled`,{label:e,type:t.type,isFullscreen:this.isFullscreen}))}this.selectedTradeLabel=null,this.draftBracketPnl={},this.renderTradeLayer()}undoIsNewBracketMutations(e){let t=this.pendingLevelDrags.get(e);if(!t)return;let n=t.some(e=>e.field===`stopLoss`&&e.isNew),r=t.some(e=>e.field===`takeProfit`&&e.isNew);!n&&!r||(this.levels=this.levels.map(t=>{if(t.label!==e)return t;let i={...t};return n&&(i.stopLossPrice=void 0),r&&(i.takeProfitPrice=void 0),i}))}initCompareUi(){if(!this.compareManager)return;this.siEl&&(this.compareLegend=new su({theme:this.theme,onRemove:e=>this.removeCompare(e)}),this.siEl.appendChild(this.compareLegend.el));let e=()=>this.refreshCompareLegend();this.emitter.on(`compareAdded`,e),this.emitter.on(`compareRemoved`,e),this.emitter.on(`compareError`,e),this.emitter.on(`crosshair`,e=>{var t,n;this.compareHoveredIndex=(t=e==null?void 0:e.barIndex)==null?null:t,(n=this.compareManager)!=null&&n.isActive()&&(this.refreshCompareLegend(),this.scheduleRender())})}openComparePicker(){var e,t;if(!this.compareDataLoader)return;this.comparePickerModal||(this.comparePickerModal=new ou(this.chromeTheme,e=>this.toggleCompare(e),()=>this.emitUiState()),this.comparePickerModal.setTitle(`Compare`),this.comparePickerModal.setMode(`toggle`),this.getFloatingRoot().appendChild(this.comparePickerModal.el)),this.refreshComparePickerState();let n=(e=(t=this.siSymbolSpan)==null?void 0:t.textContent)==null?``:e;this.comparePickerModal.show(this.isins,n)}toggleCompare(e){this.compareManager&&(this.compareManager.has(e)?this.removeCompare(e):this.addCompare(e),this.refreshComparePickerState())}refreshComparePickerState(){!this.comparePickerModal||!this.compareManager||this.comparePickerModal.setActiveSymbols(this.compareManager.list().map(e=>e.symbol))}async addCompare(e){this.compareManager&&(await this.compareManager.add(e),this.refreshCompareLegend(),this.scheduleRender(),this.emitStateChange())}removeCompare(e){this.compareManager&&(this.compareManager.remove(e),this.refreshCompareLegend(),this.scheduleRender(),this.emitStateChange())}clearCompares(){this.compareManager&&(this.compareManager.clear(),this.refreshCompareLegend(),this.scheduleRender(),this.emitStateChange())}getCompares(){return this.compareManager?this.compareManager.list().map(e=>({symbol:e.symbol,color:e.color,status:e.status})):[]}refreshCompareLegend(){var e,t;if(!this.compareLegend||!this.compareManager)return;let n=this.compareManager.list(),r=this.dataStore.all,i=this.compareBaselineIndex(r),a=i==null||(e=(t=r[i])==null?void 0:t.close)==null?null:e,o=this.compareHoveredIndex,s=r.length-1,c=n.map(e=>{let t=null;if(e.status===`ready`&&a!=null&&e.bars.length>0){let n=_u(e.bars,r.map(e=>e.time),i==null?0:i),a=r[o==null?s:o];if(a){let e=n.find(e=>e.time===a.time);if(e&&e.pct!=null)t=e.pct;else{let e=n[n.length-1];(e==null?void 0:e.pct)!=null&&(t=e.pct)}}}return{symbol:e.symbol,color:e.color,percent:t,status:e.status,errorMessage:e.errorMessage}});this.compareLegend.update(c)}compareBaselineIndex(e){return e.length===0?null:Math.max(0,Math.min(e.length-1,Math.floor(this.viewport.startIndex)))}updateCompareRange(){if(!this.compareManager)return;let e=this.dataStore.all;if(e.length===0)return;let t={start:new Date(e[0].time),end:new Date(e[e.length-1].time),interval:this.timeframe,priceSource:this.tickClosePriceSource};this.compareManager.isActive()?this.compareManager.refetchAll(t).then(()=>{this.refreshCompareLegend(),this.scheduleRender()}):this.compareManager.setLastParams(t)}render(){var e,t,n;if(this._isDestroyed)return;let{ctx:r,canvas:i,theme:a,viewport:o}=this,s=window.devicePixelRatio||1,c=i.width,l=i.height,u=c/s-this.priceAxisWidth,d=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),f=d.reduce((e,t)=>e+this.paneH(t)+Dd,0),p=l/s-this.timeAxisHeight-f;r.clearRect(0,0,c,l),r.fillStyle=a.background,r.fillRect(0,0,c,l);let m=this.dataStore.getVisible(o);if(m.length===0){this.drawCtx.clearRect(0,0,this.drawCanvas.width,this.drawCanvas.height);return}let h=m;if(this._isPanning)this.viewport={...this._targetViewport};else{let e=this._targetViewport.startIndex-this.viewport.startIndex,t=this._targetViewport.endIndex-this.viewport.endIndex,n=(this._targetViewport.endIndex-this._targetViewport.startIndex)*2e-4;Math.abs(e)<n&&Math.abs(t)<n?this.viewport={...this._targetViewport}:(this.viewport={...this.viewport,startIndex:this.viewport.startIndex+e*jd,endIndex:this.viewport.endIndex+t*jd,candleWidth:this._targetViewport.candleWidth,candleGap:this._targetViewport.candleGap},this.scheduleRender())}let g=!!((e=this.compareManager)!=null&&e.isActive()),_=null,v=[],y=[],b=null;if(g&&this.compareManager){var x,S;let e=this.dataStore.all,t=this.compareBaselineIndex(e),n=t==null||(x=(S=e[t])==null?void 0:S.close)==null?null:x;if(n!=null&&n!==0&&Number.isFinite(n)){_=n;let r=this.compareManager.list(),i=e.map(e=>e.time);v=r.map(e=>e.status===`ready`&&e.bars.length>0?_u(e.bars,i,t==null?0:t):[]),y=r.map(e=>e.color),h=mu(m,n),b=gu(m,n,v.map(e=>e.filter(e=>e.pct!=null)))}}let C=g&&b!==null;if(C!==this._lastInCompareMode&&(this._lastInCompareMode=C,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this.pricePanOffset=0,this.priceScaleFactor=1),this.priceScaleFactor!==1||this.pricePanOffset!==0){if(!this._lockedAutoFitBase){var w,T;this._lockedAutoFitBase=(w=(T=this._displayedPriceRange)==null?b:T)==null?this.dataStore.getPriceRange(o):w}let e=this._lockedAutoFitBase,t=(e.min+e.max)/2+this.pricePanOffset,n=e.max===e.min?1:(e.max-e.min)/2;this._displayedPriceRange={min:t-n*this.priceScaleFactor,max:t+n*this.priceScaleFactor}}else{var E;this._lockedAutoFitBase=null;let e=(E=b)==null?this.getScaledPriceRange(o):E;if(!this._displayedPriceRange)this._displayedPriceRange=e;else{let t=(e.max-e.min)*1e-4,n=e.min-this._displayedPriceRange.min,r=e.max-this._displayedPriceRange.max;Math.abs(n)<t&&Math.abs(r)<t?this._displayedPriceRange=e:(this._displayedPriceRange={min:this._displayedPriceRange.min+n*Ad,max:this._displayedPriceRange.max+r*Ad},this.scheduleRender())}}let D=this._displayedPriceRange,O=this.showVolume?this.dataStore.getVolumeRange(o):null,k=i;switch(k._priceRange=D,k._chartWidth=u,r.save(),r.scale(s,s),r.save(),r.beginPath(),r.rect(0,0,u,p),r.clip(),_e(r,D,this.scaleManager,a,u,p),this.series){case`candlestick`:V(r,h,o,D,this.scaleManager,a,u,p);break;case`hollow`:ee(r,h,o,D,this.scaleManager,a,u,p);break;case`line`:re(r,h,o,D,this.scaleManager,a,u,p,!1);break;case`area`:re(r,h,o,D,this.scaleManager,a,u,p,!0);break;case`ohlc`:ie(r,h,o,D,this.scaleManager,a,u,p);break;case`heikinashi`:se(r,h,o,D,this.scaleManager,a,u,p);break;case`volumecandles`:ce(r,h,o,D,this.scaleManager,a,u,p);break;case`linemarkers`:le(r,h,o,D,this.scaleManager,a,u,p);break;case`step`:ue(r,h,o,D,this.scaleManager,a,u,p);break;case`hlcarea`:fe(r,h,o,D,this.scaleManager,a,u,p);break;case`baseline`:me(r,h,o,D,this.scaleManager,a,u,p);break;case`columns`:he(r,h,o,D,this.scaleManager,a,u,p);break;case`highlow`:ge(r,h,o,D,this.scaleManager,a,u,p);break}r.save(),r.beginPath(),r.rect(0,0,u,p),r.clip();for(let e of this.visibleStates()){let t=e.indicator;if(t.pane&&t.pane!==`main`)continue;let n=this.indicatorResults.get(e.instanceId);if(!n)continue;let i=n.slice(Math.floor(o.startIndex),Math.ceil(o.endIndex)+1),a=g&&_!=null?hu(i,_):i;t.render(r,a,this.scaleManager,o,p)}if(g&&_!=null&&v.length>0){let e=this.dataStore.all,t=Math.floor(o.startIndex),n=Math.min(e.length-1,Math.ceil(o.endIndex)),i=new Map;for(let r=t;r<=n;r++)i.set(e[r].time,r);for(let e=0;e<v.length;e++){let t=v[e],n=y[e];if(!t||t.length===0)continue;r.save(),r.strokeStyle=n,r.lineWidth=1.5,r.lineJoin=`round`,r.lineCap=`round`,r.beginPath();let a=!1;for(let e of t){let t=i.get(e.time);if(t==null||e.pct==null){a=!1;continue}let n=this.scaleManager.xToPixel(t,o,u),s=this.scaleManager.yToPixel(e.pct,D,p);a?r.lineTo(n,s):(r.moveTo(n,s),a=!0)}r.stroke(),r.restore()}}r.restore(),r.restore(),an(r,D,this.scaleManager,a,u,p,this.priceAxisWidth,void 0,this.dataStore.getPricePrecision(),this.uiConfig.priceAxis,g?`percent`:`price`);let A=this.dataStore.all[this.dataStore.all.length-1];if(A&&!g){let e=this.dataStore.getPricePrecision(),t=(t,n,i)=>{let a=this.scaleManager.yToPixel(t,D,p);r.save(),r.strokeStyle=n,r.lineWidth=1,r.setLineDash([3,3]),r.beginPath(),r.moveTo(0,a),r.lineTo(u,a),r.stroke(),r.setLineDash([]);let o=i+t.toFixed(e);r.font=`10px 'Inter', system-ui, sans-serif`;let s=r.measureText(o).width+12;return r.fillStyle=n,r.fillRect(u,a-16/2,s,16),r.fillStyle=`#ffffff`,r.textAlign=`left`,r.fillText(o,u+4,a+4),r.restore(),{y:a,boxW:s}},n=null,i=0;if(this.liveBidAsk){var j,M,N,P,F,I,L;let{bid:e,ask:r}=this.liveBidAsk,o=this.tickClosePriceSource===`ltp`,s=((j=this.showLtpPrice)==null?o:j)?(M=this.liveLtp)==null?o?e:null:M:null,c=A.close>=A.open?a.candle.up:a.candle.down,l=(N=this.showAskLine)==null?this.showBidAskLines||this.tickClosePriceSource===`ask`:N,u=((P=this.showBidLine)==null?this.showBidAskLines||this.tickClosePriceSource===`bid`||o&&s==null:P)?t(e,a.candle.down,``):null,d=l?t(r,a.candle.up,``):null,f=s==null?null:t(s,c,``),p=o?(F=f==null?u:f)==null?d:F:this.tickClosePriceSource===`ask`?(I=d==null?f:d)==null?u:I:(L=u==null?f:u)==null?d:L;p&&(n=p.y,i=p.boxW)}else{let e=A.close>=A.open,r=t(A.close,e?a.candle.up:a.candle.down,``);n=r.y,i=r.boxW}if(this.showPriceAxisCountdown&&n!==null){var R;if(this.candleCountdownTimeframes===`all`||((R=this.candleCountdownTimeframes)==null?[`1m`,`3m`,`4m`,`5m`,`10m`,`15m`,`30m`,`1h`,`2h`,`4h`,`8h`]:R).includes(this.timeframe)){let e=this.timeframeToMs(this.timeframe);rn(r,A.time,e,a,u,n-16/2,16,i)}}}let z=p;for(let e of d){let t=e.indicator,n=this.paneH(e);if(r.fillStyle=a.axisBorder,r.fillRect(0,z,u+this.priceAxisWidth,Dd),z+=Dd,r.save(),r.beginPath(),r.rect(0,z,u+this.priceAxisWidth,n),r.clip(),r.translate(0,z),r.fillStyle=a.background,r.fillRect(0,0,u+this.priceAxisWidth,n),e.visible&&(()=>{let t=e.currentParams.timeframe;return!t||t===`Chart`||t===this.timeframe})()){let i=this.indicatorResults.get(e.instanceId);if(i){var B,te;let s=i.slice(Math.floor(o.startIndex),Math.ceil(o.endIndex)+1),c=(B=t.getValueRange)==null?void 0:B.call(t,s),l=(te=this.subPaneScaleFactors.get(e.instanceId))==null?1:te,d=c?Ld(c,l):void 0;t.render(r,s,this.scaleManager,o,n,d),d&&an(r,d,this.scaleManager,a,u,n,this.priceAxisWidth,3,Rd(d),this.uiConfig.priceAxis)}}r.restore(),z+=n}if(this.showVolume&&O&&O.max>0){let e=p*Td;ae(r,h,o,O.max,this.scaleManager,a,u,e,p-e)}{var ne;let e=this.candleCountdownTimeframes===`all`?!0:((ne=this.candleCountdownTimeframes)==null?[`1m`,`3m`,`4m`,`5m`,`10m`,`15m`,`30m`,`1h`,`2h`,`4h`,`8h`]:ne).includes(this.timeframe),t=this.showCandleCountdown&&!this.showPriceAxisCountdown&&e&&h.length>0&&o.endIndex>=this.dataStore.length-1,n=t?this.dataStore.length-1:void 0;if(this._debug&&console.log(`[countdown] showCandleCountdown:`,this.showCandleCountdown,`| tf:`,this.timeframe,`| allowed:`,e,`| bars:`,h.length,`| endIndex:`,o.endIndex,`| dataLen:`,this.dataStore.length,`| atLiveEdge:`,o.endIndex>=this.dataStore.length-1),tn(r,h,o,this.scaleManager,a,u,z,Pd()?3:void 0,this.uiConfig.timeAxis,this.timeframe,n,this.timezone),t){let e=this.dataStore.all[this.dataStore.length-1];if(e){let t=this.timeframeToMs(this.timeframe);nn(r,e.time,t,this.dataStore.length-1,o,this.scaleManager,a,u,z,this.uiConfig.timeAxis)}}}if(this.crosshair&&be(r,this.crosshair,D,o,this.scaleManager,a,u,p,this.priceAxisWidth,z,this.timeframe,this.dataStore.getPricePrecision(),this.uiConfig.crosshair,this.timezone),this.logoImage){let e=p-20-40/2;r.save(),r.globalAlpha=.6,r.beginPath(),r.rect(0,0,u,p),r.clip(),r.beginPath(),r.arc(40,e,40/2,0,Math.PI*2),r.closePath(),r.clip(),r.drawImage(this.logoImage,40-40/2,e-40/2,40,40),r.restore()}r.restore();let oe=this.crosshair?(t=this.dataStore.all[this.crosshair.barIndex])==null?null:t:(n=this.dataStore.all[this.dataStore.length-1])==null?null:n;if(this.renderSymbolInfoOHLC(oe),this.drawingManager.render(this.drawCtx,this.scaleManager,o,D,u,p,this.dataStore.getPricePrecision(),this.theme,{instrument:this.getInstrument(),bars:this.dataStore.all,account:this.accountSpec,features:this._features}),this.drawingStylePopover){let e=this.drawingManager.getSelectedDrawing();if(e&&e.complete&&e.locked!==!0){let t=this.computeDrawingAnchorPx(e);t&&this.drawingStylePopover.setAnchor(t.x,t.y)}}if(this.scrollToEndBtn){let e=this.dataStore.length===0||this._targetViewport.endIndex>=this.dataStore.length-.5;e!==!this.scrollToEndVisible&&(this.scrollToEndVisible=!e,this.scrollToEndBtn.style.opacity=e?`0`:`0.85`,this.scrollToEndBtn.style.pointerEvents=e?`none`:`auto`)}if(this.resetViewBtn){let e=this.dataStore.length,t=this._defaultVisibleBars,n=e===0||this._targetViewport.endIndex>=e-.5,r=this._targetViewport.endIndex-this._targetViewport.startIndex,i=Math.abs(r-t)<.5,a=this.priceScaleFactor===1&&this.pricePanOffset===0&&this._lockedAutoFitBase===null,o=e===0||n&&i&&a;o===this.resetViewVisible&&(this.resetViewVisible=!o,this.resetViewBtn.style.opacity=o?`0`:`0.75`,this.resetViewBtn.style.pointerEvents=o?`none`:`auto`)}this.updateSubPaneOverlayPositions()}recomputeIndicators(){for(let e of this.visibleStates())this.indicatorResults.set(e.instanceId,e.indicator.compute(this.dataStore.all))}onResize(){var e;if(this._isDestroyed)return;let t=window.devicePixelRatio||1,n=this.canvasWrap.getBoundingClientRect();if(n.width===0||n.height===0)return;this._cachedWrapRect=n,this._cachedDrawRect=this.drawCanvas.getBoundingClientRect(),(e=this.pnlPill)==null||e.clampToBounds();for(let e of[this.canvas,this.tradeCanvas,this.drawCanvas])e.width=n.width*t,e.height=n.height*t;let r=this.wrapper.offsetWidth,i=r>0&&r<this.uiConfig.drawingToolbar.mobileBreakpoint;if(i!==this._mobileLayout){var a,o,s,c;if(this._mobileLayout=i,(a=this.leftBar)==null||a.setMobileMode(i),(o=this._tb)==null||o.setMobileLayout(i),(s=this.tradeButton)==null||s.setMobileMode(i),(c=this.tradePopover)==null||c.setCompact(i),this.siEl&&(this.siEl.style.flexDirection=i?`column`:`row`,this.siEl.style.alignItems=i?`flex-start`:`center`,this.siEl.style.gap=i?`2px`:`8px`),i){var l;this.leftBarVisible=!1,(l=this._tb)==null||l.setDrawingsBtnActive(!1)}else{var u,d;this.leftBarVisible=!0,(u=this.leftBar)==null||u.setVisible(!0),(d=this._tb)==null||d.setDrawingsBtnActive(!0)}}this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.render(),this.renderTradeLayer()}paneH(e){var t,n;return(t=(n=this.paneHeightOverrides.get(e.instanceId))==null?e.indicator.paneHeight:n)==null?Ed:t}getChartLayout(){var e;let t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).reduce((e,t)=>e+this.paneH(t)+Dd,0),n=(e=this._cachedWrapRect)==null?this.canvasWrap.getBoundingClientRect():e;return{chartW:n.width-this.priceAxisWidth,priceH:n.height-this.timeAxisHeight-t}}computeDrawingAnchorPx(e){var t;if(e.points.length===0)return null;let{chartW:n,priceH:r}=this.getChartLayout(),i=this._targetViewport,a=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(i):t,o=0,s=1/0;for(let t of e.points){let e=this.scaleManager.xToPixel(t.barIndex,i,n),c=this.scaleManager.yToPixel(t.price,a,r);c<s&&(s=c,o=e)}return Number.isFinite(s)?(o=Math.max(0,Math.min(n,o)),s=Math.max(0,Math.min(r,s)),{x:o,y:s}):null}updateSubPaneOverlayPositions(){if(this.subPaneOverlays.size===0)return;let e=this.getSeparatorPositions();for(let t of e){let e=this.subPaneOverlays.get(t.instanceId);e&&(e.el.style.top=`${t.y+Dd+6}px`)}}getSeparatorPositions(){let{priceH:e}=this.getChartLayout(),t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),n=[],r=e;for(let e of t)n.push({y:r,instanceId:e.instanceId}),r+=this.paneH(e)+Dd;return n}getScaledPriceRange(e){let t=this.dataStore.getPriceRange(e),n=t.min,r=t.max;for(let t of this.visibleStates()){if(t.indicator.pane&&t.indicator.pane!==`main`)continue;let a=this.indicatorResults.get(t.instanceId);if(!a)continue;let o=Math.floor(e.startIndex),s=Math.ceil(e.endIndex)+1;for(let e=o;e<s&&e<a.length;e++){var i;let t=(i=a[e])==null?void 0:i.value;if(t==null)continue;let o=Array.isArray(t)?t.filter(e=>e!==null):[t];for(let e of o)isFinite(e)&&(e<n&&(n=e),e>r&&(r=e))}}let a=(n+r)/2+this.pricePanOffset,o=n===r?1:(r-n)/2;return{min:a-o*this.priceScaleFactor,max:a+o*this.priceScaleFactor}}touchToDrawingPoint(e){var t,n;let r=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,i=e.clientX-r.left,a=e.clientY-r.top,{chartW:o,priceH:s}=this.getChartLayout(),c=(n=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):n;return this.makeDrawingPoint(this.scaleManager.pixelToBarIndex(i,this.viewport,o),this.scaleManager.pixelToPrice(a,c,s))}makeDrawingPoint(e,t){let n={barIndex:e,price:t},r=this.barIndexToTimestamp(e);return r!=null&&(n.timestamp=r),n}_handleTradeLevelClose(e){if(e.bracketType){var t,n;let r=this.levels.find(t=>t.label===e.label);if((r==null||(t=r.data)==null?void 0:t._isDraft)===!0&&r){let t=e.bracketType===`stopLoss`?`sl`:`tp`;this.updateDraftOrderBracket(t,null),this.emitter.emit(`tradeLevelEdit`,{label:e.label,type:`pending`,data:r.data,isFullscreen:this.isFullscreen,changes:[{field:e.bracketType===`stopLoss`?`REMOVE_SL`:`REMOVE_TP`,newPrice:0,data:r.data,bracketOrderLabel:void 0}]});return}let i=e.bracketType,a=((n=this.pendingLevelDrags.get(e.label))==null?[]:n).filter(e=>e.field!==i);a.push({field:i,newPrice:0,oldPrice:0,isRemoval:!0,bracketOrderLabel:e.bracketOrderLabel}),this.pendingLevelDrags.set(e.label,a),this.selectedTradeLabel=e.label,this.renderTradeLayer();return}let r=e.label===this.draftOrderLabel,i=this.pendingLevelDrags.get(e.label),a=this._editOpenLabel===e.label,o=!!i&&i.length>0&&i.every(e=>e.isNew),s=!i||i.length===0,c=!r&&a&&(o||s);if(this.revertPendingChanges(e.label),this.pendingLevelDrags.delete(e.label),r)return;if(c){if(s){let t=this.levels.find(t=>t.label===e.label);this._editOpenLabel=null,this.selectedTradeLabel=null,this.renderTradeLayer(),t&&this.emitter.emit(`tradeLevelEditCancelled`,{label:e.label,type:t.type,isFullscreen:this.isFullscreen})}return}this._editOpenLabel===e.label&&(this._editOpenLabel=null);let l=this.levels.find(t=>t.label===e.label),u=(l==null?void 0:l.type)===`position`&&!!l.entryPriceEditable,d=e.type===`position`&&!u?`CLOSED`:`CANCELLED`;this.emitter.emit(`tradeLevelClose`,{label:e.label,type:e.type,action:d,data:e.data,isFullscreen:this.isFullscreen})}_activateMobileCrosshair(e,t){var n,r,i;if(!this.crosshairEnabled)return;let a=(n=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():n,{chartW:o,priceH:s}=this.getChartLayout(),c=(r=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):r,l=a.height-this.timeAxisHeight;if(e>=o||t>=l)return;this._mobileCrosshairActive=!0;let u=this.scaleManager.pixelToBarIndex(e,this.viewport,o),d=this.scaleManager.pixelToPrice(t,c,s),f=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(u))),p=(i=this.dataStore.all[f])==null?null:i;this.crosshair=this.selectedTradeLabel===null&&this.crosshairEnabled?{x:e,y:t,barIndex:f,price:d,bar:p}:null,this.tradeButton&&(this.tradeButton.setY(t),this._isTradingActive||!this.crosshairEnabled||qt(t,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)?this.tradeButton.hide():this.tfcActive&&this.tradeButton.show(),this._tradeButtonClickData={price:d,y:t}),this.scheduleRender()}_cancelEditAndDeselect(e){let t=this._editOpenLabel===e,n=this.levels.find(t=>t.label===e);this._editOpenLabel=null,this.selectedTradeLabel=null,this.draftBracketPnl={},this.renderTradeLayer(),t&&n&&this.emitter.emit(`tradeLevelEditCancelled`,{label:e,type:n.type,isFullscreen:this.isFullscreen})}_openTradeLevelEditForm(e){if(this._editOpenLabel===e.label)return;this.selectedTradeLabel=e.label,this._editOpenLabel=e.label;let{slPrice:t,tpPrice:n}=this._resolveBracketPrices(e);this.renderTradeLayer(),this.emitter.emit(`tradeLevelEditOpen`,{label:e.label,type:e.type,data:e.data,price:e.price,side:e.side,stopLossPrice:t,takeProfitPrice:n,isFullscreen:this.isFullscreen})}_needsDragAxisLock(e,t){return this._orderTimeDragEnabled&&!e.isBracket&&e.timeDrag===!0&&ut(t)}_upgradePendingTradeDrag(e,t){let r=this._pendingTradeDrag;if(!r)return!1;let i=bu.resolveDragAxis(e-r.startX,t-r.startY,r.axisLock?n.AXIS_LOCK_PIXEL_THRESHOLD:n.TRADE_DRAG_PIXEL_THRESHOLD);if(i===null)return!1;this._pendingTradeDrag=null;let a=r.axisLock&&i===`price`?{...r.dragHit,timeDrag:!1}:r.dragHit;return this._startTradeDragFromHit(a,r.level,r.hitY,r.startX),!0}_startTradeDragFromHit(e,t,n,r){var i;if(!this.tradeDragHandler)return;if(this._orderTimeDragEnabled&&this.orderTimeDragHandler&&!e.isBracket&&e.timeDrag===!0){var a,o,s;let{chartW:n}=this.getChartLayout(),i=e,c=(a=this._orderLineAnchorX(t,n))==null?n/2:a,l=Math.max(i.x,Math.min(i.x+i.w,c)),u=this.scaleManager.pixelToBarIndex(l,this.viewport,n),d=(o=(s=this._resolvedTimeAnchor(t))==null?this.barIndexToTimestamp(u):s)==null?0:o;this.orderTimeDragHandler.start(t,r==null?l:r,l,u,d),this.drawCanvas.style.cursor=`grabbing`,this.emitter.emit(`orderLineMoveStart`,{label:t.label,fromTimestamp:d,fromBarIndex:this.orderTimeDragHandler.startBarIndex,isFullscreen:this.isFullscreen}),this.renderTradeLayer();return}let{priceH:c}=this.getChartLayout(),l=(i=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):i,u=this.scaleManager.yToPixel(e.price,l,c);if(e.isBracket){var d,f,p,m;this._pendingBracketOrderLabel=(d=e.bracketOrderLabel)==null?null:d,this._isBracketNew=!1;let r=t.entryPriceEditable===!0,i=((f=t.data)==null?void 0:f._isDraft)===!0,a=this.dataStore.all,o=t.type===`position`&&!r&&!i?(p=(m=a[a.length-1])==null?void 0:m.close)==null?0:p:0;this.tradeDragHandler.startBracketDrag(t,e.bracketType,e.price,n,u,o,this._effectiveEntryPrice(t.label,t.price)),this.emitter.emit(`tradeLevelDragStart`,{label:t.label,bracketType:e.bracketType,isFullscreen:this.isFullscreen})}else if(this._pendingBracketOrderLabel=null,t.entryPriceEditable===!0){var h,g;this.selectedTradeLabel=e.label;let r=t,i=this.dataStore.all,a=(h=(g=i[i.length-1])==null?void 0:g.close)==null?0:h,o=this._effectiveBracketPrice(t.label,`stopLoss`,r.stopLossPrice),s=this._effectiveBracketPrice(t.label,`takeProfit`,r.takeProfitPrice);this.tradeDragHandler.startDrag(t,n,u,e.price,o,s,r.side,a,r.orderType,!0)}else{var _,v;let r=t,i=this.dataStore.all,a=(_=(v=i[i.length-1])==null?void 0:v.close)==null?0:_,{slPrice:o,tpPrice:s,slSiblingLabel:c,tpSiblingLabel:l}=this._resolveBracketPrices(t);this._slSiblingOrderLabel=c==null?null:c,this._tpSiblingOrderLabel=l==null?null:l;let d=this._effectiveBracketPrice(t.label,`stopLoss`,o),f=this._effectiveBracketPrice(t.label,`takeProfit`,s);this.tradeDragHandler.startDrag(t,n,u,e.price,d,f,r.side,a,r.orderType,!0)}e.isBracket&&(this._editOpenLabel=null),this._openTradeLevelEditForm(t)}_endOrderTimeDrag(){var e;if(!((e=this.orderTimeDragHandler)!=null&&e.active))return!1;let t=this.orderTimeDragHandler.end(this._orderLineDragSnap,this.viewport);if(this.tradeDragNewBarIndex=null,this.drawCanvas.style.cursor=`default`,t){let e=this.barIndexToTimestamp(t.newBarIndex),r=Math.round(t.startBarIndex);if(e!==void 0&&t.newBarIndex!==r){var n;this._timeAnchorOverride.set(t.label,e),(n=this._orderLineAnchorStore)==null||n.set(t.label,e),this.emitter.emit(`orderLineMoved`,{label:t.label,fromTimestamp:t.startTimestamp,toTimestamp:e,fromBarIndex:r,toBarIndex:t.newBarIndex,data:t.data,isFullscreen:this.isFullscreen})}}return this.renderTradeLayer(),!0}_startAddBracketFromHit(e,t){var n,r,i;let a=this.levels.find(t=>t.label===e.label);if(!a||!this.tradeDragHandler)return;let{priceH:o}=this.getChartLayout(),s=this.getScaledPriceRange(this.viewport),c=e.y+e.h/2,l=this.scaleManager.pixelToPrice(c,s,o),u=a.entryPriceEditable===!0,d=((n=a.data)==null?void 0:n._isDraft)===!0,f=this.dataStore.all,p=a.type===`position`&&!u&&!d?(r=(i=f[f.length-1])==null?void 0:i.close)==null?0:r:0;this._pendingBracketOrderLabel=null,this._isBracketNew=!0,this.tradeDragHandler.startBracketDrag(a,e.bracketType,l,t,c,p,this._effectiveEntryPrice(a.label,a.price)),this.emitter.emit(`tradeLevelDragStart`,{label:a.label,bracketType:e.bracketType,isFullscreen:this.isFullscreen})}showTextInput(e){var t;if(!this.textInputEl)return;this.textInputDrawing=e;let{chartW:n,priceH:r}=this.getChartLayout(),i=this.getScaledPriceRange(this.viewport),a,o;if(e.type===`text`)a=this.scaleManager.xToPixel(e.points[0].barIndex,this.viewport,n),o=this.scaleManager.yToPixel(e.points[0].price,i,r);else{var s;let t=(s=e.points[1])==null?e.points[0]:s;a=this.scaleManager.xToPixel(t.barIndex,this.viewport,n)-30,o=this.scaleManager.yToPixel(t.price,i,r)-10}let c=this.textInputEl;c.value=(t=e.text)==null?``:t,c.style.left=`${Math.max(0,a)}px`,c.style.top=`${Math.max(0,o)}px`,c.style.display=`block`,this.drawingManager.setEditingText(!0),c.focus(),c.select();let l=()=>{c.removeEventListener(`keydown`,d),c.removeEventListener(`blur`,f),this.commitTextInput()},u=()=>{c.removeEventListener(`keydown`,d),c.removeEventListener(`blur`,f),this.cancelTextInput()},d=e=>{e.key===`Enter`?(e.preventDefault(),l()):e.key===`Escape`&&(e.preventDefault(),u())},f=()=>l();c.addEventListener(`keydown`,d),c.addEventListener(`blur`,f,{once:!0})}commitTextInput(){var e,t;!this.textInputEl||!this.textInputDrawing||(this.textInputDrawing.text=this.textInputEl.value,this.textInputEl.style.display=`none`,this.textInputDrawing=null,this.drawingManager.setEditingText(!1),(e=(t=this.drawingManager).onDrawingsChange)==null||e.call(t),this.scheduleRender())}cancelTextInput(){this.textInputEl&&(this.textInputEl.style.display=`none`,this.textInputDrawing=null,this.drawingManager.setEditingText(!1),this.scheduleRender())}setDotTickActive(){this.siStreamDot&&(this.tickActivityTimer!==null&&clearTimeout(this.tickActivityTimer),this.siStreamDot.style.background=this.theme.candle.up,this.tickActivityTimer=setTimeout(()=>{this.tickActivityTimer=null,this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus])},this.tickActivityMs))}fillTickGap(e,t){if(!this.dataLoader||this.isFetching)return;let n=this.timeframeToInterval(this.getBaseInterval());this.dataLoader({start:new Date(e),end:new Date(t),interval:n,priceSource:this.tickClosePriceSource}).then(e=>{let t=this.maybeAggregate(e);if(t.length===0)return;this.backfillDrawingTimestamps();let n=this.dataStore.all,r=n[n.length-1],i=0;for(let e of t){if(e.time>=r.time)continue;let t=n.findIndex(t=>t.time===e.time);if(t!==-1)n[t]=e;else{let t=n.findIndex(t=>t.time>e.time);n.splice(t===-1?n.length-1:t,0,e),i++}}i>0&&(this.viewport={...this.viewport,startIndex:this.viewport.startIndex+i,endIndex:this.viewport.endIndex+i},this.reanchorDrawingsByTimestamp(),this.recomputeIndicators(),this.scheduleRender())}).catch(()=>{})}correctCompletedBar(e,t){if(!this.dataLoader||this.isFetching)return;let n=new Date(e),r=new Date(e+t*3),i=this.timeframeToInterval(this.getBaseInterval());this.dataLoader({start:n,end:r,interval:i,priceSource:this.tickClosePriceSource}).then(e=>{let t=this.maybeAggregate(e);if(t.length===0)return;let n=this.dataStore.all,r=n.length-1,i=!1;for(let e of t){let t=n.findIndex(t=>t.time===e.time);t!==-1&&t!==r&&(n[t]=e,i=!0)}i&&(this.recomputeIndicators(),this.scheduleRender())}).catch(()=>{})}setLayoutIcon(e,t=!0){var n;return(n=this.advancedToolbar)==null||n.setLayoutPresetIcon(e,t),this}setDebug(e){return this._debug=e,this}correctBar(e,t){let n=this.dataStore.all,r=n.findIndex(t=>t.time===e);r!==-1&&(n[r]=t,this.recomputeIndicators(),this.scheduleRender())}scrollToEnd(){this.panHandler.cancel(),this.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null);let e=this.viewport.endIndex-this.viewport.startIndex,t=this.dataStore.length+Id,n=this.viewport.endIndex,r=this.pricePanOffset,i=performance.now(),a=e=>e<.5?2*e*e:-1+(4-2*e)*e,o=s=>{let c=Math.min((s-i)/350,1),l=a(c),u=n+(t-n)*l;this.viewport={...this.viewport,startIndex:u-e,endIndex:u},this._targetViewport={...this.viewport},this.pricePanOffset=r*(1-l),this.render(),c<1?this.scrollAnimId=requestAnimationFrame(o):this.scrollAnimId=null};this.scrollAnimId=requestAnimationFrame(o)}scrollToCenterPrice(e){if(!isFinite(e)||this.dataStore.length===0)return;this.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null);let t=this.dataStore.getPriceRange(this.viewport),n=(t.min+t.max)/2,r=this.pricePanOffset,i=e-n;if(Math.abs(i-r)<1e-9)return;let a=performance.now(),o=e=>e<.5?2*e*e:-1+(4-2*e)*e,s=e=>{let t=Math.min((e-a)/350,1),n=o(t);this.pricePanOffset=r+(i-r)*n,this.render(),t<1?this.scrollAnimId=requestAnimationFrame(s):this.scrollAnimId=null};this.scrollAnimId=requestAnimationFrame(s)}_revealPrices(e){var t,n;if(this.dataStore.length===0||this._lastInCompareMode)return;let{priceH:r}=this.getChartLayout(),i=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):t,a=(n=this._lockedAutoFitBase)==null?i:n,o=Su(i,e,r,24,(a.max-a.min)*10);if(!o)return;this.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null),this._lockedAutoFitBase||(this._lockedAutoFitBase={...i});let{factor:s,panOffset:c}=Cu(this._lockedAutoFitBase,o),l=this.priceScaleFactor,u=this.pricePanOffset;if(Math.abs(s-l)<1e-9&&Math.abs(c-u)<1e-9)return;let d=performance.now(),f=e=>e<.5?2*e*e:-1+(4-2*e)*e,p=e=>{let t=Math.min((e-d)/350,1),n=f(t);this.priceScaleFactor=l+(s-l)*n,this.pricePanOffset=u+(c-u)*n,this.render(),t<1?this.scrollAnimId=requestAnimationFrame(p):(this.scrollAnimId=null,this.scheduleViewportPersist())};this.scrollAnimId=requestAnimationFrame(p)}_currentMarketPrice(){var e,t;let n=this.liveBidAsk;if(n)return n.ask||n.bid;let r=this.dataStore.all;return(e=(t=r[r.length-1])==null?void 0:t.close)==null?0:e}resetPriceAxis(){this.priceScaleFactor=1,this.pricePanOffset=0,this._lockedAutoFitBase=null,this.scheduleRender()}resetTimeAxis(){this.panHandler.cancel();let e=this.dataStore.length;if(e===0)return;let t=Fd(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars);this._defaultVisibleBars=t;let n=Math.max(0,e-t+Id);this.viewport={...this.viewport,startIndex:n,endIndex:e+Id},this._targetViewport={...this.viewport},this.scheduleRender()}resetView(){this.resetPriceAxis(),this.resetTimeAxis()}applyOverlayLabelStyles(){for(let e of[this.loadingLabelEl,this.noDataLabelEl])e&&Object.assign(e.style,{color:this.theme.tooltip.text,background:this.theme.tooltip.background,border:`1px solid ${this.theme.tooltip.border}`})}applyResetViewBtnStyles(){this.resetViewBtn&&(this.resetViewBtn.innerHTML=Tn(this.theme.axisText,16),Object.assign(this.resetViewBtn.style,{position:`absolute`,bottom:`${this.timeAxisHeight+8}px`,left:`50%`,transform:`translateX(-50%)`,zIndex:`100`,width:`32px`,height:`32px`,padding:`0`,display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:this.theme.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`50%`,cursor:`pointer`,outline:`none`,boxShadow:`0 2px 6px rgba(0,0,0,0.25)`,opacity:`0`,pointerEvents:`none`,transition:`opacity 0.2s ease`}))}applyScrollToEndBtnStyles(){if(!this.scrollToEndBtn)return;let e=this.theme.ui.scrollToEndBtnBg,t=e?`#ffffff`:this.theme.axisText,n=e==null?this.theme.background:e,r=e==null?this.theme.axisBorder:e;this.scrollToEndBtn.innerHTML=wn(t,16),Object.assign(this.scrollToEndBtn.style,{position:`absolute`,bottom:`${this.timeAxisHeight+8}px`,right:`${this.priceAxisWidth+8}px`,zIndex:`100`,width:`32px`,height:`32px`,padding:`0`,display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:n,border:`1px solid ${r}`,borderRadius:`50%`,cursor:`pointer`,outline:`none`,boxShadow:`0 2px 6px rgba(0,0,0,0.25)`,opacity:`0`,pointerEvents:`none`,transition:`opacity 0.2s ease`})}};gd=zd,gd.DRAW_GESTURE_THRESHOLD=4,gd.TOUCH_HANDLE_SLOP_PX=18,gd.TRADE_DRAG_PIXEL_THRESHOLD=3,gd.AXIS_LOCK_PIXEL_THRESHOLD=6;var Q=null,Bd=new Map,Vd=new Map,Hd=0;function Ud(){return`dr_${Date.now()}_${Hd++}`}function Wd(){return`cr_${Date.now()}_${Hd++}`}function $(e,t){var n;let r=JSON.stringify({type:e,payload:t});window.ChartAndroidBridge?window.ChartAndroidBridge.postMessage(r):!((n=window.webkit)==null||(n=n.messageHandlers)==null)&&n.chartBridge?window.webkit.messageHandlers.chartBridge.postMessage(r):window.ReactNativeWebView&&window.ReactNativeWebView.postMessage(r)}function Gd(e={}){var t;Q==null||Q.destroy();let n=document.getElementById(`chart`),{enableTrading:r,onSymbolClick:i,onAskAiClick:a,orderLineTimeDrag:o,enableForecasting:s,...c}=e,l={...c.features,...o?{orderLineTimeDrag:!0}:{},...s?{enableForecasting:!0}:{}},u=(t=c.timeframe)==null?`1D`:t;Q=new zd({theme:`dark`,...c,...Object.keys(l).length>0?{features:l}:{},container:n,dataLoader:e=>{for(let[,e]of Bd)e.reject(Error(`cancelled`));Bd.clear();let t=Ud(),n=Q==null?void 0:Q.getState();return new Promise((r,i)=>{var a;Bd.set(t,{resolve:r,reject:i}),$(`dataRequest`,{requestId:t,timeframe:(a=n==null?void 0:n.timeframe)==null?u:a,interval:e.interval,start:e.start.getTime(),end:e.end.getTime(),priceSource:e.priceSource})})},compareDataLoader:e=>{let t=Wd(),n=Q==null?void 0:Q.getState();return new Promise((r,i)=>{var a;Vd.set(t,{resolve:r,reject:i}),$(`compareDataRequest`,{requestId:t,symbol:e.symbol,timeframe:(a=n==null?void 0:n.timeframe)==null?u:a,interval:e.interval,start:e.start.getTime(),end:e.end.getTime()})})},...r?{onOrderSubmit:e=>{var t;$(`placeOrder`,{price:e.price,side:e.side,orderType:(t=e.orderType)==null?`limit`:t})}}:{},...i?{onSymbolClick:e=>{$(`symbolClick`,{symbol:e})}}:{},...a?{onAskAiClick:()=>{$(`askAiClick`,{})}}:{}}),Q.on(`timeframeChange`,({timeframe:e})=>{u=e}),Q.on(`crosshair`,e=>$(`crosshair`,e)),Q.on(`click`,e=>$(`barClick`,e)),Q.on(`zoom`,({viewport:e})=>$(`viewportChange`,{viewport:e})),Q.on(`pan`,({viewport:e})=>$(`viewportChange`,{viewport:e})),Q.on(`seriesChange`,e=>$(`seriesChange`,e)),Q.on(`priceSourceChange`,e=>$(`priceSourceChange`,e)),Q.on(`timeframeChange`,e=>$(`timeframeChange`,e)),Q.on(`durationChange`,e=>$(`durationChange`,e)),Q.on(`stateChange`,e=>$(`stateChange`,e)),Q.on(`dataLoaded`,e=>$(`dataLoaded`,e)),Q.on(`newBar`,e=>$(`newBar`,e)),Q.on(`streamStatus`,e=>$(`streamStatus`,e)),Q.on(`tradeLevelClose`,e=>$(`tradeLevelClose`,e)),Q.on(`tradeLevelDrag`,e=>$(`tradeLevelDrag`,e)),Q.on(`tradeLevelDragStart`,e=>$(`tradeLevelDragStart`,e)),Q.on(`tradeLevelEdit`,e=>$(`tradeLevelEdit`,e)),Q.on(`tradeLevelQtyChange`,e=>$(`tradeLevelQtyChange`,e)),Q.on(`tradeLevelConfirmed`,e=>$(`tradeLevelConfirmed`,e)),Q.on(`tradeLevelEditOpen`,e=>$(`tradeLevelEditOpen`,e)),Q.on(`tradeLevelBracketActivated`,e=>$(`tradeLevelBracketActivated`,e)),Q.on(`draftInitiated`,e=>$(`draftInitiated`,e)),Q.on(`draftCancelled`,e=>$(`draftCancelled`,e)),Q.on(`uiStateChange`,e=>$(`uiStateChange`,e)),Q.on(`orderLineMoveStart`,e=>$(`orderLineMoveStart`,e)),Q.on(`orderLineMoving`,e=>$(`orderLineMoving`,e)),Q.on(`orderLineMoved`,e=>$(`orderLineMoved`,e)),Q.on(`crosshairToggle`,e=>$(`crosshairToggle`,e)),Q.on(`compareAdded`,e=>$(`compareAdded`,e)),Q.on(`compareRemoved`,e=>$(`compareRemoved`,e)),Q.on(`compareError`,e=>$(`compareError`,e)),Q.on(`indicatorAdded`,e=>$(`indicatorAdded`,e)),Q.on(`indicatorRemoved`,e=>$(`indicatorRemoved`,e))}function Kd(e){if(e.type===`init`){Gd(e.payload);return}if(!Q){$(`error`,{message:`Engine not initialized. Send an "init" command first.`});return}switch(e.type){case`loadData`:Q.loadData(e.payload.bars,e.payload.fitAll);break;case`pushTick`:Q.pushTick(e.payload);break;case`setTheme`:Q.setTheme(e.payload.theme);break;case`setTimezone`:Q.setTimezone(e.payload.timezone);break;case`setShowLtpPrice`:Q.setShowLtpPrice(e.payload.show);break;case`setShowAskLine`:Q.setShowAskLine(e.payload.show);break;case`setShowBidLine`:Q.setShowBidLine(e.payload.show);break;case`setTickClosePriceSource`:Q.setTickClosePriceSource(e.payload.source);break;case`setLayoutSync`:Q.setLayoutSync(e.payload);break;case`setCrosshairEnabled`:Q.setCrosshairEnabled(e.payload.enabled===!0);break;case`setSeries`:Q.setSeries(e.payload.series);break;case`setDuration`:Q.setDuration(e.payload.duration,e.payload.timeframe);break;case`setTimeframe`:Q.setTimeframe(e.payload.timeframe);break;case`setSymbol`:Q.setSymbol(e.payload.symbol);break;case`setInstrument`:Q.setInstrument(e.payload.instrument);break;case`setAccount`:Q.setAccount(e.payload.account);break;case`addIndicator`:Q.addIndicatorByName(e.payload.shortName,e.payload.params);break;case`removeIndicator`:Q.removeIndicator(e.payload.name);break;case`setDrawingTool`:Q.setDrawingTool(e.payload.tool);break;case`clearAllDrawings`:Q.clearAllDrawings();break;case`getState`:$(`stateSnapshot`,Q.getState());break;case`setState`:Q.setState(e.payload);break;case`resolveDataRequest`:{let t=Bd.get(e.payload.requestId);t&&(Bd.delete(e.payload.requestId),t.resolve(e.payload.bars));break}case`setDebug`:Q.setDebug(e.payload.enabled);break;case`destroy`:Q.destroy(),Q=null;break;case`setLevels`:Q.setLevels(e.payload.levels,e.payload.labelKey,e.payload.priceKey,e.payload.type,e.payload.pnlKey,e.payload.pnlTextKey);break;case`removeLevelByLabel`:Q.removeLevelByLabel(e.payload.label);break;case`updateLevelMainPrice`:Q.updateLevelMainPrice(e.payload.label,e.payload.price);break;case`updateLevelQty`:Q.updateLevelQty(e.payload.label,e.payload.qty);break;case`updateLevelBracket`:Q.updateLevelBracket(e.payload.label,e.payload.bracketType.toLowerCase(),e.payload.price);break;case`addLevelBracket`:Q.addLevelBracket(e.payload.label,e.payload.bracketType.toLowerCase());break;case`addBracket`:Q.addBracket(e.payload.bracketType.toLowerCase(),e.payload.label);break;case`removeBracket`:Q.removeBracket(e.payload.bracketType.toLowerCase(),e.payload.label);break;case`cancelLevelEdit`:Q.cancelLevelEdit(e.payload.label);break;case`selectLevel`:Q.selectLevel(e.payload.label);break;case`showDraftOrder`:Q.showDraftOrder(e.payload.price,e.payload.side,e.payload.orderType);break;case`showMarketDraft`:Q.showMarketDraft(e.payload.price,e.payload.side);break;case`clearDraftOrder`:Q.clearDraftOrder();break;case`cancelCurrentEdit`:Q.cancelCurrentEdit();break;case`updateDraftOrderPrice`:Q.updateDraftOrderPrice(e.payload.price);break;case`updateDraftOrderBracket`:Q.updateDraftOrderBracket(e.payload.bracketType,e.payload.price);break;case`setBracketLabelMode`:Q.setBracketLabelMode(e.payload.mode,e.payload.currencySymbol);break;case`setDraftBracketPnl`:Q.setDraftBracketPnl(e.payload.bracketType,e.payload.pnlText);break;case`setVolume`:Q.setVolume(e.payload.show);break;case`setIsins`:Q.setIsins(e.payload.isins);break;case`resetView`:Q.resetView();break;case`resetData`:Q.resetData();break;case`setLoading`:Q.setLoading(e.payload.loading);break;case`setThemeOverrides`:Q.setThemeOverrides(e.payload.overrides);break;case`setCanvasColors`:var t;Q.setCanvasColors((t=e.payload.colors)==null?null:t);break;case`correctBar`:Q.correctBar(e.payload.barTime,e.payload.bar);break;case`dismissAllUI`:Q.dismissAllUI();break;case`addCompare`:Q.addCompare(e.payload.symbol);break;case`removeCompare`:Q.removeCompare(e.payload.symbol);break;case`clearCompares`:Q.clearCompares();break;case`resolveCompareDataRequest`:{let t=Vd.get(e.payload.requestId);t&&(Vd.delete(e.payload.requestId),t.resolve(e.payload.bars));break}}}document.addEventListener(`DOMContentLoaded`,()=>{window.ChartBridge={send(e){let t;try{t=JSON.parse(e)}catch(t){$(`error`,{message:`Invalid JSON: ${e}`});return}try{Kd(t)}catch(e){$(`error`,{message:String(e)})}}},$(`ready`,{})})})();</script>
278
+ `,document.head.appendChild(e)}function Pd(){return typeof window<`u`&&(`ontouchstart`in window||navigator.maxTouchPoints>1)}function Fd(e=2,t=!1,n=Od,r,i,a){if(i&&i>0&&a&&a>0){let e=Math.floor(i/a);return Math.max(10,Math.min(500,e))}return!t&&!Pd()?n:r===void 0?Math.max(10,Math.round(n/e)):r}var Id=4;function Ld(e,t){let n=(e.min+e.max)/2,r=(e.max-e.min)/2;return{min:n-r*t,max:n+r*t}}function Rd(e){let t=e.max-e.min;return t>=100?0:t>=10?1:t>=1?2:t>=.1?3:4}var zd=class n{get _tb(){var e,t,n;return(e=(t=(n=this.topBar)==null?this.advancedToolbar:n)==null?this.compactToolbar:t)==null?this.mobileHeader:e}visibleStates(){return this.activeIndicators.filter(e=>{if(!e.visible)return!1;let t=e.currentParams.timeframe;return!(t&&t!==`Chart`&&t!==this.timeframe)})}get indicators(){return this.visibleStates().map(e=>e.indicator)}scheduleViewportPersist(){this._viewportPersistTimer&&clearTimeout(this._viewportPersistTimer),this._viewportPersistTimer=setTimeout(()=>{this._viewportPersistTimer=null,this.emitStateChange()},500)}get isFullscreen(){return this._isCssFullscreen||!!document.fullscreenElement}get _isTradingActive(){var e,t,n,r,i,a,o,s;return((e=(t=this.tradePopover)==null?void 0:t.isVisible)==null?!1:e)||((n=(r=this.tradeActionBar)==null?void 0:r.isVisible)==null?!1:n)||this.draftOrderLabel!==null||((i=(a=this.tradeDragHandler)==null?void 0:a.active)==null?!1:i)||((o=(s=this.orderTimeDragHandler)==null?void 0:s.active)==null?!1:o)||this.pendingLevelDrags.size>0}_enabledGates(){var e;return Object.entries((e=this._features)==null?{}:e).filter(([,e])=>e===!0).map(([e])=>e)}constructor(i){var a,o,c,l,u,f,p,m,h,v,y,b,x,S,C,w,T,E,D,k,j,M,N,P,F,I,R,z,V,ee,te,ne,re;if(this.topBar=null,this.advancedToolbar=null,this.compactToolbar=null,this.mobileHeader=null,this.bottomBar=null,this.leftBar=null,this.leftBarVisible=!0,this.layoutPopover=null,this.snapshotPopover=null,this.currentPresetId=`1`,this.currentSync={...pi},this.drawingToolsEnabled=!0,this.settingsEnabled=!0,this.fullscreenEnabled=!0,this._mobileLayout=!1,this.indicatorOverlay=null,this.subPaneOverlays=new Map,this.isinPickerModal=null,this.isins=[],this.compareManager=null,this.compareLegend=null,this.comparePickerModal=null,this.compareDataLoader=null,this.compareHoveredIndex=null,this.siEl=null,this.siStreamDot=null,this.siSymbolSpan=null,this.siOHLCSpan=null,this.siOHLC2Span=null,this.tickActivityTimer=null,this.tickActivityMs=3e4,this.streamStatus=`disconnected`,this._isDestroyed=!1,this.indicatorSettingsDialog=null,this.chartSettingsDialog=null,this.tradeButton=null,this.tradePopover=null,this.tradeActionBar=null,this._onAddAlert=null,this.drawingStylePopover=null,this.draftOrderLabel=null,this._minLots=1,this._showQuantityField=!1,this._qtyFieldMin=1,this._qtyFieldMax=100,this._draftQtyFlyout=null,this._draftQtyPillArea=void 0,this._activeQtyPillLabel=void 0,this.pendingQtyChanges=new Map,this.originalQtyByLabel=new Map,this._onOrderSubmit=void 0,this.scrollToEndBtn=null,this.scrollToEndVisible=!1,this.scrollAnimId=null,this.resetViewBtn=null,this.resetViewVisible=!1,this._defaultVisibleBars=Od,this.dataStore=new t,this.scaleManager=new r,this.emitter=new s,this.themeName=`dark`,this._debug=!1,this.symbol=``,this.resolvedInstrument=null,this.resolvedInstrumentPrecision=-1,this.showBidAskLines=!1,this.showActLogo=!1,this.hideLevelConfirmCancel=!1,this.deselectActiveOnOutsideClick=!1,this.tradeLevelButtonScale=1,this.tradeLevelBadgeScale=1,this.tradeLevelBadgeAnchor=`auto`,this._bracketLabel={...Ye},this.levelClusteringEnabled=!0,this.clusterThresholdDistance=20,this.enableThemeToggle=!1,this.activeIndicators=[],this.indicatorInstanceSeq=0,this.indicatorResults=new Map,this.viewport={startIndex:0,endIndex:Fd(),candleWidth:8,candleGap:2},this._targetViewport={startIndex:0,endIndex:Fd(),candleWidth:8,candleGap:2},this._isPanning=!1,this.crosshair=null,this.drawingManager=new cl,this.textInputEl=null,this.textInputDrawing=null,this._pendingDrawDrag=null,this._pendingDrawResize=null,this._pendingTradeDrag=null,this.paneHeightOverrides=new Map,this.separatorDrag=null,this.priceAxisWidth=Cd,this.timeAxisHeight=wd,this.priceScaleFactor=1,this.pricePanOffset=0,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this._lastInCompareMode=!1,this._pendingViewportRestore=null,this._viewportPersistTimer=null,this.axisDrag=null,this.subPaneScaleFactors=new Map,this._mobileCrosshairActive=!1,this._mobileTapStartXY=null,this._longPressTimer=null,this._longPressPoint=null,this._lastTouchTime=0,this._tradeButtonClickData=null,this.disposeVvListener=()=>{},this.rafId=null,this.countdownRafId=null,this.countdownActive=!1,this._cachedWrapRect=null,this._cachedDrawRect=null,this._drawTouchAnchorActive=!1,this._lastDrawingTouchPoint=null,this._drawTouchStartXY=null,this._mobileDrawingFlyout=null,this._isCssFullscreen=!1,this.timezone=`UTC`,this.settingsCanvasColors={},this.streamAdapter=null,this.liveBidAsk=null,this.liveLtp=null,this.tickClosePriceSource=`bid`,this._reloadOnPriceSourceChange=!0,this._suppressTicks=!1,this.levels=[],this.tradeLevelHitAreas=[],this.offViewportHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeLevelDragAreas=[],this.tradeLevelConfirmAreas=[],this.tradeAddBracketAreas=[],this.clusterBadgeAreas=[],this.lastClusters=[],this.expandedClusters=new Set,this.hoveredTradeLabel=null,this.selectedTradeLabel=null,this._editOpenLabel=null,this.draftBracketPnl={},this.tradeDragHandler=null,this.orderTimeDragHandler=null,this.tradeDragNewBarIndex=null,this.pnlPill=null,this.pnlPillExpanded=!1,this._pnlPillExpandPass=!1,this.pnlPillVisible=!0,this._orderTimeDragEnabled=!1,this._orderLineDragSnap=!0,this._timeAnchorOverride=new Map,this._orderLineAnchorStore=null,this._orderLineDefaultAnchor=`timestamp`,this.tradeDragNewPrice=null,this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null,this._pendingBracketOrderLabel=null,this._slSiblingOrderLabel=null,this._tpSiblingOrderLabel=null,this._isBracketNew=!1,this.pendingLevelDrags=new Map,this.tfcEnabled=!0,this.crosshairEnabled=!0,this.tfcActive=!0,this.tradeDisplayFilter=`all`,this.positionRenderStyle=`dot`,this.tradesThresholdForHorizontalLine=2,this.positionRenderStyleOverride=null,this.RENDER_STYLE_LS_KEY=`finchart:positionRenderStyle`,this.dataLoader=null,this.isFetching=!1,this.noMoreData=!1,this._loadGeneration=0,this.maxCandles=200,this._durationTimeframeMap={..._i},this.minInitialBars=10,this.maxLookbackMs=365*24*60*60*1e3,this.prefetchThreshold=80,this.defaultVisibleBars=Od,this.defaultMobileVisibleBars=void 0,this.mobileBarDivisor=2,this.explicitMobileDivisor=!1,this._autoVisibleBars=!0,this.targetCandleWidth=kd,this.maxSubPanes=3,this.showCandleCountdown=!0,this.showTradeLevelsAlways=!1,this._revealNewBrackets=!1,this.showPriceAxisCountdown=!1,this.SHOW_SLTP_ALWAYS_LS_KEY=`finchart.showTradeLevelsAlways`,this.PRICE_AXIS_COUNTDOWN_LS_KEY=`finchart.showPriceAxisCountdown`,this.loadingOverlayEl=null,this.noDataOverlayEl=null,this.loadingLabelEl=null,this.noDataLabelEl=null,this.logoImage=null,this.isRestoringState=!1,this.onPointerEnter=()=>{this._cachedWrapRect=null,this._cachedDrawRect=null},this.onMouseMove=e=>{var t,r,i,a,o,s,c;if(this._mobileCrosshairActive||Date.now()-this._lastTouchTime<500)return;let l=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,u=e.clientX-l.left,d=e.clientY-l.top,{chartW:f,priceH:p}=this.getChartLayout(),m=(r=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):r,h=l.height-this.timeAxisHeight,g=u<f&&d<h,_=this.scaleManager.pixelToBarIndex(u,this.viewport,f),v=this.scaleManager.pixelToPrice(d,m,p),y=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(_))),b=(i=this.dataStore.all[y])==null?null:i;this.crosshair=g&&this.crosshairEnabled&&!((a=this.tradePopover)!=null&&a.isVisible)&&!((o=this.tradeActionBar)!=null&&o.isVisible)&&this.selectedTradeLabel===null?{x:u,y:d,barIndex:y,price:v,bar:b}:null,this.emitter.emit(`crosshair`,this.crosshair);let x=this.positionRenderStyle===`dot`&&this.hoveredTradeLabel!==null;if(this.tradeButton&&(g&&this.crosshairEnabled&&d>=0&&d<=p&&!this._isTradingActive&&!x?(this.tradeButton.setY(d),qt(d,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)?this.tradeButton.hide():this.tfcActive&&this.tradeButton.show(),this._tradeButtonClickData={price:v,y:d}):this.tradeButton.hide()),this._pendingDrawResize){let e=u-this._pendingDrawResize.startX,t=d-this._pendingDrawResize.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startResize(this._pendingDrawResize.drawing,this._pendingDrawResize.pointIndex,this._pendingDrawResize.handle),this._pendingDrawResize=null)}if(this._pendingDrawDrag){let e=u-this._pendingDrawDrag.startX,t=d-this._pendingDrawDrag.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startDrag(this._pendingDrawDrag.drawing,this.makeDrawingPoint(_,v)),this._pendingDrawDrag=null)}if(this.drawingManager.onMouseMove(this.makeDrawingPoint(_,v)),this.axisDrag){if(this.axisDrag.axis===`price`){let e=d-this.axisDrag.startPos;this.priceScaleFactor=Math.max(.1,Math.min(10,this.axisDrag.startSize*1.005**e))}else if(this.axisDrag.axis===`subpane`&&this.axisDrag.instanceId){let e=d-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.instanceId,t)}else{let e=u-this.axisDrag.startPos,t=Math.max(10,Math.min(500,Math.round(this.axisDrag.startSize+e*.5))),n=(this.viewport.startIndex+this.viewport.endIndex)/2,r=Math.max(0,n-t/2);this.viewport={...this.viewport,startIndex:r,endIndex:r+t},this._targetViewport={...this.viewport}}this.drawCanvas.style.cursor=this.axisDrag.axis===`time`?`ew-resize`:`ns-resize`,this.scheduleRender();return}if(this.separatorDrag){let e=this.separatorDrag.startY-d,t=Math.max(40,Math.min(300,this.separatorDrag.startH+e));this.paneHeightOverrides.set(this.separatorDrag.instanceId,t),this.drawCanvas.style.cursor=`ns-resize`,this.scheduleRender();return}if(this._pendingTradeDrag){var S;if(!this._upgradePendingTradeDrag(u,d))return;this.drawCanvas.style.cursor=(S=this.orderTimeDragHandler)!=null&&S.active?`grabbing`:`ns-resize`}if((s=this.orderTimeDragHandler)!=null&&s.active){let e=this.orderTimeDragHandler.onMove(u,this.scaleManager,this.viewport,f);this.tradeDragNewBarIndex=e,this.drawCanvas.style.cursor=`grabbing`,this.renderTradeLayer();let t=this.orderTimeDragHandler.dragLabel,n=e===null?void 0:this.barIndexToTimestamp(e);t&&e!==null&&n!==void 0&&this.emitter.emit(`orderLineMoving`,{label:t,toTimestamp:n,toBarIndex:e,isFullscreen:this.isFullscreen});return}if((c=this.tradeDragHandler)!=null&&c.active){var C,w,T;let e=this.tradeDragHandler.onMouseMove(d,this.scaleManager,m,p);if(this.tradeDragNewPrice=(C=e==null?void 0:e.newPrice)==null?null:C,this.tradeDragNewSLPrice=(w=e==null?void 0:e.derivedSLPrice)==null?null:w,this.tradeDragNewTPPrice=(T=e==null?void 0:e.derivedTPPrice)==null?null:T,this.drawCanvas.style.cursor=`ns-resize`,this.renderTradeLayer(),this.tradeDragNewPrice!==null&&e){let t=e.label.indexOf(`:`),n=t===-1?e.label:e.label.slice(0,t),r=t===-1?void 0:e.label.slice(t+1),i=this.levels.find(e=>e.label===n);i&&this.emitter.emit(`tradeLevelDrag`,{label:i.label,newPrice:this.tradeDragNewPrice,data:i.data,bracketType:r,...e.derivedSLPrice===void 0?{}:{derivedSLPrice:e.derivedSLPrice},...e.derivedTPPrice===void 0?{}:{derivedTPPrice:e.derivedTPPrice},isFullscreen:this.isFullscreen})}return}if(!this.drawingManager.getActiveTool()){var E;if(Oe(u,d,this.clusterBadgeAreas)||Dt(u,d,this.tradeLevelHitAreas)||Ot(u,d,this.tradeLevelEditAreas)||kt(u,d,this.tradeLevelConfirmAreas)||Kt(u,d,this.offViewportHitAreas)){this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}let e=jt(u,d,this.tradeLevelDragAreas);if(e){let t=this.levels.find(t=>t.label===e.label);this.drawCanvas.style.cursor=this._orderTimeDragEnabled&&e.timeDrag===!0?t&&this._needsDragAxisLock(e,t)?`move`:`grab`:`ns-resize`,e.label!==this.hoveredTradeLabel&&(this.hoveredTradeLabel=e.label,this.renderTradeLayer()),this.scheduleRender();return}let t=At(u,d,this.tradeHoverAreas),n=(E=t==null?void 0:t.label)==null?null:E;if(n!==this.hoveredTradeLabel&&(this.hoveredTradeLabel=n,this.renderTradeLayer()),this.positionRenderStyle===`dot`&&n!==null){this.crosshair=null,this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}if(this.getSeparatorPositions().find(e=>Math.abs(d-e.y)<=4))this.drawCanvas.style.cursor=`ns-resize`;else if(u>=f)this.drawCanvas.style.cursor=`ns-resize`;else if(d>=h)this.drawCanvas.style.cursor=`ew-resize`;else if(this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing())this.drawCanvas.style.cursor=`grabbing`;else{let e=this.drawingManager.getHandleAtPoint(u,d,this.scaleManager,this.viewport,m,f,p);if(e)this.drawCanvas.style.cursor=e.handle.cursor;else{let e=this.drawingManager.hitTest(u,d,this.scaleManager,this.viewport,m,f,p);this.drawCanvas.style.cursor=e?`move`:`default`}}}this.scheduleRender()},this.onMouseLeave=e=>{if(!(this.tradeButton&&this.tradeButton.el.contains(e.relatedTarget))&&!this._mobileCrosshairActive){if(this.crosshair=null,this.emitter.emit(`crosshair`,null),!this._isTradingActive){var t;(t=this.tradeButton)==null||t.hide()}this.hoveredTradeLabel!==null&&(this.hoveredTradeLabel=null,this.renderTradeLayer()),this.scheduleRender()}},this.onMouseUp=()=>{var e;if(this.drawingManager.isFreehandStroke()){var t;let{chartW:e,priceH:n}=this.getChartLayout(),r=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):t;this.drawingManager.finishFreehand(this.scaleManager,this.viewport,r,e,n),this._pendingDrawDrag=null,this._pendingDrawResize=null,this.scheduleRender();return}if(this._pendingTradeDrag){let{level:e}=this._pendingTradeDrag;if(this._pendingTradeDrag=null,this._editOpenLabel===e.label&&!this.pendingLevelDrags.has(e.label)){this._cancelEditAndDeselect(e.label);return}this._openTradeLevelEditForm(e);return}if(!this._endOrderTimeDrag()){if((e=this.tradeDragHandler)!=null&&e.active){let e=this.tradeDragHandler.endDrag();if(e){var n;this._finalizeMainDragWithBrackets(e,(n=this._pendingBracketOrderLabel)==null?void 0:n)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.drawCanvas.style.cursor=`default`,this.renderTradeLayer();return}if(this.axisDrag){let e=this.axisDrag.axis===`price`||this.axisDrag.axis===`time`;this.axisDrag=null,this.drawCanvas.style.cursor=`default`,this.scheduleRender(),e&&this.scheduleViewportPersist()}this.separatorDrag&&(this.separatorDrag=null,this.drawCanvas.style.cursor=`default`,this.scheduleRender()),this._pendingDrawDrag=null,this._pendingDrawResize=null,this.drawingManager.isDraggingDrawing()&&(this.drawingManager.endDrag(),this.drawCanvas.style.cursor=`default`,this.scheduleRender()),this.drawingManager.isResizingDrawing()&&(this.drawingManager.endResize(),this.drawCanvas.style.cursor=`default`,this.scheduleRender())}},this.onDrawingTouchStart=e=>{var t;if(e.touches.length!==1)return;let r=e.touches[0],i=this.touchToDrawingPoint(r),a=this.drawingManager.getActiveTool(),o=this.drawingManager.isPlacing();if(a!==null||o){e.preventDefault(),this._lastDrawingTouchPoint=i,o?(this._drawTouchAnchorActive=!1,this.drawingManager.onMouseMove(i)):(this.drawingManager.onMouseDown(i),this._drawTouchAnchorActive=this.drawingManager.isPlacing()&&!this.drawingManager.isFreehandStroke()),this.scheduleRender();return}let s=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,c=r.clientX-s.left,l=r.clientY-s.top,{chartW:u,priceH:d}=this.getChartLayout(),f=this.getScaledPriceRange(this.viewport);if(c>=u){if(e.preventDefault(),l<=d)this.axisDrag={axis:`price`,startPos:l,startSize:this.priceScaleFactor};else{let e=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),t=d+Dd;for(let n of e){let e=this.paneH(n);if(l>=t&&l<t+e){var p;this.axisDrag={axis:`subpane`,startPos:l,startSize:(p=this.subPaneScaleFactors.get(n.instanceId))==null?1:p,instanceId:n.instanceId};break}t+=e+Dd}}this.scheduleRender();return}let m=s.height-this.timeAxisHeight;if(l>=m){e.preventDefault(),this.axisDrag={axis:`time`,startPos:c,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let h=this.drawingManager.getHandleAtPoint(c,l,this.scaleManager,this.viewport,f,u,d,n.TOUCH_HANDLE_SLOP_PX);if(h){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(h.drawing),this.drawingManager.startResize(h.drawing,h.handle.pointIndex,h.handle),this.hideMobileDrawingFlyout(),this.scheduleRender();return}let g=this.drawingManager.hitTest(c,l,this.scaleManager,this.viewport,f,u,d);if(g){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(g),this.drawingManager.startDrag(g,i),this._drawTouchStartXY={x:r.clientX,y:r.clientY},this.hideMobileDrawingFlyout(),this.scheduleRender();return}let _=Oe(c,l,this.clusterBadgeAreas);if(_){e.preventDefault(),this.panHandler.cancel(),this.expandedClusters.has(_.clusterId)?this.expandedClusters.delete(_.clusterId):this.expandedClusters.add(_.clusterId),this.renderTradeLayer();return}let v=Kt(c,l,this.offViewportHitAreas);if(v){e.preventDefault(),this.panHandler.cancel(),this.scrollToCenterPrice(v.targetPrice);return}let y=kt(c,l,this.tradeLevelConfirmAreas);if(y){e.preventDefault(),y.action===`confirm`?this.applyPendingChanges(y.label):this.revertPendingChanges(y.label);return}if(this._showQuantityField&&this._draftQtyPillArea){let t=this._draftQtyPillArea;if(c>=t.pillX&&c<=t.pillX+t.pillW&&l>=t.pillY&&l<=t.pillY+t.pillH){e.preventDefault(),e.stopPropagation(),this.openDraftQtyFlyout(t);return}}let b=Dt(c,l,this.tradeLevelHitAreas);if(b){e.preventDefault(),this._handleTradeLevelClose(b);return}if(!this.drawingManager.getActiveTool()){let t=Ot(c,l,this.tradeLevelEditAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);n&&this._openTradeLevelEditForm(n);return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=jt(c,l,this.tradeLevelDragAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);if(n){let e=this.selectedTradeLabel===n.label,r=t.isBracket||this._orderTimeDragEnabled&&t.timeDrag===!0||n.type===`pending`&&n.orderType!==`market`&&(e||!t.isBox);if(this.hideLevelConfirmCancel&&!r){let e=this.pendingLevelDrags.has(n.label);if(this.selectedTradeLabel===n.label&&!e){this._cancelEditAndDeselect(n.label);return}this._openTradeLevelEditForm(n);return}if(this._needsDragAxisLock(t,n)){this._pendingTradeDrag={dragHit:t,level:n,hitY:l,startX:c,startY:l,axisLock:!0};return}this._startTradeDragFromHit(t,n,l,c),this.scheduleRender();return}}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=Mt(c,l,this.tradeAddBracketAreas);if(t){e.preventDefault(),this._startAddBracketFromHit(t,l),this.scheduleRender();return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=At(c,l,this.tradeHoverAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);if(n){let e=this.pendingLevelDrags.has(t.label);if(this.selectedTradeLabel===t.label&&!e){this._cancelEditAndDeselect(t.label);return}this._openTradeLevelEditForm(n);return}}}this.drawingManager.selectDrawing(null),this.hideMobileDrawingFlyout(),this.expandedClusters.size>0&&(this.expandedClusters.clear(),this.renderTradeLayer()),c<u&&l<m&&(this._mobileCrosshairActive?(this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null),this._mobileTapStartXY={x:c,y:l}):(this._longPressTimer!==null&&clearTimeout(this._longPressTimer),this._longPressPoint={x:c,y:l},this._longPressTimer=setTimeout(()=>{this._longPressTimer=null,this._longPressPoint&&(this._activateMobileCrosshair(this._longPressPoint.x,this._longPressPoint.y),this._longPressPoint=null)},500)))},this.onDrawingTouchMove=e=>{var t,n;if(e.touches.length!==1)return;let r=this.touchToDrawingPoint(e.touches[0]);if(this._lastDrawingTouchPoint=r,this.axisDrag){var i;e.preventDefault();let t=e.touches[0],n=(i=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():i,r=t.clientX-n.left,a=t.clientY-n.top;if(this.axisDrag.axis===`price`){let e=a-this.axisDrag.startPos;this.priceScaleFactor=Math.max(.1,Math.min(10,this.axisDrag.startSize*1.005**e))}else if(this.axisDrag.axis===`subpane`&&this.axisDrag.instanceId){let e=a-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.instanceId,t)}else{let e=r-this.axisDrag.startPos,t=Math.max(10,Math.min(500,Math.round(this.axisDrag.startSize+e*.5))),n=(this.viewport.startIndex+this.viewport.endIndex)/2,i=Math.max(0,n-t/2);this.viewport={...this.viewport,startIndex:i,endIndex:i+t}}this.scheduleRender();return}if(this.drawingManager.isPlacing()&&!this._drawTouchAnchorActive){e.preventDefault(),this.drawingManager.onMouseMove(r),this.scheduleRender();return}if(this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing()){e.preventDefault(),e.stopPropagation(),this.drawingManager.onMouseMove(r),this.scheduleRender();return}if(this._pendingTradeDrag){var a;e.preventDefault();let t=e.touches[0],n=(a=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():a;if(!this._upgradePendingTradeDrag(t.clientX-n.left,t.clientY-n.top))return}if((t=this.orderTimeDragHandler)!=null&&t.active){var o;e.preventDefault();let t=e.touches[0],n=(o=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():o,r=t.clientX-n.left,{chartW:i}=this.getChartLayout(),a=this.orderTimeDragHandler.onMove(r,this.scaleManager,this.viewport,i);this.tradeDragNewBarIndex=a,this.renderTradeLayer();let s=this.orderTimeDragHandler.dragLabel,c=a===null?void 0:this.barIndexToTimestamp(a);s&&a!==null&&c!==void 0&&this.emitter.emit(`orderLineMoving`,{label:s,toTimestamp:c,toBarIndex:a,isFullscreen:this.isFullscreen});return}if((n=this.tradeDragHandler)!=null&&n.active){var s,c,l,u,d;e.preventDefault();let t=e.touches[0],n=(s=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():s,r=t.clientY-n.top,{priceH:i}=this.getChartLayout(),a=(c=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):c,o=this.tradeDragHandler.onMouseMove(r,this.scaleManager,a,i);if(this.tradeDragNewPrice=(l=o==null?void 0:o.newPrice)==null?null:l,this.tradeDragNewSLPrice=(u=o==null?void 0:o.derivedSLPrice)==null?null:u,this.tradeDragNewTPPrice=(d=o==null?void 0:o.derivedTPPrice)==null?null:d,this.renderTradeLayer(),this.tradeDragNewPrice!==null&&o){let e=o.label.indexOf(`:`),t=e===-1?o.label:o.label.slice(0,e),n=e===-1?void 0:o.label.slice(e+1),r=this.levels.find(e=>e.label===t);r&&this.emitter.emit(`tradeLevelDrag`,{label:r.label,newPrice:this.tradeDragNewPrice,data:r.data,bracketType:n,...o.derivedSLPrice===void 0?{}:{derivedSLPrice:o.derivedSLPrice},...o.derivedTPPrice===void 0?{}:{derivedTPPrice:o.derivedTPPrice},isFullscreen:this.isFullscreen})}return}if(this._mobileTapStartXY||this._longPressTimer!==null){var f,p;let t=e.touches[0],n=(f=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():f,r=(p=this._mobileTapStartXY)==null?this._longPressPoint:p;if(r){let e=t.clientX-n.left-r.x,i=t.clientY-n.top-r.y;Math.sqrt(e*e+i*i)>6&&(this._mobileTapStartXY=null,this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null))}}if(this._mobileCrosshairActive){var m,h;e.preventDefault();let t=e.touches[0],n=(m=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():m,r=t.clientX-n.left,i=t.clientY-n.top,{chartW:a,priceH:o}=this.getChartLayout(),s=(h=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):h,c=n.height-this.timeAxisHeight;if(r<a&&i<c){var g;let e=this.scaleManager.pixelToBarIndex(r,this.viewport,a),t=this.scaleManager.pixelToPrice(i,s,o),n=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(e))),c=(g=this.dataStore.all[n])==null?null:g;this.crosshair=this.selectedTradeLabel===null?{x:r,y:i,barIndex:n,price:t,bar:c}:null,this.tradeButton&&(this.tradeButton.setY(i),this._isTradingActive||qt(i,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)?this.tradeButton.hide():this.tfcActive&&this.tradeButton.show(),this._tradeButtonClickData={price:t,y:i}),this.scheduleRender()}}},this.onDrawingTouchCancel=e=>{var t,n;this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null);let r=!1;this._pendingTradeDrag=null,(t=this.orderTimeDragHandler)!=null&&t.active&&(this.orderTimeDragHandler.cancel(),this.tradeDragNewBarIndex=null,r=!0),(n=this.tradeDragHandler)!=null&&n.active&&(this.tradeDragHandler.cancelDrag(),this.tradeDragNewPrice=null,this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null,this._pendingBracketOrderLabel=null,r=!0),this._pendingTradeDrag=null,r&&this.renderTradeLayer()},this.onDrawingTouchEnd=e=>{var t;if(this._lastTouchTime=Date.now(),this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null),this._pendingTradeDrag){let{level:e}=this._pendingTradeDrag;this._pendingTradeDrag=null;let t=this.pendingLevelDrags.has(e.label);if(this.selectedTradeLabel===e.label&&!t){this._cancelEditAndDeselect(e.label);return}this._openTradeLevelEditForm(e);return}if(this._endOrderTimeDrag())return;if((t=this.tradeDragHandler)!=null&&t.active){let e=this.tradeDragHandler.endDrag();if(e){var n;this._finalizeMainDragWithBrackets(e,(n=this._pendingBracketOrderLabel)==null?void 0:n)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.renderTradeLayer();return}if(this.axisDrag){let e=this.axisDrag.axis===`price`||this.axisDrag.axis===`time`;this.axisDrag=null,this.scheduleRender(),e&&this.scheduleViewportPersist();return}let r=this._drawTouchAnchorActive;if(this._drawTouchAnchorActive=!1,this.drawingManager.isFreehandStroke()){var i;let{chartW:e,priceH:t}=this.getChartLayout(),n=(i=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):i;this.drawingManager.finishFreehand(this.scaleManager,this.viewport,n,e,t),this._lastDrawingTouchPoint=null,this.scheduleRender();return}if(!r&&this.drawingManager.isPlacing()&&this._lastDrawingTouchPoint){this.drawingManager.onMouseDown(this._lastDrawingTouchPoint),this._lastDrawingTouchPoint=null,this.scheduleRender();return}if(this.drawingManager.isDraggingDrawing()){let t=e.changedTouches[0],n=this._drawTouchStartXY;if(this._drawTouchStartXY=null,this.drawingManager.endDrag(),t&&n&&this.drawingManager.getSelectedDrawing()){let e=t.clientX-n.x,r=t.clientY-n.y;Math.sqrt(e*e+r*r)<8&&this.showMobileDrawingFlyout(t.clientX,t.clientY)}this.scheduleRender()}if(this.drawingManager.isResizingDrawing()&&(this.drawingManager.endResize(),this.scheduleRender()),this._mobileTapStartXY){var a;this._mobileTapStartXY=null,this._mobileCrosshairActive=!1,this.crosshair=null,(a=this.tradeButton)==null||a.hide(),this.scheduleRender()}},this.onCanvasClick=e=>{var t,n;let r=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,i=e.clientX-r.left,a=e.clientY-r.top,{chartW:o,priceH:s}=this.getChartLayout(),c=(n=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):n,l=this.scaleManager.pixelToBarIndex(i,this.viewport,o),u=this.scaleManager.pixelToPrice(a,c,s),d=Math.round(l),f=Oe(i,a,this.clusterBadgeAreas);if(f){this.expandedClusters.has(f.clusterId)?this.expandedClusters.delete(f.clusterId):this.expandedClusters.add(f.clusterId),this.renderTradeLayer();return}let p=Kt(i,a,this.offViewportHitAreas);if(p){this.scrollToCenterPrice(p.targetPrice);return}let m=kt(i,a,this.tradeLevelConfirmAreas);if(m){m.action===`confirm`?this.applyPendingChanges(m.label):this.revertPendingChanges(m.label);return}if(this._showQuantityField&&this._draftQtyPillArea){let t=this._draftQtyPillArea;if(i>=t.pillX&&i<=t.pillX+t.pillW&&a>=t.pillY&&a<=t.pillY+t.pillH){e.preventDefault(),e.stopPropagation(),this.openDraftQtyFlyout(t);return}}let h=Dt(i,a,this.tradeLevelHitAreas);if(h){this._handleTradeLevelClose(h);return}if(!this.drawingManager.getActiveTool()){let e=Ot(i,a,this.tradeLevelEditAreas);if(e){let t=this.levels.find(t=>t.label===e.label);t&&this._openTradeLevelEditForm(t);return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=Mt(i,a,this.tradeAddBracketAreas);if(e){this._startAddBracketFromHit(e,a);return}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=jt(i,a,this.tradeLevelDragAreas);if(e){let t=this.levels.find(t=>t.label===e.label);if(t&&!(this.hideLevelConfirmCancel&&!e.isBracket)){this._pendingTradeDrag={dragHit:e,level:t,hitY:a,startX:i,startY:a,axisLock:this._needsDragAxisLock(e,t)};return}}}let g=At(i,a,this.tradeHoverAreas);if(g){let e=this.pendingLevelDrags.has(g.label);if(this.selectedTradeLabel===g.label&&!e){this._cancelEditAndDeselect(g.label);return}let t=this.levels.find(e=>e.label===g.label);t?this._openTradeLevelEditForm(t):(this.selectedTradeLabel=g.label,this.renderTradeLayer());return}else if(this.selectedTradeLabel!==null&&!this.hideLevelConfirmCancel&&this.deselectActiveOnOutsideClick){let e=this.selectedTradeLabel,t=this.pendingLevelDrags.get(e);!t||t.length===0?this._cancelEditAndDeselect(e):this.revertPendingChanges(e)}this.expandedClusters.size>0&&(this.expandedClusters.clear(),this.renderTradeLayer());let _=r.height-this.timeAxisHeight;if(i>=o){if(a<=s)this.axisDrag={axis:`price`,startPos:a,startSize:this.priceScaleFactor};else{let e=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),t=s+Dd;for(let n of e){let e=this.paneH(n);if(a>=t&&a<t+e){var v;this.axisDrag={axis:`subpane`,startPos:a,startSize:(v=this.subPaneScaleFactors.get(n.instanceId))==null?1:v,instanceId:n.instanceId};break}t+=e+Dd}}this.scheduleRender();return}if(a>=_){this.axisDrag={axis:`time`,startPos:i,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let y=this.getSeparatorPositions().find(e=>Math.abs(a-e.y)<=4);if(y){var b,x;let e=this.activeIndicators.find(e=>e.instanceId===y.instanceId),t=(b=(x=this.paneHeightOverrides.get(y.instanceId))==null?e==null?void 0:e.indicator.paneHeight:x)==null?Ed:b;this.separatorDrag={instanceId:y.instanceId,startY:a,startH:t},this.scheduleRender();return}if(!this.drawingManager.onMouseDown(this.makeDrawingPoint(l,u))){var S;let e=this.drawingManager.getHandleAtPoint(i,a,this.scaleManager,this.viewport,c,o,s);if(e)this.drawingManager.selectDrawing(e.drawing),this._pendingDrawResize={drawing:e.drawing,pointIndex:e.handle.pointIndex,handle:e.handle,startX:i,startY:a};else{let e=this.drawingManager.hitTest(i,a,this.scaleManager,this.viewport,c,o,s);this.drawingManager.selectDrawing(e),e&&(this._pendingDrawDrag={drawing:e,startX:i,startY:a})}let t=(S=this.dataStore.all[d])==null?null:S;this.emitter.emit(`click`,{x:i,y:a,barIndex:d,price:u,bar:t})}this.scheduleRender()},this.onDoubleClick=e=>{var t;this.drawingManager.finalizePlacing();let n=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,r=e.clientX-n.left,i=e.clientY-n.top,{chartW:a,priceH:o}=this.getChartLayout(),s=n.height-this.timeAxisHeight;if(r>=a){this.resetPriceAxis();return}if(i>=s){this.resetTimeAxis();return}let c=new Set([`text`,`callout`,`anchoredNote`]),l=this.drawingManager.getSelectedDrawing();if(l&&c.has(l.type)){let e=this.getScaledPriceRange(this.viewport);if(l.hitTest(r,i,this.scaleManager,this.viewport,e,a,o)){this.showTextInput(l);return}}this.scheduleRender()},this.onKeyDown=e=>{var t;if(e.key===`Escape`&&(t=this.orderTimeDragHandler)!=null&&t.active){this.orderTimeDragHandler.cancel(),this.tradeDragNewBarIndex=null,this.drawCanvas.style.cursor=`default`,this.renderTradeLayer(),e.preventDefault();return}if(e.key===`Escape`&&this.pnlPillExpanded){var n;this.pnlPillExpanded=!1,(n=this.pnlPill)==null||n.setExpanded(!1),this.recomputeRenderStyle(),this.renderTradeLayer()}if(e.key===`Escape`&&this.expandedClusters.size>0){this.expandedClusters.clear(),this.renderTradeLayer(),e.preventDefault();return}if(e.key===`Escape`&&this.pendingLevelDrags.size>0){this.revertPendingChanges(),e.preventDefault();return}let r=(e.ctrlKey||e.metaKey)&&e.key===`z`?`z`:e.key;if(this.drawingManager.onKeyDown(r)){var i;e.preventDefault(),this.hideMobileDrawingFlyout(),(i=this.leftBar)==null||i.setActiveTool(this.drawingManager.getActiveTool()),this.drawCanvas.style.cursor=this.drawingManager.getActiveTool()?`crosshair`:`default`,this.scheduleRender()}},this.onTick=e=>{var t;if(this._isDestroyed)return;let n=this.dataStore.all;if(n.length===0||this._suppressTicks)return;this.liveBidAsk={bid:e.bid,ask:e.ask},e.ltp!=null&&e.ltp>0&&(this.liveLtp=e.ltp),this.setDotTickActive();let r=n[n.length-1],i=this.timeframeToMs(this.timeframe),a=this.tickClosePriceSource===`ltp`?(t=this.liveLtp)==null?e.bid:t:this.tickClosePriceSource===`ask`?e.ask:e.bid;if(e.time<r.time+i){var o;let t={...r,high:Math.max(r.high,a),low:Math.min(r.low,a),close:a,volume:((o=r.volume)==null?0:o)+e.volume};n[n.length-1]=t}else{let t=r,o=Math.floor(e.time/i)*i;n.push({time:o,open:a,high:a,low:a,close:a,volume:e.volume}),this._debug&&console.warn(`[tick] → NEW candle @ ${new Date(o).toISOString()} (closed ${new Date(t.time).toISOString()}) | total bars=${n.length}`);let s=n[n.length-1];this._targetViewport.endIndex>=n.length&&(this._targetViewport={...this._targetViewport,startIndex:this._targetViewport.startIndex+1,endIndex:this._targetViewport.endIndex+1}),this.emitter.emit(`newBar`,{completedBar:t,openingBar:s,intervalMs:i}),this.correctCompletedBar(t.time,i),o>t.time+i&&this.fillTickGap(t.time,o)}this.recomputeIndicators(),this.scheduleRender()},typeof window>`u`||typeof document>`u`)throw Error(`acttrader-charts requires a browser environment`);Vn();let ie=()=>{this._cachedWrapRect=null,this._cachedDrawRect=null},ae=window.visualViewport;ae&&(ae.addEventListener(`resize`,ie),ae.addEventListener(`scroll`,ie)),document.addEventListener(`scroll`,ie,{capture:!0,passive:!0}),window.addEventListener(`resize`,ie);let oe=typeof ResizeObserver<`u`?new ResizeObserver(ie):null;oe==null||oe.observe(document.documentElement),document.body&&(oe==null||oe.observe(document.body)),this.disposeVvListener=()=>{ae&&(ae.removeEventListener(`resize`,ie),ae.removeEventListener(`scroll`,ie)),document.removeEventListener(`scroll`,ie,{capture:!0}),window.removeEventListener(`resize`,ie),oe==null||oe.disconnect()};let{container:se,theme:ce=`dark`,series:le=`candlestick`,showVolume:ue=!0,showUI:de=!0,timeframe:fe=`1D`,duration:pe=void 0,symbol:me=``,isins:he,onIsinSelect:ge,onSymbolClick:_e,onOrderSubmit:ve,dataLoader:ye,uiConfig:be,labels:xe,tickActivityMs:Se=3e4,hideSymbolAndTick:Ce=!1,hideOHLCV:we=!1,showBottomBar:Te=!1}=i;if(this.dataLoader=ye==null?null:ye,this.compareDataLoader=(a=i.compareDataLoader)==null?null:a,this.compareManager=new lu({emitter:this.emitter,loader:this.compareDataLoader,maxCompares:i.maxCompares}),this.drawingToolsEnabled=i.showDrawingTools!==!1,this.settingsEnabled=i.showSettings!==!1,this.fullscreenEnabled=i.showFullscreenButton!==!1,this.uiConfig=O(be),this.labels=A(xe),this.tickActivityMs=Se,this.maxCandles=(o=i.maxCandles)==null?200:o,this._durationTimeframeMap={..._i,...i.durationTimeframeMap},this.minInitialBars=Math.max(0,(c=i.minInitialBars)==null?10:c),this.maxLookbackMs=Math.max(0,(l=i.maxLookbackMs)==null?365*24*60*60*1e3:l),this.prefetchThreshold=(u=i.prefetchThreshold)==null?80:u,this.defaultVisibleBars=(f=i.defaultVisibleBars)==null?Od:f,this.defaultMobileVisibleBars=i.defaultMobileVisibleBars,this.explicitMobileDivisor=i.mobileBarDivisor!==void 0,this.mobileBarDivisor=(p=i.mobileBarDivisor)==null?2:p,this._autoVisibleBars=i.defaultVisibleBars==null&&i.defaultMobileVisibleBars==null,this.targetCandleWidth=(m=i.targetCandleWidth)==null?kd:m,this.viewport={...this.viewport,endIndex:Fd(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)},this._targetViewport={...this.viewport},this.maxSubPanes=(h=i.maxSubPanes)==null?3:h,this.tickClosePriceSource=(v=i.tickClosePriceSource)==null?`bid`:v,this._reloadOnPriceSourceChange=i.reloadOnPriceSourceChange!==!1,this.showLtpPrice=i.showLtpPrice,this.tradesThresholdForHorizontalLine=(y=i.tradesThresholdForHorizontalLine)==null?2:y,i.positionRenderStyle===`line`||i.positionRenderStyle===`dot`)this.positionRenderStyleOverride=i.positionRenderStyle;else{let e=localStorage.getItem(this.RENDER_STYLE_LS_KEY);(e===`line`||e===`dot`)&&(this.positionRenderStyleOverride=e)}i.tradeDisplayFilter&&(this.tradeDisplayFilter=i.tradeDisplayFilter),i.canvasColors&&(this.settingsCanvasColors=i.canvasColors),this.recomputeRenderStyle(),this.showBidAskLines=(b=i.showBidAskLines)==null?!1:b,this.showAskLine=i.showAskLine,this.showBidLine=i.showBidLine,this.showActLogo=(x=i.showActLogo)==null?!1:x,this.hideLevelConfirmCancel=(S=i.hideLevelConfirmCancel)==null?!1:S,this.deselectActiveOnOutsideClick=(C=i.deselectActiveOnOutsideClick)==null?!1:C,this._orderTimeDragEnabled=((w=i.features)==null?void 0:w.orderLineTimeDrag)===!0,this._features=i.features,this.drawingManager.setFreehandEnabled(((T=i.features)==null?void 0:T.enableForecasting)===!0),this._orderLineDragSnap=i.orderLineDragSnap!==!1,this._orderLineDefaultAnchor=i.orderLineDefaultAnchor===`center`?`center`:`timestamp`,this._orderTimeDragEnabled&&i.orderLineAnchorPersistence!==!1&&(this._orderLineAnchorStore=new Tu(Tu.browserStorage())),this.tradeLevelButtonScale=Math.min(Math.max((E=i.tradeLevelButtonScale)==null?1:E,1),3),this.tradeLevelBadgeScale=Math.min(Math.max((D=i.tradeLevelBadgeScale)==null?1:D,.5),1),this.tradeLevelBadgeAnchor=i.tradeLevelBadgeAnchor===`left`?`left`:`auto`,this._bracketLabel={mode:(k=i.bracketLabelMode)==null?`price`:k,currencySymbol:(j=i.currencySymbol)==null?`$`:j},this.levelClusteringEnabled=(M=i.levelClusteringEnabled)==null?!0:M,this.clusterThresholdDistance=(N=i.clusterThresholdDistance)==null?20:N,this.enableThemeToggle=(P=i.enableThemeToggle)==null?!1:P,this.tfcEnabled=i.tfcEnabled!==!1,this.crosshairEnabled=i.crosshairEnabled!==!1,this.tfcActive=this.tfcEnabled,this.showCandleCountdown=(F=i.showCandleCountdown)==null?!0:F,this.candleCountdownTimeframes=i.candleCountdownTimeframes,this.showTradeLevelsAlways=(I=i.showTradeLevelsAlways)==null?!0:I,this.showPriceAxisCountdown=(R=i.showPriceAxisCountdown)==null?!1:R,this._revealNewBrackets=i.revealNewBrackets===!0;try{let e=localStorage.getItem(this.SHOW_SLTP_ALWAYS_LS_KEY);e!==null&&(this.showTradeLevelsAlways=e===`true`);let t=localStorage.getItem(this.PRICE_AXIS_COUNTDOWN_LS_KEY);t!==null&&(this.showPriceAxisCountdown=t===`true`)}catch(e){}this._onOrderSubmit=ve,this._onAddAlert=(z=i.onAddAlert)==null?null:z,i.minLots!==void 0&&(console.warn(`[acttrader-charts] ChartConfig.minLots is deprecated. DraftOrderQtyInput has been removed. The value is stored and used as the submitted lot size.`),this._minLots=i.minLots),i.showQuantityField!==void 0&&(this._showQuantityField=i.showQuantityField),i.quantityFieldConfig&&(i.quantityFieldConfig.minLots!==void 0&&(this._qtyFieldMin=i.quantityFieldConfig.minLots),i.quantityFieldConfig.maxLots!==void 0&&(this._qtyFieldMax=i.quantityFieldConfig.maxLots)),i.onLotsChange!==void 0&&console.warn(`[acttrader-charts] ChartConfig.onLotsChange is deprecated. DraftOrderQtyInput has been removed; this callback will never fire.`),i.hideQtyButton!==void 0&&console.warn(`[acttrader-charts] ChartConfig.hideQtyButton is deprecated and is a no-op. DraftOrderQtyInput has been removed.`),this.themeName=ce===`dark`?`dark`:`light`,this.themeOverrides=i.themeOverrides,this.timezone=i.timezone===`local`?Intl.DateTimeFormat().resolvedOptions().timeZone:(V=i.timezone)==null?`UTC`:V,this.aggregateFrom=i.aggregateFrom;let Ee=this.themeName===`dark`?g:_;this.theme=d(Ee,(ee=this.themeOverrides)==null?void 0:ee[this.themeName]),this.chromeTheme=this.theme,this.series=le,this.showVolume=ue,this.timeframe=fe,this.duration=pe,this.symbol=me,this.instrumentSpec=i.instrument,this.accountSpec=i.account,this.wrapper=document.createElement(`div`),Object.assign(this.wrapper.style,{display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,overflow:`hidden`,boxSizing:`border-box`});let De=i.headerLayout===`advanced`||i.headerLayout===void 0&&((te=i.features)==null?void 0:te.advancedToolbar)===!0,ke=i.headerLayout===`compact`,Ae=i.headerLayout===`mobile`,je=i.hideHeader===!0,Me=i.enableMultipleLayouts===!0,Ne=i.enableSnapshot===!0,Pe=i.enableCrossHairHeader===!0||i.enableCrosshairToggle===!0;i.layoutSync&&(this.currentSync={...pi,...i.layoutSync}),Me&&typeof i.onLayoutClick==`function`&&console.warn("[ActCharts] `enableMultipleLayouts: true` owns the Layout button — the deprecated `onLayoutClick` callback is ignored. Listen to the `layoutChange` event instead."),Ne&&typeof i.onScreenshotClick==`function`&&console.warn("[ActCharts] `enableSnapshot: true` owns the Snapshot button — the deprecated `onScreenshotClick` callback is ignored. Listen to the `snapshot` event instead."),typeof i.onOneClickTradeToggle==`function`&&typeof i.onOneClickToggle==`function`&&console.warn("[ActCharts] Both `onOneClickTradeToggle` and the deprecated `onOneClickToggle` were provided — using `onOneClickTradeToggle`. Remove the legacy field.");let Fe=(ne=i.onOneClickTradeToggle)==null?i.onOneClickToggle:ne;if(de){let e=e=>{this.timeframe=e,this.emitter.emit(`timeframeChange`,{timeframe:e}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`timeframe`)},t=md.filter(e=>e.enabled).map(e=>({value:e.short_name,label:`${e.name} (${e.short_name})`,category:e.type})),n=()=>{if(Me)this.openLayoutPopover();else{var e;(e=i.onLayoutClick)==null||e.call(i)}},r=()=>{if(Ne)this.openSnapshotPopover();else{var e;(e=i.onScreenshotClick)==null||e.call(i)}},a=Me||typeof i.onLayoutClick==`function`,o=Ne||typeof i.onScreenshotClick==`function`;if(!je)if(Ae){var Ie,Le;let t=this.drawingToolsEnabled?{setDrawingTool:e=>{this.setDrawingTool(e)},clearAllDrawings:()=>{this.clearAllDrawings()},addIndicator:(e,t)=>{this.addIndicatorByName(e,t)},removeIndicator:e=>{this.removeIndicator(e)},...Pe?{setCrosshairEnabled:e=>{this.setCrosshairEnabled(e)}}:{}}:null;this.mobileHeader=new Yr(e,t,(Ie=i.onAskAiClick)==null?null:Ie,this.settingsEnabled?()=>this.openChartSettings():null,e=>this.setSeries(e),this.timeframe,this.series,this.theme,(Le=this.uiConfig.topBar)==null?void 0:Le.dropBtnFontFamily,this._enabledGates(),Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)}),this.wrapper.appendChild(this.mobileHeader.el)}else if(ke)this.compactToolbar=new Or(e=>this.setSeries(e),e,e=>this.addIndicatorByName(e),this.series,this.timeframe,this.theme,Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)}),this.compactToolbar.setIndicatorOptions(t),this.wrapper.appendChild(this.compactToolbar.el);else if(De){var Re,ze,Be,Ve;this.advancedToolbar=new br(e=>this.setSeries(e),e,e=>this.addIndicatorByName(e),()=>this.openChartSettings(),()=>this.toggleFullscreen(),this.drawingToolsEnabled?()=>this.toggleDrawingTools():null,this.drawingToolsEnabled,this.settingsEnabled,this.fullscreenEnabled,this.series,this.timeframe,this.theme,this.compareDataLoader?()=>this.openComparePicker():void 0,n,Fe,r,a,o,(Re=i.priceSourceSelector)==null?null:Re,this.tickClosePriceSource,e=>this._applyPriceSource(e,!0),Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)},((ze=i.features)==null?void 0:ze.pnlPill)===!0,((Be=i.pnlPill)==null?void 0:Be.visible)!==!1,e=>{this.setPnlPillVisible(e)},i.headerOverflowMenu===!0,(Ve=i.timeframes)==null?null:Ve,this._onAddAlert?()=>{var e;(e=this._onAddAlert)==null||e.call(this,this._currentMarketPrice())}:null),this.advancedToolbar.setIndicatorOptions(t),this.wrapper.appendChild(this.advancedToolbar.el),this.advancedToolbar.setFullscreen(this.isFullscreen)}else{var He,Ue,H,We;let s=this._durationTimeframeMap;this.topBar=new qn(e=>this.setSeries(e),e,e=>this.addIndicatorByName(e),(e,t)=>{var n,r;this.duration=e,this.timeframe=t,(n=this._tb)==null||n.setTimeframe(t),(r=this.bottomBar)==null||r.setActive(e),this.emitter.emit(`durationChange`,{duration:e,timeframe:t}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`)},()=>this.openChartSettings(),()=>this.toggleFullscreen(),this.drawingToolsEnabled?()=>this.toggleDrawingTools():null,this.drawingToolsEnabled,this.settingsEnabled,this.fullscreenEnabled,this.tfcEnabled,this.tfcActive,this.tfcEnabled?e=>{this.setTfcActive(e)}:null,this.series,this.timeframe,null,s,this.theme,this.uiConfig.topBar,this.labels.topBar,()=>this.emitUiState(),a,o,n,r,Fe==null?null:Fe,(He=i.priceSourceSelector)==null?null:He,this.tickClosePriceSource,e=>this._applyPriceSource(e,!0),Pe,this.crosshairEnabled,e=>{this.setCrosshairEnabled(e)},((Ue=i.features)==null?void 0:Ue.pnlPill)===!0,((H=i.pnlPill)==null?void 0:H.visible)!==!1,e=>{this.setPnlPillVisible(e)},(We=i.timeframes)==null?null:We),this.topBar.setIndicatorOptions(t),this.wrapper.appendChild(this.topBar.el),this.topBar.setFullscreen(this.isFullscreen)}Me&&(this.layoutPopover=new hi(this.theme,this.currentPresetId,this.currentSync,e=>this.handleLayoutPresetSelect(e),e=>this.handleSyncToggle(e),()=>this.emitUiState())),Ne&&(this.snapshotPopover=new gi(this.theme,e=>this.handleSnapshot(e),()=>this.emitUiState()))}let U=document.createElement(`div`);if(Object.assign(U.style,{display:`flex`,flex:`1`,minHeight:`0`,overflow:`hidden`,position:`relative`}),de&&this.drawingToolsEnabled&&(this.leftBar=new Ci(e=>this.setDrawingTool(e),e=>{switch(e){case`undo`:this.undoDrawing();break;case`redo`:this.redoDrawing();break;case`delete_selected`:this.deleteSelectedDrawing();break;case`clear_all`:this.clearAllDrawings();break;case`hide_all`:this.hideAllDrawings();break;case`show_all`:this.showAllDrawings();break;case`lock_all`:this.lockAllDrawings();break;case`unlock_all`:this.unlockAllDrawings();break}},()=>{var e;this.leftBarVisible=!1,(e=this._tb)==null||e.setDrawingsBtnActive(!1)},this.theme,this.uiConfig.drawingToolbar,this.labels.drawingToolbar,this._enabledGates()),U.appendChild(this.leftBar.el)),this.canvasWrap=document.createElement(`div`),Object.assign(this.canvasWrap.style,{flex:`1`,position:`relative`,overflow:`hidden`,touchAction:`none`}),this.canvas=document.createElement(`canvas`),Object.assign(this.canvas.style,{position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,pointerEvents:`none`}),this.canvasWrap.appendChild(this.canvas),this.tradeCanvas=document.createElement(`canvas`),Object.assign(this.tradeCanvas.style,{position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,pointerEvents:`none`}),this.canvasWrap.appendChild(this.tradeCanvas),this.drawCanvas=document.createElement(`canvas`),Object.assign(this.drawCanvas.style,{position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,cursor:`crosshair`,touchAction:`none`,userSelect:`none`}),this.drawCanvas.style.webkitUserSelect=`none`,this.drawCanvas.style.webkitTouchCallout=`none`,this.canvasWrap.appendChild(this.drawCanvas),this.textInputEl=document.createElement(`input`),this.textInputEl.type=`text`,this.textInputEl.enterKeyHint=`go`,Object.assign(this.textInputEl.style,{position:`absolute`,display:`none`,zIndex:`15`,background:`transparent`,border:`none`,borderBottom:`1px solid #2196f3`,color:`#f5f5f5`,font:`16px system-ui, sans-serif`,outline:`none`,minWidth:`60px`,padding:`0 2px`}),this.canvasWrap.appendChild(this.textInputEl),de){this.loadingOverlayEl=document.createElement(`div`),Object.assign(this.loadingOverlayEl.style,{display:`none`,position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,alignItems:`center`,justifyContent:`center`,pointerEvents:`none`,zIndex:`20`});let e=document.createElement(`span`);e.textContent=this.labels.chart.loading,Object.assign(e.style,{fontSize:`13px`,padding:`4px 12px`,borderRadius:`4px`}),this.loadingLabelEl=e,this.loadingOverlayEl.appendChild(e),this.canvasWrap.appendChild(this.loadingOverlayEl),this.noDataOverlayEl=document.createElement(`div`),Object.assign(this.noDataOverlayEl.style,{display:`none`,position:`absolute`,top:`0`,left:`0`,width:`100%`,height:`100%`,alignItems:`center`,justifyContent:`center`,pointerEvents:`none`,zIndex:`19`});let t=document.createElement(`span`);t.textContent=this.labels.chart.noData,Object.assign(t.style,{fontSize:`13px`,padding:`4px 12px`,borderRadius:`4px`}),this.noDataLabelEl=t,this.noDataOverlayEl.appendChild(t),this.applyOverlayLabelStyles(),this.canvasWrap.appendChild(this.noDataOverlayEl)}if(de&&!(Ce&&we)){if(this.siEl=document.createElement(`div`),Object.assign(this.siEl.style,{position:`absolute`,top:`6px`,left:`6px`,zIndex:`10`,display:`flex`,alignItems:`center`,gap:`8px`,pointerEvents:`none`}),!Ce){this.siSymbolSpan=document.createElement(`span`),Object.assign(this.siSymbolSpan.style,{color:this.theme.tooltip.text,fontSize:`13px`,fontFamily:`inherit`,fontWeight:`700`,letterSpacing:`-0.025em`,display:me?`inline`:`none`}),this.siSymbolSpan.textContent=me==null?``:me;let e=()=>{var e;let t=(e=i.symbolNameDecoration)==null?`underline`:e;t===`hover`?(Nd(),this.siSymbolSpan.classList.add(Md),this.siSymbolSpan.tabIndex=0,this.siSymbolSpan.style.textDecoration=`none`):this.siSymbolSpan.style.textDecoration=t===`none`?`none`:`underline`};_e?(Object.assign(this.siSymbolSpan.style,{cursor:`pointer`,pointerEvents:`auto`}),e(),this.siSymbolSpan.addEventListener(`click`,()=>{var e,t;_e((e=(t=this.siSymbolSpan)==null?void 0:t.textContent)==null?``:e)})):ge&&(he&&(this.isins=he),this.isinPickerModal=new ou(this.chromeTheme,ge,()=>this.emitUiState()),this.getFloatingRoot().appendChild(this.isinPickerModal.el),Object.assign(this.siSymbolSpan.style,{cursor:`pointer`,pointerEvents:`auto`}),e(),this.siSymbolSpan.addEventListener(`click`,()=>{var e;this.isinPickerModal.show(this.isins,(e=this.siSymbolSpan.textContent)==null?``:e)})),this.siStreamDot=document.createElement(`span`),this.siStreamDot.className=`live-dot`,Object.assign(this.siStreamDot.style,{width:`8px`,height:`8px`,borderRadius:`9999px`,background:this.theme.ui.stream.disconnected,display:`inline-block`,flexShrink:`0`})}we||(this.siOHLCSpan=document.createElement(`span`),Object.assign(this.siOHLCSpan.style,{fontSize:`11px`,fontFamily:`inherit`,whiteSpace:`nowrap`}),this.siOHLC2Span=document.createElement(`span`),Object.assign(this.siOHLC2Span.style,{fontSize:`11px`,fontFamily:`inherit`,whiteSpace:`nowrap`}));let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,gap:`8px`}),this.siStreamDot&&e.append(this.siStreamDot),this.siSymbolSpan&&e.append(this.siSymbolSpan),this.siOHLCSpan&&e.append(this.siOHLCSpan),this.siEl.append(e),this.siOHLC2Span&&this.siEl.append(this.siOHLC2Span),this.canvasWrap.appendChild(this.siEl)}if(de&&(this.indicatorOverlay=new ul(this.theme,this.uiConfig.indicatorOverlay,this.labels.chart),this.canvasWrap.appendChild(this.indicatorOverlay.el),this.indicatorSettingsDialog=new dl(this.chromeTheme,this.labels.dialogs,()=>this.emitUiState()),this.getFloatingRoot().appendChild(this.indicatorSettingsDialog.el),this.scrollToEndBtn=document.createElement(`button`),this.scrollToEndBtn.title=this.labels.chart.scrollToLatest,this.applyScrollToEndBtnStyles(),this.scrollToEndBtn.addEventListener(`click`,()=>this.scrollToEnd()),this.canvasWrap.appendChild(this.scrollToEndBtn),this.resetViewBtn=document.createElement(`button`),this.resetViewBtn.title=`Reset view`,this.applyResetViewBtnStyles(),this.resetViewBtn.addEventListener(`click`,()=>this.resetView()),this.canvasWrap.appendChild(this.resetViewBtn)),this.tradeDragHandler=new yu,this.orderTimeDragHandler=new bu,i.onLevelDragEnd&&this.emitter.on(`tradeLevelDragEnd`,i.onLevelDragEnd),i.onLevelEdit&&this.emitter.on(`tradeLevelEdit`,i.onLevelEdit),ve){var Ge;this.tradePopover=new Jl(this.chromeTheme,.01,this.symbol,(e,t,n)=>{var r;(r=this.tradeActionBar)==null||r.hide(),this.createDraftOrder(e,t,n)},this.labels.trade,()=>this.emitUiState(),i.headerLayout===`mobile`),this.canvasWrap.appendChild(this.tradePopover.el),((Ge=i.features)==null?void 0:Ge.tradeActionBar)===!0&&(this.tradeActionBar=new Kl({theme:this.chromeTheme,labels:this.labels.trade,onAlert:this._onAddAlert?e=>{var t;(t=this._onAddAlert)==null||t.call(this,e)}:null,onPendingPick:(e,t,n)=>{this.createDraftOrder(e,t,n)},onBulkLevels:(e,t)=>{this.emitter.emit(`bulkLevelsRequested`,{kind:e,price:t,isFullscreen:this.isFullscreen,source:`actionBar`})},onVisibilityChange:()=>this.emitUiState()}),this.canvasWrap.appendChild(this.tradeActionBar.el)),this.tradeButton=new ql(this.theme,this.priceAxisWidth,()=>{if(this._tradeButtonClickData&&this.tradePopover){var e;(e=this.tradeButton)==null||e.hide();let t=this.priceAxisWidth+10+22+4,{price:n,y:r}=this._tradeButtonClickData;if(this.tradeActionBar){this.tradePopover.hide();let e=ml(this.levels,this.draftOrderLabel);this.tradeActionBar.show(n,r,t,{pricePrecision:this.dataStore.getPricePrecision(),buyOrderType:this._orderTypeForPrice(`buy`,n),sellOrderType:this._orderTypeForPrice(`sell`,n),symbol:this.symbol,positionCount:e.count,mixedSides:e.mixed});return}this.tradePopover.show(n,r,t,this.dataStore.getPricePrecision(),this._orderTypeForPrice(`buy`,n),this._orderTypeForPrice(`sell`,n))}},this.labels.trade,this.uiConfig.tradeButton),this.canvasWrap.appendChild(this.tradeButton.el),this.tradeButton.el.addEventListener(`mouseenter`,()=>{this.crosshair=null,this.emitter.emit(`crosshair`,null),this.scheduleRender()}),this.tradeButton.el.addEventListener(`mousemove`,e=>{var t;if(e.buttons!==0)return;let n=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,r=e.clientY-n.top,{priceH:i}=this.getChartLayout();if(qt(r,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)){var a;(a=this.tradeButton)==null||a.hide();return}if(r>=0&&r<=i){var o,s;(o=this.tradeButton)==null||o.setY(r);let e=(s=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):s,t=this.scaleManager.pixelToPrice(r,e,i);this._tradeButtonClickData={price:t,y:r}}})}if(U.appendChild(this.canvasWrap),this.wrapper.appendChild(U),de&&Te){var Ke;let e=this._durationTimeframeMap;this.bottomBar=new yi((e,t)=>{var n;this.duration=e,this.timeframe=t,(n=this._tb)==null||n.setTimeframe(t),this.emitter.emit(`durationChange`,{duration:e,timeframe:t}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`)},(Ke=this.duration)==null?null:Ke,this.theme,e,this.uiConfig.bottomBar,this.labels.bottomBar),this.wrapper.appendChild(this.bottomBar.el)}se.appendChild(this.wrapper),(this.themeOverrides||Object.keys(this.settingsCanvasColors).length>0)&&(this.theme=this.buildTheme(this.themeName),this.chromeTheme=this.buildChromeTheme(this.themeName),this.applyThemeToComponents());let qe=this.canvas.getContext(`2d`);if(!qe)throw Error(`Canvas 2D context unavailable`);this.ctx=qe;let Je=this.drawCanvas.getContext(`2d`);if(!Je)throw Error(`Drawing canvas 2D context unavailable`);this.drawCtx=Je;let Xe=this.tradeCanvas.getContext(`2d`);if(!Xe)throw Error(`Trade canvas 2D context unavailable`);if(this.tradeCtx=Xe,this.showActLogo){let t=new Image;t.onload=()=>{this.logoImage=t,this.scheduleRender()},t.src=e}this.drawingManager.setOnComplete(()=>{var e;(e=this.leftBar)==null||e.setActiveTool(null),this.drawCanvas.style.cursor=`default`}),this.drawingManager.onDrawingsChange=()=>this.emitStateChange(),this.drawingManager.onPointsMutated=e=>{for(let t of e.points){let e=this.barIndexToTimestamp(t.barIndex);e!=null&&(t.timestamp=e)}},this.drawingManager.onStartTextEdit=e=>this.showTextInput(e),this.drawingStylePopover=new nu(this.canvasWrap,this.chromeTheme,(e,t)=>this.updateDrawingStyle(e,t)),this.drawingManager.onSelectionChange=e=>{if(e&&e.complete&&e.locked!==!0){var t,n;let r=this.computeDrawingAnchorPx(e);r?(t=this.drawingStylePopover)==null||t.show(e,r.x,r.y):(n=this.drawingStylePopover)==null||n.hide()}else{var r;(r=this.drawingStylePopover)==null||r.hide()}},this.panHandler=new L(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender(),this.scheduleViewportPersist(),this.emitter.emit(`pan`,{viewport:e})},()=>this.dataStore.length,()=>this.scheduleRender(),()=>{var e,t,n,r;return this.drawingManager.getActiveTool()!==null||this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing()||this.separatorDrag!==null||this.axisDrag!==null||((e=(t=this.tradeDragHandler)==null?void 0:t.active)==null?!1:e)||((n=(r=this.orderTimeDragHandler)==null?void 0:r.active)==null?!1:n)||this._pendingTradeDrag!==null||this._mobileCrosshairActive},e=>{var t;if(this.priceScaleFactor===1)return;let{priceH:n}=this.getChartLayout(),r=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this._targetViewport):t,i=(r.max-r.min)/n;this.pricePanOffset+=e*i,this.scheduleRender(),this.scheduleViewportPersist()},()=>{this._isPanning=!0},()=>{this._isPanning=!1},{enabled:i.momentumScrollEnabled,decay:i.momentumDecay,threshold:i.momentumThreshold,maxVelocity:i.momentumMaxVelocity}),this.zoomHandler=new B(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender(),this.scheduleViewportPersist(),this.emitter.emit(`zoom`,{viewport:e})},()=>this.dataStore.length,()=>this.scheduleRender(),()=>{var e;return(e=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():e},()=>this.getChartLayout().chartW,e=>{let t=this._targetViewport,n=t.endIndex-t.startIndex,r=e*(n/this.drawCanvas.width),i=Math.max(0,this.dataStore.length-Math.floor(n/2)),a=Math.max(0,Math.min(i,t.startIndex+r));this._targetViewport={...t,startIndex:a,endIndex:a+n},this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender(),this.emitter.emit(`pan`,{viewport:this._targetViewport}),this.scheduleViewportPersist()}),this.drawCanvas.addEventListener(`mouseenter`,this.onPointerEnter),this.drawCanvas.addEventListener(`mousemove`,this.onMouseMove),this.drawCanvas.addEventListener(`mouseleave`,this.onMouseLeave),this.drawCanvas.addEventListener(`mousedown`,this.onCanvasClick),this.drawCanvas.addEventListener(`dblclick`,this.onDoubleClick),window.addEventListener(`mouseup`,this.onMouseUp),this.drawCanvas.addEventListener(`touchstart`,this.onDrawingTouchStart,{passive:!1}),this.drawCanvas.addEventListener(`touchmove`,this.onDrawingTouchMove,{passive:!1}),this.drawCanvas.addEventListener(`touchend`,this.onDrawingTouchEnd,{passive:!1}),this.drawCanvas.addEventListener(`touchcancel`,this.onDrawingTouchCancel,{passive:!1}),this.drawCanvas.addEventListener(`contextmenu`,e=>e.preventDefault()),document.addEventListener(`keydown`,this.onKeyDown);let Ze=()=>{var e;let t=!!document.fullscreenElement;t||(this._isCssFullscreen=!1),(e=this._tb)==null||e.setFullscreen(t),this.reparentFloatingElements()};if(this.wrapper.addEventListener(`fullscreenchange`,Ze),document.addEventListener(`fullscreenchange`,Ze),this.resizeObserver=new ResizeObserver(()=>this.onResize()),this.resizeObserver.observe(this.canvasWrap),this.onResize(),((re=i.features)==null?void 0:re.pnlPill)===!0&&this.initPnlPill(i),this.dataLoader&&this.triggerLoad(`initial`),this.initCompareUi(),i.initialCompares&&i.initialCompares.length>0){let e=i.initialCompares.slice(),t=this.emitter.on(`dataLoaded`,()=>{t();for(let t of e)this.addCompare(t)})}}resetData(){return++this._loadGeneration,this.setLoading(!1),this.setNoData(!1),this.drawingManager.clearAll(),this.levels=[],this.refreshPnlPill(),this._draftQtyPillArea=void 0,this._pendingBracketOrderLabel=null,this.loadData([])}loadData(e,t=!1){var n,r,i;this.isFetching=!1,this.noMoreData=!1,this._suppressTicks=!1,e.length>0&&this.setNoData(!1),this.liveBidAsk=null,this.liveLtp=null,this.pricePanOffset=0,this.priceScaleFactor=1,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this.dataStore.set(e),this.updateCompareRange();let a=((n=(r=this._cachedWrapRect)==null?void 0:r.width)==null?this.canvasWrap.getBoundingClientRect().width:n)-this.priceAxisWidth,o=this._autoVisibleBars&&a>0?a:void 0,s=Fd(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars,o,this.targetCandleWidth);this._defaultVisibleBars=s,this.viewport={...this.viewport,startIndex:t?0:Math.max(0,e.length-s+Id),endIndex:e.length+Id},this._targetViewport={...this.viewport};let c=this.dataStore.hasVolumeData;if(c||(this.showVolume=!1),(i=this._tb)==null||i.setVolumeControl(this.showVolume,c),this.showVolume&&c){var l;(l=this.indicatorOverlay)==null||l.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this._tb)==null||t.setVolumeControl(!1,this.dataStore.hasVolumeData)},null,()=>{var e;this.setVolume(!this.showVolume),(e=this.indicatorOverlay)==null||e.updatePillVisibility(`VOL`,this.showVolume),this.scheduleRender()})}if(this.recomputeIndicators(),this.reanchorDrawingsByTimestamp(),this._pendingViewportRestore){let e=this._pendingViewportRestore;this._pendingViewportRestore=null,e.priceScale&&(this.priceScaleFactor=e.priceScale.factor,this.pricePanOffset=e.priceScale.panOffset,this._displayedPriceRange=null,this._lockedAutoFitBase=null),e.viewport&&this.applyViewportFromTimestamps(e.viewport.startTime,e.viewport.endTime)}return this.updateCountdownState(),this.scheduleRender(),this}prependData(e){if(e.length===0)return this.noMoreData=!0,this.isFetching=!1,this;let t=this.dataStore.prepend(e);return t>0&&(this.viewport={...this.viewport,startIndex:this.viewport.startIndex+t,endIndex:this.viewport.endIndex+t},this._targetViewport={...this.viewport},this.drawingManager.shiftBarIndices(t),this.reanchorDrawingsByTimestamp(),this.recomputeIndicators(),this.updateCompareRange(),this.scheduleRender()),this.isFetching=!1,this}setLoading(e){return this.loadingOverlayEl&&(this.loadingOverlayEl.style.display=e?`flex`:`none`),e&&this.setNoData(!1),this}setNoData(e){return this.noDataOverlayEl&&(this.noDataOverlayEl.style.display=e?`flex`:`none`),this}timeframeToMs(e){var t;let n=6e4;return(t={"1m":1*n,"3m":3*n,"4m":4*n,"5m":5*n,"10m":10*n,"15m":15*n,"30m":30*n,"1h":60*n,"2h":120*n,"4h":240*n,"8h":480*n,"1D":1440*n,"1W":10080*n,"1M":43200*n}[e])==null?1440*n:t}getBaseInterval(){var e,t;return(e=(t=this.aggregateFrom)==null?void 0:t[this.timeframe])==null?this.timeframe:e}shouldAggregate(){let e=this.getBaseInterval();return e!==this.timeframe&&this.timeframeToMs(e)<this.timeframeToMs(this.timeframe)}maybeAggregate(e){return this.shouldAggregate()?hd(e,this.timeframeToMs(this.timeframe)):e}timeframeToInterval(e){var t;return(t={"1m":`1min`,"3m":`3min`,"4m":`4min`,"5m":`5min`,"10m":`10min`,"15m":`15min`,"30m":`30min`,"1h":`1h`,"2h":`2h`,"4h":`4h`,"8h":`8h`,"1D":`1day`,"1W":`1week`,"1M":`1month`}[e])==null?`1day`:t}durationToMs(e){var t;let n=1440*60*1e3;return(t={"1D":1*n,"5D":5*n,"1M":30*n,"3M":90*n,"6M":180*n,"1Y":365*n,"5Y":5*365*n,All:20*365*n}[e])==null?365*n:t}triggerLoad(e){if(!this.dataLoader)return;let t=++this._loadGeneration;this._suppressTicks=!0,this.isFetching=!0,this.noMoreData=!1;let n=new Date,r=this.maxCandles*this.timeframeToMs(this.timeframe),i=this.duration?this.durationToMs(this.duration):r,a=this.duration?i:r,o=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0);let s=this.dataLoader,c=[1,5,25,125],l=this.minInitialBars,u=this.maxLookbackMs,d=(r,i)=>{s({start:i,end:n,interval:o,priceSource:this.tickClosePriceSource}).then(s=>{if(t!==this._loadGeneration)return;let f=this.maybeAggregate(s),p=n.getTime()-i.getTime()>=u;if(f.length>=l||r+1>=c.length||p){this.loadData(f,e===`duration`),this.setLoading(!1),f.length===0&&this.setNoData(!0),this.emitter.emit(`dataLoaded`,{timeframe:this.timeframe,interval:o,start:i,end:n,priceSource:this.tickClosePriceSource});return}let m=Math.min(a*c[r+1],u),h=new Date(n.getTime()-m);d(r+1,h)}).catch(()=>{t===this._loadGeneration&&(this.isFetching=!1,this.setLoading(!1))})},f=Math.min(a*c[0],u);d(0,new Date(n.getTime()-f))}checkNeedMoreData(){if(!this.dataLoader||this.isFetching||this.noMoreData)return;let e=Math.max(20,this.prefetchThreshold);if(this._targetViewport.startIndex>e||this.dataStore.length===0)return;let t=this._loadGeneration;this.isFetching=!0;let n=this.dataStore.all[0].time,r=new Date(n-1),i=this.maxCandles*this.timeframeToMs(this.timeframe),a=this.duration?this.durationToMs(this.duration):i,o=this.duration?a:i,s=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0);let c=this.dataLoader,l=[1,5,25,125],u=this.minInitialBars,d=this.maxLookbackMs,f=(e,n)=>{c({start:n,end:r,interval:s,priceSource:this.tickClosePriceSource}).then(i=>{if(t!==this._loadGeneration)return;let a=this.maybeAggregate(i),s=r.getTime()-n.getTime()>=d;if(a.length>=u||e+1>=l.length||s){this.prependData(a),this.setLoading(!1);return}let c=Math.min(o*l[e+1],d),p=new Date(r.getTime()-c);f(e+1,p)}).catch(()=>{t===this._loadGeneration&&(this.isFetching=!1,this.setLoading(!1))})},p=Math.min(o*l[0],d);f(0,new Date(r.getTime()-p))}addIndicator(e,t){var n,r;if(e.pane===`sub`&&this.activeIndicators.filter(e=>e.indicator.pane===`sub`).length>=this.maxSubPanes)return this;let i=Sd.find(t=>t.shortName===e.name),a=i?Object.fromEntries(i.fields.map(e=>[e.key,e.default])):{};a.timeframe=`Chart`,t&&Object.assign(a,t);let o=uu(e.name,++this.indicatorInstanceSeq),s={instanceId:o,indicator:e,shortName:e.name,currentParams:a,visible:!0};this.activeIndicators.push(s),this.dataStore.length>0&&this.indicatorResults.set(o,e.compute(this.dataStore.all));let c=i!==void 0&&i.fields.length>0,l=xd(e.name,a,i),u=(n=a.timeframe)==null?`Chart`:n;if(e.pane===`sub`){let t=new ul(this.theme,this.uiConfig.indicatorOverlay,this.labels.chart);Object.assign(t.el.style,{position:`absolute`,top:`6px`,left:`6px`,zIndex:`10`}),this.canvasWrap.appendChild(t.el),this.subPaneOverlays.set(o,t),t.addPill(o,e.color,l,u,s.visible,()=>this.removeIndicator(o),c?()=>this.openIndicatorSettings(o):null,()=>{s.visible=!s.visible,t.updatePillVisibility(o,s.visible),this.scheduleRender(),this.emitStateChange()})}else{var d;(d=this.indicatorOverlay)==null||d.addPill(o,e.color,l,u,s.visible,()=>this.removeIndicator(o),c?()=>this.openIndicatorSettings(o):null,()=>{var e;s.visible=!s.visible,(e=this.indicatorOverlay)==null||e.updatePillVisibility(o,s.visible),this.scheduleRender(),this.emitStateChange()})}return(r=this._tb)==null||r.setIndicatorOptionActive(e.name,!0,this.activeIndicators.filter(t=>t.shortName===e.name).length),this.scheduleRender(),this.emitStateChange(),this.isRestoringState||this.emitter.emit(`indicatorAdded`,{instanceId:o,shortName:s.shortName,params:{...s.currentParams}}),this}removeIndicator(e){let t=fu(this.activeIndicators,e);if(t.length===0)return this;let n=new Set(t.map(e=>e.instanceId));this.activeIndicators=this.activeIndicators.filter(e=>!n.has(e.instanceId));for(let e of t){this.indicatorResults.delete(e.instanceId),this.subPaneScaleFactors.delete(e.instanceId),this.paneHeightOverrides.delete(e.instanceId);let t=this.subPaneOverlays.get(e.instanceId);if(t)t.destroy(),t.el.remove(),this.subPaneOverlays.delete(e.instanceId);else{var r;(r=this.indicatorOverlay)==null||r.removePill(e.instanceId)}}let i=new Set(t.map(e=>e.shortName));for(let e of i){var a;let t=this.activeIndicators.filter(t=>t.shortName===e).length;(a=this._tb)==null||a.setIndicatorOptionActive(e,t>0,t)}if(this.scheduleRender(),this.emitStateChange(),!this.isRestoringState)for(let e of t)this.emitter.emit(`indicatorRemoved`,{instanceId:e.instanceId,shortName:e.shortName});return this}addIndicatorByName(e,t){if(e===`VOL`){var n;if(this.setVolume(!this.showVolume),this.showVolume){var r;(r=this.indicatorOverlay)==null||r.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this._tb)==null||t.setVolumeControl(!1,this.dataStore.hasVolumeData)},null,()=>{var e;this.setVolume(!this.showVolume),(e=this.indicatorOverlay)==null||e.updatePillVisibility(`VOL`,this.showVolume),this.scheduleRender()})}else{var i;(i=this.indicatorOverlay)==null||i.removePill(`VOL`)}(n=this._tb)==null||n.setVolumeControl(this.showVolume,this.dataStore.hasVolumeData);return}let a=Sd.find(t=>t.shortName===e),o=yd.find(t=>t.shortName===e);if(!(!a&&!o)){if(_d.has(e)&&this.activeIndicators.some(t=>t.shortName===e)){this.removeIndicator(e);return}if(a){let n=Object.fromEntries(a.fields.map(e=>[e.key,e.default]));if(a.fields.some(e=>e.key===`color`)){let t=this.activeIndicators.filter(t=>t.shortName===e).length;n.color=du(vd,t)}t&&Object.assign(n,t);let r={...n};delete r.timeframe,this.addIndicator(a.factory(r),n)}else o&&this.addIndicator(o.factory(),t)}}openIndicatorSettings(e){var t;let n=this.activeIndicators.find(t=>t.instanceId===e);if(!n)return;let r=Sd.find(e=>e.shortName===n.shortName);if(!r||r.fields.length===0)return;let i={...r,fields:[...r.fields,bd]};(t=this.indicatorSettingsDialog)==null||t.show(i,n.currentParams,t=>this.updateIndicatorParams(e,t),()=>this.removeIndicator(e))}updateIndicatorParams(e,t){var n;let r=this.activeIndicators.find(t=>t.instanceId===e);if(!r)return;let i=Sd.find(e=>e.shortName===r.shortName);if(!i)return;let{timeframe:a,...o}=t,s=i.factory(o);r.indicator=s,r.currentParams={...t},this.indicatorResults.delete(e),this.dataStore.length>0&&this.indicatorResults.set(e,s.compute(this.dataStore.all));let c=(n=this.subPaneOverlays.get(e))==null?this.indicatorOverlay:n;c==null||c.updatePillColor(e,s.color),c==null||c.updatePillLabel(e,xd(r.shortName,r.currentParams,i)),c==null||c.updatePillTimeframe(e,a==null?`Chart`:a),this.scheduleRender(),this.emitStateChange()}on(e,t){return this.emitter.on(e,t)}canvasColorOverride(e,t){var n,r,i,a,o,s;let c=this.settingsCanvasColors[e];if(c)return{...t&&{...c.background!==void 0&&{background:c.background},...c.grid!==void 0&&{grid:c.grid},...c.axisText!==void 0&&{axisText:c.axisText},...c.axisBorder!==void 0&&{axisBorder:c.axisBorder},...c.crosshair!==void 0&&{crosshair:c.crosshair}},...((n=(r=(i=(a=(o=c.candleUp)==null?c.candleDown:o)==null?c.wickUp:a)==null?c.wickDown:i)==null?c.borderUp:r)==null?c.borderDown:n)!==void 0&&{candle:{...c.candleUp!==void 0&&{up:c.candleUp},...c.candleDown!==void 0&&{down:c.candleDown},...c.wickUp!==void 0&&{wickUp:c.wickUp},...c.wickDown!==void 0&&{wickDown:c.wickDown},...c.borderUp!==void 0&&{borderUp:c.borderUp},...c.borderDown!==void 0&&{borderDown:c.borderDown}}},...((s=c.volumeUp)==null?c.volumeDown:s)!==void 0&&{volume:{...c.volumeUp!==void 0&&{up:c.volumeUp},...c.volumeDown!==void 0&&{down:c.volumeDown}}}}}overlayTextColor(e){let t=this.settingsCanvasColors[this.themeName];return(t==null?void 0:t.axisText)===void 0?(t==null?void 0:t.background)===void 0?e:u(this.theme.background):t.axisText}buildTheme(e){var t;return p(d(d(e===`dark`?g:_,(t=this.themeOverrides)==null?void 0:t[e]),this.canvasColorOverride(e,!0)),this.wrapper)}buildChromeTheme(e){var t;return p(d(d(e===`dark`?g:_,(t=this.themeOverrides)==null?void 0:t[e]),this.canvasColorOverride(e,!1)),this.wrapper)}initPnlPill(e){var t,n,r;this.pnlPill=new Ml({theme:this.theme,labels:this.labels.pnlPill,currency:(t=e.pnlPill)==null?void 0:t.currency,format:(n=e.pnlPill)==null?void 0:n.format,getBounds:()=>{var e;let t=(e=this._cachedWrapRect)==null?this.canvasWrap.getBoundingClientRect():e;return{width:t.width,height:t.height,right:this.priceAxisWidth,bottom:this.timeAxisHeight}},onToggleExpand:()=>this.togglePnlPillExpanded(),onBulkLevels:()=>{ml(this.levels,this.draftOrderLabel).mixed||this.emitter.emit(`bulkLevelsRequested`,{kind:`sl`,price:null,isFullscreen:this.isFullscreen,source:`pill`})},onCloseAll:()=>this.emitPnlPillCloseAll()}),this.canvasWrap.appendChild(this.pnlPill.el),this.pnlPillVisible=((r=e.pnlPill)==null?void 0:r.visible)!==!1,this.pnlPill.setHidden(!this.pnlPillVisible),this.pnlPill.setExpanded(this.pnlPillExpanded&&this.tfcActive),this.emitter.on(`tfcToggle`,({enabled:e})=>{var t;(t=this.pnlPill)==null||t.setExpanded(this.pnlPillExpanded&&e)}),this.refreshPnlPill()}refreshPnlPill(){var e,t;this.pnlPill&&(this.pnlPill.update(ml(this.levels,this.draftOrderLabel),this.symbol),(e=this.advancedToolbar)==null||e.setPnlPillActive(this.pnlPillVisible,this.symbol),(t=this.topBar)==null||t.setPnlPillActive(this.pnlPillVisible,this.symbol))}setPnlPillVisible(e){var t,n,r;return this.pnlPillVisible===e?this:(this.pnlPillVisible=e,(t=this.pnlPill)==null||t.setHidden(!e),(n=this.advancedToolbar)==null||n.setPnlPillActive(e,this.symbol),(r=this.topBar)==null||r.setPnlPillActive(e,this.symbol),this.emitter.emit(`pnlPillToggle`,{visible:e}),this)}togglePnlPillExpanded(){var e;this.pnlPillExpanded=!this.pnlPillExpanded,this.pnlPillExpanded&&this.tfcEnabled&&!this.tfcActive&&this.setTfcActive(!0),this.pnlPillExpanded||this.expandedClusters.clear(),(e=this.pnlPill)==null||e.setExpanded(this.pnlPillExpanded&&this.tfcActive),this.recomputeRenderStyle(),this.renderTradeLayer()}emitPnlPillCloseAll(){let e=ml(this.levels,this.draftOrderLabel);e.count!==0&&this.emitter.emit(`pnlPillCloseAll`,{count:e.count,pnl:e.hasPnl?e.pnl:null,labels:e.positions.map(e=>e.label),data:e.positions.map(e=>e.data),isFullscreen:this.isFullscreen})}applyThemeToComponents(){var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g;(e=this._tb)==null||e.setTheme(this.chromeTheme),(t=this.bottomBar)==null||t.setTheme(this.chromeTheme),(n=this.leftBar)==null||n.setTheme(this.chromeTheme),(r=this.tradePopover)==null||r.setTheme(this.chromeTheme),(i=this.tradeActionBar)==null||i.setTheme(this.chromeTheme),(a=this.drawingStylePopover)==null||a.setTheme(this.chromeTheme),(o=this._draftQtyFlyout)==null||o.setTheme(this.chromeTheme),(s=this.indicatorSettingsDialog)==null||s.setTheme(this.chromeTheme),(c=this.chartSettingsDialog)==null||c.setTheme(this.chromeTheme),(l=this.layoutPopover)==null||l.setTheme(this.chromeTheme),(u=this.snapshotPopover)==null||u.setTheme(this.chromeTheme),(d=this.comparePickerModal)==null||d.setTheme(this.chromeTheme),(f=this.isinPickerModal)==null||f.setTheme(this.chromeTheme),(p=this.tradeButton)==null||p.setTheme(this.theme,this.priceAxisWidth),(m=this.compareLegend)==null||m.setTheme(this.theme),(h=this.pnlPill)==null||h.setTheme(this.theme),(g=this.indicatorOverlay)==null||g.setTheme(this.theme);for(let e of this.subPaneOverlays.values())e.setTheme(this.theme)}setTheme(e){return this.themeName=e,this.theme=this.buildTheme(e),this.chromeTheme=this.buildChromeTheme(e),this.applyThemeToComponents(),this.applyScrollToEndBtnStyles(),this.applyResetViewBtnStyles(),this.applyMobileDrawingFlyoutTheme(),this.siSymbolSpan&&(this.siSymbolSpan.style.color=this.overlayTextColor(this.theme.tooltip.text)),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus]),this.applyOverlayLabelStyles(),this.scheduleRender(),this.emitStateChange(),this}getTimeframe(){return this.timeframe}setDuration(e,t){var n,r,i;let a=(n=t==null?this._durationTimeframeMap[e]:t)==null?this.timeframe:n;return this.duration=e,this.timeframe=a,(r=this._tb)==null||r.setTimeframe(a),(i=this.bottomBar)==null||i.setActive(e),this.emitter.emit(`durationChange`,{duration:e,timeframe:a}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`),this}getDuration(){var e;return(e=this.duration)==null?null:e}setTimeframe(e){var t;return this.timeframe=e,(t=this._tb)==null||t.setTimeframe(e),this.emitter.emit(`timeframeChange`,{timeframe:e}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`timeframe`),this}setCrosshair(e){var t,n;if(e===null||!this.crosshairEnabled){if(this.crosshair===null)return;this.crosshair=null,this.scheduleRender();return}let{chartW:r,priceH:i}=this.getChartLayout(),a=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):t,o=this.scaleManager.xToPixel(e.barIndex,this.viewport,r),s=this.scaleManager.yToPixel(e.price,a,i),c=this.dataStore.all,l=(n=c[Math.max(0,Math.min(c.length-1,Math.round(e.barIndex)))])==null?null:n;this.crosshair={x:o,y:s,barIndex:e.barIndex,price:e.price,bar:l},this.scheduleRender()}setViewport(e){e.startIndex===this.viewport.startIndex&&e.endIndex===this.viewport.endIndex||(this.viewport={...this.viewport,startIndex:e.startIndex,endIndex:e.endIndex},this._targetViewport={...this.viewport},this.scheduleRender())}timeToBarIndex(e){let t=this.dataStore.all;if(t.length===0)return null;let n=t[0],r=t[t.length-1];return!n||!r||e<n.time||e>r.time?null:this.timestampToBarIndex(e)}setThemeOverrides(e){return this.themeOverrides=e,this.theme=this.buildTheme(this.themeName),this.chromeTheme=this.buildChromeTheme(this.themeName),this.applyThemeToComponents(),this.scheduleRender(),this}setCanvasColors(e){return this.settingsCanvasColors=e==null?{}:e,this.setTheme(this.themeName),this}setTimezone(e){return this.timezone=e===`local`?Intl.DateTimeFormat().resolvedOptions().timeZone:e,this.scheduleRender(),this}setSeries(e){var t;return this.series=e,(t=this._tb)==null||t.setSeries(e),this.emitter.emit(`seriesChange`,{series:e}),this.scheduleRender(),this.emitStateChange(),this}setTfcActive(e){var t;if(!this.tfcEnabled)return this;if(this.tfcActive=e,(t=this._tb)==null||t.setTfcActive(e),!e){var n,r,i;(n=this.tradeButton)==null||n.hide(),(r=this.tradePopover)==null||r.hide(),(i=this.tradeActionBar)==null||i.hide(),this.draftOrderLabel!==null&&this.removeDraftOrder()}return this.chartSettingsDialog&&(this.chartSettingsDialog.destroy(),this.chartSettingsDialog=null),this.renderTradeLayer(),this.emitter.emit(`tfcToggle`,{enabled:e}),this.emitStateChange(),this}setCrosshairEnabled(e){var t,n,r,i;if(this.crosshairEnabled===e)return this;if(this.crosshairEnabled=e,(t=this.advancedToolbar)==null||t.setCrosshairActive(e),(n=this.topBar)==null||n.setCrosshairActive(e),(r=this.compactToolbar)==null||r.setCrosshairActive(e),(i=this.mobileHeader)==null||i.setCrosshairActive(e),!e){var a;this.crosshair!==null&&(this.crosshair=null,this.emitter.emit(`crosshair`,null)),this._mobileCrosshairActive=!1,(a=this.tradeButton)==null||a.hide(),this.scheduleRender()}return this.emitter.emit(`crosshairToggle`,{enabled:e}),this}clearDuration(){var e,t;this.duration!==void 0&&(this.duration=void 0,(e=this._tb)==null||e.setActiveDuration(void 0),(t=this.bottomBar)==null||t.setActive(void 0),this.emitStateChange())}setVolume(e){return this.showVolume=e,this.scheduleRender(),this.emitStateChange(),this}dismissAllUI(){var e,t,n,r,i,a,o,s;return this.isAnyUIOpen()?((e=this._draftQtyFlyout)==null||e.hide(),(t=this.isinPickerModal)==null||t.hide(),(n=this.comparePickerModal)==null||n.hide(),(r=this.indicatorSettingsDialog)==null||r.hide(),(i=this.chartSettingsDialog)==null||i.hide(),(a=this.tradePopover)==null||a.hide(),(o=this.tradeActionBar)==null||o.hide(),(s=this._tb)==null||s.closeDropdown(),this.hideMobileDrawingFlyout(),!0):!1}isAnyUIOpen(){var e,t,n,r,i,a,o,s,c,l;return((e=this._draftQtyFlyout)==null?void 0:e.isVisible)===!0||((t=this.isinPickerModal)==null?void 0:t.isVisible)===!0||((n=this.comparePickerModal)==null?void 0:n.isVisible)===!0||((r=this.indicatorSettingsDialog)==null?void 0:r.isVisible)===!0||((i=this.chartSettingsDialog)==null?void 0:i.isVisible)===!0||((a=this.tradePopover)==null?void 0:a.isVisible)===!0||((o=this.tradeActionBar)==null?void 0:o.isVisible)===!0||((s=this._tb)==null?void 0:s.hasOpenDropdown)===!0||((c=(l=this._mobileDrawingFlyout)==null?void 0:l.style.display)==null?`none`:c)!==`none`}emitUiState(){this.emitter.emit(`uiStateChange`,{hasOpenUI:this.isAnyUIOpen()})}emitStateChange(){this.isRestoringState||this.emitter.emit(`stateChange`,{symbol:this.symbol,state:this.getState()})}getState(){return{symbol:this.symbol,timeframe:this.timeframe,duration:this.duration,series:this.series,showVolume:this.showVolume,theme:this.themeName,indicators:this.activeIndicators.map(e=>({shortName:e.shortName,params:{...e.currentParams},visible:e.visible,instanceId:e.instanceId})),drawings:this.drawingManager.getDrawingsSnapshot().map(e=>({...e,points:e.points.map(e=>{var t;return{...e,timestamp:(t=e.timestamp)==null?this.barIndexToTimestamp(e.barIndex):t}})})),positionRenderStyle:this.baseRenderStyle(),tradeDisplayFilter:this.tradeDisplayFilter,canvasColors:Object.keys(this.settingsCanvasColors).length>0?{...this.settingsCanvasColors}:void 0,tfcEnabled:this.tfcActive,viewport:this.getViewportTimestamps(),priceScale:this.priceScaleFactor!==1||this.pricePanOffset!==0?{factor:this.priceScaleFactor,panOffset:this.pricePanOffset}:void 0,compares:this.compareManager&&this.compareManager.isActive()?this.compareManager.list().map(e=>e.symbol):void 0}}getViewportTimestamps(){if(this.dataStore.all.length===0)return;let e=this.barIndexToTimestamp(this.viewport.startIndex),t=this.barIndexToTimestamp(this.viewport.endIndex);if(!(e==null||t==null))return{startTime:e,endTime:t}}applyViewportFromTimestamps(e,t){let n=this.timestampToBarIndex(e),r=this.timestampToBarIndex(t);this.viewport={...this.viewport,startIndex:n,endIndex:r},this._targetViewport={...this.viewport}}setState(e){this.isRestoringState=!0;try{if(this.setSeries(e.series),this.setVolume(e.showVolume),e.theme!=null&&this.setTheme(e.theme),e.timeframe!=null){var t,n,r;this.timeframe=e.timeframe,this.duration=e.duration,(t=this._tb)==null||t.setTimeframe(e.timeframe),(n=this._tb)==null||n.setActiveDuration(e.duration),(r=this.bottomBar)==null||r.setActive(e.duration),this.updateCountdownState()}let s=this.activeIndicators.map(e=>e.instanceId);for(let e of s)this.removeIndicator(e);for(let t of e.indicators){var i,a;let e=Sd.find(e=>e.shortName===t.shortName);if(!e)continue;let n={...t.params};delete n.timeframe,this.addIndicator(e.factory(n),t.params);let r=this.activeIndicators[this.activeIndicators.length-1];if(!r)continue;r.currentParams={...t.params};let o=(i=this.subPaneOverlays.get(r.instanceId))==null?this.indicatorOverlay:i;t.visible===!1&&(r.visible=!1,o==null||o.updatePillVisibility(r.instanceId,!1));let s=(a=t.params.timeframe)==null?`Chart`:a;o==null||o.updatePillTimeframe(r.instanceId,s)}let c=e.drawings.map(e=>({...e,points:e.points.map(e=>e.timestamp==null||this.dataStore.all.length===0?e:{...e,barIndex:this.timestampToBarIndex(e.timestamp)})}));if(this.drawingManager.loadDrawings(c),e.positionRenderStyle&&(this.positionRenderStyleOverride=e.positionRenderStyle,this.positionRenderStyle=e.positionRenderStyle),e.tradeDisplayFilter&&(this.tradeDisplayFilter=e.tradeDisplayFilter),e.canvasColors&&(this.settingsCanvasColors=e.canvasColors),e.tfcEnabled!==void 0&&this.tfcEnabled){var o;this.tfcActive=e.tfcEnabled,(o=this._tb)==null||o.setTfcActive(e.tfcEnabled)}if(e.priceScale&&(this.priceScaleFactor=e.priceScale.factor,this.pricePanOffset=e.priceScale.panOffset,this._displayedPriceRange=null,this._lockedAutoFitBase=null),e.viewport&&(this.dataStore.all.length>0?this.applyViewportFromTimestamps(e.viewport.startTime,e.viewport.endTime):this._pendingViewportRestore={viewport:e.viewport,priceScale:e.priceScale}),e.compares&&e.compares.length>0&&this.compareManager){this.compareManager.clear();for(let t of e.compares)this.compareManager.add(t);this.refreshCompareLegend()}}finally{this.isRestoringState=!1}return this.emitStateChange(),this.scheduleRender(),this}barIndexToTimestamp(e){let t=this.dataStore.all,n=t.length;if(n===0)return;let r=t[0];if(!r)return;if(n===1)return r.time;let i=Math.floor(e),a=e-i;if(i<0){let n=t[1];return n?r.time+e*(n.time-r.time):r.time}if(i>=n-1){let i=t[n-1],a=t[n-2];return!i||!a?r.time:i.time+(e-(n-1))*(i.time-a.time)}let o=t[i],s=t[i+1];return!o||!s?r.time:o.time+a*(s.time-o.time)}timestampToBarIndex(e){let t=this.dataStore.all,n=t.length;if(n===0)return 0;let r=t[0];if(!r||n===1)return 0;if(e<=r.time){let n=t[1];if(!n)return 0;let i=n.time-r.time;return i>0?(e-r.time)/i:0}let i=n-1,a=t[i],o=t[i-1];if(!a||!o)return 0;if(e>=a.time){let t=a.time-o.time;return i+(t>0?(e-a.time)/t:0)}let s=0,c=i;for(;s<c;){var l,u;let n=s+c+1>>1;((l=(u=t[n])==null?void 0:u.time)==null?0:l)<=e?s=n:c=n-1}let d=t[s],f=t[s+1];if(!d||!f)return s;let p=f.time-d.time;return s+(p>0?(e-d.time)/p:0)}reanchorDrawingsByTimestamp(){if(this.dataStore.all.length!==0)for(let e of this.drawingManager.getDrawings())for(let t of e.points){if(t.timestamp==null){let e=this.barIndexToTimestamp(t.barIndex);e!=null&&(t.timestamp=e);continue}t.barIndex=this.timestampToBarIndex(t.timestamp)}}backfillDrawingTimestamps(){if(this.dataStore.all.length!==0)for(let e of this.drawingManager.getDrawings())for(let t of e.points){if(t.timestamp!=null)continue;let e=this.barIndexToTimestamp(t.barIndex);e!=null&&(t.timestamp=e)}}resetChartSettings(){return this.setState({symbol:this.symbol,series:`candlestick`,theme:`dark`,timeframe:`1D`,duration:void 0,showVolume:!0,indicators:[],drawings:[]}),this.positionRenderStyleOverride=null,localStorage.removeItem(this.RENDER_STYLE_LS_KEY),this.recomputeRenderStyle(),this.settingsCanvasColors={},this.setTheme(`dark`),this.emitStateChange(),this}setInstrument(e){return this.instrumentSpec=e,this.resolvedInstrument=null,this.scheduleRender(),this}getInstrument(){let e=this.dataStore.getPricePrecision();return(!this.resolvedInstrument||this.resolvedInstrumentPrecision!==e)&&(this.resolvedInstrument=M(this.instrumentSpec,e),this.resolvedInstrumentPrecision=e),this.resolvedInstrument}setAccount(e){return this.accountSpec=e,this.scheduleRender(),this}getAccount(){return this.accountSpec}setSymbol(e){var t,n;return this.symbol=e,(t=this.tradePopover)==null||t.setSymbol(e),this.siSymbolSpan&&(this.siSymbolSpan.textContent=e,this.siSymbolSpan.style.display=e?`inline`:`none`),(n=this.isinPickerModal)==null||n.setCurrentSymbol(e),this.tickActivityTimer!==null&&(clearTimeout(this.tickActivityTimer),this.tickActivityTimer=null),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus]),this.liveBidAsk=null,this.liveLtp=null,this}setIsins(e){var t;return this.isins=e,(t=this.isinPickerModal)==null||t.setIsins(e),this}renderSymbolInfoOHLC(e){if(!this.siOHLCSpan)return;if(!e){this.siOHLCSpan.innerHTML=``,this.siOHLC2Span&&(this.siOHLC2Span.innerHTML=``);return}let t=e.close>=e.open?this.theme.candle.up:this.theme.candle.down,n=this.overlayTextColor(this.theme.axisText),r=e=>e.toFixed(this.dataStore.getPricePrecision()),i=e=>e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(1)+`K`:e.toFixed(0),a=this.labels.ohlc,o=(e,t)=>{e.innerHTML=``;for(let[r,i,a]of t){let t=document.createElement(`span`);t.style.marginRight=`8px`;let o=document.createElement(`span`);o.textContent=r+`\xA0`,o.style.color=n,o.style.opacity=`0.6`;let s=document.createElement(`span`);s.textContent=i,s.style.color=a,t.append(o,s),e.appendChild(t)}};o(this.siOHLCSpan,[[a.open,r(e.open),n],[a.high,r(e.high),n]]),this.siOHLC2Span&&o(this.siOHLC2Span,[[a.low,r(e.low),n],[a.close,r(e.close),t],...e.volume!=null&&e.volume!==0?[[a.volume,i(e.volume),n]]:[]])}setMinLots(e){var t;return console.warn(`[acttrader-charts] setMinLots() is deprecated. Pass minLots in the initial ChartConfig instead.`),this._minLots=e,(t=this.tradePopover)==null||t.setLots(e),this}setDraftQty(e){return this.draftOrderLabel&&this.setLevelQty(this.draftOrderLabel,e),this}updateLevelQty(e,t){return!e||e===this.draftOrderLabel||!Number.isFinite(t)||t<=0||this.setLevelQty(e,t),this}setLevelQty(e,t){var n,r;let i=this.levels.findIndex(t=>t.label===e);if(i===-1)return;let a=this.levels[i];if(a.lots===t)return;this.originalQtyByLabel.has(e)||this.originalQtyByLabel.set(e,a.lots);let o=(n=(r=this.originalQtyByLabel.get(e))==null?a.lots:r)==null?t:n;this.levels=[...this.levels.slice(0,i),{...a,lots:t},...this.levels.slice(i+1)],e!==this.draftOrderLabel&&this.pendingQtyChanges.set(e,t),this.emitter.emit(`tradeLevelQtyChange`,{label:e,type:e===this.draftOrderLabel?`draft`:a.type,newLots:t,previousLots:o,isFullscreen:this.isFullscreen}),this.renderTradeLayer()}openDraftQtyFlyout(e){var t;this._draftQtyFlyout||(this._draftQtyFlyout=new ru(this.chromeTheme,e=>{this._activeQtyPillLabel&&this.setLevelQty(this._activeQtyPillLabel,e)},()=>this.emitUiState()),this.getFloatingRoot().appendChild(this._draftQtyFlyout.el)),this._activeQtyPillLabel=e.label;let n=this.levels.find(t=>t.label===e.label),r=(t=n==null?void 0:n.lots)==null?this._qtyFieldMin:t,i=this.canvasWrap.getBoundingClientRect(),a=i.left+e.pillX,o=i.top+e.pillY+e.pillH;this._draftQtyFlyout.show(a,o,r,this._qtyFieldMin,this._qtyFieldMax)}setDraftOrderLabels(e){return console.warn(`[acttrader-charts] setDraftOrderLabels() is deprecated and is a no-op. DraftOrderQtyInput has been removed.`),this}setDrawingTool(e){var t;return this.drawingManager.setActiveTool(e),(t=this.leftBar)==null||t.setActiveTool(e),this.drawCanvas.style.cursor=e?`crosshair`:`default`,this.scheduleRender(),this}undoDrawing(){return this.drawingManager.undo(),this.scheduleRender(),this}redoDrawing(){return this.drawingManager.redo(),this.scheduleRender(),this}hideAllDrawings(){return this.drawingManager.hideAll(),this.scheduleRender(),this}showAllDrawings(){return this.drawingManager.showAll(),this.scheduleRender(),this}lockAllDrawings(){return this.drawingManager.lockAll(),this.scheduleRender(),this}unlockAllDrawings(){return this.drawingManager.unlockAll(),this.scheduleRender(),this}deleteSelectedDrawing(){return this.drawingManager.deleteSelected(),this.hideMobileDrawingFlyout(),this.scheduleRender(),this}clearAllDrawings(){return this.drawingManager.clearAll(),this.scheduleRender(),this}getActiveTool(){return this.drawingManager.getActiveTool()}getDrawings(){return this.drawingManager.getDrawings()}getDrawingById(e){return this.drawingManager.getDrawingById(e)}getSelectedDrawing(){return this.drawingManager.getSelectedDrawing()}updateDrawingStyle(e,t){return this.drawingManager.updateDrawingStyle(e,t),this.scheduleRender(),this}connectStream(e){return this.streamAdapter=e,e.onTick(e=>this.onTick(e)),e.onStatus(e=>{this.streamStatus=e,this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[e],this.siStreamDot.title=`Stream ${e}`),this.emitter.emit(`streamStatus`,{status:e})}),e.connect(),this}disconnectStream(){var e;return(e=this.streamAdapter)==null||e.disconnect(),this.streamAdapter=null,this}setTickClosePriceSource(e){return this._applyPriceSource(e,!1),this}_applyPriceSource(e,t){var n,r;let i=e!==this.tickClosePriceSource;if(this.tickClosePriceSource=e,(n=this.topBar)==null||n.setPriceSource(e),(r=this.advancedToolbar)==null||r.setPriceSource(e),this.scheduleRender(),i&&this._reloadOnPriceSourceChange&&this.dataLoader&&!this._isDestroyed){let e=this.getViewportTimestamps();if(e){var a;this._pendingViewportRestore={...(a=this._pendingViewportRestore)==null?{}:a,viewport:e}}this.triggerLoad(`priceSource`)}t&&this.emitter.emit(`priceSourceChange`,{source:e})}setShowLtpPrice(e){return this.showLtpPrice=e,this.scheduleRender(),this}setShowAskLine(e){return this.showAskLine=e,this.scheduleRender(),this}setShowBidLine(e){return this.showBidLine=e,this.scheduleRender(),this}pushTick(e){let t=e.T==null?Date.now():typeof e.T==`string`?new Date(e.T).getTime():e.T;return this.onTick({time:t,bid:e.B,ask:e.A,volume:e.LTPV!=null&&e.LTPV>0?e.LTPV:0,ltp:e.LTP!=null&&e.LTP>0?e.LTP:void 0}),this}setLevels(e,t,n,r,i,a){let o=e.map(e=>{if(r===`position`){let r={label:String(e[t]),price:Number(e[n]),type:`position`,data:e};return e.text!==void 0&&(r.text=String(e.text)),i!==void 0&&e[i]!==void 0&&(r.pnl=Number(e[i])),a!==void 0&&e[a]!==void 0&&(r.pnlText=String(e[a])),e.side!==void 0&&(r.side=e.side),e.stopLossPrice!==void 0&&(r.stopLossPrice=Number(e.stopLossPrice)),e.stopLossTrailing&&(r.stopLossTrailing=!0),e.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.contractSize!==void 0&&(r.contractSize=Number(e.contractSize)),e.valuePerPoint!==void 0&&(r.valuePerPoint=Number(e.valuePerPoint)),e.currencySymbol!==void 0&&(r.currencySymbol=String(e.currencySymbol)),e.entryPriceEditable&&(r.entryPriceEditable=!0),e.orderType!==void 0&&(r.orderType=e.orderType),e.lots!==void 0&&(r.lots=Number(e.lots)),e.timestamp!==void 0&&(r.timestamp=Number(e.timestamp)),e.timeDraggable&&(r.timeDraggable=!0),r}if(r===`pending`){var o,s;let r={label:String(e[t]),price:Number(e[n]),type:`pending`,side:(o=e.side)==null?`buy`:o,orderType:(s=e.orderType)==null?`limit`:s,data:e};return e.text!==void 0&&(r.text=String(e.text)),e.lots!==void 0&&(r.lots=Number(e.lots)),e.stopLossPrice!==void 0&&(r.stopLossPrice=Number(e.stopLossPrice)),e.stopLossTrailing&&(r.stopLossTrailing=!0),e.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.ToClose!==void 0&&(r.ToClose=String(e.ToClose)),e.timestamp!==void 0&&(r.timestamp=Number(e.timestamp)),e.timeDraggable&&(r.timeDraggable=!0),r}return{label:String(e[t]),price:Number(e[n]),type:`trade`,text:e.text===void 0?void 0:String(e.text),data:e}});if(this.hideLevelConfirmCancel&&this.pendingLevelDrags.size>0)for(let e of o){let t=this.pendingLevelDrags.get(e.label);if(!(t!=null&&t.length))continue;let n=e;t.every(t=>t.isRemoval?t.field===`stopLoss`?n.stopLossPrice===void 0:n.takeProfitPrice===void 0:t.field===`main`?e.price===t.newPrice:t.field===`stopLoss`?n.stopLossPrice===t.newPrice:n.takeProfitPrice===t.newPrice)&&(this.pendingLevelDrags.delete(e.label),this.selectedTradeLabel===e.label&&(this.selectedTradeLabel=null))}if(this.pendingQtyChanges.size>0)for(let e=0;e<o.length;e++){let t=o[e],n=this.pendingQtyChanges.get(t.label);if(n===void 0||t.type!==`pending`&&t.type!==`position`)continue;let r=t;this.originalQtyByLabel.set(t.label,r.lots),o[e]={...r,lots:n}}let s=this.draftOrderLabel===null?void 0:this.levels.find(e=>e.type===r&&e.label===this.draftOrderLabel&&!o.some(t=>t.label===e.label)),c=new Map(this.levels.map(e=>[e.label,e]));if(this.levels=[...this.levels.filter(e=>e.type!==r),...o,...s?[s]:[]],this._revealNewBrackets){let e=[];for(let t of o){let n=c.get(t.label);if(!n)continue;let r=t;r.stopLossPrice!==void 0&&n.stopLossPrice===void 0&&e.push(r.stopLossPrice),r.takeProfitPrice!==void 0&&n.takeProfitPrice===void 0&&e.push(r.takeProfitPrice)}e.length>0&&this._revealPrices(e)}if(this._timeAnchorOverride.size>0)for(let e of[...this._timeAnchorOverride.keys()]){let t=this.levels.find(t=>t.label===e);if(!t){this._timeAnchorOverride.delete(e);continue}let n=t.timestamp,r=this._timeAnchorOverride.get(e);this._honorsLevelTimestamp(t)&&n!==void 0&&r!==void 0&&Math.round(this.timestampToBarIndex(n))===Math.round(this.timestampToBarIndex(r))&&this._timeAnchorOverride.delete(e)}return this.selectedTradeLabel!==null&&!this.levels.some(e=>e.label===this.selectedTradeLabel)&&(this.selectedTradeLabel=null),this.recomputeRenderStyle(),this.renderTradeLayer(),this.refreshPnlPill(),this}removeLevelByLabel(e){return this.levels=this.levels.filter(t=>t.label!==e),this.renderTradeLayer(),this.refreshPnlPill(),this}showDraftOrder(e,t,n){if(this.draftOrderLabel){let e=this.levels.find(e=>e.label===this.draftOrderLabel);if((e==null?void 0:e.side)===t&&(e==null?void 0:e.orderType)===n)return this}return this.clearDraftOrder(),this.createDraftOrder(t,e,n),this}showMarketDraft(e,t){this.clearDraftOrder();let n=`__draft_${Date.now()}`,r={type:`pending`,label:n,side:t,price:e,orderType:`market`,data:{_isDraft:!0}};return this.levels=[...this.levels,r],this.draftOrderLabel=n,this.renderTradeLayer(),this.emitter.emit(`draftInitiated`,{side:t,price:e,orderType:`market`,isFullscreen:this.isFullscreen}),this}clearDraftOrder(){return this.removeDraftOrder(),this}updateLevelBracket(e,t,n){var r;let i=t===`sl`?`stopLoss`:`takeProfit`,a=this.levels.find(t=>t.label===e);if(!a)return this;let o=t===`sl`?a.stopLossPrice:a.takeProfitPrice,s=(r=this.pendingLevelDrags.get(e))==null?[]:r,c=s.find(e=>e.field===i),l=s.filter(e=>e.field!==i);if(this.levels=this.levels.map(r=>{if(r.label!==e)return r;let i=r;return t===`sl`?{...i,stopLossPrice:n==null?void 0:n}:{...i,takeProfitPrice:n==null?void 0:n}}),n===null){if(o!==void 0){var u;let e=(u=c==null?void 0:c.oldPrice)==null?o:u;l.push({field:i,newPrice:o,oldPrice:e,isRemoval:!0})}l.length===0?this.pendingLevelDrags.delete(e):this.pendingLevelDrags.set(e,l)}else{var d;let t=(d=c==null?void 0:c.isNew)==null?o===void 0:d,r=c&&!c.isRemoval?c.oldPrice:o==null?n:o;l.push({field:i,newPrice:n,oldPrice:r,isNew:t}),this.pendingLevelDrags.set(e,l),this._revealNewBrackets&&t&&this._revealPrices([n])}return this.renderTradeLayer(),this}addLevelBracket(e,t){var n,r,i,a,o;let s=this.levels.find(t=>t.label===e);if(!s)return this;let c=t===`sl`?`stopLoss`:`takeProfit`,l=t===`sl`?s.stopLossPrice!==void 0:s.takeProfitPrice!==void 0,u=(n=(r=this.pendingLevelDrags.get(e))==null?void 0:r.some(e=>e.field===c&&!e.isRemoval))==null?!1:n;if(l||u)return this;let{priceH:d}=this.getChartLayout(),f=(i=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):i,p=this.scaleManager.yToPixel(s.price,f,d),m=(a=s.side)==null?`buy`:a,h=p+(m===`buy`&&t===`sl`||m===`sell`&&t===`tp`?30:-30),g=this.scaleManager.pixelToPrice(h,f,d);this.updateLevelBracket(e,t,g);let _=((o=this.pendingLevelDrags.get(e))==null?[]:o).filter(e=>e.field!==c);return _.push({field:c,newPrice:g,oldPrice:g,isNew:!0}),this.pendingLevelDrags.set(e,_),this.emitter.emit(`tradeLevelBracketActivated`,{label:e,bracketType:t,price:g,isFullscreen:this.isFullscreen}),this.emitter.emit(`tradeLevelDrag`,{label:e,newPrice:g,data:s.data,bracketType:t===`sl`?`stopLoss`:`takeProfit`,isFullscreen:this.isFullscreen}),this}addBracket(e,t){var n,r;if(t)return this.addLevelBracket(t,e);if(!this.draftOrderLabel)return this;let i=this.draftOrderLabel,a=this.levels.find(e=>e.label===i);if(!a||(e===`sl`?a.stopLossPrice!==void 0:a.takeProfitPrice!==void 0))return this;let{priceH:o}=this.getChartLayout(),s=(n=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):n,c=this.scaleManager.yToPixel(a.price,s,o),l=(r=a.side)==null?`buy`:r,u=c+(l===`buy`&&e===`sl`||l===`sell`&&e===`tp`?30:-30),d=this.scaleManager.pixelToPrice(u,s,o);return this.updateDraftOrderBracket(e,d),this.emitter.emit(`tradeLevelBracketActivated`,{label:``,bracketType:e,price:d,isFullscreen:this.isFullscreen}),this.emitter.emit(`tradeLevelDrag`,{label:i,newPrice:d,data:a.data,bracketType:e===`sl`?`stopLoss`:`takeProfit`,isFullscreen:this.isFullscreen}),this}removeBracket(e,t){if(t){var n,r;let i=e===`sl`?`stopLoss`:`takeProfit`,a=this.levels.find(e=>e.label===t);if(!a)return this;let o=(n=this.pendingLevelDrags.get(t))==null?void 0:n.find(e=>e.field===i),s=o&&!o.isRemoval?o.newPrice:e===`sl`?a.stopLossPrice:a.takeProfitPrice;if(s===void 0)return this;let c=((r=this.pendingLevelDrags.get(t))==null?[]:r).filter(e=>e.field!==i);return c.push({field:i,newPrice:s,oldPrice:s,isRemoval:!0}),this.pendingLevelDrags.set(t,c),this.renderTradeLayer(),this}return e===`sl`?this.draftBracketPnl={...this.draftBracketPnl,sl:void 0}:this.draftBracketPnl={...this.draftBracketPnl,tp:void 0},this.updateDraftOrderBracket(e,null)}updateLevelMainPrice(e,t){var n;let r=this.levels.find(t=>t.label===e);if(!r)return this;let i=(n=this.pendingLevelDrags.get(e))==null?[]:n,a=i.find(e=>e.field===`main`),o=a?a.oldPrice:r.price,s=i.filter(e=>e.field!==`main`);return s.push({field:`main`,newPrice:t,oldPrice:o}),this.pendingLevelDrags.set(e,s),r.price=t,this.renderTradeLayer(),this}setBracketLabelMode(e,t){return this._bracketLabel={mode:e,currencySymbol:t==null?this._bracketLabel.currencySymbol:t},this.scheduleRender(),this}setDraftBracketPnl(e,t){return e===`sl`?this.draftBracketPnl={...this.draftBracketPnl,sl:t==null?void 0:t}:this.draftBracketPnl={...this.draftBracketPnl,tp:t==null?void 0:t},this.renderTradeLayer(),this}updateDraftOrderBracket(e,t){return this.draftOrderLabel?(this.levels=this.levels.map(n=>{if(n.label!==this.draftOrderLabel)return n;let r=n;return e===`sl`?{...r,stopLossPrice:t==null?void 0:t}:{...r,takeProfitPrice:t==null?void 0:t}}),this._revealNewBrackets&&t!==null&&this._revealPrices([t]),this.scheduleRender(),this):this}updateDraftOrderPrice(e){if(!this.draftOrderLabel)return!1;this.levels=this.levels.map(t=>t.label===this.draftOrderLabel?{...t,price:e}:t);let t=this.pendingLevelDrags.get(this.draftOrderLabel);if(t){let n=t.find(e=>e.field===`main`);n&&(n.newPrice=e)}return this.renderTradeLayer(),!0}cancelLevelEdit(e){var t;if(this.undoIsNewBracketMutations(e),this.pendingLevelDrags.delete(e),this.pendingQtyChanges.has(e)){this.pendingQtyChanges.delete(e);let t=this.levels.findIndex(t=>t.label===e);if(t!==-1&&this.originalQtyByLabel.has(e)){let n=this.originalQtyByLabel.get(e),r=this.levels[t];this.levels=[...this.levels.slice(0,t),{...r,lots:n},...this.levels.slice(t+1)]}this.originalQtyByLabel.delete(e)}return e===((t=this.draftOrderLabel)==null?this.selectedTradeLabel:t)&&(this.draftBracketPnl={}),this.selectedTradeLabel===e&&(this.selectedTradeLabel=null),this.renderTradeLayer(),this}cancelCurrentEdit(){return this.draftOrderLabel?this.clearDraftOrder():this.selectedTradeLabel&&this.revertPendingChanges(this.selectedTradeLabel),this}selectLevel(e){if(!this.draftOrderLabel&&e!==this.selectedTradeLabel&&(this.draftBracketPnl={}),this.selectedTradeLabel=e,e!==null){this.crosshair=null;let t=this.lastClusters.find(t=>t.members.some(t=>t.level.label===e));t&&this.expandedClusters.add(t.id)}return this.renderTradeLayer(),this}setLevelClusteringEnabled(e){return this.levelClusteringEnabled=e,this.expandedClusters.clear(),this.renderTradeLayer(),this}setClusterThresholdDistance(e){return this.clusterThresholdDistance=e,this.expandedClusters.clear(),this.renderTradeLayer(),this}setTradeLevelButtonScale(e){return this.tradeLevelButtonScale=Math.min(Math.max(e,1),3),this.renderTradeLayer(),this}toDataUrl(){return this.captureToDataUrl()}drawOnto(e,t,n,r,i){e.fillStyle=this.theme.background,e.fillRect(t,n,r,i);let a=[this.canvas,this.drawCanvas];for(let o of a)o&&o.width&&o.height&&e.drawImage(o,t,n,r,i)}captureToDataUrl(){let e=this.canvas;if(!e.width||!e.height)return null;let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)return null;n.fillStyle=this.theme.background,n.fillRect(0,0,t.width,t.height);let r=[this.canvas,this.drawCanvas];for(let e of r)e&&e.width&&e.height&&n.drawImage(e,0,0);return t.toDataURL(`image/png`)}openLayoutPopover(){var e,t,n;if(!this.layoutPopover)return;let r=(e=(t=this.advancedToolbar)==null?void 0:t.getLayoutBtnEl())==null?(n=this.topBar)==null?void 0:n.getLayoutBtnEl():e;if(r)if(this.layoutPopover.isVisible)this.layoutPopover.hide();else{let e=this.getFloatingRoot();this.layoutPopover.el.parentElement!==e&&e.appendChild(this.layoutPopover.el),this.layoutPopover.show(r)}}openSnapshotPopover(){var e,t,n;if(!this.snapshotPopover)return;let r=(e=(t=this.advancedToolbar)==null?void 0:t.getSnapshotBtnEl())==null?(n=this.topBar)==null?void 0:n.getSnapshotBtnEl():e;if(r)if(this.snapshotPopover.isVisible)this.snapshotPopover.hide();else{let e=this.getFloatingRoot();this.snapshotPopover.el.parentElement!==e&&e.appendChild(this.snapshotPopover.el),this.snapshotPopover.show(r)}}handleLayoutPresetSelect(e){var t,n,r,i;this.currentPresetId=e;let a=fi(e);(t=this._tb)==null||(n=t.setLayoutPresetIcon)==null||n.call(t,a.icon,!0),(r=this.layoutPopover)==null||r.setPreset(e),(i=this.layoutPopover)==null||i.hide(),this.emitter.emit(`layoutChange`,{presetId:e,preset:a,sync:this.currentSync})}handleSyncToggle(e){var t;this.currentSync={...this.currentSync,[e]:!this.currentSync[e]},(t=this.layoutPopover)==null||t.setSync(this.currentSync),this.emitter.emit(`layoutChange`,{presetId:this.currentPresetId,preset:fi(this.currentPresetId),sync:this.currentSync})}async handleSnapshot(e){var t;let n=this.captureToDataUrl();if(n){if(this.emitter.emit(`snapshot`,{dataUrl:n,action:e}),e===`download`){let e=document.createElement(`a`);e.download=`${this.snapshotFileName()}.png`,e.href=n,e.click()}else try{var r;let e=await(await fetch(n)).blob(),t=globalThis.ClipboardItem;t&&(r=navigator.clipboard)!=null&&r.write&&await navigator.clipboard.write([new t({"image/png":e})])}catch(e){}(t=this.snapshotPopover)==null||t.hide()}}snapshotFileName(){let e=this.symbol.trim().replace(/[\\/:*?"<>|]+/g,`_`).replace(/\s+/g,`_`);return e.length>0?e:`chart-${Date.now()}`}setLayoutPreset(e){this.handleLayoutPresetSelect(e)}getLayoutPreset(){return this.currentPresetId}getLayoutSync(){return{...this.currentSync}}setLayoutSync(e){var t;let n={...this.currentSync,...e};Object.keys(n).some(e=>n[e]!==this.currentSync[e])&&(this.currentSync=n,(t=this.layoutPopover)==null||t.setSync(this.currentSync))}destroy(){var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y;this._isDestroyed=!0,this.panHandler.destroy(),this.zoomHandler.destroy(),this.resizeObserver.disconnect(),this.disposeVvListener(),(e=this.indicatorOverlay)==null||e.destroy();for(let e of this.subPaneOverlays.values())e.destroy();this.subPaneOverlays.clear(),(t=this.indicatorSettingsDialog)==null||t.destroy(),(n=this.chartSettingsDialog)==null||n.destroy(),(r=this.isinPickerModal)==null||r.destroy(),(i=this.comparePickerModal)==null||i.destroy(),(a=this.compareLegend)==null||a.destroy(),(o=this.pnlPill)==null||o.destroy(),(s=this.tradePopover)==null||s.destroy(),(c=this.tradeActionBar)==null||c.destroy(),(l=this.drawingStylePopover)==null||l.destroy(),(u=this._draftQtyFlyout)==null||u.destroy(),(d=this.advancedToolbar)==null||d.destroy(),(f=this.mobileHeader)==null||f.destroy(),(p=this.leftBar)==null||p.destroy(),this.drawCanvas.removeEventListener(`mouseenter`,this.onPointerEnter),this.drawCanvas.removeEventListener(`mousemove`,this.onMouseMove),this.drawCanvas.removeEventListener(`mouseleave`,this.onMouseLeave),this.drawCanvas.removeEventListener(`mousedown`,this.onCanvasClick),this.drawCanvas.removeEventListener(`dblclick`,this.onDoubleClick),window.removeEventListener(`mouseup`,this.onMouseUp),this.drawCanvas.removeEventListener(`touchstart`,this.onDrawingTouchStart),this.drawCanvas.removeEventListener(`touchmove`,this.onDrawingTouchMove),this.drawCanvas.removeEventListener(`touchend`,this.onDrawingTouchEnd),this.drawCanvas.removeEventListener(`touchcancel`,this.onDrawingTouchCancel),document.removeEventListener(`keydown`,this.onKeyDown),(m=this.streamAdapter)==null||m.disconnect(),this.rafId!==null&&cancelAnimationFrame(this.rafId),this.scrollAnimId!==null&&cancelAnimationFrame(this.scrollAnimId),this.stopCountdownLoop(),(h=this.resetViewBtn)==null||h.remove(),(g=this.textInputEl)==null||g.remove(),(_=this._mobileDrawingFlyout)==null||_.remove(),(v=this.layoutPopover)==null||v.destroy(),(y=this.snapshotPopover)==null||y.destroy(),this.wrapper.remove()}createMobileDrawingFlyout(){let e=document.createElement(`div`);Object.assign(e.style,{position:`fixed`,display:`none`,alignItems:`center`,gap:`2px`,zIndex:`10000`,background:this.theme.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`8px`,padding:`4px`,boxShadow:`0 4px 16px rgba(0,0,0,0.45)`,pointerEvents:`auto`});let t=(e,t,n)=>{let r=document.createElement(`button`);return r.title=t,r.innerHTML=e,Object.assign(r.style,{display:`flex`,alignItems:`center`,justifyContent:`center`,width:`34px`,height:`34px`,padding:`0`,border:`none`,borderRadius:`6px`,background:`transparent`,color:n?this.theme.candle.down:this.theme.axisText,cursor:`pointer`,flexShrink:`0`}),r.addEventListener(`pointerenter`,()=>{r.style.background=n?`${this.theme.candle.down}22`:this.theme.axisBorder}),r.addEventListener(`pointerleave`,()=>{r.style.background=`transparent`}),r},n=t(pn,`Delete drawing`,!0);n.addEventListener(`pointerdown`,e=>{e.stopPropagation(),this.deleteSelectedDrawing(),this.hideMobileDrawingFlyout()});let r=t(un,`Deselect`,!1);return r.addEventListener(`pointerdown`,e=>{e.stopPropagation(),this.drawingManager.selectDrawing(null),this.hideMobileDrawingFlyout(),this.scheduleRender()}),e.appendChild(n),e.appendChild(r),this.wrapper.appendChild(e),e}showMobileDrawingFlyout(e,t){if(!Pd())return;this._mobileDrawingFlyout||(this._mobileDrawingFlyout=this.createMobileDrawingFlyout());let n=this._mobileDrawingFlyout,r=n.style.display!==`none`&&n.style.display!==``;n.style.display=`flex`,requestAnimationFrame(()=>{let r=n.offsetWidth||78,i=n.offsetHeight||42,a=window.innerWidth,o=window.innerHeight,s=Math.min(Math.max(e-r/2,8),a-r-8),c=Math.min(Math.max(t-i-12,8),o-i-8);n.style.left=`${s}px`,n.style.top=`${c}px`}),r||this.emitUiState()}hideMobileDrawingFlyout(){if(this._mobileDrawingFlyout){let e=this._mobileDrawingFlyout.style.display!==`none`&&this._mobileDrawingFlyout.style.display!==``;this._mobileDrawingFlyout.style.display=`none`,e&&this.emitUiState()}}applyMobileDrawingFlyoutTheme(){if(!this._mobileDrawingFlyout)return;let e=this._mobileDrawingFlyout;e.style.background=this.theme.background,e.style.border=`1px solid ${this.theme.axisBorder}`;let[t,n]=Array.from(e.querySelectorAll(`button`));t&&(t.style.color=this.theme.candle.down),n&&(n.style.color=this.theme.axisText)}scheduleRender(){this._isDestroyed||this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.render(),this.renderTradeLayer()}))}startCountdownLoop(){if(this.countdownRafId!==null)return;let e=0,t=n=>{if(!this.countdownActive){this.countdownRafId=null;return}n-e>=1e3&&(e=n,this.scheduleRender()),this.countdownRafId=requestAnimationFrame(t)};this.countdownRafId=requestAnimationFrame(t)}stopCountdownLoop(){this.countdownActive=!1,this.countdownRafId!==null&&(cancelAnimationFrame(this.countdownRafId),this.countdownRafId=null)}updateCountdownState(){var e;let t=this.candleCountdownTimeframes===`all`?!0:((e=this.candleCountdownTimeframes)==null?[`1m`,`3m`,`4m`,`5m`,`10m`,`15m`,`30m`,`1h`,`2h`,`4h`,`8h`]:e).includes(this.timeframe),n=(this.showCandleCountdown||this.showPriceAxisCountdown)&&t&&this.dataStore.length>0;n&&!this.countdownActive?(this.countdownActive=!0,this.startCountdownLoop()):!n&&this.countdownActive&&this.stopCountdownLoop()}openChartSettings(){this.chartSettingsDialog||(this.chartSettingsDialog=new pl(this.chromeTheme,{tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.baseRenderStyle(),theme:this.themeName,showTradeLevelsAlways:this.showTradeLevelsAlways,showPriceAxisCountdown:this.showPriceAxisCountdown},this.labels.dialogs,!!this._onOrderSubmit&&this.tfcActive,this.enableThemeToggle,()=>this.emitUiState()),this.getFloatingRoot().appendChild(this.chartSettingsDialog.el)),this.chartSettingsDialog.show({tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.baseRenderStyle(),theme:this.themeName,showTradeLevelsAlways:this.showTradeLevelsAlways,showPriceAxisCountdown:this.showPriceAxisCountdown,canvasColors:{...this.settingsCanvasColors}},e=>{if(this.tradeDisplayFilter=e.tradeDisplayFilter,this.positionRenderStyleOverride=e.positionRenderStyle,localStorage.setItem(this.RENDER_STYLE_LS_KEY,e.positionRenderStyle),this.positionRenderStyle=e.positionRenderStyle,e.canvasColors&&(this.settingsCanvasColors=e.canvasColors),this.showTradeLevelsAlways!==e.showTradeLevelsAlways){this.showTradeLevelsAlways=e.showTradeLevelsAlways;try{localStorage.setItem(this.SHOW_SLTP_ALWAYS_LS_KEY,String(e.showTradeLevelsAlways))}catch(e){}}if(this.showPriceAxisCountdown!==e.showPriceAxisCountdown){this.showPriceAxisCountdown=e.showPriceAxisCountdown;try{localStorage.setItem(this.PRICE_AXIS_COUNTDOWN_LS_KEY,String(e.showPriceAxisCountdown))}catch(e){}this.updateCountdownState(),this.scheduleRender()}this.setTheme(e.theme),this.renderTradeLayer(),this.emitStateChange()},()=>{this.resetChartSettings()})}getFloatingRoot(){var e;return(e=document.fullscreenElement)==null?document.body:e}reparentFloatingElements(){var e,t,n,r,i,a,o,s,c;let l=this.getFloatingRoot();(e=this._tb)==null||e.reparentFlyout(l),(t=this.leftBar)==null||t.reparentFlyout(l);let u=[(n=this.isinPickerModal)==null?void 0:n.el,(r=this.comparePickerModal)==null?void 0:r.el,(i=this.indicatorSettingsDialog)==null?void 0:i.el,(a=this.chartSettingsDialog)==null?void 0:a.el,(o=this._draftQtyFlyout)==null?void 0:o.el,(s=this.layoutPopover)==null?void 0:s.el,(c=this.snapshotPopover)==null?void 0:c.el];for(let e of u)e&&e.parentElement!==l&&l.appendChild(e)}toggleDrawingTools(){var e,t;this.leftBarVisible=!this.leftBarVisible,(e=this.leftBar)==null||e.setVisible(this.leftBarVisible),(t=this._tb)==null||t.setDrawingsBtnActive(this.leftBarVisible)}_applyCssFullscreen(e){var t;this._isCssFullscreen=e,e?Object.assign(this.wrapper.style,{position:`fixed`,inset:`0`,width:`100vw`,height:`100vh`,zIndex:`9999`}):Object.assign(this.wrapper.style,{position:``,inset:``,width:``,height:``,zIndex:``}),(t=this._tb)==null||t.setFullscreen(e),this.reparentFloatingElements(),requestAnimationFrame(()=>this.onResize())}toggleFullscreen(){let e=!!document.fullscreenElement;!e&&!this._isCssFullscreen?this.wrapper.requestFullscreen?this.wrapper.requestFullscreen().then(()=>{var e;(e=this._tb)==null||e.setFullscreen(!0)}).catch(()=>{this._applyCssFullscreen(!0)}):this._applyCssFullscreen(!0):e?document.exitFullscreen().catch(()=>{}):this._applyCssFullscreen(!1)}baseRenderStyle(){return this.positionRenderStyleOverride===null?this.levels.filter(e=>e.type===`position`||e.type===`pending`).length>this.tradesThresholdForHorizontalLine?`dot`:`line`:this.positionRenderStyleOverride}recomputeRenderStyle(){this.positionRenderStyle=this.pnlPillExpanded?`line`:this.baseRenderStyle()}renderTradeLayer(){var e,t,n,r,i,a;if(this._isDestroyed)return;let o=window.devicePixelRatio||1,{tradeCtx:s,tradeCanvas:c,theme:l,viewport:u}=this;if(s.clearRect(0,0,c.width,c.height),!this.tfcActive||this.levels.length===0||this.dataStore.length===0){this.tradeLevelHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeAddBracketAreas=[],this.offViewportHitAreas=[];return}let{chartW:d,priceH:f}=this.getChartLayout(),p=(e=this._displayedPriceRange)==null?this.getScaledPriceRange(u):e,m=this.levels.filter(e=>e.type===`pending`&&e.ToClose!=null),h=this.levels.filter(e=>!(e.type===`pending`&&e.ToClose!=null)).map(e=>{var t,n,r,i;let a=(t=this.pendingLevelDrags.get(e.label))==null?[]:t,o=a.find(e=>e.field===`stopLoss`),s=a.find(e=>e.field===`takeProfit`),c=o&&!o.isRemoval?o.newPrice:void 0,l=s&&!s.isRemoval?s.newPrice:void 0,u=(n=o==null?void 0:o.isRemoval)==null?!1:n,d=(r=s==null?void 0:s.isRemoval)==null?!1:r,f=(i=a.find(e=>e.field===`main`))==null?void 0:i.newPrice,p=m.filter(t=>t.ToClose===e.label);if(p.length===0&&c===void 0&&l===void 0&&f===void 0&&!u&&!d)return e;let h={...e};if(f!==void 0&&(h.price=f),c===void 0?u&&(h.stopLossPrice=void 0):h.stopLossPrice=c,l===void 0?d&&(h.takeProfitPrice=void 0):h.takeProfitPrice=l,p.length>0){var g;let t=(g=e.side)==null?`buy`:g;for(let n of p)if(t===`buy`?n.price<e.price:n.price>e.price){var _;h.stopLossPrice=u?void 0:(_=c==null?h.stopLossPrice:c)==null?n.price:_,h._slOrderLabel=n.label}else{var v;h.takeProfitPrice=d?void 0:(v=l==null?h.takeProfitPrice:l)==null?n.price:v,h._tpOrderLabel=n.label}}return h});s.save(),s.scale(o,o),s.save(),s.beginPath(),s.rect(0,0,d,f),s.clip();let g=e=>e.type===`position`&&!!e.entryPriceEditable,_=this.selectedTradeLabel===null?this.tradeDisplayFilter===`none`?[]:this.tradeDisplayFilter===`positions`?h.filter(e=>e.type===`position`&&!g(e)):this.tradeDisplayFilter===`orders`?h.filter(e=>e.type===`pending`||g(e)):h:h.filter(e=>e.label===this.selectedTradeLabel),v=this.levelClusteringEnabled?this.clusterThresholdDistance:0,y=(t=this.orderTimeDragHandler)!=null&&t.active?this.orderTimeDragHandler.dragLabel:null,b=y!==null&&this.hoveredTradeLabel===y?null:this.hoveredTradeLabel,x=y!==null&&this.selectedTradeLabel===y?null:this.selectedTradeLabel,S=ft(s,_,this.scaleManager,p,l,d,f,this.dataStore.getPricePrecision(),b,(n=(r=this.tradeDragHandler)==null?void 0:r.dragLabel)==null?null:n,this.tradeDragNewPrice,x,new Set([...this.pendingLevelDrags.keys(),...this._editOpenLabel===null?[]:[this._editOpenLabel]]),this.positionRenderStyle,this.hideLevelConfirmCancel,this.draftOrderLabel,this.draftBracketPnl,this.expandedClusters,v,this._showQuantityField,this.tradeDragNewSLPrice,this.tradeDragNewTPPrice,this.tradeLevelButtonScale,this.showTradeLevelsAlways,this._orderTimeDragEnabled?e=>this._orderLineAnchorX(e,d):null,this._orderTimeDragEnabled,this._bracketLabel,this.tradeLevelBadgeScale,this.tradeLevelBadgeAnchor);s.restore();let C=Gt(s,_,p,l,d,f,(i=(a=this.tradeDragHandler)==null?void 0:a.dragLabel)==null?null:i,this.selectedTradeLabel);if(this.offViewportHitAreas=C.hitAreas,Nt(s,_,this.scaleManager,p,l,d,f,this.dataStore.getPricePrecision()),s.restore(),this.tradeLevelHitAreas=S.hitAreas,this.tradeLevelEditAreas=S.editAreas,this.tradeHoverAreas=S.hoverAreas,this.tradeLevelDragAreas=S.dragAreas,this.tradeLevelConfirmAreas=S.confirmAreas,this.tradeAddBracketAreas=S.addBracketAreas,this.clusterBadgeAreas=S.clusterBadgeAreas,this.lastClusters=S.clusters,this._draftQtyPillArea=S.draftQtyPillArea,this.expandedClusters.size>0){let e=new Set(S.clusters.map(e=>e.id));for(let t of this.expandedClusters)e.has(t)||this.expandedClusters.delete(t)}if(this.pnlPillExpanded&&!this._pnlPillExpandPass){let e=S.clusters.filter(e=>!this.expandedClusters.has(e.id)&&e.members.some(e=>e.level.type===`position`));if(e.length>0){for(let t of e)this.expandedClusters.add(t.id);this._pnlPillExpandPass=!0;try{this.renderTradeLayer()}finally{this._pnlPillExpandPass=!1}}}}_orderLineAnchorX(e,t){var n;if(!this._orderTimeDragEnabled)return null;if((n=this.orderTimeDragHandler)!=null&&n.active&&this.orderTimeDragHandler.dragLabel===e.label&&this.tradeDragNewBarIndex!==null)return this.scaleManager.xToPixel(this.tradeDragNewBarIndex,this.viewport,t);let r=this._resolvedTimeAnchor(e);return r===void 0?null:this.scaleManager.xToPixel(this.timestampToBarIndex(r),this.viewport,t)}_resolvedTimeAnchor(e){var t;let n=this._timeAnchorOverride.get(e.label);if(n!==void 0)return n;let r=(t=this._orderLineAnchorStore)==null?void 0:t.get(e.label);return r===void 0?this._honorsLevelTimestamp(e)?e.timestamp:void 0:r}_honorsLevelTimestamp(e){return!((this._orderLineDefaultAnchor===`center`||this.tradeLevelBadgeAnchor===`left`)&&e.timeDraggable===!0)}_effectiveEntryPrice(e,t){var n,r;let i=this.pendingLevelDrags.get(e);return(n=i==null||(r=i.find(e=>e.field===`main`))==null?void 0:r.newPrice)==null?t:n}_effectiveBracketPrice(e,t,n){var r;let i=this.pendingLevelDrags.get(e),a=i==null||(r=i.find(e=>e.field===t))==null?void 0:r.newPrice;return a==null?n:a}_resolveBracketPrices(e){let t=e.stopLossPrice,n=e.takeProfitPrice,r,i;if(t===void 0||n===void 0){let o=this.levels.filter(t=>t.type===`pending`&&t.ToClose===e.label);if(o.length>0){var a;let s=(a=e.side)==null?`buy`:a;for(let a of o){let o=s===`buy`?a.price<e.price:a.price>e.price;o&&t===void 0?(t=a.price,r=a.label):!o&&n===void 0&&(n=a.price,i=a.label)}}}return{slPrice:t,tpPrice:n,slSiblingLabel:r,tpSiblingLabel:i}}_finalizeMainDragWithBrackets(e,t){var n;let r=this.levels.find(t=>t.label===e.label),i=e.derivedSLPrice!==void 0&&e.slStartPrice!==void 0&&e.derivedSLPrice!==e.slStartPrice,a=e.derivedTPPrice!==void 0&&e.tpStartPrice!==void 0&&e.derivedTPPrice!==e.tpStartPrice,o=!i&&!a;if(this.storePendingChange(e,e.startPrice,t,!o),!((n=this.pendingLevelDrags.get(e.label))!=null&&n.some(t=>t.field===`main`&&t.newPrice===e.newPrice))){this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null;return}if(i){var s,c,l;let n=!a,i=r,o=r,u=(s=(c=i==null?void 0:i.stopLossData)==null?o==null?void 0:o.stopLossData:c)==null?e.data:s;this.storePendingChange({label:e.label,type:e.type,newPrice:e.derivedSLPrice,data:u,bracketType:`stopLoss`},e.slStartPrice,(l=this._slSiblingOrderLabel)==null?t:l,!n)}if(a){var u,d,f;let n=r,i=r,a=(u=(d=n==null?void 0:n.takeProfitData)==null?i==null?void 0:i.takeProfitData:d)==null?e.data:u;this.storePendingChange({label:e.label,type:e.type,newPrice:e.derivedTPPrice,data:a,bracketType:`takeProfit`},e.tpStartPrice,(f=this._tpSiblingOrderLabel)==null?t:f,!1)}this.tradeDragNewSLPrice=null,this.tradeDragNewTPPrice=null,this._slSiblingOrderLabel=null,this._tpSiblingOrderLabel=null}storePendingChange(e,t,n,r=!1){var i,a,o,s,c;if(e.bracketType){var l,u,d,f,p;let n=this.levels.find(t=>t.label===e.label),r=(l=n==null?void 0:n.side)==null?`buy`:l,i=this._effectiveEntryPrice(e.label,(u=n==null?void 0:n.price)==null?t:u),a=(n==null?void 0:n.entryPriceEditable)===!0,o=(n==null||(d=n.data)==null?void 0:d._isDraft)===!0,s=this.dataStore.all,c=e.type===`position`&&!a&&!o?(f=(p=s[s.length-1])==null?void 0:p.close)==null?0:f:0;if(!yu.isBracketPriceValid(e.newPrice,e.bracketType,i,r,c)){this.tradeDragNewPrice=null,this.renderTradeLayer();return}}if(!e.bracketType){let t=this.levels.find(t=>t.label===e.label);if(t!=null&&t.orderType&&t!=null&&t.side){var m,h;let n=this.dataStore.all,r=(m=(h=n[n.length-1])==null?void 0:h.close)==null?0:m;if(r>0&&!(t.side===`buy`&&t.orderType===`limit`||t.side===`sell`&&t.orderType===`stop`?e.newPrice<r:e.newPrice>r)){this.tradeDragNewPrice=null,this.renderTradeLayer();return}}}if(e.newPrice===t){this.tradeDragNewPrice=null,this.renderTradeLayer();return}let g=(i=e.bracketType)==null?`main`:i,_=this._isBracketNew;this._isBracketNew=!1;let v=this.levels.find(t=>t.label===e.label);if((v==null?void 0:v.orderType)===`market`&&(v==null||(a=v.data)==null?void 0:a._isDraft)===!0){g!==`main`&&(this.updateDraftOrderBracket(g===`stopLoss`?`sl`:`tp`,e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:v==null?void 0:v.data,bracketType:g,isFullscreen:this.isFullscreen})),this.tradeDragNewPrice=null,this.renderTradeLayer();return}if(v!==void 0&&g!==`main`&&(v==null||(o=v.data)==null?void 0:o._isDraft)===!0){this.updateDraftOrderBracket(g===`stopLoss`?`sl`:`tp`,e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:v==null?void 0:v.data,bracketType:g,isFullscreen:this.isFullscreen}),this.tradeDragNewPrice=null,this.renderTradeLayer();return}if(v!==void 0&&g===`main`&&(v==null||(s=v.data)==null?void 0:s._isDraft)===!0&&v.orderType!==`market`&&this.hideLevelConfirmCancel){this.updateDraftOrderPrice(e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:v==null?void 0:v.data,bracketType:void 0,isFullscreen:this.isFullscreen}),this.tradeDragNewPrice=null,this.renderTradeLayer();return}let y=((c=this.pendingLevelDrags.get(e.label))==null?[]:c).filter(e=>e.field!==g);if(y.push({field:g,newPrice:e.newPrice,oldPrice:t,isNew:_,bracketOrderLabel:n}),this.pendingLevelDrags.set(e.label,y),this.tradeDragNewPrice=null,this.hideLevelConfirmCancel&&!r){this.applyPendingChanges(e.label);return}this.renderTradeLayer()}_orderTypeForPrice(e,t){let n=this.dataStore.all,r=n.length>0?n[n.length-1].close:t;return e===`buy`?t<r?`limit`:`stop`:t>r?`limit`:`stop`}createDraftOrder(e,t,n){if(this.draftOrderLabel)return;let r=`__draft_${Date.now()}`,i={type:`pending`,label:r,side:e,price:t,orderType:n,lots:this._qtyFieldMin,data:{_isDraft:!0}};this.levels=[...this.levels,i],this.draftOrderLabel=r,this.selectedTradeLabel=r,this.pendingLevelDrags.set(r,[{field:`main`,newPrice:t,oldPrice:t}]),this.crosshair=null,this.renderTradeLayer(),this.emitter.emit(`draftInitiated`,{side:e,price:t,orderType:n,isFullscreen:this.isFullscreen})}removeDraftOrder(){var e;if(!this.draftOrderLabel)return;let t=this.draftOrderLabel;this.levels=this.levels.filter(e=>e.label!==t),this.pendingLevelDrags.delete(t),this.selectedTradeLabel=null,this.draftOrderLabel=null,this.draftBracketPnl={},(e=this._draftQtyFlyout)==null||e.hide(),this._draftQtyPillArea=void 0,this.renderTradeLayer(),this.emitter.emit(`draftCancelled`,{label:t,isFullscreen:this.isFullscreen})}applyPendingChanges(e){let t=this.pendingLevelDrags.get(e);if(!t){if(this._editOpenLabel===e){let t=this.levels.find(t=>t.label===e);this._editOpenLabel=null,this.selectedTradeLabel=null,this.renderTradeLayer(),t&&this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:t.type,isFullscreen:this.isFullscreen})}return}let n=this.levels.find(t=>t.label===e);if(!n)return;if(this._editOpenLabel===e&&(this._editOpenLabel=null),e===this.draftOrderLabel){var r,i,a;let o=t.find(e=>e.field===`main`),s=n;(r=this._onOrderSubmit)==null||r.call(this,{price:(i=o==null?void 0:o.newPrice)==null?s.price:i,lots:(a=s.lots)==null?this._qtyFieldMin:a,side:s.side,orderType:s.orderType,...s.stopLossPrice===void 0?{}:{stopLoss:s.stopLossPrice},...s.takeProfitPrice===void 0?{}:{takeProfit:s.takeProfitPrice}}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:`draft`,isFullscreen:this.isFullscreen}),this.removeDraftOrder();return}let o=this.pendingQtyChanges.get(e);this.pendingQtyChanges.delete(e),this.originalQtyByLabel.delete(e);let s=o!==void 0&&n.data&&typeof n.data==`object`?{...n.data,lots:o}:n.data;this.emitter.emit(`tradeLevelEdit`,{label:e,type:n.type,data:s,isFullscreen:this.isFullscreen,...o===void 0?{}:{newLots:o},changes:t.map(e=>{let t=n.data,r=s;if(e.field===`stopLoss`){var i;r=(i=t.stopLossData)==null?n.data:i}else if(e.field===`takeProfit`){var a;r=(a=t.takeProfitData)==null?n.data:a}if(e.bracketOrderLabel){let t=this.levels.find(t=>t.label===e.bracketOrderLabel);t&&(r=t.data)}let c;return c=e.field===`main`?`MAIN`:e.field===`stopLoss`?e.isRemoval?`REMOVE_SL`:e.isNew?`ADD_SL`:`SL`:e.isRemoval?`REMOVE_TP`:e.isNew?`ADD_TP`:`TP`,{field:c,newPrice:e.newPrice,data:r,...c===`MAIN`&&o!==void 0?{newLots:o}:{},bracketOrderLabel:e.bracketOrderLabel}})}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:n.type,isFullscreen:this.isFullscreen}),this.hideLevelConfirmCancel||(this.pendingLevelDrags.delete(e),this.selectedTradeLabel=null,this.draftBracketPnl={}),this.renderTradeLayer()}revertPendingChanges(e){var t;if(e&&e===this.draftOrderLabel){this.removeDraftOrder();return}if(!e&&this.draftOrderLabel&&this.removeDraftOrder(),e&&!this.pendingLevelDrags.has(e)&&this._editOpenLabel===e){this._cancelEditAndDeselect(e);return}let n=e?this.pendingLevelDrags.has(e)||this.pendingQtyChanges.has(e)?[[e,(t=this.pendingLevelDrags.get(e))==null?[]:t]]:[]:[...this.pendingLevelDrags.entries(),...[...this.pendingQtyChanges.keys()].filter(e=>!this.pendingLevelDrags.has(e)).map(e=>[e,[]])];for(let[e]of n){if(this.undoIsNewBracketMutations(e),this.pendingLevelDrags.delete(e),this.pendingQtyChanges.has(e)){this.pendingQtyChanges.delete(e);let t=this.levels.findIndex(t=>t.label===e);if(t!==-1&&this.originalQtyByLabel.has(e)){let n=this.originalQtyByLabel.get(e),r=this.levels[t];this.levels=[...this.levels.slice(0,t),{...r,lots:n},...this.levels.slice(t+1)]}this.originalQtyByLabel.delete(e)}let t=this.levels.find(t=>t.label===e);t&&(this._editOpenLabel===e&&(this._editOpenLabel=null),this.emitter.emit(`tradeLevelEditCancelled`,{label:e,type:t.type,isFullscreen:this.isFullscreen}))}this.selectedTradeLabel=null,this.draftBracketPnl={},this.renderTradeLayer()}undoIsNewBracketMutations(e){let t=this.pendingLevelDrags.get(e);if(!t)return;let n=t.some(e=>e.field===`stopLoss`&&e.isNew),r=t.some(e=>e.field===`takeProfit`&&e.isNew);!n&&!r||(this.levels=this.levels.map(t=>{if(t.label!==e)return t;let i={...t};return n&&(i.stopLossPrice=void 0),r&&(i.takeProfitPrice=void 0),i}))}initCompareUi(){if(!this.compareManager)return;this.siEl&&(this.compareLegend=new su({theme:this.theme,onRemove:e=>this.removeCompare(e)}),this.siEl.appendChild(this.compareLegend.el));let e=()=>this.refreshCompareLegend();this.emitter.on(`compareAdded`,e),this.emitter.on(`compareRemoved`,e),this.emitter.on(`compareError`,e),this.emitter.on(`crosshair`,e=>{var t,n;this.compareHoveredIndex=(t=e==null?void 0:e.barIndex)==null?null:t,(n=this.compareManager)!=null&&n.isActive()&&(this.refreshCompareLegend(),this.scheduleRender())})}openComparePicker(){var e,t;if(!this.compareDataLoader)return;this.comparePickerModal||(this.comparePickerModal=new ou(this.chromeTheme,e=>this.toggleCompare(e),()=>this.emitUiState()),this.comparePickerModal.setTitle(`Compare`),this.comparePickerModal.setMode(`toggle`),this.getFloatingRoot().appendChild(this.comparePickerModal.el)),this.refreshComparePickerState();let n=(e=(t=this.siSymbolSpan)==null?void 0:t.textContent)==null?``:e;this.comparePickerModal.show(this.isins,n)}toggleCompare(e){this.compareManager&&(this.compareManager.has(e)?this.removeCompare(e):this.addCompare(e),this.refreshComparePickerState())}refreshComparePickerState(){!this.comparePickerModal||!this.compareManager||this.comparePickerModal.setActiveSymbols(this.compareManager.list().map(e=>e.symbol))}async addCompare(e){this.compareManager&&(await this.compareManager.add(e),this.refreshCompareLegend(),this.scheduleRender(),this.emitStateChange())}removeCompare(e){this.compareManager&&(this.compareManager.remove(e),this.refreshCompareLegend(),this.scheduleRender(),this.emitStateChange())}clearCompares(){this.compareManager&&(this.compareManager.clear(),this.refreshCompareLegend(),this.scheduleRender(),this.emitStateChange())}getCompares(){return this.compareManager?this.compareManager.list().map(e=>({symbol:e.symbol,color:e.color,status:e.status})):[]}refreshCompareLegend(){var e,t;if(!this.compareLegend||!this.compareManager)return;let n=this.compareManager.list(),r=this.dataStore.all,i=this.compareBaselineIndex(r),a=i==null||(e=(t=r[i])==null?void 0:t.close)==null?null:e,o=this.compareHoveredIndex,s=r.length-1,c=n.map(e=>{let t=null;if(e.status===`ready`&&a!=null&&e.bars.length>0){let n=_u(e.bars,r.map(e=>e.time),i==null?0:i),a=r[o==null?s:o];if(a){let e=n.find(e=>e.time===a.time);if(e&&e.pct!=null)t=e.pct;else{let e=n[n.length-1];(e==null?void 0:e.pct)!=null&&(t=e.pct)}}}return{symbol:e.symbol,color:e.color,percent:t,status:e.status,errorMessage:e.errorMessage}});this.compareLegend.update(c)}compareBaselineIndex(e){return e.length===0?null:Math.max(0,Math.min(e.length-1,Math.floor(this.viewport.startIndex)))}updateCompareRange(){if(!this.compareManager)return;let e=this.dataStore.all;if(e.length===0)return;let t={start:new Date(e[0].time),end:new Date(e[e.length-1].time),interval:this.timeframe,priceSource:this.tickClosePriceSource};this.compareManager.isActive()?this.compareManager.refetchAll(t).then(()=>{this.refreshCompareLegend(),this.scheduleRender()}):this.compareManager.setLastParams(t)}render(){var e,t,n;if(this._isDestroyed)return;let{ctx:r,canvas:i,theme:a,viewport:o}=this,s=window.devicePixelRatio||1,c=i.width,l=i.height,u=c/s-this.priceAxisWidth,d=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),f=d.reduce((e,t)=>e+this.paneH(t)+Dd,0),p=l/s-this.timeAxisHeight-f;r.clearRect(0,0,c,l),r.fillStyle=a.background,r.fillRect(0,0,c,l);let m=this.dataStore.getVisible(o);if(m.length===0){this.drawCtx.clearRect(0,0,this.drawCanvas.width,this.drawCanvas.height);return}let h=m;if(this._isPanning)this.viewport={...this._targetViewport};else{let e=this._targetViewport.startIndex-this.viewport.startIndex,t=this._targetViewport.endIndex-this.viewport.endIndex,n=(this._targetViewport.endIndex-this._targetViewport.startIndex)*2e-4;Math.abs(e)<n&&Math.abs(t)<n?this.viewport={...this._targetViewport}:(this.viewport={...this.viewport,startIndex:this.viewport.startIndex+e*jd,endIndex:this.viewport.endIndex+t*jd,candleWidth:this._targetViewport.candleWidth,candleGap:this._targetViewport.candleGap},this.scheduleRender())}let g=!!((e=this.compareManager)!=null&&e.isActive()),_=null,v=[],y=[],b=null;if(g&&this.compareManager){var x,S;let e=this.dataStore.all,t=this.compareBaselineIndex(e),n=t==null||(x=(S=e[t])==null?void 0:S.close)==null?null:x;if(n!=null&&n!==0&&Number.isFinite(n)){_=n;let r=this.compareManager.list(),i=e.map(e=>e.time);v=r.map(e=>e.status===`ready`&&e.bars.length>0?_u(e.bars,i,t==null?0:t):[]),y=r.map(e=>e.color),h=mu(m,n),b=gu(m,n,v.map(e=>e.filter(e=>e.pct!=null)))}}let C=g&&b!==null;if(C!==this._lastInCompareMode&&(this._lastInCompareMode=C,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this.pricePanOffset=0,this.priceScaleFactor=1),this.priceScaleFactor!==1||this.pricePanOffset!==0){if(!this._lockedAutoFitBase){var w,T;this._lockedAutoFitBase=(w=(T=this._displayedPriceRange)==null?b:T)==null?this.dataStore.getPriceRange(o):w}let e=this._lockedAutoFitBase,t=(e.min+e.max)/2+this.pricePanOffset,n=e.max===e.min?1:(e.max-e.min)/2;this._displayedPriceRange={min:t-n*this.priceScaleFactor,max:t+n*this.priceScaleFactor}}else{var E;this._lockedAutoFitBase=null;let e=(E=b)==null?this.getScaledPriceRange(o):E;if(!this._displayedPriceRange)this._displayedPriceRange=e;else{let t=(e.max-e.min)*1e-4,n=e.min-this._displayedPriceRange.min,r=e.max-this._displayedPriceRange.max;Math.abs(n)<t&&Math.abs(r)<t?this._displayedPriceRange=e:(this._displayedPriceRange={min:this._displayedPriceRange.min+n*Ad,max:this._displayedPriceRange.max+r*Ad},this.scheduleRender())}}let D=this._displayedPriceRange,O=this.showVolume?this.dataStore.getVolumeRange(o):null,k=i;switch(k._priceRange=D,k._chartWidth=u,r.save(),r.scale(s,s),r.save(),r.beginPath(),r.rect(0,0,u,p),r.clip(),_e(r,D,this.scaleManager,a,u,p),this.series){case`candlestick`:V(r,h,o,D,this.scaleManager,a,u,p);break;case`hollow`:ee(r,h,o,D,this.scaleManager,a,u,p);break;case`line`:re(r,h,o,D,this.scaleManager,a,u,p,!1);break;case`area`:re(r,h,o,D,this.scaleManager,a,u,p,!0);break;case`ohlc`:ie(r,h,o,D,this.scaleManager,a,u,p);break;case`heikinashi`:se(r,h,o,D,this.scaleManager,a,u,p);break;case`volumecandles`:ce(r,h,o,D,this.scaleManager,a,u,p);break;case`linemarkers`:le(r,h,o,D,this.scaleManager,a,u,p);break;case`step`:ue(r,h,o,D,this.scaleManager,a,u,p);break;case`hlcarea`:fe(r,h,o,D,this.scaleManager,a,u,p);break;case`baseline`:me(r,h,o,D,this.scaleManager,a,u,p);break;case`columns`:he(r,h,o,D,this.scaleManager,a,u,p);break;case`highlow`:ge(r,h,o,D,this.scaleManager,a,u,p);break}r.save(),r.beginPath(),r.rect(0,0,u,p),r.clip();for(let e of this.visibleStates()){let t=e.indicator;if(t.pane&&t.pane!==`main`)continue;let n=this.indicatorResults.get(e.instanceId);if(!n)continue;let i=n.slice(Math.floor(o.startIndex),Math.ceil(o.endIndex)+1),a=g&&_!=null?hu(i,_):i;t.render(r,a,this.scaleManager,o,p)}if(g&&_!=null&&v.length>0){let e=this.dataStore.all,t=Math.floor(o.startIndex),n=Math.min(e.length-1,Math.ceil(o.endIndex)),i=new Map;for(let r=t;r<=n;r++)i.set(e[r].time,r);for(let e=0;e<v.length;e++){let t=v[e],n=y[e];if(!t||t.length===0)continue;r.save(),r.strokeStyle=n,r.lineWidth=1.5,r.lineJoin=`round`,r.lineCap=`round`,r.beginPath();let a=!1;for(let e of t){let t=i.get(e.time);if(t==null||e.pct==null){a=!1;continue}let n=this.scaleManager.xToPixel(t,o,u),s=this.scaleManager.yToPixel(e.pct,D,p);a?r.lineTo(n,s):(r.moveTo(n,s),a=!0)}r.stroke(),r.restore()}}r.restore(),r.restore(),an(r,D,this.scaleManager,a,u,p,this.priceAxisWidth,void 0,this.dataStore.getPricePrecision(),this.uiConfig.priceAxis,g?`percent`:`price`);let A=this.dataStore.all[this.dataStore.all.length-1];if(A&&!g){let e=this.dataStore.getPricePrecision(),t=(t,n,i)=>{let a=this.scaleManager.yToPixel(t,D,p);r.save(),r.strokeStyle=n,r.lineWidth=1,r.setLineDash([3,3]),r.beginPath(),r.moveTo(0,a),r.lineTo(u,a),r.stroke(),r.setLineDash([]);let o=i+t.toFixed(e);r.font=`10px 'Inter', system-ui, sans-serif`;let s=r.measureText(o).width+12;return r.fillStyle=n,r.fillRect(u,a-16/2,s,16),r.fillStyle=`#ffffff`,r.textAlign=`left`,r.fillText(o,u+4,a+4),r.restore(),{y:a,boxW:s}},n=null,i=0;if(this.liveBidAsk){var j,M,N,P,F,I,L;let{bid:e,ask:r}=this.liveBidAsk,o=this.tickClosePriceSource===`ltp`,s=((j=this.showLtpPrice)==null?o:j)?(M=this.liveLtp)==null?o?e:null:M:null,c=A.close>=A.open?a.candle.up:a.candle.down,l=(N=this.showAskLine)==null?this.showBidAskLines||this.tickClosePriceSource===`ask`:N,u=((P=this.showBidLine)==null?this.showBidAskLines||this.tickClosePriceSource===`bid`||o&&s==null:P)?t(e,a.candle.down,``):null,d=l?t(r,a.candle.up,``):null,f=s==null?null:t(s,c,``),p=o?(F=f==null?u:f)==null?d:F:this.tickClosePriceSource===`ask`?(I=d==null?f:d)==null?u:I:(L=u==null?f:u)==null?d:L;p&&(n=p.y,i=p.boxW)}else{let e=A.close>=A.open,r=t(A.close,e?a.candle.up:a.candle.down,``);n=r.y,i=r.boxW}if(this.showPriceAxisCountdown&&n!==null){var R;if(this.candleCountdownTimeframes===`all`||((R=this.candleCountdownTimeframes)==null?[`1m`,`3m`,`4m`,`5m`,`10m`,`15m`,`30m`,`1h`,`2h`,`4h`,`8h`]:R).includes(this.timeframe)){let e=this.timeframeToMs(this.timeframe);rn(r,A.time,e,a,u,n-16/2,16,i)}}}let z=p;for(let e of d){let t=e.indicator,n=this.paneH(e);if(r.fillStyle=a.axisBorder,r.fillRect(0,z,u+this.priceAxisWidth,Dd),z+=Dd,r.save(),r.beginPath(),r.rect(0,z,u+this.priceAxisWidth,n),r.clip(),r.translate(0,z),r.fillStyle=a.background,r.fillRect(0,0,u+this.priceAxisWidth,n),e.visible&&(()=>{let t=e.currentParams.timeframe;return!t||t===`Chart`||t===this.timeframe})()){let i=this.indicatorResults.get(e.instanceId);if(i){var B,te;let s=i.slice(Math.floor(o.startIndex),Math.ceil(o.endIndex)+1),c=(B=t.getValueRange)==null?void 0:B.call(t,s),l=(te=this.subPaneScaleFactors.get(e.instanceId))==null?1:te,d=c?Ld(c,l):void 0;t.render(r,s,this.scaleManager,o,n,d),d&&an(r,d,this.scaleManager,a,u,n,this.priceAxisWidth,3,Rd(d),this.uiConfig.priceAxis)}}r.restore(),z+=n}if(this.showVolume&&O&&O.max>0){let e=p*Td;ae(r,h,o,O.max,this.scaleManager,a,u,e,p-e)}{var ne;let e=this.candleCountdownTimeframes===`all`?!0:((ne=this.candleCountdownTimeframes)==null?[`1m`,`3m`,`4m`,`5m`,`10m`,`15m`,`30m`,`1h`,`2h`,`4h`,`8h`]:ne).includes(this.timeframe),t=this.showCandleCountdown&&!this.showPriceAxisCountdown&&e&&h.length>0&&o.endIndex>=this.dataStore.length-1,n=t?this.dataStore.length-1:void 0;if(this._debug&&console.log(`[countdown] showCandleCountdown:`,this.showCandleCountdown,`| tf:`,this.timeframe,`| allowed:`,e,`| bars:`,h.length,`| endIndex:`,o.endIndex,`| dataLen:`,this.dataStore.length,`| atLiveEdge:`,o.endIndex>=this.dataStore.length-1),tn(r,h,o,this.scaleManager,a,u,z,Pd()?3:void 0,this.uiConfig.timeAxis,this.timeframe,n,this.timezone),t){let e=this.dataStore.all[this.dataStore.length-1];if(e){let t=this.timeframeToMs(this.timeframe);nn(r,e.time,t,this.dataStore.length-1,o,this.scaleManager,a,u,z,this.uiConfig.timeAxis)}}}if(this.crosshair&&be(r,this.crosshair,D,o,this.scaleManager,a,u,p,this.priceAxisWidth,z,this.timeframe,this.dataStore.getPricePrecision(),this.uiConfig.crosshair,this.timezone),this.logoImage){let e=p-20-40/2;r.save(),r.globalAlpha=.6,r.beginPath(),r.rect(0,0,u,p),r.clip(),r.beginPath(),r.arc(40,e,40/2,0,Math.PI*2),r.closePath(),r.clip(),r.drawImage(this.logoImage,40-40/2,e-40/2,40,40),r.restore()}r.restore();let oe=this.crosshair?(t=this.dataStore.all[this.crosshair.barIndex])==null?null:t:(n=this.dataStore.all[this.dataStore.length-1])==null?null:n;if(this.renderSymbolInfoOHLC(oe),this.drawingManager.render(this.drawCtx,this.scaleManager,o,D,u,p,this.dataStore.getPricePrecision(),this.theme,{instrument:this.getInstrument(),bars:this.dataStore.all,account:this.accountSpec,features:this._features}),this.drawingStylePopover){let e=this.drawingManager.getSelectedDrawing();if(e&&e.complete&&e.locked!==!0){let t=this.computeDrawingAnchorPx(e);t&&this.drawingStylePopover.setAnchor(t.x,t.y)}}if(this.scrollToEndBtn){let e=this.dataStore.length===0||this._targetViewport.endIndex>=this.dataStore.length-.5;e!==!this.scrollToEndVisible&&(this.scrollToEndVisible=!e,this.scrollToEndBtn.style.opacity=e?`0`:`0.85`,this.scrollToEndBtn.style.pointerEvents=e?`none`:`auto`)}if(this.resetViewBtn){let e=this.dataStore.length,t=this._defaultVisibleBars,n=e===0||this._targetViewport.endIndex>=e-.5,r=this._targetViewport.endIndex-this._targetViewport.startIndex,i=Math.abs(r-t)<.5,a=this.priceScaleFactor===1&&this.pricePanOffset===0&&this._lockedAutoFitBase===null,o=e===0||n&&i&&a;o===this.resetViewVisible&&(this.resetViewVisible=!o,this.resetViewBtn.style.opacity=o?`0`:`0.75`,this.resetViewBtn.style.pointerEvents=o?`none`:`auto`)}this.updateSubPaneOverlayPositions()}recomputeIndicators(){for(let e of this.visibleStates())this.indicatorResults.set(e.instanceId,e.indicator.compute(this.dataStore.all))}onResize(){var e;if(this._isDestroyed)return;let t=window.devicePixelRatio||1,n=this.canvasWrap.getBoundingClientRect();if(n.width===0||n.height===0)return;this._cachedWrapRect=n,this._cachedDrawRect=this.drawCanvas.getBoundingClientRect(),(e=this.pnlPill)==null||e.clampToBounds();for(let e of[this.canvas,this.tradeCanvas,this.drawCanvas])e.width=n.width*t,e.height=n.height*t;let r=this.wrapper.offsetWidth,i=r>0&&r<this.uiConfig.drawingToolbar.mobileBreakpoint;if(i!==this._mobileLayout){var a,o,s,c;if(this._mobileLayout=i,(a=this.leftBar)==null||a.setMobileMode(i),(o=this._tb)==null||o.setMobileLayout(i),(s=this.tradeButton)==null||s.setMobileMode(i),(c=this.tradePopover)==null||c.setCompact(i),this.siEl&&(this.siEl.style.flexDirection=i?`column`:`row`,this.siEl.style.alignItems=i?`flex-start`:`center`,this.siEl.style.gap=i?`2px`:`8px`),i){var l;this.leftBarVisible=!1,(l=this._tb)==null||l.setDrawingsBtnActive(!1)}else{var u,d;this.leftBarVisible=!0,(u=this.leftBar)==null||u.setVisible(!0),(d=this._tb)==null||d.setDrawingsBtnActive(!0)}}this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.render(),this.renderTradeLayer()}paneH(e){var t,n;return(t=(n=this.paneHeightOverrides.get(e.instanceId))==null?e.indicator.paneHeight:n)==null?Ed:t}getChartLayout(){var e;let t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).reduce((e,t)=>e+this.paneH(t)+Dd,0),n=(e=this._cachedWrapRect)==null?this.canvasWrap.getBoundingClientRect():e;return{chartW:n.width-this.priceAxisWidth,priceH:n.height-this.timeAxisHeight-t}}computeDrawingAnchorPx(e){var t;if(e.points.length===0)return null;let{chartW:n,priceH:r}=this.getChartLayout(),i=this._targetViewport,a=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(i):t,o=0,s=1/0;for(let t of e.points){let e=this.scaleManager.xToPixel(t.barIndex,i,n),c=this.scaleManager.yToPixel(t.price,a,r);c<s&&(s=c,o=e)}return Number.isFinite(s)?(o=Math.max(0,Math.min(n,o)),s=Math.max(0,Math.min(r,s)),{x:o,y:s}):null}updateSubPaneOverlayPositions(){if(this.subPaneOverlays.size===0)return;let e=this.getSeparatorPositions();for(let t of e){let e=this.subPaneOverlays.get(t.instanceId);e&&(e.el.style.top=`${t.y+Dd+6}px`)}}getSeparatorPositions(){let{priceH:e}=this.getChartLayout(),t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),n=[],r=e;for(let e of t)n.push({y:r,instanceId:e.instanceId}),r+=this.paneH(e)+Dd;return n}getScaledPriceRange(e){let t=this.dataStore.getPriceRange(e),n=t.min,r=t.max;for(let t of this.visibleStates()){if(t.indicator.pane&&t.indicator.pane!==`main`)continue;let a=this.indicatorResults.get(t.instanceId);if(!a)continue;let o=Math.floor(e.startIndex),s=Math.ceil(e.endIndex)+1;for(let e=o;e<s&&e<a.length;e++){var i;let t=(i=a[e])==null?void 0:i.value;if(t==null)continue;let o=Array.isArray(t)?t.filter(e=>e!==null):[t];for(let e of o)isFinite(e)&&(e<n&&(n=e),e>r&&(r=e))}}let a=(n+r)/2+this.pricePanOffset,o=n===r?1:(r-n)/2;return{min:a-o*this.priceScaleFactor,max:a+o*this.priceScaleFactor}}touchToDrawingPoint(e){var t,n;let r=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,i=e.clientX-r.left,a=e.clientY-r.top,{chartW:o,priceH:s}=this.getChartLayout(),c=(n=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):n;return this.makeDrawingPoint(this.scaleManager.pixelToBarIndex(i,this.viewport,o),this.scaleManager.pixelToPrice(a,c,s))}makeDrawingPoint(e,t){let n={barIndex:e,price:t},r=this.barIndexToTimestamp(e);return r!=null&&(n.timestamp=r),n}_handleTradeLevelClose(e){if(e.bracketType){var t,n;let r=this.levels.find(t=>t.label===e.label);if((r==null||(t=r.data)==null?void 0:t._isDraft)===!0&&r){let t=e.bracketType===`stopLoss`?`sl`:`tp`;this.updateDraftOrderBracket(t,null),this.emitter.emit(`tradeLevelEdit`,{label:e.label,type:`pending`,data:r.data,isFullscreen:this.isFullscreen,changes:[{field:e.bracketType===`stopLoss`?`REMOVE_SL`:`REMOVE_TP`,newPrice:0,data:r.data,bracketOrderLabel:void 0}]});return}let i=e.bracketType,a=((n=this.pendingLevelDrags.get(e.label))==null?[]:n).filter(e=>e.field!==i);a.push({field:i,newPrice:0,oldPrice:0,isRemoval:!0,bracketOrderLabel:e.bracketOrderLabel}),this.pendingLevelDrags.set(e.label,a),this.selectedTradeLabel=e.label,this.renderTradeLayer();return}let r=e.label===this.draftOrderLabel,i=this.pendingLevelDrags.get(e.label),a=this._editOpenLabel===e.label,o=!!i&&i.length>0&&i.every(e=>e.isNew),s=!i||i.length===0,c=!r&&a&&(o||s);if(this.revertPendingChanges(e.label),this.pendingLevelDrags.delete(e.label),r)return;if(c){if(s){let t=this.levels.find(t=>t.label===e.label);this._editOpenLabel=null,this.selectedTradeLabel=null,this.renderTradeLayer(),t&&this.emitter.emit(`tradeLevelEditCancelled`,{label:e.label,type:t.type,isFullscreen:this.isFullscreen})}return}this._editOpenLabel===e.label&&(this._editOpenLabel=null);let l=this.levels.find(t=>t.label===e.label),u=(l==null?void 0:l.type)===`position`&&!!l.entryPriceEditable,d=e.type===`position`&&!u?`CLOSED`:`CANCELLED`;this.emitter.emit(`tradeLevelClose`,{label:e.label,type:e.type,action:d,data:e.data,isFullscreen:this.isFullscreen})}_activateMobileCrosshair(e,t){var n,r,i;if(!this.crosshairEnabled)return;let a=(n=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():n,{chartW:o,priceH:s}=this.getChartLayout(),c=(r=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):r,l=a.height-this.timeAxisHeight;if(e>=o||t>=l)return;this._mobileCrosshairActive=!0;let u=this.scaleManager.pixelToBarIndex(e,this.viewport,o),d=this.scaleManager.pixelToPrice(t,c,s),f=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(u))),p=(i=this.dataStore.all[f])==null?null:i;this.crosshair=this.selectedTradeLabel===null&&this.crosshairEnabled?{x:e,y:t,barIndex:f,price:d,bar:p}:null,this.tradeButton&&(this.tradeButton.setY(t),this._isTradingActive||!this.crosshairEnabled||qt(t,this.uiConfig.tradeButton.size/2,this.offViewportHitAreas)?this.tradeButton.hide():this.tfcActive&&this.tradeButton.show(),this._tradeButtonClickData={price:d,y:t}),this.scheduleRender()}_cancelEditAndDeselect(e){let t=this._editOpenLabel===e,n=this.levels.find(t=>t.label===e);this._editOpenLabel=null,this.selectedTradeLabel=null,this.draftBracketPnl={},this.renderTradeLayer(),t&&n&&this.emitter.emit(`tradeLevelEditCancelled`,{label:e,type:n.type,isFullscreen:this.isFullscreen})}_openTradeLevelEditForm(e){if(this._editOpenLabel===e.label)return;this.selectedTradeLabel=e.label,this._editOpenLabel=e.label;let{slPrice:t,tpPrice:n}=this._resolveBracketPrices(e);this.renderTradeLayer(),this.emitter.emit(`tradeLevelEditOpen`,{label:e.label,type:e.type,data:e.data,price:e.price,side:e.side,stopLossPrice:t,takeProfitPrice:n,isFullscreen:this.isFullscreen})}_needsDragAxisLock(e,t){return this._orderTimeDragEnabled&&!e.isBracket&&e.timeDrag===!0&&ut(t)}_upgradePendingTradeDrag(e,t){let r=this._pendingTradeDrag;if(!r)return!1;let i=bu.resolveDragAxis(e-r.startX,t-r.startY,r.axisLock?n.AXIS_LOCK_PIXEL_THRESHOLD:n.TRADE_DRAG_PIXEL_THRESHOLD);if(i===null)return!1;this._pendingTradeDrag=null;let a=r.axisLock&&i===`price`?{...r.dragHit,timeDrag:!1}:r.dragHit;return this._startTradeDragFromHit(a,r.level,r.hitY,r.startX),!0}_startTradeDragFromHit(e,t,n,r){var i;if(!this.tradeDragHandler)return;if(this._orderTimeDragEnabled&&this.orderTimeDragHandler&&!e.isBracket&&e.timeDrag===!0){var a,o,s;let{chartW:n}=this.getChartLayout(),i=e,c=(a=this._orderLineAnchorX(t,n))==null?n/2:a,l=Math.max(i.x,Math.min(i.x+i.w,c)),u=this.scaleManager.pixelToBarIndex(l,this.viewport,n),d=(o=(s=this._resolvedTimeAnchor(t))==null?this.barIndexToTimestamp(u):s)==null?0:o;this.orderTimeDragHandler.start(t,r==null?l:r,l,u,d),this.drawCanvas.style.cursor=`grabbing`,this.emitter.emit(`orderLineMoveStart`,{label:t.label,fromTimestamp:d,fromBarIndex:this.orderTimeDragHandler.startBarIndex,isFullscreen:this.isFullscreen}),this.renderTradeLayer();return}let{priceH:c}=this.getChartLayout(),l=(i=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):i,u=this.scaleManager.yToPixel(e.price,l,c);if(e.isBracket){var d,f,p,m;this._pendingBracketOrderLabel=(d=e.bracketOrderLabel)==null?null:d,this._isBracketNew=!1;let r=t.entryPriceEditable===!0,i=((f=t.data)==null?void 0:f._isDraft)===!0,a=this.dataStore.all,o=t.type===`position`&&!r&&!i?(p=(m=a[a.length-1])==null?void 0:m.close)==null?0:p:0;this.tradeDragHandler.startBracketDrag(t,e.bracketType,e.price,n,u,o,this._effectiveEntryPrice(t.label,t.price)),this.emitter.emit(`tradeLevelDragStart`,{label:t.label,bracketType:e.bracketType,isFullscreen:this.isFullscreen})}else if(this._pendingBracketOrderLabel=null,t.entryPriceEditable===!0){var h,g;this.selectedTradeLabel=e.label;let r=t,i=this.dataStore.all,a=(h=(g=i[i.length-1])==null?void 0:g.close)==null?0:h,o=this._effectiveBracketPrice(t.label,`stopLoss`,r.stopLossPrice),s=this._effectiveBracketPrice(t.label,`takeProfit`,r.takeProfitPrice);this.tradeDragHandler.startDrag(t,n,u,e.price,o,s,r.side,a,r.orderType,!0)}else{var _,v;let r=t,i=this.dataStore.all,a=(_=(v=i[i.length-1])==null?void 0:v.close)==null?0:_,{slPrice:o,tpPrice:s,slSiblingLabel:c,tpSiblingLabel:l}=this._resolveBracketPrices(t);this._slSiblingOrderLabel=c==null?null:c,this._tpSiblingOrderLabel=l==null?null:l;let d=this._effectiveBracketPrice(t.label,`stopLoss`,o),f=this._effectiveBracketPrice(t.label,`takeProfit`,s);this.tradeDragHandler.startDrag(t,n,u,e.price,d,f,r.side,a,r.orderType,!0)}e.isBracket&&(this._editOpenLabel=null),this._openTradeLevelEditForm(t)}_endOrderTimeDrag(){var e;if(!((e=this.orderTimeDragHandler)!=null&&e.active))return!1;let t=this.orderTimeDragHandler.end(this._orderLineDragSnap,this.viewport);if(this.tradeDragNewBarIndex=null,this.drawCanvas.style.cursor=`default`,t){let e=this.barIndexToTimestamp(t.newBarIndex),r=Math.round(t.startBarIndex);if(e!==void 0&&t.newBarIndex!==r){var n;this._timeAnchorOverride.set(t.label,e),(n=this._orderLineAnchorStore)==null||n.set(t.label,e),this.emitter.emit(`orderLineMoved`,{label:t.label,fromTimestamp:t.startTimestamp,toTimestamp:e,fromBarIndex:r,toBarIndex:t.newBarIndex,data:t.data,isFullscreen:this.isFullscreen})}}return this.renderTradeLayer(),!0}_startAddBracketFromHit(e,t){var n,r,i;let a=this.levels.find(t=>t.label===e.label);if(!a||!this.tradeDragHandler)return;let{priceH:o}=this.getChartLayout(),s=this.getScaledPriceRange(this.viewport),c=e.y+e.h/2,l=this.scaleManager.pixelToPrice(c,s,o),u=a.entryPriceEditable===!0,d=((n=a.data)==null?void 0:n._isDraft)===!0,f=this.dataStore.all,p=a.type===`position`&&!u&&!d?(r=(i=f[f.length-1])==null?void 0:i.close)==null?0:r:0;this._pendingBracketOrderLabel=null,this._isBracketNew=!0,this.tradeDragHandler.startBracketDrag(a,e.bracketType,l,t,c,p,this._effectiveEntryPrice(a.label,a.price)),this.emitter.emit(`tradeLevelDragStart`,{label:a.label,bracketType:e.bracketType,isFullscreen:this.isFullscreen})}showTextInput(e){var t;if(!this.textInputEl)return;this.textInputDrawing=e;let{chartW:n,priceH:r}=this.getChartLayout(),i=this.getScaledPriceRange(this.viewport),a,o;if(e.type===`text`)a=this.scaleManager.xToPixel(e.points[0].barIndex,this.viewport,n),o=this.scaleManager.yToPixel(e.points[0].price,i,r);else{var s;let t=(s=e.points[1])==null?e.points[0]:s;a=this.scaleManager.xToPixel(t.barIndex,this.viewport,n)-30,o=this.scaleManager.yToPixel(t.price,i,r)-10}let c=this.textInputEl;c.value=(t=e.text)==null?``:t,c.style.left=`${Math.max(0,a)}px`,c.style.top=`${Math.max(0,o)}px`,c.style.display=`block`,this.drawingManager.setEditingText(!0),c.focus(),c.select();let l=()=>{c.removeEventListener(`keydown`,d),c.removeEventListener(`blur`,f),this.commitTextInput()},u=()=>{c.removeEventListener(`keydown`,d),c.removeEventListener(`blur`,f),this.cancelTextInput()},d=e=>{e.key===`Enter`?(e.preventDefault(),l()):e.key===`Escape`&&(e.preventDefault(),u())},f=()=>l();c.addEventListener(`keydown`,d),c.addEventListener(`blur`,f,{once:!0})}commitTextInput(){var e,t;!this.textInputEl||!this.textInputDrawing||(this.textInputDrawing.text=this.textInputEl.value,this.textInputEl.style.display=`none`,this.textInputDrawing=null,this.drawingManager.setEditingText(!1),(e=(t=this.drawingManager).onDrawingsChange)==null||e.call(t),this.scheduleRender())}cancelTextInput(){this.textInputEl&&(this.textInputEl.style.display=`none`,this.textInputDrawing=null,this.drawingManager.setEditingText(!1),this.scheduleRender())}setDotTickActive(){this.siStreamDot&&(this.tickActivityTimer!==null&&clearTimeout(this.tickActivityTimer),this.siStreamDot.style.background=this.theme.candle.up,this.tickActivityTimer=setTimeout(()=>{this.tickActivityTimer=null,this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus])},this.tickActivityMs))}fillTickGap(e,t){if(!this.dataLoader||this.isFetching)return;let n=this.timeframeToInterval(this.getBaseInterval());this.dataLoader({start:new Date(e),end:new Date(t),interval:n,priceSource:this.tickClosePriceSource}).then(e=>{let t=this.maybeAggregate(e);if(t.length===0)return;this.backfillDrawingTimestamps();let n=this.dataStore.all,r=n[n.length-1],i=0;for(let e of t){if(e.time>=r.time)continue;let t=n.findIndex(t=>t.time===e.time);if(t!==-1)n[t]=e;else{let t=n.findIndex(t=>t.time>e.time);n.splice(t===-1?n.length-1:t,0,e),i++}}i>0&&(this.viewport={...this.viewport,startIndex:this.viewport.startIndex+i,endIndex:this.viewport.endIndex+i},this.reanchorDrawingsByTimestamp(),this.recomputeIndicators(),this.scheduleRender())}).catch(()=>{})}correctCompletedBar(e,t){if(!this.dataLoader||this.isFetching)return;let n=new Date(e),r=new Date(e+t*3),i=this.timeframeToInterval(this.getBaseInterval());this.dataLoader({start:n,end:r,interval:i,priceSource:this.tickClosePriceSource}).then(e=>{let t=this.maybeAggregate(e);if(t.length===0)return;let n=this.dataStore.all,r=n.length-1,i=!1;for(let e of t){let t=n.findIndex(t=>t.time===e.time);t!==-1&&t!==r&&(n[t]=e,i=!0)}i&&(this.recomputeIndicators(),this.scheduleRender())}).catch(()=>{})}setLayoutIcon(e,t=!0){var n;return(n=this.advancedToolbar)==null||n.setLayoutPresetIcon(e,t),this}setDebug(e){return this._debug=e,this}correctBar(e,t){let n=this.dataStore.all,r=n.findIndex(t=>t.time===e);r!==-1&&(n[r]=t,this.recomputeIndicators(),this.scheduleRender())}scrollToEnd(){this.panHandler.cancel(),this.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null);let e=this.viewport.endIndex-this.viewport.startIndex,t=this.dataStore.length+Id,n=this.viewport.endIndex,r=this.pricePanOffset,i=performance.now(),a=e=>e<.5?2*e*e:-1+(4-2*e)*e,o=s=>{let c=Math.min((s-i)/350,1),l=a(c),u=n+(t-n)*l;this.viewport={...this.viewport,startIndex:u-e,endIndex:u},this._targetViewport={...this.viewport},this.pricePanOffset=r*(1-l),this.render(),c<1?this.scrollAnimId=requestAnimationFrame(o):this.scrollAnimId=null};this.scrollAnimId=requestAnimationFrame(o)}scrollToCenterPrice(e){if(!isFinite(e)||this.dataStore.length===0)return;this.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null);let t=this.dataStore.getPriceRange(this.viewport),n=(t.min+t.max)/2,r=this.pricePanOffset,i=e-n;if(Math.abs(i-r)<1e-9)return;let a=performance.now(),o=e=>e<.5?2*e*e:-1+(4-2*e)*e,s=e=>{let t=Math.min((e-a)/350,1),n=o(t);this.pricePanOffset=r+(i-r)*n,this.render(),t<1?this.scrollAnimId=requestAnimationFrame(s):this.scrollAnimId=null};this.scrollAnimId=requestAnimationFrame(s)}_revealPrices(e){var t,n;if(this.dataStore.length===0||this._lastInCompareMode)return;let{priceH:r}=this.getChartLayout(),i=(t=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):t,a=(n=this._lockedAutoFitBase)==null?i:n,o=Su(i,e,r,24,(a.max-a.min)*10);if(!o)return;this.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null),this._lockedAutoFitBase||(this._lockedAutoFitBase={...i});let{factor:s,panOffset:c}=Cu(this._lockedAutoFitBase,o),l=this.priceScaleFactor,u=this.pricePanOffset;if(Math.abs(s-l)<1e-9&&Math.abs(c-u)<1e-9)return;let d=performance.now(),f=e=>e<.5?2*e*e:-1+(4-2*e)*e,p=e=>{let t=Math.min((e-d)/350,1),n=f(t);this.priceScaleFactor=l+(s-l)*n,this.pricePanOffset=u+(c-u)*n,this.render(),t<1?this.scrollAnimId=requestAnimationFrame(p):(this.scrollAnimId=null,this.scheduleViewportPersist())};this.scrollAnimId=requestAnimationFrame(p)}_currentMarketPrice(){var e,t;let n=this.liveBidAsk;if(n)return n.ask||n.bid;let r=this.dataStore.all;return(e=(t=r[r.length-1])==null?void 0:t.close)==null?0:e}resetPriceAxis(){this.priceScaleFactor=1,this.pricePanOffset=0,this._lockedAutoFitBase=null,this.scheduleRender()}resetTimeAxis(){this.panHandler.cancel();let e=this.dataStore.length;if(e===0)return;let t=Fd(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars);this._defaultVisibleBars=t;let n=Math.max(0,e-t+Id);this.viewport={...this.viewport,startIndex:n,endIndex:e+Id},this._targetViewport={...this.viewport},this.scheduleRender()}resetView(){this.resetPriceAxis(),this.resetTimeAxis()}applyOverlayLabelStyles(){for(let e of[this.loadingLabelEl,this.noDataLabelEl])e&&Object.assign(e.style,{color:this.theme.tooltip.text,background:this.theme.tooltip.background,border:`1px solid ${this.theme.tooltip.border}`})}applyResetViewBtnStyles(){this.resetViewBtn&&(this.resetViewBtn.innerHTML=Tn(this.theme.axisText,16),Object.assign(this.resetViewBtn.style,{position:`absolute`,bottom:`${this.timeAxisHeight+8}px`,left:`50%`,transform:`translateX(-50%)`,zIndex:`100`,width:`32px`,height:`32px`,padding:`0`,display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:this.theme.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`50%`,cursor:`pointer`,outline:`none`,boxShadow:`0 2px 6px rgba(0,0,0,0.25)`,opacity:`0`,pointerEvents:`none`,transition:`opacity 0.2s ease`}))}applyScrollToEndBtnStyles(){if(!this.scrollToEndBtn)return;let e=this.theme.ui.scrollToEndBtnBg,t=e?`#ffffff`:this.theme.axisText,n=e==null?this.theme.background:e,r=e==null?this.theme.axisBorder:e;this.scrollToEndBtn.innerHTML=wn(t,16),Object.assign(this.scrollToEndBtn.style,{position:`absolute`,bottom:`${this.timeAxisHeight+8}px`,right:`${this.priceAxisWidth+8}px`,zIndex:`100`,width:`32px`,height:`32px`,padding:`0`,display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:n,border:`1px solid ${r}`,borderRadius:`50%`,cursor:`pointer`,outline:`none`,boxShadow:`0 2px 6px rgba(0,0,0,0.25)`,opacity:`0`,pointerEvents:`none`,transition:`opacity 0.2s ease`})}};gd=zd,gd.DRAW_GESTURE_THRESHOLD=4,gd.TOUCH_HANDLE_SLOP_PX=18,gd.TRADE_DRAG_PIXEL_THRESHOLD=3,gd.AXIS_LOCK_PIXEL_THRESHOLD=6;var Bd={toolbar:[{id:`compare`,label:`Compare / Add Symbol`,available:!0},{id:`indicatorTemplates`,label:`Indicator Templates`,available:!1,note:`save and load sets of indicators`},{id:`saveLayout`,label:`Save Chart Layout`,available:!1,note:`the app can already save the stateChange JSON itself; the chart has no named-layout manager`},{id:`manageLayouts`,label:`Manage Saved Layouts`,available:!1},{id:`quickSearch`,label:`Quick Search`,available:!1,note:`search all chart commands`},{id:`snapshot`,label:`Snapshot`,available:!0},{id:`chartSettingTemplates`,label:`Chart Setting Templates`,available:!1},{id:`applyToAllCharts`,label:`Apply to All Charts`,available:!1}],timeframes:[{id:`1m`,label:`1m`,available:!0,isShow:!0},{id:`3m`,label:`3m`,available:!0,isShow:!1},{id:`4m`,label:`4m`,available:!0,isShow:!1},{id:`5m`,label:`5m`,available:!0,isShow:!0},{id:`10m`,label:`10m`,available:!0,isShow:!1},{id:`15m`,label:`15m`,available:!0,isShow:!0},{id:`30m`,label:`30m`,available:!0,isShow:!0},{id:`1h`,label:`1H`,available:!0,isShow:!0},{id:`2h`,label:`2H`,available:!0,isShow:!1},{id:`4h`,label:`4H`,available:!0,isShow:!0},{id:`8h`,label:`8H`,available:!0,isShow:!1},{id:`1D`,label:`1D`,available:!0,isShow:!0},{id:`1W`,label:`1W`,available:!0,isShow:!0},{id:`1M`,label:`1M`,available:!0,isShow:!0}],durations:[{id:`1D`,label:`1D`,available:!0},{id:`5D`,label:`5D`,available:!0},{id:`1M`,label:`1M`,available:!0},{id:`3M`,label:`3M`,available:!0},{id:`6M`,label:`6M`,available:!0},{id:`1Y`,label:`1Y`,available:!0},{id:`5Y`,label:`5Y`,available:!0},{id:`All`,label:`All`,available:!0}],seriesTypes:[{id:`candlestick`,label:`Candles`,available:!0,isShow:!0},{id:`hollow`,label:`Hollow`,available:!0,isShow:!0},{id:`ohlc`,label:`OHLC`,available:!0,isShow:!0},{id:`line`,label:`Line`,available:!0,isShow:!0},{id:`area`,label:`Area`,available:!0,isShow:!0},{id:`heikinashi`,label:`Heikin Ashi`,available:!0,isShow:!0},{id:`volumecandles`,label:`Volume Candles`,available:!0,isShow:!0},{id:`linemarkers`,label:`Line with Markers`,available:!0,isShow:!0},{id:`step`,label:`Step Line`,available:!0,isShow:!0},{id:`hlcarea`,label:`HLC Area`,available:!0,isShow:!0},{id:`baseline`,label:`Baseline`,available:!0,isShow:!0},{id:`columns`,label:`Columns`,available:!0,isShow:!0},{id:`highlow`,label:`High-Low`,available:!0,isShow:!1},{id:`hlcBars`,label:`HLC Bars`,available:!1,isShow:!0},{id:`renko`,label:`Renko`,available:!1,isShow:!0},{id:`lineBreak`,label:`Line Break`,available:!1,isShow:!0},{id:`kagi`,label:`Kagi`,available:!1,isShow:!0},{id:`pointFigure`,label:`Point & Figure`,available:!1,isShow:!0}],cursors:[{id:`cross`,label:`Cross`,available:!0},{id:`dot`,label:`Dot`,available:!1},{id:`arrow`,label:`Arrow`,available:!1},{id:`demonstration`,label:`Demonstration`,available:!1},{id:`eraser`,label:`Eraser`,available:!1,note:`today only 'remove all drawings' exists`},{id:`valueTooltip`,label:`Value Tooltip on Long Press`,available:!0,note:`mobile long-press crosshair with price/time readout`}],drawingGroups:[{id:`trend_lines`,label:`Trend Lines & Channels`,iconKey:`trend_lines`,available:!0,tools:[{id:`trendLine`,label:`Trendline`,iconKey:`trend_line`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`trendAngle`,label:`Trend By Angle`,iconKey:`trend_angle`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`horizontalLine`,label:`Horizontal Line`,iconKey:`horizontal_line`,points:1,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`verticalLine`,label:`Vertical Line`,iconKey:`vertical_line`,points:1,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`crossLine`,label:`Cross Line`,iconKey:`cross_line`,points:1,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`parallelChannel`,label:`Parallel Channel`,iconKey:`parallel_channel`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`disjointChannel`,label:`Disjoint Channel`,iconKey:`disjoint_channel`,points:4,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`flatChannel`,label:`Flat Top/Bottom Channel`,iconKey:`flat_channel`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`ray`,label:`Ray`,iconKey:`ray`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!1},{id:`infoLine`,label:`Info Line`,iconKey:`info_line`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!1},{id:`extendedLine`,label:`Extended Line`,iconKey:`extended_line`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!1},{id:`horizontalRay`,label:`Horizontal Ray`,iconKey:`horizontal_ray`,points:1,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!1}]},{id:`fibonacci_gann`,label:`Fibonacci & Gann Tools`,iconKey:`fibonacci_gann`,available:!0,tools:[{id:`fibRetracement`,label:`Fibonacci Retracement`,iconKey:`fib_retracement`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`fibExtension`,label:`Fibonacci Extension`,iconKey:`fib_extension`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`fibChannel`,label:`Fibonacci Channel`,iconKey:`fib_channel`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`fibTimezone`,label:`Fibonacci Timezone`,iconKey:`fib_timezone`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`fibCircles`,label:`Fibonacci Circles`,iconKey:`fib_circles`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`fibSpiral`,label:`Fibonacci Spiral`,iconKey:`fib_spiral`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`fibFan`,label:`Fibonacci Speed Resistance Fan`,iconKey:`fib_fan`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`gannFan`,label:`Gann Fan`,iconKey:`gann_fan`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`gannSquare`,label:`Gann Square`,iconKey:`gann_square`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`gannBox`,label:`Gann Box`,iconKey:`gann_box`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`trendBasedFibTime`,label:`Trend-Based Fib Time`,iconKey:`trend_based_fib_time`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`fibSpeedResistanceArcs`,label:`Fib Speed Resistance Arcs`,iconKey:`fib_speed_resistance_arcs`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`fibWedge`,label:`Fib Wedge`,iconKey:`fib_wedge`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`pitchfan`,label:`Pitchfan`,iconKey:`pitchfan`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`gannSquareFixed`,label:`Gann Square Fixed`,iconKey:`gann_square_fixed`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1}]},{id:`geometric_shapes`,label:`Geometric Shapes`,iconKey:`geometric_shapes`,available:!0,tools:[{id:`rectangle`,label:`Rectangle`,iconKey:`rectangle`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`rotatedRectangle`,label:`Rotated Rectangle`,iconKey:`rotated_rectangle`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`ellipse`,label:`Ellipse`,iconKey:`ellipse`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`triangle`,label:`Triangle`,iconKey:`triangle`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`circle`,label:`Circle`,iconKey:`circle`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`arc`,label:`Arc`,iconKey:`arc`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`polyline`,label:`Polyline`,iconKey:`polyline`,points:`multi`,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`path`,label:`Path`,iconKey:`path`,points:`multi`,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`curve`,label:`Curve`,iconKey:`curve`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`doubleCurve`,label:`Double Curve`,iconKey:`double_curve`,points:4,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1}]},{id:`measurement_tools`,label:`Measurement Tools`,iconKey:`measurement_tools`,available:!0,tools:[{id:`priceRange`,label:`Price Range`,iconKey:`price_range`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`dateRange`,label:`Date Range`,iconKey:`date_range`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`datePriceRange`,label:`Date & Price Range`,iconKey:`date_price_range`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`ruler`,label:`Ruler`,iconKey:`ruler`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0}]},{id:`forecasting`,label:`Forecasting`,iconKey:`forecasting`,available:!0,tools:[{id:`longPosition`,label:`Long Position`,iconKey:`long_position`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`shortPosition`,label:`Short Position`,iconKey:`short_position`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`forecast`,label:`Forecast`,iconKey:`forecast`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`barsPattern`,label:`Bars Pattern`,iconKey:`bars_pattern`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1},{id:`anchoredVWAP`,label:`Anchored VWAP`,iconKey:`anchored_v_w_a_p`,points:1,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1}]},{id:`pitchfork_tools`,label:`Pitchfork Tools`,iconKey:`pitchfork_tools`,available:!0,tools:[{id:`pitchfork`,label:`Pitchfork`,iconKey:`pitchfork`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`schiffPitchfork`,label:`Schiff Pitchfork`,iconKey:`schiff_pitchfork`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`modifiedSchiff`,label:`Modified Schiff Pitchfork`,iconKey:`modified_schiff`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`insidePitchfork`,label:`Inside Pitchfork`,iconKey:`inside_pitchfork`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0}]},{id:`volume_statistics`,label:`Volume & Statistical Tools`,iconKey:`volume_statistics`,available:!0,tools:[{id:`fixedRangeVP`,label:`Fixed Range Volume Profile`,iconKey:`fixed_range_v_p`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`anchoredVP`,label:`Anchored Volume Profile`,iconKey:`anchored_v_p`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`volumeProfile`,label:`Volume Profile`,iconKey:`volume_profile`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`regressionTrend`,label:`Regression Trend`,iconKey:`regression_trend`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0}]},{id:`annotation_tools`,label:`Annotation Tools`,iconKey:`annotation_tools`,available:!0,tools:[{id:`text`,label:`Text`,iconKey:`text`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`callout`,label:`Callout`,iconKey:`callout`,points:2,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`priceLabel`,label:`Price Label`,iconKey:`price_label`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`arrowMarker`,label:`Arrow Marker`,iconKey:`arrow_marker`,points:2,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`flag`,label:`Flag`,iconKey:`flag`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`priceNote`,label:`Price Note`,iconKey:`price_note`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`anchoredNote`,label:`Anchored Note`,iconKey:`anchored_note`,points:2,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`arrowUp`,label:`Arrow Up`,iconKey:`arrow_up`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`arrowDown`,label:`Arrow Down`,iconKey:`arrow_down`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!0},{id:`arrowLine`,label:`Arrow`,iconKey:`arrow_line`,points:2,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`arrowMarkLeft`,label:`Arrow Mark Left`,iconKey:`arrow_mark_left`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`arrowMarkRight`,label:`Arrow Mark Right`,iconKey:`arrow_mark_right`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`anchoredText`,label:`Anchored Text`,iconKey:`anchored_text`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`note`,label:`Note`,iconKey:`note`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`pin`,label:`Pin`,iconKey:`pin`,points:1,hasText:!1,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`table`,label:`Table`,iconKey:`table`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`comment`,label:`Comment`,iconKey:`comment`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!1},{id:`signpost`,label:`Signpost`,iconKey:`signpost`,points:1,hasText:!0,styleFields:[`strokeColor`,`fontSize`],available:!1}]},{id:`pattern_recognition`,label:`Pattern Recognition`,iconKey:`pattern_recognition`,available:!0,tools:[{id:`headShoulders`,label:`Head & Shoulders`,iconKey:`head_shoulders`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`trianglePattern`,label:`Triangle Pattern`,iconKey:`triangle_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`threeDrives`,label:`3 Drives Pattern`,iconKey:`three_drives`,points:7,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`abcdPattern`,label:`ABCD Pattern`,iconKey:`abcd_pattern`,points:4,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`cypherPattern`,label:`Cypher Pattern`,iconKey:`cypher_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`butterflyPattern`,label:`Butterfly Pattern`,iconKey:`butterfly_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`batPattern`,label:`Bat Pattern`,iconKey:`bat_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`gartleyPattern`,label:`Gartley Pattern`,iconKey:`gartley_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`crabPattern`,label:`Crab Pattern`,iconKey:`crab_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`sharkPattern`,label:`Shark Pattern`,iconKey:`shark_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`xabcdPattern`,label:`XABCD Pattern`,iconKey:`xabcd_pattern`,points:5,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!1}]},{id:`elliott_wave`,label:`Elliott Wave Tools`,iconKey:`elliott_wave`,available:!0,tools:[{id:`elliottImpulse`,label:`Elliott Impulse (12345)`,iconKey:`elliott_impulse`,points:6,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`elliottCorrective`,label:`Elliott Corrective (ABC)`,iconKey:`elliott_corrective`,points:4,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`elliottTriangle`,label:`Elliott Wave Triangle`,iconKey:`elliott_triangle`,points:6,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`elliottCombination`,label:`Elliott Wave Combination`,iconKey:`elliott_combination`,points:7,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`elliottWxy`,label:`Elliott Double Three (WXY)`,iconKey:`elliott_wxy`,points:4,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`elliottTripleCombo`,label:`Elliott Triple Combo Wave (WXYXZ)`,iconKey:`elliott_triple_combo`,points:6,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!1}]},{id:`brush_highlighter`,label:`Brush & Highlighter`,iconKey:`brush_highlighter`,available:!0,tools:[{id:`brush`,label:`Brush`,iconKey:`brush`,points:`multi`,hasText:!1,styleFields:[`strokeColor`,`lineWidth`],available:!0},{id:`highlighter`,label:`Highlighter`,iconKey:`highlighter`,points:`multi`,hasText:!1,styleFields:[`strokeColor`,`lineWidth`],available:!0}]},{id:`advanced_tools`,label:`Advanced Tools`,iconKey:`advanced_tools`,available:!0,tools:[{id:`ghostFeed`,label:`Ghost Feed`,iconKey:`ghost_feed`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`projection`,label:`Projection`,iconKey:`projection`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`sineLine`,label:`Sine Line`,iconKey:`sine_line`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`cyclicLines`,label:`Cyclic Lines`,iconKey:`cyclic_lines`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0},{id:`timeCycles`,label:`Time Cycles`,iconKey:`time_cycles`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`],available:!0}]},{id:`price_projections`,label:`Price Projection Tools`,iconKey:`price_projections`,available:!0,tools:[{id:`fibProjection`,label:`Fibonacci Projection`,iconKey:`fib_projection`,points:3,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0},{id:`priceProjection`,label:`Price Projection`,iconKey:`price_projection`,points:2,hasText:!1,styleFields:[`strokeColor`,`lineWidth`,`lineStyle`,`fillColor`,`fillOpacity`],available:!0}]},{id:`icons`,label:`Emojis, Stickers & Icons`,iconKey:`icons`,available:!1,tools:[{id:`emoji`,label:`Emojis`,iconKey:`emoji`,points:1,hasText:!1,styleFields:[],available:!1},{id:`sticker`,label:`Stickers`,iconKey:`sticker`,points:1,hasText:!1,styleFields:[],available:!1},{id:`icon`,label:`Icons`,iconKey:`icon`,points:1,hasText:!1,styleFields:[`strokeColor`],available:!1}]}],drawingToolbarOptions:[{id:`magnet`,label:`Magnet Mode`,available:!1,note:`icon exists in the mobile tools sheet but is not wired to the engine`},{id:`keepDrawingMode`,label:`Keep Drawing Mode`,available:!1},{id:`zoomIn`,label:`Zoom In`,available:!1},{id:`copyToAllCharts`,label:`Copy New Drawings to All Charts`,available:!1},{id:`hideDrawingsToolbar`,label:`Hide Drawings Toolbar`,available:!0,note:`showDrawingTools at init`},{id:`lockAllDrawings`,label:`Lock All Drawings`,available:!0},{id:`hideAllDrawings`,label:`Hide All Drawings`,available:!0},{id:`clearAllDrawings`,label:`Remove All Drawings`,available:!0}],drawingStyleDefaults:{strokeColor:`#2962ff`,lineWidth:1,lineStyle:`solid`,fillOpacity:.1,fontSize:13},indicators:[{shortName:`MA`,name:`Moving Average`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#F5A623`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`EMA`,name:`Exponential Moving Average`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#9B59B6`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`WMA`,name:`Weighted Moving Average`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#e91e63`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`HMA`,name:`Hull Moving Average`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#00bcd4`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`MARibbon`,name:`Moving Average Ribbon`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ffcc80`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`BB`,name:`Bollinger Bands`,category:`Volatility`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`number`,key:`stdDev`,label:`Std Dev`,min:.1,max:10,step:.1,default:2},{kind:`color`,key:`color`,label:`Color`,default:`#3B82F6`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`KC`,name:`Keltner Channels`,category:`Volatility`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`number`,key:`mult`,label:`Multiplier`,min:.1,max:10,step:.1,default:2},{kind:`number`,key:`atrPeriod`,label:`ATR Period`,min:1,max:500,step:1,default:10},{kind:`color`,key:`color`,label:`Color`,default:`#4caf50`}]},{shortName:`DC`,name:`Donchian Channels`,category:`Volatility`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#26c6da`}]},{shortName:`ATR`,name:`Average True Range`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff5722`}]},{shortName:`RSI`,name:`Relative Strength Index`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#e8b84b`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`Stoch`,name:`Stochastic Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`kPeriod`,label:`K Period`,min:1,max:500,step:1,default:14},{kind:`number`,key:`dPeriod`,label:`D Period`,min:1,max:100,step:1,default:3},{kind:`color`,key:`color`,label:`Color`,default:`#e040fb`}]},{shortName:`StochRSI`,name:`Stochastic RSI`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`rsiPeriod`,label:`RSI Period`,min:1,max:500,step:1,default:14},{kind:`number`,key:`stochPeriod`,label:`Stoch Period`,min:1,max:500,step:1,default:14},{kind:`number`,key:`kPeriod`,label:`K Smooth`,min:1,max:100,step:1,default:3},{kind:`number`,key:`dPeriod`,label:`D Smooth`,min:1,max:100,step:1,default:3},{kind:`color`,key:`color`,label:`Color`,default:`#00e5ff`}]},{shortName:`MACD`,name:`MACD`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`fast`,label:`Fast Period`,min:1,max:500,step:1,default:12},{kind:`number`,key:`slow`,label:`Slow Period`,min:1,max:500,step:1,default:26},{kind:`number`,key:`signal`,label:`Signal Period`,min:1,max:100,step:1,default:9},{kind:`color`,key:`color`,label:`Color`,default:`#2196f3`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`CCI`,name:`Commodity Channel Index`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#4db6ac`}]},{shortName:`%R`,name:`Williams %R`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff7043`}]},{shortName:`ROC`,name:`Rate of Change`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:12},{kind:`color`,key:`color`,label:`Color`,default:`#80cbc4`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}]},{shortName:`OBV`,name:`On Balance Volume`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#aed581`}]},{shortName:`VOL`,name:`Volume`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`color`,key:`upColor`,label:`Up Color`,default:`#26a69a`},{kind:`color`,key:`downColor`,label:`Down Color`,default:`#ef5350`}]},{shortName:`VWAP`,name:`Volume Weighted Average Price`,category:`Volume`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#9c27b0`}]},{shortName:`A/D`,name:`Accumulation/Distribution`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ce93d8`}]},{shortName:`MFI`,name:`Money Flow Index`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ffab40`}]},{shortName:`CMF`,name:`Chaikin Money Flow`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#80deea`}]},{shortName:`Pivot`,name:`Pivot Points Standard`,category:`Support/Resistance`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ffd54f`}]},{shortName:`Fib`,name:`Fibonacci Retracement`,category:`Support/Resistance`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`lookback`,label:`Lookback`,min:1,max:500,step:1,default:50},{kind:`color`,key:`color`,label:`Color`,default:`#e1bee7`}]},{shortName:`Supertrend`,name:`Supertrend`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`atrPeriod`,label:`ATR Period`,min:1,max:500,step:1,default:10},{kind:`number`,key:`multiplier`,label:`Multiplier`,min:.1,max:20,step:.1,default:3},{kind:`color`,key:`color`,label:`Color`,default:`#26a69a`}]},{shortName:`PSAR`,name:`Parabolic SAR`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`step`,label:`Step`,min:.001,max:.1,step:.001,default:.02},{kind:`number`,key:`maxAF`,label:`Max AF`,min:.01,max:1,step:.01,default:.2},{kind:`color`,key:`color`,label:`Color`,default:`#ff6b9d`}]},{shortName:`Ichimoku`,name:`Ichimoku Cloud`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`tenkan`,label:`Tenkan Period`,min:1,max:100,step:1,default:9},{kind:`number`,key:`kijun`,label:`Kijun Period`,min:1,max:200,step:1,default:26},{kind:`number`,key:`senkouB`,label:`Senkou B Period`,min:1,max:500,step:1,default:52},{kind:`color`,key:`color`,label:`Color`,default:`#b0bec5`}]},{shortName:`ADX`,name:`ADX`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#fff176`}]},{shortName:`AO`,name:`Awesome Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`fastPeriod`,label:`Fast Period`,min:1,max:100,step:1,default:5},{kind:`number`,key:`slowPeriod`,label:`Slow Period`,min:1,max:200,step:1,default:34},{kind:`color`,key:`color`,label:`Color`,default:`#b0bec5`}]},{shortName:`HA`,name:`Heikin Ashi`,category:`Price Transformation`,pane:`main`,multiInstance:!0,isShow:!1,available:!0,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#90a4ae`},{kind:`color`,key:`upColor`,label:`Up Color`,default:`#26a69a`},{kind:`color`,key:`downColor`,label:`Down Color`,default:`#ef5350`}]},{shortName:`LinReg`,name:`Linear Regression`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!0,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff9800`}]},{shortName:`52WHL`,name:`52 Week High/Low`,category:`Price`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`AC`,name:`Accelerator Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`ASI`,name:`Accumulative Swing Index`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`AD_LINE`,name:`Advance/Decline`,category:`Breadth`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`ALMA`,name:`Arnaud Legoux MA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`AROON`,name:`Aroon`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`AVGPRICE`,name:`Average Price`,category:`Price`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`BOP`,name:`Balance of Power`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`BBPB`,name:`Bollinger Bands %B`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`BBW`,name:`Bollinger Bands Width`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CHO`,name:`Chaikin Oscillator`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CHV`,name:`Chaikin Volatility`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CKS`,name:`Chande Kroll Stop`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CMO`,name:`Chande Momentum Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CHOPZONE`,name:`Chop Zone`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CHOP`,name:`Choppiness Index`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CRSI`,name:`Connors RSI`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`COPPOCK`,name:`Coppock Curve`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CORRLOG`,name:`Correlation – Log`,category:`Statistics`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`CORREL`,name:`Correlation Coefficient`,category:`Statistics`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`DPO`,name:`Detrended Price Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`DMI`,name:`Directional Movement (DMI)`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`DEMA`,name:`Double EMA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`EOM`,name:`Ease of Movement`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`EFI`,name:`Elder's Force Index`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`EMACROSS`,name:`EMA Cross`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`ENV`,name:`Envelopes`,category:`Volatility`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`FISHER`,name:`Fisher Transform`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`GMMA`,name:`Guppy Multiple MA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`HV`,name:`Historical Volatility`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`KVO`,name:`Klinger Oscillator`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`KST`,name:`Know Sure Thing`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`LSMA`,name:`Least Squares MA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`LRSLOPE`,name:`Linear Regression Slope`,category:`Trend`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MACROSS`,name:`MA Cross`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MAEMACROSS`,name:`MA with EMA Cross`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MAJRULE`,name:`Majority Rule`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MI`,name:`Mass Index`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MGD`,name:`McGinley Dynamic`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MEDPRICE`,name:`Median Price`,category:`Price`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MOM`,name:`Momentum`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`KAMA`,name:`MA Adaptive`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MACHANNEL`,name:`MA Channel`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MADOUBLE`,name:`MA Double`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MAHAMMING`,name:`MA Hamming`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MAMULTI`,name:`MA Multiple`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`MATRIPLE`,name:`MA Triple`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`NETVOL`,name:`Net Volume`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`PC`,name:`Price Channel`,category:`Volatility`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`PPO`,name:`Price Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`PVT`,name:`Price Volume Trend`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`RCI`,name:`Rank Correlation Index`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`RATIO`,name:`Ratio`,category:`Statistics`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`RVGI`,name:`Relative Vigor Index`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`RVI`,name:`Relative Volatility Index`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`SMII`,name:`SMI Ergodic Indicator/Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`SMMA`,name:`Smoothed MA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`SPREAD`,name:`Spread`,category:`Statistics`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`STDDEV`,name:`Standard Deviation`,category:`Statistics`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`STDERR`,name:`Standard Error`,category:`Statistics`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`SEB`,name:`Standard Error Bands`,category:`Volatility`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`TSI_STR`,name:`Trend Strength Index`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`TEMA`,name:`Triple EMA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`TRIX`,name:`TRIX`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`TSI`,name:`True Strength Index`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`TYPPRICE`,name:`Typical Price`,category:`Price`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`UO`,name:`Ultimate Oscillator`,category:`Momentum`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VOLCC`,name:`Volatility Close-to-Close`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VIX`,name:`Volatility Index`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VOLOHLC`,name:`Volatility O-H-L-C`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VOLZTCC`,name:`Volatility Zero Trend Close-to-Close`,category:`Volatility`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VO`,name:`Volume Oscillator`,category:`Volume`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VPVR`,name:`Volume Profile Visible Range`,category:`Volume`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VI`,name:`Vortex Indicator`,category:`Trend Strength`,pane:`sub`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`VWMA`,name:`VWMA`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`ALLIGATOR`,name:`Williams Alligator`,category:`Trend`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`FRACTAL`,name:`Williams Fractal`,category:`Price`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]},{shortName:`ZIGZAG`,name:`Zig Zag`,category:`Price`,pane:`main`,multiInstance:!0,isShow:!0,available:!1,fields:[]}],chartSettings:{title:`Chart Settings`,available:!0,reset:{id:`reset`,label:`Reset to Defaults`,type:`action`,available:!0},tabs:[{id:`appearance`,label:`Appearance`,available:!0,sections:[{id:`theme`,label:`Theme`,available:!0,note:`row is shown only when the host enables enableThemeToggle`,items:[{id:`theme`,label:`Theme`,type:`toggle`,options:[{value:`dark`,label:`Dark`},{value:`light`,label:`Light`}],default:`dark`,available:!0}]},{id:`colors`,label:`Colors`,available:!0,note:`applies to the plot only (canvasColors / setCanvasColors), separately per theme`,items:[{id:`background`,label:`Background`,type:`color`,keys:[`background`],available:!0,default:{dark:`#141d22`,light:`#ffffff`}},{id:`grid`,label:`Grid`,type:`color`,keys:[`grid`],available:!0,default:{dark:`#243344`,light:`#efefef`}},{id:`axisText`,label:`Axis Text`,type:`color`,keys:[`axisText`],available:!0,default:{dark:`#a8bac8`,light:`#666666`}},{id:`axisBorder`,label:`Axis Border`,type:`color`,keys:[`axisBorder`],available:!0,default:{dark:`#1c2a35`,light:`#cccccc`}},{id:`crosshair`,label:`Crosshair`,type:`color`,keys:[`crosshair`],available:!0,default:{dark:`rgba(255,255,255,0.4)`,light:`#999999`}},{id:`candleBody`,label:`Candle Body`,type:`color`,keys:[`candleUp`,`candleDown`],available:!0,default:{dark:[`#5caf79`,`#DF6868`],light:[`#5caf79`,`#DF6868`]}},{id:`candleWick`,label:`Candle Wick`,type:`color`,keys:[`wickUp`,`wickDown`],available:!0,default:{dark:[`#5caf79`,`#DF6868`],light:[`#5caf79`,`#DF6868`]}},{id:`candleBorder`,label:`Candle Border`,type:`color`,keys:[`borderUp`,`borderDown`],available:!0,default:{dark:[`#5caf79`,`#DF6868`],light:[`#5caf79`,`#DF6868`]}},{id:`volume`,label:`Volume`,type:`color`,keys:[`volumeUp`,`volumeDown`],available:!0,default:{dark:[`rgba(92,175,121,0.4)`,`rgba(223,104,104,0.4)`],light:[`rgba(92,175,121,0.6)`,`rgba(223,104,104,0.6)`]}}]},{id:`chartElements`,label:`Chart elements`,available:!0,items:[{id:`priceAxisCountdown`,label:`Price-axis countdown`,description:`Show the candle close countdown on the right price axis.`,type:`toggle`,default:!1,available:!0}]}]},{id:`trading`,label:`Trading`,available:!0,sections:[{id:`tfc`,label:`Trade from Charts`,available:!0,items:[{id:`tradeDisplayFilter`,label:`Show`,description:`Controls which trade levels are displayed on the chart`,type:`segmented`,options:[{value:`all`,label:`All`},{value:`positions`,label:`Positions Only`},{value:`orders`,label:`Orders Only`},{value:`none`,label:`None`}],default:`all`,available:!0},{id:`positionRenderStyle`,label:`Position Style`,description:`How open positions are rendered on the chart`,type:`segmented`,options:[{value:`line`,label:`Full Line`},{value:`dot`,label:`Dot`}],default:`line`,available:!0,note:`switches to Dot automatically above tradesThresholdForHorizontalLine levels unless the user picked a style`},{id:`showTradeLevelsAlways`,label:`Always show SL/TP`,description:`Keep stop-loss and take-profit lines visible without hovering.`,type:`toggle`,default:!0,available:!0}]}]},{id:`symbol`,label:`Symbol`,available:!1,sections:[{id:`symbol`,label:`Symbol`,available:!1,items:[{id:`colorBarsByPrevClose`,label:`Color bars based on previous close`,type:`toggle`,default:!1,available:!1},{id:`pricePrecision`,label:`Price precision`,type:`select`,options:[{value:`default`,label:`Default`},{value:0,label:`1`},{value:1,label:`0.1`},{value:2,label:`0.01`},{value:3,label:`0.001`},{value:4,label:`0.0001`},{value:5,label:`0.00001`}],default:`default`,available:!1},{id:`timezone`,label:`Timezone`,type:`select`,default:`UTC`,available:!0,note:`works today via config timezone / setTimezone(); not yet in the settings dialog`}]}]},{id:`statusLine`,label:`Status line`,available:!1,sections:[{id:`statusLine`,label:`Status line`,available:!1,note:`today only hideSymbolAndTick / hideOHLCV at init`,items:[{id:`showSymbol`,label:`Symbol`,type:`toggle`,default:!0,available:!1},{id:`showOHLC`,label:`OHLC values`,type:`toggle`,default:!0,available:!1},{id:`showVolume`,label:`Volume`,type:`toggle`,default:!0,available:!1},{id:`showIndicatorTitles`,label:`Indicator titles`,type:`toggle`,default:!0,available:!1},{id:`showIndicatorValues`,label:`Indicator values`,type:`toggle`,default:!0,available:!1}]}]},{id:`scales`,label:`Scales and lines`,available:!1,sections:[{id:`scales`,label:`Scales and lines`,available:!1,items:[{id:`showLastPriceLabel`,label:`Last price label`,type:`toggle`,default:!0,available:!1},{id:`showBidAskLines`,label:`Bid / Ask lines`,type:`toggle`,default:!1,available:!1,note:`exists as config showBidAskLines; not in the dialog`},{id:`scaleMode`,label:`Scale`,type:`select`,options:[{value:`regular`,label:`Regular`},{value:`percent`,label:`Percent`},{value:`log`,label:`Logarithmic`}],default:`regular`,available:!1}]}]},{id:`canvas`,label:`Canvas`,available:!1,sections:[{id:`canvas`,label:`Canvas`,available:!1,note:`background and grid colours already exist under Appearance > Colors`,items:[{id:`gridLines`,label:`Grid lines`,type:`select`,options:[{value:`both`,label:`Vert and horz`},{value:`vertical`,label:`Vert only`},{value:`horizontal`,label:`Horz only`},{value:`none`,label:`None`}],default:`both`,available:!1},{id:`watermark`,label:`Watermark`,type:`toggle`,default:!1,available:!1,note:`today only showActLogo at init`}]}]},{id:`templates`,label:`Templates`,available:!1,sections:[{id:`templates`,label:`Templates`,available:!1,items:[{id:`saveTemplate`,label:`Save as template`,type:`action`,available:!1},{id:`applyTemplate`,label:`Apply template`,type:`select`,available:!1},{id:`applyToAllCharts`,label:`Apply to all charts`,type:`action`,available:!1}]}]}]},canvasColorKeys:[`background`,`grid`,`axisText`,`axisBorder`,`crosshair`,`candleUp`,`candleDown`,`wickUp`,`wickDown`,`borderUp`,`borderDown`,`volumeUp`,`volumeDown`],priceSources:[`bid`,`ask`,`ltp`],limits:{maxSubPanes:3,maxCompares:8}};function Vd(){$(`catalog`,{catalogVersion:`1.3.0-beta.26`,...Bd})}var Q=null,Hd=new Map,Ud=new Map,Wd=0;function Gd(){return`dr_${Date.now()}_${Wd++}`}function Kd(){return`cr_${Date.now()}_${Wd++}`}function $(e,t){var n;let r=JSON.stringify({type:e,payload:t});window.ChartAndroidBridge?window.ChartAndroidBridge.postMessage(r):!((n=window.webkit)==null||(n=n.messageHandlers)==null)&&n.chartBridge?window.webkit.messageHandlers.chartBridge.postMessage(r):window.ReactNativeWebView&&window.ReactNativeWebView.postMessage(r)}function qd(e={}){var t;Q==null||Q.destroy();let n=document.getElementById(`chart`),{enableTrading:r,onSymbolClick:i,onAskAiClick:a,orderLineTimeDrag:o,enableForecasting:s,...c}=e,l={...c.features,...o?{orderLineTimeDrag:!0}:{},...s?{enableForecasting:!0}:{}},u=(t=c.timeframe)==null?`1D`:t;Q=new zd({theme:`dark`,...c,...Object.keys(l).length>0?{features:l}:{},container:n,dataLoader:e=>{for(let[,e]of Hd)e.reject(Error(`cancelled`));Hd.clear();let t=Gd(),n=Q==null?void 0:Q.getState();return new Promise((r,i)=>{var a;Hd.set(t,{resolve:r,reject:i}),$(`dataRequest`,{requestId:t,timeframe:(a=n==null?void 0:n.timeframe)==null?u:a,interval:e.interval,start:e.start.getTime(),end:e.end.getTime(),priceSource:e.priceSource})})},compareDataLoader:e=>{let t=Kd(),n=Q==null?void 0:Q.getState();return new Promise((r,i)=>{var a;Ud.set(t,{resolve:r,reject:i}),$(`compareDataRequest`,{requestId:t,symbol:e.symbol,timeframe:(a=n==null?void 0:n.timeframe)==null?u:a,interval:e.interval,start:e.start.getTime(),end:e.end.getTime()})})},...r?{onOrderSubmit:e=>{var t;$(`placeOrder`,{price:e.price,side:e.side,orderType:(t=e.orderType)==null?`limit`:t})}}:{},...i?{onSymbolClick:e=>{$(`symbolClick`,{symbol:e})}}:{},...a?{onAskAiClick:()=>{$(`askAiClick`,{})}}:{}}),Q.on(`timeframeChange`,({timeframe:e})=>{u=e}),Q.on(`crosshair`,e=>$(`crosshair`,e)),Q.on(`click`,e=>$(`barClick`,e)),Q.on(`zoom`,({viewport:e})=>$(`viewportChange`,{viewport:e})),Q.on(`pan`,({viewport:e})=>$(`viewportChange`,{viewport:e})),Q.on(`seriesChange`,e=>$(`seriesChange`,e)),Q.on(`priceSourceChange`,e=>$(`priceSourceChange`,e)),Q.on(`timeframeChange`,e=>$(`timeframeChange`,e)),Q.on(`durationChange`,e=>$(`durationChange`,e)),Q.on(`stateChange`,e=>$(`stateChange`,e)),Q.on(`dataLoaded`,e=>$(`dataLoaded`,e)),Q.on(`newBar`,e=>$(`newBar`,e)),Q.on(`streamStatus`,e=>$(`streamStatus`,e)),Q.on(`tradeLevelClose`,e=>$(`tradeLevelClose`,e)),Q.on(`tradeLevelDrag`,e=>$(`tradeLevelDrag`,e)),Q.on(`tradeLevelDragStart`,e=>$(`tradeLevelDragStart`,e)),Q.on(`tradeLevelEdit`,e=>$(`tradeLevelEdit`,e)),Q.on(`tradeLevelQtyChange`,e=>$(`tradeLevelQtyChange`,e)),Q.on(`tradeLevelConfirmed`,e=>$(`tradeLevelConfirmed`,e)),Q.on(`tradeLevelEditOpen`,e=>$(`tradeLevelEditOpen`,e)),Q.on(`tradeLevelBracketActivated`,e=>$(`tradeLevelBracketActivated`,e)),Q.on(`draftInitiated`,e=>$(`draftInitiated`,e)),Q.on(`draftCancelled`,e=>$(`draftCancelled`,e)),Q.on(`uiStateChange`,e=>$(`uiStateChange`,e)),Q.on(`orderLineMoveStart`,e=>$(`orderLineMoveStart`,e)),Q.on(`orderLineMoving`,e=>$(`orderLineMoving`,e)),Q.on(`orderLineMoved`,e=>$(`orderLineMoved`,e)),Q.on(`crosshairToggle`,e=>$(`crosshairToggle`,e)),Q.on(`compareAdded`,e=>$(`compareAdded`,e)),Q.on(`compareRemoved`,e=>$(`compareRemoved`,e)),Q.on(`compareError`,e=>$(`compareError`,e)),Q.on(`indicatorAdded`,e=>$(`indicatorAdded`,e)),Q.on(`indicatorRemoved`,e=>$(`indicatorRemoved`,e))}function Jd(e){if(e.type===`init`){qd(e.payload),Vd();return}if(e.type===`getCatalog`){Vd();return}if(!Q){$(`error`,{message:`Engine not initialized. Send an "init" command first.`});return}switch(e.type){case`loadData`:Q.loadData(e.payload.bars,e.payload.fitAll);break;case`pushTick`:Q.pushTick(e.payload);break;case`setTheme`:Q.setTheme(e.payload.theme);break;case`setTimezone`:Q.setTimezone(e.payload.timezone);break;case`setShowLtpPrice`:Q.setShowLtpPrice(e.payload.show);break;case`setShowAskLine`:Q.setShowAskLine(e.payload.show);break;case`setShowBidLine`:Q.setShowBidLine(e.payload.show);break;case`setTickClosePriceSource`:Q.setTickClosePriceSource(e.payload.source);break;case`setLayoutSync`:Q.setLayoutSync(e.payload);break;case`setCrosshairEnabled`:Q.setCrosshairEnabled(e.payload.enabled===!0);break;case`setSeries`:Q.setSeries(e.payload.series);break;case`setDuration`:Q.setDuration(e.payload.duration,e.payload.timeframe);break;case`setTimeframe`:Q.setTimeframe(e.payload.timeframe);break;case`setSymbol`:Q.setSymbol(e.payload.symbol);break;case`setInstrument`:Q.setInstrument(e.payload.instrument);break;case`setAccount`:Q.setAccount(e.payload.account);break;case`addIndicator`:Q.addIndicatorByName(e.payload.shortName,e.payload.params);break;case`removeIndicator`:Q.removeIndicator(e.payload.name);break;case`setDrawingTool`:Q.setDrawingTool(e.payload.tool);break;case`clearAllDrawings`:Q.clearAllDrawings();break;case`getState`:$(`stateSnapshot`,Q.getState());break;case`setState`:Q.setState(e.payload);break;case`resolveDataRequest`:{let t=Hd.get(e.payload.requestId);t&&(Hd.delete(e.payload.requestId),t.resolve(e.payload.bars));break}case`setDebug`:Q.setDebug(e.payload.enabled);break;case`destroy`:Q.destroy(),Q=null;break;case`setLevels`:Q.setLevels(e.payload.levels,e.payload.labelKey,e.payload.priceKey,e.payload.type,e.payload.pnlKey,e.payload.pnlTextKey);break;case`removeLevelByLabel`:Q.removeLevelByLabel(e.payload.label);break;case`updateLevelMainPrice`:Q.updateLevelMainPrice(e.payload.label,e.payload.price);break;case`updateLevelQty`:Q.updateLevelQty(e.payload.label,e.payload.qty);break;case`updateLevelBracket`:Q.updateLevelBracket(e.payload.label,e.payload.bracketType.toLowerCase(),e.payload.price);break;case`addLevelBracket`:Q.addLevelBracket(e.payload.label,e.payload.bracketType.toLowerCase());break;case`addBracket`:Q.addBracket(e.payload.bracketType.toLowerCase(),e.payload.label);break;case`removeBracket`:Q.removeBracket(e.payload.bracketType.toLowerCase(),e.payload.label);break;case`cancelLevelEdit`:Q.cancelLevelEdit(e.payload.label);break;case`selectLevel`:Q.selectLevel(e.payload.label);break;case`showDraftOrder`:Q.showDraftOrder(e.payload.price,e.payload.side,e.payload.orderType);break;case`showMarketDraft`:Q.showMarketDraft(e.payload.price,e.payload.side);break;case`clearDraftOrder`:Q.clearDraftOrder();break;case`cancelCurrentEdit`:Q.cancelCurrentEdit();break;case`updateDraftOrderPrice`:Q.updateDraftOrderPrice(e.payload.price);break;case`updateDraftOrderBracket`:Q.updateDraftOrderBracket(e.payload.bracketType,e.payload.price);break;case`setBracketLabelMode`:Q.setBracketLabelMode(e.payload.mode,e.payload.currencySymbol);break;case`setDraftBracketPnl`:Q.setDraftBracketPnl(e.payload.bracketType,e.payload.pnlText);break;case`setVolume`:Q.setVolume(e.payload.show);break;case`setIsins`:Q.setIsins(e.payload.isins);break;case`resetView`:Q.resetView();break;case`resetData`:Q.resetData();break;case`setLoading`:Q.setLoading(e.payload.loading);break;case`setThemeOverrides`:Q.setThemeOverrides(e.payload.overrides);break;case`setCanvasColors`:var t;Q.setCanvasColors((t=e.payload.colors)==null?null:t);break;case`correctBar`:Q.correctBar(e.payload.barTime,e.payload.bar);break;case`dismissAllUI`:Q.dismissAllUI();break;case`addCompare`:Q.addCompare(e.payload.symbol);break;case`removeCompare`:Q.removeCompare(e.payload.symbol);break;case`clearCompares`:Q.clearCompares();break;case`resolveCompareDataRequest`:{let t=Ud.get(e.payload.requestId);t&&(Ud.delete(e.payload.requestId),t.resolve(e.payload.bars));break}}}document.addEventListener(`DOMContentLoaded`,()=>{window.ChartBridge={send(e){let t;try{t=JSON.parse(e)}catch(t){$(`error`,{message:`Invalid JSON: ${e}`});return}try{Jd(t)}catch(e){$(`error`,{message:String(e)})}}},$(`ready`,{})})})();</script>
279
279
  </body>
280
280
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acttrader-charts",
3
- "version": "1.3.0-beta.25",
3
+ "version": "1.3.0-beta.26",
4
4
  "description": "Minimalistic, performant stock charting library",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",