acttrader-charts 1.0.4 → 1.0.5
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/dist/webview/chart.html +1 -1
- package/package.json +1 -1
package/dist/webview/chart.html
CHANGED
|
@@ -232,6 +232,6 @@
|
|
|
232
232
|
.finchart-flyout::-webkit-scrollbar-thumb { background: rgba(120,130,150,0.35); border-radius: 4px; }
|
|
233
233
|
.finchart-flyout::-webkit-scrollbar-thumb:hover { background: rgba(120,130,150,0.6); }
|
|
234
234
|
.finchart-flyout-row:hover { background: var(--finchart-row-hover) !important; }
|
|
235
|
-
`,document.head.appendChild(e)}var Ot=class{constructor(e,t,n,r,i,a,o,s,c,l,u,f,p,m=d,h=y.topBar){this.onSeriesChange=e,this.onTimeframeChange=t,this.onAddIndicator=n,this.onDurationChange=r,this.onSettingsClick=i,this.onFullscreenToggle=a,this.onDrawingToolsToggle=o,this.isFullscreen=!1,this.durationBtns=new Map,this.isMobileLayout=!1,this.drawingBtn=null,this.openDropdown=null,this.indicatorOptions=[],this.activeIndicators=new Set,this.volHasData=!0,this.theme=p,this.cfg=m,this.labels=h,this.currentSeries=c,this.currentTf=l,this.activeDuration=u,this.durationMap=f,Dt(),this.el=document.createElement(`div`),this.applyBarStyles(p),this.flyout=document.createElement(`div`),this.flyout.classList.add(`finchart-flyout`),this.applyFlyoutStyles(),document.body.appendChild(this.flyout),this.leftGroup=document.createElement(`div`),Object.assign(this.leftGroup.style,{display:`flex`,alignItems:`center`,gap:`4px`,flex:`1`,minWidth:`0`,overflow:`hidden`}),s&&(this.drawingBtn=this.makeDrawingBtn(p),this.leftGroup.appendChild(this.drawingBtn)),this.seriesBtn=this.makeSeriesBtn(c,p),this.seriesBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown(`series`,this.seriesBtn)}),this.addBtnHover(this.seriesBtn),this.tfBtn=this.makeDropBtn(l,p,!1),this.tfBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown(`timeframe`,this.tfBtn)}),this.addBtnHover(this.tfBtn),this.indBtn=this.makeDropBtn(this.labels.indicatorsBtn,p,!1),this.indBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown(`indicators`,this.indBtn)}),this.addBtnHover(this.indBtn),this.leftGroup.append(this.seriesBtn,this.tfBtn,this.indBtn),this.rightGroup=document.createElement(`div`),Object.assign(this.rightGroup.style,{display:`flex`,alignItems:`center`,gap:`2px`,flexShrink:`0`}),this.durationDropBtn=this.makeDropBtn(u==null?Tt[0]:u,p,!1),this.durationDropBtn.style.display=`none`,this.durationSep=document.createElement(`div`),this.durationSep.style.display=`none`,this.fullscreenBtn=document.createElement(`button`),this.fullscreenBtn.title=this.labels.toggleFullscreenTitle,this.fullscreenBtn.innerHTML=at,this.applyIconBtnStyles(this.fullscreenBtn,p,!1),this.fullscreenBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.onFullscreenToggle()}),this.addBtnHover(this.fullscreenBtn),this.rightGroup.appendChild(this.fullscreenBtn),this.settingsBtn=document.createElement(`button`),this.settingsBtn.title=this.labels.settingsTitle,this.settingsBtn.innerHTML=tt,this.applyIconBtnStyles(this.settingsBtn,p,!1),this.settingsBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.onSettingsClick()}),this.addBtnHover(this.settingsBtn),this.rightGroup.appendChild(this.settingsBtn),this.el.append(this.leftGroup,this.rightGroup),this.docClickHandler=e=>{!this.el.contains(e.target)&&!this.flyout.contains(e.target)&&this.closeDropdown()},document.addEventListener(`click`,this.docClickHandler,!0)}destroy(){this.flyout.remove(),document.removeEventListener(`click`,this.docClickHandler,!0)}reparentFlyout(e){this.flyout.parentElement!==e&&e.appendChild(this.flyout)}setFullscreen(e){this.isFullscreen=e,this.fullscreenBtn.innerHTML=e?ot:at,this.fullscreenBtn.title=e?this.labels.exitFullscreenTitle:this.labels.toggleFullscreenTitle,this.applyIconBtnStyles(this.fullscreenBtn,this.theme,e)}setDrawingsBtnActive(e){this.drawingBtn&&this.applyIconBtnStyles(this.drawingBtn,this.theme,e)}setTheme(e){this.theme=e,this.closeDropdown(),this.applyBarStyles(e),this.applyFlyoutStyles(),this.drawingBtn&&this.applyIconBtnStyles(this.drawingBtn,e,!1),this.applyIconBtnStyles(this.fullscreenBtn,e,this.isFullscreen),this.applyIconBtnStyles(this.settingsBtn,e,!1),this.applySeriesBtnStyles(this.seriesBtn,e,!1),this.applyDropBtnStyles(this.tfBtn,e,!1),this.applyDropBtnStyles(this.indBtn,e,!1);for(let[t,n]of this.durationBtns)this.applyDurationBtnStyles(n,e,t===this.activeDuration);this.durationSep.style.background=e.axisBorder,this.applyDropBtnStyles(this.durationDropBtn,e,!1)}setSeries(e){this.currentSeries=e,this.updateSeriesBtnContent(this.seriesBtn,e)}setTimeframe(e){this.currentTf=e,this.tfBtn.textContent=e}setActiveDuration(e){if(this.activeDuration!==(e==null?null:e)){if(this.activeDuration){let e=this.durationBtns.get(this.activeDuration);e&&this.applyDurationBtnStyles(e,this.theme,!1)}if(this.activeDuration=e==null?null:e,e){let t=this.durationBtns.get(e);t&&this.applyDurationBtnStyles(t,this.theme,!0),this.durationDropBtn.textContent=e}}}setMobileLayout(e){if(this.isMobileLayout===e)return;this.isMobileLayout=e;let t=e?`none`:``;for(let e of this.durationBtns.values())e.style.display=t;this.durationSep.style.display=t,this.durationDropBtn.style.display=e?``:`none`}setIndicatorOptions(e){this.indicatorOptions=e}setIndicatorOptionActive(e,t){t?this.activeIndicators.add(e):this.activeIndicators.delete(e),this.updateIndBtnLabel()}setVolumeControl(e,t){this.volHasData=t,t&&e?this.activeIndicators.add(`VOL`):this.activeIndicators.delete(`VOL`),this.updateIndBtnLabel()}makeDrawingBtn(e){let t=document.createElement(`button`);return t.title=`Drawing Tools`,t.innerHTML=rt,this.applyIconBtnStyles(t,e,!1),t.addEventListener(`click`,e=>{var t;e.stopPropagation(),(t=this.onDrawingToolsToggle)==null||t.call(this)}),this.addBtnHover(t),t}makeSeriesBtn(e,t){let n=document.createElement(`button`);return this.applySeriesBtnStyles(n,t,!1),this.updateSeriesBtnContent(n,e),n}updateSeriesBtnContent(e,t){var n;e.title=(n=this.labels.series[t])==null?t:n,e.innerHTML=ct[t]}applySeriesBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.ui.accentBg:`transparent`,color:n?t.ui.accentText:t.topBar.btnColor,border:`1px solid ${n?t.ui.accent:t.axisBorder}`,borderRadius:`5px`,padding:`3px 7px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,gap:`4px`,flexShrink:`0`,height:`24px`,transition:`border-color 0.12s, background 0.12s`})}applyFlyoutStyles(){Object.assign(this.flyout.style,{position:`fixed`,zIndex:`9999`,display:`none`,background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`8px`,padding:`4px 0`,minWidth:`168px`,maxHeight:`340px`,overflowY:`auto`,overflowX:`hidden`,boxShadow:`0 8px 24px rgba(0,0,0,0.55), 0 2px 8px rgba(0,0,0,0.3)`,fontFamily:this.cfg.flyoutRowFontFamily,fontSize:this.cfg.flyoutRowFontSize,scrollbarWidth:`thin`,scrollbarColor:`rgba(120,130,150,0.35) transparent`})}toggleDropdown(e,t){if(this.openDropdown===e){this.closeDropdown();return}this.openDropdown=e,this.applySeriesBtnStyles(this.seriesBtn,this.theme,e===`series`),this.applyDropBtnStyles(this.tfBtn,this.theme,e===`timeframe`),this.applyDropBtnStyles(this.indBtn,this.theme,e===`indicators`),this.applyDropBtnStyles(this.durationDropBtn,this.theme,e===`duration`),this.buildDropdownContent(e);let n=t.getBoundingClientRect();Object.assign(this.flyout.style,{display:`block`,left:`${n.left}px`,top:`${n.bottom+6}px`}),requestAnimationFrame(()=>{let e=this.flyout.getBoundingClientRect();e.right>window.innerWidth-8&&(this.flyout.style.left=`${window.innerWidth-e.width-8}px`),e.bottom>window.innerHeight-8&&(this.flyout.style.top=`${n.top-e.height-6}px`)})}buildDropdownContent(e){if(this.flyout.innerHTML=``,this.flyout.style.minWidth=e===`series`?`152px`:e===`timeframe`?`160px`:e===`duration`?`120px`:`180px`,e===`series`){let e=[{value:`candlestick`,label:this.labels.series.candlestick},{value:`hollow`,label:this.labels.series.hollow},{value:`ohlc`,label:this.labels.series.ohlc},{value:`line`,label:this.labels.series.line},{value:`area`,label:this.labels.series.area},{value:`heikinashi`,label:this.labels.series.heikinashi},{value:`volumecandles`,label:this.labels.series.volumecandles},{value:`linemarkers`,label:this.labels.series.linemarkers},{value:`step`,label:this.labels.series.step},{value:`hlcarea`,label:this.labels.series.hlcarea},{value:`baseline`,label:this.labels.series.baseline},{value:`columns`,label:this.labels.series.columns},{value:`highlow`,label:this.labels.series.highlow}];for(let t of e){let e=this.makeRow(t.label,t.value===this.currentSeries,!1,ct[t.value]);e.addEventListener(`click`,()=>{this.currentSeries=t.value,this.updateSeriesBtnContent(this.seriesBtn,t.value),this.onSeriesChange(t.value),this.closeDropdown()}),this.flyout.appendChild(e)}}else if(e===`timeframe`){let e=[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`],r=[`1D`,`1W`,`1M`,`1Y`];this.flyout.appendChild(this.makeCategoryHeader(`Intraday`));for(let n of e){var t;let e=(t=this.labels.timeframes[n])==null?n:t,r=this.makeRow(e,n===this.currentTf,!1);r.addEventListener(`click`,()=>{this.currentTf=n,this.tfBtn.textContent=e,this.onTimeframeChange(n),this.closeDropdown()}),this.flyout.appendChild(r)}this.flyout.appendChild(this.makeCategoryHeader(`Daily +`));for(let e of r){var n;let t=(n=this.labels.timeframes[e])==null?e:n,r=this.makeRow(t,e===this.currentTf,!1);r.addEventListener(`click`,()=>{this.currentTf=e,this.tfBtn.textContent=t,this.onTimeframeChange(e),this.closeDropdown()}),this.flyout.appendChild(r)}}else if(e===`duration`)for(let e of Tt){let t=this.makeRow(e,e===this.activeDuration,!1);t.addEventListener(`click`,()=>{this.setActiveDuration(e),this.onDurationChange(e,this.durationMap[e]),this.closeDropdown()}),this.flyout.appendChild(t)}else{let e=document.createElement(`div`);Object.assign(e.style,{position:`sticky`,top:`0`,zIndex:`1`,padding:`6px 8px`,background:this.theme.tooltip.background,borderBottom:`1px solid ${this.theme.axisBorder}`});let t=document.createElement(`input`);t.type=`text`,t.placeholder=`Search indicators…`,Object.assign(t.style,{width:`100%`,boxSizing:`border-box`,padding:`5px 8px`,background:this.theme.background,color:this.theme.tooltip.text,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`4px`,fontSize:`12px`,outline:`none`}),e.appendChild(t),this.flyout.appendChild(e);let n=document.createElement(`div`);this.flyout.appendChild(n);let i=new Map;for(let e of this.indicatorOptions){var r;let t=(r=e.category)==null?``:r;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=e=>{n.innerHTML=``;let r=e.trim().toLowerCase();if(r)for(let e of this.indicatorOptions){if(!e.label.toLowerCase().includes(r)&&!e.value.toLowerCase().includes(r))continue;let i=this.activeIndicators.has(e.value),o=Et.has(e.value)&&!this.volHasData,s=this.makeRow(e.label,i,o);o||s.addEventListener(`click`,()=>{this.onAddIndicator(e.value),a(t.value)}),n.appendChild(s)}else for(let[e,r]of i){e&&n.appendChild(this.makeCategoryHeader(e));for(let e of r){let r=this.activeIndicators.has(e.value),i=Et.has(e.value)&&!this.volHasData,o=this.makeRow(e.label,r,i);i||o.addEventListener(`click`,()=>{this.onAddIndicator(e.value),a(t.value)}),n.appendChild(o)}}};a(``),t.addEventListener(`input`,()=>a(t.value)),requestAnimationFrame(()=>t.focus())}}makeCategoryHeader(e){let t=document.createElement(`div`);return Object.assign(t.style,{padding:`6px 12px 4px`,fontSize:this.cfg.flyoutCategoryFontSize,fontWeight:`600`,letterSpacing:this.cfg.flyoutCategoryLetterSpacing,color:this.theme.topBar.flyoutCategoryColor,textTransform:`uppercase`,opacity:`0.55`,marginTop:`2px`}),t.textContent=e,t}makeRow(e,t,n,r){let i=document.createElement(`button`),a=this.theme.ui.accentBg,o=this.theme.ui.accentBg;if(Object.assign(i.style,{width:`100%`,padding:`7px 12px`,background:t?o:`transparent`,border:`none`,borderLeft:t?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,color:n?this.theme.ui.disabledText:t?this.theme.ui.accentText:this.theme.topBar.flyoutRowColor,fontSize:this.cfg.flyoutRowFontSize,fontFamily:this.cfg.flyoutRowFontFamily,textAlign:`left`,cursor:n?`not-allowed`:`pointer`,display:`flex`,alignItems:`center`,gap:`8px`,boxSizing:`border-box`,opacity:n?`0.45`:`1`,transition:`background 0.1s`}),!n&&!t&&(i.addEventListener(`mouseenter`,()=>{i.style.background=a}),i.addEventListener(`mouseleave`,()=>{i.style.background=`transparent`})),r){let e=document.createElement(`span`);Object.assign(e.style,{display:`flex`,alignItems:`center`,flexShrink:`0`,opacity:t?`1`:`0.7`}),e.innerHTML=r;let n=e.querySelector(`svg`);n&&(n.setAttribute(`width`,`13`),n.setAttribute(`height`,`13`)),i.appendChild(e)}let s=document.createElement(`span`);if(s.style.flex=`1`,s.textContent=e,i.appendChild(s),t){let e=document.createElement(`span`);Object.assign(e.style,{color:this.theme.ui.accent,fontSize:this.cfg.flyoutCheckFontSize,flexShrink:`0`}),e.innerHTML=bt,i.appendChild(e)}return i}closeDropdown(){this.flyout.style.display=`none`,this.openDropdown=null,this.applySeriesBtnStyles(this.seriesBtn,this.theme,!1),this.applyDropBtnStyles(this.tfBtn,this.theme,!1),this.applyDropBtnStyles(this.indBtn,this.theme,!1),this.applyDropBtnStyles(this.durationDropBtn,this.theme,!1)}updateIndBtnLabel(){let e=this.activeIndicators.size;this.indBtn.textContent=e>0?this.labels.indicatorsBtnActive.replace(`{count}`,String(e)):this.labels.indicatorsBtn}addBtnHover(e){e.addEventListener(`mouseenter`,()=>{e.dataset.active!==`true`&&(e.style.background=this.theme.ui.accentBg)}),e.addEventListener(`mouseleave`,()=>{e.dataset.active!==`true`&&(e.style.background=`transparent`)})}applyBarStyles(e){Object.assign(this.el.style,{display:`flex`,alignItems:`center`,gap:`8px`,height:this.cfg.height,padding:`0 10px`,background:e.background,borderBottom:`1px solid ${e.axisBorder}`,boxSizing:`border-box`,flexShrink:`0`})}makeDropBtn(e,t,n){let r=document.createElement(`button`);return r.textContent=e,this.applyDropBtnStyles(r,t,n),r}applyDropBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.ui.accentBg:`transparent`,color:n?t.ui.accentText:t.topBar.btnColor,border:`1px solid ${n?t.ui.accent:t.axisBorder}`,borderRadius:`5px`,padding:`3px 8px`,height:`24px`,fontSize:this.cfg.dropBtnFontSize,fontFamily:this.cfg.dropBtnFontFamily,cursor:`pointer`,outline:`none`,whiteSpace:`nowrap`,transition:`border-color 0.12s, background 0.12s`})}applyDurationBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.bottomBar.activeBtnBg:`transparent`,color:n?t.bottomBar.activeBtnText:t.bottomBar.btnColor,border:`1px solid ${n?t.bottomBar.activeBtnBorder:`transparent`}`,borderRadius:`4px`,padding:`2px 7px`,fontSize:this.cfg.dropBtnFontSize,fontFamily:this.cfg.dropBtnFontFamily,cursor:`pointer`,outline:`none`,transition:`background 0.15s, color 0.15s`,whiteSpace:`nowrap`})}applyIconBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.ui.accentBg:`transparent`,color:n?t.ui.accentText:t.topBar.btnColor,border:`1px solid ${n?t.ui.accent:t.axisBorder}`,borderRadius:`5px`,width:`26px`,height:`26px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0`,flexShrink:`0`,transition:`border-color 0.12s, background 0.12s`})}},kt={"1D":`5m`,"5D":`15m`,"1M":`30m`,"3M":`30m`,"6M":`1D`,"1Y":`1D`,"5Y":`1W`,All:`1M`},At=[`1D`,`5D`,`1M`,`3M`,`6M`,`1Y`,`5Y`,`All`],jt=class{constructor(e,t,n,r,i=f,a=y.bottomBar){this.onDurationChange=e,this.buttons=new Map,this.activeDuration=t,this.theme=n,this.cfg=i,this.labels=a,this.map={...kt,...r},this.el=document.createElement(`div`),this.applyBarStyles(n);for(let e of At){var o;let r=document.createElement(`button`);r.textContent=(o=this.labels.durations[e])==null?e:o,this.applyButtonStyles(r,n,e===t),r.addEventListener(`click`,()=>{this.setActive(e),this.onDurationChange(e,this.map[e])}),this.buttons.set(e,r),this.el.appendChild(r)}}setTheme(e){this.theme=e,this.applyBarStyles(e);for(let[t,n]of this.buttons)this.applyButtonStyles(n,e,this.activeDuration!==null&&t===this.activeDuration)}setActive(e){if(this.activeDuration!==(e==null?null:e)){if(this.activeDuration){let e=this.buttons.get(this.activeDuration);e&&this.applyButtonStyles(e,this.theme,!1)}if(this.activeDuration=e==null?null:e,e){let t=this.buttons.get(e);t&&this.applyButtonStyles(t,this.theme,!0)}}}applyBarStyles(e){Object.assign(this.el.style,{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:`2px`,height:this.cfg.height,padding:`0 10px`,background:e.background,borderTop:`1px solid ${e.axisBorder}`,boxSizing:`border-box`,flexShrink:`0`})}applyButtonStyles(e,t,n){Object.assign(e.style,{background:n?t.bottomBar.activeBtnBg:`transparent`,color:n?t.bottomBar.activeBtnText:t.bottomBar.btnColor,border:`1px solid ${n?t.bottomBar.activeBtnBorder:`transparent`}`,borderRadius:`3px`,padding:`2px 7px`,fontSize:this.cfg.btnFontSize,fontFamily:this.cfg.btnFontFamily,cursor:`pointer`,outline:`none`,transition:`background 0.15s`})}},K={horizontal_line:`horizontalLine`,vertical_line:`verticalLine`,trend_line:`trendLine`,trend_angle:`trendAngle`,cross_line:`crossLine`,parallel_channel:`parallelChannel`,disjoint_channel:`disjointChannel`,flat_channel:`flatChannel`,fib_retracement:`fibRetracement`,fib_extension:`fibExtension`,fib_channel:`fibChannel`,fib_timezone:`fibTimezone`,fib_circles:`fibCircles`,fib_spiral:`fibSpiral`,fib_fan:`fibFan`,gann_fan:`gannFan`,gann_square:`gannSquare`,gann_box:`gannBox`,rectangle:`rectangle`,rotated_rectangle:`rotatedRectangle`,ellipse:`ellipse`,triangle:`triangle`,circle:`circle`,arc:`arc`,polyline:`polyline`,path:`path`,price_range:`priceRange`,date_range:`dateRange`,date_price_range:`datePriceRange`,ruler:`ruler`,pitchfork:`pitchfork`,schiff_pitchfork:`schiffPitchfork`,modified_schiff:`modifiedSchiff`,inside_pitchfork:`insidePitchfork`,fixed_range_vp:`fixedRangeVP`,anchored_vp:`anchoredVP`,volume_profile:`volumeProfile`,regression_trend:`regressionTrend`,text:`text`,callout:`callout`,price_label:`priceLabel`,arrow_marker:`arrowMarker`,flag:`flag`,price_note:`priceNote`,anchored_note:`anchoredNote`,arrow_up:`arrowUp`,arrow_down:`arrowDown`,head_shoulders:`headShoulders`,triangle_pattern:`trianglePattern`,three_drives:`threeDrives`,abcd_pattern:`abcdPattern`,cypher_pattern:`cypherPattern`,butterfly_pattern:`butterflyPattern`,bat_pattern:`batPattern`,gartley_pattern:`gartleyPattern`,crab_pattern:`crabPattern`,shark_pattern:`sharkPattern`,elliott_impulse:`elliottImpulse`,elliott_corrective:`elliottCorrective`,elliott_triangle:`elliottTriangle`,elliott_combination:`elliottCombination`,elliott_wxy:`elliottWxy`,brush:`brush`,highlighter:`highlighter`,ghost_feed:`ghostFeed`,projection:`projection`,sine_line:`sineLine`,cyclic_lines:`cyclicLines`,time_cycles:`timeCycles`,fib_projection:`fibProjection`,price_projection:`priceProjection`},Mt=[{id:`trend_lines`,name:`Trend Lines & Channels`,icon:`↗`,tools:[{id:`trend_line`,name:`Trend Line`,icon:`↗`,shortcut:`Alt+T`},{id:`trend_angle`,name:`Trend Angle`,icon:`∠`},{id:`horizontal_line`,name:`Horizontal Line`,icon:`—`,shortcut:`Alt+H`},{id:`vertical_line`,name:`Vertical Line`,icon:`⏐`,shortcut:`Alt+V`},{id:`cross_line`,name:`Cross Line`,icon:`✚`},{id:`parallel_channel`,name:`Parallel Channel`,icon:`⫿`},{id:`disjoint_channel`,name:`Disjoint Channel`,icon:`≠`},{id:`flat_channel`,name:`Flat Top/Bottom Channel`,icon:`⊓`}]},{id:`fibonacci_gann`,name:`Fibonacci & Gann Tools`,icon:`φ`,tools:[{id:`fib_retracement`,name:`Fibonacci Retracement`,icon:`φ`,shortcut:`Alt+F`},{id:`fib_extension`,name:`Fibonacci Extension`,icon:`φ`},{id:`fib_channel`,name:`Fibonacci Channel`,icon:`φ`},{id:`fib_timezone`,name:`Fibonacci Timezone`,icon:`φ`},{id:`fib_circles`,name:`Fibonacci Circles`,icon:`⊙`},{id:`fib_spiral`,name:`Fibonacci Spiral`,icon:`@`},{id:`fib_fan`,name:`Fibonacci Speed Resistance Fan`,icon:`⌇`},{id:`gann_fan`,name:`Gann Fan`,icon:`⌇`},{id:`gann_square`,name:`Gann Square`,icon:`⊞`},{id:`gann_box`,name:`Gann Box`,icon:`⊡`}]},{id:`geometric_shapes`,name:`Geometric Shapes`,icon:`▭`,tools:[{id:`rectangle`,name:`Rectangle`,icon:`▭`},{id:`rotated_rectangle`,name:`Rotated Rectangle`,icon:`◇`},{id:`ellipse`,name:`Ellipse`,icon:`⬭`},{id:`triangle`,name:`Triangle`,icon:`△`},{id:`circle`,name:`Circle`,icon:`○`},{id:`arc`,name:`Arc`,icon:`⌒`},{id:`polyline`,name:`Polyline`,icon:`⚡`},{id:`path`,name:`Path`,icon:`〰`}]},{id:`measurement_tools`,name:`Measurement Tools`,icon:`⇕`,tools:[{id:`price_range`,name:`Price Range`,icon:`⇕`},{id:`date_range`,name:`Date Range`,icon:`⇔`},{id:`date_price_range`,name:`Date & Price Range`,icon:`⊞`},{id:`ruler`,name:`Ruler`,icon:`⊢`}]},{id:`pitchfork_tools`,name:`Pitchfork Tools`,icon:`⑁`,tools:[{id:`pitchfork`,name:`Pitchfork`,icon:`⑁`},{id:`schiff_pitchfork`,name:`Schiff Pitchfork`,icon:`⑁`},{id:`modified_schiff`,name:`Modified Schiff Pitchfork`,icon:`⑁`},{id:`inside_pitchfork`,name:`Inside Pitchfork`,icon:`⑁`}]},{id:`volume_statistics`,name:`Volume & Statistical Tools`,icon:`▤`,tools:[{id:`fixed_range_vp`,name:`Fixed Range Volume Profile`,icon:`▤`},{id:`anchored_vp`,name:`Anchored Volume Profile`,icon:`▤`},{id:`volume_profile`,name:`Volume Profile`,icon:`▤`},{id:`regression_trend`,name:`Regression Trend`,icon:`↗`}]},{id:`annotation_tools`,name:`Annotation Tools`,icon:`A`,tools:[{id:`text`,name:`Text`,icon:`A`},{id:`callout`,name:`Callout`,icon:`⬕`},{id:`price_label`,name:`Price Label`,icon:`$`},{id:`arrow_marker`,name:`Arrow Marker`,icon:`→`},{id:`flag`,name:`Flag`,icon:`⚑`},{id:`price_note`,name:`Price Note`,icon:`≡`},{id:`anchored_note`,name:`Anchored Note`,icon:`⊕`},{id:`arrow_up`,name:`Arrow Up`,icon:`↑`},{id:`arrow_down`,name:`Arrow Down`,icon:`↓`}]},{id:`pattern_recognition`,name:`Pattern Recognition`,icon:`◬`,tools:[{id:`head_shoulders`,name:`Head & Shoulders`,icon:`⌢`},{id:`triangle_pattern`,name:`Triangle Pattern`,icon:`◬`},{id:`three_drives`,name:`3 Drives Pattern`,icon:`⋎`},{id:`abcd_pattern`,name:`ABCD Pattern`,icon:`⊿`},{id:`cypher_pattern`,name:`Cypher Pattern`,icon:`C`},{id:`butterfly_pattern`,name:`Butterfly Pattern`,icon:`⋈`},{id:`bat_pattern`,name:`Bat Pattern`,icon:`⌓`},{id:`gartley_pattern`,name:`Gartley Pattern`,icon:`G`},{id:`crab_pattern`,name:`Crab Pattern`,icon:`⊓`},{id:`shark_pattern`,name:`Shark Pattern`,icon:`⊳`}]},{id:`elliott_wave`,name:`Elliott Wave Tools`,icon:`∿`,tools:[{id:`elliott_impulse`,name:`Elliott Impulse (12345)`,icon:`∿`},{id:`elliott_corrective`,name:`Elliott Corrective (ABC)`,icon:`∿`},{id:`elliott_triangle`,name:`Elliott Wave Triangle`,icon:`△`},{id:`elliott_combination`,name:`Elliott Wave Combination`,icon:`∿`},{id:`elliott_wxy`,name:`Elliott Double Three (WXY)`,icon:`∿`}]},{id:`brush_highlighter`,name:`Brush & Highlighter`,icon:`∫`,tools:[{id:`brush`,name:`Brush`,icon:`∫`},{id:`highlighter`,name:`Highlighter`,icon:`▬`}]},{id:`advanced_tools`,name:`Advanced Tools`,icon:`⊛`,tools:[{id:`ghost_feed`,name:`Ghost Feed`,icon:`◑`},{id:`projection`,name:`Projection`,icon:`→`},{id:`sine_line`,name:`Sine Line`,icon:`∿`},{id:`cyclic_lines`,name:`Cyclic Lines`,icon:`⟳`},{id:`time_cycles`,name:`Time Cycles`,icon:`⊙`}]},{id:`price_projections`,name:`Price Projection Tools`,icon:`⊿`,tools:[{id:`fib_projection`,name:`Fibonacci Projection`,icon:`φ`},{id:`price_projection`,name:`Price Projection`,icon:`⊿`}]}],Nt=[{id:`undo`,icon:`↶`,title:`Undo (Ctrl+Z)`},{id:`redo`,icon:`↷`,title:`Redo (Ctrl+Y)`},{id:`delete_selected`,icon:`✕`,title:`Delete Selected (Del)`},{id:`clear_all`,icon:`⊡`,title:`Clear All`},{id:`toggle_visibility`,icon:`◌`,title:`Hide All`},{id:`toggle_lock`,icon:`⊠`,title:`Lock All`}],Pt=class{constructor(e,t,n,r,i=u,a=y.drawingToolbar){this.onToolChange=e,this.onAction=t,this.onMobileClose=n,this.activeTool=null,this.openCategoryId=null,this.openActionsMenu=!1,this.catButtons=new Map,this.drawingsHidden=!1,this.drawingsLocked=!1,this.mobileMode=!1,this.settingsVisible=!0,this.theme=r,this.cfg=i,this.labels=a,this.el=document.createElement(`div`),this.flyout=document.createElement(`div`),this.applyBarStyles(),this.applyWidth(),this.buildToolbar(),this.buildFlyout(),document.body.appendChild(this.flyout),this.docClickHandler=e=>{!this.el.contains(e.target)&&!this.flyout.contains(e.target)&&this.closeFlyout()},document.addEventListener(`click`,this.docClickHandler,!0)}setTheme(e){this.theme=e,this.closeFlyout(),this.applyBarStyles(),this.applyWidth(),this.buildFlyout(),this.applyScrollBtnStyles(this.scrollUpBtn,`up`),this.applyScrollBtnStyles(this.scrollDownBtn,`down`),this.topSection.innerHTML=``,this.topSection.appendChild(this.buildMobileActionsBtn());for(let[e,n]of this.catButtons){var t;let r=this.activeTool!==null&&((t=Mt.find(t=>t.id===e))==null?void 0:t.tools.some(e=>K[e.id]===this.activeTool))===!0;this.applyCatBtnStyles(n,r)}}setActiveTool(e){if(this.activeTool!==null){let e=Mt.find(e=>e.tools.some(e=>K[e.id]===this.activeTool));e&&this.applyCatBtnStyles(this.catButtons.get(e.id),!1)}if(this.activeTool=e,e!==null){let t=Mt.find(t=>t.tools.some(t=>K[t.id]===e));t&&this.applyCatBtnStyles(this.catButtons.get(t.id),!0)}}setVisible(e){this.settingsVisible=e,this.applyWidth()}setMobileMode(e){if(this.mobileMode===e)return;this.mobileMode=e,this.closeFlyout(),this.topSection.innerHTML=``,this.topSection.appendChild(this.buildMobileActionsBtn()),this.catButtons.clear();let t=this.makeGrid();if(this.populateCategoryGrid(t),this.toolsGrid.replaceWith(t),this.toolsGrid=t,this.activeTool!==null){let e=Mt.find(e=>e.tools.some(e=>K[e.id]===this.activeTool));if(e){let t=this.catButtons.get(e.id);t&&this.applyCatBtnStyles(t,!0)}}e?(Object.assign(this.el.style,{position:`absolute`,left:`0`,top:`0`,height:`100%`,zIndex:`50`}),this.settingsVisible=!1):(Object.assign(this.el.style,{position:``,left:``,top:``,height:``,zIndex:``}),this.settingsVisible=!0),this.applyBarStyles(),this.applyWidth(),requestAnimationFrame(()=>this.updateScrollIndicators())}reparentFlyout(e){this.flyout.parentElement!==e&&e.appendChild(this.flyout)}destroy(){this.flyout.remove(),document.removeEventListener(`click`,this.docClickHandler,!0)}get barWidth(){return this.cfg.barPadding*2+this.cfg.iconBtnSize}applyBarStyles(){Object.assign(this.el.style,{display:`flex`,flexDirection:`column`,flexShrink:`0`,position:`relative`,height:`100%`,background:this.theme.background,borderRight:`1px solid ${this.theme.axisBorder}`,boxSizing:`border-box`,userSelect:`none`,fontFamily:this.cfg.flyoutLabelFontFamily,overflow:`hidden`,transition:`width 0.2s ease`})}applyWidth(){this.settingsVisible?this.el.style.width=`${this.barWidth}px`:this.el.style.width=`0`}buildToolbar(){this.topSection=document.createElement(`div`),Object.assign(this.topSection.style,{borderBottom:`1px solid ${this.theme.axisBorder}`,padding:`10px ${this.cfg.barPadding}px 10px`,boxSizing:`border-box`,flexShrink:`0`}),this.topSection.appendChild(this.buildMobileActionsBtn()),this.el.appendChild(this.topSection),this.scrollUpBtn=document.createElement(`button`),this.applyScrollBtnStyles(this.scrollUpBtn,`up`),this.scrollUpBtn.addEventListener(`click`,()=>{this.toolsArea.scrollBy({top:-(this.cfg.iconBtnSize+this.cfg.btnGap)*3,behavior:`smooth`})}),this.el.appendChild(this.scrollUpBtn),this.toolsArea=document.createElement(`div`),Object.assign(this.toolsArea.style,{flex:`1`,overflowY:`scroll`,padding:`10px ${this.cfg.barPadding}px 4px`,boxSizing:`border-box`,scrollbarWidth:`none`,msOverflowStyle:`none`});let e=document.createElement(`style`);e.textContent=`.lb-tools::-webkit-scrollbar{display:none}`,document.head.appendChild(e),this.toolsArea.classList.add(`lb-tools`),this.toolsGrid=this.makeGrid(),this.populateCategoryGrid(this.toolsGrid),this.toolsArea.appendChild(this.toolsGrid),this.toolsArea.addEventListener(`scroll`,()=>this.updateScrollIndicators()),this.el.appendChild(this.toolsArea),this.scrollDownBtn=document.createElement(`button`),this.applyScrollBtnStyles(this.scrollDownBtn,`down`),this.scrollDownBtn.addEventListener(`click`,()=>{this.toolsArea.scrollBy({top:(this.cfg.iconBtnSize+this.cfg.btnGap)*3,behavior:`smooth`})}),this.el.appendChild(this.scrollDownBtn),requestAnimationFrame(()=>this.updateScrollIndicators())}buildMobileActionsBtn(){let e=document.createElement(`button`);return e.title=this.labels.actions.moreActions,e.innerHTML=wt,this.applyActionBtnStyles(e,!1),this.addBtnHover(e),e.addEventListener(`click`,t=>{t.stopPropagation(),this.toggleActionsFlyout(e)}),e}populateCategoryGrid(e){this.catButtons.clear();for(let n of Mt){var t;let r=document.createElement(`button`);r.title=this.getCategoryLabel(n.id),r.innerHTML=(t=lt[n.id])==null?n.icon:t,this.applyCatBtnStyles(r,!1),this.addBtnHover(r),r.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleCategory(n,r)}),this.catButtons.set(n.id,r),e.appendChild(r)}}updateScrollIndicators(){let{scrollTop:e,scrollHeight:t,clientHeight:n}=this.toolsArea,r=e>2,i=e+n<t-2;this.mobileMode?(this.scrollUpBtn.style.display=`flex`,this.scrollDownBtn.style.display=`flex`,this.scrollUpBtn.style.opacity=r?`0.9`:`0.2`,this.scrollDownBtn.style.opacity=i?`0.9`:`0.2`):(this.scrollUpBtn.style.display=r?`flex`:`none`,this.scrollDownBtn.style.display=i?`flex`:`none`)}buildFlyout(){Object.assign(this.flyout.style,{position:`fixed`,zIndex:`9999`,display:`none`,background:this.theme.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`6px`,padding:`6px 0`,minWidth:`200px`,boxShadow:`0 4px 16px rgba(0,0,0,0.45)`,fontFamily:this.cfg.flyoutLabelFontFamily,fontSize:this.cfg.flyoutLabelFontSize})}makeGrid(e=1){let t=document.createElement(`div`);return Object.assign(t.style,{display:`grid`,gridTemplateColumns:`repeat(${e}, ${this.cfg.iconBtnSize}px)`,gap:`${this.cfg.btnGap}px`}),t}applyScrollBtnStyles(e,t){e.innerHTML=t===`up`?St:Ct,e.title=t===`up`?this.labels.scrollUp:this.labels.scrollDown;let n=e.style.display||`none`;Object.assign(e.style,{display:n,width:`100%`,height:`${this.cfg.scrollBtnHeight}px`,background:this.theme.background,color:this.theme.tooltip.text,border:`none`,borderBottom:t===`up`?`1px solid ${this.theme.axisBorder}`:`none`,borderTop:t===`down`?`1px solid ${this.theme.axisBorder}`:`none`,fontSize:this.cfg.scrollBtnFontSize,cursor:`pointer`,outline:`none`,alignItems:`center`,justifyContent:`center`,flexShrink:`0`,opacity:`0.6`})}toggleCategory(e,t){if(this.openCategoryId===e.id){this.closeFlyout();return}this.openCategoryId=e.id;let n=t.getBoundingClientRect();Object.assign(this.flyout.style,{display:`block`,left:`${n.right+4}px`,top:`${n.top}px`}),this.flyout.innerHTML=``;let r=document.createElement(`div`);Object.assign(r.style,{padding:`4px 12px 8px`,fontSize:this.cfg.flyoutHeadingFontSize,fontWeight:`600`,letterSpacing:this.cfg.flyoutHeadingLetterSpacing,color:this.theme.drawingToolbar.flyoutHeadingColor,textTransform:`uppercase`,borderBottom:`1px solid ${this.theme.axisBorder}`,marginBottom:`4px`,opacity:`0.6`}),r.textContent=this.getCategoryLabel(e.id),this.flyout.appendChild(r);for(let t of e.tools){var i,a;let n=t.id in K,r=this.activeTool!==null&&K[t.id]===this.activeTool,o=document.createElement(`button`);Object.assign(o.style,{width:`100%`,padding:`5px 12px`,background:r?this.theme.ui.accentBg:`transparent`,border:`none`,borderLeft:r?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,color:r?this.theme.ui.accentText:n?this.theme.drawingToolbar.flyoutLabelColor:this.theme.ui.disabledText,fontSize:this.cfg.flyoutLabelFontSize,fontFamily:this.cfg.flyoutLabelFontFamily,textAlign:`left`,cursor:n?`pointer`:`default`,display:`flex`,alignItems:`center`,gap:`8px`,boxSizing:`border-box`});let s=document.createElement(`span`);Object.assign(s.style,{width:`16px`,display:`flex`,alignItems:`center`,flexShrink:`0`}),s.innerHTML=(i=(a=mt[t.id])==null?lt[e.id]:a)==null?t.icon:i;let c=document.createElement(`span`);if(c.style.flex=`1`,c.textContent=this.getToolLabel(t),o.appendChild(s),o.appendChild(c),t.shortcut&&n){let e=document.createElement(`span`);Object.assign(e.style,{fontSize:this.cfg.shortcutFontSize,color:this.theme.ui.disabledText,flexShrink:`0`}),e.textContent=t.shortcut,o.appendChild(e)}else if(!n){let e=document.createElement(`span`);Object.assign(e.style,{fontSize:this.cfg.soonBadgeFontSize,color:this.theme.ui.soonBadgeText,flexShrink:`0`}),e.textContent=this.labels.soonBadge,o.appendChild(e)}if(n){if(!r){let e=this.theme.ui.accentBg;o.addEventListener(`mouseenter`,()=>{o.style.background=e}),o.addEventListener(`mouseleave`,()=>{o.style.background=`transparent`})}o.addEventListener(`click`,()=>{let e=K[t.id],n=this.activeTool===e?null:e;if(this.setActiveTool(n),this.onToolChange(n),this.closeFlyout(),this.mobileMode&&n!==null){var r;this.settingsVisible=!1,this.applyWidth(),(r=this.onMobileClose)==null||r.call(this)}})}this.flyout.appendChild(o)}requestAnimationFrame(()=>{let e=this.flyout.getBoundingClientRect();e.bottom>window.innerHeight-8&&(this.flyout.style.top=`${window.innerHeight-e.height-8}px`)})}closeFlyout(){this.flyout.style.display=`none`,this.openCategoryId=null,this.openActionsMenu=!1}toggleActionsFlyout(e){if(this.openActionsMenu){this.closeFlyout();return}this.closeFlyout(),this.openActionsMenu=!0,this.flyout.innerHTML=``;let t=document.createElement(`div`);Object.assign(t.style,{padding:`4px 12px 8px`,fontSize:this.cfg.flyoutHeadingFontSize,fontWeight:`600`,letterSpacing:this.cfg.flyoutHeadingLetterSpacing,color:this.theme.drawingToolbar.flyoutHeadingColor,textTransform:`uppercase`,borderBottom:`1px solid ${this.theme.axisBorder}`,marginBottom:`4px`,opacity:`0.6`}),t.textContent=this.labels.actions.moreActions,this.flyout.appendChild(t);for(let e of Nt){var n,r,i;let t=e.id===`toggle_visibility`?this.drawingsHidden:e.id===`toggle_lock`?this.drawingsLocked:!1,a=t?(n=(r=dt[e.id])==null?ut[e.id]:r)==null?e.icon:n:(i=ut[e.id])==null?e.icon:i,o=e.id===`toggle_visibility`?this.drawingsHidden?this.labels.actions.showAll:this.labels.actions.hideAll:e.id===`toggle_lock`?this.drawingsLocked?this.labels.actions.unlockAll:this.labels.actions.lockAll:this.getActionLabel(e.id),s=document.createElement(`button`);Object.assign(s.style,{width:`100%`,padding:`6px 12px`,background:t?this.theme.ui.accentBg:`transparent`,border:`none`,borderLeft:t?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,color:t?this.theme.ui.accentText:this.theme.drawingToolbar.flyoutLabelColor,fontSize:this.cfg.flyoutLabelFontSize,fontFamily:this.cfg.flyoutLabelFontFamily,textAlign:`left`,cursor:`pointer`,display:`flex`,alignItems:`center`,gap:`8px`,boxSizing:`border-box`});let c=document.createElement(`span`);Object.assign(c.style,{width:`16px`,display:`flex`,alignItems:`center`,flexShrink:`0`}),c.innerHTML=a;let l=document.createElement(`span`);l.style.flex=`1`,l.textContent=o,s.appendChild(c),s.appendChild(l);let u=this.theme.ui.accentBg;t||(s.addEventListener(`mouseenter`,()=>{s.style.background=u}),s.addEventListener(`mouseleave`,()=>{s.style.background=`transparent`})),s.addEventListener(`click`,()=>{e.id===`toggle_visibility`?(this.drawingsHidden=!this.drawingsHidden,this.onAction(this.drawingsHidden?`hide_all`:`show_all`)):e.id===`toggle_lock`?(this.drawingsLocked=!this.drawingsLocked,this.onAction(this.drawingsLocked?`lock_all`:`unlock_all`)):this.onAction(e.id),this.closeFlyout()}),this.flyout.appendChild(s)}let a=e.getBoundingClientRect(),o=this.el.getBoundingClientRect();Object.assign(this.flyout.style,{display:`block`,left:`${o.right+4}px`,top:`${a.top}px`}),requestAnimationFrame(()=>{let e=this.flyout.getBoundingClientRect();e.bottom>window.innerHeight-8&&(this.flyout.style.top=`${window.innerHeight-e.height-8}px`)})}getCategoryLabel(e){let t={trend_lines:`trendLines`,fibonacci_gann:`fibonacci`,geometric_shapes:`shapes`,measurement_tools:`measurements`,pitchfork_tools:`pitchforks`,volume_statistics:`volume`,annotation_tools:`annotations`,pattern_recognition:`patterns`,elliott_wave:`elliott`,brush_highlighter:`brushes`,advanced_tools:`advanced`,price_projections:`priceProjection`}[e];return t?this.labels.categories[t]:e}getToolLabel(e){let t=K[e.id];return t&&this.labels.tools[t]?this.labels.tools[t]:e.name}getActionLabel(e){let t={undo:`undo`,redo:`redo`,delete_selected:`deleteSelected`,clear_all:`clearAll`,toggle_visibility:`hideAll`,toggle_lock:`lockAll`}[e];return t?this.labels.actions[t]:e}addBtnHover(e){e.addEventListener(`mouseenter`,()=>{e.dataset.active!==`true`&&(e.style.background=this.theme.ui.accentBg)}),e.addEventListener(`mouseleave`,()=>{e.dataset.active!==`true`&&(e.style.background=`transparent`)})}applyCatBtnStyles(e,t){e.dataset.active=String(t),Object.assign(e.style,{width:`${this.cfg.iconBtnSize}px`,height:`${this.cfg.iconBtnSize}px`,background:t?this.theme.ui.accentBgStrong:`transparent`,color:t?this.theme.drawingToolbar.activeIconColor:this.theme.drawingToolbar.iconColor,border:`1px solid ${t?this.theme.ui.accent:this.theme.axisBorder}`,borderRadius:`5px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0`})}applyActionBtnStyles(e,t){e.dataset.active=String(t),Object.assign(e.style,{width:`${this.cfg.iconBtnSize}px`,height:`${this.cfg.iconBtnSize}px`,background:t?this.theme.ui.accentBg:`transparent`,color:t?this.theme.drawingToolbar.activeIconColor:this.theme.drawingToolbar.iconColor,border:`1px solid ${t?this.theme.ui.accent:this.theme.axisBorder}`,borderRadius:`5px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0`})}},Ft=6,It=class{constructor(e){this.type=`horizontalLine`,this.id=`hl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o,s=2){let c=this.points[0].price,l=t.yToPixel(c,r,a);e.save(),e.strokeStyle=`#e8b84b`,e.lineWidth=o?1.5:1,o||e.setLineDash([6,3]),e.beginPath(),e.moveTo(0,l),e.lineTo(i,l),e.stroke(),e.setLineDash([]);let u=c.toFixed(s);e.font=`10px 'Inter', system-ui, sans-serif`;let d=e.measureText(u).width;e.fillStyle=`#e8b84b`,e.fillText(u,i-d-4,l-3),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.yToPixel(this.points[0].price,i,o);return Math.abs(t-s)<=Ft}getHandle(){return null}},Lt=6,Rt=class{constructor(e){this.type=`verticalLine`,this.id=`vl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i);e.save(),e.strokeStyle=`#e8b84b`,e.lineWidth=o?1.5:1,o||e.setLineDash([6,3]),e.beginPath(),e.moveTo(s,0),e.lineTo(s,a),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a);return Math.abs(e-s)<=Lt}getHandle(){return null}},zt=6;function Bt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Vt=class{constructor(e){this.type=`trendLine`,this.id=`tl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.strokeStyle=`#26c6da`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke();for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#26c6da`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return Bt(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=zt}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=zt+2)return{pointIndex:n,cursor:`grab`};return null}},Ht=6;function Ut(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Wt=class{constructor(e){this.type=`trendAngle`,this.id=`ta_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.atan2(-(f-u),d-l)*180/Math.PI,m=Math.atan2(-(f-u),d-l);e.save(),e.strokeStyle=`#26c6da`,e.fillStyle=`#26c6da`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.beginPath(),e.arc(l,u,28,-m,0,m<0),e.stroke(),e.setLineDash([4,3]),e.globalAlpha=.5,e.beginPath(),e.moveTo(l,u),e.lineTo(l+28+8,u),e.stroke(),e.setLineDash([]),e.globalAlpha=1;let h=l+28+6,g=u-(m>=0?6:-14);if(e.font=`bold 11px 'Inter', system-ui, sans-serif`,e.fillText(`${p.toFixed(1)}°`,h,g),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return Ut(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=Ht}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Ht+2)return{pointIndex:n,cursor:`grab`};return null}},Gt=6,Kt=class{constructor(e){this.type=`crossLine`,this.id=`xl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=this.points[0],c=t.xToPixel(s.barIndex,n,i),l=t.yToPixel(s.price,r,a);e.save(),e.strokeStyle=`#78909c`,e.lineWidth=o?1.5:1,o||e.setLineDash([6,3]),e.beginPath(),e.moveTo(0,l),e.lineTo(i,l),e.stroke(),e.beginPath(),e.moveTo(c,0),e.lineTo(c,a),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){let s=this.points[0],c=n.xToPixel(s.barIndex,r,a),l=n.yToPixel(s.price,i,o);return Math.abs(t-l)<=Gt||Math.abs(e-c)<=Gt}getHandle(){return null}},qt=6;function Jt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Yt=class{constructor(e){this.type=`parallelChannel`,this.requiredPoints=3,this.id=`pch_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a),m=0;if(l){let e=(s.price+c.price)/2,n=t.yToPixel(e,r,a);m=t.yToPixel(l.price,r,a)-n}let h=u,g=d+m,_=f,v=p+m;if(e.save(),e.strokeStyle=`#26c6da`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.lineTo(_,v),e.lineTo(h,g),e.closePath(),e.fillStyle=`rgba(38, 198, 218, 0.08)`,e.fill(),e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke(),l&&(e.beginPath(),e.moveTo(h,g),e.lineTo(_,v),e.stroke()),o){let o=[[u,d],[f,p]];if(l){let e=t.xToPixel(l.barIndex,n,i),s=t.yToPixel(l.price,r,a);o.push([e,s])}e.fillStyle=`#26c6da`;for(let[t,n]of o)e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o);if(Jt(e,t,u,d,f,p)<=qt)return!0;if(l){let r=(s.price+c.price)/2,a=n.yToPixel(r,i,o),m=n.yToPixel(l.price,i,o)-a;if(Jt(e,t,u,d+m,f,p+m)<=qt)return!0}return!1}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=qt+2)return{pointIndex:n,cursor:`grab`};return null}},Xt=6;function Zt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Qt=class{constructor(e){this.type=`flatChannel`,this.requiredPoints=3,this.id=`fch_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(s.price,r,a),p=l?l.price-s.price:0,m=t.yToPixel(s.price+p,r,a);if(e.save(),e.strokeStyle=`#ab47bc`,e.lineWidth=o?1.5:1,e.beginPath(),e.rect(Math.min(u,d),Math.min(f,m),Math.abs(d-u),Math.abs(m-f)),e.fillStyle=`rgba(171, 71, 188, 0.08)`,e.fill(),e.beginPath(),e.moveTo(u,f),e.lineTo(d,f),e.stroke(),l&&(e.beginPath(),e.moveTo(u,m),e.lineTo(d,m),e.stroke()),o){e.fillStyle=`#ab47bc`;let o=[[u,f],[d,f]];if(l){let e=t.xToPixel(l.barIndex,n,i),s=t.yToPixel(l.price,r,a);o.push([e,s])}for(let[t,n]of o)e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(s.price,i,o);if(Zt(e,t,u,f,d,f)<=Xt)return!0;if(l){let r=l.price-s.price,a=n.yToPixel(s.price+r,i,o);if(Zt(e,t,u,a,d,a)<=Xt)return!0}return!1}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Xt+2)return{pointIndex:n,cursor:`grab`};return null}},$t=6;function en(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var tn=class{constructor(e){this.type=`disjointChannel`,this.requiredPoints=4,this.id=`dch_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=e=>[t.xToPixel(e.barIndex,n,i),t.yToPixel(e.price,r,a)],[c,l,u,d]=this.points,[f,p]=s(c),[m,h]=s(l);if(e.save(),e.strokeStyle=`#ef9a9a`,e.lineWidth=o?1.5:1,u&&d){let[t,n]=s(u),[r,i]=s(d);if(e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.lineTo(r,i),e.lineTo(t,n),e.closePath(),e.fillStyle=`rgba(239, 154, 154, 0.1)`,e.fill(),e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke(),o){e.fillStyle=`#ef9a9a`;for(let[a,o]of[[f,p],[m,h],[t,n],[r,i]])e.beginPath(),e.arc(a,o,4,0,Math.PI*2),e.fill()}}else if(u){let[t,n]=s(u);if(e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(t,n),e.lineTo(t,n),e.stroke(),o){e.fillStyle=`#ef9a9a`;for(let[r,i]of[[f,p],[m,h],[t,n]])e.beginPath(),e.arc(r,i,4,0,Math.PI*2),e.fill()}}else if(e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.stroke(),o){e.fillStyle=`#ef9a9a`;for(let[t,n]of[[f,p],[m,h]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=e=>[n.xToPixel(e.barIndex,r,a),n.yToPixel(e.price,i,o)],[c,l,u,d]=this.points,[f,p]=s(c),[m,h]=s(l);if(en(e,t,f,p,m,h)<=$t)return!0;if(u&&d){let[n,r]=s(u),[i,a]=s(d);if(en(e,t,n,r,i,a)<=$t)return!0}return!1}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=$t+2)return{pointIndex:n,cursor:`grab`};return null}},nn=[0,.236,.382,.5,.618,.786,1],rn=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`],an=6,on=class{constructor(e){this.type=`fibRetracement`,this.id=`fib_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=Math.max(c.price,l.price),d=u-Math.min(c.price,l.price),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a),m=t.xToPixel(l.barIndex,n,i),h=t.yToPixel(l.price,r,a),g=Math.min(f,m),_=Math.max(f,m);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`;for(let n=0;n<nn.length;n++){let i=nn[n],c=u-d*i,l=t.yToPixel(c,r,a),f=rn[n],p=o?`cc`:`99`;e.strokeStyle=f+p,e.lineWidth=o?1.5:1,e.setLineDash(i===0||i===1?[]:[4,3]),e.beginPath(),e.moveTo(g,l),e.lineTo(_,l),e.stroke(),e.setLineDash([]);let m=`${`${(i*100).toFixed(1)}%`} ${c.toFixed(s)}`;e.fillStyle=f+p,e.fillText(m,g+4,l-3)}for(let[t,n]of[[f,p],[m,h]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=Math.max(this.points[0].price,this.points[1].price),c=s-Math.min(this.points[0].price,this.points[1].price);for(let e of nn){let r=s-c*e,a=n.yToPixel(r,i,o);if(Math.abs(t-a)<=an)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=an+2)return{pointIndex:n,cursor:`grab`};return null}},sn=6,cn=[0,.382,.618,1,1.382,1.618,2,2.618],ln=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`,`#ef5350`],un=class{constructor(e){this.type=`fibExtension`,this.requiredPoints=3,this.id=`fext_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){let[c,l,u]=this.points,d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=t.xToPixel(l.barIndex,n,i),m=t.yToPixel(l.price,r,a);if(!u){e.save(),e.strokeStyle=`#888888aa`,e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.setLineDash([]),e.fillStyle=`#e8b84b`,e.beginPath(),e.arc(d,f,3,0,Math.PI*2),e.fill(),e.restore();return}let h=t.xToPixel(u.barIndex,n,i),g=t.yToPixel(u.price,r,a),_=Math.min(d,p,h),v=Math.max(d,p,h),y=l.price-c.price;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.strokeStyle=`#888888aa`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.beginPath(),e.moveTo(p,m),e.lineTo(h,g),e.stroke(),e.setLineDash([]);for(let n=0;n<cn.length;n++){let i=cn[n],c=u.price+i*y,l=t.yToPixel(c,r,a),d=ln[n],f=o?`cc`:`99`;e.strokeStyle=d+f,e.setLineDash(i===0||i===1?[]:[4,3]),e.beginPath(),e.moveTo(_,l),e.lineTo(v,l),e.stroke(),e.setLineDash([]);let p=`${`${(i*100).toFixed(1)}%`} ${c.toFixed(s)}`;e.fillStyle=d+f,e.fillText(p,_+4,l-3)}for(let[t,n]of[[d,f],[p,m],[h,g]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=c.price-s.price;for(let e of cn){let r=l.price+e*u,a=n.yToPixel(r,i,o);if(Math.abs(t-a)<=sn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;let s=this.points.map(e=>({px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=sn+2)return{pointIndex:n,cursor:`grab`};return null}},dn=6,fn=[0,.236,.382,.5,.618,.786,1],pn=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`];function mn(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var hn=class{constructor(e){this.type=`fibChannel`,this.requiredPoints=3,this.id=`fchann_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){let[c,l,u]=this.points,d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=t.xToPixel(l.barIndex,n,i),m=t.yToPixel(l.price,r,a);if(!u){e.save(),e.strokeStyle=`#888888aa`,e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.setLineDash([]),e.fillStyle=`#e8b84b`,e.beginPath(),e.arc(d,f,3,0,Math.PI*2),e.fill(),e.restore();return}let h=t.xToPixel(u.barIndex,n,i),g=t.yToPixel(u.price,r,a),_=p-d,v=m-f,y=Math.hypot(_,v);if(y===0)return;let b=-v/y,x=_/y,S=(h-d)*b+(g-f)*x;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;for(let t=0;t<fn.length;t++){let n=fn[t],r=n*S,i=d+r*b,a=f+r*x,s=p+r*b,c=m+r*x,l=pn[t],u=o?`cc`:`99`;e.strokeStyle=l+u,e.setLineDash(n===0||n===1?[]:[4,3]),e.beginPath(),e.moveTo(i,a),e.lineTo(s,c),e.stroke(),e.setLineDash([]);let h=`${(n*100).toFixed(1)}%`;e.fillStyle=l+u,e.fillText(h,s+4,c+3)}e.beginPath(),e.arc(h,g,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();for(let[t,n]of[[d,f],[p,m]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.strokeStyle=`#888888aa`,e.setLineDash([3,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(h,g),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=f-u,_=p-d,v=Math.hypot(g,_);if(v===0)return!1;let y=-_/v,b=g/v,x=(m-u)*y+(h-d)*b;for(let n of fn){let r=n*x;if(mn(e,t,u+r*y,d+r*b,f+r*y,p+r*b)<=dn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;let s=this.points.map(e=>({px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=dn+2)return{pointIndex:n,cursor:`grab`};return null}},gn=6,_n=[1,2,3,5,8,13,21,34,55,89],vn=class{constructor(e){this.type=`fibTimezone`,this.id=`ftz_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=c.barIndex-s.barIndex,u=t.xToPixel(s.barIndex,n,i),d=t.xToPixel(c.barIndex,n,i);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;let f=`#e8b84b`,p=o?`cc`:`88`;e.strokeStyle=f+p,e.setLineDash([3,3]),e.beginPath(),e.moveTo(u,0),e.lineTo(u,a),e.stroke(),e.beginPath(),e.moveTo(d,0),e.lineTo(d,a),e.stroke(),e.setLineDash([]);for(let r of _n){let o=s.barIndex+r*l,c=t.xToPixel(o,n,i);c<-50||c>i+50||(e.strokeStyle=f+p,e.setLineDash([5,3]),e.beginPath(),e.moveTo(c,0),e.lineTo(c,a),e.stroke(),e.setLineDash([]),e.fillStyle=f+p,e.fillText(String(r),c+3,12))}let m=t.yToPixel(s.price,r,a),h=t.yToPixel(c.price,r,a);for(let[t,n]of[[u,m],[d,h]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=c.barIndex-s.barIndex,u=n.xToPixel(s.barIndex,r,a);if(Math.abs(e-u)<=gn)return!0;for(let t of _n){let i=s.barIndex+t*l,o=n.xToPixel(i,r,a);if(Math.abs(e-o)<=gn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=gn+2)return{pointIndex:n,cursor:`grab`};return null}},yn=6,bn=[.236,.382,.5,.618,.786,1,1.618,2.618],xn=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`,`#ef5350`],Sn=class{constructor(e){this.type=`fibCircles`,this.id=`fcirc_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.hypot(d-l,f-u);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;for(let t=0;t<bn.length;t++){let n=bn[t],r=n*p,i=xn[t%xn.length],a=o?`cc`:`88`;e.strokeStyle=i+a,e.beginPath(),e.arc(l,u,r,0,Math.PI*2),e.stroke(),e.fillStyle=i+a,e.fillText(`${(n*100).toFixed(1)}%`,l+3,u-r+12)}e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.strokeStyle=`#88888866`,e.setLineDash([3,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.hypot(d-l,f-u),m=Math.hypot(e-l,t-u);for(let e of bn){let t=e*p;if(Math.abs(m-t)<=yn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o),l=n.xToPixel(this.points[1].barIndex,r,a),u=n.yToPixel(this.points[1].price,i,o);return Math.hypot(e-s,t-c)<=yn+2?{pointIndex:0,cursor:`move`}:Math.hypot(e-l,t-u)<=yn+2?{pointIndex:1,cursor:`grab`}:null}},Cn=6,wn=[1,1,2,3,5,8,13,21],Tn=class{constructor(e){this.type=`fibSpiral`,this.id=`fspi_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}computeArcs(e,t,n,r){let i=Math.hypot(n,r)/wn[wn.length-1],a=Math.atan2(r,n),o=[],s=e,c=t,l=a;for(let e=wn.length-1;e>=0;e--){let t=wn[e]*i,n=l+Math.PI,r=n+Math.PI/2;if(o.unshift({ox:s,oy:c,r:t,startAngle:n,endAngle:r}),e>0){let n=wn[e-1]*i,r=l-Math.PI/2;s+=(t-n)*Math.cos(r),c+=(t-n)*Math.sin(r),l-=Math.PI/2}}return o}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=d-l,m=f-u;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.strokeStyle=o?`#e8b84bcc`:`#e8b84b88`,e.lineWidth=o?1.5:1;let h=this.computeArcs(l,u,p,m);e.beginPath();for(let t=0;t<h.length;t++){let n=h[t];if(t===0){let t=n.ox+n.r*Math.cos(n.startAngle),r=n.oy+n.r*Math.sin(n.startAngle);e.moveTo(t,r)}e.arc(n.ox,n.oy,n.r,n.startAngle,n.endAngle,!1)}e.stroke(),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.strokeStyle=`#88888866`,e.setLineDash([3,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=d-l,m=f-u,h=this.computeArcs(l,u,p,m);for(let n of h){let r=n.endAngle-n.startAngle;for(let i=0;i<=16;i++){let a=i/16,o=n.startAngle+a*r,s=n.ox+n.r*Math.cos(o),c=n.oy+n.r*Math.sin(o);if(Math.hypot(e-s,t-c)<=Cn)return!0}}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o),l=n.xToPixel(this.points[1].barIndex,r,a),u=n.yToPixel(this.points[1].price,i,o);return Math.hypot(e-s,t-c)<=Cn+2?{pointIndex:0,cursor:`move`}:Math.hypot(e-l,t-u)<=Cn+2?{pointIndex:1,cursor:`grab`}:null}},En=6,Dn=[.236,.382,.5,.618,.786],On=[`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`];function kn(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function An(e,t,n,r,i,a){let o=n-e,s=r-t;if(o===0&&s===0)return[n,r];let c=1/0;return o>0&&(c=Math.min(c,(i-e)/o)),o<0&&(c=Math.min(c,(0-e)/o)),s>0&&(c=Math.min(c,(a-t)/s)),s<0&&(c=Math.min(c,(0-t)/s)),[e+c*o,t+c*s]}var jn=class{constructor(e){this.type=`fibFan`,this.id=`ffan_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.strokeStyle=`#888888aa`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]);let p=c.price-s.price;for(let n=0;n<Dn.length;n++){let c=Dn[n],f=On[n],m=o?`cc`:`99`,h=s.price+c*p,[g,_]=An(l,u,d,t.yToPixel(h,r,a),i,a);e.strokeStyle=f+m,e.beginPath(),e.moveTo(l,u),e.lineTo(g,_),e.stroke(),e.fillStyle=f+m,e.fillText(`${(c*100).toFixed(1)}%`,Math.min(g-32,i-40),_-3)}for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=c.price-s.price;for(let r of Dn){let c=s.price+r*f,[p,m]=An(l,u,d,n.yToPixel(c,i,o),a,o);if(kn(e,t,l,u,p,m)<=En)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=En+2)return{pointIndex:n,cursor:`grab`};return null}},Mn=6,Nn=[0,.618,1,1.272,1.618,2,2.618],Pn=[`#ef5350`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`,`#ef5350`],Fn=class{constructor(e){this.type=`fibProjection`,this.requiredPoints=3,this.id=`fproj_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){let[c,l,u]=this.points,d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=t.xToPixel(l.barIndex,n,i),m=t.yToPixel(l.price,r,a);if(!u){e.save(),e.strokeStyle=`#888888aa`,e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.setLineDash([]),e.fillStyle=`#e8b84b`,e.beginPath(),e.arc(d,f,3,0,Math.PI*2),e.fill(),e.restore();return}let h=t.xToPixel(u.barIndex,n,i),g=t.yToPixel(u.price,r,a),_=Math.min(d,h),v=Math.max(d,h),y=l.price-c.price;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.strokeStyle=`#888888aa`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.beginPath(),e.moveTo(p,m),e.lineTo(h,g),e.stroke(),e.setLineDash([]);for(let n=0;n<Nn.length;n++){let i=Nn[n],c=u.price+i*y,l=t.yToPixel(c,r,a),d=Pn[n],f=o?`cc`:`99`;e.strokeStyle=d+f,e.setLineDash(i===0||i===1?[]:[4,3]),e.beginPath(),e.moveTo(_,l),e.lineTo(v,l),e.stroke(),e.setLineDash([]);let p=`${`${(i*100).toFixed(1)}%`} ${c.toFixed(s)}`;e.fillStyle=d+f,e.fillText(p,_+4,l-3)}for(let[t,n]of[[d,f],[p,m],[h,g]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=c.price-s.price;for(let e of Nn){let r=l.price+e*u,a=n.yToPixel(r,i,o);if(Math.abs(t-a)<=Mn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;let s=this.points.map(e=>({px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Mn+2)return{pointIndex:n,cursor:`grab`};return null}},In=6;function Ln(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Rn=[[1,8,`1:8`],[1,4,`1:4`],[1,3,`1:3`],[1,2,`1:2`],[1,1,`1:1`],[2,1,`2:1`],[3,1,`3:1`],[4,1,`4:1`],[8,1,`8:1`]],zn=class{constructor(e){this.type=`gannFan`,this.id=`gfan_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.abs(d-l)||1,m=f-u,h=d>l?1:-1;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,Rn.forEach(([t,n,r],a)=>{var o;let s=t/n*m,c=(i-l)/(p*h),d=l+p*h*c,f=u+s*c,g=`#ffa726`+((o=[`55`,`66`,`77`,`99`,`cc`,`99`,`77`,`66`,`55`][a])==null?`88`:o);e.strokeStyle=g,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.fillStyle=g;let _=Math.min(d,i-30);e.fillText(r,_,f-3)}),e.fillStyle=`#ffa726`,e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.abs(d-l)||1,m=f-u,h=d>l?1:-1;for(let[n,r]of Rn){let i=n/r*m,o=(a-l)/(p*h);if(Ln(e,t,l,u,l+p*h*o,u+i*o)<=In)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}],c=[`move`,`grab`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=In+2)return{pointIndex:n,cursor:c[n]};return null}},Bn=6,Vn=class{constructor(e){this.type=`gannSquare`,this.id=`gsq_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.max(l,d),g=Math.max(u,f),_=h-p,v=g-m;e.save(),e.lineWidth=o?1.5:1,e.strokeStyle=`#ab47bc`,e.fillStyle=`#ab47bc0a`,e.fillRect(p,m,_,v),e.strokeRect(p,m,_,v),e.beginPath(),e.moveTo(p,m+v/3),e.lineTo(h,m+v/3),e.moveTo(p,m+2*v/3),e.lineTo(h,m+2*v/3),e.stroke(),e.beginPath(),e.moveTo(p+_/3,m),e.lineTo(p+_/3,g),e.moveTo(p+2*_/3,m),e.lineTo(p+2*_/3,g),e.stroke(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return e>=Math.min(l,d)&&e<=Math.max(l,d)&&t>=Math.min(u,f)&&t<=Math.max(u,f)}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Bn+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Hn=6,Un=class{constructor(e){this.type=`gannBox`,this.id=`gbox_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.max(l,d),g=Math.max(u,f),_=h-p,v=g-m,y=p+_/2,b=m+v/2;e.save(),e.lineWidth=o?1.5:1,e.strokeStyle=`#7e57c2`,e.fillStyle=`#7e57c20a`,e.fillRect(p,m,_,v),e.strokeRect(p,m,_,v),e.beginPath(),e.moveTo(p,m),e.lineTo(h,g),e.stroke(),e.beginPath(),e.moveTo(h,m),e.lineTo(p,g),e.stroke(),e.beginPath(),e.moveTo(p,b),e.lineTo(h,b),e.stroke(),e.beginPath(),e.moveTo(y,m),e.lineTo(y,g),e.stroke(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return e>=Math.min(l,d)&&e<=Math.max(l,d)&&t>=Math.min(u,f)&&t<=Math.max(u,f)}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Hn+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Wn=6,Gn=class{constructor(e){this.type=`rectangle`,this.id=`rect_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);if(e.save(),e.fillStyle=`#9b59b618`,e.strokeStyle=`#9b59b6`,e.lineWidth=o?1.5:1,e.fillRect(p,m,h,g),e.strokeRect(p,m,h,g),o)for(let[t,n]of[[l,u],[d,u],[l,f],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=`#9b59b6`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Wn,m=Math.min(u,f)-Wn,h=Math.abs(d-l)+Wn*2,g=Math.abs(f-u)+Wn*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=l<=d?u<=f?`nwse-resize`:`nesw-resize`:u<=f?`nesw-resize`:`nwse-resize`,m=[[0,l,u,p],[1,d,f,p]];for(let[n,r,i,a]of m)if(Math.hypot(e-r,t-i)<=Wn+2)return{pointIndex:n,cursor:a};return null}},Kn=6;function qn(e,t,n){let r=!1,i=n.length;for(let a=0,o=i-1;a<i;o=a++){let[i,s]=n[a],[c,l]=n[o];s>t!=l>t&&e<(c-i)*(t-s)/(l-s)+i&&(r=!r)}return r}var Jn=class{constructor(e){this.type=`rotatedRectangle`,this.requiredPoints=3,this.id=`rrect_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}getCorners(e,t,n,r,i){let[a,o,s]=this.points,c=e.xToPixel(a.barIndex,t,r),l=e.yToPixel(a.price,n,i),u=e.xToPixel(o.barIndex,t,r),d=e.yToPixel(o.price,n,i),f=e.xToPixel(s.barIndex,t,r),p=e.yToPixel(s.price,n,i),m=Math.hypot(u-c,d-l);if(m<1e-6)return[[c,l],[u,d],[u,d],[c,l]];let h=-(d-l)/m,g=(u-c)/m,_=(f-c)*h+(p-l)*g,v=c,y=l,b=u,x=d,S=b+h*_,C=x+g*_,w=v+h*_,T=y+g*_;return[[v,y],[b,x],[S,C],[w,T]]}render(e,t,n,r,i,a,o){if(this.points.length<3)return;let s=this.getCorners(t,n,r,i,a);e.save(),e.beginPath(),e.moveTo(s[0][0],s[0][1]);for(let t=1;t<s.length;t++)e.lineTo(s[t][0],s[t][1]);e.closePath(),e.fillStyle=`#9c27b018`,e.fill(),e.strokeStyle=`#9c27b0`,e.lineWidth=o?1.5:1,e.stroke(),e.fillStyle=`#9c27b0`;for(let[t,n]of s)e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){return this.points.length<3?!1:qn(e,t,this.getCorners(n,r,i,a,o))}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Kn+2)return{pointIndex:s,cursor:`grab`}}return null}},Yn=6,Xn=class{constructor(e){this.type=`ellipse`,this.id=`ell_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=(l+d)/2,m=(u+f)/2,h=Math.abs(d-l)/2,g=Math.abs(f-u)/2;if(!(h<1||g<1)){if(e.save(),e.fillStyle=`#2196f318`,e.strokeStyle=`#2196f3`,e.lineWidth=o?1.5:1,e.beginPath(),e.ellipse(p,m,h,g,0,0,Math.PI*2),e.fill(),e.stroke(),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=`#2196f3`,e.fill();e.restore()}}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=(l+d)/2,m=(u+f)/2,h=Math.abs(d-l)/2+Yn,g=Math.abs(f-u)/2+Yn;if(h<1||g<1)return!1;let _=(e-p)/h,v=(t-m)/g;return _*_+v*v<=1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=l<=d?u<=f?`nwse-resize`:`nesw-resize`:u<=f?`nesw-resize`:`nwse-resize`,m=[[0,l,u,p],[1,d,f,p]];for(let[n,r,i,a]of m)if(Math.hypot(e-r,t-i)<=Yn+2)return{pointIndex:n,cursor:a};return null}},Zn=6;function Qn(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var $n=class{constructor(e){this.type=`triangle`,this.requiredPoints=3,this.id=`tri_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=`#ff9800`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);if(this.complete&&(e.closePath(),e.fillStyle=`#ff980018`,e.fill()),e.stroke(),o)for(let t=0;t<s.length;t++)e.beginPath(),e.arc(s[t],c[t],4,0,Math.PI*2),e.fillStyle=`#ff9800`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l;n++){let r=(n+1)%l;if(Qn(e,t,s[n],c[n],s[r],c[r])<=Zn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Zn+2)return{pointIndex:s,cursor:`grab`}}return null}},er=6,tr=class{constructor(e){this.type=`circle`,this.id=`circ_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.hypot(d-l,f-u);p<1||(e.save(),e.fillStyle=`#4caf5018`,e.strokeStyle=`#4caf50`,e.lineWidth=o?1.5:1,e.beginPath(),e.arc(l,u,p,0,Math.PI*2),e.fill(),e.stroke(),o&&(e.beginPath(),e.arc(l,u,3,0,Math.PI*2),e.fillStyle=`#4caf50`,e.fill(),e.beginPath(),e.arc(d,f,3.5,0,Math.PI*2),e.fillStyle=`#4caf50`,e.fill()),e.restore())}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.hypot(d-l,f-u);return Math.hypot(e-l,t-u)<=p+er}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return Math.hypot(e-l,t-u)<=er+2?{pointIndex:0,cursor:`move`}:Math.hypot(e-d,t-f)<=er+2?{pointIndex:1,cursor:`grab`}:null}},nr=6;function rr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ir=class{constructor(e){this.type=`arc`,this.requiredPoints=3,this.id=`arc_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<3)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a),m=t.xToPixel(l.barIndex,n,i),h=t.yToPixel(l.price,r,a);e.save(),e.strokeStyle=`#26c6da`,e.lineWidth=o?1.5:1;let g=u,_=d,v=f,y=p,b=m,x=h,S=2*(g*(y-x)+v*(x-_)+b*(_-y));if(Math.abs(S)<1e-6)e.beginPath(),e.moveTo(u,d),e.lineTo(m,h),e.stroke();else{let t=g*g,n=_*_,r=v*v,i=y*y,a=b*b,o=x*x,s=((t+n)*(y-x)+(r+i)*(x-_)+(a+o)*(_-y))/S,c=((t+n)*(b-v)+(r+i)*(g-b)+(a+o)*(v-g))/S,l=Math.hypot(g-s,_-c),u=Math.atan2(_-c,g-s),d=Math.atan2(y-c,v-s),f=Math.atan2(x-c,b-s),p=(e,t)=>{let n=e-t;for(;n<0;)n+=Math.PI*2;for(;n>=Math.PI*2;)n-=Math.PI*2;return n},m=p(d,u)>p(f,u);e.beginPath(),e.arc(s,c,l,u,f,m),e.stroke()}let C=[[u,d],[f,p],[m,h]];e.fillStyle=`#26c6da`;for(let[t,n]of C)e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=u,_=d,v=f,y=p,b=m,x=h,S=2*(g*(y-x)+v*(x-_)+b*(_-y));if(Math.abs(S)<1e-6)return rr(e,t,u,d,m,h)<=nr;let C=g*g,w=_*_,T=v*v,E=y*y,D=b*b,O=x*x,k=((C+w)*(y-x)+(T+E)*(x-_)+(D+O)*(_-y))/S,A=((C+w)*(b-v)+(T+E)*(g-b)+(D+O)*(v-g))/S,j=Math.hypot(g-k,_-A);if(Math.abs(Math.hypot(e-k,t-A)-j)>nr)return!1;let M=Math.atan2(_-A,g-k),ee=Math.atan2(y-A,v-k),N=Math.atan2(x-A,b-k),te=Math.atan2(t-A,e-k),P=(e,t)=>{let n=e-t;for(;n<0;)n+=Math.PI*2;for(;n>=Math.PI*2;)n-=Math.PI*2;return n},ne=P(ee,M),F=P(N,M),I=P(te,M);return ne>F?I>=F||I<=0:I<=F}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=nr+2)return{pointIndex:s,cursor:`grab`}}return null}},ar=6;function or(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var sr=class{constructor(e){this.type=`polyline`,this.openEnded=!0,this.id=`poly_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)}));e.save(),e.strokeStyle=`#ff7043`,e.lineWidth=o?1.5:1;let c=this.complete?s.length:s.length-1;if(c>=2){e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y);for(let t=1;t<c;t++)e.lineTo(s[t].x,s[t].y);e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([4,4]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.fillStyle=`#ff7043`;let l=this.complete?s.length:s.length-1;for(let t=0;t<l;t++)e.beginPath(),e.arc(s[t].x,s[t].y,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(or(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=ar)return!0;return!1}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ar+2)return{pointIndex:s,cursor:`grab`}}return null}},cr=6;function lr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ur=class{constructor(e){this.type=`path`,this.openEnded=!0,this.id=`path_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)})),c=this.complete?s.length:s.length-1;if(e.save(),e.strokeStyle=`#ec407a`,e.lineWidth=o?1.5:1,c>=2){if(e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y),c===2)e.lineTo(s[1].x,s[1].y);else{for(let t=1;t<c-1;t++){let n=(s[t].x+s[t+1].x)/2,r=(s[t].y+s[t+1].y)/2;e.quadraticCurveTo(s[t].x,s[t].y,n,r)}e.lineTo(s[c-1].x,s[c-1].y)}e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([4,4]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.fillStyle=`#ec407a`;for(let t=0;t<c;t++)e.beginPath(),e.arc(s[t].x,s[t].y,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(lr(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=cr)return!0;return!1}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=cr+2)return{pointIndex:s,cursor:`grab`}}return null}},dr=6;function fr(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var pr=class{constructor(e){this.type=`priceRange`,this.id=`pr_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=(u+f)/2,h=(d+p)/2,g=Math.min(d,p),_=Math.max(d,p),v=`#26a69a`;e.save(),e.strokeStyle=v,e.fillStyle=v,e.lineWidth=o?1.5:1,e.font=`10px 'Inter', system-ui, sans-serif`,e.beginPath(),e.moveTo(m,g),e.lineTo(m,_),e.stroke(),fr(e,m,_,m,g),fr(e,m,g,m,_),e.beginPath(),e.moveTo(u-10,d),e.lineTo(u+10,d),e.stroke(),e.beginPath(),e.moveTo(f-10,p),e.lineTo(f+10,p),e.stroke();let y=Math.abs(c.price-l.price).toFixed(s),b=((l.price-c.price)/c.price*100).toFixed(2)+`%`,x=y,S=b,C=m+8,w=h-30/2;e.fillStyle=`rgba(0,0,0,0.55)`,e.fillRect(C,w,70,30),e.strokeStyle=v,e.strokeRect(C,w,70,30),e.fillStyle=v,e.fillText(x,C+4,w+4+10),e.fillText(S,C+4,w+4+22),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=(l+d)/2,m=Math.min(u,f),h=Math.max(u,f);return Math.abs(e-p)<=dr&&t>=m&&t<=h}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=dr+2)return{pointIndex:n,cursor:`ns-resize`};return null}},mr=6;function hr(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var gr=class{constructor(e){this.type=`dateRange`,this.id=`dr_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=(u+f)/2,m=Math.min(l,d),h=Math.max(l,d),g=`#42a5f5`;e.save(),e.strokeStyle=g,e.fillStyle=g,e.lineWidth=o?1.5:1,e.font=`10px 'Inter', system-ui, sans-serif`,e.beginPath(),e.moveTo(m,p),e.lineTo(h,p),e.stroke(),hr(e,h,p,m,p),hr(e,m,p,h,p),e.beginPath(),e.moveTo(l,u-10),e.lineTo(l,u+10),e.stroke(),e.beginPath(),e.moveTo(d,f-10),e.lineTo(d,f+10),e.stroke();let _=`${Math.abs(c.barIndex-s.barIndex)} bars`,v=(l+d)/2,y=e.measureText(_).width;e.fillStyle=g,e.fillText(_,v-y/2,p-10),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=(u+n.yToPixel(c.price,i,o))/2,p=Math.min(l,d),m=Math.max(l,d);return Math.abs(t-f)<=mr&&e>=p&&e<=m}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=mr+2)return{pointIndex:n,cursor:`ew-resize`};return null}},_r=6;function vr(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var yr=class{constructor(e){this.type=`datePriceRange`,this.id=`dpr_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=Math.min(u,f),h=Math.min(d,p),g=Math.max(u,f),_=Math.max(d,p),v=g-m,y=_-h,b=`#66bb6a`;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.fillStyle=`#66bb6a12`,e.fillRect(m,h,v,y),e.strokeStyle=b,e.setLineDash([5,3]),e.strokeRect(m,h,v,y),e.setLineDash([]),e.strokeStyle=b,e.fillStyle=b,e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke(),vr(e,u,d,f,p);let x=`\u0394${Math.abs(c.price-l.price).toFixed(s)}`;e.fillStyle=b,e.fillText(x,g+4,(h+_)/2);let S=`${Math.abs(l.barIndex-c.barIndex)} bars`,C=e.measureText(S).width;e.fillText(S,m+v/2-C/2,_+12),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-_r,m=Math.min(u,f)-_r,h=Math.max(l,d)+_r,g=Math.max(u,f)+_r;return e>=p&&e<=h&&t>=m&&t<=g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=_r+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},br=6;function xr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Sr=class{constructor(e){this.type=`ruler`,this.id=`rul_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=`#ffb300`,h=Math.atan2(p-d,f-u),g=h+Math.PI/2;e.save(),e.strokeStyle=m,e.fillStyle=m,e.lineWidth=2,e.font=`10px 'Inter', system-ui, sans-serif`,e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke(),e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(u-8*Math.cos(g),d-8*Math.sin(g)),e.lineTo(u+8*Math.cos(g),d+8*Math.sin(g)),e.stroke(),e.beginPath(),e.moveTo(f-8*Math.cos(g),p-8*Math.sin(g)),e.lineTo(f+8*Math.cos(g),p+8*Math.sin(g)),e.stroke();let _=(u+f)/2,v=(d+p)/2,y=Math.abs(l.barIndex-c.barIndex),b=(l.price-c.price).toFixed(s),x=`${y} bars`,S=`${b}`,C=-12*Math.sin(h),w=12*Math.cos(h);e.fillStyle=m,e.fillText(x,_+C,v+w-12),e.fillText(S,_+C,v+w),e.beginPath(),e.arc(u,d,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(f,p,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return xr(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=br}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=br+2)return{pointIndex:n,cursor:`grab`};return null}},Cr=6;function wr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function Tr(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Er=class{constructor(e){this.type=`pitchfork`,this.requiredPoints=3,this.id=`pfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ffa726`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(f+s)/2,h=(p+c)/2,g=m-u,_=h-d,[v,y]=Tr(u,d,g,_,i);e.beginPath(),e.moveTo(u,d),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(u,d),e.lineTo(v,y),e.stroke();let[b,x]=Tr(f,p,g,_,i);e.beginPath(),e.moveTo(f,p),e.lineTo(b,x),e.stroke();let[S,C]=Tr(s,c,g,_,i);if(e.beginPath(),e.moveTo(s,c),e.lineTo(S,C),e.stroke(),o){e.fillStyle=`#ffa726`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(f+m)/2,_=(p+h)/2,v=g-u,y=_-d,[b,x]=Tr(u,d,v,y,a),[S,C]=Tr(f,p,v,y,a),[w,T]=Tr(m,h,v,y,a);return wr(e,t,u,d,b,x)<=Cr||wr(e,t,f,p,S,C)<=Cr||wr(e,t,m,h,w,T)<=Cr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Cr+2)return{pointIndex:n,cursor:`grab`};return null}},Dr=6;function Or(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function kr(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Ar=class{constructor(e){this.type=`schiffPitchfork`,this.requiredPoints=3,this.id=`spfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ff7043`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(u+f)/2,h=(d+p)/2,g=(f+s)/2,_=(p+c)/2,v=g-m,y=_-h,[b,x]=kr(m,h,v,y,i);e.beginPath(),e.moveTo(m,h),e.lineTo(g,_),e.stroke(),e.beginPath(),e.moveTo(m,h),e.lineTo(b,x),e.stroke();let[S,C]=kr(f,p,v,y,i);e.beginPath(),e.moveTo(f,p),e.lineTo(S,C),e.stroke();let[w,T]=kr(s,c,v,y,i);if(e.beginPath(),e.moveTo(s,c),e.lineTo(w,T),e.stroke(),o){e.fillStyle=`#ff7043`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(u+f)/2,_=(d+p)/2,v=(f+m)/2,y=(p+h)/2,b=v-g,x=y-_,[S,C]=kr(g,_,b,x,a),[w,T]=kr(f,p,b,x,a),[E,D]=kr(m,h,b,x,a);return Or(e,t,g,_,S,C)<=Dr||Or(e,t,f,p,w,T)<=Dr||Or(e,t,m,h,E,D)<=Dr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Dr+2)return{pointIndex:n,cursor:`grab`};return null}},jr=6;function Mr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function Nr(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Pr=class{constructor(e){this.type=`modifiedSchiff`,this.requiredPoints=3,this.id=`mspfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ef5350`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(f+s)/2,h=(p+c)/2,g=(u+m)/2,_=(d+h)/2,v=m-g,y=h-_,[b,x]=Nr(g,_,v,y,i);e.beginPath(),e.moveTo(g,_),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(g,_),e.lineTo(b,x),e.stroke();let[S,C]=Nr(f,p,v,y,i);e.beginPath(),e.moveTo(f,p),e.lineTo(S,C),e.stroke();let[w,T]=Nr(s,c,v,y,i);if(e.beginPath(),e.moveTo(s,c),e.lineTo(w,T),e.stroke(),o){e.fillStyle=`#ef5350`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(f+m)/2,_=(p+h)/2,v=(u+g)/2,y=(d+_)/2,b=g-v,x=_-y,[S,C]=Nr(v,y,b,x,a),[w,T]=Nr(f,p,b,x,a),[E,D]=Nr(m,h,b,x,a);return Mr(e,t,v,y,S,C)<=jr||Mr(e,t,f,p,w,T)<=jr||Mr(e,t,m,h,E,D)<=jr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=jr+2)return{pointIndex:n,cursor:`grab`};return null}},Fr=6;function Ir(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function q(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Lr=class{constructor(e){this.type=`insidePitchfork`,this.requiredPoints=3,this.id=`ipfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ab47bc`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(f+s)/2,h=(p+c)/2,g=m-u,_=h-d;e.beginPath(),e.moveTo(u,d),e.lineTo(m,h),e.stroke();let[v,y]=q(u,d,g,_,i);e.beginPath(),e.moveTo(u,d),e.lineTo(v,y),e.stroke();let[b,x]=q(f,p,g,_,i);e.beginPath(),e.moveTo(f,p),e.lineTo(b,x),e.stroke();let[S,C]=q(s,c,g,_,i);e.beginPath(),e.moveTo(s,c),e.lineTo(S,C),e.stroke();let w=(u+f)/2,T=(d+p)/2,[E,D]=q(w,T,g,_,i);e.globalAlpha=.55,e.setLineDash([4,3]),e.beginPath(),e.moveTo(w,T),e.lineTo(E,D),e.stroke();let O=(u+s)/2,k=(d+c)/2,[A,j]=q(O,k,g,_,i);if(e.beginPath(),e.moveTo(O,k),e.lineTo(A,j),e.stroke(),e.setLineDash([]),e.globalAlpha=1,o){e.fillStyle=`#ab47bc`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(f+m)/2,_=(p+h)/2,v=g-u,y=_-d,[b,x]=q(u,d,v,y,a),[S,C]=q(f,p,v,y,a),[w,T]=q(m,h,v,y,a);if(Ir(e,t,u,d,b,x)<=Fr||Ir(e,t,f,p,S,C)<=Fr||Ir(e,t,m,h,w,T)<=Fr)return!0;let E=(u+f)/2,D=(d+p)/2,[O,k]=q(E,D,v,y,a);if(Ir(e,t,E,D,O,k)<=Fr)return!0;let A=(u+m)/2,j=(d+h)/2,[M,ee]=q(A,j,v,y,a);return Ir(e,t,A,j,M,ee)<=Fr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Fr+2)return{pointIndex:n,cursor:`grab`};return null}},Rr=6,zr=`#64b5f6`,Br=[.35,.55,.75,1,1,.75,.55,.35],Vr=class{constructor(e){this.type=`fixedRangeVP`,this.id=`frvp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.strokeStyle=zr,e.lineWidth=o?1.5:1,e.strokeRect(p,m,h,g);let _=Br.length,v=g/_,y=h*.6;for(let t=0;t<_;t++){let n=y*Br[t],r=m+t*v;e.fillStyle=zr+`60`,e.fillRect(p,r,n,v-1)}if(e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=zr,e.fillText(`Volume Profile`,p+4,m+13),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=zr,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Rr,m=Math.min(u,f)-Rr,h=Math.abs(d-l)+Rr*2,g=Math.abs(f-u)+Rr*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=Rr+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Hr=6,Ur=`#4db6ac`,Wr=[.35,.55,.75,1,1,.75,.55,.35],Gr=class{constructor(e){this.type=`anchoredVP`,this.id=`avp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.strokeStyle=Ur,e.lineWidth=o?1.5:1,e.strokeRect(p,m,h,g);let _=Wr.length,v=g/_,y=h*.6;for(let t=0;t<_;t++){let n=y*Wr[t],r=m+t*v;e.fillStyle=Ur+`60`,e.fillRect(p,r,n,v-1)}if(e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Ur,e.fillText(`Anchored VP`,p+4,m+13),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fillStyle=Ur,e.fill(),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=Ur,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Hr,m=Math.min(u,f)-Hr,h=Math.abs(d-l)+Hr*2,g=Math.abs(f-u)+Hr*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=Hr+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Kr=6,qr=`#26a69a`,Jr=[.25,.45,.65,.85,1,1,.85,.65,.45,.25],Yr=class{constructor(e){this.type=`volumeProfile`,this.id=`vp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.strokeStyle=qr,e.lineWidth=o?1.5:1,e.strokeRect(p,m,h,g);let _=Jr.length,v=g/_,y=h*.6;for(let t=0;t<_;t++){let n=y*Jr[t],r=m+t*v;e.fillStyle=qr+`55`,e.fillRect(p,r,n,v-1)}if(e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=qr,e.fillText(`Volume Profile`,p+4,m+13),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=qr,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Kr,m=Math.min(u,f)-Kr,h=Math.abs(d-l)+Kr*2,g=Math.abs(f-u)+Kr*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=Kr+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Xr=6;function Zr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Qr=class{constructor(e){this.type=`regressionTrend`,this.id=`reg_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=`#26c6da`,m=Math.hypot(d-l,f-u)||1,h=-(f-u)/m,g=(d-l)/m;e.save(),e.strokeStyle=p,e.fillStyle=p,e.lineWidth=o?1.5:1,e.setLineDash([]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([4,3]),e.beginPath(),e.moveTo(l+h*20,u+g*20),e.lineTo(d+h*20,f+g*20),e.stroke(),e.beginPath(),e.moveTo(l-h*20,u-g*20),e.lineTo(d-h*20,f-g*20),e.stroke(),e.setLineDash([]),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return Zr(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=Xr}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Xr+2)return{pointIndex:n,cursor:`grab`};return null}},$r=6,ei=`Text`,ti=4,ni=class{constructor(e){this.type=`text`,this.text=``,this.id=`txt_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.font=`13px system-ui, sans-serif`,e.textBaseline=`top`;let l=this.text||ei,u=!this.text,d=e.measureText(l).width;o&&(e.strokeStyle=`#2196f3`,e.lineWidth=1,e.strokeRect(s-2,c-2,d+ti*2,20)),e.fillStyle=u?`#888`:`#f5f5f5`,e.fillText(l,s+ti,c),o&&(e.strokeStyle=`#f5f5f5`,e.lineWidth=1,e.beginPath(),e.moveTo(s,c+16),e.lineTo(s+d+ti*2,c+16),e.stroke()),e.restore()}hitTest(e,t,n,r,i,a,o){var s,c;let l=n.xToPixel(this.points[0].barIndex,r,a),u=n.yToPixel(this.points[0].price,i,o),d=Math.max(40,((s=(c=this.text)==null?void 0:c.length)==null?4:s)*8);return e>=l-$r&&e<=l+d+$r&&t>=u-$r&&t<=u+16+$r}getHandle(){return null}},ri=6,J=24,ii=8,ai=12;function oi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function si(e,t,n,r,i,a){e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.arcTo(t+r,n,t+r,n+a,a),e.lineTo(t+r,n+i-a),e.arcTo(t+r,n+i,t+r-a,n+i,a),e.lineTo(t+a,n+i),e.arcTo(t,n+i,t,n+i-a,a),e.lineTo(t,n+a),e.arcTo(t,n,t+a,n,a),e.closePath()}var ci=class{constructor(e){this.type=`callout`,this.text=``,this.id=`cal_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}getBoxW(e){let t=this.text||`Note`;return Math.max(60,e.measureText(t).width+ai*2)}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.font=`11px system-ui, sans-serif`,e.lineWidth=o?1.5:1;let p=this.getBoxW(e),m=d-p/2,h=f-J/2,g=Math.max(m,Math.min(m+p,l)),_=Math.max(h,Math.min(h+J,u)),v=l<m?m:l>m+p?m+p:g,y=u<h?h:u>h+J?h+J:_;e.strokeStyle=`#546e7a`,e.beginPath(),e.moveTo(v,y),e.lineTo(l,u),e.stroke(),e.fillStyle=`#546e7a`,e.beginPath(),e.arc(l,u,3,0,Math.PI*2),e.fill(),si(e,m,h,p,J,ii),e.fillStyle=`#37474f`,e.fill(),e.strokeStyle=`#546e7a`,e.stroke();let b=this.text||`Note`;e.fillStyle=this.text?`#f5f5f5`:`#888`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(b,d,f),e.restore()}hitTest(e,t,n,r,i,a,o){var s,c;if(this.points.length<2)return!1;let[l,u]=this.points,d=n.xToPixel(l.barIndex,r,a),f=n.yToPixel(l.price,i,o),p=n.xToPixel(u.barIndex,r,a),m=n.yToPixel(u.price,i,o),h=Math.max(60,((s=(c=this.text)==null?void 0:c.length)==null?4:s)*7+24),g=p-h/2,_=m-J/2;return e>=g-ri&&e<=g+h+ri&&t>=_-ri&&t<=_+J+ri||oi(e,t,d<g?g:d>g+h?g+h:Math.max(g,Math.min(g+h,d)),f<_?_:f>_+J?_+J:Math.max(_,Math.min(_+J,f)),d,f)<=ri}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}],c=[`grab`,`move`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=ri+4)return{pointIndex:n,cursor:c[n]};return null}},li=6,ui=60,Y=18,di=7,fi=class{constructor(e){this.type=`priceLabel`,this.id=`plbl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o,s=2){let c=t.xToPixel(this.points[0].barIndex,n,i),l=t.yToPixel(this.points[0].price,r,a),u=this.points[0].price;e.save(),e.fillStyle=`#26a69a`,e.beginPath(),e.moveTo(c,l),e.lineTo(c+di,l-Y/2),e.lineTo(c+di,l+Y/2),e.closePath(),e.fill();let d=c+di,f=l-Y/2;e.fillStyle=`#26a69a`,e.beginPath(),e.roundRect(d,f,ui,Y,Y/2),e.fill(),o&&(e.strokeStyle=`#80cbc4`,e.lineWidth=1.5,e.beginPath(),e.roundRect(d-2,f-2,ui+4,Y+4,Y/2+2),e.stroke()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=`#ffffff`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(u.toFixed(s),d+ui/2,l),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o),l=s+di,u=c-Y/2;return e>=s-li&&e<=l+ui+li&&t>=u-li&&t<=u+Y+li}getHandle(){return null}},pi=6;function mi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var hi=class{constructor(e){this.type=`arrowMarker`,this.id=`arw_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.strokeStyle=`#ef5350`,e.fillStyle=`#ef5350`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke();let p=Math.atan2(f-u,d-l);if(e.beginPath(),e.moveTo(d,f),e.lineTo(d-10*Math.cos(p-Math.PI/6),f-10*Math.sin(p-Math.PI/6)),e.lineTo(d-10*Math.cos(p+Math.PI/6),f-10*Math.sin(p+Math.PI/6)),e.closePath(),e.fill(),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return mi(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=pi}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=pi+2)return{pointIndex:n,cursor:`grab`};return null}},gi=class{constructor(e){this.type=`flag`,this.id=`flag_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.strokeStyle=`#ef5350`,e.fillStyle=`#ef5350`,e.lineWidth=1.5,e.beginPath(),e.moveTo(s,c+20),e.lineTo(s,c-10),e.stroke();let l=s,u=c-10;e.fillRect(l,u,16,10),e.font=`8px system-ui, sans-serif`,e.fillStyle=`#ffffff`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(`F`,l+8,u+5),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return Math.hypot(e-s,t-c)<=20}getHandle(){return null}},_i=6,vi=16,yi=6,bi=10,xi=class{constructor(e){this.type=`priceNote`,this.id=`pnote_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o,s=2){let c=t.xToPixel(this.points[0].barIndex,n,i),l=t.yToPixel(this.points[0].price,r,a),u=this.points[0].price.toFixed(s);e.save(),e.strokeStyle=`#ffa726`,e.lineWidth=1.5,e.beginPath(),e.moveTo(c-bi,l),e.lineTo(c+bi,l),e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;let d=e.measureText(u).width+yi*2,f=c+bi+2,p=l-vi/2;e.fillStyle=`#ffa726`,e.beginPath(),e.roundRect(f,p,d,vi,3),e.fill(),e.fillStyle=`#ffffff`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(u,f+d/2,l),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return e>=s-bi-_i&&e<=s+bi+_i&&Math.abs(t-c)<=_i}getHandle(){return null}},Si=6,Ci=20,wi=10;function Ti(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ei=class{constructor(e){this.type=`anchoredNote`,this.text=``,this.id=`anote_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}getBadgeW(e){let t=this.text||`Note`;return Math.max(50,e.measureText(t).width+wi*2)}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.font=`11px system-ui, sans-serif`,e.lineWidth=o?1.5:1;let p=this.getBadgeW(e),m=d-p/2,h=f-Ci/2;e.strokeStyle=`#42a5f5`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]),e.fillStyle=`#42a5f5`,e.beginPath(),e.arc(l,u,3,0,Math.PI*2),e.fill(),e.fillStyle=`#37474f`,e.beginPath(),e.roundRect(m,h,p,Ci,4),e.fill(),e.strokeStyle=`#42a5f5`,e.lineWidth=o?1.5:1,e.beginPath(),e.roundRect(m,h,p,Ci,4),e.stroke();let g=this.text||`Note`;e.fillStyle=this.text?`#f5f5f5`:`#888`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(g,d,f),e.restore()}hitTest(e,t,n,r,i,a,o){var s,c;if(this.points.length<2)return!1;let[l,u]=this.points,d=n.xToPixel(l.barIndex,r,a),f=n.yToPixel(l.price,i,o),p=n.xToPixel(u.barIndex,r,a),m=n.yToPixel(u.price,i,o),h=Math.max(50,((s=(c=this.text)==null?void 0:c.length)==null?4:s)*7+20),g=p-h/2,_=m-Ci/2;return e>=g-Si&&e<=g+h+Si&&t>=_-Si&&t<=_+Ci+Si||Ti(e,t,d,f,p,m)<=Si}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}],c=[`grab`,`move`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Si+4)return{pointIndex:n,cursor:c[n]};return null}},Di=class{constructor(e){this.type=`arrowUp`,this.id=`awup_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.strokeStyle=`#26a69a`,e.fillStyle=`#26a69a`,e.lineWidth=1.5,e.beginPath(),e.moveTo(s,c+10),e.lineTo(s,c-2),e.stroke();let l=s,u=c-10;e.beginPath(),e.moveTo(l,u),e.lineTo(l-6,u+10),e.lineTo(l+6,u+10),e.closePath(),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return Math.hypot(e-s,t-c)<=12}getHandle(){return null}},Oi=class{constructor(e){this.type=`arrowDown`,this.id=`awdn_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.strokeStyle=`#ef5350`,e.fillStyle=`#ef5350`,e.lineWidth=1.5,e.beginPath(),e.moveTo(s,c-10),e.lineTo(s,c+2),e.stroke();let l=s,u=c+10;e.beginPath(),e.moveTo(l,u),e.lineTo(l-6,u-10),e.lineTo(l+6,u-10),e.closePath(),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return Math.hypot(e-s,t-c)<=12}getHandle(){return null}},ki=6;function Ai(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ji=`#ff7043`,Mi=class{constructor(e){this.type=`headShoulders`,this.requiredPoints=5,this.id=`hs_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`LS`,`H`,`RS`,`L1`,`L2`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=ji,e.lineWidth=o?1.5:1;let d=[0,3,1,4,2].filter(e=>e<u);if(d.length>=2){e.beginPath(),e.moveTo(c[d[0]],l[d[0]]);for(let t=1;t<d.length;t++)e.lineTo(c[d[t]],l[d[t]]);e.stroke()}this.complete&&u===5&&(e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[3],l[3]),e.lineTo(c[1],l[1]),e.lineTo(c[4],l[4]),e.lineTo(c[2],l[2]),e.closePath(),e.fillStyle=ji+`10`,e.fill()),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=ji,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[3],l[3]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=ji;for(let t=0;t<u;t++){var f;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((f=s[t])==null?String(t):f,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length,u=[0,3,1,4,2].filter(e=>e<l);for(let n=0;n<u.length-1;n++){let r=u[n],i=u[n+1];if(Ai(e,t,s[r],c[r],s[i],c[i])<=ki)return!0}return l>=5&&Ai(e,t,s[3],c[3],s[4],c[4])<=ki}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ki+2)return{pointIndex:s,cursor:`grab`}}return null}},Ni=6;function Pi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Fi=`#ffa726`,Ii=class{constructor(e){this.type=`trianglePattern`,this.requiredPoints=5,this.id=`tpat_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`1`,`2`,`3`,`4`,`5`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=Fi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=3&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Fi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[2],l[2]),u>=5&&e.lineTo(c[4],l[4]),e.stroke(),e.restore()),u>=4&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Fi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[1],l[1]),e.lineTo(c[3],l[3]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Fi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t+1):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Pi(e,t,s[n],c[n],s[n+1],c[n+1])<=Ni)return!0;return l>=3&&Pi(e,t,s[0],c[0],s[2],c[2])<=Ni||l>=5&&Pi(e,t,s[2],c[2],s[4],c[4])<=Ni||l>=4&&Pi(e,t,s[1],c[1],s[3],c[3])<=Ni}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Ni+2)return{pointIndex:s,cursor:`grab`}}return null}},Li=6;function Ri(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var zi=`#66bb6a`,Bi=class{constructor(e){this.type=`threeDrives`,this.requiredPoints=7,this.id=`td_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`O`,`A`,`B`,`C`,`D`,`E`,`F`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=zi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);if(e.stroke(),this.complete&&u===7){e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.closePath(),e.fillStyle=zi+`18`,e.fill()}e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=zi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Ri(e,t,s[n],c[n],s[n+1],c[n+1])<=Li)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Li+2)return{pointIndex:s,cursor:`grab`}}return null}},Vi=6;function Hi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ui=`#42a5f5`,Wi=class{constructor(e){this.type=`abcdPattern`,this.requiredPoints=4,this.id=`abcd_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=Ui,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=4&&(e.save(),e.setLineDash([3,4]),e.strokeStyle=Ui,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[3],l[3]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Ui;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Hi(e,t,s[n],c[n],s[n+1],c[n+1])<=Vi)return!0;return l>=4&&Hi(e,t,s[0],c[0],s[3],c[3])<=Vi}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Vi+2)return{pointIndex:s,cursor:`grab`}}return null}},Gi=6;function Ki(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var qi=`#ab47bc`,Ji=class{constructor(e){this.type=`cypherPattern`,this.requiredPoints=5,this.id=`cyp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=qi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);if(e.stroke(),this.complete&&u===5){e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.closePath(),e.fillStyle=qi+`12`,e.fill()}e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=qi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Ki(e,t,s[n],c[n],s[n+1],c[n+1])<=Gi)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Gi+2)return{pointIndex:s,cursor:`grab`}}return null}},Yi=6;function Xi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Zi=`#ec407a`,Qi=class{constructor(e){this.type=`butterflyPattern`,this.requiredPoints=5,this.id=`bfly_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=Zi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Zi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Zi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Xi(e,t,s[n],c[n],s[n+1],c[n+1])<=Yi)return!0;return l>=5&&Xi(e,t,s[0],c[0],s[4],c[4])<=Yi}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Yi+2)return{pointIndex:s,cursor:`grab`}}return null}},$i=6;function ea(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ta=`#26a69a`,na=class{constructor(e){this.type=`batPattern`,this.requiredPoints=5,this.id=`bat_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=ta,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=ta,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=ta;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(ea(e,t,s[n],c[n],s[n+1],c[n+1])<=$i)return!0;return l>=5&&ea(e,t,s[0],c[0],s[4],c[4])<=$i}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=$i+2)return{pointIndex:s,cursor:`grab`}}return null}},ra=6;function ia(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var aa=`#7986cb`,oa=class{constructor(e){this.type=`gartleyPattern`,this.requiredPoints=5,this.id=`gart_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=aa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=aa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=aa;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(ia(e,t,s[n],c[n],s[n+1],c[n+1])<=ra)return!0;return l>=5&&ia(e,t,s[0],c[0],s[4],c[4])<=ra}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ra+2)return{pointIndex:s,cursor:`grab`}}return null}},sa=6;function ca(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var la=`#ef5350`,ua=class{constructor(e){this.type=`crabPattern`,this.requiredPoints=5,this.id=`crab_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=la,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=la,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=la;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(ca(e,t,s[n],c[n],s[n+1],c[n+1])<=sa)return!0;return l>=5&&ca(e,t,s[0],c[0],s[4],c[4])<=sa}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=sa+2)return{pointIndex:s,cursor:`grab`}}return null}},da=6;function fa(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var pa=`#78909c`,ma=class{constructor(e){this.type=`sharkPattern`,this.requiredPoints=5,this.id=`shrk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=pa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=pa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=pa;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(fa(e,t,s[n],c[n],s[n+1],c[n+1])<=da)return!0;return l>=5&&fa(e,t,s[0],c[0],s[4],c[4])<=da}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=da+2)return{pointIndex:s,cursor:`grab`}}return null}},ha=6;function ga(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var _a=`#29b6f6`,va=[`0`,`1`,`2`,`3`,`4`,`5`],ya=class{constructor(e){this.type=`elliottImpulse`,this.requiredPoints=6,this.id=`eimp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a)),l=s.length;e.save(),e.lineWidth=o?1.5:1;for(let t=0;t<l-1;t++)e.strokeStyle=t%2==0?_a:_a+`aa`,e.beginPath(),e.moveTo(s[t],c[t]),e.lineTo(s[t+1],c[t+1]),e.stroke();e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<l;t++){var u;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=_a,e.fill(),e.fillStyle=_a,e.fillText((u=va[t])==null?String(t):u,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(ga(e,t,s[n],c[n],s[n+1],c[n+1])<=ha)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ha+2)return{pointIndex:s,cursor:`grab`}}return null}},ba=6;function xa(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Sa=`#ff8a65`,Ca=[`0`,`A`,`B`,`C`],wa=class{constructor(e){this.type=`elliottCorrective`,this.requiredPoints=4,this.id=`ecor_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=Sa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<s.length;t++){var l;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=Sa,e.fill(),e.fillStyle=Sa,e.fillText((l=Ca[t])==null?String(t):l,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(xa(e,t,s[n],c[n],s[n+1],c[n+1])<=ba)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ba+2)return{pointIndex:s,cursor:`grab`}}return null}},Ta=6;function Ea(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Da=`#aed581`,Oa=[`A`,`B`,`C`,`D`,`E`,`end`],ka=class{constructor(e){this.type=`elliottTriangle`,this.requiredPoints=6,this.id=`etri_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a)),l=s.length;e.save(),e.strokeStyle=Da,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<l;t++)e.lineTo(s[t],c[t]);e.stroke(),l>=3&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Da+`aa`,e.lineWidth=1,e.beginPath(),e.moveTo(s[0],c[0]),l>2&&e.lineTo(s[2],c[2]),l>4&&e.lineTo(s[4],c[4]),e.stroke(),e.restore()),l>=4&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Da+`aa`,e.lineWidth=1,e.beginPath(),e.moveTo(s[1],c[1]),e.lineTo(s[3],c[3]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<l;t++){var u;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=Da,e.fill(),e.fillStyle=Da,e.fillText((u=Oa[t])==null?String(t):u,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(Ea(e,t,s[n],c[n],s[n+1],c[n+1])<=Ta)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Ta+2)return{pointIndex:s,cursor:`grab`}}return null}},Aa=6;function ja(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ma=`#f48fb1`,Na=[`W`,`X`,`Y`,`X2`,`Z`,`X3`,`end`],Pa=class{constructor(e){this.type=`elliottCombination`,this.requiredPoints=7,this.id=`ecom_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=Ma,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<s.length;t++){var l;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=Ma,e.fill(),e.fillStyle=Ma,e.fillText((l=Na[t])==null?String(t):l,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(ja(e,t,s[n],c[n],s[n+1],c[n+1])<=Aa)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Aa+2)return{pointIndex:s,cursor:`grab`}}return null}},Fa=6;function Ia(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var La=`#80cbc4`,Ra=[`W`,`X`,`Y`,`end`],za=class{constructor(e){this.type=`elliottWxy`,this.requiredPoints=4,this.id=`ewxy_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=La,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<s.length;t++){var l;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=La,e.fill(),e.fillStyle=La,e.fillText((l=Ra[t])==null?String(t):l,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(Ia(e,t,s[n],c[n],s[n+1],c[n+1])<=Fa)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Fa+2)return{pointIndex:s,cursor:`grab`}}return null}},Ba=8;function Va(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ha=class{constructor(e){this.type=`brush`,this.openEnded=!0,this.id=`brush_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)})),c=this.complete?s.length:s.length-1;if(e.save(),e.strokeStyle=`#ff5722`,e.lineWidth=o?2.5:2,e.lineCap=`round`,e.lineJoin=`round`,c>=2){e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y);for(let t=1;t<c;t++)e.lineTo(s[t].x,s[t].y);e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([4,4]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(Va(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=Ba)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length===0)return null;let s=[0,this.points.length-1];for(let c of s){let s=n.xToPixel(this.points[c].barIndex,r,a),l=n.yToPixel(this.points[c].price,i,o);if(Math.hypot(e-s,t-l)<=Ba+2)return{pointIndex:c,cursor:`grab`}}return null}},Ua=12;function Wa(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ga=class{constructor(e){this.type=`highlighter`,this.openEnded=!0,this.id=`hl2_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)})),c=this.complete?s.length:s.length-1;if(e.save(),e.strokeStyle=`#ffeb3b66`,e.lineWidth=12,e.lineCap=`round`,e.lineJoin=`round`,c>=2){e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y);for(let t=1;t<c;t++)e.lineTo(s[t].x,s[t].y);e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([8,6]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(Wa(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=Ua)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length===0)return null;let s=[0,this.points.length-1];for(let c of s){let s=n.xToPixel(this.points[c].barIndex,r,a),l=n.yToPixel(this.points[c].price,i,o);if(Math.hypot(e-s,t-l)<=Ua+2)return{pointIndex:c,cursor:`grab`}}return null}},Ka=6,qa=class{constructor(e){this.type=`sineLine`,this.id=`sine_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=d-l,m=Math.abs(f-u)/2,h=(u+f)/2;if(e.save(),e.strokeStyle=`#ce93d8`,e.lineWidth=o?1.5:1,e.beginPath(),Math.abs(p)<1)e.moveTo(l,u),e.lineTo(d,f);else{e.moveTo(l,h+m*Math.sin(0));let t=p>0?1:-1,n=d;for(let r=l+t;p>0?r<=n:r>=n;r+=t){let t=(r-l)/p,n=h+m*Math.sin(2*Math.PI*t);e.lineTo(r,n)}e.lineTo(d,h+m*Math.sin(2*Math.PI))}e.stroke(),e.fillStyle=`#ce93d8`;for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=d-l,m=Math.abs(f-u)/2,h=(u+f)/2;if(Math.abs(p)<1)return Math.hypot(e-l,t-h)<=Ka;let g=p>0?5:-5,_=l,v=h+m*Math.sin(0);for(let n=l+g;p>0?n<=d+Math.abs(g):n>=d-Math.abs(g);n+=g){let r=p>0?Math.min(n,d):Math.max(n,d),i=(r-l)/p,a=h+m*Math.sin(2*Math.PI*i);if(Math.hypot(e-r,t-a)<=Ka)return!0;let o=r-_,s=a-v,c=o*o+s*s;if(c>0){let n=Math.max(0,Math.min(1,((e-_)*o+(t-v)*s)/c)),r=_+n*o,i=v+n*s;if(Math.hypot(e-r,t-i)<=Ka)return!0}if(_=r,v=a,r===d)break}return!1}getHandle(e,t,n,r,i,a,o){let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Ka+2)return{pointIndex:n,cursor:`grab`};return null}},Ja=6,Ya=class{constructor(e){this.type=`cyclicLines`,this.id=`cyc_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return;let u=t.xToPixel(s.barIndex,n,i),d=`#7986cb`;e.save(),e.strokeStyle=d,e.lineWidth=o?1.5:1,e.setLineDash([4,3]);for(let r=0;r<=8;r++){let o=s.barIndex+l*r,c=t.xToPixel(o,n,i);if(c>i)break;e.beginPath(),e.moveTo(c,0),e.lineTo(c,a),e.stroke()}e.setLineDash([]);let f=t.xToPixel(c.barIndex,n,i);e.fillStyle=d,e.beginPath(),e.arc(u,a/2,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(f,a/2,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return!1;for(let t=0;t<=8;t++){let i=s.barIndex+l*t,o=n.xToPixel(i,r,a);if(o>a)break;if(Math.abs(e-o)<=Ja)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:o/2},{px:n.xToPixel(this.points[1].barIndex,r,a),py:o/2}],c=[`move`,`ew-resize`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Ja+2)return{pointIndex:n,cursor:c[n]};return null}},Xa=6,Za=class{constructor(e){this.type=`timeCycles`,this.id=`tcy_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return;let u=`#80cbc4`;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;let d=[];for(let e=0;e<=6;e++){let r=s.barIndex+l*e,a=t.xToPixel(r,n,i);if(a>i)break;d.push(a)}for(let t=0;t+1<d.length;t++)t%2==0&&(e.fillStyle=`#80cbc410`,e.fillRect(d[t],0,d[t+1]-d[t],a));e.strokeStyle=u,e.setLineDash([]);for(let t=0;t<d.length;t++)e.beginPath(),e.moveTo(d[t],0),e.lineTo(d[t],a),e.stroke(),e.fillStyle=u,e.fillText(String(t+1),d[t]+3,14);let f=t.xToPixel(s.barIndex,n,i),p=t.xToPixel(c.barIndex,n,i);e.fillStyle=u,e.beginPath(),e.arc(f,a/2,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(p,a/2,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return!1;for(let t=0;t<=6;t++){let i=s.barIndex+l*t,o=n.xToPixel(i,r,a);if(o>a)break;if(Math.abs(e-o)<=Xa)return!0;if(t<6){let i=s.barIndex+l*(t+1),c=n.xToPixel(i,r,a);if(e>=o&&e<=c)return!0}}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:o/2},{px:n.xToPixel(this.points[1].barIndex,r,a),py:o/2}],c=[`move`,`ew-resize`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Xa+2)return{pointIndex:n,cursor:c[n]};return null}},Qa=6;function $a(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var eo=class{constructor(e){this.type=`projection`,this.id=`proj_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=`#78909c`,m=d-l,h,g;if(Math.abs(m)<.001)h=d,g=f+(f-u);else{let e=(f-u)/m;h=i,g=f+e*(i-d)}e.save(),e.strokeStyle=p,e.fillStyle=p,e.lineWidth=o?1.5:1,e.setLineDash([]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([6,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(h,g),e.stroke(),e.setLineDash([]),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=d-l,m,h;if(Math.abs(p)<.001)m=d,h=f+(f-u);else{let e=(f-u)/p;m=a,h=f+e*(a-d)}return $a(e,t,l,u,d,f)<=Qa||$a(e,t,d,f,m,h)<=Qa}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Qa+2)return{pointIndex:n,cursor:`grab`};return null}},to=6;function no(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var ro=class{constructor(e){this.type=`priceProjection`,this.id=`pp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=Math.min(u,f),h=Math.max(u,f),g=Math.min(d,p),_=Math.max(d,p),v=h-m,y=_-g,b=m+v/2;g+y/2;let x=(c.price+l.price)/2,S=`#ef9a9a`;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.fillStyle=`#ef9a9a18`,e.fillRect(m,g,v,y),e.strokeStyle=S,e.beginPath(),e.moveTo(m,d),e.lineTo(h,d),e.stroke();let C=t.yToPixel(x,r,a);e.beginPath(),e.moveTo(m,C),e.lineTo(h,C),e.stroke(),e.beginPath(),e.moveTo(m,p),e.lineTo(h,p),e.stroke(),e.fillStyle=S,e.fillText(c.price.toFixed(s),h+4,d+4),e.fillText(x.toFixed(s),h+4,C+4),e.fillText(l.price.toFixed(s),h+4,p+4),e.fillStyle=S,e.beginPath(),e.moveTo(b,g),e.lineTo(b,_),e.stroke(),no(e,b,_,b,g),no(e,b,g,b,_),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return e>=Math.min(l,d)&&e<=Math.max(l,d)&&t>=Math.min(u,f)&&t<=Math.max(u,f)}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=to+2)return{pointIndex:n,cursor:`ns-resize`};return null}},io=6,ao=`#90a4ae`,oo=class{constructor(e){this.type=`ghostFeed`,this.id=`gfeed_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.fillStyle=ao+`08`,e.fillRect(p,m,h,g),e.strokeStyle=ao,e.lineWidth=o?1.5:1,e.setLineDash([6,4]),e.strokeRect(p,m,h,g),e.setLineDash([]),e.save(),e.beginPath(),e.rect(p,m,h,g),e.clip(),e.strokeStyle=ao+`30`,e.lineWidth=1,e.setLineDash([4,4]);let _=h+g;for(let t=-g;t<=_;t+=20){let n=p+t,r=m,i=p+t+g,a=m+g;e.beginPath(),e.moveTo(n,r),e.lineTo(i,a),e.stroke()}if(e.setLineDash([]),e.restore(),e.font=`12px 'Inter', system-ui, sans-serif`,e.fillStyle=ao,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`Ghost Feed`,p+h/2,m+g/2),o){e.textAlign=`left`,e.textBaseline=`alphabetic`;for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=ao,e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-io,m=Math.min(u,f)-io,h=Math.abs(d-l)+io*2,g=Math.abs(f-u)+io*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=io+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},so=new Set([`text`,`callout`,`anchoredNote`]),co=class{constructor(){this.drawings=[],this.activeDrawing=null,this.selectedDrawing=null,this.activeTool=null,this.state=`idle`,this.history=[],this.redoStack=[],this.onCompleteCallback=null,this.onDrawingsChange=null,this.onStartTextEdit=null,this.editingText=!1,this.dragDrawing=null,this.dragStartMouse=null,this.dragStartPoints=null,this.resizeDrawing=null,this.resizePointIndex=-1}setOnComplete(e){this.onCompleteCallback=e}setEditingText(e){this.editingText=e}setActiveTool(e){this.activeTool=e,this.state=`idle`,this.activeDrawing=null}getActiveTool(){return this.activeTool}onMouseDown(e){if(!this.activeTool)return!1;if(this.state===`idle`){if(this.snapshot(),this.activeDrawing=this.createDrawing(this.activeTool,e),this.drawings.push(this.activeDrawing),this.activeDrawing.complete){var t;let e=this.activeDrawing;if(this.selectedDrawing=e,this.activeDrawing=null,this.activeTool=null,(t=this.onCompleteCallback)==null||t.call(this),this.notifyChange(),so.has(e.type)){var n;(n=this.onStartTextEdit)==null||n.call(this,e)}}else this.state=`placing`;return!0}if(this.state===`placing`&&this.activeDrawing){var r,i,a;if((r=this.activeDrawing.openEnded)!=null&&r){let t=this.activeDrawing.points.length-1;return this.activeDrawing.points[t]={...e},this.activeDrawing.points.push({...e}),!0}let t=(i=this.activeDrawing.requiredPoints)==null?2:i,n=this.activeDrawing.points.length;if(this.activeDrawing.points[n-1]={...e},n<t)return this.activeDrawing.points.push({...e}),!0;this.activeDrawing.complete=!0;let s=this.activeDrawing;if(this.selectedDrawing=s,this.activeDrawing=null,this.state=`idle`,this.activeTool=null,(a=this.onCompleteCallback)==null||a.call(this),this.notifyChange(),so.has(s.type)){var o;(o=this.onStartTextEdit)==null||o.call(this,s)}return!0}return!1}onMouseMove(e){if(this.state===`placing`&&this.activeDrawing){let t=this.activeDrawing.points.length-1;this.activeDrawing.points[t]=e}if(this.dragDrawing&&this.dragStartMouse&&this.dragStartPoints){let t=e.barIndex-this.dragStartMouse.barIndex,n=e.price-this.dragStartMouse.price;for(let e=0;e<this.dragDrawing.points.length;e++)this.dragDrawing.points[e]={barIndex:this.dragStartPoints[e].barIndex+t,price:this.dragStartPoints[e].price+n}}this.resizeDrawing&&this.resizePointIndex>=0&&(this.resizeDrawing.points[this.resizePointIndex]={...e})}finalizePlacing(){var e,t;if(!(this.state!==`placing`||!this.activeDrawing)&&(e=this.activeDrawing.openEnded)!=null&&e){if(this.activeDrawing.points.length>2&&this.activeDrawing.points.pop(),this.activeDrawing.points.length<2){this.drawings.pop(),this.activeDrawing=null,this.state=`idle`,this.activeTool=null;return}this.activeDrawing.complete=!0,this.selectedDrawing=this.activeDrawing,this.activeDrawing=null,this.state=`idle`,this.activeTool=null,(t=this.onCompleteCallback)==null||t.call(this),this.notifyChange()}}startDrag(e,t){this.snapshot(),this.dragDrawing=e,this.dragStartMouse={...t},this.dragStartPoints=e.points.map(e=>({...e}))}endDrag(){this.dragDrawing=null,this.dragStartMouse=null,this.dragStartPoints=null,this.notifyChange()}isDraggingDrawing(){return this.dragDrawing!==null}isPlacing(){return this.state===`placing`}startResize(e,t){this.snapshot(),this.resizeDrawing=e,this.resizePointIndex=t}endResize(){this.resizeDrawing=null,this.resizePointIndex=-1,this.notifyChange()}isResizingDrawing(){return this.resizeDrawing!==null}shiftBarIndices(e){for(let t of this.drawings)for(let n of t.points)n.barIndex+=e;if(this.dragStartPoints)for(let t of this.dragStartPoints)t.barIndex+=e}getHandleAtPoint(e,t,n,r,i,a,o){for(let s=this.drawings.length-1;s>=0;s--){let c=this.drawings[s];if(!c.complete||c.visible===!1||c.locked)continue;let l=c.getHandle(e,t,n,r,i,a,o);if(l)return{drawing:c,handle:l}}return null}hitTest(e,t,n,r,i,a,o){for(let s=this.drawings.length-1;s>=0;s--){let c=this.drawings[s];if(!(c.visible===!1||c.locked)&&c.hitTest(e,t,n,r,i,a,o))return c}return null}selectDrawing(e){this.selectedDrawing=e}getSelectedDrawing(){return this.selectedDrawing}onKeyDown(e){return e===`Escape`?(this.state===`placing`&&this.activeDrawing&&(this.drawings.pop(),this.activeDrawing=null,this.state=`idle`),this.activeTool=null,this.selectedDrawing=null,!0):(e===`Delete`||e===`Backspace`)&&this.selectedDrawing&&!this.editingText?(this.deleteSelected(),!0):e===`z`&&this.history.length>0?(this.undo(),!0):!1}deleteSelected(){this.selectedDrawing&&(this.snapshot(),this.drawings=this.drawings.filter(e=>e!==this.selectedDrawing),this.selectedDrawing=null,this.notifyChange())}undo(){let e=this.history.pop();e!==void 0&&(this.redoStack.push(this.cloneDrawings(this.drawings)),this.drawings=e,this.selectedDrawing=null,this.notifyChange())}redo(){let e=this.redoStack.pop();e!==void 0&&(this.history.push(this.cloneDrawings(this.drawings)),this.drawings=e,this.selectedDrawing=null,this.notifyChange())}hideAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.visible=!1;this.selectedDrawing=null,this.notifyChange()}}showAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.visible=!0;this.notifyChange()}}lockAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.locked=!0;this.selectedDrawing=null,this.notifyChange()}}unlockAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.locked=!1;this.notifyChange()}}render(e,t,n,r,i,a,o=2){if(e.clearRect(0,0,e.canvas.width,e.canvas.height),this.drawings.length===0)return;let s=window.devicePixelRatio||1;e.save(),e.scale(s,s);for(let s of this.drawings)s.visible!==!1&&s.render(e,t,n,r,i,a,s===this.selectedDrawing,o);e.restore()}getDrawings(){return[...this.drawings]}getDrawingsSnapshot(){return this.drawings.map(e=>({id:e.id,type:e.type,points:e.points.map(e=>({...e})),complete:e.complete,...e.visible!==void 0&&{visible:e.visible},...e.locked!==void 0&&{locked:e.locked},...e.text!==void 0&&{text:e.text}}))}loadDrawings(e){this.drawings=e.map(e=>{var t;let n=this.createDrawing(e.type,(t=e.points[0])==null?{barIndex:0,price:0}:t);return n.id=e.id,n.points=e.points.map(e=>({...e})),n.complete=e.complete,e.visible!==void 0&&(n.visible=e.visible),e.locked!==void 0&&(n.locked=e.locked),e.text!==void 0&&(n.text=e.text),n}),this.selectedDrawing=null,this.activeDrawing=null,this.history=[this.drawings.map(e=>({...e,points:e.points.map(e=>({...e}))}))],this.redoStack=[]}clearAll(){this.drawings.length!==0&&(this.snapshot(),this.drawings=[],this.selectedDrawing=null,this.activeDrawing=null,this.notifyChange())}notifyChange(){var e;(e=this.onDrawingsChange)==null||e.call(this)}snapshot(){this.history.push(this.cloneDrawings(this.drawings)),this.history.length>50&&this.history.shift(),this.redoStack=[]}cloneDrawings(e){return e.map(e=>{let t=Object.create(Object.getPrototypeOf(e));return Object.assign(t,e),t.points=e.points.map(e=>({...e})),t})}createDrawing(e,t){switch(e){case`horizontalLine`:return new It(t);case`verticalLine`:return new Rt(t);case`trendLine`:return new Vt(t);case`trendAngle`:return new Wt(t);case`crossLine`:return new Kt(t);case`parallelChannel`:return new Yt(t);case`flatChannel`:return new Qt(t);case`disjointChannel`:return new tn(t);case`fibRetracement`:return new on(t);case`fibExtension`:return new un(t);case`fibChannel`:return new hn(t);case`fibTimezone`:return new vn(t);case`fibCircles`:return new Sn(t);case`fibSpiral`:return new Tn(t);case`fibFan`:return new jn(t);case`fibProjection`:return new Fn(t);case`gannFan`:return new zn(t);case`gannSquare`:return new Vn(t);case`gannBox`:return new Un(t);case`rectangle`:return new Gn(t);case`rotatedRectangle`:return new Jn(t);case`ellipse`:return new Xn(t);case`triangle`:return new $n(t);case`circle`:return new tr(t);case`arc`:return new ir(t);case`polyline`:return new sr(t);case`path`:return new ur(t);case`priceRange`:return new pr(t);case`dateRange`:return new gr(t);case`datePriceRange`:return new yr(t);case`ruler`:return new Sr(t);case`pitchfork`:return new Er(t);case`schiffPitchfork`:return new Ar(t);case`modifiedSchiff`:return new Pr(t);case`insidePitchfork`:return new Lr(t);case`fixedRangeVP`:return new Vr(t);case`anchoredVP`:return new Gr(t);case`volumeProfile`:return new Yr(t);case`regressionTrend`:return new Qr(t);case`text`:return new ni(t);case`callout`:return new ci(t);case`priceLabel`:return new fi(t);case`arrowMarker`:return new hi(t);case`flag`:return new gi(t);case`priceNote`:return new xi(t);case`anchoredNote`:return new Ei(t);case`arrowUp`:return new Di(t);case`arrowDown`:return new Oi(t);case`headShoulders`:return new Mi(t);case`trianglePattern`:return new Ii(t);case`threeDrives`:return new Bi(t);case`abcdPattern`:return new Wi(t);case`cypherPattern`:return new Ji(t);case`butterflyPattern`:return new Qi(t);case`batPattern`:return new na(t);case`gartleyPattern`:return new oa(t);case`crabPattern`:return new ua(t);case`sharkPattern`:return new ma(t);case`elliottImpulse`:return new ya(t);case`elliottCorrective`:return new wa(t);case`elliottTriangle`:return new ka(t);case`elliottCombination`:return new Pa(t);case`elliottWxy`:return new za(t);case`brush`:return new Ha(t);case`highlighter`:return new Ga(t);case`sineLine`:return new qa(t);case`cyclicLines`:return new Ya(t);case`timeCycles`:return new Za(t);case`projection`:return new eo(t);case`priceProjection`:return new ro(t);case`ghostFeed`:return new oo(t);default:return new Vt(t)}}},lo=2,uo=class{constructor(e,t=g,n=y.chart){this.pills=new Map,this.isOpen=!1,this.onDocClick=e=>{this.isOpen&&!this.el.contains(e.target)&&(this.isOpen=!1,this.dropdownPanel.style.display=`none`,this.collapseBtn.textContent=this.labels.nIndicators.replace(`{count}`,String(this.pills.size)))},this.theme=e,this.cfg=t,this.labels=n,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`absolute`,top:`52px`,left:`6px`,zIndex:`10`,display:`none`,alignItems:`center`,gap:`10px`,pointerEvents:`auto`}),this.inlineRow=document.createElement(`div`),Object.assign(this.inlineRow.style,{display:`flex`,alignItems:`center`,gap:`10px`}),this.collapseBtn=document.createElement(`button`),Object.assign(this.collapseBtn.style,{display:`none`,alignItems:`center`,gap:`4px`,background:this.theme.indicatorOverlay.pillBg,color:this.theme.axisText,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`4px`,padding:`2px 8px`,fontSize:this.cfg.collapseBtnFontSize,fontFamily:this.cfg.collapseBtnFontFamily,cursor:`pointer`,outline:`none`}),this.collapseBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown()}),this.dropdownPanel=document.createElement(`div`),Object.assign(this.dropdownPanel.style,{display:`none`,position:`absolute`,top:`100%`,left:`0`,marginTop:`4px`,background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`4px`,padding:`4px 0`,minWidth:`140px`,zIndex:`20`,boxShadow:`0 4px 12px rgba(0,0,0,0.15)`});let r=document.createElement(`div`);Object.assign(r.style,{position:`relative`}),r.append(this.collapseBtn,this.dropdownPanel),this.el.append(this.inlineRow,r),document.addEventListener(`click`,this.onDocClick)}addPill(e,t,n,r=`Chart`,i=!0,a,o=null,s){this.pills.has(e)||(this.pills.set(e,{color:t,label:n,timeframe:r,visible:i,onRemove:a,onEdit:o,onToggleVisibility:s}),this.refresh())}updatePillColor(e,t){let n=this.pills.get(e);n&&(n.color=t,this.refresh())}updatePillLabel(e,t){let n=this.pills.get(e);n&&(n.label=t,this.refresh())}updatePillTimeframe(e,t){let n=this.pills.get(e);n&&(n.timeframe=t,this.refresh())}updatePillVisibility(e,t){let n=this.pills.get(e);n&&(n.visible=t,this.refresh())}removePill(e){this.pills.has(e)&&(this.pills.delete(e),this.refresh())}setTheme(e){this.theme=e,Object.assign(this.collapseBtn.style,{background:e.indicatorOverlay.pillBg,color:e.axisText,border:`1px solid ${e.axisBorder}`}),Object.assign(this.dropdownPanel.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`}),this.refresh()}destroy(){document.removeEventListener(`click`,this.onDocClick)}refresh(){let e=Array.from(this.pills.entries());if(this.inlineRow.innerHTML=``,this.dropdownPanel.innerHTML=``,e.length===0){this.el.style.display=`none`,this.collapseBtn.style.display=`none`;return}if(this.el.style.display=`flex`,e.length<=lo){this.isOpen=!1,this.dropdownPanel.style.display=`none`,this.collapseBtn.style.display=`none`;for(let[t,n]of e)this.inlineRow.appendChild(this.makePill(t,n))}else{this.collapseBtn.style.display=`inline-flex`,this.collapseBtn.textContent=this.labels.nIndicators.replace(`{count}`,String(e.length));for(let[t,n]of e)this.dropdownPanel.appendChild(this.makeDropdownRow(t,n));this.dropdownPanel.style.display=this.isOpen?`block`:`none`}}makeTimeframeBadge(e){if(!e||e===`Chart`)return null;let t=document.createElement(`span`);return t.textContent=e,Object.assign(t.style,{fontSize:`10px`,padding:`1px 4px`,borderRadius:`3px`,background:`rgba(128,128,128,0.18)`,color:this.theme.axisText,marginLeft:`2px`,lineHeight:`1.4`}),t}makeEyeIcon(e){let t=document.createElement(`span`);return t.innerHTML=e.visible?ft:pt,Object.assign(t.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:e.visible?`0.6`:`0.4`,lineHeight:`1`}),t.addEventListener(`mouseenter`,()=>{t.style.opacity=`1`}),t.addEventListener(`mouseleave`,()=>{t.style.opacity=e.visible?`0.6`:`0.4`}),t.addEventListener(`click`,t=>{t.stopPropagation(),e.onToggleVisibility()}),t}makePill(e,t){let n=document.createElement(`span`);Object.assign(n.style,{display:`inline-flex`,alignItems:`center`,gap:`4px`,fontSize:this.cfg.pillFontSize,fontFamily:this.cfg.pillFontFamily,color:t.color,whiteSpace:`nowrap`,userSelect:`none`,background:this.theme.indicatorOverlay.pillBg,borderRadius:`4px`,padding:`1px 6px 1px 5px`,opacity:t.visible?`1`:`0.4`});let r=document.createElement(`span`);r.innerHTML=yt,Object.assign(r.style,{display:`inline-flex`,alignItems:`center`});let i=document.createElement(`span`);i.textContent=t.label;let a=this.makeTimeframeBadge(t.timeframe),o=document.createElement(`span`);if(Object.assign(o.style,{display:`inline-flex`,alignItems:`center`,gap:`8px`,marginLeft:`12px`}),o.appendChild(this.makeEyeIcon(t)),t.onEdit){let e=document.createElement(`span`);e.innerHTML=nt,Object.assign(e.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:`0.6`,lineHeight:`1`}),e.addEventListener(`mouseenter`,()=>{e.style.opacity=`1`}),e.addEventListener(`mouseleave`,()=>{e.style.opacity=`0.6`}),e.addEventListener(`click`,e=>{e.stopPropagation(),t.onEdit()}),o.appendChild(e)}let s=document.createElement(`span`);return s.innerHTML=it,Object.assign(s.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`}),s.addEventListener(`click`,e=>{e.stopPropagation(),t.onRemove()}),o.appendChild(s),n.append(r,i),a&&n.appendChild(a),n.appendChild(o),n}makeDropdownRow(e,t){let n=document.createElement(`div`);Object.assign(n.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`8px`,padding:`4px 10px`,fontSize:this.cfg.dropdownRowFontSize,fontFamily:this.cfg.dropdownRowFontFamily,color:t.color,cursor:`default`,opacity:t.visible?`1`:`0.4`}),n.addEventListener(`mouseenter`,()=>{n.style.background=this.theme.indicatorOverlay.dropdownHoverBg}),n.addEventListener(`mouseleave`,()=>{n.style.background=`transparent`});let r=document.createElement(`span`);r.innerHTML=yt,Object.assign(r.style,{display:`inline-flex`,alignItems:`center`});let i=document.createElement(`span`);Object.assign(i.style,{display:`inline-flex`,alignItems:`center`,gap:`4px`,flex:`1`});let a=document.createElement(`span`);a.textContent=t.label,i.appendChild(a);let o=this.makeTimeframeBadge(t.timeframe);o&&i.appendChild(o);let s=document.createElement(`span`);Object.assign(s.style,{display:`inline-flex`,alignItems:`center`,gap:`4px`});let c=document.createElement(`span`);if(c.innerHTML=t.visible?ft:pt,Object.assign(c.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:t.visible?`0.6`:`0.4`,lineHeight:`1`}),c.addEventListener(`mouseenter`,()=>{c.style.opacity=`1`}),c.addEventListener(`mouseleave`,()=>{c.style.opacity=t.visible?`0.6`:`0.4`}),c.addEventListener(`click`,e=>{e.stopPropagation(),t.onToggleVisibility()}),s.appendChild(c),t.onEdit){let e=document.createElement(`span`);e.innerHTML=nt,Object.assign(e.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:`0.6`,lineHeight:`1`}),e.addEventListener(`mouseenter`,()=>{e.style.opacity=`1`}),e.addEventListener(`mouseleave`,()=>{e.style.opacity=`0.6`}),e.addEventListener(`click`,e=>{e.stopPropagation(),this.isOpen=!1,this.dropdownPanel.style.display=`none`,t.onEdit()}),s.appendChild(e)}let l=document.createElement(`span`);return l.innerHTML=it,Object.assign(l.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`}),l.addEventListener(`click`,e=>{e.stopPropagation(),t.onRemove()}),s.appendChild(l),n.append(r,i,s),n}toggleDropdown(){this.isOpen=!this.isOpen,this.dropdownPanel.style.display=this.isOpen?`block`:`none`,this.collapseBtn.textContent=this.labels.nIndicators.replace(`{count}`,String(this.pills.size))}},fo=class{constructor(e,t=y.dialogs){this.schema=null,this.currentParams={},this.onUpdate=null,this.onRemove=null,this.inputRefs=new Map,this.theme=e,this.labels=t,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`fixed`,inset:`0`,background:`rgba(0,0,0,0.5)`,display:`none`,alignItems:`center`,justifyContent:`center`,zIndex:`1000`}),this.el.addEventListener(`mousedown`,e=>{e.target===this.el&&this.hide()}),this.panel=document.createElement(`div`),Object.assign(this.panel.style,{display:`flex`,flexDirection:`column`,minWidth:`300px`,maxWidth:`360px`,background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`6px`,boxShadow:`0 8px 32px rgba(0,0,0,0.45)`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`12px`,overflow:`hidden`}),this.panel.addEventListener(`mousedown`,e=>e.stopPropagation()),this.el.appendChild(this.panel)}show(e,t,n,r){this.schema=e,this.currentParams={...t},this.onUpdate=n,this.onRemove=r,this.rebuild(),this.el.style.display=`flex`}hide(){this.el.style.display=`none`,this.schema=null,this.onUpdate=null,this.onRemove=null}setTheme(e){this.theme=e,Object.assign(this.panel.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`}),this.el.style.display!==`none`&&this.schema&&this.rebuild()}destroy(){this.el.remove()}rebuild(){this.panel.innerHTML=``,this.inputRefs.clear(),this.schema&&(this.panel.appendChild(this.buildHeader(this.schema.shortName)),this.panel.appendChild(this.buildBody(this.schema.fields)),this.panel.appendChild(this.buildFooter()))}buildHeader(e){let t=document.createElement(`div`);Object.assign(t.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`10px 14px`,borderBottom:`1px solid ${this.theme.axisBorder}`});let n=document.createElement(`span`);n.textContent=`${e} ${this.labels.indicator.titleSuffix}`,Object.assign(n.style,{color:this.theme.tooltip.text,fontWeight:`600`,fontSize:`13px`});let r=document.createElement(`span`);return r.innerHTML=it,Object.assign(r.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.axisText,cursor:`pointer`}),r.addEventListener(`mouseenter`,()=>{r.style.color=this.theme.tooltip.text}),r.addEventListener(`mouseleave`,()=>{r.style.color=this.theme.axisText}),r.addEventListener(`click`,()=>this.hide()),t.append(n,r),t}buildBody(e){let t=document.createElement(`div`);if(Object.assign(t.style,{padding:`12px 14px`,display:`flex`,flexDirection:`column`,gap:`8px`}),e.length===0){let e=document.createElement(`span`);return e.textContent=this.labels.indicator.noParams,Object.assign(e.style,{color:this.theme.axisText,fontSize:`11px`}),t.appendChild(e),t}for(let n of e)t.appendChild(this.buildField(n));return t}buildField(e){var t;let n=document.createElement(`div`);Object.assign(n.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`10px`});let r=document.createElement(`label`);r.textContent=e.label,Object.assign(r.style,{color:this.theme.axisText,fontSize:`12px`,flex:`1`});let i=(t=this.currentParams[e.key])==null?e.default:t;if(e.kind===`number`){let t=document.createElement(`input`);t.type=`number`,t.min=String(e.min),t.max=String(e.max),t.step=String(e.step),t.value=String(i),Object.assign(t.style,{width:`80px`,background:this.theme.background,color:this.theme.tooltip.text,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`3px`,padding:`4px 6px`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,outline:`none`,textAlign:`right`}),this.inputRefs.set(e.key,t),n.append(r,t)}else if(e.kind===`select`){let t=document.createElement(`select`);for(let n of e.options){let e=document.createElement(`option`);e.value=n,e.textContent=n,n===String(i)&&(e.selected=!0),t.appendChild(e)}Object.assign(t.style,{minWidth:`120px`,background:this.theme.background,color:this.theme.tooltip.text,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`3px`,padding:`4px 6px`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,outline:`none`,cursor:`pointer`}),this.inputRefs.set(e.key,t),n.append(r,t)}else{let t=document.createElement(`input`);t.type=`color`,t.value=String(i),Object.assign(t.style,{width:`40px`,height:`26px`,border:`none`,padding:`0`,cursor:`pointer`,background:`transparent`,borderRadius:`3px`}),this.inputRefs.set(e.key,t),n.append(r,t)}return n}buildFooter(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,gap:`8px`,padding:`10px 14px`,borderTop:`1px solid ${this.theme.axisBorder}`});let t=this.makeButton(`Remove`,`#ef5350`,`transparent`,`#ef5350`);t.addEventListener(`click`,()=>{var e;(e=this.onRemove)==null||e.call(this),this.hide()});let n=this.makeButton(`Update`,`#fff`,`#2196f3`,`#2196f3`);return n.addEventListener(`click`,()=>{if(!this.schema||!this.onUpdate)return;let e={};for(let t of this.schema.fields){let n=this.inputRefs.get(t.key);n&&(e[t.key]=t.kind===`number`?Number(n.value):String(n.value))}this.onUpdate(e),this.hide()}),e.append(t,n),e}makeButton(e,t,n,r){let i=document.createElement(`button`);return i.textContent=e,Object.assign(i.style,{flex:`1`,color:t,background:n,border:`1px solid ${r}`,borderRadius:`4px`,padding:`6px 0`,cursor:`pointer`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,fontWeight:`600`,outline:`none`}),i.addEventListener(`mouseenter`,()=>{i.style.opacity=`0.85`}),i.addEventListener(`mouseleave`,()=>{i.style.opacity=`1`}),i}},po={appearance:`Appearance`,trading:`Trading`},mo=class{constructor(e,t,n=y.dialogs){this.activeTab=`appearance`,this.onChange=null,this.onReset=null,this.tabEls=new Map,this.theme=e,this.labels=n,this.current={...t},this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`fixed`,inset:`0`,background:`rgba(0,0,0,0.5)`,display:`none`,alignItems:`center`,justifyContent:`center`,zIndex:`10000`}),this.el.addEventListener(`mousedown`,e=>{e.target===this.el&&this.hide()}),this.panel=document.createElement(`div`),Object.assign(this.panel.style,{display:`flex`,flexDirection:`column`,width:`540px`,minHeight:`340px`,maxWidth:`calc(100vw - 32px)`,maxHeight:`calc(100vh - 48px)`,background:e.tooltip.background,border:`1px solid ${e.axisBorder}`,borderRadius:`10px`,boxShadow:`0 16px 48px rgba(0,0,0,0.55), 0 4px 16px rgba(0,0,0,0.3)`,fontFamily:`'Inter', system-ui, -apple-system, sans-serif`,fontSize:`12px`,overflow:`hidden`}),this.panel.addEventListener(`mousedown`,e=>e.stopPropagation());let r=this.buildHeader();this.panel.appendChild(r);let i=document.createElement(`div`);Object.assign(i.style,{display:`flex`,flex:`1`,overflow:`hidden`}),this.sidebar=this.buildSidebar(),i.appendChild(this.sidebar),this.content=document.createElement(`div`),Object.assign(this.content.style,{flex:`1`,padding:`20px 24px`,overflowY:`auto`,scrollbarWidth:`thin`}),i.appendChild(this.content),this.panel.appendChild(i),this.panel.appendChild(this.buildFooter()),this.el.appendChild(this.panel)}show(e,t,n){this.current={...e},this.onChange=t,this.onReset=n==null?null:n,this.renderContent(),this.el.style.display=`flex`}hide(){this.el.style.display=`none`,this.onChange=null,this.onReset=null}setTheme(e){this.theme=e,this.applyPanelTheme(),this.el.style.display!==`none`&&this.renderContent()}destroy(){this.el.remove()}emit(){var e;(e=this.onChange)==null||e.call(this,{...this.current})}applyPanelTheme(){Object.assign(this.panel.style,{background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`}),this.sidebar.innerHTML=``,this.tabEls.clear(),this.buildSidebarTabs(this.sidebar),this.highlightActiveTab()}buildHeader(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`14px 20px 12px`,borderBottom:`1px solid ${this.theme.axisBorder}`,flexShrink:`0`});let t=document.createElement(`span`);t.textContent=this.labels.settings.title,Object.assign(t.style,{color:this.theme.tooltip.text,fontWeight:`600`,fontSize:`14px`,letterSpacing:`-0.01em`});let n=document.createElement(`button`);return n.innerHTML=vt,Object.assign(n.style,{color:this.theme.axisText,cursor:`pointer`,background:`transparent`,border:`none`,padding:`4px`,borderRadius:`4px`,display:`flex`,alignItems:`center`,justifyContent:`center`,outline:`none`,transition:`color 0.1s, background 0.1s`}),n.addEventListener(`mouseenter`,()=>{n.style.color=this.theme.tooltip.text,n.style.background=this.theme.ui.accentBg}),n.addEventListener(`mouseleave`,()=>{n.style.color=this.theme.axisText,n.style.background=`transparent`}),n.addEventListener(`click`,()=>this.hide()),e.append(t,n),e}buildFooter(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,padding:`10px 20px`,borderTop:`1px solid ${this.theme.axisBorder}`,flexShrink:`0`});let t=document.createElement(`button`);return t.textContent=this.labels.settings.resetBtn,Object.assign(t.style,{color:this.theme.axisText,fontSize:`11px`,fontFamily:`'Inter', system-ui, sans-serif`,background:`transparent`,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`5px`,padding:`5px 12px`,cursor:`pointer`,outline:`none`,transition:`color 0.1s, border-color 0.1s, background 0.1s`}),t.addEventListener(`mouseenter`,()=>{t.style.color=this.theme.tooltip.text,t.style.borderColor=this.theme.ui.accent,t.style.background=this.theme.ui.accentBg}),t.addEventListener(`mouseleave`,()=>{t.style.color=this.theme.axisText,t.style.borderColor=this.theme.axisBorder,t.style.background=`transparent`}),t.addEventListener(`click`,()=>{var e;(e=this.onReset)==null||e.call(this),this.hide()}),e.appendChild(t),e}buildSidebar(){let e=document.createElement(`div`);return Object.assign(e.style,{width:`130px`,flexShrink:`0`,borderRight:`1px solid ${this.theme.axisBorder}`,padding:`10px 0`,display:`flex`,flexDirection:`column`,gap:`2px`}),this.buildSidebarTabs(e),e}buildSidebarTabs(e){for(let t of[`appearance`,`trading`]){let n=document.createElement(`button`);Object.assign(n.style,{display:`flex`,alignItems:`center`,gap:`8px`,padding:`8px 14px`,background:`transparent`,border:`none`,borderLeft:`2px solid transparent`,color:this.theme.axisText,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,cursor:`pointer`,width:`100%`,textAlign:`left`,outline:`none`,transition:`background 0.1s, color 0.1s`,boxSizing:`border-box`});let r=document.createElement(`span`);r.innerHTML=_t[t],Object.assign(r.style,{display:`flex`,flexShrink:`0`});let i=document.createElement(`span`);i.textContent=po[t],n.append(r,i),n.addEventListener(`mouseenter`,()=>{this.activeTab!==t&&(n.style.background=this.theme.ui.accentBg,n.style.color=this.theme.tooltip.text)}),n.addEventListener(`mouseleave`,()=>{this.activeTab!==t&&(n.style.background=`transparent`,n.style.color=this.theme.axisText)}),n.addEventListener(`click`,()=>{this.activeTab=t,this.highlightActiveTab(),this.renderContent()}),this.tabEls.set(t,n),e.appendChild(n)}}highlightActiveTab(){for(let[e,t]of this.tabEls){let n=e===this.activeTab;Object.assign(t.style,{background:n?this.theme.ui.accentBg:`transparent`,color:n?this.theme.ui.accentText:this.theme.axisText,borderLeft:n?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,fontWeight:n?`500`:`400`})}}renderContent(){switch(this.content.innerHTML=``,this.highlightActiveTab(),this.activeTab){case`appearance`:this.buildAppearanceSection();break;case`trading`:this.buildTradingSection();break}}buildAppearanceSection(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,paddingBottom:`10px`,borderBottom:`1px solid ${this.theme.axisBorder}`});let t=document.createElement(`span`);t.textContent=`Theme`,Object.assign(t.style,{color:this.theme.tooltip.text,fontSize:`13px`,fontWeight:`600`}),e.append(t,this.makeThemeToggle()),this.content.appendChild(e),this.content.appendChild(this.makeSectionHeader(`Colors`)),this.content.appendChild(this.buildColorRows())}makeThemeToggle(){let e=this.current.theme===`light`,t=document.createElement(`div`);Object.assign(t.style,{display:`flex`,alignItems:`center`,gap:`8px`});let n=document.createElement(`span`);n.textContent=`Dark`;let r=document.createElement(`span`);r.textContent=`Light`;let i=()=>{Object.assign(n.style,{color:e?this.theme.axisText:this.theme.tooltip.text,fontWeight:e?`400`:`500`,fontSize:`11px`,cursor:`pointer`,userSelect:`none`}),Object.assign(r.style,{color:e?this.theme.tooltip.text:this.theme.axisText,fontWeight:e?`500`:`400`,fontSize:`11px`,cursor:`pointer`,userSelect:`none`})},a=document.createElement(`div`);Object.assign(a.style,{position:`relative`,width:`36px`,height:`20px`,borderRadius:`10px`,cursor:`pointer`,flexShrink:`0`,transition:`background 0.18s`,background:this.theme.axisBorder,border:`1px solid ${this.theme.axisText}50`,boxSizing:`border-box`});let o=document.createElement(`div`);Object.assign(o.style,{position:`absolute`,top:`2px`,left:e?`18px`:`2px`,width:`14px`,height:`14px`,borderRadius:`50%`,background:this.theme.ui.accent,transition:`left 0.18s`,pointerEvents:`none`}),a.appendChild(o);let s=()=>{e=!e,o.style.left=e?`18px`:`2px`,this.current.theme=e?`light`:`dark`,i(),this.emit(),this.renderContent()};return a.addEventListener(`click`,s),n.addEventListener(`click`,()=>{e&&s()}),r.addEventListener(`click`,()=>{e||s()}),i(),t.append(n,a,r),t}buildColorRows(){var e,t,n,r;let i=this.current.theme,a=(e=(t=this.current.canvasColors)==null?void 0:t[i])==null?{}:e,o=document.createElement(`div`);Object.assign(o.style,{display:`grid`,gridTemplateColumns:`max-content 24px 24px`,columnGap:`8px`,rowGap:`8px`,padding:`8px 0 4px`,alignItems:`center`});let s=[{label:`Background`,s1:{field:`background`,fallback:this.theme.background}},{label:`Grid`,s1:{field:`grid`,fallback:this.theme.grid}},{label:`Axis Text`,s1:{field:`axisText`,fallback:this.theme.axisText}},{label:`Axis Border`,s1:{field:`axisBorder`,fallback:this.theme.axisBorder}},{label:`Crosshair`,s1:{field:`crosshair`,fallback:this.theme.crosshair}},{label:`Candle Body`,s1:{field:`candleUp`,fallback:this.theme.candle.up},s2:{field:`candleDown`,fallback:this.theme.candle.down}},{label:`Candle Wick`,s1:{field:`wickUp`,fallback:this.theme.candle.wickUp},s2:{field:`wickDown`,fallback:this.theme.candle.wickDown}},{label:`Candle Border`,s1:{field:`borderUp`,fallback:(n=this.theme.candle.borderUp)==null?this.theme.candle.up:n},s2:{field:`borderDown`,fallback:(r=this.theme.candle.borderDown)==null?this.theme.candle.down:r}},{label:`Volume`,s1:{field:`volumeUp`,fallback:this.theme.volume.up},s2:{field:`volumeDown`,fallback:this.theme.volume.down}}],c=e=>{var t;return this.makeColorSwatch((t=a[e.field])==null?e.fallback:t,t=>{this.current.canvasColors||(this.current.canvasColors={}),this.current.canvasColors[i]||(this.current.canvasColors[i]={}),this.current.canvasColors[i][e.field]=t,this.emit()})};for(let{label:e,s1:t,s2:n}of s){let r=document.createElement(`span`);r.textContent=e,Object.assign(r.style,{color:this.theme.axisText,fontSize:`11px`,paddingRight:`12px`});let i=c(t);i.style.width=`24px`,i.style.height=`24px`;let a;n?(a=c(n),a.style.width=`24px`,a.style.height=`24px`):a=document.createElement(`span`),o.append(r,i,a)}return o}makeColorSwatch(e,t){let n=`${this.theme.axisText}80`,r=document.createElement(`div`);Object.assign(r.style,{position:`relative`,width:`28px`,height:`28px`,borderRadius:`6px`,overflow:`hidden`,cursor:`pointer`,border:`1.5px solid ${n}`,flexShrink:`0`,boxSizing:`border-box`});let i=document.createElement(`div`);Object.assign(i.style,{position:`absolute`,inset:`0`,background:e});let a=document.createElement(`input`);a.type=`color`,a.value=e,Object.assign(a.style,{position:`absolute`,inset:`0`,opacity:`0`,width:`100%`,height:`100%`,cursor:`pointer`,padding:`0`,border:`none`});let o=null;return a.addEventListener(`input`,()=>{i.style.background=a.value,o!==null&&clearTimeout(o),o=setTimeout(()=>{o=null,t(a.value)},300)}),r.append(i,a),r}buildTradingSection(){let e=this.labels.settings;this.content.appendChild(this.makeSectionHeader(e.tfcSection)),this.content.appendChild(this.makeVerticalSettingRow(e.showLabel,`Controls which trade levels are displayed on the chart`,this.makeSegmented([{value:`all`,label:e.showAll},{value:`positions`,label:e.showPositions},{value:`orders`,label:e.showOrders},{value:`none`,label:e.showNone}],this.current.tradeDisplayFilter,e=>{this.current.tradeDisplayFilter=e,this.emit()}))),this.content.appendChild(this.makeVerticalSettingRow(e.positionStyleLabel,`How open positions are rendered on the chart`,this.makeSegmented([{value:`line`,label:e.styleLine},{value:`dot`,label:e.styleDot}],this.current.positionRenderStyle,e=>{this.current.positionRenderStyle=e,this.emit()})))}makeSectionHeader(e,t=!1){let n=document.createElement(`div`);return n.textContent=e,Object.assign(n.style,{color:this.theme.tooltip.text,fontSize:`13px`,fontWeight:`600`,paddingBottom:`10px`,marginTop:t?`0`:`20px`,marginBottom:`2px`,borderBottom:`1px solid ${this.theme.axisBorder}`}),n}makeVerticalSettingRow(e,t,n){let r=document.createElement(`div`);Object.assign(r.style,{display:`flex`,flexDirection:`column`,gap:`12px`,padding:`14px 0`,borderBottom:`1px solid ${this.theme.axisBorder}`});let i=document.createElement(`div`);Object.assign(i.style,{display:`flex`,flexDirection:`column`,gap:`0px`});let a=document.createElement(`span`);a.textContent=e,Object.assign(a.style,{color:this.theme.tooltip.text,fontSize:`12px`,fontWeight:`500`});let o=document.createElement(`span`);return o.textContent=t,Object.assign(o.style,{color:this.theme.axisText,fontSize:`10px`}),i.append(a,o),Object.assign(n.style,{width:`fit-content`,border:`1px solid ${this.theme.axisText}`,borderRadius:`6px`,overflow:`hidden`}),r.append(i,n),r}makeSegmented(e,t,n){let r=document.createElement(`div`);Object.assign(r.style,{display:`inline-flex`,borderRadius:`6px`,border:`1px solid ${this.theme.axisText}`,overflow:`hidden`,flexShrink:`0`});let i=[];for(let a of e){let o=document.createElement(`button`),s=a.value===t;Object.assign(o.style,{padding:`5px 14px`,fontSize:`11px`,fontFamily:`'Inter', system-ui, sans-serif`,background:s?this.theme.ui.accent:`transparent`,color:s?`#ffffff`:this.theme.axisText,border:`none`,borderRight:`1px solid ${this.theme.axisText}`,cursor:`pointer`,outline:`none`,transition:`background 0.12s, color 0.12s`,whiteSpace:`nowrap`,textAlign:`center`}),a===e[e.length-1]&&(o.style.borderRight=`none`),o.textContent=a.label,o.addEventListener(`mouseenter`,()=>{t!==a.value&&(o.style.background=this.theme.ui.accentBg,o.style.color=this.theme.ui.accentText)}),o.addEventListener(`mouseleave`,()=>{t!==a.value&&(o.style.background=`transparent`,o.style.color=this.theme.axisText)}),o.addEventListener(`click`,()=>{t=a.value;for(let e of i)e.style.background=`transparent`,e.style.color=this.theme.axisText;o.style.background=this.theme.ui.accent,o.style.color=`#ffffff`,n(a.value)}),i.push(o),r.appendChild(o)}return r}},ho=class{constructor(e,t,n,r=y.trade){this._visible=!1,this.theme=e,this.el=document.createElement(`button`),this.el.innerHTML=xt,this.el.title=r.placeOrderTitle,Object.assign(this.el.style,{position:`absolute`,right:`${t+26}px`,top:`0`,width:`22px`,height:`22px`,borderRadius:`50%`,border:`1px solid ${e.axisBorder}`,background:e.tooltip.background,color:e.axisText,fontSize:`14px`,lineHeight:`1`,display:`none`,alignItems:`center`,justifyContent:`center`,cursor:`pointer`,padding:`0`,fontFamily:`'Inter', system-ui, sans-serif`,zIndex:`15`,transform:`translateY(-50%)`,transition:`opacity 0.1s`,pointerEvents:`auto`,userSelect:`none`}),this.el.addEventListener(`click`,e=>{e.stopPropagation(),n()}),this.el.addEventListener(`mouseenter`,()=>{this.el.style.opacity=`1`,Object.assign(this.el.style,{background:e.tooltip.background,color:`#26a69a`,border:`1px solid #26a69a`})}),this.el.addEventListener(`mouseleave`,e=>{var t;Object.assign(this.el.style,{background:this.theme.tooltip.background,color:this.theme.axisText,border:`1px solid ${this.theme.axisBorder}`});let n=e.relatedTarget;(!n||!((t=this.el.parentElement)!=null&&t.contains(n)))&&this.hide()})}setY(e){this.el.style.top=`${e}px`}show(){this._visible||(this._visible=!0,this.el.style.display=`flex`)}hide(){this._visible&&(this._visible=!1,this.el.style.display=`none`)}setTheme(e,t){this.theme=e,Object.assign(this.el.style,{border:`1px solid ${e.axisBorder}`,background:e.tooltip.background,color:e.axisText,right:`${t+26}px`})}},go=class{constructor(e,t,n,r=y.trade){this._price=0,this._pricePrecision=2,this._buyOrderType=`limit`,this._sellOrderType=`limit`,this.onDocMouseDown=e=>{this.isVisible&&!this.el.contains(e.target)&&this.hide()},this.theme=e,this.lots=t,this.onDraftCreate=n,this.labels=r,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`absolute`,display:`none`,flexDirection:`column`,gap:`1px`,background:e.tooltip.background,border:`1px solid ${e.axisBorder}`,borderRadius:`5px`,padding:`4px`,zIndex:`20`,boxShadow:`0 4px 16px rgba(0,0,0,0.25)`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`12px`,minWidth:`140px`,pointerEvents:`auto`}),document.addEventListener(`mousedown`,this.onDocMouseDown)}show(e,t,n,r=2,i=`limit`,a=`limit`){this._price=e,this._pricePrecision=r,this._buyOrderType=i,this._sellOrderType=a,this.rebuild(),this.el.style.display=`flex`,this.el.style.right=`${n}px`,this.el.style.top=`${t-16}px`,this.el.style.width=`145px`}hide(){this.el.style.display=`none`}get isVisible(){return this.el.style.display!==`none`}setLots(e){this.lots=e}setTheme(e){this.theme=e,Object.assign(this.el.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`})}destroy(){document.removeEventListener(`mousedown`,this.onDocMouseDown)}rebuild(){this.el.innerHTML=``,this.el.append(this.makeRow(this.labels.buy,`#26a69a`,`buy`,this._buyOrderType),this.makeRow(this.labels.sell,`#ef5350`,`sell`,this._sellOrderType))}makeRow(e,t,n,r){let i=document.createElement(`button`),a=this._price.toFixed(this._pricePrecision);return i.textContent=`${e} ${r===`limit`?this.labels.limit:this.labels.stop} ${a}`,Object.assign(i.style,{display:`block`,width:`100%`,background:`transparent`,color:t,border:`none`,borderRadius:`3px`,padding:`7px 10px`,textAlign:`left`,cursor:`pointer`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,fontWeight:`600`}),i.addEventListener(`mouseenter`,()=>{i.style.background=t+`22`}),i.addEventListener(`mouseleave`,()=>{i.style.background=`transparent`}),i.addEventListener(`mousedown`,e=>{e.stopPropagation(),this.onDraftCreate(n,this._price,r),this.hide()}),i}},_o=class e{constructor(e,t=y.trade){this._pendingLots=null,this.priceAxisWidth=e,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`absolute`,display:`none`,alignItems:`center`,gap:`5px`,right:`${e+4}px`,top:`0`,transform:`translateY(calc(-100% - 16px))`,zIndex:`18`,pointerEvents:`auto`,userSelect:`none`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`11px`});let n=document.createElement(`span`);n.textContent=t.qty,this.input=document.createElement(`input`),this.input.type=`number`,Object.assign(this.input.style,{width:`52px`,padding:`3px 5px`,border:`1px solid #ffffff`,borderRadius:`3px`,background:`rgb(30,30,30)`,color:`#ffffff`,fontSize:`11px`,fontFamily:`'Inter', system-ui, sans-serif`,outline:`none`,textAlign:`right`}),this.input.addEventListener(`mousedown`,e=>e.stopPropagation()),this.input.addEventListener(`wheel`,e=>e.stopPropagation()),this.input.addEventListener(`focus`,()=>this.input.select()),this.input.addEventListener(`input`,()=>{var e;return(e=this.onLotsChange)==null?void 0:e.call(this,this.getValue())}),this.el.append(n,this.input)}static boxBg(e){return e.background===`#ffffff`?`rgb(230,230,230)`:`rgb(30,30,30)`}static boxFg(e){return e.background===`#ffffff`?`#000000`:`#ffffff`}show(t,n,r,i){var a;let o=e.boxBg(r),s=e.boxFg(r);Object.assign(this.input.style,{background:o,color:s,border:`1px solid ${s}`});let c=this.el.firstElementChild;c&&(c.style.color=s),this.input.min=String(n),this.input.step=String(n),this.input.value=String((a=this._pendingLots)==null?n:a),this._pendingLots=null;let l=i===void 0?t:Math.max(54,Math.min(i-10,t));this.el.style.top=`${l}px`,this.el.style.display=`flex`,requestAnimationFrame(()=>this.input.focus({preventScroll:!0}))}hide(){this.el.style.display=`none`}setValue(e){if(this.el.style.display===`none`){this._pendingLots=e;return}this.input.value=String(e)}getValue(){let e=parseFloat(this.input.value);return isNaN(e)||e<=0?parseFloat(this.input.min||`1`):e}setY(e,t){let n=t===void 0?e:Math.max(54,Math.min(t-10,e));this.el.style.top=`${n}px`}setTheme(t,n){this.priceAxisWidth=n,this.el.style.right=`${n+4}px`;let r=e.boxBg(t),i=e.boxFg(t);Object.assign(this.input.style,{background:r,color:i,border:`1px solid ${i}`});let a=this.el.firstElementChild;a&&(a.style.color=i)}destroy(){this.el.remove()}},vo=50,yo=20,bo=class{constructor(e,t){this.isins=[],this.currentSymbol=``,this.escHandler=null,this.theme=e,this.onSelect=t,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`fixed`,inset:`0`,background:`rgba(0,0,0,0.5)`,display:`none`,alignItems:`center`,justifyContent:`center`,zIndex:`1000`}),this.el.addEventListener(`mousedown`,e=>{e.target===this.el&&this.hide()}),this.panel=document.createElement(`div`),Object.assign(this.panel.style,{display:`flex`,flexDirection:`column`,width:`360px`,maxHeight:`520px`,background:e.tooltip.background,border:`1px solid ${e.axisBorder}`,borderRadius:`6px`,boxShadow:`0 8px 32px rgba(0,0,0,0.45)`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`12px`,overflow:`hidden`}),this.panel.addEventListener(`mousedown`,e=>e.stopPropagation()),this.el.appendChild(this.panel);let n=document.createElement(`div`);Object.assign(n.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`10px 14px`,borderBottom:`1px solid ${e.axisBorder}`,flexShrink:`0`});let r=document.createElement(`span`);r.textContent=`Select Symbol`,Object.assign(r.style,{color:e.tooltip.text,fontWeight:`600`,fontSize:`13px`});let i=document.createElement(`span`);i.innerHTML=it,Object.assign(i.style,{display:`inline-flex`,alignItems:`center`,color:e.axisText,cursor:`pointer`}),i.addEventListener(`mouseenter`,()=>{i.style.color=e.tooltip.text}),i.addEventListener(`mouseleave`,()=>{i.style.color=e.axisText}),i.addEventListener(`click`,()=>this.hide()),n.appendChild(r),n.appendChild(i),this.panel.appendChild(n);let a=document.createElement(`div`);Object.assign(a.style,{padding:`8px 14px`,borderBottom:`1px solid ${e.axisBorder}`,flexShrink:`0`}),this.searchInput=document.createElement(`input`),this.searchInput.type=`text`,this.searchInput.placeholder=`Search symbols…`,Object.assign(this.searchInput.style,{width:`100%`,boxSizing:`border-box`,background:`transparent`,border:`1px solid ${e.axisBorder}`,borderRadius:`4px`,color:e.tooltip.text,fontSize:`12px`,padding:`5px 8px`,outline:`none`}),this.searchInput.addEventListener(`input`,()=>this.renderList()),a.appendChild(this.searchInput),this.panel.appendChild(a),this.listEl=document.createElement(`div`),Object.assign(this.listEl.style,{overflowY:`auto`,flex:`1`,scrollbarWidth:`thin`,scrollbarColor:`rgba(120,130,150,0.35) transparent`}),this.panel.appendChild(this.listEl)}show(e,t){this.isins=e,this.currentSymbol=t,this.searchInput.value=``,this.renderList(),this.el.style.display=`flex`,requestAnimationFrame(()=>this.searchInput.focus()),this.escHandler=e=>{e.key===`Escape`&&this.hide()},document.addEventListener(`keydown`,this.escHandler)}hide(){this.el.style.display=`none`,this.escHandler&&(document.removeEventListener(`keydown`,this.escHandler),this.escHandler=null)}setCurrentSymbol(e){this.currentSymbol=e,this.el.style.display!==`none`&&this.renderList()}setIsins(e){this.isins=e}setTheme(e){this.theme=e,Object.assign(this.panel.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`})}destroy(){this.escHandler&&document.removeEventListener(`keydown`,this.escHandler),this.el.remove()}sortWithCurrentFirst(e){if(!this.currentSymbol)return e;let t=e.indexOf(this.currentSymbol);if(t<=0)return e;let n=e.slice();return n.splice(t,1),n.unshift(this.currentSymbol),n}renderList(){let e=this.searchInput.value.trim().toLowerCase(),t=this.sortWithCurrentFirst(e?this.isins.filter(t=>t.toLowerCase().includes(e)).slice(0,yo):this.isins.slice(0,vo));if(this.listEl.innerHTML=``,t.length===0){let e=document.createElement(`div`);e.textContent=`No symbols found`,Object.assign(e.style,{padding:`16px 14px`,color:this.theme.axisText,textAlign:`center`}),this.listEl.appendChild(e);return}for(let e of t){let t=document.createElement(`div`),n=e===this.currentSymbol;Object.assign(t.style,{padding:`8px 14px`,cursor:`pointer`,color:n?this.theme.ui.accentText:this.theme.tooltip.text,background:n?this.theme.ui.accentBg:`transparent`,fontWeight:n?`600`:`400`,borderLeft:n?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,boxSizing:`border-box`,userSelect:`none`}),t.textContent=e,t.addEventListener(`mouseenter`,()=>{e!==this.currentSymbol&&(t.style.background=this.theme.ui.accentBg)}),t.addEventListener(`mouseleave`,()=>{e!==this.currentSymbol&&(t.style.background=`transparent`)}),t.addEventListener(`click`,()=>{this.onSelect(e),this.hide()}),this.listEl.appendChild(t)}}},xo=class e{constructor(){this._active=!1,this._isDraggingBracket=!1,this._level=null,this._startY=0,this._startPrice=0,this._currentPrice=0,this._mainMinPrice=-1/0,this._mainMaxPrice=1/0,this._bracketType=null,this._bracketStartPrice=0,this._bracketCurrentPrice=0,this._bracketParentPrice=0,this._bracketParentSide=`buy`,this._bracketMarketPrice=0}startDrag(e,t,n,r,i,a,o,s){this._active=!0,this._isDraggingBracket=!1,this._level=e,this._startY=t,this._startPrice=n,this._currentPrice=n,this._bracketType=null,r!==void 0||i!==void 0?(a==null?`buy`:a)===`buy`?(this._mainMinPrice=r==null?-1/0:r,this._mainMaxPrice=i==null?1/0:i):(this._mainMinPrice=i==null?-1/0:i,this._mainMaxPrice=r==null?1/0:r):(this._mainMinPrice=-1/0,this._mainMaxPrice=1/0),o&&o>0&&s&&s!==`market`&&a&&(a===`buy`&&s===`limit`||a===`sell`&&s===`stop`?this._mainMaxPrice=Math.min(this._mainMaxPrice,o):this._mainMinPrice=Math.max(this._mainMinPrice,o))}startBracketDrag(e,t,n,r=0,i){var a;this._active=!0,this._isDraggingBracket=!0,this._level=e,this._bracketType=t,this._bracketStartPrice=n,this._bracketCurrentPrice=n,this._bracketParentPrice=i==null?e.price:i,this._bracketParentSide=(a=e.side)==null?`buy`:a,this._bracketMarketPrice=r}onMouseMove(e,t,n,r){if(!this._active||!this._level)return null;let i=t.pixelToPrice(e,n,r);if(this._isDraggingBracket&&this._bracketType!==null){let e=this._clampBracketPrice(i,this._bracketType,this._bracketParentPrice,this._bracketParentSide,this._bracketMarketPrice);return this._bracketCurrentPrice=e,{newPrice:e,label:`${this._level.label}:${this._bracketType}`,isBracket:!0}}let a=Math.max(this._mainMinPrice,Math.min(this._mainMaxPrice,i));return this._currentPrice=a,{newPrice:a,label:this._level.label,isBracket:!1}}endDrag(){if(!this._active||!this._level)return null;let e=this._level,t;return t=this._isDraggingBracket&&this._bracketType!==null?{label:e.label,type:e.type,newPrice:this._bracketCurrentPrice,startPrice:this._bracketStartPrice,data:e.data,bracketType:this._bracketType}:{label:e.label,type:e.type,newPrice:this._currentPrice,startPrice:this._startPrice,data:e.data},this._reset(),t}cancelDrag(){this._reset()}get active(){return this._active}get dragLabel(){return!this._active||!this._level?null:this._isDraggingBracket&&this._bracketType?`${this._level.label}:${this._bracketType}`:this._level.label}get currentPrice(){return this._active?this._isDraggingBracket?this._bracketCurrentPrice:this._currentPrice:null}static isBracketPriceValid(e,t,n,r,i=0){let a=i>0?r===`buy`?t===`stopLoss`?Math.min(n,i):Math.max(n,i):t===`stopLoss`?Math.max(n,i):Math.min(n,i):n;return r===`buy`?t===`stopLoss`?e<a:e>a:t===`stopLoss`?e>a:e<a}_clampBracketPrice(t,n,r,i,a=0){return e.isBracketPriceValid(t,n,r,i,a)?t:a>0?i===`buy`?n===`stopLoss`?Math.min(r,a):Math.max(r,a):n===`stopLoss`?Math.max(r,a):Math.min(r,a):r}_reset(){this._active=!1,this._isDraggingBracket=!1,this._level=null,this._bracketType=null,this._currentPrice=0,this._mainMinPrice=-1/0,this._mainMaxPrice=1/0,this._bracketStartPrice=0,this._bracketCurrentPrice=0,this._bracketParentPrice=0,this._bracketParentSide=`buy`,this._bracketMarketPrice=0}};function X(e,t){return e[t]}var So=class{constructor(e,t=`#F5A623`,n=`MA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null};let r=0;for(let t=n-this.period+1;t<=n;t++)r+=X(e[t],this.source);return{index:n,value:r/this.period}})}render(e,t,n,r,i){var a;let o=Co(e);if(!o)return;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let s=!1,c=(a=e.canvas._chartWidth)==null?e.canvas.width:a;for(let a of t){if(a.value===null){s=!1;continue}let t=n.xToPixel(a.index,r,c),l=n.yToPixel(a.value,o,i);s?e.lineTo(t,l):(e.moveTo(t,l),s=!0)}e.stroke()}};function Co(e){var t;return(t=e.canvas._priceRange)==null?null:t}var wo=class{constructor(e,t=`#9B59B6`,n=`EMA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){let t=2/(this.period+1),n=[],r=null;for(let i=0;i<e.length;i++){if(i<this.period-1){n.push({index:i,value:null});continue}if(r===null){let t=0;for(let n=0;n<this.period;n++)t+=X(e[i-n],this.source);r=t/this.period}else r=X(e[i],this.source)*t+r*(1-t);n.push({index:i,value:r})}return n}render(e,t,n,r,i){var a;let o=e.canvas._priceRange;if(!o)return;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let s=!1,c=(a=e.canvas._chartWidth)==null?e.canvas.width:a;for(let a of t){if(a.value===null){s=!1;continue}let t=n.xToPixel(a.index,r,c),l=n.yToPixel(a.value,o,i);s?e.lineTo(t,l):(e.moveTo(t,l),s=!0)}e.stroke()}},To=class{constructor(e=20,t=`#e91e63`,n=`WMA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){let t=this.period*(this.period+1)/2,n=[];for(let r=0;r<e.length;r++){if(r<this.period-1){n.push({index:r,value:null});continue}let i=0;for(let t=0;t<this.period;t++)i+=X(e[r-(this.period-1-t)],this.source)*(t+1);n.push({index:r,value:i/t})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke()}};function Eo(e,t){let n=t*(t+1)/2,r=[];for(let i=0;i<e.length;i++){if(i<t-1){r.push(null);continue}let a=0;for(let n=0;n<t;n++)a+=e[i-(t-1-n)]*(n+1);r.push(a/n)}return r}var Do=class{constructor(e=20,t=`#00bcd4`,n=`HMA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){let t=e.map(e=>X(e,this.source)),n=Math.floor(this.period/2),r=Math.floor(Math.sqrt(this.period)),i=Eo(t,n),a=Eo(t,this.period),o=i.map((e,t)=>{let n=a[t];return e===null||n===null?null:2*e-n}),s=Eo(o.map(e=>e===null?0:e),r);return e.map((e,t)=>{let n=t-r+1;return n<0||!(o[n]!==null&&o[t]!==null)||s[t]===null?{index:t,value:null}:{index:t,value:s[t]}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke()}},Oo=[5,10,20,50,100],ko=[`#ff6b6b`,`#ffd93d`,`#6bcb77`,`#4d96ff`,`#c77dff`],Ao=class{constructor(e=`#ffcc80`,t=`close`){this.source=t,this.name=`MARibbon`,this.color=e}compute(e){let t=(t,n)=>{if(t<n-1)return null;let r=0;for(let i=t-n+1;i<=t;i++)r+=X(e[i],this.source);return r/n};return e.map((e,n)=>({index:n,value:t(n,5),upper:t(n,10),lower:t(n,20),signal:t(n,50),histogram:t(n,100)}))}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=[`value`,`upper`,`lower`,`signal`,`histogram`];for(let a=0;a<Oo.length;a++){let o=l[a],u=ko[a];e.beginPath(),e.strokeStyle=u;let d=!1;for(let a of t){let t=a[o];if(t==null){d=!1;continue}let l=n.xToPixel(a.index,r,c),u=n.yToPixel(t,s,i);d?e.lineTo(l,u):(e.moveTo(l,u),d=!0)}e.stroke()}}},jo=class{constructor(e=20,t=2,n=`#3B82F6`,r=`BB`,i=`close`){this.period=e,this.stdDevMultiplier=t,this.source=i,this.name=r,this.color=n}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null,upper:null,lower:null};let r=e.slice(n-this.period+1,n+1).map(e=>X(e,this.source)),i=r.reduce((e,t)=>e+t,0)/this.period,a=r.reduce((e,t)=>e+(t-i)**2,0)/this.period,o=Math.sqrt(a);return{index:n,value:i,upper:i+o*this.stdDevMultiplier,lower:i-o*this.stdDevMultiplier}})}render(e,t,n,r,i){var a;let o=e.canvas._priceRange;if(!o)return;let s=(a=e.canvas._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let c=(a,c=!1)=>{c&&e.setLineDash([4,3]),e.beginPath();let l=!1;for(let c of t){let t=a(c);if(t==null){l=!1;continue}let u=n.xToPixel(c.index,r,s),d=n.yToPixel(t,o,i);l?e.lineTo(u,d):(e.moveTo(u,d),l=!0)}e.stroke(),c&&e.setLineDash([])};e.strokeStyle=this.color,c(e=>e.value),e.strokeStyle=`${this.color}99`,c(e=>e.upper,!0),c(e=>e.lower,!0);let l=[],u=[];for(let e of t){if(e.upper==null||e.lower==null)continue;let t=n.xToPixel(e.index,r,s);l.push([t,n.yToPixel(e.upper,o,i)]),u.push([t,n.yToPixel(e.lower,o,i)])}l.length<2||(e.beginPath(),l.forEach(([t,n],r)=>r===0?e.moveTo(t,n):e.lineTo(t,n)),u.reverse().forEach(([t,n])=>e.lineTo(t,n)),e.closePath(),e.fillStyle=`${this.color}12`,e.fill())}},Mo=class{constructor(e=20,t=2,n=10,r=`#4caf50`,i=`KC`){this.period=e,this.mult=t,this.atrPeriod=n,this.name=i,this.color=r}compute(e){let t=[],n=2/(this.period+1),r=null,i=null;for(let a=0;a<e.length;a++){let o=e[a];if(a<this.period-1){t.push({index:a,value:null,upper:null,lower:null});continue}if(r===null){let t=0;for(let n=0;n<this.period;n++)t+=e[a-n].close;r=t/this.period}else r=o.close*n+r*(1-n);let s=a===0?o.high-o.low:Math.max(o.high-o.low,Math.abs(o.high-e[a-1].close),Math.abs(o.low-e[a-1].close));if(i===null){if(a<this.atrPeriod){if(t.pop(),t.push({index:a,value:null,upper:null,lower:null}),a===this.atrPeriod-1){let t=0;for(let n=0;n<this.atrPeriod;n++){let r=e[a-n],i=e[a-n-1],o=n===a?r.high-r.low:Math.max(r.high-r.low,Math.abs(r.high-i.close),Math.abs(r.low-i.close));t+=o}i=t/this.atrPeriod}continue}}else i=(i*(this.atrPeriod-1)+s)/this.atrPeriod;if(i===null){t.push({index:a,value:null,upper:null,lower:null});continue}let c=r+this.mult*i,l=r-this.mult*i;t.push({index:a,value:r,upper:c,lower:l})}return t}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=(a,o=!1)=>{o&&e.setLineDash([4,3]),e.beginPath();let l=!1;for(let o of t){let t=a(o);if(t==null){l=!1;continue}let u=n.xToPixel(o.index,r,c),d=n.yToPixel(t,s,i);l?e.lineTo(u,d):(e.moveTo(u,d),l=!0)}e.stroke(),o&&e.setLineDash([])};e.strokeStyle=this.color,l(e=>e.value),e.strokeStyle=`${this.color}99`,l(e=>e.upper,!0),l(e=>e.lower,!0);let u=[],d=[];for(let e of t){if(e.upper==null||e.lower==null)continue;let t=n.xToPixel(e.index,r,c);u.push([t,n.yToPixel(e.upper,s,i)]),d.push([t,n.yToPixel(e.lower,s,i)])}u.length<2||(e.beginPath(),u.forEach(([t,n],r)=>r===0?e.moveTo(t,n):e.lineTo(t,n)),d.reverse().forEach(([t,n])=>e.lineTo(t,n)),e.closePath(),e.fillStyle=`${this.color}12`,e.fill())}},No=class{constructor(e=20,t=`#26c6da`){this.period=e,this.name=`DC`,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null,upper:null,lower:null};let r=-1/0,i=1/0;for(let t=n-this.period+1;t<=n;t++)e[t].high>r&&(r=e[t].high),e[t].low<i&&(i=e[t].low);return{index:n,value:(r+i)/2,upper:r,lower:i}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=(a,o=!1)=>{o&&e.setLineDash([4,3]),e.beginPath();let l=!1;for(let o of t){let t=a(o);if(t==null){l=!1;continue}let u=n.xToPixel(o.index,r,c),d=n.yToPixel(t,s,i);l?e.lineTo(u,d):(e.moveTo(u,d),l=!0)}e.stroke(),o&&e.setLineDash([])};e.strokeStyle=this.color,l(e=>e.value,!0),e.strokeStyle=`${this.color}99`,l(e=>e.upper),l(e=>e.lower);let u=[],d=[];for(let e of t){if(e.upper==null||e.lower==null)continue;let t=n.xToPixel(e.index,r,c);u.push([t,n.yToPixel(e.upper,s,i)]),d.push([t,n.yToPixel(e.lower,s,i)])}u.length<2||(e.beginPath(),u.forEach(([t,n],r)=>r===0?e.moveTo(t,n):e.lineTo(t,n)),d.slice().reverse().forEach(([t,n])=>e.lineTo(t,n)),e.closePath(),e.fillStyle=`${this.color}14`,e.fill())}},Po=class{constructor(e=14,t=`#ff5722`,n=`ATR`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=n,this.color=t}compute(e){let t=[];if(e.length===0)return t;let n=[];for(let t=0;t<e.length;t++)if(t===0)n.push(e[t].high-e[t].low);else{let r=e[t-1].close;n.push(Math.max(e[t].high-e[t].low,Math.abs(e[t].high-r),Math.abs(e[t].low-r)))}if(e.length<this.period)return e.map((e,t)=>({index:t,value:null}));let r=0;for(let e=0;e<this.period;e++)r+=n[e];r/=this.period;for(let e=0;e<this.period-1;e++)t.push({index:e,value:null});t.push({index:this.period-1,value:r});for(let i=this.period;i<e.length;i++)r=(r*(this.period-1)+n[i])/this.period,t.push({index:i,value:r});return t}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,n.value));return{min:0,max:t*1.2}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,e.value));let l=a==null?{min:0,max:c*1.2}:a,u=[];for(let e of t)e.value!=null&&u.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,l,i)});if(u.length===0)return;let d=n.yToPixel(0,l,i);e.beginPath(),e.moveTo(u[0].x,d);for(let t of u)e.lineTo(t.x,t.y);e.lineTo(u[u.length-1].x,d),e.closePath(),e.fillStyle=this.color+`33`,e.fill(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value==null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Fo=class{constructor(e=14,t=`#e8b84b`,n=`RSI`,r=`close`){this.period=e,this.source=r,this.pane=`sub`,this.paneHeight=80,this.name=n,this.color=t}compute(e){let t=[];if(e.length<this.period+1)return e.map((e,t)=>({index:t,value:null}));let n=0,r=0;for(let t=1;t<=this.period;t++){let i=X(e[t],this.source)-X(e[t-1],this.source);i>0?n+=i:r+=Math.abs(i)}n/=this.period,r/=this.period;for(let e=0;e<this.period;e++)t.push({index:e,value:null});let i=r===0?1/0:n/r;t.push({index:this.period,value:r===0?100:100-100/(1+i)});for(let i=this.period+1;i<e.length;i++){let a=X(e[i],this.source)-X(e[i-1],this.source),o=a>0?a:0,s=a<0?Math.abs(a):0;n=(n*(this.period-1)+o)/this.period,r=(r*(this.period-1)+s)/this.period;let c=r===0?1/0:n/r;t.push({index:i,value:r===0?100:100-100/(1+c)})}return t}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(70,c,i),u=n.yToPixel(30,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[70,50,30]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}},Io=class{constructor(e=14,t=3,n=`#e040fb`){this.kPeriod=e,this.dPeriod=t,this.name=`Stoch`,this.pane=`sub`,this.paneHeight=80,this.color=n}compute(e){let t=[],n=[];for(let r=0;r<e.length;r++){if(r<this.kPeriod-1){n.push(null),t.push({index:r,value:null,upper:null});continue}let i=1/0,a=-1/0;for(let t=r-this.kPeriod+1;t<=r;t++)e[t].low<i&&(i=e[t].low),e[t].high>a&&(a=e[t].high);let o=a-i,s=o===0?50:(e[r].close-i)/o*100;n.push(s),t.push({index:r,value:s,upper:null})}for(let r=0;r<e.length;r++){if(n[r]===null)continue;let e=0,i=0;for(let t=r;t>=0&&e<this.dPeriod&&n[t]!==null;t--)i+=n[t],e++;e===this.dPeriod&&(t[r].upper=i/this.dPeriod)}return t}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(80,c,i),u=n.yToPixel(20,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[80,50,20]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke(),e.beginPath(),e.strokeStyle=`#ff9800`,e.lineWidth=1,e.lineJoin=`round`,d=!1;for(let a of t){if(a.upper==null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.upper,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}};function Lo(e,t){let n=[];for(let r=0;r<e.length;r++){if(r<t-1){n.push(null);continue}let i=0,a=!0;for(let n=r-t+1;n<=r;n++){if(e[n]===null){a=!1;break}i+=e[n]}n.push(a?i/t:null)}return n}var Ro=class{constructor(e=14,t=14,n=3,r=3,i=`#00e5ff`){this.rsiPeriod=e,this.stochPeriod=t,this.kPeriod=n,this.dPeriod=r,this.name=`StochRSI`,this.pane=`sub`,this.paneHeight=80,this.color=i}compute(e){let t=[];if(e.length<this.rsiPeriod+1)return e.map((e,t)=>({index:t,value:null,upper:null}));let n=0,r=0;for(let t=1;t<=this.rsiPeriod;t++){let i=e[t].close-e[t-1].close;i>0?n+=i:r+=Math.abs(i)}n/=this.rsiPeriod,r/=this.rsiPeriod;for(let e=0;e<this.rsiPeriod;e++)t.push(null);let i=r===0?1/0:n/r;t.push(r===0?100:100-100/(1+i));for(let i=this.rsiPeriod+1;i<e.length;i++){let a=e[i].close-e[i-1].close,o=a>0?a:0,s=a<0?Math.abs(a):0;n=(n*(this.rsiPeriod-1)+o)/this.rsiPeriod,r=(r*(this.rsiPeriod-1)+s)/this.rsiPeriod;let c=r===0?1/0:n/r;t.push(r===0?100:100-100/(1+c))}let a=[];for(let n=0;n<e.length;n++){if(t[n]===null){a.push(null);continue}if(n<this.rsiPeriod+this.stochPeriod-1){a.push(null);continue}let e=1/0,r=-1/0,i=!0;for(let a=n-this.stochPeriod+1;a<=n;a++){if(t[a]===null){i=!1;break}let n=t[a];n<e&&(e=n),n>r&&(r=n)}if(!i){a.push(null);continue}let o=r-e,s=o===0?50:(t[n]-e)/o*100;a.push(s)}let o=Lo(a,this.kPeriod),s=Lo(o,this.dPeriod);return e.map((e,t)=>{var n,r;return{index:t,value:(n=o[t])==null?null:n,upper:(r=s[t])==null?null:r}})}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(80,c,i),u=n.yToPixel(20,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[80,50,20]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke(),e.beginPath(),e.strokeStyle=`#ff9800`,e.lineWidth=1,e.lineJoin=`round`,d=!1;for(let a of t){if(a.upper==null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.upper,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}};function zo(e,t){let n=2/(t+1),r=[],i=null;for(let a=0;a<e.length;a++){if(a<t-1){r.push(null);continue}if(i===null){let n=0;for(let r=0;r<t;r++)n+=e[a-r];i=n/t}else i=e[a]*n+i*(1-n);r.push(i)}return r}var Bo=class{constructor(e=12,t=26,n=9,r=`#2196f3`,i=`MACD`,a=`close`){this.fast=e,this.slow=t,this.signal=n,this.source=a,this.pane=`sub`,this.paneHeight=80,this.name=i,this.color=r}compute(e){let t=e.map(e=>X(e,this.source)),n=zo(t,this.fast),r=zo(t,this.slow),i=t.map((e,t)=>n[t]===null||r[t]===null?null:n[t]-r[t]),a=zo(i.map(e=>e==null?0:e),this.signal);return e.map((e,t)=>{let n=i[t];if(n===null)return{index:t,value:null,upper:null,lower:null,histogram:null};let r=t>=this.slow-1+this.signal-1?a[t]:null;return{index:t,value:n,upper:r,lower:n!==null&&r!==null?n-r:null}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value))),n.upper!=null&&(t=Math.max(t,Math.abs(n.upper))),n.lower!=null&&(t=Math.max(t,Math.abs(n.lower)));return{min:-t*1.3,max:t*1.3}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value))),e.upper!=null&&(c=Math.max(c,Math.abs(e.upper))),e.lower!=null&&(c=Math.max(c,Math.abs(e.lower)));let l=a==null?{min:-c*1.3,max:c*1.3}:a,u=n.yToPixel(0,l,i);e.strokeStyle=`rgba(150,150,150,0.3)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,u),e.lineTo(s,u),e.stroke();let d=Math.max(n.candleBodyWidth(r,s),1);for(let a of t){if(a.lower==null)continue;let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.lower,l,i),c=Math.abs(o-u),f=Math.min(o,u);e.fillStyle=a.lower>=0?`rgba(38,166,154,0.55)`:`rgba(239,83,80,0.55)`,e.fillRect(t-d/2,f,d,c)}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value==null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke(),e.beginPath(),e.strokeStyle=`#ff6b35`,e.lineWidth=1,e.lineJoin=`round`,f=!1;for(let a of t){if(a.upper==null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.upper,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Vo=class{constructor(e=20,t=`#4db6ac`){this.period=e,this.name=`CCI`,this.pane=`sub`,this.paneHeight=80,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null};let r=e.slice(n-this.period+1,n+1).map(e=>(e.high+e.low+e.close)/3),i=r[r.length-1],a=r.reduce((e,t)=>e+t,0)/this.period,o=r.reduce((e,t)=>e+Math.abs(t-a),0)/this.period;return o===0?{index:n,value:0}:{index:n,value:(i-a)/(.015*o)}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value)));return{min:-t*1.3,max:t*1.3}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value)));let l=a==null?{min:-c*1.3,max:c*1.3}:a,u=n.yToPixel(100,l,i),d=n.yToPixel(-100,l,i);e.fillStyle=`rgba(239,83,80,0.10)`,e.fillRect(0,0,s,u),e.fillStyle=`rgba(38,166,154,0.10)`,e.fillRect(0,d,s,i-d),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[100,0,-100]){let r=n.yToPixel(t,l,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value===null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Ho=class{constructor(e=14,t=`#ff7043`){this.period=e,this.name=`%R`,this.pane=`sub`,this.paneHeight=80,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null};let r=-1/0,i=1/0;for(let t=n-this.period+1;t<=n;t++)e[t].high>r&&(r=e[t].high),e[t].low<i&&(i=e[t].low);let a=r-i;return{index:n,value:a===0?-50:(r-e[n].close)/a*-100}})}getValueRange(e){return{min:-100,max:0}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:-100,max:0}:a,l=n.yToPixel(-20,c,i),u=n.yToPixel(-80,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[-20,-50,-80]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}},Uo=class{constructor(e=12,t=`#80cbc4`,n=`close`){this.period=e,this.source=n,this.pane=`sub`,this.paneHeight=80,this.name=`ROC`,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period)return{index:n,value:null};let r=X(e[n-this.period],this.source);return r===0?{index:n,value:null}:{index:n,value:(X(e[n],this.source)-r)/r*100}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value)));return{min:-t*1.3,max:t*1.3}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value)));let l=a==null?{min:-c*1.3,max:c*1.3}:a,u=n.yToPixel(0,l,i),d=[];for(let e of t)e.value!=null&&d.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,l,i),value:e.value});if(d.length>=2){e.beginPath(),e.moveTo(d[0].x,u);for(let t of d)e.lineTo(t.x,Math.min(t.y,u));e.lineTo(d[d.length-1].x,u),e.closePath(),e.fillStyle=`rgba(38,166,154,0.05)`,e.fill(),e.beginPath(),e.moveTo(d[0].x,u);for(let t of d)e.lineTo(t.x,Math.max(t.y,u));e.lineTo(d[d.length-1].x,u),e.closePath(),e.fillStyle=`rgba(239,83,80,0.05)`,e.fill()}e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,u),e.lineTo(s,u),e.stroke(),e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value===null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Wo=class{constructor(e=`#aed581`){this.name=`OBV`,this.pane=`sub`,this.paneHeight=80,this.color=e}compute(e){let t=[],n=0;for(let o=0;o<e.length;o++){if(o===0){var r;n=(r=e[o].volume)==null?0:r}else if(e[o].close>e[o-1].close){var i;n+=(i=e[o].volume)==null?0:i}else if(e[o].close<e[o-1].close){var a;n-=(a=e[o].volume)==null?0:a}t.push({index:o,value:n})}return t}getValueRange(e){let t=1/0,n=-1/0;for(let r of e)r.value!=null&&(r.value<t&&(t=r.value),r.value>n&&(n=r.value));if(t===1/0)return{min:0,max:1};let r=(n-t)*.1||1;return{min:t-r,max:n+r}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1/0,l=-1/0;for(let e of t)e.value!=null&&(e.value<c&&(c=e.value),e.value>l&&(l=e.value));if(c===1/0)return;let u=(l-c)*.1||1,d=a==null?{min:c-u,max:l+u}:a,f=n.yToPixel(0,d,i),p=[];for(let e of t)e.value!=null&&p.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,d,i),value:e.value});if(p.length===0)return;if(e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,f),e.lineTo(s,f),e.stroke(),e.setLineDash([]),e.restore(),p.length>=2){e.beginPath(),e.moveTo(p[0].x,f);for(let t of p)e.lineTo(t.x,t.y);e.lineTo(p[p.length-1].x,f),e.closePath(),e.fillStyle=p[p.length-1].value>=0?`rgba(38,166,154,0.12)`:`rgba(239,83,80,0.12)`,e.fill()}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let m=!1;for(let a of t){if(a.value==null){m=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,d,i);m?e.lineTo(t,o):(e.moveTo(t,o),m=!0)}e.stroke()}},Go=class{constructor(e=`#9c27b0`){this.name=`VWAP`,this.color=e}compute(e){let t=[],n=0,r=0;for(let o=0;o<e.length;o++){var i,a;let s=e[o],c=(s.high+s.low+s.close)/3;n+=c*((i=s.volume)==null?0:i),r+=(a=s.volume)==null?0:a,t.push({index:o,value:r===0?null:n/r})}return t}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`,e.setLineDash([4,3]);let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke(),e.setLineDash([])}},Ko=class{constructor(e=`#ce93d8`){this.name=`A/D`,this.pane=`sub`,this.paneHeight=80,this.color=e}compute(e){let t=[],n=0;for(let r=0;r<e.length;r++){let{high:i,low:a,close:o,volume:s}=e[r],c=i-a,l=c===0?0:(o-a-(i-o))/c;n+=l*(s==null?0:s),t.push({index:r,value:n})}return t}getValueRange(e){let t=1/0,n=-1/0;for(let r of e)r.value!=null&&(r.value<t&&(t=r.value),r.value>n&&(n=r.value));if(t===1/0)return{min:0,max:1};let r=(n-t)*.1||1;return{min:t-r,max:n+r}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1/0,l=-1/0;for(let e of t)e.value!=null&&(e.value<c&&(c=e.value),e.value>l&&(l=e.value));if(c===1/0)return;let u=(l-c)*.1||1,d=a==null?{min:c-u,max:l+u}:a,f=[];for(let e of t)e.value!=null&&f.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,d,i)});if(f.length===0)return;if(f.length>=2){let t=i;e.beginPath(),e.moveTo(f[0].x,t);for(let t of f)e.lineTo(t.x,t.y);e.lineTo(f[f.length-1].x,t),e.closePath(),e.fillStyle=this.color+`20`,e.fill()}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let p=!1;for(let a of t){if(a.value==null){p=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,d,i);p?e.lineTo(t,o):(e.moveTo(t,o),p=!0)}e.stroke()}},qo=class{constructor(e=14,t=`#ffab40`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=`MFI`,this.color=t}compute(e){let t=[],n=e.map(e=>(e.high+e.low+e.close)/3),r=e.map((e,t)=>{var r;return n[t]*((r=e.volume)==null?0:r)});for(let i=0;i<e.length;i++){if(i<this.period){t.push({index:i,value:null});continue}let e=0,a=0;for(let t=i-this.period+1;t<=i;t++)n[t]>n[t-1]?e+=r[t]:n[t]<n[t-1]&&(a+=r[t]);if(a===0)t.push({index:i,value:100});else{let n=e/a;t.push({index:i,value:100-100/(1+n)})}}return t}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(80,c,i),u=n.yToPixel(20,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[80,50,20]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}},Jo=class{constructor(e=20,t=`#80deea`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=`CMF`,this.color=t}compute(e){let t=e.map(e=>{var t;let n=e.high-e.low;return(n===0?0:(e.close-e.low-(e.high-e.close))/n)*((t=e.volume)==null?0:t)});return e.map((n,r)=>{if(r<this.period-1)return{index:r,value:null};let i=0,a=0;for(let n=r-this.period+1;n<=r;n++){var o;i+=t[n],a+=(o=e[n].volume)==null?0:o}return{index:r,value:a===0?0:i/a}})}getValueRange(e){return{min:-1,max:1}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:-1,max:1}:a,l=n.yToPixel(0,c,i),u=n.yToPixel(.2,c,i),d=n.yToPixel(-.2,c,i);e.fillStyle=`rgba(38,166,154,0.08)`,e.fillRect(0,0,s,u),e.fillStyle=`rgba(239,83,80,0.08)`,e.fillRect(0,d,s,i-d),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[.2,0,-.2]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore();let f=Math.max(1,s/Math.max(t.length,1)*.6);for(let a of t){if(a.value==null)continue;let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i),u=Math.abs(o-l),d=Math.min(o,l);e.fillStyle=a.value>=0?`rgba(38,166,154,0.45)`:`rgba(239,83,80,0.45)`,e.fillRect(t-f/2,d,f,u)}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let p=!1;for(let a of t){if(a.value===null){p=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);p?e.lineTo(t,o):(e.moveTo(t,o),p=!0)}e.stroke()}},Yo=class{constructor(e=`#ffd54f`){this.name=`Pivot`,this.color=e}compute(e){return e.map((t,n)=>{if(n===0)return{index:n,value:null,upper:null,lower:null,signal:null,histogram:null};let r=e[n-1],i=(r.high+r.low+r.close)/3;return{index:n,value:i,upper:2*i-r.low,lower:2*i-r.high,signal:i+(r.high-r.low),histogram:i-(r.high-r.low)}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a,l=null;for(let e=t.length-1;e>=0;e--)if(t[e].value!==null){l=t[e];break}if(l===null)return;let u=[{value:l.signal,label:`R2`,color:`#b71c1c`},{value:l.upper,label:`R1`,color:`#ef5350`},{value:l.value,label:`PP`,color:`#ffd54f`},{value:l.lower,label:`S1`,color:`#26a69a`},{value:l.histogram,label:`S2`,color:`#1b5e20`}];e.lineWidth=1,e.font=`10px sans-serif`,e.textBaseline=`middle`;for(let t of u){if(t.value==null)continue;let r=n.yToPixel(t.value,s,i);e.beginPath(),e.setLineDash([6,4]),e.strokeStyle=t.color,e.moveTo(0,r),e.lineTo(c,r),e.stroke(),e.setLineDash([]),e.fillStyle=t.color,e.fillText(t.label,c-28,r-6)}}},Xo=[0,.236,.382,.5,.618,.786,1],Zo=[`0%`,`23.6%`,`38.2%`,`50%`,`61.8%`,`78.6%`,`100%`],Qo=[`#90a4ae`,`#4d96ff`,`#6bcb77`,`#ffd93d`,`#ff9800`,`#ef5350`,`#90a4ae`],$o=class{constructor(e=50,t=`#e1bee7`){this.lookback=e,this.name=`Fib`,this.color=t}compute(e){return e.map((t,n)=>{let r=Math.max(0,n-this.lookback+1),i=-1/0,a=1/0;for(let t=r;t<=n;t++)e[t].high>i&&(i=e[t].high),e[t].low<a&&(a=e[t].low);let o=i-a;return{index:n,value:i,upper:a+.618*o,lower:a+.382*o,signal:a+.5*o,histogram:a}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a,l=null;for(let e=t.length-1;e>=0;e--)if(t[e].value!==null){l=t[e];break}if(l===null)return;let u=l.value,d=l.histogram;if(u==null||d==null)return;let f=u-d,p=Xo.map(e=>d+e*f);e.lineWidth=1,e.font=`10px sans-serif`,e.textBaseline=`middle`;for(let t=0;t<Xo.length;t++){let r=p[t],a=n.yToPixel(r,s,i),o=Qo[t];e.beginPath(),e.setLineDash([6,4]),e.strokeStyle=o,e.moveTo(0,a),e.lineTo(c,a),e.stroke(),e.setLineDash([]),e.fillStyle=o,e.fillText(Zo[t],c-38,a-6)}}},es=class{constructor(e=10,t=3,n=`#26a69a`){this.atrPeriod=e,this.multiplier=t,this.name=`Supertrend`,this.color=n}compute(e){let t=e.length,n=[];if(t===0)return n;let r=Array(t).fill(0);for(let n=0;n<t;n++){let t=e[n].high,i=e[n].low,a=n>0?e[n-1].close:e[n].close;r[n]=Math.max(t-i,Math.abs(t-a),Math.abs(i-a))}let i=Array(t).fill(0);if(t<this.atrPeriod){for(let e=0;e<t;e++)n.push({index:e,value:null,upper:null});return n}let a=0;for(let e=0;e<this.atrPeriod;e++)a+=r[e];i[this.atrPeriod-1]=a/this.atrPeriod;for(let e=this.atrPeriod;e<t;e++)i[e]=(i[e-1]*(this.atrPeriod-1)+r[e])/this.atrPeriod;let o=Array(t).fill(0),s=Array(t).fill(0),c=Array(t).fill(1);for(let r=0;r<t;r++){if(r<this.atrPeriod-1){n.push({index:r,value:null,upper:null});continue}let t=(e[r].high+e[r].low)/2,a=t+this.multiplier*i[r],l=t-this.multiplier*i[r];if(r===this.atrPeriod-1){o[r]=a,s[r]=l,c[r]=1,n.push({index:r,value:s[r],upper:1});continue}let u=e[r-1].close;o[r]=a<o[r-1]||u>o[r-1]?a:o[r-1],s[r]=l>s[r-1]||u<s[r-1]?l:s[r-1],c[r-1]===-1?c[r]=e[r].close>o[r]?1:-1:c[r]=e[r].close<s[r]?-1:1;let d=c[r]===1?s[r]:o[r];n.push({index:r,value:d,upper:c[r]})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=2,e.lineJoin=`round`;let l=null;e.beginPath(),e.strokeStyle=`#26a69a`;let u=!1;for(let a of t){if(a.value==null||a.upper==null){u=!1;continue}if(!(a.upper>=0)){u=!1;continue}l!==1&&(u=!1);let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);u?e.lineTo(t,o):(e.moveTo(t,o),u=!0),l=1}e.stroke(),e.beginPath(),e.strokeStyle=`#ef5350`;let d=!1;l=null;for(let a of t){if(a.value==null||a.upper==null){d=!1;continue}if(!(a.upper<0)){d=!1;continue}l!==-1&&(d=!1);let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0),l=-1}e.stroke()}},ts=class{constructor(e=.02,t=.2,n=`#ff6b9d`){this.step=e,this.maxAF=t,this.name=`PSAR`,this.color=n}compute(e){let t=e.length,n=[];if(t<2){for(let e=0;e<t;e++)n.push({index:e,value:null,upper:null});return n}let r=!0,i=this.step,a=e[0].high,o=e[0].low;n.push({index:0,value:null,upper:null});for(let s=1;s<t;s++){let t=o+i*(a-o);if(r){let n=e[s-1].low,o=s>=2?e[s-2].low:e[s-1].low;t=Math.min(t,n,o),t>e[s].low?(r=!1,t=a,a=e[s].low,i=this.step):e[s].high>a&&(a=e[s].high,i=Math.min(i+this.step,this.maxAF))}else{let n=e[s-1].high,o=s>=2?e[s-2].high:e[s-1].high;t=Math.max(t,n,o),t<e[s].high?(r=!0,t=a,a=e[s].high,i=this.step):e[s].low<a&&(a=e[s].low,i=Math.min(i+this.step,this.maxAF))}o=t,n.push({index:s,value:o,upper:r?1:-1})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;for(let a of t){if(a.value==null||a.upper==null)continue;let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);e.beginPath(),e.arc(t,o,2,0,Math.PI*2),e.fillStyle=a.upper>=0?`#26a69a`:`#ef5350`,e.fill()}}};function ns(e,t,n){if(t<n-1)return null;let r=-1/0,i=1/0;for(let a=t-n+1;a<=t;a++)e[a].high>r&&(r=e[a].high),e[a].low<i&&(i=e[a].low);return{high:r,low:i}}var rs=class{constructor(e=9,t=26,n=52,r=`#b0bec5`){this.tenkanPeriod=e,this.kijunPeriod=t,this.senkouBPeriod=n,this.name=`Ichimoku`,this.color=r}compute(e){return e.map((t,n)=>{let r=ns(e,n,this.tenkanPeriod),i=r===null?null:(r.high+r.low)/2,a=ns(e,n,this.kijunPeriod),o=a===null?null:(a.high+a.low)/2,s=i!==null&&o!==null?(i+o)/2:null,c=ns(e,n,this.senkouBPeriod);return{index:n,value:i,upper:o,lower:s,signal:c===null?null:(c.high+c.low)/2,histogram:t.close}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=(a,o,l=!1)=>{e.strokeStyle=o,l&&e.setLineDash([4,3]),e.beginPath();let u=!1;for(let o of t){let t=a(o);if(t==null){u=!1;continue}let l=n.xToPixel(o.index,r,c),d=n.yToPixel(t,s,i);u?e.lineTo(l,d):(e.moveTo(l,d),u=!0)}e.stroke(),l&&e.setLineDash([])},u=[],d=[];for(let e of t){if(e.lower==null||e.signal==null)continue;let t=n.xToPixel(e.index,r,c);u.push([t,n.yToPixel(e.lower,s,i)]),d.push([t,n.yToPixel(e.signal,s,i)])}for(let t=0;t+1<u.length;t++){let[n,r]=u[t],[i,a]=u[t+1],[,o]=d[t],[,s]=d[t+1],c=r<o;e.beginPath(),e.moveTo(n,r),e.lineTo(i,a),e.lineTo(i,s),e.lineTo(n,o),e.closePath(),e.fillStyle=c?`rgba(38, 166, 154, 0.15)`:`rgba(239, 83, 80, 0.15)`,e.fill()}l(e=>e.lower,`#26a69a`,!0),l(e=>e.signal,`#ef5350`,!0),l(e=>e.value,`#ef9a9a`),l(e=>e.upper,`#90caf9`),e.strokeStyle=`#b0bec5`,e.beginPath();let f=!1;for(let a of t){if(a.histogram==null){f=!1;continue}let t=a.index-this.kijunPeriod;if(t<0){f=!1;continue}let o=n.xToPixel(t,r,c),l=n.yToPixel(a.histogram,s,i);f?e.lineTo(o,l):(e.moveTo(o,l),f=!0)}e.stroke()}},is=class{constructor(e=14,t=`#fff176`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=`ADX`,this.color=t}compute(e){let t=e.length;if(t<this.period+1)return e.map((e,t)=>({index:t,value:null,upper:null,lower:null}));let n=Array(t).fill(0),r=Array(t).fill(0),i=Array(t).fill(0);n[0]=e[0].high-e[0].low,r[0]=0,i[0]=0;for(let a=1;a<t;a++){let t=e[a-1].close,o=e[a-1].high,s=e[a-1].low,c=e[a].high,l=e[a].low;n[a]=Math.max(c-l,Math.abs(c-t),Math.abs(l-t));let u=c-o,d=s-l;r[a]=u>d&&u>0?u:0,i[a]=d>u&&d>0?d:0}let a=0,o=0,s=0;for(let e=0;e<this.period;e++)a+=n[e],o+=r[e],s+=i[e];let c=[];for(let e=0;e<this.period;e++)c.push({index:e,value:null,upper:null,lower:null});let l=Array(t).fill(0),u=Array(t).fill(0),d=Array(t).fill(0),f=a===0?0:100*o/a,p=a===0?0:100*s/a,m=f+p===0?0:100*Math.abs(f-p)/(f+p);l[this.period-1]=f,u[this.period-1]=p,d[this.period-1]=m,c[this.period-1]={index:this.period-1,value:null,upper:f,lower:p};for(let e=this.period;e<t;e++){a=a-a/this.period+n[e],o=o-o/this.period+r[e],s=s-s/this.period+i[e];let t=a===0?0:100*o/a,f=a===0?0:100*s/a,p=t+f===0?0:100*Math.abs(t-f)/(t+f);l[e]=t,u[e]=f,d[e]=p,c.push({index:e,value:null,upper:t,lower:f})}let h=2*this.period-2;if(h>=t)return c;let g=0;for(let e=this.period-1;e<=h;e++)g+=d[e];g/=this.period,c[h].value=g;for(let e=h+1;e<t;e++)g=(g*(this.period-1)+d[e])/this.period,c[e].value=g;return c}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a;e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;let l=n.yToPixel(25,c,i);e.beginPath(),e.moveTo(0,l),e.lineTo(s,l),e.stroke(),e.setLineDash([]),e.restore();let u=(a,o,l)=>{e.beginPath(),e.strokeStyle=o,e.lineWidth=l,e.lineJoin=`round`;let u=!1;for(let o of t){let t=a(o);if(t==null){u=!1;continue}let l=n.xToPixel(o.index,r,s),d=n.yToPixel(t,c,i);u?e.lineTo(l,d):(e.moveTo(l,d),u=!0)}e.stroke()};u(e=>e.upper,`#26a69a`,1),u(e=>e.lower,`#ef5350`,1),u(e=>e.value,this.color,1.5)}},as=class{constructor(e=5,t=34,n=`#b0bec5`){this.fastPeriod=e,this.slowPeriod=t,this.name=`AO`,this.pane=`sub`,this.paneHeight=80,this.color=n}compute(e){let t=e.map(e=>(e.high+e.low)/2),n=(e,t,n)=>{if(t<n-1)return null;let r=0;for(let i=t-n+1;i<=t;i++)r+=e[i];return r/n};return e.map((e,r)=>{let i=n(t,r,this.fastPeriod),a=n(t,r,this.slowPeriod);return i===null||a===null?{index:r,value:null}:{index:r,value:i-a}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value)));return{min:-t*1.2,max:t*1.2}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value)));let l=a==null?{min:-c*1.2,max:c*1.2}:a,u=n.yToPixel(0,l,i);e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,u),e.lineTo(s,u),e.stroke(),e.setLineDash([]),e.restore();let d=Math.max(n.candleBodyWidth(r,s),1),f=null;for(let a of t){if(a.value==null){f=null;continue}let t=f===null?!0:a.value>=f,o=n.xToPixel(a.index,r,s),c=n.yToPixel(a.value,l,i),p=Math.abs(c-u),m=Math.min(c,u);e.fillStyle=t?`rgba(38,166,154,0.70)`:`rgba(239,83,80,0.70)`,e.fillRect(o-d/2,m,d,p),f=a.value}}},os=class{constructor(e=`#90a4ae`,t=`#26a69a`,n=`#ef5350`){this.name=`HA`,this.color=e,this.upColor=t,this.downColor=n}compute(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i],o=(a.open+a.high+a.low+a.close)/4,s;s=i===0?(a.open+a.close)/2:(n+r)/2;let c=Math.max(a.high,s,o),l=Math.min(a.low,s,o);n=s,r=o,t.push({index:i,value:o,upper:c,lower:l,signal:s})}return t}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a,l=n.candleBodyWidth(r,c),u=l/2;for(let a of t){if(a.value==null||a.upper==null||a.lower==null||a.signal==null)continue;let t=a.value,o=a.upper,d=a.lower,f=a.signal,p=t>=f?this.upColor:this.downColor,m=n.xToPixel(a.index,r,c),h=n.yToPixel(o,s,i),g=n.yToPixel(d,s,i),_=n.yToPixel(f,s,i),v=n.yToPixel(t,s,i),y=Math.min(_,v),b=Math.max(1,Math.max(_,v)-y);e.beginPath(),e.strokeStyle=p,e.lineWidth=1,e.moveTo(m,h),e.lineTo(m,g),e.stroke(),e.fillStyle=p,e.strokeStyle=p,e.lineWidth=1,e.fillRect(m-u,y,l,b),e.strokeRect(m-u,y,l,b)}}},ss=class{constructor(e=`#26a69a`,t=`#ef5350`){this.name=`VOL`,this.pane=`sub`,this.paneHeight=80,this.upColor=e,this.downColor=t,this.color=e}compute(e){return e.map((e,t)=>{var n;return{index:t,value:(n=e.volume)==null?0:n,signal:e.close>=e.open?1:0}})}render(e,t,n,r,i){var a;let o=(a=e.canvas._chartWidth)==null?e.canvas.width:a,s=0;for(let e of t)e.value!=null&&e.value>s&&(s=e.value);if(s===0)return;let c={min:0,max:s*1.1},l=n.yToPixel(0,c,i),u=Math.max(n.candleBodyWidth(r,o),1);for(let a of t){if(a.value==null||a.value===0)continue;let t=n.xToPixel(a.index,r,o),s=n.yToPixel(a.value,c,i),d=Math.abs(l-s);e.fillStyle=a.signal===1?`${this.upColor}99`:`${this.downColor}99`,e.fillRect(t-u/2,s,u,d)}e.fillStyle=this.upColor,e.font=`10px 'Inter', system-ui, sans-serif`,e.fillText(this.name,4,11)}},cs=class{constructor(e=14,t=`#ff9800`){this.period=e,this.name=`LinReg`,this.color=t}compute(e){let t=this.period,n=[],r=t*(t-1)/2,i=t*(t*(t-1)*(2*t-1)/6)-r*r;for(let a=0;a<e.length;a++){if(a<t-1){n.push({index:a,value:null});continue}let o=0,s=0;for(let n=0;n<t;n++){let r=e[a-(t-1-n)].close;o+=r,s+=n*r}let c=(t*s-r*o)/i,l=(o-c*r)/t+c*(t-1);n.push({index:a,value:l})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke()}},ls=[{name:`Moving Average`,short_name:`MA`,type:`Trend`,enabled:!0},{name:`Exponential Moving Average`,short_name:`EMA`,type:`Trend`,enabled:!0},{name:`Weighted Moving Average`,short_name:`WMA`,type:`Trend`,enabled:!0},{name:`Hull Moving Average`,short_name:`HMA`,type:`Trend`,enabled:!0},{name:`Moving Average Ribbon`,short_name:`MARibbon`,type:`Trend`,enabled:!0},{name:`Bollinger Bands`,short_name:`BB`,type:`Volatility`,enabled:!0},{name:`Keltner Channels`,short_name:`KC`,type:`Volatility`,enabled:!0},{name:`Donchian Channels`,short_name:`DC`,type:`Volatility`,enabled:!0},{name:`Average True Range`,short_name:`ATR`,type:`Volatility`,enabled:!0},{name:`Relative Strength Index`,short_name:`RSI`,type:`Momentum`,enabled:!0},{name:`Stochastic Oscillator`,short_name:`Stoch`,type:`Momentum`,enabled:!0},{name:`Stochastic RSI`,short_name:`StochRSI`,type:`Momentum`,enabled:!0},{name:`MACD`,short_name:`MACD`,type:`Momentum`,enabled:!0},{name:`Commodity Channel Index`,short_name:`CCI`,type:`Momentum`,enabled:!0},{name:`Williams %R`,short_name:`%R`,type:`Momentum`,enabled:!0},{name:`Rate of Change`,short_name:`ROC`,type:`Momentum`,enabled:!0},{name:`On Balance Volume`,short_name:`OBV`,type:`Volume`,enabled:!0},{name:`Volume`,short_name:`VOL`,type:`Volume`,enabled:!0},{name:`Volume Weighted Average Price`,short_name:`VWAP`,type:`Volume`,enabled:!0},{name:`Accumulation/Distribution`,short_name:`A/D`,type:`Volume`,enabled:!0},{name:`Money Flow Index`,short_name:`MFI`,type:`Volume`,enabled:!0},{name:`Chaikin Money Flow`,short_name:`CMF`,type:`Volume`,enabled:!0},{name:`Pivot Points Standard`,short_name:`Pivot`,type:`Support/Resistance`,enabled:!0},{name:`Fibonacci Retracement`,short_name:`Fib`,type:`Support/Resistance`,enabled:!0},{name:`Supertrend`,short_name:`Supertrend`,type:`Trend`,enabled:!0},{name:`Parabolic SAR`,short_name:`PSAR`,type:`Trend`,enabled:!0},{name:`Ichimoku Cloud`,short_name:`Ichimoku`,type:`Trend`,enabled:!0},{name:`ADX`,short_name:`ADX`,type:`Trend Strength`,enabled:!0},{name:`Awesome Oscillator`,short_name:`AO`,type:`Momentum`,enabled:!0},{name:`Heikin Ashi`,short_name:`HA`,type:`Price Transformation`,enabled:!1},{name:`Linear Regression`,short_name:`LinReg`,type:`Trend`,enabled:!0}];function us(e,t){if(e.length===0||t<=0)return e;let n=new Map;for(let r of e){let e=Math.floor(r.time/t)*t,i=n.get(e);i?i.push(r):n.set(e,[r])}let r=[];for(let[e,t]of n){let n=t[0].high,a=t[0].low,o=0;for(let e of t){var i;e.high>n&&(n=e.high),e.low<a&&(a=e.low),o+=(i=e.volume)==null?0:i}r.push({time:e,open:t[0].open,high:n,low:a,close:t[t.length-1].close,volume:o})}return r.sort((e,t)=>e.time-t.time),r}var ds,fs=[{shortName:`MA`,factory:()=>new So(20)},{shortName:`EMA`,factory:()=>new wo(20)},{shortName:`WMA`,factory:()=>new To(20)},{shortName:`HMA`,factory:()=>new Do(20)},{shortName:`MARibbon`,factory:()=>new Ao},{shortName:`BB`,factory:()=>new jo(20,2)},{shortName:`KC`,factory:()=>new Mo(20,2)},{shortName:`DC`,factory:()=>new No(20)},{shortName:`ATR`,factory:()=>new Po(14)},{shortName:`RSI`,factory:()=>new Fo(14)},{shortName:`Stoch`,factory:()=>new Io(14,3)},{shortName:`StochRSI`,factory:()=>new Ro(14,14,3,3)},{shortName:`MACD`,factory:()=>new Bo(12,26,9)},{shortName:`CCI`,factory:()=>new Vo(20)},{shortName:`%R`,factory:()=>new Ho(14)},{shortName:`ROC`,factory:()=>new Uo(12)},{shortName:`AO`,factory:()=>new as},{shortName:`OBV`,factory:()=>new Wo},{shortName:`VWAP`,factory:()=>new Go},{shortName:`A/D`,factory:()=>new Ko},{shortName:`MFI`,factory:()=>new qo(14)},{shortName:`CMF`,factory:()=>new Jo(20)},{shortName:`Pivot`,factory:()=>new Yo},{shortName:`Fib`,factory:()=>new $o(50)},{shortName:`Supertrend`,factory:()=>new es(10,3)},{shortName:`PSAR`,factory:()=>new ts(.02,.2)},{shortName:`Ichimoku`,factory:()=>new rs(9,26,52)},{shortName:`ADX`,factory:()=>new is(14)},{shortName:`HA`,factory:()=>new os},{shortName:`VOL`,factory:()=>new ss},{shortName:`LinReg`,factory:()=>new cs(14)}],ps={kind:`select`,key:`timeframe`,label:`Timeframe`,options:[`Chart`,`1m`,`5m`,`15m`,`30m`,`1h`,`4h`,`1D`,`1W`,`1M`,`1Y`],default:`Chart`};function ms(e,t,n){if(!n)return e;let r=n.fields.filter(e=>e.kind===`number`).map(e=>{var n;return(n=t[e.key])==null?e.default:n});return r.length>0?`${e}(${r.join(`, `)})`:e}var hs=[{shortName:`MA`,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`}],factory:e=>new So(e.period,e.color,`MA`,e.source)},{shortName:`EMA`,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`}],factory:e=>new wo(e.period,e.color,`EMA`,e.source)},{shortName:`WMA`,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`}],factory:e=>new To(e.period,e.color,`WMA`,e.source)},{shortName:`HMA`,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`}],factory:e=>new Do(e.period,e.color,`HMA`,e.source)},{shortName:`MARibbon`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ffcc80`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}],factory:e=>new Ao(e.color,e.source)},{shortName:`BB`,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`}],factory:e=>new jo(e.period,e.stdDev,e.color,`BB`,e.source)},{shortName:`KC`,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`}],factory:e=>new Mo(e.period,e.mult,e.atrPeriod,e.color)},{shortName:`DC`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#26c6da`}],factory:e=>new No(e.period,e.color)},{shortName:`ATR`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff5722`}],factory:e=>new Po(e.period,e.color)},{shortName:`RSI`,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`}],factory:e=>new Fo(e.period,e.color,`RSI`,e.source)},{shortName:`Stoch`,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`}],factory:e=>new Io(e.kPeriod,e.dPeriod,e.color)},{shortName:`StochRSI`,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`}],factory:e=>new Ro(e.rsiPeriod,e.stochPeriod,e.kPeriod,e.dPeriod,e.color)},{shortName:`MACD`,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`}],factory:e=>new Bo(e.fast,e.slow,e.signal,e.color,`MACD`,e.source)},{shortName:`CCI`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#4db6ac`}],factory:e=>new Vo(e.period,e.color)},{shortName:`%R`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff7043`}],factory:e=>new Ho(e.period,e.color)},{shortName:`ROC`,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`}],factory:e=>new Uo(e.period,e.color,e.source)},{shortName:`AO`,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`}],factory:e=>new as(e.fastPeriod,e.slowPeriod,e.color)},{shortName:`OBV`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#aed581`}],factory:e=>new Wo(e.color)},{shortName:`VWAP`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#9c27b0`}],factory:e=>new Go(e.color)},{shortName:`A/D`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ce93d8`}],factory:e=>new Ko(e.color)},{shortName:`MFI`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ffab40`}],factory:e=>new qo(e.period,e.color)},{shortName:`CMF`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#80deea`}],factory:e=>new Jo(e.period,e.color)},{shortName:`Pivot`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ffd54f`}],factory:e=>new Yo(e.color)},{shortName:`Fib`,fields:[{kind:`number`,key:`lookback`,label:`Lookback`,min:1,max:500,step:1,default:50},{kind:`color`,key:`color`,label:`Color`,default:`#e1bee7`}],factory:e=>new $o(e.lookback,e.color)},{shortName:`Supertrend`,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`}],factory:e=>new es(e.atrPeriod,e.multiplier,e.color)},{shortName:`PSAR`,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`}],factory:e=>new ts(e.step,e.maxAF,e.color)},{shortName:`Ichimoku`,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`}],factory:e=>new rs(e.tenkan,e.kijun,e.senkouB,e.color)},{shortName:`ADX`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#fff176`}],factory:e=>new is(e.period,e.color)},{shortName:`HA`,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`}],factory:e=>new os(e.color,e.upColor,e.downColor)},{shortName:`VOL`,fields:[{kind:`color`,key:`upColor`,label:`Up Color`,default:`#26a69a`},{kind:`color`,key:`downColor`,label:`Down Color`,default:`#ef5350`}],factory:e=>new ss(e.upColor,e.downColor)},{shortName:`LinReg`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff9800`}],factory:e=>new cs(e.period,e.color)}],gs=70,_s=24,vs=.18,ys=80,Z=1,bs=80,xs=10,Ss=.25,Cs=.2;function ws(){return typeof window<`u`&&(`ontouchstart`in window||navigator.maxTouchPoints>1)}function Ts(e=2,t=!1,n=bs,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&&!ws()?n:r===void 0?Math.max(10,Math.round(n/e)):r}var Es=4;function Ds(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 Os(e){let t=e.max-e.min;return t>=100?0:t>=10?1:t>=1?2:t>=.1?3:4}var ks=class n{get indicators(){return this.activeIndicators.filter(e=>{if(!e.visible)return!1;let t=e.currentParams.timeframe;return!(t&&t!==`Chart`&&t!==this.timeframe)}).map(e=>e.indicator)}get isFullscreen(){return this._isCssFullscreen||!!document.fullscreenElement}constructor(o){var l,u,d,f,p,m,h,g,_,y,x,C;if(this.topBar=null,this.bottomBar=null,this.leftBar=null,this.leftBarVisible=!0,this.drawingToolsEnabled=!0,this._mobileLayout=!1,this.indicatorOverlay=null,this.subPaneOverlays=new Map,this.isinPickerModal=null,this.isins=[],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.indicatorSettingsDialog=null,this.chartSettingsDialog=null,this.tradeButton=null,this.tradePopover=null,this.draftOrderLabel=null,this.draftOrderQtyInput=null,this._hoverBuyType=`limit`,this._hoverSellType=`limit`,this._onOrderSubmit=void 0,this._minLots=1,this.scrollToEndBtn=null,this.scrollToEndVisible=!1,this.scrollAnimId=null,this.resetViewBtn=null,this.dataStore=new t,this.scaleManager=new r,this.emitter=new i,this.themeName=`dark`,this._debug=!1,this.symbol=``,this.showBidAskLines=!1,this.showActLogo=!1,this.activeIndicators=[],this.indicatorResults=new Map,this.viewport={startIndex:0,endIndex:Ts(),candleWidth:8,candleGap:2},this._targetViewport={startIndex:0,endIndex:Ts(),candleWidth:8,candleGap:2},this._isPanning=!1,this.crosshair=null,this.drawingManager=new co,this.textInputEl=null,this.textInputDrawing=null,this._pendingDrawDrag=null,this._pendingDrawResize=null,this.paneHeightOverrides=new Map,this.separatorDrag=null,this.priceAxisWidth=gs,this.timeAxisHeight=_s,this.priceScaleFactor=1,this.pricePanOffset=0,this._displayedPriceRange=null,this._lockedAutoFitBase=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.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.settingsCanvasColors={},this.streamAdapter=null,this.liveBidAsk=null,this.tickClosePriceSource=`bid`,this.levels=[],this.tradeLevelHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeLevelDragAreas=[],this.tradeLevelConfirmAreas=[],this.tradeAddBracketAreas=[],this.hoveredTradeLabel=null,this.selectedTradeLabel=null,this.tradeDragHandler=null,this.tradeDragNewPrice=null,this._pendingBracketOrderLabel=null,this._isBracketNew=!1,this.pendingLevelDrags=new Map,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.maxCandles=200,this.defaultVisibleBars=bs,this.defaultMobileVisibleBars=void 0,this.mobileBarDivisor=2,this.explicitMobileDivisor=!1,this._autoVisibleBars=!0,this.targetCandleWidth=xs,this.maxSubPanes=3,this.showCandleCountdown=!0,this.loadingOverlayEl=null,this.logoImage=null,this.isRestoringState=!1,this.onMouseMove=e=>{var t,r,i,a,o;if(this._mobileCrosshairActive||Date.now()-this._lastTouchTime<500)return;let s=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,c=e.clientX-s.left,l=e.clientY-s.top,{chartW:u,priceH:d}=this.getChartLayout(),f=(r=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):r,p=s.height-this.timeAxisHeight,m=c<u&&l<p,h=this.scaleManager.pixelToBarIndex(c,this.viewport,u),g=this.scaleManager.pixelToPrice(l,f,d),_=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(h))),v=(i=this.dataStore.all[_])==null?null:i;this.crosshair=m&&!((a=this.tradePopover)!=null&&a.isVisible)?{x:c,y:l,barIndex:_,price:g,bar:v}:null,this.crosshair&&this.emitter.emit(`crosshair`,this.crosshair);let y=this.positionRenderStyle===`dot`&&this.hoveredTradeLabel!==null;if(this.tradeButton){var b,x;if(m&&l>=0&&l<=d&&!((b=this.tradePopover)!=null&&b.isVisible)&&!y){this.tradeButton.setY(l),this.tradeButton.show(),this._tradeButtonClickData={price:g,y:l};let e=this.dataStore.all,t=e.length>0?e[e.length-1].close:g;this._hoverBuyType=g<t?`limit`:`stop`,this._hoverSellType=g>t?`limit`:`stop`}else (x=this.tradePopover)!=null&&x.isVisible||this.tradeButton.hide()}if(this._pendingDrawResize){let e=c-this._pendingDrawResize.startX,t=l-this._pendingDrawResize.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startResize(this._pendingDrawResize.drawing,this._pendingDrawResize.pointIndex),this._pendingDrawResize=null)}if(this._pendingDrawDrag){let e=c-this._pendingDrawDrag.startX,t=l-this._pendingDrawDrag.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startDrag(this._pendingDrawDrag.drawing,{barIndex:h,price:g}),this._pendingDrawDrag=null)}if(this.drawingManager.onMouseMove({barIndex:h,price:g}),this.axisDrag){if(this.axisDrag.axis===`price`){let e=l-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.indicatorName){let e=l-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.indicatorName,t)}else{let e=c-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-l,t=Math.max(40,Math.min(300,this.separatorDrag.startH+e));this.paneHeightOverrides.set(this.separatorDrag.indicatorName,t),this.drawCanvas.style.cursor=`ns-resize`,this.scheduleRender();return}if((o=this.tradeDragHandler)!=null&&o.active){var S;let e=this.tradeDragHandler.onMouseMove(l,this.scaleManager,f,d);if(this.tradeDragNewPrice=(S=e==null?void 0:e.newPrice)==null?null:S,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,isFullscreen:this.isFullscreen})}return}if(!this.drawingManager.getActiveTool()){var C;if(Be(c,l,this.tradeLevelHitAreas)||Ve(c,l,this.tradeLevelEditAreas)||He(c,l,this.tradeLevelConfirmAreas)){this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}if(We(c,l,this.tradeLevelDragAreas)){this.drawCanvas.style.cursor=`ns-resize`,this.scheduleRender();return}let e=Ue(c,l,this.tradeHoverAreas),t=(C=e==null?void 0:e.label)==null?null:C;if(t!==this.hoveredTradeLabel&&(this.hoveredTradeLabel=t,this.renderTradeLayer()),this.positionRenderStyle===`dot`&&t!==null){this.crosshair=null,this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}if(this.getSeparatorPositions().find(e=>Math.abs(l-e.y)<=4))this.drawCanvas.style.cursor=`ns-resize`;else if(c>=u)this.drawCanvas.style.cursor=`ns-resize`;else if(l>=p)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(c,l,this.scaleManager,this.viewport,f,u,d);if(e)this.drawCanvas.style.cursor=e.handle.cursor;else{let e=this.drawingManager.hitTest(c,l,this.scaleManager,this.viewport,f,u,d);this.drawCanvas.style.cursor=e?`move`:`default`}}}this.scheduleRender()},this.onMouseLeave=e=>{var t;if(!(this.tradeButton&&this.tradeButton.el.contains(e.relatedTarget))&&!this._mobileCrosshairActive){if(this.crosshair=null,!((t=this.tradePopover)!=null&&t.isVisible)){var n;(n=this.tradeButton)==null||n.hide()}this.hoveredTradeLabel!==null&&(this.hoveredTradeLabel=null,this.renderTradeLayer()),this.scheduleRender()}},this.onMouseUp=()=>{var e;if((e=this.tradeDragHandler)!=null&&e.active){let e=this.tradeDragHandler.endDrag();if(e){var t;this.storePendingChange(e,e.startPrice,(t=this._pendingBracketOrderLabel)==null?void 0:t)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.drawCanvas.style.cursor=`default`,this.renderTradeLayer();return}this.axisDrag&&(this.axisDrag=null,this.drawCanvas.style.cursor=`default`,this.scheduleRender()),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 n=e.touches[0],r=this.touchToDrawingPoint(n),i=this.drawingManager.getActiveTool(),a=this.drawingManager.isPlacing();if(i!==null||a){e.preventDefault(),this._lastDrawingTouchPoint=r,a?(this._drawTouchAnchorActive=!1,this.drawingManager.onMouseMove(r)):(this.drawingManager.onMouseDown(r),this._drawTouchAnchorActive=this.drawingManager.isPlacing()),this.scheduleRender();return}let o=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,s=n.clientX-o.left,c=n.clientY-o.top,{chartW:l,priceH:u}=this.getChartLayout(),d=this.getScaledPriceRange(this.viewport);if(s>=l){if(e.preventDefault(),c<=u)this.axisDrag={axis:`price`,startPos:c,startSize:this.priceScaleFactor};else{let e=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).map(e=>e.indicator),t=u+Z;for(let n of e){let e=this.paneH(n);if(c>=t&&c<t+e){var f;this.axisDrag={axis:`subpane`,startPos:c,startSize:(f=this.subPaneScaleFactors.get(n.name))==null?1:f,indicatorName:n.name};break}t+=e+Z}}this.scheduleRender();return}let p=o.height-this.timeAxisHeight;if(c>=p){e.preventDefault(),this.axisDrag={axis:`time`,startPos:s,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let m=this.drawingManager.getHandleAtPoint(s,c,this.scaleManager,this.viewport,d,l,u);if(m){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(m.drawing),this.drawingManager.startResize(m.drawing,m.handle.pointIndex),this.hideMobileDrawingFlyout(),this.scheduleRender();return}let h=this.drawingManager.hitTest(s,c,this.scaleManager,this.viewport,d,l,u);if(h){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(h),this.drawingManager.startDrag(h,r),this._drawTouchStartXY={x:n.clientX,y:n.clientY},this.hideMobileDrawingFlyout(),this.scheduleRender();return}let g=He(s,c,this.tradeLevelConfirmAreas);if(g){e.preventDefault(),g.action===`confirm`?this.applyPendingChanges(g.label):this.revertPendingChanges(g.label);return}let _=Be(s,c,this.tradeLevelHitAreas);if(_){e.preventDefault(),this._handleTradeLevelClose(_);return}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=We(s,c,this.tradeLevelDragAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);if(n){this._startTradeDragFromHit(t,n,c),this.scheduleRender();return}}let n=Ge(s,c,this.tradeAddBracketAreas);if(n){e.preventDefault(),this._startAddBracketFromHit(n,c),this.scheduleRender();return}}this.drawingManager.selectDrawing(null),this.hideMobileDrawingFlyout(),s<l&&c<p&&(this._mobileCrosshairActive?(this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null),this._mobileTapStartXY={x:s,y:c}):(this._longPressTimer!==null&&clearTimeout(this._longPressTimer),this._longPressPoint={x:s,y:c},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;if(e.touches.length!==1)return;let n=this.touchToDrawingPoint(e.touches[0]);if(this._lastDrawingTouchPoint=n,this.axisDrag){var r;e.preventDefault();let t=e.touches[0],n=(r=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():r,i=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.indicatorName){let e=a-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.indicatorName,t)}else{let e=i-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.scheduleRender();return}if(this.drawingManager.isPlacing()&&!this._drawTouchAnchorActive){e.preventDefault(),this.drawingManager.onMouseMove(n),this.scheduleRender();return}if(this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing()){e.preventDefault(),e.stopPropagation(),this.drawingManager.onMouseMove(n),this.scheduleRender();return}if((t=this.tradeDragHandler)!=null&&t.active){var i,a,o;e.preventDefault();let t=e.touches[0],n=(i=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():i,r=t.clientY-n.top,{priceH:s}=this.getChartLayout(),c=(a=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):a,l=this.tradeDragHandler.onMouseMove(r,this.scaleManager,c,s);if(this.tradeDragNewPrice=(o=l==null?void 0:l.newPrice)==null?null:o,this.renderTradeLayer(),this.tradeDragNewPrice!==null&&l){let e=l.label.indexOf(`:`),t=e===-1?l.label:l.label.slice(0,e),n=e===-1?void 0:l.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,isFullscreen:this.isFullscreen})}return}if(this._mobileTapStartXY||this._longPressTimer!==null){var s,c;let t=e.touches[0],n=(s=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():s,r=(c=this._mobileTapStartXY)==null?this._longPressPoint:c;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 l,u;e.preventDefault();let t=e.touches[0],n=(l=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():l,r=t.clientX-n.left,i=t.clientY-n.top,{chartW:a,priceH:o}=this.getChartLayout(),s=(u=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):u,c=n.height-this.timeAxisHeight;if(r<a&&i<c){var d;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)));this.crosshair={x:r,y:i,barIndex:n,price:t,bar:(d=this.dataStore.all[n])==null?null:d},this.tradeButton&&(this.tradeButton.setY(i),this.tradeButton.show()),this.scheduleRender()}}},this.onDrawingTouchEnd=e=>{var t;if(this._lastTouchTime=Date.now(),this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null),(t=this.tradeDragHandler)!=null&&t.active){let e=this.tradeDragHandler.endDrag();if(e){var n;this.storePendingChange(e,e.startPrice,(n=this._pendingBracketOrderLabel)==null?void 0:n)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.renderTradeLayer();return}if(this.axisDrag){this.axisDrag=null,this.scheduleRender();return}let r=this._drawTouchAnchorActive;if(this._drawTouchAnchorActive=!1,!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 i;this._mobileTapStartXY=null,this._mobileCrosshairActive=!1,this.crosshair=null,(i=this.tradeButton)==null||i.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=He(i,a,this.tradeLevelConfirmAreas);if(f){f.action===`confirm`?this.applyPendingChanges(f.label):this.revertPendingChanges(f.label);return}let p=Be(i,a,this.tradeLevelHitAreas);if(p){this._handleTradeLevelClose(p);return}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=We(i,a,this.tradeLevelDragAreas);if(e){let t=this.levels.find(t=>t.label===e.label);if(t){this._startTradeDragFromHit(e,t,a),this.drawCanvas.style.cursor=`ns-resize`;return}}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=Ge(i,a,this.tradeAddBracketAreas);if(e){this._startAddBracketFromHit(e,a),this.drawCanvas.style.cursor=`ns-resize`;return}}if(!this.drawingManager.getActiveTool()){let e=Ve(i,a,this.tradeLevelEditAreas);if(e){let t=this.levels.find(t=>t.label===e.label);t&&(this.selectedTradeLabel=t.label,this.renderTradeLayer(),this.emitter.emit(`tradeLevelEditOpen`,{label:t.label,type:t.type,data:t.data,price:t.price,side:t.side,stopLossPrice:t.stopLossPrice,takeProfitPrice:t.takeProfitPrice,isFullscreen:this.isFullscreen}));return}}let m=Ue(i,a,this.tradeHoverAreas);if(m){let e=this.pendingLevelDrags.has(m.label);this.selectedTradeLabel===m.label&&!e?this.selectedTradeLabel=null:this.selectedTradeLabel=m.label,this.renderTradeLayer();return}else this.selectedTradeLabel!==null&&(this.pendingLevelDrags.has(this.selectedTradeLabel)||(this.selectedTradeLabel=null,this.renderTradeLayer()));let h=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`).map(e=>e.indicator),t=s+Z;for(let n of e){let e=this.paneH(n);if(a>=t&&a<t+e){var g;this.axisDrag={axis:`subpane`,startPos:a,startSize:(g=this.subPaneScaleFactors.get(n.name))==null?1:g,indicatorName:n.name};break}t+=e+Z}}this.scheduleRender();return}if(a>=h){this.axisDrag={axis:`time`,startPos:i,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let _=this.getSeparatorPositions().find(e=>Math.abs(a-e.y)<=4);if(_){var v,y;let e=this.indicators.find(e=>e.name===_.indicatorName),t=(v=(y=this.paneHeightOverrides.get(_.indicatorName))==null?e==null?void 0:e.paneHeight:y)==null?ys:v;this.separatorDrag={indicatorName:_.indicatorName,startY:a,startH:t},this.scheduleRender();return}if(!this.drawingManager.onMouseDown({barIndex:l,price:u})){var b;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,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=(b=this.dataStore.all[d])==null?null:b;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=>{if(e.key===`Escape`&&this.pendingLevelDrags.size>0){this.revertPendingChanges(),e.preventDefault();return}let t=(e.ctrlKey||e.metaKey)&&e.key===`z`?`z`:e.key;if(this.drawingManager.onKeyDown(t)){var n;e.preventDefault(),this.hideMobileDrawingFlyout(),(n=this.leftBar)==null||n.setActiveTool(this.drawingManager.getActiveTool()),this.drawCanvas.style.cursor=this.drawingManager.getActiveTool()?`crosshair`:`default`,this.scheduleRender()}},this.onTick=e=>{let t=this.dataStore.all;if(t.length===0)return;this.liveBidAsk={bid:e.bid,ask:e.ask},this.setDotTickActive();let n=t[t.length-1],r=this.timeframeToMs(this.timeframe),i=this.tickClosePriceSource===`ask`?e.ask:e.bid;if(e.time<n.time+r){var a;let r={...n,high:Math.max(n.high,i),low:Math.min(n.low,i),close:i,volume:((a=n.volume)==null?0:a)+e.volume};t[t.length-1]=r}else{let a=n,o=Math.floor(e.time/r)*r;t.push({time:o,open:i,high:i,low:i,close:i,volume:e.volume}),this._debug&&console.warn(`[tick] → NEW candle @ ${new Date(o).toISOString()} (closed ${new Date(a.time).toISOString()}) | total bars=${t.length}`);let s=t[t.length-1];this._targetViewport.endIndex>=t.length&&(this._targetViewport={...this._targetViewport,startIndex:this._targetViewport.startIndex+1,endIndex:this._targetViewport.endIndex+1}),this.emitter.emit(`newBar`,{completedBar:a,openingBar:s,intervalMs:r}),this.correctCompletedBar(a.time,r),o>a.time+r&&this.fillTickGap(a.time,o)}this.recomputeIndicators(),this.scheduleRender()},typeof window>`u`||typeof document>`u`)throw Error(`acttrader-charts requires a browser environment`);let{container:w,theme:E=`dark`,series:D=`candlestick`,showVolume:O=!0,showUI:k=!0,timeframe:A=`1D`,duration:j=void 0,symbol:M=``,isins:ee,onIsinSelect:N,onOrderSubmit:te,dataLoader:P,durationTimeframeMap:ne,uiConfig:F,labels:I,tickActivityMs:re=3e4}=o;if(this.dataLoader=P==null?null:P,this.drawingToolsEnabled=o.showDrawingTools!==!1,this.uiConfig=v(F),this.labels=b(I),this.tickActivityMs=re,this.maxCandles=(l=o.maxCandles)==null?200:l,this.defaultVisibleBars=(u=o.defaultVisibleBars)==null?bs:u,this.defaultMobileVisibleBars=o.defaultMobileVisibleBars,this.explicitMobileDivisor=o.mobileBarDivisor!==void 0,this.mobileBarDivisor=(d=o.mobileBarDivisor)==null?2:d,this._autoVisibleBars=o.defaultVisibleBars==null&&o.defaultMobileVisibleBars==null,this.targetCandleWidth=(f=o.targetCandleWidth)==null?xs:f,this.viewport={...this.viewport,endIndex:Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)},this._targetViewport={...this.viewport},this.maxSubPanes=(p=o.maxSubPanes)==null?3:p,this.tickClosePriceSource=(m=o.tickClosePriceSource)==null?`bid`:m,this.tradesThresholdForHorizontalLine=(h=o.tradesThresholdForHorizontalLine)==null?2:h,o.positionRenderStyle===`line`||o.positionRenderStyle===`dot`)this.positionRenderStyleOverride=o.positionRenderStyle;else{let e=localStorage.getItem(this.RENDER_STYLE_LS_KEY);(e===`line`||e===`dot`)&&(this.positionRenderStyleOverride=e)}if(o.tradeDisplayFilter&&(this.tradeDisplayFilter=o.tradeDisplayFilter),o.canvasColors&&(this.settingsCanvasColors=o.canvasColors),this.recomputeRenderStyle(),this.showBidAskLines=(g=o.showBidAskLines)==null?!1:g,this.showActLogo=(_=o.showActLogo)==null?!1:_,this.showCandleCountdown=(y=o.showCandleCountdown)==null?!0:y,this.candleCountdownTimeframes=o.candleCountdownTimeframes,this._onOrderSubmit=te,this._minLots=(x=o.minLots)==null?1:x,this.themeName=E===`dark`?`dark`:`light`,this.themeOverrides=o.themeOverrides,this.aggregateFrom=o.aggregateFrom,this.theme=a(this.themeName===`dark`?s:c,(C=this.themeOverrides)==null?void 0:C[this.themeName]),this.series=D,this.showVolume=O,this.timeframe=A,this.duration=j,this.symbol=M,this.wrapper=document.createElement(`div`),Object.assign(this.wrapper.style,{display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,overflow:`hidden`,boxSizing:`border-box`}),k){let e={...kt,...ne};this.topBar=new Ot(e=>this.setSeries(e),e=>{this.timeframe=e,this.emitter.emit(`timeframeChange`,{timeframe:e}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`timeframe`)},e=>this.addIndicatorByName(e),(e,t)=>{var n,r;this.duration=e,this.timeframe=t,(n=this.topBar)==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.series,this.timeframe,null,e,this.theme,this.uiConfig.topBar,this.labels.topBar),this.topBar.setIndicatorOptions(ls.filter(e=>e.enabled).map(e=>({value:e.short_name,label:`${e.name} (${e.short_name})`,category:e.type}))),this.wrapper.appendChild(this.topBar.el)}let ie=document.createElement(`div`);Object.assign(ie.style,{display:`flex`,flex:`1`,minHeight:`0`,overflow:`hidden`,position:`relative`}),k&&this.drawingToolsEnabled&&(this.leftBar=new Pt(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.topBar)==null||e.setDrawingsBtnActive(!1)},this.theme,this.uiConfig.drawingToolbar,this.labels.drawingToolbar),ie.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`,Object.assign(this.textInputEl.style,{position:`absolute`,display:`none`,zIndex:`15`,background:`transparent`,border:`none`,borderBottom:`1px solid #2196f3`,color:`#f5f5f5`,font:`13px system-ui, sans-serif`,outline:`none`,minWidth:`60px`,padding:`0 2px`}),this.canvasWrap.appendChild(this.textInputEl),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 ae=document.createElement(`span`);if(ae.textContent=this.labels.chart.loading,Object.assign(ae.style,{color:`rgba(200,200,200,0.9)`,fontSize:`13px`,background:`rgba(0,0,0,0.45)`,padding:`4px 12px`,borderRadius:`4px`}),this.loadingOverlayEl.appendChild(ae),this.canvasWrap.appendChild(this.loadingOverlayEl),k){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`}),this.siSymbolSpan=document.createElement(`span`),Object.assign(this.siSymbolSpan.style,{color:this.theme.axisText,fontSize:`17px`,fontFamily:`'Inter', system-ui, sans-serif`,fontWeight:`700`,display:M?`inline`:`none`}),this.siSymbolSpan.textContent=M==null?``:M,N&&(ee&&(this.isins=ee),this.isinPickerModal=new bo(this.theme,N),this.getFloatingRoot().appendChild(this.isinPickerModal.el),Object.assign(this.siSymbolSpan.style,{cursor:`pointer`,textDecoration:`underline`,pointerEvents:`auto`}),this.siSymbolSpan.addEventListener(`click`,()=>{var e;this.isinPickerModal.show(this.isins,(e=this.siSymbolSpan.textContent)==null?``:e)})),this.siOHLCSpan=document.createElement(`span`),Object.assign(this.siOHLCSpan.style,{fontSize:`14px`,fontFamily:`'Inter', system-ui, sans-serif`,whiteSpace:`nowrap`}),this.siOHLC2Span=document.createElement(`span`),Object.assign(this.siOHLC2Span.style,{fontSize:`14px`,fontFamily:`'Inter', system-ui, sans-serif`,whiteSpace:`nowrap`}),this.siStreamDot=document.createElement(`span`),Object.assign(this.siStreamDot.style,{width:`7px`,height:`7px`,borderRadius:`50%`,background:this.theme.ui.stream.disconnected,display:`inline-block`,flexShrink:`0`});let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,gap:`8px`}),e.append(this.siStreamDot,this.siSymbolSpan,this.siOHLCSpan),this.siEl.append(e,this.siOHLC2Span),this.canvasWrap.appendChild(this.siEl)}if(k&&(this.indicatorOverlay=new uo(this.theme,this.uiConfig.indicatorOverlay,this.labels.chart),this.canvasWrap.appendChild(this.indicatorOverlay.el),this.indicatorSettingsDialog=new fo(this.theme,this.labels.dialogs),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 xo,o.onLevelDragEnd&&this.emitter.on(`tradeLevelDragEnd`,o.onLevelDragEnd),o.onLevelEdit&&this.emitter.on(`tradeLevelEdit`,o.onLevelEdit),te){var oe;let e=(oe=o.minLots)==null?1:oe;this.tradePopover=new go(this.theme,e,(e,t,n)=>this.createDraftOrder(e,t,n),this.labels.trade),this.canvasWrap.appendChild(this.tradePopover.el),this.draftOrderQtyInput=new _o(this.priceAxisWidth,this.labels.trade),this.draftOrderQtyInput.onLotsChange=o.onLotsChange,this.canvasWrap.appendChild(this.draftOrderQtyInput.el),this.tradeButton=new ho(this.theme,this.priceAxisWidth,()=>{if(this._tradeButtonClickData&&this.tradePopover){let e=this.priceAxisWidth+10+22+4;this.tradePopover.show(this._tradeButtonClickData.price,this._tradeButtonClickData.y,e,this.dataStore.getPricePrecision(),this._hoverBuyType,this._hoverSellType)}},this.labels.trade),this.canvasWrap.appendChild(this.tradeButton.el),this.tradeButton.el.addEventListener(`mouseenter`,()=>{this.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(r>=0&&r<=i){var a,o;(a=this.tradeButton)==null||a.setY(r);let e=(o=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):o;this._tradeButtonClickData={price:this.scaleManager.pixelToPrice(r,e,i),y:r}}})}if(ie.appendChild(this.canvasWrap),this.wrapper.appendChild(ie),k){var se;let e={...kt,...ne};this.bottomBar=new jt((e,t)=>{var n;this.duration=e,this.timeframe=t,(n=this.topBar)==null||n.setTimeframe(t),this.emitter.emit(`durationChange`,{duration:e,timeframe:t}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`)},(se=this.duration)==null?null:se,this.theme,e,this.uiConfig.bottomBar,this.labels.bottomBar),this.wrapper.appendChild(this.bottomBar.el)}if(w.appendChild(this.wrapper),this.themeOverrides){var L,R,ce,z;this.theme=this.buildTheme(this.themeName),(L=this.topBar)==null||L.setTheme(this.theme),(R=this.bottomBar)==null||R.setTheme(this.theme),(ce=this.leftBar)==null||ce.setTheme(this.theme),(z=this.tradeButton)==null||z.setTheme(this.theme,this.priceAxisWidth)}let le=this.canvas.getContext(`2d`);if(!le)throw Error(`Canvas 2D context unavailable`);this.ctx=le;let ue=this.drawCanvas.getContext(`2d`);if(!ue)throw Error(`Drawing canvas 2D context unavailable`);this.drawCtx=ue;let de=this.tradeCanvas.getContext(`2d`);if(!de)throw Error(`Trade canvas 2D context unavailable`);if(this.tradeCtx=de,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.onStartTextEdit=e=>this.showTextInput(e),this.panHandler=new S(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender()},()=>this.dataStore.length,()=>this.scheduleRender(),()=>{var e,t;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)||this._mobileCrosshairActive},e=>{var t;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._isPanning=!0},()=>{this._isPanning=!1}),this.zoomHandler=new T(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender()},()=>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.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(`contextmenu`,e=>e.preventDefault()),document.addEventListener(`keydown`,this.onKeyDown);let fe=()=>{var e;let t=!!document.fullscreenElement;t||(this._isCssFullscreen=!1),(e=this.topBar)==null||e.setFullscreen(t),this.reparentFloatingElements()};this.wrapper.addEventListener(`fullscreenchange`,fe),document.addEventListener(`fullscreenchange`,fe),this.resizeObserver=new ResizeObserver(()=>this.onResize()),this.resizeObserver.observe(this.canvasWrap),this.onResize(),this.dataLoader&&this.triggerLoad(`initial`)}loadData(e,t=!1){var n,r,i;this.isFetching=!1,this.noMoreData=!1,this.pricePanOffset=0,this.priceScaleFactor=1,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this.dataStore.set(e);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;this.viewport={...this.viewport,startIndex:t?0:Math.max(0,e.length-Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars,o,this.targetCandleWidth)+Es),endIndex:e.length+Es},this._targetViewport={...this.viewport};let s=this.dataStore.hasVolumeData;if(s||(this.showVolume=!1),(i=this.topBar)==null||i.setVolumeControl(this.showVolume,s),this.showVolume&&s){var c;(c=this.indicatorOverlay)==null||c.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this.topBar)==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()})}return this.recomputeIndicators(),this.reanchorDrawingsByTimestamp(),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.recomputeIndicators(),this.scheduleRender()),this.isFetching=!1,this}setLoading(e){return this.loadingOverlayEl&&(this.loadingOverlayEl.style.display=e?`flex`:`none`),this}timeframeToMs(e){var t;let n=6e4;return(t={"1m":1*n,"5m":5*n,"15m":15*n,"30m":30*n,"1h":60*n,"4h":240*n,"1D":1440*n,"1W":10080*n,"1M":43200*n,"1Y":525600*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()?us(e,this.timeframeToMs(this.timeframe)):e}timeframeToInterval(e){var t;return(t={"1m":`1min`,"5m":`5min`,"15m":`15min`,"30m":`30min`,"1h":`1hour`,"4h":`4hour`,"1D":`1day`,"1W":`1week`,"1M":`1month`,"1Y":`1week`}[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;this.isFetching=!0,this.noMoreData=!1;let t=new Date,n=new Date(t.getTime()-this.maxCandles*this.timeframeToMs(this.timeframe)),r=this.duration?new Date(t.getTime()-this.durationToMs(this.duration)):n,i=new Date(Math.max(r.getTime(),n.getTime())),a=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0),this.dataLoader({start:i,end:t,interval:a}).then(n=>{this.loadData(this.maybeAggregate(n),e===`duration`),this.setLoading(!1),this.emitter.emit(`dataLoaded`,{timeframe:this.timeframe,interval:a,start:i,end:t})}).catch(()=>{this.isFetching=!1,this.setLoading(!1)})}checkNeedMoreData(){if(!this.dataLoader||this.isFetching||this.noMoreData)return;let e=Math.max(20,Math.round(Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)*.25));if(this._targetViewport.startIndex>e||this.dataStore.length===0)return;this.isFetching=!0;let t=this.dataStore.all[0].time,n=new Date(t-1),r=new Date(t-this.maxCandles*this.timeframeToMs(this.timeframe)),i=this.duration?new Date(t-this.durationToMs(this.duration)):r,a=new Date(Math.max(i.getTime(),r.getTime())),o=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0),this.dataLoader({start:a,end:n,interval:o}).then(e=>{this.prependData(this.maybeAggregate(e)),this.setLoading(!1)}).catch(()=>{this.isFetching=!1,this.setLoading(!1)})}addIndicator(e){var t;if(e.pane===`sub`&&this.activeIndicators.filter(e=>e.indicator.pane===`sub`).length>=this.maxSubPanes)return this;let n=hs.find(t=>t.shortName===e.name),r=n?Object.fromEntries(n.fields.map(e=>[e.key,e.default])):{};r.timeframe=`Chart`;let i={indicator:e,shortName:e.name,currentParams:r,visible:!0};this.activeIndicators.push(i),this.dataStore.length>0&&this.indicatorResults.set(e.name,e.compute(this.dataStore.all));let a=n!==void 0&&n.fields.length>0,o=ms(e.name,r,n);if(e.pane===`sub`){let t=new uo(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(e.name,t),t.addPill(e.name,e.color,o,`Chart`,!0,()=>this.removeIndicator(e.name),a?()=>this.openIndicatorSettings(e.name):null,()=>{i.visible=!i.visible,t.updatePillVisibility(e.name,i.visible),this.scheduleRender(),this.emitStateChange()})}else{var s;(s=this.indicatorOverlay)==null||s.addPill(e.name,e.color,o,`Chart`,!0,()=>this.removeIndicator(e.name),a?()=>this.openIndicatorSettings(e.name):null,()=>{var t;i.visible=!i.visible,(t=this.indicatorOverlay)==null||t.updatePillVisibility(e.name,i.visible),this.scheduleRender(),this.emitStateChange()})}return(t=this.topBar)==null||t.setIndicatorOptionActive(e.name,!0),this.scheduleRender(),this.emitStateChange(),this}removeIndicator(e){var t;this.activeIndicators=this.activeIndicators.filter(t=>t.indicator.name!==e),this.indicatorResults.delete(e),this.subPaneScaleFactors.delete(e);let n=this.subPaneOverlays.get(e);if(n)n.destroy(),n.el.remove(),this.subPaneOverlays.delete(e);else{var r;(r=this.indicatorOverlay)==null||r.removePill(e)}return(t=this.topBar)==null||t.setIndicatorOptionActive(e,!1),this.scheduleRender(),this.emitStateChange(),this}addIndicatorByName(e){if(e===`VOL`){var t;if(this.setVolume(!this.showVolume),this.showVolume){var n;(n=this.indicatorOverlay)==null||n.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this.topBar)==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 r;(r=this.indicatorOverlay)==null||r.removePill(`VOL`)}(t=this.topBar)==null||t.setVolumeControl(this.showVolume,this.dataStore.hasVolumeData);return}let i=fs.find(t=>t.shortName===e);if(i){if(this.activeIndicators.some(t=>t.shortName===e)){this.removeIndicator(e);return}this.addIndicator(i.factory())}}openIndicatorSettings(e){var t;let n=this.activeIndicators.find(t=>t.shortName===e);if(!n)return;let r=hs.find(t=>t.shortName===e);if(!r||r.fields.length===0)return;let i={...r,fields:[...r.fields,ps]};(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.findIndex(t=>t.shortName===e);if(r===-1)return;let i=hs.find(t=>t.shortName===e);if(!i)return;let a=this.activeIndicators[r];if(!a)return;let{timeframe:o,...s}=t,c=i.factory(s);a.indicator=c,a.currentParams={...t},this.indicatorResults.delete(e),this.dataStore.length>0&&this.indicatorResults.set(e,c.compute(this.dataStore.all));let l=(n=this.subPaneOverlays.get(e))==null?this.indicatorOverlay:n;l==null||l.updatePillColor(e,c.color),l==null||l.updatePillLabel(e,ms(e,a.currentParams,i)),l==null||l.updatePillTimeframe(e,o==null?`Chart`:o),this.scheduleRender(),this.emitStateChange()}on(e,t){return this.emitter.on(e,t)}buildTheme(e){var t,n,r,i,l,u,d;let f=e===`dark`?s:c,p=this.settingsCanvasColors[e],m=p?{...p.background!==void 0&&{background:p.background},...p.grid!==void 0&&{grid:p.grid},...p.axisText!==void 0&&{axisText:p.axisText},...p.axisBorder!==void 0&&{axisBorder:p.axisBorder},...p.crosshair!==void 0&&{crosshair:p.crosshair},...((t=(n=(r=(i=(l=p.candleUp)==null?p.candleDown:l)==null?p.wickUp:i)==null?p.wickDown:r)==null?p.borderUp:n)==null?p.borderDown:t)!==void 0&&{candle:{...p.candleUp!==void 0&&{up:p.candleUp},...p.candleDown!==void 0&&{down:p.candleDown},...p.wickUp!==void 0&&{wickUp:p.wickUp},...p.wickDown!==void 0&&{wickDown:p.wickDown},...p.borderUp!==void 0&&{borderUp:p.borderUp},...p.borderDown!==void 0&&{borderDown:p.borderDown}}},...((u=p.volumeUp)==null?p.volumeDown:u)!==void 0&&{volume:{...p.volumeUp!==void 0&&{up:p.volumeUp},...p.volumeDown!==void 0&&{down:p.volumeDown}}}}:void 0;return o(a(a(f,(d=this.themeOverrides)==null?void 0:d[e]),m),this.wrapper)}setTheme(e){var t,n,r,i,a,o,s;return this.themeName=e,this.theme=this.buildTheme(e),(t=this.topBar)==null||t.setTheme(this.theme),(n=this.bottomBar)==null||n.setTheme(this.theme),(r=this.leftBar)==null||r.setTheme(this.theme),(i=this.tradeButton)==null||i.setTheme(this.theme,this.priceAxisWidth),(a=this.tradePopover)==null||a.setTheme(this.theme),(o=this.indicatorSettingsDialog)==null||o.setTheme(this.theme),(s=this.chartSettingsDialog)==null||s.setTheme(this.theme),this.applyScrollToEndBtnStyles(),this.applyResetViewBtnStyles(),this.applyMobileDrawingFlyoutTheme(),this.siSymbolSpan&&(this.siSymbolSpan.style.color=this.theme.axisText),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream.disconnected),this.scheduleRender(),this.emitStateChange(),this}setSeries(e){var t;return this.series=e,(t=this.topBar)==null||t.setSeries(e),this.emitter.emit(`seriesChange`,{series:e}),this.scheduleRender(),this.emitStateChange(),this}clearDuration(){var e,t;this.duration!==void 0&&(this.duration=void 0,(e=this.topBar)==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}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})),drawings:this.drawingManager.getDrawingsSnapshot().map(e=>({...e,points:e.points.map(e=>{var t;return{...e,timestamp:(t=this.dataStore.all[Math.floor(e.barIndex)])==null?void 0:t.time}})})),positionRenderStyle:this.positionRenderStyle,tradeDisplayFilter:this.tradeDisplayFilter,canvasColors:Object.keys(this.settingsCanvasColors).length>0?{...this.settingsCanvasColors}:void 0}}setState(e){this.isRestoringState=!0;try{var t,n,r;this.setSeries(e.series),this.setVolume(e.showVolume),this.setTheme(e.theme),this.timeframe=e.timeframe,this.duration=e.duration,(t=this.topBar)==null||t.setTimeframe(e.timeframe),(n=this.topBar)==null||n.setActiveDuration(e.duration),(r=this.bottomBar)==null||r.setActive(e.duration),this.updateCountdownState();let s=this.activeIndicators.map(e=>e.shortName);for(let e of s)this.removeIndicator(e);for(let t of e.indicators){let e=hs.find(e=>e.shortName===t.shortName);if(e){let n=e.factory(t.params);this.addIndicator(n);let r=this.activeIndicators.findIndex(e=>e.shortName===t.shortName);if(r!==-1){let e=this.activeIndicators[r];if(e){var i,a;if(e.currentParams={...t.params},t.visible===!1){var o;e.visible=!1;let n=(o=this.subPaneOverlays.get(t.shortName))==null?this.indicatorOverlay:o;n==null||n.updatePillVisibility(t.shortName,!1)}let n=(i=t.params.timeframe)==null?`Chart`:i,r=(a=this.subPaneOverlays.get(t.shortName))==null?this.indicatorOverlay:a;r==null||r.updatePillTimeframe(t.shortName,n)}}}}let c=this.dataStore.all,l=e.drawings.map(e=>({...e,points:e.points.map(e=>{if(!e.timestamp||c.length===0)return e;let t=0,n=c.length-1;for(;t<n;){var r,i;let a=t+n>>1;((r=(i=c[a])==null?void 0:i.time)==null?0:r)<e.timestamp?t=a+1:n=a}return{...e,barIndex:t+(e.barIndex-Math.floor(e.barIndex))}})}));this.drawingManager.loadDrawings(l),e.positionRenderStyle&&(this.positionRenderStyleOverride=e.positionRenderStyle,this.positionRenderStyle=e.positionRenderStyle),e.tradeDisplayFilter&&(this.tradeDisplayFilter=e.tradeDisplayFilter),e.canvasColors&&(this.settingsCanvasColors=e.canvasColors)}finally{this.isRestoringState=!1}return this.scheduleRender(),this}reanchorDrawingsByTimestamp(){let e=this.dataStore.all;if(e.length!==0)for(let r of this.drawingManager.getDrawings())for(let i of r.points){if(!i.timestamp)continue;let r=0,a=e.length-1;for(;r<a;){var t,n;let o=r+a>>1;((t=(n=e[o])==null?void 0:n.time)==null?0:t)<i.timestamp?r=o+1:a=o}i.barIndex=r+(i.barIndex-Math.floor(i.barIndex))}}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}setSymbol(e){var t;return this.symbol=e,this.siSymbolSpan&&(this.siSymbolSpan.textContent=e,this.siSymbolSpan.style.display=e?`inline`:`none`),(t=this.isinPickerModal)==null||t.setCurrentSymbol(e),this.tickActivityTimer!==null&&(clearTimeout(this.tickActivityTimer),this.tickActivityTimer=null),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus]),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=e=>e.toFixed(this.dataStore.getPricePrecision()),r=e=>e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(1)+`K`:e.toFixed(0),i=this.labels.ohlc,a=(e,t)=>{e.innerHTML=``;for(let[n,r,i]of t){let t=document.createElement(`span`);t.style.marginRight=`8px`;let a=document.createElement(`span`);a.textContent=n+`\xA0`,a.style.color=this.theme.axisText,a.style.opacity=`0.6`;let o=document.createElement(`span`);o.textContent=r,o.style.color=i,t.append(a,o),e.appendChild(t)}};a(this.siOHLCSpan,[[i.open,n(e.open),this.theme.axisText],[i.high,n(e.high),this.theme.axisText]]),this.siOHLC2Span&&a(this.siOHLC2Span,[[i.low,n(e.low),this.theme.axisText],[i.close,n(e.close),t],...e.volume!=null&&e.volume!==0?[[i.volume,r(e.volume),this.theme.axisText]]:[]])}setMinLots(e){var t;return(t=this.tradePopover)==null||t.setLots(e),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()}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}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: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.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.entryPriceEditable&&(r.entryPriceEditable=!0),e.orderType!==void 0&&(r.orderType=e.orderType),e.lots!==void 0&&(r.lots=Number(e.lots)),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.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.ToClose!==void 0&&(r.ToClose=String(e.ToClose)),r}return{label:String(e[t]),price:Number(e[n]),type:`trade`,text:e.text===void 0?void 0:String(e.text),data:e}});return this.levels=[...this.levels.filter(e=>e.type!==r),...o],this.recomputeRenderStyle(),this.renderTradeLayer(),this}removeLevelByLabel(e){return this.levels=this.levels.filter(t=>t.label!==e),this.renderTradeLayer(),this}showDraftOrder(e,t,n){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}clearDraftOrder(){return this.removeDraftOrder(),this}setDraftOrderLots(e){var t;return(t=this.draftOrderQtyInput)==null||t.setValue(e),this}updateLevelBracket(e,t,n){return 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}}),this.renderTradeLayer(),this}updateLevelMainPrice(e,t){let n=this.levels.find(t=>t.label===e);return n&&(n.price=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.scheduleRender(),this):this}updateDraftOrderPrice(e){var t;if(!this.draftOrderLabel)return!1;this.levels=this.levels.map(t=>t.label===this.draftOrderLabel?{...t,price:e}:t);let n=this.pendingLevelDrags.get(this.draftOrderLabel);if(n){let t=n.find(e=>e.field===`main`);t&&(t.newPrice=e)}let{priceH:r}=this.getChartLayout(),i=this.scaleManager.yToPixel(e,this.getScaledPriceRange(this.viewport),r);return(t=this.draftOrderQtyInput)==null||t.setY(i,r),this.renderTradeLayer(),!0}cancelLevelEdit(e){return this.pendingLevelDrags.delete(e),this.selectedTradeLabel===e&&(this.selectedTradeLabel=null),this.renderTradeLayer(),this}selectLevel(e){return this.selectedTradeLabel=e,this.renderTradeLayer(),this}destroy(){var e,t,n,r,i,a,o,s,c,l,u;this.panHandler.destroy(),this.zoomHandler.destroy(),this.resizeObserver.disconnect(),(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.tradePopover)==null||i.destroy(),(a=this.draftOrderQtyInput)==null||a.destroy(),(o=this.leftBar)==null||o.destroy(),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),document.removeEventListener(`keydown`,this.onKeyDown),(s=this.streamAdapter)==null||s.disconnect(),this.rafId!==null&&cancelAnimationFrame(this.rafId),this.scrollAnimId!==null&&cancelAnimationFrame(this.scrollAnimId),this.stopCountdownLoop(),(c=this.resetViewBtn)==null||c.remove(),(l=this.textInputEl)==null||l.remove(),(u=this._mobileDrawingFlyout)==null||u.remove(),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(st,`Delete drawing`,!0);n.addEventListener(`pointerdown`,e=>{e.stopPropagation(),this.deleteSelectedDrawing(),this.hideMobileDrawingFlyout()});let r=t(it,`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(!ws())return;this._mobileDrawingFlyout||(this._mobileDrawingFlyout=this.createMobileDrawingFlyout());let n=this._mobileDrawingFlyout;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`})}hideMobileDrawingFlyout(){this._mobileDrawingFlyout&&(this._mobileDrawingFlyout.style.display=`none`)}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.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`,`5m`,`15m`,`30m`,`1h`,`4h`]:e).includes(this.timeframe),n=this.showCandleCountdown&&t&&this.dataStore.length>0;n&&!this.countdownActive?(this.countdownActive=!0,this.startCountdownLoop()):!n&&this.countdownActive&&this.stopCountdownLoop()}openChartSettings(){this.chartSettingsDialog||(this.chartSettingsDialog=new mo(this.theme,{tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.positionRenderStyle,theme:this.themeName},this.labels.dialogs),this.getFloatingRoot().appendChild(this.chartSettingsDialog.el)),this.chartSettingsDialog.show({tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.positionRenderStyle,theme:this.themeName,canvasColors:{...this.settingsCanvasColors}},e=>{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.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;let a=this.getFloatingRoot();(e=this.topBar)==null||e.reparentFlyout(a),(t=this.leftBar)==null||t.reparentFlyout(a);let o=[(n=this.isinPickerModal)==null?void 0:n.el,(r=this.indicatorSettingsDialog)==null?void 0:r.el,(i=this.chartSettingsDialog)==null?void 0:i.el];for(let e of o)e&&e.parentElement!==a&&a.appendChild(e)}toggleDrawingTools(){var e,t;this.leftBarVisible=!this.leftBarVisible,(e=this.leftBar)==null||e.setVisible(this.leftBarVisible),(t=this.topBar)==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.topBar)==null||t.setFullscreen(e),this.reparentFloatingElements(),requestAnimationFrame(()=>this.onResize())}toggleFullscreen(){let e=!!document.fullscreenElement;!e&&!this._isCssFullscreen?this.wrapper.requestFullscreen?this.wrapper.requestFullscreen().catch(()=>{this._applyCssFullscreen(!0)}):this._applyCssFullscreen(!0):e?document.exitFullscreen().catch(()=>{}):this._applyCssFullscreen(!1)}recomputeRenderStyle(){if(this.positionRenderStyleOverride!==null){this.positionRenderStyle=this.positionRenderStyleOverride;return}this.positionRenderStyle=this.levels.filter(e=>e.type===`position`||e.type===`pending`).length>this.tradesThresholdForHorizontalLine?`dot`:`line`}renderTradeLayer(){var e,t;let n=window.devicePixelRatio||1,{tradeCtx:r,tradeCanvas:i,theme:a,viewport:o}=this;if(r.clearRect(0,0,i.width,i.height),this.levels.length===0||this.dataStore.length===0){this.tradeLevelHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeAddBracketAreas=[];return}let{chartW:s,priceH:c}=this.getChartLayout(),l=this.getScaledPriceRange(o);if(this.draftOrderLabel&&this.draftOrderQtyInput){var u;let e=this.pendingLevelDrags.get(this.draftOrderLabel),t=e==null?void 0:e.find(e=>e.field===`main`),n=this.levels.find(e=>e.label===this.draftOrderLabel),r=(u=t==null?void 0:t.newPrice)==null?n==null?void 0:n.price:u;r!==void 0&&this.draftOrderQtyInput.setY(this.scaleManager.yToPixel(r,l,c),c)}let d=this.levels.filter(e=>e.type===`pending`&&e.ToClose!=null),f=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=(n=a.find(e=>e.field===`stopLoss`))==null?void 0:n.newPrice,s=(r=a.find(e=>e.field===`takeProfit`))==null?void 0:r.newPrice,c=(i=a.find(e=>e.field===`main`))==null?void 0:i.newPrice,l=d.filter(t=>t.ToClose===e.label);if(l.length===0&&o===void 0&&s===void 0&&c===void 0)return e;let u={...e};if(c!==void 0&&(u.price=c),o!==void 0&&(u.stopLossPrice=o),s!==void 0&&(u.takeProfitPrice=s),l.length>0){var f;let t=(f=e.side)==null?`buy`:f;for(let n of l)if(t===`buy`?n.price<e.price:n.price>e.price){var p;u.stopLossPrice=(p=o==null?u.stopLossPrice:o)==null?n.price:p,u._slOrderLabel=n.label}else{var m;u.takeProfitPrice=(m=s==null?u.takeProfitPrice:s)==null?n.price:m,u._tpOrderLabel=n.label}}return u});r.save(),r.scale(n,n),r.save(),r.beginPath(),r.rect(0,0,s,c),r.clip();let p=e=>e.type===`position`&&!!e.entryPriceEditable,m=Ne(r,this.selectedTradeLabel===null?this.tradeDisplayFilter===`none`?[]:this.tradeDisplayFilter===`positions`?f.filter(e=>e.type===`position`&&!p(e)):this.tradeDisplayFilter===`orders`?f.filter(e=>e.type===`pending`||p(e)):f:f.filter(e=>e.label===this.selectedTradeLabel),this.scaleManager,l,a,s,c,this.dataStore.getPricePrecision(),this.hoveredTradeLabel,(e=(t=this.tradeDragHandler)==null?void 0:t.dragLabel)==null?null:e,this.tradeDragNewPrice,this.selectedTradeLabel,new Set(this.pendingLevelDrags.keys()),this.positionRenderStyle);r.restore(),r.restore(),this.tradeLevelHitAreas=m.hitAreas,this.tradeLevelEditAreas=m.editAreas,this.tradeHoverAreas=m.hoverAreas,this.tradeLevelDragAreas=m.dragAreas,this.tradeLevelConfirmAreas=m.confirmAreas,this.tradeAddBracketAreas=m.addBracketAreas}_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}storePendingChange(e,t,n){var r,i,a;if(e.bracketType){var o,s,c,l,u;let n=this.levels.find(t=>t.label===e.label),r=(o=n==null?void 0:n.side)==null?`buy`:o,i=this._effectiveEntryPrice(e.label,(s=n==null?void 0:n.price)==null?t:s),a=(n==null?void 0:n.entryPriceEditable)===!0,d=(n==null||(c=n.data)==null?void 0:c._isDraft)===!0,f=this.dataStore.all,p=a||d||(l=(u=f[f.length-1])==null?void 0:u.close)==null?0:l;if(!xo.isBracketPriceValid(e.newPrice,e.bracketType,i,r,p)){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 d,f;let n=this.dataStore.all,r=(d=(f=n[n.length-1])==null?void 0:f.close)==null?0:d;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}}}let p=(r=e.bracketType)==null?`main`:r,m=this._isBracketNew;this._isBracketNew=!1;let h=this.levels.find(t=>t.label===e.label);if((h==null?void 0:h.orderType)===`market`&&(h==null||(i=h.data)==null?void 0:i._isDraft)===!0){p!==`main`&&(this.updateDraftOrderBracket(p===`stopLoss`?`sl`:`tp`,e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:h==null?void 0:h.data,bracketType:p,isFullscreen:this.isFullscreen})),this.tradeDragNewPrice=null,this.renderTradeLayer();return}let g=((a=this.pendingLevelDrags.get(e.label))==null?[]:a).filter(e=>e.field!==p);g.push({field:p,newPrice:e.newPrice,oldPrice:t,isNew:m,bracketOrderLabel:n}),this.pendingLevelDrags.set(e.label,g),this.tradeDragNewPrice=null,this.renderTradeLayer()}createDraftOrder(e,t,n){var r;if(this.draftOrderLabel)return;let i=`__draft_${Date.now()}`,a={type:`pending`,label:i,side:e,price:t,orderType:n,data:{_isDraft:!0}};this.levels=[...this.levels,a],this.draftOrderLabel=i,this.selectedTradeLabel=i,this.pendingLevelDrags.set(i,[{field:`main`,newPrice:t,oldPrice:t}]);let{priceH:o}=this.getChartLayout(),s=this.scaleManager.yToPixel(t,this.getScaledPriceRange(this.viewport),o);this.crosshair=null,(r=this.draftOrderQtyInput)==null||r.show(s,this._minLots,this.theme,o),this.renderTradeLayer()}removeDraftOrder(){var e;this.draftOrderLabel&&(this.levels=this.levels.filter(e=>e.label!==this.draftOrderLabel),this.pendingLevelDrags.delete(this.draftOrderLabel),this.selectedTradeLabel=null,this.draftOrderLabel=null,(e=this.draftOrderQtyInput)==null||e.hide(),this.renderTradeLayer())}applyPendingChanges(e){let t=this.pendingLevelDrags.get(e);if(!t)return;let n=this.levels.find(t=>t.label===e);if(n){if(e===this.draftOrderLabel){var r,i,a,o;let s=t.find(e=>e.field===`main`),c=t.find(e=>e.field===`stopLoss`&&e.isNew),l=t.find(e=>e.field===`takeProfit`&&e.isNew),u=n;(r=this._onOrderSubmit)==null||r.call(this,{price:(i=s==null?void 0:s.newPrice)==null?u.price:i,lots:(a=(o=this.draftOrderQtyInput)==null?void 0:o.getValue())==null?this._minLots:a,side:u.side,orderType:u.orderType,...c?{stopLoss:c.newPrice}:{},...l?{takeProfit:l.newPrice}:{}}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:`draft`,isFullscreen:this.isFullscreen}),this.removeDraftOrder();return}this.emitter.emit(`tradeLevelEdit`,{label:e,type:n.type,data:n.data,isFullscreen:this.isFullscreen,changes:t.map(e=>{let t=n.data,r=n.data;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 o;return o=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:o,newPrice:e.newPrice,data:r,bracketOrderLabel:e.bracketOrderLabel}})}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:n.type,isFullscreen:this.isFullscreen}),this.pendingLevelDrags.delete(e),this.selectedTradeLabel=null,this.renderTradeLayer()}}revertPendingChanges(e){var t;if(e&&e===this.draftOrderLabel){this.removeDraftOrder();return}!e&&this.draftOrderLabel&&this.removeDraftOrder();let n=e?this.pendingLevelDrags.has(e)?[[e,(t=this.pendingLevelDrags.get(e))==null?[]:t]]:[]:[...this.pendingLevelDrags.entries()];for(let[e]of n)this.pendingLevelDrags.delete(e);this.selectedTradeLabel=null,this.renderTradeLayer()}render(){var e,t;let{ctx:n,canvas:r,theme:i,viewport:a}=this,o=window.devicePixelRatio||1,s=r.width,c=r.height,l=s/o-this.priceAxisWidth,u=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),d=u.map(e=>e.indicator).reduce((e,t)=>e+this.paneH(t)+Z,0),f=c/o-this.timeAxisHeight-d;n.clearRect(0,0,s,c),n.fillStyle=i.background,n.fillRect(0,0,s,c);let p=this.dataStore.getVisible(a);if(p.length===0)return;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*Cs,endIndex:this.viewport.endIndex+t*Cs,candleWidth:this._targetViewport.candleWidth,candleGap:this._targetViewport.candleGap},this.scheduleRender())}if(this.priceScaleFactor!==1||this.pricePanOffset!==0){if(!this._lockedAutoFitBase){var m;this._lockedAutoFitBase=(m=this._displayedPriceRange)==null?this.dataStore.getPriceRange(a):m}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{this._lockedAutoFitBase=null;let e=this.getScaledPriceRange(a);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*Ss,max:this._displayedPriceRange.max+r*Ss},this.scheduleRender())}}let h=this._displayedPriceRange,g=this.showVolume?this.dataStore.getVolumeRange(a):null,_=r;switch(_._priceRange=h,_._chartWidth=l,n.save(),n.scale(o,o),n.save(),n.beginPath(),n.rect(0,0,l,f),n.clip(),se(n,h,this.scaleManager,i,l,f),this.series){case`candlestick`:E(n,p,a,h,this.scaleManager,i,l,f);break;case`hollow`:D(n,p,a,h,this.scaleManager,i,l,f);break;case`line`:A(n,p,a,h,this.scaleManager,i,l,f,!1);break;case`area`:A(n,p,a,h,this.scaleManager,i,l,f,!0);break;case`ohlc`:j(n,p,a,h,this.scaleManager,i,l,f);break;case`heikinashi`:N(n,p,a,h,this.scaleManager,i,l,f);break;case`volumecandles`:te(n,p,a,h,this.scaleManager,i,l,f);break;case`linemarkers`:P(n,p,a,h,this.scaleManager,i,l,f);break;case`step`:ne(n,p,a,h,this.scaleManager,i,l,f);break;case`hlcarea`:I(n,p,a,h,this.scaleManager,i,l,f);break;case`baseline`:ie(n,p,a,h,this.scaleManager,i,l,f);break;case`columns`:ae(n,p,a,h,this.scaleManager,i,l,f);break;case`highlow`:oe(n,p,a,h,this.scaleManager,i,l,f);break}n.save(),n.beginPath(),n.rect(0,0,l,f),n.clip();for(let e of this.indicators.filter(e=>!e.pane||e.pane===`main`)){let t=this.indicatorResults.get(e.name);if(!t)continue;let r=t.slice(Math.floor(a.startIndex),Math.ceil(a.endIndex)+1);e.render(n,r,this.scaleManager,a,f)}n.restore(),n.restore(),et(n,h,this.scaleManager,i,l,f,this.priceAxisWidth,void 0,this.dataStore.getPricePrecision(),this.uiConfig.priceAxis);let v=this.dataStore.all[this.dataStore.all.length-1];if(v){let e=this.dataStore.getPricePrecision(),t=(t,r,i)=>{let a=this.scaleManager.yToPixel(t,h,f);n.save(),n.strokeStyle=r,n.lineWidth=1,n.setLineDash([3,3]),n.beginPath(),n.moveTo(0,a),n.lineTo(l,a),n.stroke(),n.setLineDash([]);let o=i+t.toFixed(e),s=n.measureText(o).width;n.fillStyle=r,n.fillRect(l,a-16/2,s+12,16),n.fillStyle=`#ffffff`,n.font=`10px 'Inter', system-ui, sans-serif`,n.textAlign=`left`,n.fillText(o,l+4,a+4),n.restore()};if(this.liveBidAsk){let{bid:e,ask:n}=this.liveBidAsk;this.showBidAskLines?(t(e,i.candle.down,``),t(n,i.candle.up,``)):t(this.tickClosePriceSource===`ask`?n:e,this.tickClosePriceSource===`ask`?i.candle.up:i.candle.down,``)}else{let e=v.close>=v.open;t(v.close,e?i.candle.up:i.candle.down,``)}}let y=f;for(let e of u){let t=e.indicator,r=this.paneH(t);if(n.fillStyle=i.axisBorder,n.fillRect(0,y,l+this.priceAxisWidth,Z),y+=Z,n.save(),n.beginPath(),n.rect(0,y,l+this.priceAxisWidth,r),n.clip(),n.translate(0,y),n.fillStyle=i.background,n.fillRect(0,0,l+this.priceAxisWidth,r),e.visible&&(()=>{let t=e.currentParams.timeframe;return!t||t===`Chart`||t===this.timeframe})()){let e=this.indicatorResults.get(t.name);if(e){var b,x;let o=e.slice(Math.floor(a.startIndex),Math.ceil(a.endIndex)+1),s=(b=t.getValueRange)==null?void 0:b.call(t,o),c=(x=this.subPaneScaleFactors.get(t.name))==null?1:x,u=s?Ds(s,c):void 0;t.render(n,o,this.scaleManager,a,r,u),u&&et(n,u,this.scaleManager,i,l,r,this.priceAxisWidth,3,Os(u),this.uiConfig.priceAxis)}}n.restore(),y+=r}if(this.showVolume&&g&&g.max>0){let e=f*vs;M(n,p,a,g.max,this.scaleManager,i,l,e,f-e)}{var S;let e=this.candleCountdownTimeframes===`all`?!0:((S=this.candleCountdownTimeframes)==null?[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`]:S).includes(this.timeframe),t=this.showCandleCountdown&&e&&p.length>0&&a.endIndex>=this.dataStore.length-1,r=t?this.dataStore.length-1:void 0;if(this._debug&&console.log(`[countdown] showCandleCountdown:`,this.showCandleCountdown,`| tf:`,this.timeframe,`| allowed:`,e,`| bars:`,p.length,`| endIndex:`,a.endIndex,`| dataLen:`,this.dataStore.length,`| atLiveEdge:`,a.endIndex>=this.dataStore.length-1),Qe(n,p,a,this.scaleManager,i,l,y,ws()?3:void 0,this.uiConfig.timeAxis,this.timeframe,r),t){let e=this.dataStore.all[this.dataStore.length-1],t=this.timeframeToMs(this.timeframe);$e(n,e.time,t,this.dataStore.length-1,a,this.scaleManager,i,l,y,this.uiConfig.timeAxis)}}if(this.crosshair&&ce(n,this.crosshair,h,a,this.scaleManager,i,l,f,this.priceAxisWidth,y,this.timeframe,this.dataStore.getPricePrecision(),this.uiConfig.crosshair),this.logoImage){let e=f-20-40/2;n.save(),n.globalAlpha=.6,n.beginPath(),n.rect(0,0,l,f),n.clip(),n.beginPath(),n.arc(40,e,40/2,0,Math.PI*2),n.closePath(),n.clip(),n.drawImage(this.logoImage,40-40/2,e-40/2,40,40),n.restore()}n.restore();let C=this.crosshair?(e=this.dataStore.all[this.crosshair.barIndex])==null?null:e:(t=this.dataStore.all[this.dataStore.length-1])==null?null:t;if(this.renderSymbolInfoOHLC(C),this.drawingManager.render(this.drawCtx,this.scaleManager,a,h,l,f,this.dataStore.getPricePrecision()),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`)}this.updateSubPaneOverlayPositions()}recomputeIndicators(){for(let e of this.indicators)this.indicatorResults.set(e.name,e.compute(this.dataStore.all))}onResize(){let e=window.devicePixelRatio||1,t=this.canvasWrap.getBoundingClientRect();this._cachedWrapRect=t,this._cachedDrawRect=this.drawCanvas.getBoundingClientRect();for(let n of[this.canvas,this.tradeCanvas,this.drawCanvas])n.width=t.width*e,n.height=t.height*e;let n=this.wrapper.offsetWidth,r=n>0&&n<this.uiConfig.drawingToolbar.mobileBreakpoint;if(r!==this._mobileLayout){var i,a;if(this._mobileLayout=r,(i=this.leftBar)==null||i.setMobileMode(r),(a=this.topBar)==null||a.setMobileLayout(r),this.siEl&&(this.siEl.style.flexDirection=r?`column`:`row`,this.siEl.style.alignItems=r?`flex-start`:`center`,this.siEl.style.gap=r?`2px`:`8px`),r){var o;this.leftBarVisible=!1,(o=this.topBar)==null||o.setDrawingsBtnActive(!1)}else{var s,c;this.leftBarVisible=!0,(s=this.leftBar)==null||s.setVisible(!0),(c=this.topBar)==null||c.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.name))==null?e.paneHeight:n)==null?ys:t}getChartLayout(){var e;let t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).map(e=>e.indicator).reduce((e,t)=>e+this.paneH(t)+Z,0),n=(e=this._cachedWrapRect)==null?this.canvasWrap.getBoundingClientRect():e;return{chartW:n.width-this.priceAxisWidth,priceH:n.height-this.timeAxisHeight-t}}updateSubPaneOverlayPositions(){if(this.subPaneOverlays.size===0)return;let e=this.getSeparatorPositions();for(let t of e){let e=this.subPaneOverlays.get(t.indicatorName);e&&(e.el.style.top=`${t.y+Z+6}px`)}}getSeparatorPositions(){let{priceH:e}=this.getChartLayout(),t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).map(e=>e.indicator),n=[],r=e;for(let e of t)n.push({y:r,indicatorName:e.name}),r+=this.paneH(e)+Z;return n}getScaledPriceRange(e){let t=this.dataStore.getPriceRange(e),n=t.min,r=t.max;for(let t of this.indicators.filter(e=>!e.pane||e.pane===`main`)){let a=this.indicatorResults.get(t.name);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{barIndex:this.scaleManager.pixelToBarIndex(i,this.viewport,o),price:this.scaleManager.pixelToPrice(a,c,s)}}_handleTradeLevelClose(e){if(e.bracketType){var t,n;let r=this.levels.find(t=>t.label===e.label);if((r==null?void 0:r.orderType)===`market`&&(r==null||(t=r.data)==null?void 0:t._isDraft)===!0){let t=e.bracketType===`stopLoss`?`sl`:`tp`;this.updateDraftOrderBracket(t,null),this.emitter.emit(`tradeLevelEdit`,{label:e.label,data:r==null?void 0:r.data,type:`pending`,isFullscreen:this.isFullscreen,changes:[{field:e.bracketType===`stopLoss`?`REMOVE_SL`:`REMOVE_TP`,newPrice:0,data:e.data}]});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;if(this.revertPendingChanges(e.label),this.pendingLevelDrags.delete(e.label),r)return;let i=this.levels.find(t=>t.label===e.label),a=(i==null?void 0:i.type)===`position`&&!!i.entryPriceEditable,o=e.type===`position`&&!a?`CLOSED`:`CANCELLED`;this.emitter.emit(`tradeLevelClose`,{label:e.label,type:e.type,action:o,data:e.data,isFullscreen:this.isFullscreen})}_activateMobileCrosshair(e,t){var n,r,i;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)));this.crosshair={x:e,y:t,barIndex:f,price:d,bar:(i=this.dataStore.all[f])==null?null:i},this.tradeButton&&(this.tradeButton.setY(t),this.tradeButton.show()),this.scheduleRender()}_startTradeDragFromHit(e,t,n){if(this.tradeDragHandler)if(e.isBracket){var r,i,a,o;this._pendingBracketOrderLabel=(r=e.bracketOrderLabel)==null?null:r,this._isBracketNew=!1;let n=t.entryPriceEditable===!0,s=((i=t.data)==null?void 0:i._isDraft)===!0,c=this.dataStore.all,l=n||s||(a=(o=c[c.length-1])==null?void 0:o.close)==null?0:a;this.tradeDragHandler.startBracketDrag(t,e.bracketType,e.price,l,this._effectiveEntryPrice(t.label,t.price))}else if(this._pendingBracketOrderLabel=null,t.entryPriceEditable===!0){var s,c;this.selectedTradeLabel=e.label;let r=t,i=this.dataStore.all,a=(s=(c=i[i.length-1])==null?void 0:c.close)==null?0:s;this.tradeDragHandler.startDrag(t,n,e.price,r.stopLossPrice,r.takeProfitPrice,r.side,a,r.orderType)}else{var l,u;let r=t,i=this.dataStore.all,a=(l=(u=i[i.length-1])==null?void 0:u.close)==null?0:l;this.tradeDragHandler.startDrag(t,n,e.price,void 0,void 0,r.side,a,r.orderType)}}_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=u||d||(r=(i=f[f.length-1])==null?void 0:i.close)==null?0:r;d||this.emitter.emit(`tradeLevelEditOpen`,{label:a.label,type:a.type,data:a.data,price:a.price,side:a.side,stopLossPrice:a.stopLossPrice,takeProfitPrice:a.takeProfitPrice,isFullscreen:this.isFullscreen}),this._pendingBracketOrderLabel=null,this._isBracketNew=!0,this.tradeDragHandler.startBracketDrag(a,e.bracketType,l,p,this._effectiveEntryPrice(a.label,a.price))}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)return;let n=this.timeframeToInterval(this.getBaseInterval());this.dataLoader({start:new Date(e),end:new Date(t),interval:n}).then(e=>{let t=this.maybeAggregate(e);if(t.length===0)return;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.recomputeIndicators(),this.scheduleRender())}).catch(()=>{})}correctCompletedBar(e,t){if(!this.dataLoader)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}).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(()=>{})}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.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null);let e=this.viewport.endIndex-this.viewport.startIndex,t=this.dataStore.length+Es,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)}resetPriceAxis(){this.priceScaleFactor=1,this.pricePanOffset=0,this._lockedAutoFitBase=null,this.scheduleRender()}resetTimeAxis(){let e=this.dataStore.length;if(e===0)return;let t=Math.max(0,e-Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)+Es);this.viewport={...this.viewport,startIndex:t,endIndex:e+Es},this._targetViewport={...this.viewport},this.scheduleRender()}resetView(){this.resetPriceAxis(),this.resetTimeAxis()}applyResetViewBtnStyles(){this.resetViewBtn&&(this.resetViewBtn.innerHTML=gt(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.75`,transition:`opacity 0.2s ease`}))}applyScrollToEndBtnStyles(){this.scrollToEndBtn&&(this.scrollToEndBtn.innerHTML=ht(this.theme.axisText,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: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`}))}};ds=ks,ds.DRAW_GESTURE_THRESHOLD=4;var Q=null;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 As(e={}){Q==null||Q.destroy();let t=document.getElementById(`chart`),{enableTrading:n,...r}=e;Q=new ks({theme:`dark`,...r,container:t,...n?{onOrderSubmit:e=>{$(`placeOrder`,{price:e.price,side:e.side,orderType:`limit`})}}:{}}),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(`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(`tradeLevelEdit`,e=>$(`tradeLevelEdit`,e)),Q.on(`tradeLevelConfirmed`,e=>$(`tradeLevelConfirmed`,e)),Q.on(`tradeLevelEditOpen`,e=>$(`tradeLevelEditOpen`,e)),$(`ready`,{})}function js(e){if(e.type===`init`){As(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`setSeries`:Q.setSeries(e.payload.series);break;case`setTimeframe`:{let t=Q.getState();Q.setState({...t,timeframe:e.payload.timeframe});break}case`setSymbol`:Q.setSymbol(e.payload.symbol);break;case`addIndicator`:Q.addIndicatorByName(e.payload.shortName);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`destroy`:Q.destroy(),Q=null;break}}document.addEventListener(`DOMContentLoaded`,()=>{As(),window.ChartBridge={send(e){let t;try{t=JSON.parse(e)}catch(t){$(`error`,{message:`Invalid JSON: ${e}`});return}try{js(t)}catch(e){$(`error`,{message:String(e)})}}}})})();</script>
|
|
235
|
+
`,document.head.appendChild(e)}var Ot=class{constructor(e,t,n,r,i,a,o,s,c,l,u,f,p,m=d,h=y.topBar){this.onSeriesChange=e,this.onTimeframeChange=t,this.onAddIndicator=n,this.onDurationChange=r,this.onSettingsClick=i,this.onFullscreenToggle=a,this.onDrawingToolsToggle=o,this.isFullscreen=!1,this.durationBtns=new Map,this.isMobileLayout=!1,this.drawingBtn=null,this.openDropdown=null,this.indicatorOptions=[],this.activeIndicators=new Set,this.volHasData=!0,this.theme=p,this.cfg=m,this.labels=h,this.currentSeries=c,this.currentTf=l,this.activeDuration=u,this.durationMap=f,Dt(),this.el=document.createElement(`div`),this.applyBarStyles(p),this.flyout=document.createElement(`div`),this.flyout.classList.add(`finchart-flyout`),this.applyFlyoutStyles(),document.body.appendChild(this.flyout),this.leftGroup=document.createElement(`div`),Object.assign(this.leftGroup.style,{display:`flex`,alignItems:`center`,gap:`4px`,flex:`1`,minWidth:`0`,overflow:`hidden`}),s&&(this.drawingBtn=this.makeDrawingBtn(p),this.leftGroup.appendChild(this.drawingBtn)),this.seriesBtn=this.makeSeriesBtn(c,p),this.seriesBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown(`series`,this.seriesBtn)}),this.addBtnHover(this.seriesBtn),this.tfBtn=this.makeDropBtn(l,p,!1),this.tfBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown(`timeframe`,this.tfBtn)}),this.addBtnHover(this.tfBtn),this.indBtn=this.makeDropBtn(this.labels.indicatorsBtn,p,!1),this.indBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown(`indicators`,this.indBtn)}),this.addBtnHover(this.indBtn),this.leftGroup.append(this.seriesBtn,this.tfBtn,this.indBtn),this.rightGroup=document.createElement(`div`),Object.assign(this.rightGroup.style,{display:`flex`,alignItems:`center`,gap:`2px`,flexShrink:`0`}),this.durationDropBtn=this.makeDropBtn(u==null?Tt[0]:u,p,!1),this.durationDropBtn.style.display=`none`,this.durationSep=document.createElement(`div`),this.durationSep.style.display=`none`,this.fullscreenBtn=document.createElement(`button`),this.fullscreenBtn.title=this.labels.toggleFullscreenTitle,this.fullscreenBtn.innerHTML=at,this.applyIconBtnStyles(this.fullscreenBtn,p,!1),this.fullscreenBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.onFullscreenToggle()}),this.addBtnHover(this.fullscreenBtn),this.rightGroup.appendChild(this.fullscreenBtn),this.settingsBtn=document.createElement(`button`),this.settingsBtn.title=this.labels.settingsTitle,this.settingsBtn.innerHTML=tt,this.applyIconBtnStyles(this.settingsBtn,p,!1),this.settingsBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.onSettingsClick()}),this.addBtnHover(this.settingsBtn),this.rightGroup.appendChild(this.settingsBtn),this.el.append(this.leftGroup,this.rightGroup),this.docClickHandler=e=>{!this.el.contains(e.target)&&!this.flyout.contains(e.target)&&this.closeDropdown()},document.addEventListener(`click`,this.docClickHandler,!0)}destroy(){this.flyout.remove(),document.removeEventListener(`click`,this.docClickHandler,!0)}reparentFlyout(e){this.flyout.parentElement!==e&&e.appendChild(this.flyout)}setFullscreen(e){this.isFullscreen=e,this.fullscreenBtn.innerHTML=e?ot:at,this.fullscreenBtn.title=e?this.labels.exitFullscreenTitle:this.labels.toggleFullscreenTitle,this.applyIconBtnStyles(this.fullscreenBtn,this.theme,e)}setDrawingsBtnActive(e){this.drawingBtn&&this.applyIconBtnStyles(this.drawingBtn,this.theme,e)}setTheme(e){this.theme=e,this.closeDropdown(),this.applyBarStyles(e),this.applyFlyoutStyles(),this.drawingBtn&&this.applyIconBtnStyles(this.drawingBtn,e,!1),this.applyIconBtnStyles(this.fullscreenBtn,e,this.isFullscreen),this.applyIconBtnStyles(this.settingsBtn,e,!1),this.applySeriesBtnStyles(this.seriesBtn,e,!1),this.applyDropBtnStyles(this.tfBtn,e,!1),this.applyDropBtnStyles(this.indBtn,e,!1);for(let[t,n]of this.durationBtns)this.applyDurationBtnStyles(n,e,t===this.activeDuration);this.durationSep.style.background=e.axisBorder,this.applyDropBtnStyles(this.durationDropBtn,e,!1)}setSeries(e){this.currentSeries=e,this.updateSeriesBtnContent(this.seriesBtn,e)}setTimeframe(e){this.currentTf=e,this.tfBtn.textContent=e}setActiveDuration(e){if(this.activeDuration!==(e==null?null:e)){if(this.activeDuration){let e=this.durationBtns.get(this.activeDuration);e&&this.applyDurationBtnStyles(e,this.theme,!1)}if(this.activeDuration=e==null?null:e,e){let t=this.durationBtns.get(e);t&&this.applyDurationBtnStyles(t,this.theme,!0),this.durationDropBtn.textContent=e}}}setMobileLayout(e){if(this.isMobileLayout===e)return;this.isMobileLayout=e;let t=e?`none`:``;for(let e of this.durationBtns.values())e.style.display=t;this.durationSep.style.display=t,this.durationDropBtn.style.display=e?``:`none`}setIndicatorOptions(e){this.indicatorOptions=e}setIndicatorOptionActive(e,t){t?this.activeIndicators.add(e):this.activeIndicators.delete(e),this.updateIndBtnLabel()}setVolumeControl(e,t){this.volHasData=t,t&&e?this.activeIndicators.add(`VOL`):this.activeIndicators.delete(`VOL`),this.updateIndBtnLabel()}makeDrawingBtn(e){let t=document.createElement(`button`);return t.title=`Drawing Tools`,t.innerHTML=rt,this.applyIconBtnStyles(t,e,!1),t.addEventListener(`click`,e=>{var t;e.stopPropagation(),(t=this.onDrawingToolsToggle)==null||t.call(this)}),this.addBtnHover(t),t}makeSeriesBtn(e,t){let n=document.createElement(`button`);return this.applySeriesBtnStyles(n,t,!1),this.updateSeriesBtnContent(n,e),n}updateSeriesBtnContent(e,t){var n;e.title=(n=this.labels.series[t])==null?t:n,e.innerHTML=ct[t]}applySeriesBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.ui.accentBg:`transparent`,color:n?t.ui.accentText:t.topBar.btnColor,border:`1px solid ${n?t.ui.accent:t.axisBorder}`,borderRadius:`5px`,padding:`3px 7px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,gap:`4px`,flexShrink:`0`,height:`24px`,transition:`border-color 0.12s, background 0.12s`})}applyFlyoutStyles(){Object.assign(this.flyout.style,{position:`fixed`,zIndex:`9999`,display:`none`,background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`8px`,padding:`4px 0`,minWidth:`168px`,maxHeight:`340px`,overflowY:`auto`,overflowX:`hidden`,boxShadow:`0 8px 24px rgba(0,0,0,0.55), 0 2px 8px rgba(0,0,0,0.3)`,fontFamily:this.cfg.flyoutRowFontFamily,fontSize:this.cfg.flyoutRowFontSize,scrollbarWidth:`thin`,scrollbarColor:`rgba(120,130,150,0.35) transparent`})}toggleDropdown(e,t){if(this.openDropdown===e){this.closeDropdown();return}this.openDropdown=e,this.applySeriesBtnStyles(this.seriesBtn,this.theme,e===`series`),this.applyDropBtnStyles(this.tfBtn,this.theme,e===`timeframe`),this.applyDropBtnStyles(this.indBtn,this.theme,e===`indicators`),this.applyDropBtnStyles(this.durationDropBtn,this.theme,e===`duration`),this.buildDropdownContent(e);let n=t.getBoundingClientRect();Object.assign(this.flyout.style,{display:`block`,left:`${n.left}px`,top:`${n.bottom+6}px`}),requestAnimationFrame(()=>{let e=this.flyout.getBoundingClientRect();e.right>window.innerWidth-8&&(this.flyout.style.left=`${window.innerWidth-e.width-8}px`),e.bottom>window.innerHeight-8&&(this.flyout.style.top=`${n.top-e.height-6}px`)})}buildDropdownContent(e){if(this.flyout.innerHTML=``,this.flyout.style.minWidth=e===`series`?`152px`:e===`timeframe`?`160px`:e===`duration`?`120px`:`180px`,e===`series`){let e=[{value:`candlestick`,label:this.labels.series.candlestick},{value:`hollow`,label:this.labels.series.hollow},{value:`ohlc`,label:this.labels.series.ohlc},{value:`line`,label:this.labels.series.line},{value:`area`,label:this.labels.series.area},{value:`heikinashi`,label:this.labels.series.heikinashi},{value:`volumecandles`,label:this.labels.series.volumecandles},{value:`linemarkers`,label:this.labels.series.linemarkers},{value:`step`,label:this.labels.series.step},{value:`hlcarea`,label:this.labels.series.hlcarea},{value:`baseline`,label:this.labels.series.baseline},{value:`columns`,label:this.labels.series.columns},{value:`highlow`,label:this.labels.series.highlow}];for(let t of e){let e=this.makeRow(t.label,t.value===this.currentSeries,!1,ct[t.value]);e.addEventListener(`click`,()=>{this.currentSeries=t.value,this.updateSeriesBtnContent(this.seriesBtn,t.value),this.onSeriesChange(t.value),this.closeDropdown()}),this.flyout.appendChild(e)}}else if(e===`timeframe`){let e=[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`],r=[`1D`,`1W`,`1M`,`1Y`];this.flyout.appendChild(this.makeCategoryHeader(`Intraday`));for(let n of e){var t;let e=(t=this.labels.timeframes[n])==null?n:t,r=this.makeRow(e,n===this.currentTf,!1);r.addEventListener(`click`,()=>{this.currentTf=n,this.tfBtn.textContent=e,this.onTimeframeChange(n),this.closeDropdown()}),this.flyout.appendChild(r)}this.flyout.appendChild(this.makeCategoryHeader(`Daily +`));for(let e of r){var n;let t=(n=this.labels.timeframes[e])==null?e:n,r=this.makeRow(t,e===this.currentTf,!1);r.addEventListener(`click`,()=>{this.currentTf=e,this.tfBtn.textContent=t,this.onTimeframeChange(e),this.closeDropdown()}),this.flyout.appendChild(r)}}else if(e===`duration`)for(let e of Tt){let t=this.makeRow(e,e===this.activeDuration,!1);t.addEventListener(`click`,()=>{this.setActiveDuration(e),this.onDurationChange(e,this.durationMap[e]),this.closeDropdown()}),this.flyout.appendChild(t)}else{let e=document.createElement(`div`);Object.assign(e.style,{position:`sticky`,top:`0`,zIndex:`1`,padding:`6px 8px`,background:this.theme.tooltip.background,borderBottom:`1px solid ${this.theme.axisBorder}`});let t=document.createElement(`input`);t.type=`text`,t.placeholder=`Search indicators…`,Object.assign(t.style,{width:`100%`,boxSizing:`border-box`,padding:`5px 8px`,background:this.theme.background,color:this.theme.tooltip.text,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`4px`,fontSize:`12px`,outline:`none`}),e.appendChild(t),this.flyout.appendChild(e);let n=document.createElement(`div`);this.flyout.appendChild(n);let i=new Map;for(let e of this.indicatorOptions){var r;let t=(r=e.category)==null?``:r;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=e=>{n.innerHTML=``;let r=e.trim().toLowerCase();if(r)for(let e of this.indicatorOptions){if(!e.label.toLowerCase().includes(r)&&!e.value.toLowerCase().includes(r))continue;let i=this.activeIndicators.has(e.value),o=Et.has(e.value)&&!this.volHasData,s=this.makeRow(e.label,i,o);o||s.addEventListener(`click`,()=>{this.onAddIndicator(e.value),a(t.value)}),n.appendChild(s)}else for(let[e,r]of i){e&&n.appendChild(this.makeCategoryHeader(e));for(let e of r){let r=this.activeIndicators.has(e.value),i=Et.has(e.value)&&!this.volHasData,o=this.makeRow(e.label,r,i);i||o.addEventListener(`click`,()=>{this.onAddIndicator(e.value),a(t.value)}),n.appendChild(o)}}};a(``),t.addEventListener(`input`,()=>a(t.value)),requestAnimationFrame(()=>t.focus())}}makeCategoryHeader(e){let t=document.createElement(`div`);return Object.assign(t.style,{padding:`6px 12px 4px`,fontSize:this.cfg.flyoutCategoryFontSize,fontWeight:`600`,letterSpacing:this.cfg.flyoutCategoryLetterSpacing,color:this.theme.topBar.flyoutCategoryColor,textTransform:`uppercase`,opacity:`0.55`,marginTop:`2px`}),t.textContent=e,t}makeRow(e,t,n,r){let i=document.createElement(`button`),a=this.theme.ui.accentBg,o=this.theme.ui.accentBg;if(Object.assign(i.style,{width:`100%`,padding:`7px 12px`,background:t?o:`transparent`,border:`none`,borderLeft:t?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,color:n?this.theme.ui.disabledText:t?this.theme.ui.accentText:this.theme.topBar.flyoutRowColor,fontSize:this.cfg.flyoutRowFontSize,fontFamily:this.cfg.flyoutRowFontFamily,textAlign:`left`,cursor:n?`not-allowed`:`pointer`,display:`flex`,alignItems:`center`,gap:`8px`,boxSizing:`border-box`,opacity:n?`0.45`:`1`,transition:`background 0.1s`}),!n&&!t&&(i.addEventListener(`mouseenter`,()=>{i.style.background=a}),i.addEventListener(`mouseleave`,()=>{i.style.background=`transparent`})),r){let e=document.createElement(`span`);Object.assign(e.style,{display:`flex`,alignItems:`center`,flexShrink:`0`,opacity:t?`1`:`0.7`}),e.innerHTML=r;let n=e.querySelector(`svg`);n&&(n.setAttribute(`width`,`13`),n.setAttribute(`height`,`13`)),i.appendChild(e)}let s=document.createElement(`span`);if(s.style.flex=`1`,s.textContent=e,i.appendChild(s),t){let e=document.createElement(`span`);Object.assign(e.style,{color:this.theme.ui.accent,fontSize:this.cfg.flyoutCheckFontSize,flexShrink:`0`}),e.innerHTML=bt,i.appendChild(e)}return i}closeDropdown(){this.flyout.style.display=`none`,this.openDropdown=null,this.applySeriesBtnStyles(this.seriesBtn,this.theme,!1),this.applyDropBtnStyles(this.tfBtn,this.theme,!1),this.applyDropBtnStyles(this.indBtn,this.theme,!1),this.applyDropBtnStyles(this.durationDropBtn,this.theme,!1)}updateIndBtnLabel(){let e=this.activeIndicators.size;this.indBtn.textContent=e>0?this.labels.indicatorsBtnActive.replace(`{count}`,String(e)):this.labels.indicatorsBtn}addBtnHover(e){e.addEventListener(`mouseenter`,()=>{e.dataset.active!==`true`&&(e.style.background=this.theme.ui.accentBg)}),e.addEventListener(`mouseleave`,()=>{e.dataset.active!==`true`&&(e.style.background=`transparent`)})}applyBarStyles(e){Object.assign(this.el.style,{display:`flex`,alignItems:`center`,gap:`8px`,height:this.cfg.height,padding:`0 10px`,background:e.background,borderBottom:`1px solid ${e.axisBorder}`,boxSizing:`border-box`,flexShrink:`0`})}makeDropBtn(e,t,n){let r=document.createElement(`button`);return r.textContent=e,this.applyDropBtnStyles(r,t,n),r}applyDropBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.ui.accentBg:`transparent`,color:n?t.ui.accentText:t.topBar.btnColor,border:`1px solid ${n?t.ui.accent:t.axisBorder}`,borderRadius:`5px`,padding:`3px 8px`,height:`24px`,fontSize:this.cfg.dropBtnFontSize,fontFamily:this.cfg.dropBtnFontFamily,cursor:`pointer`,outline:`none`,whiteSpace:`nowrap`,transition:`border-color 0.12s, background 0.12s`})}applyDurationBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.bottomBar.activeBtnBg:`transparent`,color:n?t.bottomBar.activeBtnText:t.bottomBar.btnColor,border:`1px solid ${n?t.bottomBar.activeBtnBorder:`transparent`}`,borderRadius:`4px`,padding:`2px 7px`,fontSize:this.cfg.dropBtnFontSize,fontFamily:this.cfg.dropBtnFontFamily,cursor:`pointer`,outline:`none`,transition:`background 0.15s, color 0.15s`,whiteSpace:`nowrap`})}applyIconBtnStyles(e,t,n){e.dataset.active=String(n),Object.assign(e.style,{background:n?t.ui.accentBg:`transparent`,color:n?t.ui.accentText:t.topBar.btnColor,border:`1px solid ${n?t.ui.accent:t.axisBorder}`,borderRadius:`5px`,width:`26px`,height:`26px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0`,flexShrink:`0`,transition:`border-color 0.12s, background 0.12s`})}},kt={"1D":`5m`,"5D":`15m`,"1M":`30m`,"3M":`30m`,"6M":`1D`,"1Y":`1D`,"5Y":`1W`,All:`1M`},At=[`1D`,`5D`,`1M`,`3M`,`6M`,`1Y`,`5Y`,`All`],jt=class{constructor(e,t,n,r,i=f,a=y.bottomBar){this.onDurationChange=e,this.buttons=new Map,this.activeDuration=t,this.theme=n,this.cfg=i,this.labels=a,this.map={...kt,...r},this.el=document.createElement(`div`),this.applyBarStyles(n);for(let e of At){var o;let r=document.createElement(`button`);r.textContent=(o=this.labels.durations[e])==null?e:o,this.applyButtonStyles(r,n,e===t),r.addEventListener(`click`,()=>{this.setActive(e),this.onDurationChange(e,this.map[e])}),this.buttons.set(e,r),this.el.appendChild(r)}}setTheme(e){this.theme=e,this.applyBarStyles(e);for(let[t,n]of this.buttons)this.applyButtonStyles(n,e,this.activeDuration!==null&&t===this.activeDuration)}setActive(e){if(this.activeDuration!==(e==null?null:e)){if(this.activeDuration){let e=this.buttons.get(this.activeDuration);e&&this.applyButtonStyles(e,this.theme,!1)}if(this.activeDuration=e==null?null:e,e){let t=this.buttons.get(e);t&&this.applyButtonStyles(t,this.theme,!0)}}}applyBarStyles(e){Object.assign(this.el.style,{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:`2px`,height:this.cfg.height,padding:`0 10px`,background:e.background,borderTop:`1px solid ${e.axisBorder}`,boxSizing:`border-box`,flexShrink:`0`})}applyButtonStyles(e,t,n){Object.assign(e.style,{background:n?t.bottomBar.activeBtnBg:`transparent`,color:n?t.bottomBar.activeBtnText:t.bottomBar.btnColor,border:`1px solid ${n?t.bottomBar.activeBtnBorder:`transparent`}`,borderRadius:`3px`,padding:`2px 7px`,fontSize:this.cfg.btnFontSize,fontFamily:this.cfg.btnFontFamily,cursor:`pointer`,outline:`none`,transition:`background 0.15s`})}},K={horizontal_line:`horizontalLine`,vertical_line:`verticalLine`,trend_line:`trendLine`,trend_angle:`trendAngle`,cross_line:`crossLine`,parallel_channel:`parallelChannel`,disjoint_channel:`disjointChannel`,flat_channel:`flatChannel`,fib_retracement:`fibRetracement`,fib_extension:`fibExtension`,fib_channel:`fibChannel`,fib_timezone:`fibTimezone`,fib_circles:`fibCircles`,fib_spiral:`fibSpiral`,fib_fan:`fibFan`,gann_fan:`gannFan`,gann_square:`gannSquare`,gann_box:`gannBox`,rectangle:`rectangle`,rotated_rectangle:`rotatedRectangle`,ellipse:`ellipse`,triangle:`triangle`,circle:`circle`,arc:`arc`,polyline:`polyline`,path:`path`,price_range:`priceRange`,date_range:`dateRange`,date_price_range:`datePriceRange`,ruler:`ruler`,pitchfork:`pitchfork`,schiff_pitchfork:`schiffPitchfork`,modified_schiff:`modifiedSchiff`,inside_pitchfork:`insidePitchfork`,fixed_range_vp:`fixedRangeVP`,anchored_vp:`anchoredVP`,volume_profile:`volumeProfile`,regression_trend:`regressionTrend`,text:`text`,callout:`callout`,price_label:`priceLabel`,arrow_marker:`arrowMarker`,flag:`flag`,price_note:`priceNote`,anchored_note:`anchoredNote`,arrow_up:`arrowUp`,arrow_down:`arrowDown`,head_shoulders:`headShoulders`,triangle_pattern:`trianglePattern`,three_drives:`threeDrives`,abcd_pattern:`abcdPattern`,cypher_pattern:`cypherPattern`,butterfly_pattern:`butterflyPattern`,bat_pattern:`batPattern`,gartley_pattern:`gartleyPattern`,crab_pattern:`crabPattern`,shark_pattern:`sharkPattern`,elliott_impulse:`elliottImpulse`,elliott_corrective:`elliottCorrective`,elliott_triangle:`elliottTriangle`,elliott_combination:`elliottCombination`,elliott_wxy:`elliottWxy`,brush:`brush`,highlighter:`highlighter`,ghost_feed:`ghostFeed`,projection:`projection`,sine_line:`sineLine`,cyclic_lines:`cyclicLines`,time_cycles:`timeCycles`,fib_projection:`fibProjection`,price_projection:`priceProjection`},Mt=[{id:`trend_lines`,name:`Trend Lines & Channels`,icon:`↗`,tools:[{id:`trend_line`,name:`Trend Line`,icon:`↗`,shortcut:`Alt+T`},{id:`trend_angle`,name:`Trend Angle`,icon:`∠`},{id:`horizontal_line`,name:`Horizontal Line`,icon:`—`,shortcut:`Alt+H`},{id:`vertical_line`,name:`Vertical Line`,icon:`⏐`,shortcut:`Alt+V`},{id:`cross_line`,name:`Cross Line`,icon:`✚`},{id:`parallel_channel`,name:`Parallel Channel`,icon:`⫿`},{id:`disjoint_channel`,name:`Disjoint Channel`,icon:`≠`},{id:`flat_channel`,name:`Flat Top/Bottom Channel`,icon:`⊓`}]},{id:`fibonacci_gann`,name:`Fibonacci & Gann Tools`,icon:`φ`,tools:[{id:`fib_retracement`,name:`Fibonacci Retracement`,icon:`φ`,shortcut:`Alt+F`},{id:`fib_extension`,name:`Fibonacci Extension`,icon:`φ`},{id:`fib_channel`,name:`Fibonacci Channel`,icon:`φ`},{id:`fib_timezone`,name:`Fibonacci Timezone`,icon:`φ`},{id:`fib_circles`,name:`Fibonacci Circles`,icon:`⊙`},{id:`fib_spiral`,name:`Fibonacci Spiral`,icon:`@`},{id:`fib_fan`,name:`Fibonacci Speed Resistance Fan`,icon:`⌇`},{id:`gann_fan`,name:`Gann Fan`,icon:`⌇`},{id:`gann_square`,name:`Gann Square`,icon:`⊞`},{id:`gann_box`,name:`Gann Box`,icon:`⊡`}]},{id:`geometric_shapes`,name:`Geometric Shapes`,icon:`▭`,tools:[{id:`rectangle`,name:`Rectangle`,icon:`▭`},{id:`rotated_rectangle`,name:`Rotated Rectangle`,icon:`◇`},{id:`ellipse`,name:`Ellipse`,icon:`⬭`},{id:`triangle`,name:`Triangle`,icon:`△`},{id:`circle`,name:`Circle`,icon:`○`},{id:`arc`,name:`Arc`,icon:`⌒`},{id:`polyline`,name:`Polyline`,icon:`⚡`},{id:`path`,name:`Path`,icon:`〰`}]},{id:`measurement_tools`,name:`Measurement Tools`,icon:`⇕`,tools:[{id:`price_range`,name:`Price Range`,icon:`⇕`},{id:`date_range`,name:`Date Range`,icon:`⇔`},{id:`date_price_range`,name:`Date & Price Range`,icon:`⊞`},{id:`ruler`,name:`Ruler`,icon:`⊢`}]},{id:`pitchfork_tools`,name:`Pitchfork Tools`,icon:`⑁`,tools:[{id:`pitchfork`,name:`Pitchfork`,icon:`⑁`},{id:`schiff_pitchfork`,name:`Schiff Pitchfork`,icon:`⑁`},{id:`modified_schiff`,name:`Modified Schiff Pitchfork`,icon:`⑁`},{id:`inside_pitchfork`,name:`Inside Pitchfork`,icon:`⑁`}]},{id:`volume_statistics`,name:`Volume & Statistical Tools`,icon:`▤`,tools:[{id:`fixed_range_vp`,name:`Fixed Range Volume Profile`,icon:`▤`},{id:`anchored_vp`,name:`Anchored Volume Profile`,icon:`▤`},{id:`volume_profile`,name:`Volume Profile`,icon:`▤`},{id:`regression_trend`,name:`Regression Trend`,icon:`↗`}]},{id:`annotation_tools`,name:`Annotation Tools`,icon:`A`,tools:[{id:`text`,name:`Text`,icon:`A`},{id:`callout`,name:`Callout`,icon:`⬕`},{id:`price_label`,name:`Price Label`,icon:`$`},{id:`arrow_marker`,name:`Arrow Marker`,icon:`→`},{id:`flag`,name:`Flag`,icon:`⚑`},{id:`price_note`,name:`Price Note`,icon:`≡`},{id:`anchored_note`,name:`Anchored Note`,icon:`⊕`},{id:`arrow_up`,name:`Arrow Up`,icon:`↑`},{id:`arrow_down`,name:`Arrow Down`,icon:`↓`}]},{id:`pattern_recognition`,name:`Pattern Recognition`,icon:`◬`,tools:[{id:`head_shoulders`,name:`Head & Shoulders`,icon:`⌢`},{id:`triangle_pattern`,name:`Triangle Pattern`,icon:`◬`},{id:`three_drives`,name:`3 Drives Pattern`,icon:`⋎`},{id:`abcd_pattern`,name:`ABCD Pattern`,icon:`⊿`},{id:`cypher_pattern`,name:`Cypher Pattern`,icon:`C`},{id:`butterfly_pattern`,name:`Butterfly Pattern`,icon:`⋈`},{id:`bat_pattern`,name:`Bat Pattern`,icon:`⌓`},{id:`gartley_pattern`,name:`Gartley Pattern`,icon:`G`},{id:`crab_pattern`,name:`Crab Pattern`,icon:`⊓`},{id:`shark_pattern`,name:`Shark Pattern`,icon:`⊳`}]},{id:`elliott_wave`,name:`Elliott Wave Tools`,icon:`∿`,tools:[{id:`elliott_impulse`,name:`Elliott Impulse (12345)`,icon:`∿`},{id:`elliott_corrective`,name:`Elliott Corrective (ABC)`,icon:`∿`},{id:`elliott_triangle`,name:`Elliott Wave Triangle`,icon:`△`},{id:`elliott_combination`,name:`Elliott Wave Combination`,icon:`∿`},{id:`elliott_wxy`,name:`Elliott Double Three (WXY)`,icon:`∿`}]},{id:`brush_highlighter`,name:`Brush & Highlighter`,icon:`∫`,tools:[{id:`brush`,name:`Brush`,icon:`∫`},{id:`highlighter`,name:`Highlighter`,icon:`▬`}]},{id:`advanced_tools`,name:`Advanced Tools`,icon:`⊛`,tools:[{id:`ghost_feed`,name:`Ghost Feed`,icon:`◑`},{id:`projection`,name:`Projection`,icon:`→`},{id:`sine_line`,name:`Sine Line`,icon:`∿`},{id:`cyclic_lines`,name:`Cyclic Lines`,icon:`⟳`},{id:`time_cycles`,name:`Time Cycles`,icon:`⊙`}]},{id:`price_projections`,name:`Price Projection Tools`,icon:`⊿`,tools:[{id:`fib_projection`,name:`Fibonacci Projection`,icon:`φ`},{id:`price_projection`,name:`Price Projection`,icon:`⊿`}]}],Nt=[{id:`undo`,icon:`↶`,title:`Undo (Ctrl+Z)`},{id:`redo`,icon:`↷`,title:`Redo (Ctrl+Y)`},{id:`delete_selected`,icon:`✕`,title:`Delete Selected (Del)`},{id:`clear_all`,icon:`⊡`,title:`Clear All`},{id:`toggle_visibility`,icon:`◌`,title:`Hide All`},{id:`toggle_lock`,icon:`⊠`,title:`Lock All`}],Pt=class{constructor(e,t,n,r,i=u,a=y.drawingToolbar){this.onToolChange=e,this.onAction=t,this.onMobileClose=n,this.activeTool=null,this.openCategoryId=null,this.openActionsMenu=!1,this.catButtons=new Map,this.drawingsHidden=!1,this.drawingsLocked=!1,this.mobileMode=!1,this.settingsVisible=!0,this.theme=r,this.cfg=i,this.labels=a,this.el=document.createElement(`div`),this.flyout=document.createElement(`div`),this.applyBarStyles(),this.applyWidth(),this.buildToolbar(),this.buildFlyout(),document.body.appendChild(this.flyout),this.docClickHandler=e=>{!this.el.contains(e.target)&&!this.flyout.contains(e.target)&&this.closeFlyout()},document.addEventListener(`click`,this.docClickHandler,!0)}setTheme(e){this.theme=e,this.closeFlyout(),this.applyBarStyles(),this.applyWidth(),this.buildFlyout(),this.applyScrollBtnStyles(this.scrollUpBtn,`up`),this.applyScrollBtnStyles(this.scrollDownBtn,`down`),this.topSection.innerHTML=``,this.topSection.appendChild(this.buildMobileActionsBtn());for(let[e,n]of this.catButtons){var t;let r=this.activeTool!==null&&((t=Mt.find(t=>t.id===e))==null?void 0:t.tools.some(e=>K[e.id]===this.activeTool))===!0;this.applyCatBtnStyles(n,r)}}setActiveTool(e){if(this.activeTool!==null){let e=Mt.find(e=>e.tools.some(e=>K[e.id]===this.activeTool));e&&this.applyCatBtnStyles(this.catButtons.get(e.id),!1)}if(this.activeTool=e,e!==null){let t=Mt.find(t=>t.tools.some(t=>K[t.id]===e));t&&this.applyCatBtnStyles(this.catButtons.get(t.id),!0)}}setVisible(e){this.settingsVisible=e,this.applyWidth()}setMobileMode(e){if(this.mobileMode===e)return;this.mobileMode=e,this.closeFlyout(),this.topSection.innerHTML=``,this.topSection.appendChild(this.buildMobileActionsBtn()),this.catButtons.clear();let t=this.makeGrid();if(this.populateCategoryGrid(t),this.toolsGrid.replaceWith(t),this.toolsGrid=t,this.activeTool!==null){let e=Mt.find(e=>e.tools.some(e=>K[e.id]===this.activeTool));if(e){let t=this.catButtons.get(e.id);t&&this.applyCatBtnStyles(t,!0)}}e?(Object.assign(this.el.style,{position:`absolute`,left:`0`,top:`0`,height:`100%`,zIndex:`50`}),this.settingsVisible=!1):(Object.assign(this.el.style,{position:``,left:``,top:``,height:``,zIndex:``}),this.settingsVisible=!0),this.applyBarStyles(),this.applyWidth(),requestAnimationFrame(()=>this.updateScrollIndicators())}reparentFlyout(e){this.flyout.parentElement!==e&&e.appendChild(this.flyout)}destroy(){this.flyout.remove(),document.removeEventListener(`click`,this.docClickHandler,!0)}get barWidth(){return this.cfg.barPadding*2+this.cfg.iconBtnSize}applyBarStyles(){Object.assign(this.el.style,{display:`flex`,flexDirection:`column`,flexShrink:`0`,position:`relative`,height:`100%`,background:this.theme.background,borderRight:`1px solid ${this.theme.axisBorder}`,boxSizing:`border-box`,userSelect:`none`,fontFamily:this.cfg.flyoutLabelFontFamily,overflow:`hidden`,transition:`width 0.2s ease`})}applyWidth(){this.settingsVisible?this.el.style.width=`${this.barWidth}px`:this.el.style.width=`0`}buildToolbar(){this.topSection=document.createElement(`div`),Object.assign(this.topSection.style,{borderBottom:`1px solid ${this.theme.axisBorder}`,padding:`10px ${this.cfg.barPadding}px 10px`,boxSizing:`border-box`,flexShrink:`0`}),this.topSection.appendChild(this.buildMobileActionsBtn()),this.el.appendChild(this.topSection),this.scrollUpBtn=document.createElement(`button`),this.applyScrollBtnStyles(this.scrollUpBtn,`up`),this.scrollUpBtn.addEventListener(`click`,()=>{this.toolsArea.scrollBy({top:-(this.cfg.iconBtnSize+this.cfg.btnGap)*3,behavior:`smooth`})}),this.el.appendChild(this.scrollUpBtn),this.toolsArea=document.createElement(`div`),Object.assign(this.toolsArea.style,{flex:`1`,overflowY:`scroll`,padding:`10px ${this.cfg.barPadding}px 4px`,boxSizing:`border-box`,scrollbarWidth:`none`,msOverflowStyle:`none`});let e=document.createElement(`style`);e.textContent=`.lb-tools::-webkit-scrollbar{display:none}`,document.head.appendChild(e),this.toolsArea.classList.add(`lb-tools`),this.toolsGrid=this.makeGrid(),this.populateCategoryGrid(this.toolsGrid),this.toolsArea.appendChild(this.toolsGrid),this.toolsArea.addEventListener(`scroll`,()=>this.updateScrollIndicators()),this.el.appendChild(this.toolsArea),this.scrollDownBtn=document.createElement(`button`),this.applyScrollBtnStyles(this.scrollDownBtn,`down`),this.scrollDownBtn.addEventListener(`click`,()=>{this.toolsArea.scrollBy({top:(this.cfg.iconBtnSize+this.cfg.btnGap)*3,behavior:`smooth`})}),this.el.appendChild(this.scrollDownBtn),requestAnimationFrame(()=>this.updateScrollIndicators())}buildMobileActionsBtn(){let e=document.createElement(`button`);return e.title=this.labels.actions.moreActions,e.innerHTML=wt,this.applyActionBtnStyles(e,!1),this.addBtnHover(e),e.addEventListener(`click`,t=>{t.stopPropagation(),this.toggleActionsFlyout(e)}),e}populateCategoryGrid(e){this.catButtons.clear();for(let n of Mt){var t;let r=document.createElement(`button`);r.title=this.getCategoryLabel(n.id),r.innerHTML=(t=lt[n.id])==null?n.icon:t,this.applyCatBtnStyles(r,!1),this.addBtnHover(r),r.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleCategory(n,r)}),this.catButtons.set(n.id,r),e.appendChild(r)}}updateScrollIndicators(){let{scrollTop:e,scrollHeight:t,clientHeight:n}=this.toolsArea,r=e>2,i=e+n<t-2;this.mobileMode?(this.scrollUpBtn.style.display=`flex`,this.scrollDownBtn.style.display=`flex`,this.scrollUpBtn.style.opacity=r?`0.9`:`0.2`,this.scrollDownBtn.style.opacity=i?`0.9`:`0.2`):(this.scrollUpBtn.style.display=r?`flex`:`none`,this.scrollDownBtn.style.display=i?`flex`:`none`)}buildFlyout(){Object.assign(this.flyout.style,{position:`fixed`,zIndex:`9999`,display:`none`,background:this.theme.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`6px`,padding:`6px 0`,minWidth:`200px`,boxShadow:`0 4px 16px rgba(0,0,0,0.45)`,fontFamily:this.cfg.flyoutLabelFontFamily,fontSize:this.cfg.flyoutLabelFontSize})}makeGrid(e=1){let t=document.createElement(`div`);return Object.assign(t.style,{display:`grid`,gridTemplateColumns:`repeat(${e}, ${this.cfg.iconBtnSize}px)`,gap:`${this.cfg.btnGap}px`}),t}applyScrollBtnStyles(e,t){e.innerHTML=t===`up`?St:Ct,e.title=t===`up`?this.labels.scrollUp:this.labels.scrollDown;let n=e.style.display||`none`;Object.assign(e.style,{display:n,width:`100%`,height:`${this.cfg.scrollBtnHeight}px`,background:this.theme.background,color:this.theme.tooltip.text,border:`none`,borderBottom:t===`up`?`1px solid ${this.theme.axisBorder}`:`none`,borderTop:t===`down`?`1px solid ${this.theme.axisBorder}`:`none`,fontSize:this.cfg.scrollBtnFontSize,cursor:`pointer`,outline:`none`,alignItems:`center`,justifyContent:`center`,flexShrink:`0`,opacity:`0.6`})}toggleCategory(e,t){if(this.openCategoryId===e.id){this.closeFlyout();return}this.openCategoryId=e.id;let n=t.getBoundingClientRect();Object.assign(this.flyout.style,{display:`block`,left:`${n.right+4}px`,top:`${n.top}px`}),this.flyout.innerHTML=``;let r=document.createElement(`div`);Object.assign(r.style,{padding:`4px 12px 8px`,fontSize:this.cfg.flyoutHeadingFontSize,fontWeight:`600`,letterSpacing:this.cfg.flyoutHeadingLetterSpacing,color:this.theme.drawingToolbar.flyoutHeadingColor,textTransform:`uppercase`,borderBottom:`1px solid ${this.theme.axisBorder}`,marginBottom:`4px`,opacity:`0.6`}),r.textContent=this.getCategoryLabel(e.id),this.flyout.appendChild(r);for(let t of e.tools){var i,a;let n=t.id in K,r=this.activeTool!==null&&K[t.id]===this.activeTool,o=document.createElement(`button`);Object.assign(o.style,{width:`100%`,padding:`5px 12px`,background:r?this.theme.ui.accentBg:`transparent`,border:`none`,borderLeft:r?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,color:r?this.theme.ui.accentText:n?this.theme.drawingToolbar.flyoutLabelColor:this.theme.ui.disabledText,fontSize:this.cfg.flyoutLabelFontSize,fontFamily:this.cfg.flyoutLabelFontFamily,textAlign:`left`,cursor:n?`pointer`:`default`,display:`flex`,alignItems:`center`,gap:`8px`,boxSizing:`border-box`});let s=document.createElement(`span`);Object.assign(s.style,{width:`16px`,display:`flex`,alignItems:`center`,flexShrink:`0`}),s.innerHTML=(i=(a=mt[t.id])==null?lt[e.id]:a)==null?t.icon:i;let c=document.createElement(`span`);if(c.style.flex=`1`,c.textContent=this.getToolLabel(t),o.appendChild(s),o.appendChild(c),t.shortcut&&n){let e=document.createElement(`span`);Object.assign(e.style,{fontSize:this.cfg.shortcutFontSize,color:this.theme.ui.disabledText,flexShrink:`0`}),e.textContent=t.shortcut,o.appendChild(e)}else if(!n){let e=document.createElement(`span`);Object.assign(e.style,{fontSize:this.cfg.soonBadgeFontSize,color:this.theme.ui.soonBadgeText,flexShrink:`0`}),e.textContent=this.labels.soonBadge,o.appendChild(e)}if(n){if(!r){let e=this.theme.ui.accentBg;o.addEventListener(`mouseenter`,()=>{o.style.background=e}),o.addEventListener(`mouseleave`,()=>{o.style.background=`transparent`})}o.addEventListener(`click`,()=>{let e=K[t.id],n=this.activeTool===e?null:e;if(this.setActiveTool(n),this.onToolChange(n),this.closeFlyout(),this.mobileMode&&n!==null){var r;this.settingsVisible=!1,this.applyWidth(),(r=this.onMobileClose)==null||r.call(this)}})}this.flyout.appendChild(o)}requestAnimationFrame(()=>{let e=this.flyout.getBoundingClientRect();e.bottom>window.innerHeight-8&&(this.flyout.style.top=`${window.innerHeight-e.height-8}px`)})}closeFlyout(){this.flyout.style.display=`none`,this.openCategoryId=null,this.openActionsMenu=!1}toggleActionsFlyout(e){if(this.openActionsMenu){this.closeFlyout();return}this.closeFlyout(),this.openActionsMenu=!0,this.flyout.innerHTML=``;let t=document.createElement(`div`);Object.assign(t.style,{padding:`4px 12px 8px`,fontSize:this.cfg.flyoutHeadingFontSize,fontWeight:`600`,letterSpacing:this.cfg.flyoutHeadingLetterSpacing,color:this.theme.drawingToolbar.flyoutHeadingColor,textTransform:`uppercase`,borderBottom:`1px solid ${this.theme.axisBorder}`,marginBottom:`4px`,opacity:`0.6`}),t.textContent=this.labels.actions.moreActions,this.flyout.appendChild(t);for(let e of Nt){var n,r,i;let t=e.id===`toggle_visibility`?this.drawingsHidden:e.id===`toggle_lock`?this.drawingsLocked:!1,a=t?(n=(r=dt[e.id])==null?ut[e.id]:r)==null?e.icon:n:(i=ut[e.id])==null?e.icon:i,o=e.id===`toggle_visibility`?this.drawingsHidden?this.labels.actions.showAll:this.labels.actions.hideAll:e.id===`toggle_lock`?this.drawingsLocked?this.labels.actions.unlockAll:this.labels.actions.lockAll:this.getActionLabel(e.id),s=document.createElement(`button`);Object.assign(s.style,{width:`100%`,padding:`6px 12px`,background:t?this.theme.ui.accentBg:`transparent`,border:`none`,borderLeft:t?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,color:t?this.theme.ui.accentText:this.theme.drawingToolbar.flyoutLabelColor,fontSize:this.cfg.flyoutLabelFontSize,fontFamily:this.cfg.flyoutLabelFontFamily,textAlign:`left`,cursor:`pointer`,display:`flex`,alignItems:`center`,gap:`8px`,boxSizing:`border-box`});let c=document.createElement(`span`);Object.assign(c.style,{width:`16px`,display:`flex`,alignItems:`center`,flexShrink:`0`}),c.innerHTML=a;let l=document.createElement(`span`);l.style.flex=`1`,l.textContent=o,s.appendChild(c),s.appendChild(l);let u=this.theme.ui.accentBg;t||(s.addEventListener(`mouseenter`,()=>{s.style.background=u}),s.addEventListener(`mouseleave`,()=>{s.style.background=`transparent`})),s.addEventListener(`click`,()=>{e.id===`toggle_visibility`?(this.drawingsHidden=!this.drawingsHidden,this.onAction(this.drawingsHidden?`hide_all`:`show_all`)):e.id===`toggle_lock`?(this.drawingsLocked=!this.drawingsLocked,this.onAction(this.drawingsLocked?`lock_all`:`unlock_all`)):this.onAction(e.id),this.closeFlyout()}),this.flyout.appendChild(s)}let a=e.getBoundingClientRect(),o=this.el.getBoundingClientRect();Object.assign(this.flyout.style,{display:`block`,left:`${o.right+4}px`,top:`${a.top}px`}),requestAnimationFrame(()=>{let e=this.flyout.getBoundingClientRect();e.bottom>window.innerHeight-8&&(this.flyout.style.top=`${window.innerHeight-e.height-8}px`)})}getCategoryLabel(e){let t={trend_lines:`trendLines`,fibonacci_gann:`fibonacci`,geometric_shapes:`shapes`,measurement_tools:`measurements`,pitchfork_tools:`pitchforks`,volume_statistics:`volume`,annotation_tools:`annotations`,pattern_recognition:`patterns`,elliott_wave:`elliott`,brush_highlighter:`brushes`,advanced_tools:`advanced`,price_projections:`priceProjection`}[e];return t?this.labels.categories[t]:e}getToolLabel(e){let t=K[e.id];return t&&this.labels.tools[t]?this.labels.tools[t]:e.name}getActionLabel(e){let t={undo:`undo`,redo:`redo`,delete_selected:`deleteSelected`,clear_all:`clearAll`,toggle_visibility:`hideAll`,toggle_lock:`lockAll`}[e];return t?this.labels.actions[t]:e}addBtnHover(e){e.addEventListener(`mouseenter`,()=>{e.dataset.active!==`true`&&(e.style.background=this.theme.ui.accentBg)}),e.addEventListener(`mouseleave`,()=>{e.dataset.active!==`true`&&(e.style.background=`transparent`)})}applyCatBtnStyles(e,t){e.dataset.active=String(t),Object.assign(e.style,{width:`${this.cfg.iconBtnSize}px`,height:`${this.cfg.iconBtnSize}px`,background:t?this.theme.ui.accentBgStrong:`transparent`,color:t?this.theme.drawingToolbar.activeIconColor:this.theme.drawingToolbar.iconColor,border:`1px solid ${t?this.theme.ui.accent:this.theme.axisBorder}`,borderRadius:`5px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0`})}applyActionBtnStyles(e,t){e.dataset.active=String(t),Object.assign(e.style,{width:`${this.cfg.iconBtnSize}px`,height:`${this.cfg.iconBtnSize}px`,background:t?this.theme.ui.accentBg:`transparent`,color:t?this.theme.drawingToolbar.activeIconColor:this.theme.drawingToolbar.iconColor,border:`1px solid ${t?this.theme.ui.accent:this.theme.axisBorder}`,borderRadius:`5px`,cursor:`pointer`,outline:`none`,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0`})}},Ft=6,It=class{constructor(e){this.type=`horizontalLine`,this.id=`hl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o,s=2){let c=this.points[0].price,l=t.yToPixel(c,r,a);e.save(),e.strokeStyle=`#e8b84b`,e.lineWidth=o?1.5:1,o||e.setLineDash([6,3]),e.beginPath(),e.moveTo(0,l),e.lineTo(i,l),e.stroke(),e.setLineDash([]);let u=c.toFixed(s);e.font=`10px 'Inter', system-ui, sans-serif`;let d=e.measureText(u).width;e.fillStyle=`#e8b84b`,e.fillText(u,i-d-4,l-3),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.yToPixel(this.points[0].price,i,o);return Math.abs(t-s)<=Ft}getHandle(){return null}},Lt=6,Rt=class{constructor(e){this.type=`verticalLine`,this.id=`vl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i);e.save(),e.strokeStyle=`#e8b84b`,e.lineWidth=o?1.5:1,o||e.setLineDash([6,3]),e.beginPath(),e.moveTo(s,0),e.lineTo(s,a),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a);return Math.abs(e-s)<=Lt}getHandle(){return null}},zt=6;function Bt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Vt=class{constructor(e){this.type=`trendLine`,this.id=`tl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.strokeStyle=`#26c6da`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke();for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#26c6da`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return Bt(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=zt}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=zt+2)return{pointIndex:n,cursor:`grab`};return null}},Ht=6;function Ut(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Wt=class{constructor(e){this.type=`trendAngle`,this.id=`ta_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.atan2(-(f-u),d-l)*180/Math.PI,m=Math.atan2(-(f-u),d-l);e.save(),e.strokeStyle=`#26c6da`,e.fillStyle=`#26c6da`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.beginPath(),e.arc(l,u,28,-m,0,m<0),e.stroke(),e.setLineDash([4,3]),e.globalAlpha=.5,e.beginPath(),e.moveTo(l,u),e.lineTo(l+28+8,u),e.stroke(),e.setLineDash([]),e.globalAlpha=1;let h=l+28+6,g=u-(m>=0?6:-14);if(e.font=`bold 11px 'Inter', system-ui, sans-serif`,e.fillText(`${p.toFixed(1)}°`,h,g),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return Ut(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=Ht}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Ht+2)return{pointIndex:n,cursor:`grab`};return null}},Gt=6,Kt=class{constructor(e){this.type=`crossLine`,this.id=`xl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=this.points[0],c=t.xToPixel(s.barIndex,n,i),l=t.yToPixel(s.price,r,a);e.save(),e.strokeStyle=`#78909c`,e.lineWidth=o?1.5:1,o||e.setLineDash([6,3]),e.beginPath(),e.moveTo(0,l),e.lineTo(i,l),e.stroke(),e.beginPath(),e.moveTo(c,0),e.lineTo(c,a),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){let s=this.points[0],c=n.xToPixel(s.barIndex,r,a),l=n.yToPixel(s.price,i,o);return Math.abs(t-l)<=Gt||Math.abs(e-c)<=Gt}getHandle(){return null}},qt=6;function Jt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Yt=class{constructor(e){this.type=`parallelChannel`,this.requiredPoints=3,this.id=`pch_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a),m=0;if(l){let e=(s.price+c.price)/2,n=t.yToPixel(e,r,a);m=t.yToPixel(l.price,r,a)-n}let h=u,g=d+m,_=f,v=p+m;if(e.save(),e.strokeStyle=`#26c6da`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.lineTo(_,v),e.lineTo(h,g),e.closePath(),e.fillStyle=`rgba(38, 198, 218, 0.08)`,e.fill(),e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke(),l&&(e.beginPath(),e.moveTo(h,g),e.lineTo(_,v),e.stroke()),o){let o=[[u,d],[f,p]];if(l){let e=t.xToPixel(l.barIndex,n,i),s=t.yToPixel(l.price,r,a);o.push([e,s])}e.fillStyle=`#26c6da`;for(let[t,n]of o)e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o);if(Jt(e,t,u,d,f,p)<=qt)return!0;if(l){let r=(s.price+c.price)/2,a=n.yToPixel(r,i,o),m=n.yToPixel(l.price,i,o)-a;if(Jt(e,t,u,d+m,f,p+m)<=qt)return!0}return!1}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=qt+2)return{pointIndex:n,cursor:`grab`};return null}},Xt=6;function Zt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Qt=class{constructor(e){this.type=`flatChannel`,this.requiredPoints=3,this.id=`fch_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(s.price,r,a),p=l?l.price-s.price:0,m=t.yToPixel(s.price+p,r,a);if(e.save(),e.strokeStyle=`#ab47bc`,e.lineWidth=o?1.5:1,e.beginPath(),e.rect(Math.min(u,d),Math.min(f,m),Math.abs(d-u),Math.abs(m-f)),e.fillStyle=`rgba(171, 71, 188, 0.08)`,e.fill(),e.beginPath(),e.moveTo(u,f),e.lineTo(d,f),e.stroke(),l&&(e.beginPath(),e.moveTo(u,m),e.lineTo(d,m),e.stroke()),o){e.fillStyle=`#ab47bc`;let o=[[u,f],[d,f]];if(l){let e=t.xToPixel(l.barIndex,n,i),s=t.yToPixel(l.price,r,a);o.push([e,s])}for(let[t,n]of o)e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(s.price,i,o);if(Zt(e,t,u,f,d,f)<=Xt)return!0;if(l){let r=l.price-s.price,a=n.yToPixel(s.price+r,i,o);if(Zt(e,t,u,a,d,a)<=Xt)return!0}return!1}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Xt+2)return{pointIndex:n,cursor:`grab`};return null}},$t=6;function en(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var tn=class{constructor(e){this.type=`disjointChannel`,this.requiredPoints=4,this.id=`dch_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=e=>[t.xToPixel(e.barIndex,n,i),t.yToPixel(e.price,r,a)],[c,l,u,d]=this.points,[f,p]=s(c),[m,h]=s(l);if(e.save(),e.strokeStyle=`#ef9a9a`,e.lineWidth=o?1.5:1,u&&d){let[t,n]=s(u),[r,i]=s(d);if(e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.lineTo(r,i),e.lineTo(t,n),e.closePath(),e.fillStyle=`rgba(239, 154, 154, 0.1)`,e.fill(),e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke(),o){e.fillStyle=`#ef9a9a`;for(let[a,o]of[[f,p],[m,h],[t,n],[r,i]])e.beginPath(),e.arc(a,o,4,0,Math.PI*2),e.fill()}}else if(u){let[t,n]=s(u);if(e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(t,n),e.lineTo(t,n),e.stroke(),o){e.fillStyle=`#ef9a9a`;for(let[r,i]of[[f,p],[m,h],[t,n]])e.beginPath(),e.arc(r,i,4,0,Math.PI*2),e.fill()}}else if(e.beginPath(),e.moveTo(f,p),e.lineTo(m,h),e.stroke(),o){e.fillStyle=`#ef9a9a`;for(let[t,n]of[[f,p],[m,h]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=e=>[n.xToPixel(e.barIndex,r,a),n.yToPixel(e.price,i,o)],[c,l,u,d]=this.points,[f,p]=s(c),[m,h]=s(l);if(en(e,t,f,p,m,h)<=$t)return!0;if(u&&d){let[n,r]=s(u),[i,a]=s(d);if(en(e,t,n,r,i,a)<=$t)return!0}return!1}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=$t+2)return{pointIndex:n,cursor:`grab`};return null}},nn=[0,.236,.382,.5,.618,.786,1],rn=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`],an=6,on=class{constructor(e){this.type=`fibRetracement`,this.id=`fib_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=Math.max(c.price,l.price),d=u-Math.min(c.price,l.price),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a),m=t.xToPixel(l.barIndex,n,i),h=t.yToPixel(l.price,r,a),g=Math.min(f,m),_=Math.max(f,m);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`;for(let n=0;n<nn.length;n++){let i=nn[n],c=u-d*i,l=t.yToPixel(c,r,a),f=rn[n],p=o?`cc`:`99`;e.strokeStyle=f+p,e.lineWidth=o?1.5:1,e.setLineDash(i===0||i===1?[]:[4,3]),e.beginPath(),e.moveTo(g,l),e.lineTo(_,l),e.stroke(),e.setLineDash([]);let m=`${`${(i*100).toFixed(1)}%`} ${c.toFixed(s)}`;e.fillStyle=f+p,e.fillText(m,g+4,l-3)}for(let[t,n]of[[f,p],[m,h]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=Math.max(this.points[0].price,this.points[1].price),c=s-Math.min(this.points[0].price,this.points[1].price);for(let e of nn){let r=s-c*e,a=n.yToPixel(r,i,o);if(Math.abs(t-a)<=an)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=an+2)return{pointIndex:n,cursor:`grab`};return null}},sn=6,cn=[0,.382,.618,1,1.382,1.618,2,2.618],ln=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`,`#ef5350`],un=class{constructor(e){this.type=`fibExtension`,this.requiredPoints=3,this.id=`fext_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){let[c,l,u]=this.points,d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=t.xToPixel(l.barIndex,n,i),m=t.yToPixel(l.price,r,a);if(!u){e.save(),e.strokeStyle=`#888888aa`,e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.setLineDash([]),e.fillStyle=`#e8b84b`,e.beginPath(),e.arc(d,f,3,0,Math.PI*2),e.fill(),e.restore();return}let h=t.xToPixel(u.barIndex,n,i),g=t.yToPixel(u.price,r,a),_=Math.min(d,p,h),v=Math.max(d,p,h),y=l.price-c.price;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.strokeStyle=`#888888aa`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.beginPath(),e.moveTo(p,m),e.lineTo(h,g),e.stroke(),e.setLineDash([]);for(let n=0;n<cn.length;n++){let i=cn[n],c=u.price+i*y,l=t.yToPixel(c,r,a),d=ln[n],f=o?`cc`:`99`;e.strokeStyle=d+f,e.setLineDash(i===0||i===1?[]:[4,3]),e.beginPath(),e.moveTo(_,l),e.lineTo(v,l),e.stroke(),e.setLineDash([]);let p=`${`${(i*100).toFixed(1)}%`} ${c.toFixed(s)}`;e.fillStyle=d+f,e.fillText(p,_+4,l-3)}for(let[t,n]of[[d,f],[p,m],[h,g]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=c.price-s.price;for(let e of cn){let r=l.price+e*u,a=n.yToPixel(r,i,o);if(Math.abs(t-a)<=sn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;let s=this.points.map(e=>({px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=sn+2)return{pointIndex:n,cursor:`grab`};return null}},dn=6,fn=[0,.236,.382,.5,.618,.786,1],pn=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`];function mn(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var hn=class{constructor(e){this.type=`fibChannel`,this.requiredPoints=3,this.id=`fchann_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){let[c,l,u]=this.points,d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=t.xToPixel(l.barIndex,n,i),m=t.yToPixel(l.price,r,a);if(!u){e.save(),e.strokeStyle=`#888888aa`,e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.setLineDash([]),e.fillStyle=`#e8b84b`,e.beginPath(),e.arc(d,f,3,0,Math.PI*2),e.fill(),e.restore();return}let h=t.xToPixel(u.barIndex,n,i),g=t.yToPixel(u.price,r,a),_=p-d,v=m-f,y=Math.hypot(_,v);if(y===0)return;let b=-v/y,x=_/y,S=(h-d)*b+(g-f)*x;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;for(let t=0;t<fn.length;t++){let n=fn[t],r=n*S,i=d+r*b,a=f+r*x,s=p+r*b,c=m+r*x,l=pn[t],u=o?`cc`:`99`;e.strokeStyle=l+u,e.setLineDash(n===0||n===1?[]:[4,3]),e.beginPath(),e.moveTo(i,a),e.lineTo(s,c),e.stroke(),e.setLineDash([]);let h=`${(n*100).toFixed(1)}%`;e.fillStyle=l+u,e.fillText(h,s+4,c+3)}e.beginPath(),e.arc(h,g,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();for(let[t,n]of[[d,f],[p,m]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.strokeStyle=`#888888aa`,e.setLineDash([3,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(h,g),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=f-u,_=p-d,v=Math.hypot(g,_);if(v===0)return!1;let y=-_/v,b=g/v,x=(m-u)*y+(h-d)*b;for(let n of fn){let r=n*x;if(mn(e,t,u+r*y,d+r*b,f+r*y,p+r*b)<=dn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;let s=this.points.map(e=>({px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=dn+2)return{pointIndex:n,cursor:`grab`};return null}},gn=6,_n=[1,2,3,5,8,13,21,34,55,89],vn=class{constructor(e){this.type=`fibTimezone`,this.id=`ftz_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=c.barIndex-s.barIndex,u=t.xToPixel(s.barIndex,n,i),d=t.xToPixel(c.barIndex,n,i);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;let f=`#e8b84b`,p=o?`cc`:`88`;e.strokeStyle=f+p,e.setLineDash([3,3]),e.beginPath(),e.moveTo(u,0),e.lineTo(u,a),e.stroke(),e.beginPath(),e.moveTo(d,0),e.lineTo(d,a),e.stroke(),e.setLineDash([]);for(let r of _n){let o=s.barIndex+r*l,c=t.xToPixel(o,n,i);c<-50||c>i+50||(e.strokeStyle=f+p,e.setLineDash([5,3]),e.beginPath(),e.moveTo(c,0),e.lineTo(c,a),e.stroke(),e.setLineDash([]),e.fillStyle=f+p,e.fillText(String(r),c+3,12))}let m=t.yToPixel(s.price,r,a),h=t.yToPixel(c.price,r,a);for(let[t,n]of[[u,m],[d,h]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=c.barIndex-s.barIndex,u=n.xToPixel(s.barIndex,r,a);if(Math.abs(e-u)<=gn)return!0;for(let t of _n){let i=s.barIndex+t*l,o=n.xToPixel(i,r,a);if(Math.abs(e-o)<=gn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=gn+2)return{pointIndex:n,cursor:`grab`};return null}},yn=6,bn=[.236,.382,.5,.618,.786,1,1.618,2.618],xn=[`#ef5350`,`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`,`#ef5350`],Sn=class{constructor(e){this.type=`fibCircles`,this.id=`fcirc_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.hypot(d-l,f-u);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;for(let t=0;t<bn.length;t++){let n=bn[t],r=n*p,i=xn[t%xn.length],a=o?`cc`:`88`;e.strokeStyle=i+a,e.beginPath(),e.arc(l,u,r,0,Math.PI*2),e.stroke(),e.fillStyle=i+a,e.fillText(`${(n*100).toFixed(1)}%`,l+3,u-r+12)}e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.strokeStyle=`#88888866`,e.setLineDash([3,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.hypot(d-l,f-u),m=Math.hypot(e-l,t-u);for(let e of bn){let t=e*p;if(Math.abs(m-t)<=yn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o),l=n.xToPixel(this.points[1].barIndex,r,a),u=n.yToPixel(this.points[1].price,i,o);return Math.hypot(e-s,t-c)<=yn+2?{pointIndex:0,cursor:`move`}:Math.hypot(e-l,t-u)<=yn+2?{pointIndex:1,cursor:`grab`}:null}},Cn=6,wn=[1,1,2,3,5,8,13,21],Tn=class{constructor(e){this.type=`fibSpiral`,this.id=`fspi_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}computeArcs(e,t,n,r){let i=Math.hypot(n,r)/wn[wn.length-1],a=Math.atan2(r,n),o=[],s=e,c=t,l=a;for(let e=wn.length-1;e>=0;e--){let t=wn[e]*i,n=l+Math.PI,r=n+Math.PI/2;if(o.unshift({ox:s,oy:c,r:t,startAngle:n,endAngle:r}),e>0){let n=wn[e-1]*i,r=l-Math.PI/2;s+=(t-n)*Math.cos(r),c+=(t-n)*Math.sin(r),l-=Math.PI/2}}return o}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=d-l,m=f-u;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.strokeStyle=o?`#e8b84bcc`:`#e8b84b88`,e.lineWidth=o?1.5:1;let h=this.computeArcs(l,u,p,m);e.beginPath();for(let t=0;t<h.length;t++){let n=h[t];if(t===0){let t=n.ox+n.r*Math.cos(n.startAngle),r=n.oy+n.r*Math.sin(n.startAngle);e.moveTo(t,r)}e.arc(n.ox,n.oy,n.r,n.startAngle,n.endAngle,!1)}e.stroke(),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill(),e.strokeStyle=`#88888866`,e.setLineDash([3,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=d-l,m=f-u,h=this.computeArcs(l,u,p,m);for(let n of h){let r=n.endAngle-n.startAngle;for(let i=0;i<=16;i++){let a=i/16,o=n.startAngle+a*r,s=n.ox+n.r*Math.cos(o),c=n.oy+n.r*Math.sin(o);if(Math.hypot(e-s,t-c)<=Cn)return!0}}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o),l=n.xToPixel(this.points[1].barIndex,r,a),u=n.yToPixel(this.points[1].price,i,o);return Math.hypot(e-s,t-c)<=Cn+2?{pointIndex:0,cursor:`move`}:Math.hypot(e-l,t-u)<=Cn+2?{pointIndex:1,cursor:`grab`}:null}},En=6,Dn=[.236,.382,.5,.618,.786],On=[`#e8b84b`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`];function kn(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function An(e,t,n,r,i,a){let o=n-e,s=r-t;if(o===0&&s===0)return[n,r];let c=1/0;return o>0&&(c=Math.min(c,(i-e)/o)),o<0&&(c=Math.min(c,(0-e)/o)),s>0&&(c=Math.min(c,(a-t)/s)),s<0&&(c=Math.min(c,(0-t)/s)),[e+c*o,t+c*s]}var jn=class{constructor(e){this.type=`fibFan`,this.id=`ffan_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.strokeStyle=`#888888aa`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]);let p=c.price-s.price;for(let n=0;n<Dn.length;n++){let c=Dn[n],f=On[n],m=o?`cc`:`99`,h=s.price+c*p,[g,_]=An(l,u,d,t.yToPixel(h,r,a),i,a);e.strokeStyle=f+m,e.beginPath(),e.moveTo(l,u),e.lineTo(g,_),e.stroke(),e.fillStyle=f+m,e.fillText(`${(c*100).toFixed(1)}%`,Math.min(g-32,i-40),_-3)}for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=c.price-s.price;for(let r of Dn){let c=s.price+r*f,[p,m]=An(l,u,d,n.yToPixel(c,i,o),a,o);if(kn(e,t,l,u,p,m)<=En)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=En+2)return{pointIndex:n,cursor:`grab`};return null}},Mn=6,Nn=[0,.618,1,1.272,1.618,2,2.618],Pn=[`#ef5350`,`#26a69a`,`#2196f3`,`#26a69a`,`#e8b84b`,`#ef5350`,`#ef5350`],Fn=class{constructor(e){this.type=`fibProjection`,this.requiredPoints=3,this.id=`fproj_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){let[c,l,u]=this.points,d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=t.xToPixel(l.barIndex,n,i),m=t.yToPixel(l.price,r,a);if(!u){e.save(),e.strokeStyle=`#888888aa`,e.lineWidth=1,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.setLineDash([]),e.fillStyle=`#e8b84b`,e.beginPath(),e.arc(d,f,3,0,Math.PI*2),e.fill(),e.restore();return}let h=t.xToPixel(u.barIndex,n,i),g=t.yToPixel(u.price,r,a),_=Math.min(d,h),v=Math.max(d,h),y=l.price-c.price;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.strokeStyle=`#888888aa`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(p,m),e.stroke(),e.beginPath(),e.moveTo(p,m),e.lineTo(h,g),e.stroke(),e.setLineDash([]);for(let n=0;n<Nn.length;n++){let i=Nn[n],c=u.price+i*y,l=t.yToPixel(c,r,a),d=Pn[n],f=o?`cc`:`99`;e.strokeStyle=d+f,e.setLineDash(i===0||i===1?[]:[4,3]),e.beginPath(),e.moveTo(_,l),e.lineTo(v,l),e.stroke(),e.setLineDash([]);let p=`${`${(i*100).toFixed(1)}%`} ${c.toFixed(s)}`;e.fillStyle=d+f,e.fillText(p,_+4,l-3)}for(let[t,n]of[[d,f],[p,m],[h,g]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fillStyle=`#e8b84b`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=c.price-s.price;for(let e of Nn){let r=l.price+e*u,a=n.yToPixel(r,i,o);if(Math.abs(t-a)<=Mn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;let s=this.points.map(e=>({px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Mn+2)return{pointIndex:n,cursor:`grab`};return null}},In=6;function Ln(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Rn=[[1,8,`1:8`],[1,4,`1:4`],[1,3,`1:3`],[1,2,`1:2`],[1,1,`1:1`],[2,1,`2:1`],[3,1,`3:1`],[4,1,`4:1`],[8,1,`8:1`]],zn=class{constructor(e){this.type=`gannFan`,this.id=`gfan_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.abs(d-l)||1,m=f-u,h=d>l?1:-1;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,Rn.forEach(([t,n,r],a)=>{var o;let s=t/n*m,c=(i-l)/(p*h),d=l+p*h*c,f=u+s*c,g=`#ffa726`+((o=[`55`,`66`,`77`,`99`,`cc`,`99`,`77`,`66`,`55`][a])==null?`88`:o);e.strokeStyle=g,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.fillStyle=g;let _=Math.min(d,i-30);e.fillText(r,_,f-3)}),e.fillStyle=`#ffa726`,e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.abs(d-l)||1,m=f-u,h=d>l?1:-1;for(let[n,r]of Rn){let i=n/r*m,o=(a-l)/(p*h);if(Ln(e,t,l,u,l+p*h*o,u+i*o)<=In)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}],c=[`move`,`grab`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=In+2)return{pointIndex:n,cursor:c[n]};return null}},Bn=6,Vn=class{constructor(e){this.type=`gannSquare`,this.id=`gsq_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.max(l,d),g=Math.max(u,f),_=h-p,v=g-m;e.save(),e.lineWidth=o?1.5:1,e.strokeStyle=`#ab47bc`,e.fillStyle=`#ab47bc0a`,e.fillRect(p,m,_,v),e.strokeRect(p,m,_,v),e.beginPath(),e.moveTo(p,m+v/3),e.lineTo(h,m+v/3),e.moveTo(p,m+2*v/3),e.lineTo(h,m+2*v/3),e.stroke(),e.beginPath(),e.moveTo(p+_/3,m),e.lineTo(p+_/3,g),e.moveTo(p+2*_/3,m),e.lineTo(p+2*_/3,g),e.stroke(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return e>=Math.min(l,d)&&e<=Math.max(l,d)&&t>=Math.min(u,f)&&t<=Math.max(u,f)}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Bn+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Hn=6,Un=class{constructor(e){this.type=`gannBox`,this.id=`gbox_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.max(l,d),g=Math.max(u,f),_=h-p,v=g-m,y=p+_/2,b=m+v/2;e.save(),e.lineWidth=o?1.5:1,e.strokeStyle=`#7e57c2`,e.fillStyle=`#7e57c20a`,e.fillRect(p,m,_,v),e.strokeRect(p,m,_,v),e.beginPath(),e.moveTo(p,m),e.lineTo(h,g),e.stroke(),e.beginPath(),e.moveTo(h,m),e.lineTo(p,g),e.stroke(),e.beginPath(),e.moveTo(p,b),e.lineTo(h,b),e.stroke(),e.beginPath(),e.moveTo(y,m),e.lineTo(y,g),e.stroke(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return e>=Math.min(l,d)&&e<=Math.max(l,d)&&t>=Math.min(u,f)&&t<=Math.max(u,f)}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Hn+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Wn=6,Gn=class{constructor(e){this.type=`rectangle`,this.id=`rect_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);if(e.save(),e.fillStyle=`#9b59b618`,e.strokeStyle=`#9b59b6`,e.lineWidth=o?1.5:1,e.fillRect(p,m,h,g),e.strokeRect(p,m,h,g),o)for(let[t,n]of[[l,u],[d,u],[l,f],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=`#9b59b6`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Wn,m=Math.min(u,f)-Wn,h=Math.abs(d-l)+Wn*2,g=Math.abs(f-u)+Wn*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=l<=d?u<=f?`nwse-resize`:`nesw-resize`:u<=f?`nesw-resize`:`nwse-resize`,m=[[0,l,u,p],[1,d,f,p]];for(let[n,r,i,a]of m)if(Math.hypot(e-r,t-i)<=Wn+2)return{pointIndex:n,cursor:a};return null}},Kn=6;function qn(e,t,n){let r=!1,i=n.length;for(let a=0,o=i-1;a<i;o=a++){let[i,s]=n[a],[c,l]=n[o];s>t!=l>t&&e<(c-i)*(t-s)/(l-s)+i&&(r=!r)}return r}var Jn=class{constructor(e){this.type=`rotatedRectangle`,this.requiredPoints=3,this.id=`rrect_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}getCorners(e,t,n,r,i){let[a,o,s]=this.points,c=e.xToPixel(a.barIndex,t,r),l=e.yToPixel(a.price,n,i),u=e.xToPixel(o.barIndex,t,r),d=e.yToPixel(o.price,n,i),f=e.xToPixel(s.barIndex,t,r),p=e.yToPixel(s.price,n,i),m=Math.hypot(u-c,d-l);if(m<1e-6)return[[c,l],[u,d],[u,d],[c,l]];let h=-(d-l)/m,g=(u-c)/m,_=(f-c)*h+(p-l)*g,v=c,y=l,b=u,x=d,S=b+h*_,C=x+g*_,w=v+h*_,T=y+g*_;return[[v,y],[b,x],[S,C],[w,T]]}render(e,t,n,r,i,a,o){if(this.points.length<3)return;let s=this.getCorners(t,n,r,i,a);e.save(),e.beginPath(),e.moveTo(s[0][0],s[0][1]);for(let t=1;t<s.length;t++)e.lineTo(s[t][0],s[t][1]);e.closePath(),e.fillStyle=`#9c27b018`,e.fill(),e.strokeStyle=`#9c27b0`,e.lineWidth=o?1.5:1,e.stroke(),e.fillStyle=`#9c27b0`;for(let[t,n]of s)e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){return this.points.length<3?!1:qn(e,t,this.getCorners(n,r,i,a,o))}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Kn+2)return{pointIndex:s,cursor:`grab`}}return null}},Yn=6,Xn=class{constructor(e){this.type=`ellipse`,this.id=`ell_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=(l+d)/2,m=(u+f)/2,h=Math.abs(d-l)/2,g=Math.abs(f-u)/2;if(!(h<1||g<1)){if(e.save(),e.fillStyle=`#2196f318`,e.strokeStyle=`#2196f3`,e.lineWidth=o?1.5:1,e.beginPath(),e.ellipse(p,m,h,g,0,0,Math.PI*2),e.fill(),e.stroke(),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=`#2196f3`,e.fill();e.restore()}}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=(l+d)/2,m=(u+f)/2,h=Math.abs(d-l)/2+Yn,g=Math.abs(f-u)/2+Yn;if(h<1||g<1)return!1;let _=(e-p)/h,v=(t-m)/g;return _*_+v*v<=1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=l<=d?u<=f?`nwse-resize`:`nesw-resize`:u<=f?`nesw-resize`:`nwse-resize`,m=[[0,l,u,p],[1,d,f,p]];for(let[n,r,i,a]of m)if(Math.hypot(e-r,t-i)<=Yn+2)return{pointIndex:n,cursor:a};return null}},Zn=6;function Qn(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var $n=class{constructor(e){this.type=`triangle`,this.requiredPoints=3,this.id=`tri_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=`#ff9800`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);if(this.complete&&(e.closePath(),e.fillStyle=`#ff980018`,e.fill()),e.stroke(),o)for(let t=0;t<s.length;t++)e.beginPath(),e.arc(s[t],c[t],4,0,Math.PI*2),e.fillStyle=`#ff9800`,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l;n++){let r=(n+1)%l;if(Qn(e,t,s[n],c[n],s[r],c[r])<=Zn)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<3)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Zn+2)return{pointIndex:s,cursor:`grab`}}return null}},er=6,tr=class{constructor(e){this.type=`circle`,this.id=`circ_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.hypot(d-l,f-u);p<1||(e.save(),e.fillStyle=`#4caf5018`,e.strokeStyle=`#4caf50`,e.lineWidth=o?1.5:1,e.beginPath(),e.arc(l,u,p,0,Math.PI*2),e.fill(),e.stroke(),o&&(e.beginPath(),e.arc(l,u,3,0,Math.PI*2),e.fillStyle=`#4caf50`,e.fill(),e.beginPath(),e.arc(d,f,3.5,0,Math.PI*2),e.fillStyle=`#4caf50`,e.fill()),e.restore())}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.hypot(d-l,f-u);return Math.hypot(e-l,t-u)<=p+er}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return Math.hypot(e-l,t-u)<=er+2?{pointIndex:0,cursor:`move`}:Math.hypot(e-d,t-f)<=er+2?{pointIndex:1,cursor:`grab`}:null}},nr=6;function rr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ir=class{constructor(e){this.type=`arc`,this.requiredPoints=3,this.id=`arc_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<3)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a),m=t.xToPixel(l.barIndex,n,i),h=t.yToPixel(l.price,r,a);e.save(),e.strokeStyle=`#26c6da`,e.lineWidth=o?1.5:1;let g=u,_=d,v=f,y=p,b=m,x=h,S=2*(g*(y-x)+v*(x-_)+b*(_-y));if(Math.abs(S)<1e-6)e.beginPath(),e.moveTo(u,d),e.lineTo(m,h),e.stroke();else{let t=g*g,n=_*_,r=v*v,i=y*y,a=b*b,o=x*x,s=((t+n)*(y-x)+(r+i)*(x-_)+(a+o)*(_-y))/S,c=((t+n)*(b-v)+(r+i)*(g-b)+(a+o)*(v-g))/S,l=Math.hypot(g-s,_-c),u=Math.atan2(_-c,g-s),d=Math.atan2(y-c,v-s),f=Math.atan2(x-c,b-s),p=(e,t)=>{let n=e-t;for(;n<0;)n+=Math.PI*2;for(;n>=Math.PI*2;)n-=Math.PI*2;return n},m=p(d,u)>p(f,u);e.beginPath(),e.arc(s,c,l,u,f,m),e.stroke()}let C=[[u,d],[f,p],[m,h]];e.fillStyle=`#26c6da`;for(let[t,n]of C)e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=u,_=d,v=f,y=p,b=m,x=h,S=2*(g*(y-x)+v*(x-_)+b*(_-y));if(Math.abs(S)<1e-6)return rr(e,t,u,d,m,h)<=nr;let C=g*g,w=_*_,T=v*v,E=y*y,D=b*b,O=x*x,k=((C+w)*(y-x)+(T+E)*(x-_)+(D+O)*(_-y))/S,A=((C+w)*(b-v)+(T+E)*(g-b)+(D+O)*(v-g))/S,j=Math.hypot(g-k,_-A);if(Math.abs(Math.hypot(e-k,t-A)-j)>nr)return!1;let M=Math.atan2(_-A,g-k),ee=Math.atan2(y-A,v-k),N=Math.atan2(x-A,b-k),te=Math.atan2(t-A,e-k),P=(e,t)=>{let n=e-t;for(;n<0;)n+=Math.PI*2;for(;n>=Math.PI*2;)n-=Math.PI*2;return n},ne=P(ee,M),F=P(N,M),I=P(te,M);return ne>F?I>=F||I<=0:I<=F}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=nr+2)return{pointIndex:s,cursor:`grab`}}return null}},ar=6;function or(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var sr=class{constructor(e){this.type=`polyline`,this.openEnded=!0,this.id=`poly_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)}));e.save(),e.strokeStyle=`#ff7043`,e.lineWidth=o?1.5:1;let c=this.complete?s.length:s.length-1;if(c>=2){e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y);for(let t=1;t<c;t++)e.lineTo(s[t].x,s[t].y);e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([4,4]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.fillStyle=`#ff7043`;let l=this.complete?s.length:s.length-1;for(let t=0;t<l;t++)e.beginPath(),e.arc(s[t].x,s[t].y,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(or(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=ar)return!0;return!1}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ar+2)return{pointIndex:s,cursor:`grab`}}return null}},cr=6;function lr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ur=class{constructor(e){this.type=`path`,this.openEnded=!0,this.id=`path_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)})),c=this.complete?s.length:s.length-1;if(e.save(),e.strokeStyle=`#ec407a`,e.lineWidth=o?1.5:1,c>=2){if(e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y),c===2)e.lineTo(s[1].x,s[1].y);else{for(let t=1;t<c-1;t++){let n=(s[t].x+s[t+1].x)/2,r=(s[t].y+s[t+1].y)/2;e.quadraticCurveTo(s[t].x,s[t].y,n,r)}e.lineTo(s[c-1].x,s[c-1].y)}e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([4,4]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.fillStyle=`#ec407a`;for(let t=0;t<c;t++)e.beginPath(),e.arc(s[t].x,s[t].y,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(lr(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=cr)return!0;return!1}getHandle(e,t,n,r,i,a,o){for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=cr+2)return{pointIndex:s,cursor:`grab`}}return null}},dr=6;function fr(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var pr=class{constructor(e){this.type=`priceRange`,this.id=`pr_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=(u+f)/2,h=(d+p)/2,g=Math.min(d,p),_=Math.max(d,p),v=`#26a69a`;e.save(),e.strokeStyle=v,e.fillStyle=v,e.lineWidth=o?1.5:1,e.font=`10px 'Inter', system-ui, sans-serif`,e.beginPath(),e.moveTo(m,g),e.lineTo(m,_),e.stroke(),fr(e,m,_,m,g),fr(e,m,g,m,_),e.beginPath(),e.moveTo(u-10,d),e.lineTo(u+10,d),e.stroke(),e.beginPath(),e.moveTo(f-10,p),e.lineTo(f+10,p),e.stroke();let y=Math.abs(c.price-l.price).toFixed(s),b=((l.price-c.price)/c.price*100).toFixed(2)+`%`,x=y,S=b,C=m+8,w=h-30/2;e.fillStyle=`rgba(0,0,0,0.55)`,e.fillRect(C,w,70,30),e.strokeStyle=v,e.strokeRect(C,w,70,30),e.fillStyle=v,e.fillText(x,C+4,w+4+10),e.fillText(S,C+4,w+4+22),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=(l+d)/2,m=Math.min(u,f),h=Math.max(u,f);return Math.abs(e-p)<=dr&&t>=m&&t<=h}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=dr+2)return{pointIndex:n,cursor:`ns-resize`};return null}},mr=6;function hr(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var gr=class{constructor(e){this.type=`dateRange`,this.id=`dr_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=(u+f)/2,m=Math.min(l,d),h=Math.max(l,d),g=`#42a5f5`;e.save(),e.strokeStyle=g,e.fillStyle=g,e.lineWidth=o?1.5:1,e.font=`10px 'Inter', system-ui, sans-serif`,e.beginPath(),e.moveTo(m,p),e.lineTo(h,p),e.stroke(),hr(e,h,p,m,p),hr(e,m,p,h,p),e.beginPath(),e.moveTo(l,u-10),e.lineTo(l,u+10),e.stroke(),e.beginPath(),e.moveTo(d,f-10),e.lineTo(d,f+10),e.stroke();let _=`${Math.abs(c.barIndex-s.barIndex)} bars`,v=(l+d)/2,y=e.measureText(_).width;e.fillStyle=g,e.fillText(_,v-y/2,p-10),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=(u+n.yToPixel(c.price,i,o))/2,p=Math.min(l,d),m=Math.max(l,d);return Math.abs(t-f)<=mr&&e>=p&&e<=m}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=mr+2)return{pointIndex:n,cursor:`ew-resize`};return null}},_r=6;function vr(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var yr=class{constructor(e){this.type=`datePriceRange`,this.id=`dpr_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=Math.min(u,f),h=Math.min(d,p),g=Math.max(u,f),_=Math.max(d,p),v=g-m,y=_-h,b=`#66bb6a`;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.fillStyle=`#66bb6a12`,e.fillRect(m,h,v,y),e.strokeStyle=b,e.setLineDash([5,3]),e.strokeRect(m,h,v,y),e.setLineDash([]),e.strokeStyle=b,e.fillStyle=b,e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke(),vr(e,u,d,f,p);let x=`\u0394${Math.abs(c.price-l.price).toFixed(s)}`;e.fillStyle=b,e.fillText(x,g+4,(h+_)/2);let S=`${Math.abs(l.barIndex-c.barIndex)} bars`,C=e.measureText(S).width;e.fillText(S,m+v/2-C/2,_+12),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-_r,m=Math.min(u,f)-_r,h=Math.max(l,d)+_r,g=Math.max(u,f)+_r;return e>=p&&e<=h&&t>=m&&t<=g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=_r+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},br=6;function xr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Sr=class{constructor(e){this.type=`ruler`,this.id=`rul_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=`#ffb300`,h=Math.atan2(p-d,f-u),g=h+Math.PI/2;e.save(),e.strokeStyle=m,e.fillStyle=m,e.lineWidth=2,e.font=`10px 'Inter', system-ui, sans-serif`,e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke(),e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(u-8*Math.cos(g),d-8*Math.sin(g)),e.lineTo(u+8*Math.cos(g),d+8*Math.sin(g)),e.stroke(),e.beginPath(),e.moveTo(f-8*Math.cos(g),p-8*Math.sin(g)),e.lineTo(f+8*Math.cos(g),p+8*Math.sin(g)),e.stroke();let _=(u+f)/2,v=(d+p)/2,y=Math.abs(l.barIndex-c.barIndex),b=(l.price-c.price).toFixed(s),x=`${y} bars`,S=`${b}`,C=-12*Math.sin(h),w=12*Math.cos(h);e.fillStyle=m,e.fillText(x,_+C,v+w-12),e.fillText(S,_+C,v+w),e.beginPath(),e.arc(u,d,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(f,p,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return xr(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=br}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=br+2)return{pointIndex:n,cursor:`grab`};return null}},Cr=6;function wr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function Tr(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Er=class{constructor(e){this.type=`pitchfork`,this.requiredPoints=3,this.id=`pfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ffa726`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(f+s)/2,h=(p+c)/2,g=m-u,_=h-d,[v,y]=Tr(u,d,g,_,i);e.beginPath(),e.moveTo(u,d),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(u,d),e.lineTo(v,y),e.stroke();let[b,x]=Tr(f,p,g,_,i);e.beginPath(),e.moveTo(f,p),e.lineTo(b,x),e.stroke();let[S,C]=Tr(s,c,g,_,i);if(e.beginPath(),e.moveTo(s,c),e.lineTo(S,C),e.stroke(),o){e.fillStyle=`#ffa726`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(f+m)/2,_=(p+h)/2,v=g-u,y=_-d,[b,x]=Tr(u,d,v,y,a),[S,C]=Tr(f,p,v,y,a),[w,T]=Tr(m,h,v,y,a);return wr(e,t,u,d,b,x)<=Cr||wr(e,t,f,p,S,C)<=Cr||wr(e,t,m,h,w,T)<=Cr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Cr+2)return{pointIndex:n,cursor:`grab`};return null}},Dr=6;function Or(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function kr(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Ar=class{constructor(e){this.type=`schiffPitchfork`,this.requiredPoints=3,this.id=`spfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ff7043`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(u+f)/2,h=(d+p)/2,g=(f+s)/2,_=(p+c)/2,v=g-m,y=_-h,[b,x]=kr(m,h,v,y,i);e.beginPath(),e.moveTo(m,h),e.lineTo(g,_),e.stroke(),e.beginPath(),e.moveTo(m,h),e.lineTo(b,x),e.stroke();let[S,C]=kr(f,p,v,y,i);e.beginPath(),e.moveTo(f,p),e.lineTo(S,C),e.stroke();let[w,T]=kr(s,c,v,y,i);if(e.beginPath(),e.moveTo(s,c),e.lineTo(w,T),e.stroke(),o){e.fillStyle=`#ff7043`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(u+f)/2,_=(d+p)/2,v=(f+m)/2,y=(p+h)/2,b=v-g,x=y-_,[S,C]=kr(g,_,b,x,a),[w,T]=kr(f,p,b,x,a),[E,D]=kr(m,h,b,x,a);return Or(e,t,g,_,S,C)<=Dr||Or(e,t,f,p,w,T)<=Dr||Or(e,t,m,h,E,D)<=Dr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Dr+2)return{pointIndex:n,cursor:`grab`};return null}},jr=6;function Mr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function Nr(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Pr=class{constructor(e){this.type=`modifiedSchiff`,this.requiredPoints=3,this.id=`mspfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ef5350`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(f+s)/2,h=(p+c)/2,g=(u+m)/2,_=(d+h)/2,v=m-g,y=h-_,[b,x]=Nr(g,_,v,y,i);e.beginPath(),e.moveTo(g,_),e.lineTo(m,h),e.stroke(),e.beginPath(),e.moveTo(g,_),e.lineTo(b,x),e.stroke();let[S,C]=Nr(f,p,v,y,i);e.beginPath(),e.moveTo(f,p),e.lineTo(S,C),e.stroke();let[w,T]=Nr(s,c,v,y,i);if(e.beginPath(),e.moveTo(s,c),e.lineTo(w,T),e.stroke(),o){e.fillStyle=`#ef5350`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(f+m)/2,_=(p+h)/2,v=(u+g)/2,y=(d+_)/2,b=g-v,x=_-y,[S,C]=Nr(v,y,b,x,a),[w,T]=Nr(f,p,b,x,a),[E,D]=Nr(m,h,b,x,a);return Mr(e,t,v,y,S,C)<=jr||Mr(e,t,f,p,w,T)<=jr||Mr(e,t,m,h,E,D)<=jr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=jr+2)return{pointIndex:n,cursor:`grab`};return null}},Fr=6;function Ir(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function q(e,t,n,r,i){return n===0?[e,t]:[i,t+(i-e)/n*r]}var Lr=class{constructor(e){this.type=`insidePitchfork`,this.requiredPoints=3,this.id=`ipfk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c,l]=this.points,u=t.xToPixel(s.barIndex,n,i),d=t.yToPixel(s.price,r,a),f=t.xToPixel(c.barIndex,n,i),p=t.yToPixel(c.price,r,a);if(e.save(),e.strokeStyle=`#ab47bc`,e.lineWidth=o?1.5:1,l){let s=t.xToPixel(l.barIndex,n,i),c=t.yToPixel(l.price,r,a),m=(f+s)/2,h=(p+c)/2,g=m-u,_=h-d;e.beginPath(),e.moveTo(u,d),e.lineTo(m,h),e.stroke();let[v,y]=q(u,d,g,_,i);e.beginPath(),e.moveTo(u,d),e.lineTo(v,y),e.stroke();let[b,x]=q(f,p,g,_,i);e.beginPath(),e.moveTo(f,p),e.lineTo(b,x),e.stroke();let[S,C]=q(s,c,g,_,i);e.beginPath(),e.moveTo(s,c),e.lineTo(S,C),e.stroke();let w=(u+f)/2,T=(d+p)/2,[E,D]=q(w,T,g,_,i);e.globalAlpha=.55,e.setLineDash([4,3]),e.beginPath(),e.moveTo(w,T),e.lineTo(E,D),e.stroke();let O=(u+s)/2,k=(d+c)/2,[A,j]=q(O,k,g,_,i);if(e.beginPath(),e.moveTo(O,k),e.lineTo(A,j),e.stroke(),e.setLineDash([]),e.globalAlpha=1,o){e.fillStyle=`#ab47bc`;for(let[t,n]of[[u,d],[f,p],[s,c]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill()}}else e.beginPath(),e.moveTo(u,d),e.lineTo(f,p),e.stroke();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<3)return!1;let[s,c,l]=this.points,u=n.xToPixel(s.barIndex,r,a),d=n.yToPixel(s.price,i,o),f=n.xToPixel(c.barIndex,r,a),p=n.yToPixel(c.price,i,o),m=n.xToPixel(l.barIndex,r,a),h=n.yToPixel(l.price,i,o),g=(f+m)/2,_=(p+h)/2,v=g-u,y=_-d,[b,x]=q(u,d,v,y,a),[S,C]=q(f,p,v,y,a),[w,T]=q(m,h,v,y,a);if(Ir(e,t,u,d,b,x)<=Fr||Ir(e,t,f,p,S,C)<=Fr||Ir(e,t,m,h,w,T)<=Fr)return!0;let E=(u+f)/2,D=(d+p)/2,[O,k]=q(E,D,v,y,a);if(Ir(e,t,E,D,O,k)<=Fr)return!0;let A=(u+m)/2,j=(d+h)/2,[M,ee]=q(A,j,v,y,a);return Ir(e,t,A,j,M,ee)<=Fr}getHandle(e,t,n,r,i,a,o){let s=this.points.map((e,t)=>({i:t,px:n.xToPixel(e.barIndex,r,a),py:n.yToPixel(e.price,i,o)}));for(let{i:n,px:r,py:i}of s)if(Math.hypot(e-r,t-i)<=Fr+2)return{pointIndex:n,cursor:`grab`};return null}},Rr=6,zr=`#64b5f6`,Br=[.35,.55,.75,1,1,.75,.55,.35],Vr=class{constructor(e){this.type=`fixedRangeVP`,this.id=`frvp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.strokeStyle=zr,e.lineWidth=o?1.5:1,e.strokeRect(p,m,h,g);let _=Br.length,v=g/_,y=h*.6;for(let t=0;t<_;t++){let n=y*Br[t],r=m+t*v;e.fillStyle=zr+`60`,e.fillRect(p,r,n,v-1)}if(e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=zr,e.fillText(`Volume Profile`,p+4,m+13),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=zr,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Rr,m=Math.min(u,f)-Rr,h=Math.abs(d-l)+Rr*2,g=Math.abs(f-u)+Rr*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=Rr+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Hr=6,Ur=`#4db6ac`,Wr=[.35,.55,.75,1,1,.75,.55,.35],Gr=class{constructor(e){this.type=`anchoredVP`,this.id=`avp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.strokeStyle=Ur,e.lineWidth=o?1.5:1,e.strokeRect(p,m,h,g);let _=Wr.length,v=g/_,y=h*.6;for(let t=0;t<_;t++){let n=y*Wr[t],r=m+t*v;e.fillStyle=Ur+`60`,e.fillRect(p,r,n,v-1)}if(e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Ur,e.fillText(`Anchored VP`,p+4,m+13),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fillStyle=Ur,e.fill(),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=Ur,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Hr,m=Math.min(u,f)-Hr,h=Math.abs(d-l)+Hr*2,g=Math.abs(f-u)+Hr*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=Hr+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Kr=6,qr=`#26a69a`,Jr=[.25,.45,.65,.85,1,1,.85,.65,.45,.25],Yr=class{constructor(e){this.type=`volumeProfile`,this.id=`vp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.strokeStyle=qr,e.lineWidth=o?1.5:1,e.strokeRect(p,m,h,g);let _=Jr.length,v=g/_,y=h*.6;for(let t=0;t<_;t++){let n=y*Jr[t],r=m+t*v;e.fillStyle=qr+`55`,e.fillRect(p,r,n,v-1)}if(e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=qr,e.fillText(`Volume Profile`,p+4,m+13),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=qr,e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-Kr,m=Math.min(u,f)-Kr,h=Math.abs(d-l)+Kr*2,g=Math.abs(f-u)+Kr*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=Kr+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},Xr=6;function Zr(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Qr=class{constructor(e){this.type=`regressionTrend`,this.id=`reg_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=`#26c6da`,m=Math.hypot(d-l,f-u)||1,h=-(f-u)/m,g=(d-l)/m;e.save(),e.strokeStyle=p,e.fillStyle=p,e.lineWidth=o?1.5:1,e.setLineDash([]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([4,3]),e.beginPath(),e.moveTo(l+h*20,u+g*20),e.lineTo(d+h*20,f+g*20),e.stroke(),e.beginPath(),e.moveTo(l-h*20,u-g*20),e.lineTo(d-h*20,f-g*20),e.stroke(),e.setLineDash([]),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return Zr(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=Xr}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Xr+2)return{pointIndex:n,cursor:`grab`};return null}},$r=6,ei=`Text`,ti=4,ni=class{constructor(e){this.type=`text`,this.text=``,this.id=`txt_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.font=`13px system-ui, sans-serif`,e.textBaseline=`top`;let l=this.text||ei,u=!this.text,d=e.measureText(l).width;o&&(e.strokeStyle=`#2196f3`,e.lineWidth=1,e.strokeRect(s-2,c-2,d+ti*2,20)),e.fillStyle=u?`#888`:`#f5f5f5`,e.fillText(l,s+ti,c),o&&(e.strokeStyle=`#f5f5f5`,e.lineWidth=1,e.beginPath(),e.moveTo(s,c+16),e.lineTo(s+d+ti*2,c+16),e.stroke()),e.restore()}hitTest(e,t,n,r,i,a,o){var s,c;let l=n.xToPixel(this.points[0].barIndex,r,a),u=n.yToPixel(this.points[0].price,i,o),d=Math.max(40,((s=(c=this.text)==null?void 0:c.length)==null?4:s)*8);return e>=l-$r&&e<=l+d+$r&&t>=u-$r&&t<=u+16+$r}getHandle(){return null}},ri=6,J=24,ii=8,ai=12;function oi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}function si(e,t,n,r,i,a){e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.arcTo(t+r,n,t+r,n+a,a),e.lineTo(t+r,n+i-a),e.arcTo(t+r,n+i,t+r-a,n+i,a),e.lineTo(t+a,n+i),e.arcTo(t,n+i,t,n+i-a,a),e.lineTo(t,n+a),e.arcTo(t,n,t+a,n,a),e.closePath()}var ci=class{constructor(e){this.type=`callout`,this.text=``,this.id=`cal_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}getBoxW(e){let t=this.text||`Note`;return Math.max(60,e.measureText(t).width+ai*2)}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.font=`11px system-ui, sans-serif`,e.lineWidth=o?1.5:1;let p=this.getBoxW(e),m=d-p/2,h=f-J/2,g=Math.max(m,Math.min(m+p,l)),_=Math.max(h,Math.min(h+J,u)),v=l<m?m:l>m+p?m+p:g,y=u<h?h:u>h+J?h+J:_;e.strokeStyle=`#546e7a`,e.beginPath(),e.moveTo(v,y),e.lineTo(l,u),e.stroke(),e.fillStyle=`#546e7a`,e.beginPath(),e.arc(l,u,3,0,Math.PI*2),e.fill(),si(e,m,h,p,J,ii),e.fillStyle=`#37474f`,e.fill(),e.strokeStyle=`#546e7a`,e.stroke();let b=this.text||`Note`;e.fillStyle=this.text?`#f5f5f5`:`#888`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(b,d,f),e.restore()}hitTest(e,t,n,r,i,a,o){var s,c;if(this.points.length<2)return!1;let[l,u]=this.points,d=n.xToPixel(l.barIndex,r,a),f=n.yToPixel(l.price,i,o),p=n.xToPixel(u.barIndex,r,a),m=n.yToPixel(u.price,i,o),h=Math.max(60,((s=(c=this.text)==null?void 0:c.length)==null?4:s)*7+24),g=p-h/2,_=m-J/2;return e>=g-ri&&e<=g+h+ri&&t>=_-ri&&t<=_+J+ri||oi(e,t,d<g?g:d>g+h?g+h:Math.max(g,Math.min(g+h,d)),f<_?_:f>_+J?_+J:Math.max(_,Math.min(_+J,f)),d,f)<=ri}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}],c=[`grab`,`move`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=ri+4)return{pointIndex:n,cursor:c[n]};return null}},li=6,ui=60,Y=18,di=7,fi=class{constructor(e){this.type=`priceLabel`,this.id=`plbl_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o,s=2){let c=t.xToPixel(this.points[0].barIndex,n,i),l=t.yToPixel(this.points[0].price,r,a),u=this.points[0].price;e.save(),e.fillStyle=`#26a69a`,e.beginPath(),e.moveTo(c,l),e.lineTo(c+di,l-Y/2),e.lineTo(c+di,l+Y/2),e.closePath(),e.fill();let d=c+di,f=l-Y/2;e.fillStyle=`#26a69a`,e.beginPath(),e.roundRect(d,f,ui,Y,Y/2),e.fill(),o&&(e.strokeStyle=`#80cbc4`,e.lineWidth=1.5,e.beginPath(),e.roundRect(d-2,f-2,ui+4,Y+4,Y/2+2),e.stroke()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=`#ffffff`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(u.toFixed(s),d+ui/2,l),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o),l=s+di,u=c-Y/2;return e>=s-li&&e<=l+ui+li&&t>=u-li&&t<=u+Y+li}getHandle(){return null}},pi=6;function mi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var hi=class{constructor(e){this.type=`arrowMarker`,this.id=`arw_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.strokeStyle=`#ef5350`,e.fillStyle=`#ef5350`,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke();let p=Math.atan2(f-u,d-l);if(e.beginPath(),e.moveTo(d,f),e.lineTo(d-10*Math.cos(p-Math.PI/6),f-10*Math.sin(p-Math.PI/6)),e.lineTo(d-10*Math.cos(p+Math.PI/6),f-10*Math.sin(p+Math.PI/6)),e.closePath(),e.fill(),o)for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,4,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points;return mi(e,t,n.xToPixel(s.barIndex,r,a),n.yToPixel(s.price,i,o),n.xToPixel(c.barIndex,r,a),n.yToPixel(c.price,i,o))<=pi}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=pi+2)return{pointIndex:n,cursor:`grab`};return null}},gi=class{constructor(e){this.type=`flag`,this.id=`flag_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.strokeStyle=`#ef5350`,e.fillStyle=`#ef5350`,e.lineWidth=1.5,e.beginPath(),e.moveTo(s,c+20),e.lineTo(s,c-10),e.stroke();let l=s,u=c-10;e.fillRect(l,u,16,10),e.font=`8px system-ui, sans-serif`,e.fillStyle=`#ffffff`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(`F`,l+8,u+5),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return Math.hypot(e-s,t-c)<=20}getHandle(){return null}},_i=6,vi=16,yi=6,bi=10,xi=class{constructor(e){this.type=`priceNote`,this.id=`pnote_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o,s=2){let c=t.xToPixel(this.points[0].barIndex,n,i),l=t.yToPixel(this.points[0].price,r,a),u=this.points[0].price.toFixed(s);e.save(),e.strokeStyle=`#ffa726`,e.lineWidth=1.5,e.beginPath(),e.moveTo(c-bi,l),e.lineTo(c+bi,l),e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;let d=e.measureText(u).width+yi*2,f=c+bi+2,p=l-vi/2;e.fillStyle=`#ffa726`,e.beginPath(),e.roundRect(f,p,d,vi,3),e.fill(),e.fillStyle=`#ffffff`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(u,f+d/2,l),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return e>=s-bi-_i&&e<=s+bi+_i&&Math.abs(t-c)<=_i}getHandle(){return null}},Si=6,Ci=20,wi=10;function Ti(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ei=class{constructor(e){this.type=`anchoredNote`,this.text=``,this.id=`anote_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}getBadgeW(e){let t=this.text||`Note`;return Math.max(50,e.measureText(t).width+wi*2)}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a);e.save(),e.font=`11px system-ui, sans-serif`,e.lineWidth=o?1.5:1;let p=this.getBadgeW(e),m=d-p/2,h=f-Ci/2;e.strokeStyle=`#42a5f5`,e.setLineDash([4,3]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([]),e.fillStyle=`#42a5f5`,e.beginPath(),e.arc(l,u,3,0,Math.PI*2),e.fill(),e.fillStyle=`#37474f`,e.beginPath(),e.roundRect(m,h,p,Ci,4),e.fill(),e.strokeStyle=`#42a5f5`,e.lineWidth=o?1.5:1,e.beginPath(),e.roundRect(m,h,p,Ci,4),e.stroke();let g=this.text||`Note`;e.fillStyle=this.text?`#f5f5f5`:`#888`,e.textBaseline=`middle`,e.textAlign=`center`,e.fillText(g,d,f),e.restore()}hitTest(e,t,n,r,i,a,o){var s,c;if(this.points.length<2)return!1;let[l,u]=this.points,d=n.xToPixel(l.barIndex,r,a),f=n.yToPixel(l.price,i,o),p=n.xToPixel(u.barIndex,r,a),m=n.yToPixel(u.price,i,o),h=Math.max(50,((s=(c=this.text)==null?void 0:c.length)==null?4:s)*7+20),g=p-h/2,_=m-Ci/2;return e>=g-Si&&e<=g+h+Si&&t>=_-Si&&t<=_+Ci+Si||Ti(e,t,d,f,p,m)<=Si}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}],c=[`grab`,`move`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Si+4)return{pointIndex:n,cursor:c[n]};return null}},Di=class{constructor(e){this.type=`arrowUp`,this.id=`awup_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.strokeStyle=`#26a69a`,e.fillStyle=`#26a69a`,e.lineWidth=1.5,e.beginPath(),e.moveTo(s,c+10),e.lineTo(s,c-2),e.stroke();let l=s,u=c-10;e.beginPath(),e.moveTo(l,u),e.lineTo(l-6,u+10),e.lineTo(l+6,u+10),e.closePath(),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return Math.hypot(e-s,t-c)<=12}getHandle(){return null}},Oi=class{constructor(e){this.type=`arrowDown`,this.id=`awdn_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e],this.complete=!0}render(e,t,n,r,i,a,o){let s=t.xToPixel(this.points[0].barIndex,n,i),c=t.yToPixel(this.points[0].price,r,a);e.save(),e.strokeStyle=`#ef5350`,e.fillStyle=`#ef5350`,e.lineWidth=1.5,e.beginPath(),e.moveTo(s,c-10),e.lineTo(s,c+2),e.stroke();let l=s,u=c+10;e.beginPath(),e.moveTo(l,u),e.lineTo(l-6,u-10),e.lineTo(l+6,u-10),e.closePath(),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){let s=n.xToPixel(this.points[0].barIndex,r,a),c=n.yToPixel(this.points[0].price,i,o);return Math.hypot(e-s,t-c)<=12}getHandle(){return null}},ki=6;function Ai(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ji=`#ff7043`,Mi=class{constructor(e){this.type=`headShoulders`,this.requiredPoints=5,this.id=`hs_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`LS`,`H`,`RS`,`L1`,`L2`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=ji,e.lineWidth=o?1.5:1;let d=[0,3,1,4,2].filter(e=>e<u);if(d.length>=2){e.beginPath(),e.moveTo(c[d[0]],l[d[0]]);for(let t=1;t<d.length;t++)e.lineTo(c[d[t]],l[d[t]]);e.stroke()}this.complete&&u===5&&(e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[3],l[3]),e.lineTo(c[1],l[1]),e.lineTo(c[4],l[4]),e.lineTo(c[2],l[2]),e.closePath(),e.fillStyle=ji+`10`,e.fill()),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=ji,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[3],l[3]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=ji;for(let t=0;t<u;t++){var f;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((f=s[t])==null?String(t):f,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length,u=[0,3,1,4,2].filter(e=>e<l);for(let n=0;n<u.length-1;n++){let r=u[n],i=u[n+1];if(Ai(e,t,s[r],c[r],s[i],c[i])<=ki)return!0}return l>=5&&Ai(e,t,s[3],c[3],s[4],c[4])<=ki}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ki+2)return{pointIndex:s,cursor:`grab`}}return null}},Ni=6;function Pi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Fi=`#ffa726`,Ii=class{constructor(e){this.type=`trianglePattern`,this.requiredPoints=5,this.id=`tpat_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`1`,`2`,`3`,`4`,`5`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=Fi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=3&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Fi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[2],l[2]),u>=5&&e.lineTo(c[4],l[4]),e.stroke(),e.restore()),u>=4&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Fi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[1],l[1]),e.lineTo(c[3],l[3]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Fi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t+1):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Pi(e,t,s[n],c[n],s[n+1],c[n+1])<=Ni)return!0;return l>=3&&Pi(e,t,s[0],c[0],s[2],c[2])<=Ni||l>=5&&Pi(e,t,s[2],c[2],s[4],c[4])<=Ni||l>=4&&Pi(e,t,s[1],c[1],s[3],c[3])<=Ni}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Ni+2)return{pointIndex:s,cursor:`grab`}}return null}},Li=6;function Ri(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var zi=`#66bb6a`,Bi=class{constructor(e){this.type=`threeDrives`,this.requiredPoints=7,this.id=`td_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`O`,`A`,`B`,`C`,`D`,`E`,`F`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=zi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);if(e.stroke(),this.complete&&u===7){e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.closePath(),e.fillStyle=zi+`18`,e.fill()}e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=zi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Ri(e,t,s[n],c[n],s[n+1],c[n+1])<=Li)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Li+2)return{pointIndex:s,cursor:`grab`}}return null}},Vi=6;function Hi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ui=`#42a5f5`,Wi=class{constructor(e){this.type=`abcdPattern`,this.requiredPoints=4,this.id=`abcd_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=Ui,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=4&&(e.save(),e.setLineDash([3,4]),e.strokeStyle=Ui,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[3],l[3]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Ui;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Hi(e,t,s[n],c[n],s[n+1],c[n+1])<=Vi)return!0;return l>=4&&Hi(e,t,s[0],c[0],s[3],c[3])<=Vi}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Vi+2)return{pointIndex:s,cursor:`grab`}}return null}},Gi=6;function Ki(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var qi=`#ab47bc`,Ji=class{constructor(e){this.type=`cypherPattern`,this.requiredPoints=5,this.id=`cyp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=qi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);if(e.stroke(),this.complete&&u===5){e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.closePath(),e.fillStyle=qi+`12`,e.fill()}e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=qi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Ki(e,t,s[n],c[n],s[n+1],c[n+1])<=Gi)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Gi+2)return{pointIndex:s,cursor:`grab`}}return null}},Yi=6;function Xi(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Zi=`#ec407a`,Qi=class{constructor(e){this.type=`butterflyPattern`,this.requiredPoints=5,this.id=`bfly_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=Zi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Zi,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=Zi;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(Xi(e,t,s[n],c[n],s[n+1],c[n+1])<=Yi)return!0;return l>=5&&Xi(e,t,s[0],c[0],s[4],c[4])<=Yi}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Yi+2)return{pointIndex:s,cursor:`grab`}}return null}},$i=6;function ea(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var ta=`#26a69a`,na=class{constructor(e){this.type=`batPattern`,this.requiredPoints=5,this.id=`bat_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=ta,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=ta,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=ta;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(ea(e,t,s[n],c[n],s[n+1],c[n+1])<=$i)return!0;return l>=5&&ea(e,t,s[0],c[0],s[4],c[4])<=$i}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=$i+2)return{pointIndex:s,cursor:`grab`}}return null}},ra=6;function ia(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var aa=`#7986cb`,oa=class{constructor(e){this.type=`gartleyPattern`,this.requiredPoints=5,this.id=`gart_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=aa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=aa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=aa;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(ia(e,t,s[n],c[n],s[n+1],c[n+1])<=ra)return!0;return l>=5&&ia(e,t,s[0],c[0],s[4],c[4])<=ra}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ra+2)return{pointIndex:s,cursor:`grab`}}return null}},sa=6;function ca(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var la=`#ef5350`,ua=class{constructor(e){this.type=`crabPattern`,this.requiredPoints=5,this.id=`crab_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=la,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=la,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=la;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(ca(e,t,s[n],c[n],s[n+1],c[n+1])<=sa)return!0;return l>=5&&ca(e,t,s[0],c[0],s[4],c[4])<=sa}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=sa+2)return{pointIndex:s,cursor:`grab`}}return null}},da=6;function fa(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var pa=`#78909c`,ma=class{constructor(e){this.type=`sharkPattern`,this.requiredPoints=5,this.id=`shrk_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=[`X`,`A`,`B`,`C`,`D`],c=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),l=this.points.map(e=>t.yToPixel(e.price,r,a)),u=c.length;e.save(),e.strokeStyle=pa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]);for(let t=1;t<u;t++)e.lineTo(c[t],l[t]);e.stroke(),u>=5&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=pa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(c[0],l[0]),e.lineTo(c[4],l[4]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`,e.fillStyle=pa;for(let t=0;t<u;t++){var d;e.beginPath(),e.arc(c[t],l[t],o?4:3,0,Math.PI*2),e.fill(),e.fillText((d=s[t])==null?String(t):d,c[t]+5,l[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o)),l=s.length;for(let n=0;n<l-1;n++)if(fa(e,t,s[n],c[n],s[n+1],c[n+1])<=da)return!0;return l>=5&&fa(e,t,s[0],c[0],s[4],c[4])<=da}getHandle(e,t,n,r,i,a,o){if(this.points.length!==this.requiredPoints)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=da+2)return{pointIndex:s,cursor:`grab`}}return null}},ha=6;function ga(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var _a=`#29b6f6`,va=[`0`,`1`,`2`,`3`,`4`,`5`],ya=class{constructor(e){this.type=`elliottImpulse`,this.requiredPoints=6,this.id=`eimp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a)),l=s.length;e.save(),e.lineWidth=o?1.5:1;for(let t=0;t<l-1;t++)e.strokeStyle=t%2==0?_a:_a+`aa`,e.beginPath(),e.moveTo(s[t],c[t]),e.lineTo(s[t+1],c[t+1]),e.stroke();e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<l;t++){var u;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=_a,e.fill(),e.fillStyle=_a,e.fillText((u=va[t])==null?String(t):u,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(ga(e,t,s[n],c[n],s[n+1],c[n+1])<=ha)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ha+2)return{pointIndex:s,cursor:`grab`}}return null}},ba=6;function xa(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Sa=`#ff8a65`,Ca=[`0`,`A`,`B`,`C`],wa=class{constructor(e){this.type=`elliottCorrective`,this.requiredPoints=4,this.id=`ecor_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=Sa,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<s.length;t++){var l;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=Sa,e.fill(),e.fillStyle=Sa,e.fillText((l=Ca[t])==null?String(t):l,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(xa(e,t,s[n],c[n],s[n+1],c[n+1])<=ba)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=ba+2)return{pointIndex:s,cursor:`grab`}}return null}},Ta=6;function Ea(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Da=`#aed581`,Oa=[`A`,`B`,`C`,`D`,`E`,`end`],ka=class{constructor(e){this.type=`elliottTriangle`,this.requiredPoints=6,this.id=`etri_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a)),l=s.length;e.save(),e.strokeStyle=Da,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<l;t++)e.lineTo(s[t],c[t]);e.stroke(),l>=3&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Da+`aa`,e.lineWidth=1,e.beginPath(),e.moveTo(s[0],c[0]),l>2&&e.lineTo(s[2],c[2]),l>4&&e.lineTo(s[4],c[4]),e.stroke(),e.restore()),l>=4&&(e.save(),e.setLineDash([5,4]),e.strokeStyle=Da+`aa`,e.lineWidth=1,e.beginPath(),e.moveTo(s[1],c[1]),e.lineTo(s[3],c[3]),e.stroke(),e.restore()),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<l;t++){var u;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=Da,e.fill(),e.fillStyle=Da,e.fillText((u=Oa[t])==null?String(t):u,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(Ea(e,t,s[n],c[n],s[n+1],c[n+1])<=Ta)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Ta+2)return{pointIndex:s,cursor:`grab`}}return null}},Aa=6;function ja(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ma=`#f48fb1`,Na=[`W`,`X`,`Y`,`X2`,`Z`,`X3`,`end`],Pa=class{constructor(e){this.type=`elliottCombination`,this.requiredPoints=7,this.id=`ecom_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=Ma,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<s.length;t++){var l;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=Ma,e.fill(),e.fillStyle=Ma,e.fillText((l=Na[t])==null?String(t):l,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(ja(e,t,s[n],c[n],s[n+1],c[n+1])<=Aa)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Aa+2)return{pointIndex:s,cursor:`grab`}}return null}},Fa=6;function Ia(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var La=`#80cbc4`,Ra=[`W`,`X`,`Y`,`end`],za=class{constructor(e){this.type=`elliottWxy`,this.requiredPoints=4,this.id=`ewxy_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>t.xToPixel(e.barIndex,n,i)),c=this.points.map(e=>t.yToPixel(e.price,r,a));e.save(),e.strokeStyle=La,e.lineWidth=o?1.5:1,e.beginPath(),e.moveTo(s[0],c[0]);for(let t=1;t<s.length;t++)e.lineTo(s[t],c[t]);e.stroke(),e.font=`11px 'Inter', system-ui, sans-serif`;for(let t=0;t<s.length;t++){var l;e.beginPath(),e.arc(s[t],c[t],o?4:3,0,Math.PI*2),e.fillStyle=La,e.fill(),e.fillStyle=La,e.fillText((l=Ra[t])==null?String(t):l,s[t]+5,c[t]-5)}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>n.xToPixel(e.barIndex,r,a)),c=this.points.map(e=>n.yToPixel(e.price,i,o));for(let n=0;n<s.length-1;n++)if(Ia(e,t,s[n],c[n],s[n+1],c[n+1])<=Fa)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(!this.complete)return null;for(let s=0;s<this.points.length;s++){let c=n.xToPixel(this.points[s].barIndex,r,a),l=n.yToPixel(this.points[s].price,i,o);if(Math.hypot(e-c,t-l)<=Fa+2)return{pointIndex:s,cursor:`grab`}}return null}},Ba=8;function Va(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ha=class{constructor(e){this.type=`brush`,this.openEnded=!0,this.id=`brush_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)})),c=this.complete?s.length:s.length-1;if(e.save(),e.strokeStyle=`#ff5722`,e.lineWidth=o?2.5:2,e.lineCap=`round`,e.lineJoin=`round`,c>=2){e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y);for(let t=1;t<c;t++)e.lineTo(s[t].x,s[t].y);e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([4,4]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(Va(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=Ba)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length===0)return null;let s=[0,this.points.length-1];for(let c of s){let s=n.xToPixel(this.points[c].barIndex,r,a),l=n.yToPixel(this.points[c].price,i,o);if(Math.hypot(e-s,t-l)<=Ba+2)return{pointIndex:c,cursor:`grab`}}return null}},Ua=12;function Wa(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var Ga=class{constructor(e){this.type=`highlighter`,this.openEnded=!0,this.id=`hl2_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let s=this.points.map(e=>({x:t.xToPixel(e.barIndex,n,i),y:t.yToPixel(e.price,r,a)})),c=this.complete?s.length:s.length-1;if(e.save(),e.strokeStyle=`#ffeb3b66`,e.lineWidth=12,e.lineCap=`round`,e.lineJoin=`round`,c>=2){e.setLineDash([]),e.beginPath(),e.moveTo(s[0].x,s[0].y);for(let t=1;t<c;t++)e.lineTo(s[t].x,s[t].y);e.stroke()}if(!this.complete&&s.length>=2){let t=s.length-1;e.setLineDash([8,6]),e.beginPath(),e.moveTo(s[t-1].x,s[t-1].y),e.lineTo(s[t].x,s[t].y),e.stroke(),e.setLineDash([])}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let s=this.points.map(e=>({x:n.xToPixel(e.barIndex,r,a),y:n.yToPixel(e.price,i,o)})),c=this.complete?s.length-1:s.length-2;for(let n=0;n<c;n++)if(Wa(e,t,s[n].x,s[n].y,s[n+1].x,s[n+1].y)<=Ua)return!0;return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length===0)return null;let s=[0,this.points.length-1];for(let c of s){let s=n.xToPixel(this.points[c].barIndex,r,a),l=n.yToPixel(this.points[c].price,i,o);if(Math.hypot(e-s,t-l)<=Ua+2)return{pointIndex:c,cursor:`grab`}}return null}},Ka=6,qa=class{constructor(e){this.type=`sineLine`,this.id=`sine_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=d-l,m=Math.abs(f-u)/2,h=(u+f)/2;if(e.save(),e.strokeStyle=`#ce93d8`,e.lineWidth=o?1.5:1,e.beginPath(),Math.abs(p)<1)e.moveTo(l,u),e.lineTo(d,f);else{e.moveTo(l,h+m*Math.sin(0));let t=p>0?1:-1,n=d;for(let r=l+t;p>0?r<=n:r>=n;r+=t){let t=(r-l)/p,n=h+m*Math.sin(2*Math.PI*t);e.lineTo(r,n)}e.lineTo(d,h+m*Math.sin(2*Math.PI))}e.stroke(),e.fillStyle=`#ce93d8`;for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,o?4:3,0,Math.PI*2),e.fill();e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=d-l,m=Math.abs(f-u)/2,h=(u+f)/2;if(Math.abs(p)<1)return Math.hypot(e-l,t-h)<=Ka;let g=p>0?5:-5,_=l,v=h+m*Math.sin(0);for(let n=l+g;p>0?n<=d+Math.abs(g):n>=d-Math.abs(g);n+=g){let r=p>0?Math.min(n,d):Math.max(n,d),i=(r-l)/p,a=h+m*Math.sin(2*Math.PI*i);if(Math.hypot(e-r,t-a)<=Ka)return!0;let o=r-_,s=a-v,c=o*o+s*s;if(c>0){let n=Math.max(0,Math.min(1,((e-_)*o+(t-v)*s)/c)),r=_+n*o,i=v+n*s;if(Math.hypot(e-r,t-i)<=Ka)return!0}if(_=r,v=a,r===d)break}return!1}getHandle(e,t,n,r,i,a,o){let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Ka+2)return{pointIndex:n,cursor:`grab`};return null}},Ja=6,Ya=class{constructor(e){this.type=`cyclicLines`,this.id=`cyc_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return;let u=t.xToPixel(s.barIndex,n,i),d=`#7986cb`;e.save(),e.strokeStyle=d,e.lineWidth=o?1.5:1,e.setLineDash([4,3]);for(let r=0;r<=8;r++){let o=s.barIndex+l*r,c=t.xToPixel(o,n,i);if(c>i)break;e.beginPath(),e.moveTo(c,0),e.lineTo(c,a),e.stroke()}e.setLineDash([]);let f=t.xToPixel(c.barIndex,n,i);e.fillStyle=d,e.beginPath(),e.arc(u,a/2,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(f,a/2,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return!1;for(let t=0;t<=8;t++){let i=s.barIndex+l*t,o=n.xToPixel(i,r,a);if(o>a)break;if(Math.abs(e-o)<=Ja)return!0}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:o/2},{px:n.xToPixel(this.points[1].barIndex,r,a),py:o/2}],c=[`move`,`ew-resize`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Ja+2)return{pointIndex:n,cursor:c[n]};return null}},Xa=6,Za=class{constructor(e){this.type=`timeCycles`,this.id=`tcy_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return;let u=`#80cbc4`;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1;let d=[];for(let e=0;e<=6;e++){let r=s.barIndex+l*e,a=t.xToPixel(r,n,i);if(a>i)break;d.push(a)}for(let t=0;t+1<d.length;t++)t%2==0&&(e.fillStyle=`#80cbc410`,e.fillRect(d[t],0,d[t+1]-d[t],a));e.strokeStyle=u,e.setLineDash([]);for(let t=0;t<d.length;t++)e.beginPath(),e.moveTo(d[t],0),e.lineTo(d[t],a),e.stroke(),e.fillStyle=u,e.fillText(String(t+1),d[t]+3,14);let f=t.xToPixel(s.barIndex,n,i),p=t.xToPixel(c.barIndex,n,i);e.fillStyle=u,e.beginPath(),e.arc(f,a/2,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(p,a/2,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=Math.abs(c.barIndex-s.barIndex);if(l===0)return!1;for(let t=0;t<=6;t++){let i=s.barIndex+l*t,o=n.xToPixel(i,r,a);if(o>a)break;if(Math.abs(e-o)<=Xa)return!0;if(t<6){let i=s.barIndex+l*(t+1),c=n.xToPixel(i,r,a);if(e>=o&&e<=c)return!0}}return!1}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:o/2},{px:n.xToPixel(this.points[1].barIndex,r,a),py:o/2}],c=[`move`,`ew-resize`];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Xa+2)return{pointIndex:n,cursor:c[n]};return null}},Qa=6;function $a(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s;if(c===0)return Math.hypot(e-n,t-r);let l=Math.max(0,Math.min(1,((e-n)*o+(t-r)*s)/c));return Math.hypot(e-(n+l*o),t-(r+l*s))}var eo=class{constructor(e){this.type=`projection`,this.id=`proj_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=`#78909c`,m=d-l,h,g;if(Math.abs(m)<.001)h=d,g=f+(f-u);else{let e=(f-u)/m;h=i,g=f+e*(i-d)}e.save(),e.strokeStyle=p,e.fillStyle=p,e.lineWidth=o?1.5:1,e.setLineDash([]),e.beginPath(),e.moveTo(l,u),e.lineTo(d,f),e.stroke(),e.setLineDash([6,3]),e.beginPath(),e.moveTo(d,f),e.lineTo(h,g),e.stroke(),e.setLineDash([]),e.beginPath(),e.arc(l,u,o?4:3,0,Math.PI*2),e.fill(),e.beginPath(),e.arc(d,f,o?4:3,0,Math.PI*2),e.fill(),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=d-l,m,h;if(Math.abs(p)<.001)m=d,h=f+(f-u);else{let e=(f-u)/p;m=a,h=f+e*(a-d)}return $a(e,t,l,u,d,f)<=Qa||$a(e,t,d,f,m,h)<=Qa}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=Qa+2)return{pointIndex:n,cursor:`grab`};return null}},to=6;function no(e,t,n,r,i,a=7){let o=Math.atan2(i-n,r-t);e.beginPath(),e.moveTo(r,i),e.lineTo(r-a*Math.cos(o-Math.PI/6),i-a*Math.sin(o-Math.PI/6)),e.lineTo(r-a*Math.cos(o+Math.PI/6),i-a*Math.sin(o+Math.PI/6)),e.closePath(),e.fill()}var ro=class{constructor(e){this.type=`priceProjection`,this.id=`pp_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o,s=2){if(this.points.length<2)return;let[c,l]=this.points,u=t.xToPixel(c.barIndex,n,i),d=t.yToPixel(c.price,r,a),f=t.xToPixel(l.barIndex,n,i),p=t.yToPixel(l.price,r,a),m=Math.min(u,f),h=Math.max(u,f),g=Math.min(d,p),_=Math.max(d,p),v=h-m,y=_-g,b=m+v/2;g+y/2;let x=(c.price+l.price)/2,S=`#ef9a9a`;e.save(),e.font=`10px 'Inter', system-ui, sans-serif`,e.lineWidth=o?1.5:1,e.fillStyle=`#ef9a9a18`,e.fillRect(m,g,v,y),e.strokeStyle=S,e.beginPath(),e.moveTo(m,d),e.lineTo(h,d),e.stroke();let C=t.yToPixel(x,r,a);e.beginPath(),e.moveTo(m,C),e.lineTo(h,C),e.stroke(),e.beginPath(),e.moveTo(m,p),e.lineTo(h,p),e.stroke(),e.fillStyle=S,e.fillText(c.price.toFixed(s),h+4,d+4),e.fillText(x.toFixed(s),h+4,C+4),e.fillText(l.price.toFixed(s),h+4,p+4),e.fillStyle=S,e.beginPath(),e.moveTo(b,g),e.lineTo(b,_),e.stroke(),no(e,b,_,b,g),no(e,b,g,b,_),e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o);return e>=Math.min(l,d)&&e<=Math.max(l,d)&&t>=Math.min(u,f)&&t<=Math.max(u,f)}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[{px:n.xToPixel(this.points[0].barIndex,r,a),py:n.yToPixel(this.points[0].price,i,o)},{px:n.xToPixel(this.points[1].barIndex,r,a),py:n.yToPixel(this.points[1].price,i,o)}];for(let n=0;n<s.length;n++)if(Math.hypot(e-s[n].px,t-s[n].py)<=to+2)return{pointIndex:n,cursor:`ns-resize`};return null}},io=6,ao=`#90a4ae`,oo=class{constructor(e){this.type=`ghostFeed`,this.id=`gfeed_${Date.now()}_${Math.random().toString(36).slice(2)}`,this.points=[e,{...e}],this.complete=!1}render(e,t,n,r,i,a,o){if(this.points.length<2)return;let[s,c]=this.points,l=t.xToPixel(s.barIndex,n,i),u=t.yToPixel(s.price,r,a),d=t.xToPixel(c.barIndex,n,i),f=t.yToPixel(c.price,r,a),p=Math.min(l,d),m=Math.min(u,f),h=Math.abs(d-l),g=Math.abs(f-u);e.save(),e.fillStyle=ao+`08`,e.fillRect(p,m,h,g),e.strokeStyle=ao,e.lineWidth=o?1.5:1,e.setLineDash([6,4]),e.strokeRect(p,m,h,g),e.setLineDash([]),e.save(),e.beginPath(),e.rect(p,m,h,g),e.clip(),e.strokeStyle=ao+`30`,e.lineWidth=1,e.setLineDash([4,4]);let _=h+g;for(let t=-g;t<=_;t+=20){let n=p+t,r=m,i=p+t+g,a=m+g;e.beginPath(),e.moveTo(n,r),e.lineTo(i,a),e.stroke()}if(e.setLineDash([]),e.restore(),e.font=`12px 'Inter', system-ui, sans-serif`,e.fillStyle=ao,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`Ghost Feed`,p+h/2,m+g/2),o){e.textAlign=`left`,e.textBaseline=`alphabetic`;for(let[t,n]of[[l,u],[d,f]])e.beginPath(),e.arc(t,n,3.5,0,Math.PI*2),e.fillStyle=ao,e.fill()}e.restore()}hitTest(e,t,n,r,i,a,o){if(this.points.length<2)return!1;let[s,c]=this.points,l=n.xToPixel(s.barIndex,r,a),u=n.yToPixel(s.price,i,o),d=n.xToPixel(c.barIndex,r,a),f=n.yToPixel(c.price,i,o),p=Math.min(l,d)-io,m=Math.min(u,f)-io,h=Math.abs(d-l)+io*2,g=Math.abs(f-u)+io*2;return e>=p&&e<=p+h&&t>=m&&t<=m+g}getHandle(e,t,n,r,i,a,o){if(this.points.length<2)return null;let s=[[0,n.xToPixel(this.points[0].barIndex,r,a),n.yToPixel(this.points[0].price,i,o)],[1,n.xToPixel(this.points[1].barIndex,r,a),n.yToPixel(this.points[1].price,i,o)]];for(let[n,r,i]of s)if(Math.hypot(e-r,t-i)<=io+2)return{pointIndex:n,cursor:`nwse-resize`};return null}},so=new Set([`text`,`callout`,`anchoredNote`]),co=class{constructor(){this.drawings=[],this.activeDrawing=null,this.selectedDrawing=null,this.activeTool=null,this.state=`idle`,this.history=[],this.redoStack=[],this.onCompleteCallback=null,this.onDrawingsChange=null,this.onStartTextEdit=null,this.editingText=!1,this.dragDrawing=null,this.dragStartMouse=null,this.dragStartPoints=null,this.resizeDrawing=null,this.resizePointIndex=-1}setOnComplete(e){this.onCompleteCallback=e}setEditingText(e){this.editingText=e}setActiveTool(e){this.activeTool=e,this.state=`idle`,this.activeDrawing=null}getActiveTool(){return this.activeTool}onMouseDown(e){if(!this.activeTool)return!1;if(this.state===`idle`){if(this.snapshot(),this.activeDrawing=this.createDrawing(this.activeTool,e),this.drawings.push(this.activeDrawing),this.activeDrawing.complete){var t;let e=this.activeDrawing;if(this.selectedDrawing=e,this.activeDrawing=null,this.activeTool=null,(t=this.onCompleteCallback)==null||t.call(this),this.notifyChange(),so.has(e.type)){var n;(n=this.onStartTextEdit)==null||n.call(this,e)}}else this.state=`placing`;return!0}if(this.state===`placing`&&this.activeDrawing){var r,i,a;if((r=this.activeDrawing.openEnded)!=null&&r){let t=this.activeDrawing.points.length-1;return this.activeDrawing.points[t]={...e},this.activeDrawing.points.push({...e}),!0}let t=(i=this.activeDrawing.requiredPoints)==null?2:i,n=this.activeDrawing.points.length;if(this.activeDrawing.points[n-1]={...e},n<t)return this.activeDrawing.points.push({...e}),!0;this.activeDrawing.complete=!0;let s=this.activeDrawing;if(this.selectedDrawing=s,this.activeDrawing=null,this.state=`idle`,this.activeTool=null,(a=this.onCompleteCallback)==null||a.call(this),this.notifyChange(),so.has(s.type)){var o;(o=this.onStartTextEdit)==null||o.call(this,s)}return!0}return!1}onMouseMove(e){if(this.state===`placing`&&this.activeDrawing){let t=this.activeDrawing.points.length-1;this.activeDrawing.points[t]=e}if(this.dragDrawing&&this.dragStartMouse&&this.dragStartPoints){let t=e.barIndex-this.dragStartMouse.barIndex,n=e.price-this.dragStartMouse.price;for(let e=0;e<this.dragDrawing.points.length;e++)this.dragDrawing.points[e]={barIndex:this.dragStartPoints[e].barIndex+t,price:this.dragStartPoints[e].price+n}}this.resizeDrawing&&this.resizePointIndex>=0&&(this.resizeDrawing.points[this.resizePointIndex]={...e})}finalizePlacing(){var e,t;if(!(this.state!==`placing`||!this.activeDrawing)&&(e=this.activeDrawing.openEnded)!=null&&e){if(this.activeDrawing.points.length>2&&this.activeDrawing.points.pop(),this.activeDrawing.points.length<2){this.drawings.pop(),this.activeDrawing=null,this.state=`idle`,this.activeTool=null;return}this.activeDrawing.complete=!0,this.selectedDrawing=this.activeDrawing,this.activeDrawing=null,this.state=`idle`,this.activeTool=null,(t=this.onCompleteCallback)==null||t.call(this),this.notifyChange()}}startDrag(e,t){this.snapshot(),this.dragDrawing=e,this.dragStartMouse={...t},this.dragStartPoints=e.points.map(e=>({...e}))}endDrag(){this.dragDrawing=null,this.dragStartMouse=null,this.dragStartPoints=null,this.notifyChange()}isDraggingDrawing(){return this.dragDrawing!==null}isPlacing(){return this.state===`placing`}startResize(e,t){this.snapshot(),this.resizeDrawing=e,this.resizePointIndex=t}endResize(){this.resizeDrawing=null,this.resizePointIndex=-1,this.notifyChange()}isResizingDrawing(){return this.resizeDrawing!==null}shiftBarIndices(e){for(let t of this.drawings)for(let n of t.points)n.barIndex+=e;if(this.dragStartPoints)for(let t of this.dragStartPoints)t.barIndex+=e}getHandleAtPoint(e,t,n,r,i,a,o){for(let s=this.drawings.length-1;s>=0;s--){let c=this.drawings[s];if(!c.complete||c.visible===!1||c.locked)continue;let l=c.getHandle(e,t,n,r,i,a,o);if(l)return{drawing:c,handle:l}}return null}hitTest(e,t,n,r,i,a,o){for(let s=this.drawings.length-1;s>=0;s--){let c=this.drawings[s];if(!(c.visible===!1||c.locked)&&c.hitTest(e,t,n,r,i,a,o))return c}return null}selectDrawing(e){this.selectedDrawing=e}getSelectedDrawing(){return this.selectedDrawing}onKeyDown(e){return e===`Escape`?(this.state===`placing`&&this.activeDrawing&&(this.drawings.pop(),this.activeDrawing=null,this.state=`idle`),this.activeTool=null,this.selectedDrawing=null,!0):(e===`Delete`||e===`Backspace`)&&this.selectedDrawing&&!this.editingText?(this.deleteSelected(),!0):e===`z`&&this.history.length>0?(this.undo(),!0):!1}deleteSelected(){this.selectedDrawing&&(this.snapshot(),this.drawings=this.drawings.filter(e=>e!==this.selectedDrawing),this.selectedDrawing=null,this.notifyChange())}undo(){let e=this.history.pop();e!==void 0&&(this.redoStack.push(this.cloneDrawings(this.drawings)),this.drawings=e,this.selectedDrawing=null,this.notifyChange())}redo(){let e=this.redoStack.pop();e!==void 0&&(this.history.push(this.cloneDrawings(this.drawings)),this.drawings=e,this.selectedDrawing=null,this.notifyChange())}hideAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.visible=!1;this.selectedDrawing=null,this.notifyChange()}}showAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.visible=!0;this.notifyChange()}}lockAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.locked=!0;this.selectedDrawing=null,this.notifyChange()}}unlockAll(){if(this.drawings.length!==0){this.snapshot();for(let e of this.drawings)e.locked=!1;this.notifyChange()}}render(e,t,n,r,i,a,o=2){if(e.clearRect(0,0,e.canvas.width,e.canvas.height),this.drawings.length===0)return;let s=window.devicePixelRatio||1;e.save(),e.scale(s,s);for(let s of this.drawings)s.visible!==!1&&s.render(e,t,n,r,i,a,s===this.selectedDrawing,o);e.restore()}getDrawings(){return[...this.drawings]}getDrawingsSnapshot(){return this.drawings.map(e=>({id:e.id,type:e.type,points:e.points.map(e=>({...e})),complete:e.complete,...e.visible!==void 0&&{visible:e.visible},...e.locked!==void 0&&{locked:e.locked},...e.text!==void 0&&{text:e.text}}))}loadDrawings(e){this.drawings=e.map(e=>{var t;let n=this.createDrawing(e.type,(t=e.points[0])==null?{barIndex:0,price:0}:t);return n.id=e.id,n.points=e.points.map(e=>({...e})),n.complete=e.complete,e.visible!==void 0&&(n.visible=e.visible),e.locked!==void 0&&(n.locked=e.locked),e.text!==void 0&&(n.text=e.text),n}),this.selectedDrawing=null,this.activeDrawing=null,this.history=[this.drawings.map(e=>({...e,points:e.points.map(e=>({...e}))}))],this.redoStack=[]}clearAll(){this.drawings.length!==0&&(this.snapshot(),this.drawings=[],this.selectedDrawing=null,this.activeDrawing=null,this.notifyChange())}notifyChange(){var e;(e=this.onDrawingsChange)==null||e.call(this)}snapshot(){this.history.push(this.cloneDrawings(this.drawings)),this.history.length>50&&this.history.shift(),this.redoStack=[]}cloneDrawings(e){return e.map(e=>{let t=Object.create(Object.getPrototypeOf(e));return Object.assign(t,e),t.points=e.points.map(e=>({...e})),t})}createDrawing(e,t){switch(e){case`horizontalLine`:return new It(t);case`verticalLine`:return new Rt(t);case`trendLine`:return new Vt(t);case`trendAngle`:return new Wt(t);case`crossLine`:return new Kt(t);case`parallelChannel`:return new Yt(t);case`flatChannel`:return new Qt(t);case`disjointChannel`:return new tn(t);case`fibRetracement`:return new on(t);case`fibExtension`:return new un(t);case`fibChannel`:return new hn(t);case`fibTimezone`:return new vn(t);case`fibCircles`:return new Sn(t);case`fibSpiral`:return new Tn(t);case`fibFan`:return new jn(t);case`fibProjection`:return new Fn(t);case`gannFan`:return new zn(t);case`gannSquare`:return new Vn(t);case`gannBox`:return new Un(t);case`rectangle`:return new Gn(t);case`rotatedRectangle`:return new Jn(t);case`ellipse`:return new Xn(t);case`triangle`:return new $n(t);case`circle`:return new tr(t);case`arc`:return new ir(t);case`polyline`:return new sr(t);case`path`:return new ur(t);case`priceRange`:return new pr(t);case`dateRange`:return new gr(t);case`datePriceRange`:return new yr(t);case`ruler`:return new Sr(t);case`pitchfork`:return new Er(t);case`schiffPitchfork`:return new Ar(t);case`modifiedSchiff`:return new Pr(t);case`insidePitchfork`:return new Lr(t);case`fixedRangeVP`:return new Vr(t);case`anchoredVP`:return new Gr(t);case`volumeProfile`:return new Yr(t);case`regressionTrend`:return new Qr(t);case`text`:return new ni(t);case`callout`:return new ci(t);case`priceLabel`:return new fi(t);case`arrowMarker`:return new hi(t);case`flag`:return new gi(t);case`priceNote`:return new xi(t);case`anchoredNote`:return new Ei(t);case`arrowUp`:return new Di(t);case`arrowDown`:return new Oi(t);case`headShoulders`:return new Mi(t);case`trianglePattern`:return new Ii(t);case`threeDrives`:return new Bi(t);case`abcdPattern`:return new Wi(t);case`cypherPattern`:return new Ji(t);case`butterflyPattern`:return new Qi(t);case`batPattern`:return new na(t);case`gartleyPattern`:return new oa(t);case`crabPattern`:return new ua(t);case`sharkPattern`:return new ma(t);case`elliottImpulse`:return new ya(t);case`elliottCorrective`:return new wa(t);case`elliottTriangle`:return new ka(t);case`elliottCombination`:return new Pa(t);case`elliottWxy`:return new za(t);case`brush`:return new Ha(t);case`highlighter`:return new Ga(t);case`sineLine`:return new qa(t);case`cyclicLines`:return new Ya(t);case`timeCycles`:return new Za(t);case`projection`:return new eo(t);case`priceProjection`:return new ro(t);case`ghostFeed`:return new oo(t);default:return new Vt(t)}}},lo=2,uo=class{constructor(e,t=g,n=y.chart){this.pills=new Map,this.isOpen=!1,this.onDocClick=e=>{this.isOpen&&!this.el.contains(e.target)&&(this.isOpen=!1,this.dropdownPanel.style.display=`none`,this.collapseBtn.textContent=this.labels.nIndicators.replace(`{count}`,String(this.pills.size)))},this.theme=e,this.cfg=t,this.labels=n,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`absolute`,top:`52px`,left:`6px`,zIndex:`10`,display:`none`,alignItems:`center`,gap:`10px`,pointerEvents:`auto`}),this.inlineRow=document.createElement(`div`),Object.assign(this.inlineRow.style,{display:`flex`,alignItems:`center`,gap:`10px`}),this.collapseBtn=document.createElement(`button`),Object.assign(this.collapseBtn.style,{display:`none`,alignItems:`center`,gap:`4px`,background:this.theme.indicatorOverlay.pillBg,color:this.theme.axisText,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`4px`,padding:`2px 8px`,fontSize:this.cfg.collapseBtnFontSize,fontFamily:this.cfg.collapseBtnFontFamily,cursor:`pointer`,outline:`none`}),this.collapseBtn.addEventListener(`click`,e=>{e.stopPropagation(),this.toggleDropdown()}),this.dropdownPanel=document.createElement(`div`),Object.assign(this.dropdownPanel.style,{display:`none`,position:`absolute`,top:`100%`,left:`0`,marginTop:`4px`,background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`4px`,padding:`4px 0`,minWidth:`140px`,zIndex:`20`,boxShadow:`0 4px 12px rgba(0,0,0,0.15)`});let r=document.createElement(`div`);Object.assign(r.style,{position:`relative`}),r.append(this.collapseBtn,this.dropdownPanel),this.el.append(this.inlineRow,r),document.addEventListener(`click`,this.onDocClick)}addPill(e,t,n,r=`Chart`,i=!0,a,o=null,s){this.pills.has(e)||(this.pills.set(e,{color:t,label:n,timeframe:r,visible:i,onRemove:a,onEdit:o,onToggleVisibility:s}),this.refresh())}updatePillColor(e,t){let n=this.pills.get(e);n&&(n.color=t,this.refresh())}updatePillLabel(e,t){let n=this.pills.get(e);n&&(n.label=t,this.refresh())}updatePillTimeframe(e,t){let n=this.pills.get(e);n&&(n.timeframe=t,this.refresh())}updatePillVisibility(e,t){let n=this.pills.get(e);n&&(n.visible=t,this.refresh())}removePill(e){this.pills.has(e)&&(this.pills.delete(e),this.refresh())}setTheme(e){this.theme=e,Object.assign(this.collapseBtn.style,{background:e.indicatorOverlay.pillBg,color:e.axisText,border:`1px solid ${e.axisBorder}`}),Object.assign(this.dropdownPanel.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`}),this.refresh()}destroy(){document.removeEventListener(`click`,this.onDocClick)}refresh(){let e=Array.from(this.pills.entries());if(this.inlineRow.innerHTML=``,this.dropdownPanel.innerHTML=``,e.length===0){this.el.style.display=`none`,this.collapseBtn.style.display=`none`;return}if(this.el.style.display=`flex`,e.length<=lo){this.isOpen=!1,this.dropdownPanel.style.display=`none`,this.collapseBtn.style.display=`none`;for(let[t,n]of e)this.inlineRow.appendChild(this.makePill(t,n))}else{this.collapseBtn.style.display=`inline-flex`,this.collapseBtn.textContent=this.labels.nIndicators.replace(`{count}`,String(e.length));for(let[t,n]of e)this.dropdownPanel.appendChild(this.makeDropdownRow(t,n));this.dropdownPanel.style.display=this.isOpen?`block`:`none`}}makeTimeframeBadge(e){if(!e||e===`Chart`)return null;let t=document.createElement(`span`);return t.textContent=e,Object.assign(t.style,{fontSize:`10px`,padding:`1px 4px`,borderRadius:`3px`,background:`rgba(128,128,128,0.18)`,color:this.theme.axisText,marginLeft:`2px`,lineHeight:`1.4`}),t}makeEyeIcon(e){let t=document.createElement(`span`);return t.innerHTML=e.visible?ft:pt,Object.assign(t.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:e.visible?`0.6`:`0.4`,lineHeight:`1`}),t.addEventListener(`mouseenter`,()=>{t.style.opacity=`1`}),t.addEventListener(`mouseleave`,()=>{t.style.opacity=e.visible?`0.6`:`0.4`}),t.addEventListener(`click`,t=>{t.stopPropagation(),e.onToggleVisibility()}),t}makePill(e,t){let n=document.createElement(`span`);Object.assign(n.style,{display:`inline-flex`,alignItems:`center`,gap:`4px`,fontSize:this.cfg.pillFontSize,fontFamily:this.cfg.pillFontFamily,color:t.color,whiteSpace:`nowrap`,userSelect:`none`,background:this.theme.indicatorOverlay.pillBg,borderRadius:`4px`,padding:`1px 6px 1px 5px`,opacity:t.visible?`1`:`0.4`});let r=document.createElement(`span`);r.innerHTML=yt,Object.assign(r.style,{display:`inline-flex`,alignItems:`center`});let i=document.createElement(`span`);i.textContent=t.label;let a=this.makeTimeframeBadge(t.timeframe),o=document.createElement(`span`);if(Object.assign(o.style,{display:`inline-flex`,alignItems:`center`,gap:`8px`,marginLeft:`12px`}),o.appendChild(this.makeEyeIcon(t)),t.onEdit){let e=document.createElement(`span`);e.innerHTML=nt,Object.assign(e.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:`0.6`,lineHeight:`1`}),e.addEventListener(`mouseenter`,()=>{e.style.opacity=`1`}),e.addEventListener(`mouseleave`,()=>{e.style.opacity=`0.6`}),e.addEventListener(`click`,e=>{e.stopPropagation(),t.onEdit()}),o.appendChild(e)}let s=document.createElement(`span`);return s.innerHTML=it,Object.assign(s.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`}),s.addEventListener(`click`,e=>{e.stopPropagation(),t.onRemove()}),o.appendChild(s),n.append(r,i),a&&n.appendChild(a),n.appendChild(o),n}makeDropdownRow(e,t){let n=document.createElement(`div`);Object.assign(n.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`8px`,padding:`4px 10px`,fontSize:this.cfg.dropdownRowFontSize,fontFamily:this.cfg.dropdownRowFontFamily,color:t.color,cursor:`default`,opacity:t.visible?`1`:`0.4`}),n.addEventListener(`mouseenter`,()=>{n.style.background=this.theme.indicatorOverlay.dropdownHoverBg}),n.addEventListener(`mouseleave`,()=>{n.style.background=`transparent`});let r=document.createElement(`span`);r.innerHTML=yt,Object.assign(r.style,{display:`inline-flex`,alignItems:`center`});let i=document.createElement(`span`);Object.assign(i.style,{display:`inline-flex`,alignItems:`center`,gap:`4px`,flex:`1`});let a=document.createElement(`span`);a.textContent=t.label,i.appendChild(a);let o=this.makeTimeframeBadge(t.timeframe);o&&i.appendChild(o);let s=document.createElement(`span`);Object.assign(s.style,{display:`inline-flex`,alignItems:`center`,gap:`4px`});let c=document.createElement(`span`);if(c.innerHTML=t.visible?ft:pt,Object.assign(c.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:t.visible?`0.6`:`0.4`,lineHeight:`1`}),c.addEventListener(`mouseenter`,()=>{c.style.opacity=`1`}),c.addEventListener(`mouseleave`,()=>{c.style.opacity=t.visible?`0.6`:`0.4`}),c.addEventListener(`click`,e=>{e.stopPropagation(),t.onToggleVisibility()}),s.appendChild(c),t.onEdit){let e=document.createElement(`span`);e.innerHTML=nt,Object.assign(e.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`,opacity:`0.6`,lineHeight:`1`}),e.addEventListener(`mouseenter`,()=>{e.style.opacity=`1`}),e.addEventListener(`mouseleave`,()=>{e.style.opacity=`0.6`}),e.addEventListener(`click`,e=>{e.stopPropagation(),this.isOpen=!1,this.dropdownPanel.style.display=`none`,t.onEdit()}),s.appendChild(e)}let l=document.createElement(`span`);return l.innerHTML=it,Object.assign(l.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.indicatorOverlay.iconColor,cursor:`pointer`}),l.addEventListener(`click`,e=>{e.stopPropagation(),t.onRemove()}),s.appendChild(l),n.append(r,i,s),n}toggleDropdown(){this.isOpen=!this.isOpen,this.dropdownPanel.style.display=this.isOpen?`block`:`none`,this.collapseBtn.textContent=this.labels.nIndicators.replace(`{count}`,String(this.pills.size))}},fo=class{constructor(e,t=y.dialogs){this.schema=null,this.currentParams={},this.onUpdate=null,this.onRemove=null,this.inputRefs=new Map,this.theme=e,this.labels=t,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`fixed`,inset:`0`,background:`rgba(0,0,0,0.5)`,display:`none`,alignItems:`center`,justifyContent:`center`,zIndex:`1000`}),this.el.addEventListener(`mousedown`,e=>{e.target===this.el&&this.hide()}),this.panel=document.createElement(`div`),Object.assign(this.panel.style,{display:`flex`,flexDirection:`column`,minWidth:`300px`,maxWidth:`360px`,background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`6px`,boxShadow:`0 8px 32px rgba(0,0,0,0.45)`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`12px`,overflow:`hidden`}),this.panel.addEventListener(`mousedown`,e=>e.stopPropagation()),this.el.appendChild(this.panel)}show(e,t,n,r){this.schema=e,this.currentParams={...t},this.onUpdate=n,this.onRemove=r,this.rebuild(),this.el.style.display=`flex`}hide(){this.el.style.display=`none`,this.schema=null,this.onUpdate=null,this.onRemove=null}setTheme(e){this.theme=e,Object.assign(this.panel.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`}),this.el.style.display!==`none`&&this.schema&&this.rebuild()}destroy(){this.el.remove()}rebuild(){this.panel.innerHTML=``,this.inputRefs.clear(),this.schema&&(this.panel.appendChild(this.buildHeader(this.schema.shortName)),this.panel.appendChild(this.buildBody(this.schema.fields)),this.panel.appendChild(this.buildFooter()))}buildHeader(e){let t=document.createElement(`div`);Object.assign(t.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`10px 14px`,borderBottom:`1px solid ${this.theme.axisBorder}`});let n=document.createElement(`span`);n.textContent=`${e} ${this.labels.indicator.titleSuffix}`,Object.assign(n.style,{color:this.theme.tooltip.text,fontWeight:`600`,fontSize:`13px`});let r=document.createElement(`span`);return r.innerHTML=it,Object.assign(r.style,{display:`inline-flex`,alignItems:`center`,color:this.theme.axisText,cursor:`pointer`}),r.addEventListener(`mouseenter`,()=>{r.style.color=this.theme.tooltip.text}),r.addEventListener(`mouseleave`,()=>{r.style.color=this.theme.axisText}),r.addEventListener(`click`,()=>this.hide()),t.append(n,r),t}buildBody(e){let t=document.createElement(`div`);if(Object.assign(t.style,{padding:`12px 14px`,display:`flex`,flexDirection:`column`,gap:`8px`}),e.length===0){let e=document.createElement(`span`);return e.textContent=this.labels.indicator.noParams,Object.assign(e.style,{color:this.theme.axisText,fontSize:`11px`}),t.appendChild(e),t}for(let n of e)t.appendChild(this.buildField(n));return t}buildField(e){var t;let n=document.createElement(`div`);Object.assign(n.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`10px`});let r=document.createElement(`label`);r.textContent=e.label,Object.assign(r.style,{color:this.theme.axisText,fontSize:`12px`,flex:`1`});let i=(t=this.currentParams[e.key])==null?e.default:t;if(e.kind===`number`){let t=document.createElement(`input`);t.type=`number`,t.min=String(e.min),t.max=String(e.max),t.step=String(e.step),t.value=String(i),Object.assign(t.style,{width:`80px`,background:this.theme.background,color:this.theme.tooltip.text,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`3px`,padding:`4px 6px`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,outline:`none`,textAlign:`right`}),this.inputRefs.set(e.key,t),n.append(r,t)}else if(e.kind===`select`){let t=document.createElement(`select`);for(let n of e.options){let e=document.createElement(`option`);e.value=n,e.textContent=n,n===String(i)&&(e.selected=!0),t.appendChild(e)}Object.assign(t.style,{minWidth:`120px`,background:this.theme.background,color:this.theme.tooltip.text,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`3px`,padding:`4px 6px`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,outline:`none`,cursor:`pointer`}),this.inputRefs.set(e.key,t),n.append(r,t)}else{let t=document.createElement(`input`);t.type=`color`,t.value=String(i),Object.assign(t.style,{width:`40px`,height:`26px`,border:`none`,padding:`0`,cursor:`pointer`,background:`transparent`,borderRadius:`3px`}),this.inputRefs.set(e.key,t),n.append(r,t)}return n}buildFooter(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,gap:`8px`,padding:`10px 14px`,borderTop:`1px solid ${this.theme.axisBorder}`});let t=this.makeButton(`Remove`,`#ef5350`,`transparent`,`#ef5350`);t.addEventListener(`click`,()=>{var e;(e=this.onRemove)==null||e.call(this),this.hide()});let n=this.makeButton(`Update`,`#fff`,`#2196f3`,`#2196f3`);return n.addEventListener(`click`,()=>{if(!this.schema||!this.onUpdate)return;let e={};for(let t of this.schema.fields){let n=this.inputRefs.get(t.key);n&&(e[t.key]=t.kind===`number`?Number(n.value):String(n.value))}this.onUpdate(e),this.hide()}),e.append(t,n),e}makeButton(e,t,n,r){let i=document.createElement(`button`);return i.textContent=e,Object.assign(i.style,{flex:`1`,color:t,background:n,border:`1px solid ${r}`,borderRadius:`4px`,padding:`6px 0`,cursor:`pointer`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,fontWeight:`600`,outline:`none`}),i.addEventListener(`mouseenter`,()=>{i.style.opacity=`0.85`}),i.addEventListener(`mouseleave`,()=>{i.style.opacity=`1`}),i}},po={appearance:`Appearance`,trading:`Trading`},mo=class{constructor(e,t,n=y.dialogs){this.activeTab=`appearance`,this.onChange=null,this.onReset=null,this.tabEls=new Map,this.theme=e,this.labels=n,this.current={...t},this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`fixed`,inset:`0`,background:`rgba(0,0,0,0.5)`,display:`none`,alignItems:`center`,justifyContent:`center`,zIndex:`10000`}),this.el.addEventListener(`mousedown`,e=>{e.target===this.el&&this.hide()}),this.panel=document.createElement(`div`),Object.assign(this.panel.style,{display:`flex`,flexDirection:`column`,width:`540px`,minHeight:`340px`,maxWidth:`calc(100vw - 32px)`,maxHeight:`calc(100vh - 48px)`,background:e.tooltip.background,border:`1px solid ${e.axisBorder}`,borderRadius:`10px`,boxShadow:`0 16px 48px rgba(0,0,0,0.55), 0 4px 16px rgba(0,0,0,0.3)`,fontFamily:`'Inter', system-ui, -apple-system, sans-serif`,fontSize:`12px`,overflow:`hidden`}),this.panel.addEventListener(`mousedown`,e=>e.stopPropagation());let r=this.buildHeader();this.panel.appendChild(r);let i=document.createElement(`div`);Object.assign(i.style,{display:`flex`,flex:`1`,overflow:`hidden`}),this.sidebar=this.buildSidebar(),i.appendChild(this.sidebar),this.content=document.createElement(`div`),Object.assign(this.content.style,{flex:`1`,padding:`20px 24px`,overflowY:`auto`,scrollbarWidth:`thin`}),i.appendChild(this.content),this.panel.appendChild(i),this.panel.appendChild(this.buildFooter()),this.el.appendChild(this.panel)}show(e,t,n){this.current={...e},this.onChange=t,this.onReset=n==null?null:n,this.renderContent(),this.el.style.display=`flex`}hide(){this.el.style.display=`none`,this.onChange=null,this.onReset=null}setTheme(e){this.theme=e,this.applyPanelTheme(),this.el.style.display!==`none`&&this.renderContent()}destroy(){this.el.remove()}emit(){var e;(e=this.onChange)==null||e.call(this,{...this.current})}applyPanelTheme(){Object.assign(this.panel.style,{background:this.theme.tooltip.background,border:`1px solid ${this.theme.axisBorder}`}),this.sidebar.innerHTML=``,this.tabEls.clear(),this.buildSidebarTabs(this.sidebar),this.highlightActiveTab()}buildHeader(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`14px 20px 12px`,borderBottom:`1px solid ${this.theme.axisBorder}`,flexShrink:`0`});let t=document.createElement(`span`);t.textContent=this.labels.settings.title,Object.assign(t.style,{color:this.theme.tooltip.text,fontWeight:`600`,fontSize:`14px`,letterSpacing:`-0.01em`});let n=document.createElement(`button`);return n.innerHTML=vt,Object.assign(n.style,{color:this.theme.axisText,cursor:`pointer`,background:`transparent`,border:`none`,padding:`4px`,borderRadius:`4px`,display:`flex`,alignItems:`center`,justifyContent:`center`,outline:`none`,transition:`color 0.1s, background 0.1s`}),n.addEventListener(`mouseenter`,()=>{n.style.color=this.theme.tooltip.text,n.style.background=this.theme.ui.accentBg}),n.addEventListener(`mouseleave`,()=>{n.style.color=this.theme.axisText,n.style.background=`transparent`}),n.addEventListener(`click`,()=>this.hide()),e.append(t,n),e}buildFooter(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,justifyContent:`flex-end`,padding:`10px 20px`,borderTop:`1px solid ${this.theme.axisBorder}`,flexShrink:`0`});let t=document.createElement(`button`);return t.textContent=this.labels.settings.resetBtn,Object.assign(t.style,{color:this.theme.axisText,fontSize:`11px`,fontFamily:`'Inter', system-ui, sans-serif`,background:`transparent`,border:`1px solid ${this.theme.axisBorder}`,borderRadius:`5px`,padding:`5px 12px`,cursor:`pointer`,outline:`none`,transition:`color 0.1s, border-color 0.1s, background 0.1s`}),t.addEventListener(`mouseenter`,()=>{t.style.color=this.theme.tooltip.text,t.style.borderColor=this.theme.ui.accent,t.style.background=this.theme.ui.accentBg}),t.addEventListener(`mouseleave`,()=>{t.style.color=this.theme.axisText,t.style.borderColor=this.theme.axisBorder,t.style.background=`transparent`}),t.addEventListener(`click`,()=>{var e;(e=this.onReset)==null||e.call(this),this.hide()}),e.appendChild(t),e}buildSidebar(){let e=document.createElement(`div`);return Object.assign(e.style,{width:`130px`,flexShrink:`0`,borderRight:`1px solid ${this.theme.axisBorder}`,padding:`10px 0`,display:`flex`,flexDirection:`column`,gap:`2px`}),this.buildSidebarTabs(e),e}buildSidebarTabs(e){for(let t of[`appearance`,`trading`]){let n=document.createElement(`button`);Object.assign(n.style,{display:`flex`,alignItems:`center`,gap:`8px`,padding:`8px 14px`,background:`transparent`,border:`none`,borderLeft:`2px solid transparent`,color:this.theme.axisText,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,cursor:`pointer`,width:`100%`,textAlign:`left`,outline:`none`,transition:`background 0.1s, color 0.1s`,boxSizing:`border-box`});let r=document.createElement(`span`);r.innerHTML=_t[t],Object.assign(r.style,{display:`flex`,flexShrink:`0`});let i=document.createElement(`span`);i.textContent=po[t],n.append(r,i),n.addEventListener(`mouseenter`,()=>{this.activeTab!==t&&(n.style.background=this.theme.ui.accentBg,n.style.color=this.theme.tooltip.text)}),n.addEventListener(`mouseleave`,()=>{this.activeTab!==t&&(n.style.background=`transparent`,n.style.color=this.theme.axisText)}),n.addEventListener(`click`,()=>{this.activeTab=t,this.highlightActiveTab(),this.renderContent()}),this.tabEls.set(t,n),e.appendChild(n)}}highlightActiveTab(){for(let[e,t]of this.tabEls){let n=e===this.activeTab;Object.assign(t.style,{background:n?this.theme.ui.accentBg:`transparent`,color:n?this.theme.ui.accentText:this.theme.axisText,borderLeft:n?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,fontWeight:n?`500`:`400`})}}renderContent(){switch(this.content.innerHTML=``,this.highlightActiveTab(),this.activeTab){case`appearance`:this.buildAppearanceSection();break;case`trading`:this.buildTradingSection();break}}buildAppearanceSection(){let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,paddingBottom:`10px`,borderBottom:`1px solid ${this.theme.axisBorder}`});let t=document.createElement(`span`);t.textContent=`Theme`,Object.assign(t.style,{color:this.theme.tooltip.text,fontSize:`13px`,fontWeight:`600`}),e.append(t,this.makeThemeToggle()),this.content.appendChild(e),this.content.appendChild(this.makeSectionHeader(`Colors`)),this.content.appendChild(this.buildColorRows())}makeThemeToggle(){let e=this.current.theme===`light`,t=document.createElement(`div`);Object.assign(t.style,{display:`flex`,alignItems:`center`,gap:`8px`});let n=document.createElement(`span`);n.textContent=`Dark`;let r=document.createElement(`span`);r.textContent=`Light`;let i=()=>{Object.assign(n.style,{color:e?this.theme.axisText:this.theme.tooltip.text,fontWeight:e?`400`:`500`,fontSize:`11px`,cursor:`pointer`,userSelect:`none`}),Object.assign(r.style,{color:e?this.theme.tooltip.text:this.theme.axisText,fontWeight:e?`500`:`400`,fontSize:`11px`,cursor:`pointer`,userSelect:`none`})},a=document.createElement(`div`);Object.assign(a.style,{position:`relative`,width:`36px`,height:`20px`,borderRadius:`10px`,cursor:`pointer`,flexShrink:`0`,transition:`background 0.18s`,background:this.theme.axisBorder,border:`1px solid ${this.theme.axisText}50`,boxSizing:`border-box`});let o=document.createElement(`div`);Object.assign(o.style,{position:`absolute`,top:`2px`,left:e?`18px`:`2px`,width:`14px`,height:`14px`,borderRadius:`50%`,background:this.theme.ui.accent,transition:`left 0.18s`,pointerEvents:`none`}),a.appendChild(o);let s=()=>{e=!e,o.style.left=e?`18px`:`2px`,this.current.theme=e?`light`:`dark`,i(),this.emit(),this.renderContent()};return a.addEventListener(`click`,s),n.addEventListener(`click`,()=>{e&&s()}),r.addEventListener(`click`,()=>{e||s()}),i(),t.append(n,a,r),t}buildColorRows(){var e,t,n,r;let i=this.current.theme,a=(e=(t=this.current.canvasColors)==null?void 0:t[i])==null?{}:e,o=document.createElement(`div`);Object.assign(o.style,{display:`grid`,gridTemplateColumns:`max-content 24px 24px`,columnGap:`8px`,rowGap:`8px`,padding:`8px 0 4px`,alignItems:`center`});let s=[{label:`Background`,s1:{field:`background`,fallback:this.theme.background}},{label:`Grid`,s1:{field:`grid`,fallback:this.theme.grid}},{label:`Axis Text`,s1:{field:`axisText`,fallback:this.theme.axisText}},{label:`Axis Border`,s1:{field:`axisBorder`,fallback:this.theme.axisBorder}},{label:`Crosshair`,s1:{field:`crosshair`,fallback:this.theme.crosshair}},{label:`Candle Body`,s1:{field:`candleUp`,fallback:this.theme.candle.up},s2:{field:`candleDown`,fallback:this.theme.candle.down}},{label:`Candle Wick`,s1:{field:`wickUp`,fallback:this.theme.candle.wickUp},s2:{field:`wickDown`,fallback:this.theme.candle.wickDown}},{label:`Candle Border`,s1:{field:`borderUp`,fallback:(n=this.theme.candle.borderUp)==null?this.theme.candle.up:n},s2:{field:`borderDown`,fallback:(r=this.theme.candle.borderDown)==null?this.theme.candle.down:r}},{label:`Volume`,s1:{field:`volumeUp`,fallback:this.theme.volume.up},s2:{field:`volumeDown`,fallback:this.theme.volume.down}}],c=e=>{var t;return this.makeColorSwatch((t=a[e.field])==null?e.fallback:t,t=>{this.current.canvasColors||(this.current.canvasColors={}),this.current.canvasColors[i]||(this.current.canvasColors[i]={}),this.current.canvasColors[i][e.field]=t,this.emit()})};for(let{label:e,s1:t,s2:n}of s){let r=document.createElement(`span`);r.textContent=e,Object.assign(r.style,{color:this.theme.axisText,fontSize:`11px`,paddingRight:`12px`});let i=c(t);i.style.width=`24px`,i.style.height=`24px`;let a;n?(a=c(n),a.style.width=`24px`,a.style.height=`24px`):a=document.createElement(`span`),o.append(r,i,a)}return o}makeColorSwatch(e,t){let n=`${this.theme.axisText}80`,r=document.createElement(`div`);Object.assign(r.style,{position:`relative`,width:`28px`,height:`28px`,borderRadius:`6px`,overflow:`hidden`,cursor:`pointer`,border:`1.5px solid ${n}`,flexShrink:`0`,boxSizing:`border-box`});let i=document.createElement(`div`);Object.assign(i.style,{position:`absolute`,inset:`0`,background:e});let a=document.createElement(`input`);a.type=`color`,a.value=e,Object.assign(a.style,{position:`absolute`,inset:`0`,opacity:`0`,width:`100%`,height:`100%`,cursor:`pointer`,padding:`0`,border:`none`});let o=null;return a.addEventListener(`input`,()=>{i.style.background=a.value,o!==null&&clearTimeout(o),o=setTimeout(()=>{o=null,t(a.value)},300)}),r.append(i,a),r}buildTradingSection(){let e=this.labels.settings;this.content.appendChild(this.makeSectionHeader(e.tfcSection)),this.content.appendChild(this.makeVerticalSettingRow(e.showLabel,`Controls which trade levels are displayed on the chart`,this.makeSegmented([{value:`all`,label:e.showAll},{value:`positions`,label:e.showPositions},{value:`orders`,label:e.showOrders},{value:`none`,label:e.showNone}],this.current.tradeDisplayFilter,e=>{this.current.tradeDisplayFilter=e,this.emit()}))),this.content.appendChild(this.makeVerticalSettingRow(e.positionStyleLabel,`How open positions are rendered on the chart`,this.makeSegmented([{value:`line`,label:e.styleLine},{value:`dot`,label:e.styleDot}],this.current.positionRenderStyle,e=>{this.current.positionRenderStyle=e,this.emit()})))}makeSectionHeader(e,t=!1){let n=document.createElement(`div`);return n.textContent=e,Object.assign(n.style,{color:this.theme.tooltip.text,fontSize:`13px`,fontWeight:`600`,paddingBottom:`10px`,marginTop:t?`0`:`20px`,marginBottom:`2px`,borderBottom:`1px solid ${this.theme.axisBorder}`}),n}makeVerticalSettingRow(e,t,n){let r=document.createElement(`div`);Object.assign(r.style,{display:`flex`,flexDirection:`column`,gap:`12px`,padding:`14px 0`,borderBottom:`1px solid ${this.theme.axisBorder}`});let i=document.createElement(`div`);Object.assign(i.style,{display:`flex`,flexDirection:`column`,gap:`0px`});let a=document.createElement(`span`);a.textContent=e,Object.assign(a.style,{color:this.theme.tooltip.text,fontSize:`12px`,fontWeight:`500`});let o=document.createElement(`span`);return o.textContent=t,Object.assign(o.style,{color:this.theme.axisText,fontSize:`10px`}),i.append(a,o),Object.assign(n.style,{width:`fit-content`,border:`1px solid ${this.theme.axisText}`,borderRadius:`6px`,overflow:`hidden`}),r.append(i,n),r}makeSegmented(e,t,n){let r=document.createElement(`div`);Object.assign(r.style,{display:`inline-flex`,borderRadius:`6px`,border:`1px solid ${this.theme.axisText}`,overflow:`hidden`,flexShrink:`0`});let i=[];for(let a of e){let o=document.createElement(`button`),s=a.value===t;Object.assign(o.style,{padding:`5px 14px`,fontSize:`11px`,fontFamily:`'Inter', system-ui, sans-serif`,background:s?this.theme.ui.accent:`transparent`,color:s?`#ffffff`:this.theme.axisText,border:`none`,borderRight:`1px solid ${this.theme.axisText}`,cursor:`pointer`,outline:`none`,transition:`background 0.12s, color 0.12s`,whiteSpace:`nowrap`,textAlign:`center`}),a===e[e.length-1]&&(o.style.borderRight=`none`),o.textContent=a.label,o.addEventListener(`mouseenter`,()=>{t!==a.value&&(o.style.background=this.theme.ui.accentBg,o.style.color=this.theme.ui.accentText)}),o.addEventListener(`mouseleave`,()=>{t!==a.value&&(o.style.background=`transparent`,o.style.color=this.theme.axisText)}),o.addEventListener(`click`,()=>{t=a.value;for(let e of i)e.style.background=`transparent`,e.style.color=this.theme.axisText;o.style.background=this.theme.ui.accent,o.style.color=`#ffffff`,n(a.value)}),i.push(o),r.appendChild(o)}return r}},ho=class{constructor(e,t,n,r=y.trade){this._visible=!1,this.theme=e,this.el=document.createElement(`button`),this.el.innerHTML=xt,this.el.title=r.placeOrderTitle,Object.assign(this.el.style,{position:`absolute`,right:`${t+26}px`,top:`0`,width:`22px`,height:`22px`,borderRadius:`50%`,border:`1px solid ${e.axisBorder}`,background:e.tooltip.background,color:e.axisText,fontSize:`14px`,lineHeight:`1`,display:`none`,alignItems:`center`,justifyContent:`center`,cursor:`pointer`,padding:`0`,fontFamily:`'Inter', system-ui, sans-serif`,zIndex:`15`,transform:`translateY(-50%)`,transition:`opacity 0.1s`,pointerEvents:`auto`,userSelect:`none`}),this.el.addEventListener(`click`,e=>{e.stopPropagation(),n()}),this.el.addEventListener(`mouseenter`,()=>{this.el.style.opacity=`1`,Object.assign(this.el.style,{background:e.tooltip.background,color:`#26a69a`,border:`1px solid #26a69a`})}),this.el.addEventListener(`mouseleave`,e=>{var t;Object.assign(this.el.style,{background:this.theme.tooltip.background,color:this.theme.axisText,border:`1px solid ${this.theme.axisBorder}`});let n=e.relatedTarget;(!n||!((t=this.el.parentElement)!=null&&t.contains(n)))&&this.hide()})}setY(e){this.el.style.top=`${e}px`}show(){this._visible||(this._visible=!0,this.el.style.display=`flex`)}hide(){this._visible&&(this._visible=!1,this.el.style.display=`none`)}setTheme(e,t){this.theme=e,Object.assign(this.el.style,{border:`1px solid ${e.axisBorder}`,background:e.tooltip.background,color:e.axisText,right:`${t+26}px`})}},go=class{constructor(e,t,n,r=y.trade){this._price=0,this._pricePrecision=2,this._buyOrderType=`limit`,this._sellOrderType=`limit`,this.onDocMouseDown=e=>{this.isVisible&&!this.el.contains(e.target)&&this.hide()},this.theme=e,this.lots=t,this.onDraftCreate=n,this.labels=r,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`absolute`,display:`none`,flexDirection:`column`,gap:`1px`,background:e.tooltip.background,border:`1px solid ${e.axisBorder}`,borderRadius:`5px`,padding:`4px`,zIndex:`20`,boxShadow:`0 4px 16px rgba(0,0,0,0.25)`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`12px`,minWidth:`140px`,pointerEvents:`auto`}),document.addEventListener(`mousedown`,this.onDocMouseDown)}show(e,t,n,r=2,i=`limit`,a=`limit`){this._price=e,this._pricePrecision=r,this._buyOrderType=i,this._sellOrderType=a,this.rebuild(),this.el.style.display=`flex`,this.el.style.right=`${n}px`,this.el.style.top=`${t-16}px`,this.el.style.width=`145px`}hide(){this.el.style.display=`none`}get isVisible(){return this.el.style.display!==`none`}setLots(e){this.lots=e}setTheme(e){this.theme=e,Object.assign(this.el.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`})}destroy(){document.removeEventListener(`mousedown`,this.onDocMouseDown)}rebuild(){this.el.innerHTML=``,this.el.append(this.makeRow(this.labels.buy,`#26a69a`,`buy`,this._buyOrderType),this.makeRow(this.labels.sell,`#ef5350`,`sell`,this._sellOrderType))}makeRow(e,t,n,r){let i=document.createElement(`button`),a=this._price.toFixed(this._pricePrecision);return i.textContent=`${e} ${r===`limit`?this.labels.limit:this.labels.stop} ${a}`,Object.assign(i.style,{display:`block`,width:`100%`,background:`transparent`,color:t,border:`none`,borderRadius:`3px`,padding:`7px 10px`,textAlign:`left`,cursor:`pointer`,fontSize:`12px`,fontFamily:`'Inter', system-ui, sans-serif`,fontWeight:`600`}),i.addEventListener(`mouseenter`,()=>{i.style.background=t+`22`}),i.addEventListener(`mouseleave`,()=>{i.style.background=`transparent`}),i.addEventListener(`mousedown`,e=>{e.stopPropagation(),this.onDraftCreate(n,this._price,r),this.hide()}),i}},_o=class e{constructor(e,t=y.trade){this._pendingLots=null,this.priceAxisWidth=e,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`absolute`,display:`none`,alignItems:`center`,gap:`5px`,right:`${e+4}px`,top:`0`,transform:`translateY(calc(-100% - 16px))`,zIndex:`18`,pointerEvents:`auto`,userSelect:`none`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`11px`});let n=document.createElement(`span`);n.textContent=t.qty,this.input=document.createElement(`input`),this.input.type=`number`,Object.assign(this.input.style,{width:`52px`,padding:`3px 5px`,border:`1px solid #ffffff`,borderRadius:`3px`,background:`rgb(30,30,30)`,color:`#ffffff`,fontSize:`11px`,fontFamily:`'Inter', system-ui, sans-serif`,outline:`none`,textAlign:`right`}),this.input.addEventListener(`mousedown`,e=>e.stopPropagation()),this.input.addEventListener(`wheel`,e=>e.stopPropagation()),this.input.addEventListener(`focus`,()=>this.input.select()),this.input.addEventListener(`input`,()=>{var e;return(e=this.onLotsChange)==null?void 0:e.call(this,this.getValue())}),this.el.append(n,this.input)}static boxBg(e){return e.background===`#ffffff`?`rgb(230,230,230)`:`rgb(30,30,30)`}static boxFg(e){return e.background===`#ffffff`?`#000000`:`#ffffff`}show(t,n,r,i){var a;let o=e.boxBg(r),s=e.boxFg(r);Object.assign(this.input.style,{background:o,color:s,border:`1px solid ${s}`});let c=this.el.firstElementChild;c&&(c.style.color=s),this.input.min=String(n),this.input.step=String(n),this.input.value=String((a=this._pendingLots)==null?n:a),this._pendingLots=null;let l=i===void 0?t:Math.max(54,Math.min(i-10,t));this.el.style.top=`${l}px`,this.el.style.display=`flex`,requestAnimationFrame(()=>this.input.focus({preventScroll:!0}))}hide(){this.el.style.display=`none`}setValue(e){if(this.el.style.display===`none`){this._pendingLots=e;return}this.input.value=String(e)}getValue(){let e=parseFloat(this.input.value);return isNaN(e)||e<=0?parseFloat(this.input.min||`1`):e}setY(e,t){let n=t===void 0?e:Math.max(54,Math.min(t-10,e));this.el.style.top=`${n}px`}setTheme(t,n){this.priceAxisWidth=n,this.el.style.right=`${n+4}px`;let r=e.boxBg(t),i=e.boxFg(t);Object.assign(this.input.style,{background:r,color:i,border:`1px solid ${i}`});let a=this.el.firstElementChild;a&&(a.style.color=i)}destroy(){this.el.remove()}},vo=50,yo=20,bo=class{constructor(e,t){this.isins=[],this.currentSymbol=``,this.escHandler=null,this.theme=e,this.onSelect=t,this.el=document.createElement(`div`),Object.assign(this.el.style,{position:`fixed`,inset:`0`,background:`rgba(0,0,0,0.5)`,display:`none`,alignItems:`center`,justifyContent:`center`,zIndex:`1000`}),this.el.addEventListener(`mousedown`,e=>{e.target===this.el&&this.hide()}),this.panel=document.createElement(`div`),Object.assign(this.panel.style,{display:`flex`,flexDirection:`column`,width:`360px`,maxHeight:`520px`,background:e.tooltip.background,border:`1px solid ${e.axisBorder}`,borderRadius:`6px`,boxShadow:`0 8px 32px rgba(0,0,0,0.45)`,fontFamily:`'Inter', system-ui, sans-serif`,fontSize:`12px`,overflow:`hidden`}),this.panel.addEventListener(`mousedown`,e=>e.stopPropagation()),this.el.appendChild(this.panel);let n=document.createElement(`div`);Object.assign(n.style,{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`10px 14px`,borderBottom:`1px solid ${e.axisBorder}`,flexShrink:`0`});let r=document.createElement(`span`);r.textContent=`Select Symbol`,Object.assign(r.style,{color:e.tooltip.text,fontWeight:`600`,fontSize:`13px`});let i=document.createElement(`span`);i.innerHTML=it,Object.assign(i.style,{display:`inline-flex`,alignItems:`center`,color:e.axisText,cursor:`pointer`}),i.addEventListener(`mouseenter`,()=>{i.style.color=e.tooltip.text}),i.addEventListener(`mouseleave`,()=>{i.style.color=e.axisText}),i.addEventListener(`click`,()=>this.hide()),n.appendChild(r),n.appendChild(i),this.panel.appendChild(n);let a=document.createElement(`div`);Object.assign(a.style,{padding:`8px 14px`,borderBottom:`1px solid ${e.axisBorder}`,flexShrink:`0`}),this.searchInput=document.createElement(`input`),this.searchInput.type=`text`,this.searchInput.placeholder=`Search symbols…`,Object.assign(this.searchInput.style,{width:`100%`,boxSizing:`border-box`,background:`transparent`,border:`1px solid ${e.axisBorder}`,borderRadius:`4px`,color:e.tooltip.text,fontSize:`12px`,padding:`5px 8px`,outline:`none`}),this.searchInput.addEventListener(`input`,()=>this.renderList()),a.appendChild(this.searchInput),this.panel.appendChild(a),this.listEl=document.createElement(`div`),Object.assign(this.listEl.style,{overflowY:`auto`,flex:`1`,scrollbarWidth:`thin`,scrollbarColor:`rgba(120,130,150,0.35) transparent`}),this.panel.appendChild(this.listEl)}show(e,t){this.isins=e,this.currentSymbol=t,this.searchInput.value=``,this.renderList(),this.el.style.display=`flex`,requestAnimationFrame(()=>this.searchInput.focus()),this.escHandler=e=>{e.key===`Escape`&&this.hide()},document.addEventListener(`keydown`,this.escHandler)}hide(){this.el.style.display=`none`,this.escHandler&&(document.removeEventListener(`keydown`,this.escHandler),this.escHandler=null)}setCurrentSymbol(e){this.currentSymbol=e,this.el.style.display!==`none`&&this.renderList()}setIsins(e){this.isins=e}setTheme(e){this.theme=e,Object.assign(this.panel.style,{background:e.tooltip.background,border:`1px solid ${e.axisBorder}`})}destroy(){this.escHandler&&document.removeEventListener(`keydown`,this.escHandler),this.el.remove()}sortWithCurrentFirst(e){if(!this.currentSymbol)return e;let t=e.indexOf(this.currentSymbol);if(t<=0)return e;let n=e.slice();return n.splice(t,1),n.unshift(this.currentSymbol),n}renderList(){let e=this.searchInput.value.trim().toLowerCase(),t=this.sortWithCurrentFirst(e?this.isins.filter(t=>t.toLowerCase().includes(e)).slice(0,yo):this.isins.slice(0,vo));if(this.listEl.innerHTML=``,t.length===0){let e=document.createElement(`div`);e.textContent=`No symbols found`,Object.assign(e.style,{padding:`16px 14px`,color:this.theme.axisText,textAlign:`center`}),this.listEl.appendChild(e);return}for(let e of t){let t=document.createElement(`div`),n=e===this.currentSymbol;Object.assign(t.style,{padding:`8px 14px`,cursor:`pointer`,color:n?this.theme.ui.accentText:this.theme.tooltip.text,background:n?this.theme.ui.accentBg:`transparent`,fontWeight:n?`600`:`400`,borderLeft:n?`2px solid ${this.theme.ui.accent}`:`2px solid transparent`,boxSizing:`border-box`,userSelect:`none`}),t.textContent=e,t.addEventListener(`mouseenter`,()=>{e!==this.currentSymbol&&(t.style.background=this.theme.ui.accentBg)}),t.addEventListener(`mouseleave`,()=>{e!==this.currentSymbol&&(t.style.background=`transparent`)}),t.addEventListener(`click`,()=>{this.onSelect(e),this.hide()}),this.listEl.appendChild(t)}}},xo=class e{constructor(){this._active=!1,this._isDraggingBracket=!1,this._level=null,this._startY=0,this._startPrice=0,this._currentPrice=0,this._mainMinPrice=-1/0,this._mainMaxPrice=1/0,this._bracketType=null,this._bracketStartPrice=0,this._bracketCurrentPrice=0,this._bracketParentPrice=0,this._bracketParentSide=`buy`,this._bracketMarketPrice=0}startDrag(e,t,n,r,i,a,o,s){this._active=!0,this._isDraggingBracket=!1,this._level=e,this._startY=t,this._startPrice=n,this._currentPrice=n,this._bracketType=null,r!==void 0||i!==void 0?(a==null?`buy`:a)===`buy`?(this._mainMinPrice=r==null?-1/0:r,this._mainMaxPrice=i==null?1/0:i):(this._mainMinPrice=i==null?-1/0:i,this._mainMaxPrice=r==null?1/0:r):(this._mainMinPrice=-1/0,this._mainMaxPrice=1/0),o&&o>0&&s&&s!==`market`&&a&&(a===`buy`&&s===`limit`||a===`sell`&&s===`stop`?this._mainMaxPrice=Math.min(this._mainMaxPrice,o):this._mainMinPrice=Math.max(this._mainMinPrice,o))}startBracketDrag(e,t,n,r=0,i){var a;this._active=!0,this._isDraggingBracket=!0,this._level=e,this._bracketType=t,this._bracketStartPrice=n,this._bracketCurrentPrice=n,this._bracketParentPrice=i==null?e.price:i,this._bracketParentSide=(a=e.side)==null?`buy`:a,this._bracketMarketPrice=r}onMouseMove(e,t,n,r){if(!this._active||!this._level)return null;let i=t.pixelToPrice(e,n,r);if(this._isDraggingBracket&&this._bracketType!==null){let e=this._clampBracketPrice(i,this._bracketType,this._bracketParentPrice,this._bracketParentSide,this._bracketMarketPrice);return this._bracketCurrentPrice=e,{newPrice:e,label:`${this._level.label}:${this._bracketType}`,isBracket:!0}}let a=Math.max(this._mainMinPrice,Math.min(this._mainMaxPrice,i));return this._currentPrice=a,{newPrice:a,label:this._level.label,isBracket:!1}}endDrag(){if(!this._active||!this._level)return null;let e=this._level,t;return t=this._isDraggingBracket&&this._bracketType!==null?{label:e.label,type:e.type,newPrice:this._bracketCurrentPrice,startPrice:this._bracketStartPrice,data:e.data,bracketType:this._bracketType}:{label:e.label,type:e.type,newPrice:this._currentPrice,startPrice:this._startPrice,data:e.data},this._reset(),t}cancelDrag(){this._reset()}get active(){return this._active}get dragLabel(){return!this._active||!this._level?null:this._isDraggingBracket&&this._bracketType?`${this._level.label}:${this._bracketType}`:this._level.label}get currentPrice(){return this._active?this._isDraggingBracket?this._bracketCurrentPrice:this._currentPrice:null}static isBracketPriceValid(e,t,n,r,i=0){let a=i>0?r===`buy`?t===`stopLoss`?Math.min(n,i):Math.max(n,i):t===`stopLoss`?Math.max(n,i):Math.min(n,i):n;return r===`buy`?t===`stopLoss`?e<a:e>a:t===`stopLoss`?e>a:e<a}_clampBracketPrice(t,n,r,i,a=0){return e.isBracketPriceValid(t,n,r,i,a)?t:a>0?i===`buy`?n===`stopLoss`?Math.min(r,a):Math.max(r,a):n===`stopLoss`?Math.max(r,a):Math.min(r,a):r}_reset(){this._active=!1,this._isDraggingBracket=!1,this._level=null,this._bracketType=null,this._currentPrice=0,this._mainMinPrice=-1/0,this._mainMaxPrice=1/0,this._bracketStartPrice=0,this._bracketCurrentPrice=0,this._bracketParentPrice=0,this._bracketParentSide=`buy`,this._bracketMarketPrice=0}};function X(e,t){return e[t]}var So=class{constructor(e,t=`#F5A623`,n=`MA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null};let r=0;for(let t=n-this.period+1;t<=n;t++)r+=X(e[t],this.source);return{index:n,value:r/this.period}})}render(e,t,n,r,i){var a;let o=Co(e);if(!o)return;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let s=!1,c=(a=e.canvas._chartWidth)==null?e.canvas.width:a;for(let a of t){if(a.value===null){s=!1;continue}let t=n.xToPixel(a.index,r,c),l=n.yToPixel(a.value,o,i);s?e.lineTo(t,l):(e.moveTo(t,l),s=!0)}e.stroke()}};function Co(e){var t;return(t=e.canvas._priceRange)==null?null:t}var wo=class{constructor(e,t=`#9B59B6`,n=`EMA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){let t=2/(this.period+1),n=[],r=null;for(let i=0;i<e.length;i++){if(i<this.period-1){n.push({index:i,value:null});continue}if(r===null){let t=0;for(let n=0;n<this.period;n++)t+=X(e[i-n],this.source);r=t/this.period}else r=X(e[i],this.source)*t+r*(1-t);n.push({index:i,value:r})}return n}render(e,t,n,r,i){var a;let o=e.canvas._priceRange;if(!o)return;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let s=!1,c=(a=e.canvas._chartWidth)==null?e.canvas.width:a;for(let a of t){if(a.value===null){s=!1;continue}let t=n.xToPixel(a.index,r,c),l=n.yToPixel(a.value,o,i);s?e.lineTo(t,l):(e.moveTo(t,l),s=!0)}e.stroke()}},To=class{constructor(e=20,t=`#e91e63`,n=`WMA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){let t=this.period*(this.period+1)/2,n=[];for(let r=0;r<e.length;r++){if(r<this.period-1){n.push({index:r,value:null});continue}let i=0;for(let t=0;t<this.period;t++)i+=X(e[r-(this.period-1-t)],this.source)*(t+1);n.push({index:r,value:i/t})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke()}};function Eo(e,t){let n=t*(t+1)/2,r=[];for(let i=0;i<e.length;i++){if(i<t-1){r.push(null);continue}let a=0;for(let n=0;n<t;n++)a+=e[i-(t-1-n)]*(n+1);r.push(a/n)}return r}var Do=class{constructor(e=20,t=`#00bcd4`,n=`HMA`,r=`close`){this.period=e,this.source=r,this.name=n,this.color=t}compute(e){let t=e.map(e=>X(e,this.source)),n=Math.floor(this.period/2),r=Math.floor(Math.sqrt(this.period)),i=Eo(t,n),a=Eo(t,this.period),o=i.map((e,t)=>{let n=a[t];return e===null||n===null?null:2*e-n}),s=Eo(o.map(e=>e===null?0:e),r);return e.map((e,t)=>{let n=t-r+1;return n<0||!(o[n]!==null&&o[t]!==null)||s[t]===null?{index:t,value:null}:{index:t,value:s[t]}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke()}},Oo=[5,10,20,50,100],ko=[`#ff6b6b`,`#ffd93d`,`#6bcb77`,`#4d96ff`,`#c77dff`],Ao=class{constructor(e=`#ffcc80`,t=`close`){this.source=t,this.name=`MARibbon`,this.color=e}compute(e){let t=(t,n)=>{if(t<n-1)return null;let r=0;for(let i=t-n+1;i<=t;i++)r+=X(e[i],this.source);return r/n};return e.map((e,n)=>({index:n,value:t(n,5),upper:t(n,10),lower:t(n,20),signal:t(n,50),histogram:t(n,100)}))}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=[`value`,`upper`,`lower`,`signal`,`histogram`];for(let a=0;a<Oo.length;a++){let o=l[a],u=ko[a];e.beginPath(),e.strokeStyle=u;let d=!1;for(let a of t){let t=a[o];if(t==null){d=!1;continue}let l=n.xToPixel(a.index,r,c),u=n.yToPixel(t,s,i);d?e.lineTo(l,u):(e.moveTo(l,u),d=!0)}e.stroke()}}},jo=class{constructor(e=20,t=2,n=`#3B82F6`,r=`BB`,i=`close`){this.period=e,this.stdDevMultiplier=t,this.source=i,this.name=r,this.color=n}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null,upper:null,lower:null};let r=e.slice(n-this.period+1,n+1).map(e=>X(e,this.source)),i=r.reduce((e,t)=>e+t,0)/this.period,a=r.reduce((e,t)=>e+(t-i)**2,0)/this.period,o=Math.sqrt(a);return{index:n,value:i,upper:i+o*this.stdDevMultiplier,lower:i-o*this.stdDevMultiplier}})}render(e,t,n,r,i){var a;let o=e.canvas._priceRange;if(!o)return;let s=(a=e.canvas._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let c=(a,c=!1)=>{c&&e.setLineDash([4,3]),e.beginPath();let l=!1;for(let c of t){let t=a(c);if(t==null){l=!1;continue}let u=n.xToPixel(c.index,r,s),d=n.yToPixel(t,o,i);l?e.lineTo(u,d):(e.moveTo(u,d),l=!0)}e.stroke(),c&&e.setLineDash([])};e.strokeStyle=this.color,c(e=>e.value),e.strokeStyle=`${this.color}99`,c(e=>e.upper,!0),c(e=>e.lower,!0);let l=[],u=[];for(let e of t){if(e.upper==null||e.lower==null)continue;let t=n.xToPixel(e.index,r,s);l.push([t,n.yToPixel(e.upper,o,i)]),u.push([t,n.yToPixel(e.lower,o,i)])}l.length<2||(e.beginPath(),l.forEach(([t,n],r)=>r===0?e.moveTo(t,n):e.lineTo(t,n)),u.reverse().forEach(([t,n])=>e.lineTo(t,n)),e.closePath(),e.fillStyle=`${this.color}12`,e.fill())}},Mo=class{constructor(e=20,t=2,n=10,r=`#4caf50`,i=`KC`){this.period=e,this.mult=t,this.atrPeriod=n,this.name=i,this.color=r}compute(e){let t=[],n=2/(this.period+1),r=null,i=null;for(let a=0;a<e.length;a++){let o=e[a];if(a<this.period-1){t.push({index:a,value:null,upper:null,lower:null});continue}if(r===null){let t=0;for(let n=0;n<this.period;n++)t+=e[a-n].close;r=t/this.period}else r=o.close*n+r*(1-n);let s=a===0?o.high-o.low:Math.max(o.high-o.low,Math.abs(o.high-e[a-1].close),Math.abs(o.low-e[a-1].close));if(i===null){if(a<this.atrPeriod){if(t.pop(),t.push({index:a,value:null,upper:null,lower:null}),a===this.atrPeriod-1){let t=0;for(let n=0;n<this.atrPeriod;n++){let r=e[a-n],i=e[a-n-1],o=n===a?r.high-r.low:Math.max(r.high-r.low,Math.abs(r.high-i.close),Math.abs(r.low-i.close));t+=o}i=t/this.atrPeriod}continue}}else i=(i*(this.atrPeriod-1)+s)/this.atrPeriod;if(i===null){t.push({index:a,value:null,upper:null,lower:null});continue}let c=r+this.mult*i,l=r-this.mult*i;t.push({index:a,value:r,upper:c,lower:l})}return t}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=(a,o=!1)=>{o&&e.setLineDash([4,3]),e.beginPath();let l=!1;for(let o of t){let t=a(o);if(t==null){l=!1;continue}let u=n.xToPixel(o.index,r,c),d=n.yToPixel(t,s,i);l?e.lineTo(u,d):(e.moveTo(u,d),l=!0)}e.stroke(),o&&e.setLineDash([])};e.strokeStyle=this.color,l(e=>e.value),e.strokeStyle=`${this.color}99`,l(e=>e.upper,!0),l(e=>e.lower,!0);let u=[],d=[];for(let e of t){if(e.upper==null||e.lower==null)continue;let t=n.xToPixel(e.index,r,c);u.push([t,n.yToPixel(e.upper,s,i)]),d.push([t,n.yToPixel(e.lower,s,i)])}u.length<2||(e.beginPath(),u.forEach(([t,n],r)=>r===0?e.moveTo(t,n):e.lineTo(t,n)),d.reverse().forEach(([t,n])=>e.lineTo(t,n)),e.closePath(),e.fillStyle=`${this.color}12`,e.fill())}},No=class{constructor(e=20,t=`#26c6da`){this.period=e,this.name=`DC`,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null,upper:null,lower:null};let r=-1/0,i=1/0;for(let t=n-this.period+1;t<=n;t++)e[t].high>r&&(r=e[t].high),e[t].low<i&&(i=e[t].low);return{index:n,value:(r+i)/2,upper:r,lower:i}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=(a,o=!1)=>{o&&e.setLineDash([4,3]),e.beginPath();let l=!1;for(let o of t){let t=a(o);if(t==null){l=!1;continue}let u=n.xToPixel(o.index,r,c),d=n.yToPixel(t,s,i);l?e.lineTo(u,d):(e.moveTo(u,d),l=!0)}e.stroke(),o&&e.setLineDash([])};e.strokeStyle=this.color,l(e=>e.value,!0),e.strokeStyle=`${this.color}99`,l(e=>e.upper),l(e=>e.lower);let u=[],d=[];for(let e of t){if(e.upper==null||e.lower==null)continue;let t=n.xToPixel(e.index,r,c);u.push([t,n.yToPixel(e.upper,s,i)]),d.push([t,n.yToPixel(e.lower,s,i)])}u.length<2||(e.beginPath(),u.forEach(([t,n],r)=>r===0?e.moveTo(t,n):e.lineTo(t,n)),d.slice().reverse().forEach(([t,n])=>e.lineTo(t,n)),e.closePath(),e.fillStyle=`${this.color}14`,e.fill())}},Po=class{constructor(e=14,t=`#ff5722`,n=`ATR`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=n,this.color=t}compute(e){let t=[];if(e.length===0)return t;let n=[];for(let t=0;t<e.length;t++)if(t===0)n.push(e[t].high-e[t].low);else{let r=e[t-1].close;n.push(Math.max(e[t].high-e[t].low,Math.abs(e[t].high-r),Math.abs(e[t].low-r)))}if(e.length<this.period)return e.map((e,t)=>({index:t,value:null}));let r=0;for(let e=0;e<this.period;e++)r+=n[e];r/=this.period;for(let e=0;e<this.period-1;e++)t.push({index:e,value:null});t.push({index:this.period-1,value:r});for(let i=this.period;i<e.length;i++)r=(r*(this.period-1)+n[i])/this.period,t.push({index:i,value:r});return t}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,n.value));return{min:0,max:t*1.2}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,e.value));let l=a==null?{min:0,max:c*1.2}:a,u=[];for(let e of t)e.value!=null&&u.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,l,i)});if(u.length===0)return;let d=n.yToPixel(0,l,i);e.beginPath(),e.moveTo(u[0].x,d);for(let t of u)e.lineTo(t.x,t.y);e.lineTo(u[u.length-1].x,d),e.closePath(),e.fillStyle=this.color+`33`,e.fill(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value==null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Fo=class{constructor(e=14,t=`#e8b84b`,n=`RSI`,r=`close`){this.period=e,this.source=r,this.pane=`sub`,this.paneHeight=80,this.name=n,this.color=t}compute(e){let t=[];if(e.length<this.period+1)return e.map((e,t)=>({index:t,value:null}));let n=0,r=0;for(let t=1;t<=this.period;t++){let i=X(e[t],this.source)-X(e[t-1],this.source);i>0?n+=i:r+=Math.abs(i)}n/=this.period,r/=this.period;for(let e=0;e<this.period;e++)t.push({index:e,value:null});let i=r===0?1/0:n/r;t.push({index:this.period,value:r===0?100:100-100/(1+i)});for(let i=this.period+1;i<e.length;i++){let a=X(e[i],this.source)-X(e[i-1],this.source),o=a>0?a:0,s=a<0?Math.abs(a):0;n=(n*(this.period-1)+o)/this.period,r=(r*(this.period-1)+s)/this.period;let c=r===0?1/0:n/r;t.push({index:i,value:r===0?100:100-100/(1+c)})}return t}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(70,c,i),u=n.yToPixel(30,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[70,50,30]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}},Io=class{constructor(e=14,t=3,n=`#e040fb`){this.kPeriod=e,this.dPeriod=t,this.name=`Stoch`,this.pane=`sub`,this.paneHeight=80,this.color=n}compute(e){let t=[],n=[];for(let r=0;r<e.length;r++){if(r<this.kPeriod-1){n.push(null),t.push({index:r,value:null,upper:null});continue}let i=1/0,a=-1/0;for(let t=r-this.kPeriod+1;t<=r;t++)e[t].low<i&&(i=e[t].low),e[t].high>a&&(a=e[t].high);let o=a-i,s=o===0?50:(e[r].close-i)/o*100;n.push(s),t.push({index:r,value:s,upper:null})}for(let r=0;r<e.length;r++){if(n[r]===null)continue;let e=0,i=0;for(let t=r;t>=0&&e<this.dPeriod&&n[t]!==null;t--)i+=n[t],e++;e===this.dPeriod&&(t[r].upper=i/this.dPeriod)}return t}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(80,c,i),u=n.yToPixel(20,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[80,50,20]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke(),e.beginPath(),e.strokeStyle=`#ff9800`,e.lineWidth=1,e.lineJoin=`round`,d=!1;for(let a of t){if(a.upper==null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.upper,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}};function Lo(e,t){let n=[];for(let r=0;r<e.length;r++){if(r<t-1){n.push(null);continue}let i=0,a=!0;for(let n=r-t+1;n<=r;n++){if(e[n]===null){a=!1;break}i+=e[n]}n.push(a?i/t:null)}return n}var Ro=class{constructor(e=14,t=14,n=3,r=3,i=`#00e5ff`){this.rsiPeriod=e,this.stochPeriod=t,this.kPeriod=n,this.dPeriod=r,this.name=`StochRSI`,this.pane=`sub`,this.paneHeight=80,this.color=i}compute(e){let t=[];if(e.length<this.rsiPeriod+1)return e.map((e,t)=>({index:t,value:null,upper:null}));let n=0,r=0;for(let t=1;t<=this.rsiPeriod;t++){let i=e[t].close-e[t-1].close;i>0?n+=i:r+=Math.abs(i)}n/=this.rsiPeriod,r/=this.rsiPeriod;for(let e=0;e<this.rsiPeriod;e++)t.push(null);let i=r===0?1/0:n/r;t.push(r===0?100:100-100/(1+i));for(let i=this.rsiPeriod+1;i<e.length;i++){let a=e[i].close-e[i-1].close,o=a>0?a:0,s=a<0?Math.abs(a):0;n=(n*(this.rsiPeriod-1)+o)/this.rsiPeriod,r=(r*(this.rsiPeriod-1)+s)/this.rsiPeriod;let c=r===0?1/0:n/r;t.push(r===0?100:100-100/(1+c))}let a=[];for(let n=0;n<e.length;n++){if(t[n]===null){a.push(null);continue}if(n<this.rsiPeriod+this.stochPeriod-1){a.push(null);continue}let e=1/0,r=-1/0,i=!0;for(let a=n-this.stochPeriod+1;a<=n;a++){if(t[a]===null){i=!1;break}let n=t[a];n<e&&(e=n),n>r&&(r=n)}if(!i){a.push(null);continue}let o=r-e,s=o===0?50:(t[n]-e)/o*100;a.push(s)}let o=Lo(a,this.kPeriod),s=Lo(o,this.dPeriod);return e.map((e,t)=>{var n,r;return{index:t,value:(n=o[t])==null?null:n,upper:(r=s[t])==null?null:r}})}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(80,c,i),u=n.yToPixel(20,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[80,50,20]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke(),e.beginPath(),e.strokeStyle=`#ff9800`,e.lineWidth=1,e.lineJoin=`round`,d=!1;for(let a of t){if(a.upper==null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.upper,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}};function zo(e,t){let n=2/(t+1),r=[],i=null;for(let a=0;a<e.length;a++){if(a<t-1){r.push(null);continue}if(i===null){let n=0;for(let r=0;r<t;r++)n+=e[a-r];i=n/t}else i=e[a]*n+i*(1-n);r.push(i)}return r}var Bo=class{constructor(e=12,t=26,n=9,r=`#2196f3`,i=`MACD`,a=`close`){this.fast=e,this.slow=t,this.signal=n,this.source=a,this.pane=`sub`,this.paneHeight=80,this.name=i,this.color=r}compute(e){let t=e.map(e=>X(e,this.source)),n=zo(t,this.fast),r=zo(t,this.slow),i=t.map((e,t)=>n[t]===null||r[t]===null?null:n[t]-r[t]),a=zo(i.map(e=>e==null?0:e),this.signal);return e.map((e,t)=>{let n=i[t];if(n===null)return{index:t,value:null,upper:null,lower:null,histogram:null};let r=t>=this.slow-1+this.signal-1?a[t]:null;return{index:t,value:n,upper:r,lower:n!==null&&r!==null?n-r:null}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value))),n.upper!=null&&(t=Math.max(t,Math.abs(n.upper))),n.lower!=null&&(t=Math.max(t,Math.abs(n.lower)));return{min:-t*1.3,max:t*1.3}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value))),e.upper!=null&&(c=Math.max(c,Math.abs(e.upper))),e.lower!=null&&(c=Math.max(c,Math.abs(e.lower)));let l=a==null?{min:-c*1.3,max:c*1.3}:a,u=n.yToPixel(0,l,i);e.strokeStyle=`rgba(150,150,150,0.3)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,u),e.lineTo(s,u),e.stroke();let d=Math.max(n.candleBodyWidth(r,s),1);for(let a of t){if(a.lower==null)continue;let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.lower,l,i),c=Math.abs(o-u),f=Math.min(o,u);e.fillStyle=a.lower>=0?`rgba(38,166,154,0.55)`:`rgba(239,83,80,0.55)`,e.fillRect(t-d/2,f,d,c)}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value==null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke(),e.beginPath(),e.strokeStyle=`#ff6b35`,e.lineWidth=1,e.lineJoin=`round`,f=!1;for(let a of t){if(a.upper==null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.upper,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Vo=class{constructor(e=20,t=`#4db6ac`){this.period=e,this.name=`CCI`,this.pane=`sub`,this.paneHeight=80,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null};let r=e.slice(n-this.period+1,n+1).map(e=>(e.high+e.low+e.close)/3),i=r[r.length-1],a=r.reduce((e,t)=>e+t,0)/this.period,o=r.reduce((e,t)=>e+Math.abs(t-a),0)/this.period;return o===0?{index:n,value:0}:{index:n,value:(i-a)/(.015*o)}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value)));return{min:-t*1.3,max:t*1.3}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value)));let l=a==null?{min:-c*1.3,max:c*1.3}:a,u=n.yToPixel(100,l,i),d=n.yToPixel(-100,l,i);e.fillStyle=`rgba(239,83,80,0.10)`,e.fillRect(0,0,s,u),e.fillStyle=`rgba(38,166,154,0.10)`,e.fillRect(0,d,s,i-d),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[100,0,-100]){let r=n.yToPixel(t,l,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value===null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Ho=class{constructor(e=14,t=`#ff7043`){this.period=e,this.name=`%R`,this.pane=`sub`,this.paneHeight=80,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period-1)return{index:n,value:null};let r=-1/0,i=1/0;for(let t=n-this.period+1;t<=n;t++)e[t].high>r&&(r=e[t].high),e[t].low<i&&(i=e[t].low);let a=r-i;return{index:n,value:a===0?-50:(r-e[n].close)/a*-100}})}getValueRange(e){return{min:-100,max:0}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:-100,max:0}:a,l=n.yToPixel(-20,c,i),u=n.yToPixel(-80,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[-20,-50,-80]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}},Uo=class{constructor(e=12,t=`#80cbc4`,n=`close`){this.period=e,this.source=n,this.pane=`sub`,this.paneHeight=80,this.name=`ROC`,this.color=t}compute(e){return e.map((t,n)=>{if(n<this.period)return{index:n,value:null};let r=X(e[n-this.period],this.source);return r===0?{index:n,value:null}:{index:n,value:(X(e[n],this.source)-r)/r*100}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value)));return{min:-t*1.3,max:t*1.3}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value)));let l=a==null?{min:-c*1.3,max:c*1.3}:a,u=n.yToPixel(0,l,i),d=[];for(let e of t)e.value!=null&&d.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,l,i),value:e.value});if(d.length>=2){e.beginPath(),e.moveTo(d[0].x,u);for(let t of d)e.lineTo(t.x,Math.min(t.y,u));e.lineTo(d[d.length-1].x,u),e.closePath(),e.fillStyle=`rgba(38,166,154,0.05)`,e.fill(),e.beginPath(),e.moveTo(d[0].x,u);for(let t of d)e.lineTo(t.x,Math.max(t.y,u));e.lineTo(d[d.length-1].x,u),e.closePath(),e.fillStyle=`rgba(239,83,80,0.05)`,e.fill()}e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,u),e.lineTo(s,u),e.stroke(),e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let f=!1;for(let a of t){if(a.value===null){f=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,l,i);f?e.lineTo(t,o):(e.moveTo(t,o),f=!0)}e.stroke()}},Wo=class{constructor(e=`#aed581`){this.name=`OBV`,this.pane=`sub`,this.paneHeight=80,this.color=e}compute(e){let t=[],n=0;for(let o=0;o<e.length;o++){if(o===0){var r;n=(r=e[o].volume)==null?0:r}else if(e[o].close>e[o-1].close){var i;n+=(i=e[o].volume)==null?0:i}else if(e[o].close<e[o-1].close){var a;n-=(a=e[o].volume)==null?0:a}t.push({index:o,value:n})}return t}getValueRange(e){let t=1/0,n=-1/0;for(let r of e)r.value!=null&&(r.value<t&&(t=r.value),r.value>n&&(n=r.value));if(t===1/0)return{min:0,max:1};let r=(n-t)*.1||1;return{min:t-r,max:n+r}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1/0,l=-1/0;for(let e of t)e.value!=null&&(e.value<c&&(c=e.value),e.value>l&&(l=e.value));if(c===1/0)return;let u=(l-c)*.1||1,d=a==null?{min:c-u,max:l+u}:a,f=n.yToPixel(0,d,i),p=[];for(let e of t)e.value!=null&&p.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,d,i),value:e.value});if(p.length===0)return;if(e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,f),e.lineTo(s,f),e.stroke(),e.setLineDash([]),e.restore(),p.length>=2){e.beginPath(),e.moveTo(p[0].x,f);for(let t of p)e.lineTo(t.x,t.y);e.lineTo(p[p.length-1].x,f),e.closePath(),e.fillStyle=p[p.length-1].value>=0?`rgba(38,166,154,0.12)`:`rgba(239,83,80,0.12)`,e.fill()}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let m=!1;for(let a of t){if(a.value==null){m=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,d,i);m?e.lineTo(t,o):(e.moveTo(t,o),m=!0)}e.stroke()}},Go=class{constructor(e=`#9c27b0`){this.name=`VWAP`,this.color=e}compute(e){let t=[],n=0,r=0;for(let o=0;o<e.length;o++){var i,a;let s=e[o],c=(s.high+s.low+s.close)/3;n+=c*((i=s.volume)==null?0:i),r+=(a=s.volume)==null?0:a,t.push({index:o,value:r===0?null:n/r})}return t}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`,e.setLineDash([4,3]);let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke(),e.setLineDash([])}},Ko=class{constructor(e=`#ce93d8`){this.name=`A/D`,this.pane=`sub`,this.paneHeight=80,this.color=e}compute(e){let t=[],n=0;for(let r=0;r<e.length;r++){let{high:i,low:a,close:o,volume:s}=e[r],c=i-a,l=c===0?0:(o-a-(i-o))/c;n+=l*(s==null?0:s),t.push({index:r,value:n})}return t}getValueRange(e){let t=1/0,n=-1/0;for(let r of e)r.value!=null&&(r.value<t&&(t=r.value),r.value>n&&(n=r.value));if(t===1/0)return{min:0,max:1};let r=(n-t)*.1||1;return{min:t-r,max:n+r}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1/0,l=-1/0;for(let e of t)e.value!=null&&(e.value<c&&(c=e.value),e.value>l&&(l=e.value));if(c===1/0)return;let u=(l-c)*.1||1,d=a==null?{min:c-u,max:l+u}:a,f=[];for(let e of t)e.value!=null&&f.push({x:n.xToPixel(e.index,r,s),y:n.yToPixel(e.value,d,i)});if(f.length===0)return;if(f.length>=2){let t=i;e.beginPath(),e.moveTo(f[0].x,t);for(let t of f)e.lineTo(t.x,t.y);e.lineTo(f[f.length-1].x,t),e.closePath(),e.fillStyle=this.color+`20`,e.fill()}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let p=!1;for(let a of t){if(a.value==null){p=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,d,i);p?e.lineTo(t,o):(e.moveTo(t,o),p=!0)}e.stroke()}},qo=class{constructor(e=14,t=`#ffab40`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=`MFI`,this.color=t}compute(e){let t=[],n=e.map(e=>(e.high+e.low+e.close)/3),r=e.map((e,t)=>{var r;return n[t]*((r=e.volume)==null?0:r)});for(let i=0;i<e.length;i++){if(i<this.period){t.push({index:i,value:null});continue}let e=0,a=0;for(let t=i-this.period+1;t<=i;t++)n[t]>n[t-1]?e+=r[t]:n[t]<n[t-1]&&(a+=r[t]);if(a===0)t.push({index:i,value:100});else{let n=e/a;t.push({index:i,value:100-100/(1+n)})}}return t}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a,l=n.yToPixel(80,c,i),u=n.yToPixel(20,c,i);e.fillStyle=`rgba(239,83,80,0.06)`,e.fillRect(0,0,s,l),e.fillStyle=`rgba(38,166,154,0.06)`,e.fillRect(0,u,s,i-u),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[80,50,20]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore(),e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let d=!1;for(let a of t){if(a.value===null){d=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0)}e.stroke()}},Jo=class{constructor(e=20,t=`#80deea`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=`CMF`,this.color=t}compute(e){let t=e.map(e=>{var t;let n=e.high-e.low;return(n===0?0:(e.close-e.low-(e.high-e.close))/n)*((t=e.volume)==null?0:t)});return e.map((n,r)=>{if(r<this.period-1)return{index:r,value:null};let i=0,a=0;for(let n=r-this.period+1;n<=r;n++){var o;i+=t[n],a+=(o=e[n].volume)==null?0:o}return{index:r,value:a===0?0:i/a}})}getValueRange(e){return{min:-1,max:1}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:-1,max:1}:a,l=n.yToPixel(0,c,i),u=n.yToPixel(.2,c,i),d=n.yToPixel(-.2,c,i);e.fillStyle=`rgba(38,166,154,0.08)`,e.fillRect(0,0,s,u),e.fillStyle=`rgba(239,83,80,0.08)`,e.fillRect(0,d,s,i-d),e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;for(let t of[.2,0,-.2]){let r=n.yToPixel(t,c,i);e.beginPath(),e.moveTo(0,r),e.lineTo(s,r),e.stroke()}e.setLineDash([]),e.restore();let f=Math.max(1,s/Math.max(t.length,1)*.6);for(let a of t){if(a.value==null)continue;let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i),u=Math.abs(o-l),d=Math.min(o,l);e.fillStyle=a.value>=0?`rgba(38,166,154,0.45)`:`rgba(239,83,80,0.45)`,e.fillRect(t-f/2,d,f,u)}e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let p=!1;for(let a of t){if(a.value===null){p=!1;continue}let t=n.xToPixel(a.index,r,s),o=n.yToPixel(a.value,c,i);p?e.lineTo(t,o):(e.moveTo(t,o),p=!0)}e.stroke()}},Yo=class{constructor(e=`#ffd54f`){this.name=`Pivot`,this.color=e}compute(e){return e.map((t,n)=>{if(n===0)return{index:n,value:null,upper:null,lower:null,signal:null,histogram:null};let r=e[n-1],i=(r.high+r.low+r.close)/3;return{index:n,value:i,upper:2*i-r.low,lower:2*i-r.high,signal:i+(r.high-r.low),histogram:i-(r.high-r.low)}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a,l=null;for(let e=t.length-1;e>=0;e--)if(t[e].value!==null){l=t[e];break}if(l===null)return;let u=[{value:l.signal,label:`R2`,color:`#b71c1c`},{value:l.upper,label:`R1`,color:`#ef5350`},{value:l.value,label:`PP`,color:`#ffd54f`},{value:l.lower,label:`S1`,color:`#26a69a`},{value:l.histogram,label:`S2`,color:`#1b5e20`}];e.lineWidth=1,e.font=`10px sans-serif`,e.textBaseline=`middle`;for(let t of u){if(t.value==null)continue;let r=n.yToPixel(t.value,s,i);e.beginPath(),e.setLineDash([6,4]),e.strokeStyle=t.color,e.moveTo(0,r),e.lineTo(c,r),e.stroke(),e.setLineDash([]),e.fillStyle=t.color,e.fillText(t.label,c-28,r-6)}}},Xo=[0,.236,.382,.5,.618,.786,1],Zo=[`0%`,`23.6%`,`38.2%`,`50%`,`61.8%`,`78.6%`,`100%`],Qo=[`#90a4ae`,`#4d96ff`,`#6bcb77`,`#ffd93d`,`#ff9800`,`#ef5350`,`#90a4ae`],$o=class{constructor(e=50,t=`#e1bee7`){this.lookback=e,this.name=`Fib`,this.color=t}compute(e){return e.map((t,n)=>{let r=Math.max(0,n-this.lookback+1),i=-1/0,a=1/0;for(let t=r;t<=n;t++)e[t].high>i&&(i=e[t].high),e[t].low<a&&(a=e[t].low);let o=i-a;return{index:n,value:i,upper:a+.618*o,lower:a+.382*o,signal:a+.5*o,histogram:a}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a,l=null;for(let e=t.length-1;e>=0;e--)if(t[e].value!==null){l=t[e];break}if(l===null)return;let u=l.value,d=l.histogram;if(u==null||d==null)return;let f=u-d,p=Xo.map(e=>d+e*f);e.lineWidth=1,e.font=`10px sans-serif`,e.textBaseline=`middle`;for(let t=0;t<Xo.length;t++){let r=p[t],a=n.yToPixel(r,s,i),o=Qo[t];e.beginPath(),e.setLineDash([6,4]),e.strokeStyle=o,e.moveTo(0,a),e.lineTo(c,a),e.stroke(),e.setLineDash([]),e.fillStyle=o,e.fillText(Zo[t],c-38,a-6)}}},es=class{constructor(e=10,t=3,n=`#26a69a`){this.atrPeriod=e,this.multiplier=t,this.name=`Supertrend`,this.color=n}compute(e){let t=e.length,n=[];if(t===0)return n;let r=Array(t).fill(0);for(let n=0;n<t;n++){let t=e[n].high,i=e[n].low,a=n>0?e[n-1].close:e[n].close;r[n]=Math.max(t-i,Math.abs(t-a),Math.abs(i-a))}let i=Array(t).fill(0);if(t<this.atrPeriod){for(let e=0;e<t;e++)n.push({index:e,value:null,upper:null});return n}let a=0;for(let e=0;e<this.atrPeriod;e++)a+=r[e];i[this.atrPeriod-1]=a/this.atrPeriod;for(let e=this.atrPeriod;e<t;e++)i[e]=(i[e-1]*(this.atrPeriod-1)+r[e])/this.atrPeriod;let o=Array(t).fill(0),s=Array(t).fill(0),c=Array(t).fill(1);for(let r=0;r<t;r++){if(r<this.atrPeriod-1){n.push({index:r,value:null,upper:null});continue}let t=(e[r].high+e[r].low)/2,a=t+this.multiplier*i[r],l=t-this.multiplier*i[r];if(r===this.atrPeriod-1){o[r]=a,s[r]=l,c[r]=1,n.push({index:r,value:s[r],upper:1});continue}let u=e[r-1].close;o[r]=a<o[r-1]||u>o[r-1]?a:o[r-1],s[r]=l>s[r-1]||u<s[r-1]?l:s[r-1],c[r-1]===-1?c[r]=e[r].close>o[r]?1:-1:c[r]=e[r].close<s[r]?-1:1;let d=c[r]===1?s[r]:o[r];n.push({index:r,value:d,upper:c[r]})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=2,e.lineJoin=`round`;let l=null;e.beginPath(),e.strokeStyle=`#26a69a`;let u=!1;for(let a of t){if(a.value==null||a.upper==null){u=!1;continue}if(!(a.upper>=0)){u=!1;continue}l!==1&&(u=!1);let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);u?e.lineTo(t,o):(e.moveTo(t,o),u=!0),l=1}e.stroke(),e.beginPath(),e.strokeStyle=`#ef5350`;let d=!1;l=null;for(let a of t){if(a.value==null||a.upper==null){d=!1;continue}if(!(a.upper<0)){d=!1;continue}l!==-1&&(d=!1);let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);d?e.lineTo(t,o):(e.moveTo(t,o),d=!0),l=-1}e.stroke()}},ts=class{constructor(e=.02,t=.2,n=`#ff6b9d`){this.step=e,this.maxAF=t,this.name=`PSAR`,this.color=n}compute(e){let t=e.length,n=[];if(t<2){for(let e=0;e<t;e++)n.push({index:e,value:null,upper:null});return n}let r=!0,i=this.step,a=e[0].high,o=e[0].low;n.push({index:0,value:null,upper:null});for(let s=1;s<t;s++){let t=o+i*(a-o);if(r){let n=e[s-1].low,o=s>=2?e[s-2].low:e[s-1].low;t=Math.min(t,n,o),t>e[s].low?(r=!1,t=a,a=e[s].low,i=this.step):e[s].high>a&&(a=e[s].high,i=Math.min(i+this.step,this.maxAF))}else{let n=e[s-1].high,o=s>=2?e[s-2].high:e[s-1].high;t=Math.max(t,n,o),t<e[s].high?(r=!0,t=a,a=e[s].high,i=this.step):e[s].low<a&&(a=e[s].low,i=Math.min(i+this.step,this.maxAF))}o=t,n.push({index:s,value:o,upper:r?1:-1})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;for(let a of t){if(a.value==null||a.upper==null)continue;let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);e.beginPath(),e.arc(t,o,2,0,Math.PI*2),e.fillStyle=a.upper>=0?`#26a69a`:`#ef5350`,e.fill()}}};function ns(e,t,n){if(t<n-1)return null;let r=-1/0,i=1/0;for(let a=t-n+1;a<=t;a++)e[a].high>r&&(r=e[a].high),e[a].low<i&&(i=e[a].low);return{high:r,low:i}}var rs=class{constructor(e=9,t=26,n=52,r=`#b0bec5`){this.tenkanPeriod=e,this.kijunPeriod=t,this.senkouBPeriod=n,this.name=`Ichimoku`,this.color=r}compute(e){return e.map((t,n)=>{let r=ns(e,n,this.tenkanPeriod),i=r===null?null:(r.high+r.low)/2,a=ns(e,n,this.kijunPeriod),o=a===null?null:(a.high+a.low)/2,s=i!==null&&o!==null?(i+o)/2:null,c=ns(e,n,this.senkouBPeriod);return{index:n,value:i,upper:o,lower:s,signal:c===null?null:(c.high+c.low)/2,histogram:t.close}})}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.lineWidth=1,e.lineJoin=`round`;let l=(a,o,l=!1)=>{e.strokeStyle=o,l&&e.setLineDash([4,3]),e.beginPath();let u=!1;for(let o of t){let t=a(o);if(t==null){u=!1;continue}let l=n.xToPixel(o.index,r,c),d=n.yToPixel(t,s,i);u?e.lineTo(l,d):(e.moveTo(l,d),u=!0)}e.stroke(),l&&e.setLineDash([])},u=[],d=[];for(let e of t){if(e.lower==null||e.signal==null)continue;let t=n.xToPixel(e.index,r,c);u.push([t,n.yToPixel(e.lower,s,i)]),d.push([t,n.yToPixel(e.signal,s,i)])}for(let t=0;t+1<u.length;t++){let[n,r]=u[t],[i,a]=u[t+1],[,o]=d[t],[,s]=d[t+1],c=r<o;e.beginPath(),e.moveTo(n,r),e.lineTo(i,a),e.lineTo(i,s),e.lineTo(n,o),e.closePath(),e.fillStyle=c?`rgba(38, 166, 154, 0.15)`:`rgba(239, 83, 80, 0.15)`,e.fill()}l(e=>e.lower,`#26a69a`,!0),l(e=>e.signal,`#ef5350`,!0),l(e=>e.value,`#ef9a9a`),l(e=>e.upper,`#90caf9`),e.strokeStyle=`#b0bec5`,e.beginPath();let f=!1;for(let a of t){if(a.histogram==null){f=!1;continue}let t=a.index-this.kijunPeriod;if(t<0){f=!1;continue}let o=n.xToPixel(t,r,c),l=n.yToPixel(a.histogram,s,i);f?e.lineTo(o,l):(e.moveTo(o,l),f=!0)}e.stroke()}},is=class{constructor(e=14,t=`#fff176`){this.period=e,this.pane=`sub`,this.paneHeight=80,this.name=`ADX`,this.color=t}compute(e){let t=e.length;if(t<this.period+1)return e.map((e,t)=>({index:t,value:null,upper:null,lower:null}));let n=Array(t).fill(0),r=Array(t).fill(0),i=Array(t).fill(0);n[0]=e[0].high-e[0].low,r[0]=0,i[0]=0;for(let a=1;a<t;a++){let t=e[a-1].close,o=e[a-1].high,s=e[a-1].low,c=e[a].high,l=e[a].low;n[a]=Math.max(c-l,Math.abs(c-t),Math.abs(l-t));let u=c-o,d=s-l;r[a]=u>d&&u>0?u:0,i[a]=d>u&&d>0?d:0}let a=0,o=0,s=0;for(let e=0;e<this.period;e++)a+=n[e],o+=r[e],s+=i[e];let c=[];for(let e=0;e<this.period;e++)c.push({index:e,value:null,upper:null,lower:null});let l=Array(t).fill(0),u=Array(t).fill(0),d=Array(t).fill(0),f=a===0?0:100*o/a,p=a===0?0:100*s/a,m=f+p===0?0:100*Math.abs(f-p)/(f+p);l[this.period-1]=f,u[this.period-1]=p,d[this.period-1]=m,c[this.period-1]={index:this.period-1,value:null,upper:f,lower:p};for(let e=this.period;e<t;e++){a=a-a/this.period+n[e],o=o-o/this.period+r[e],s=s-s/this.period+i[e];let t=a===0?0:100*o/a,f=a===0?0:100*s/a,p=t+f===0?0:100*Math.abs(t-f)/(t+f);l[e]=t,u[e]=f,d[e]=p,c.push({index:e,value:null,upper:t,lower:f})}let h=2*this.period-2;if(h>=t)return c;let g=0;for(let e=this.period-1;e<=h;e++)g+=d[e];g/=this.period,c[h].value=g;for(let e=h+1;e<t;e++)g=(g*(this.period-1)+d[e])/this.period,c[e].value=g;return c}getValueRange(e){return{min:0,max:100}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=a==null?{min:0,max:100}:a;e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1;let l=n.yToPixel(25,c,i);e.beginPath(),e.moveTo(0,l),e.lineTo(s,l),e.stroke(),e.setLineDash([]),e.restore();let u=(a,o,l)=>{e.beginPath(),e.strokeStyle=o,e.lineWidth=l,e.lineJoin=`round`;let u=!1;for(let o of t){let t=a(o);if(t==null){u=!1;continue}let l=n.xToPixel(o.index,r,s),d=n.yToPixel(t,c,i);u?e.lineTo(l,d):(e.moveTo(l,d),u=!0)}e.stroke()};u(e=>e.upper,`#26a69a`,1),u(e=>e.lower,`#ef5350`,1),u(e=>e.value,this.color,1.5)}},as=class{constructor(e=5,t=34,n=`#b0bec5`){this.fastPeriod=e,this.slowPeriod=t,this.name=`AO`,this.pane=`sub`,this.paneHeight=80,this.color=n}compute(e){let t=e.map(e=>(e.high+e.low)/2),n=(e,t,n)=>{if(t<n-1)return null;let r=0;for(let i=t-n+1;i<=t;i++)r+=e[i];return r/n};return e.map((e,r)=>{let i=n(t,r,this.fastPeriod),a=n(t,r,this.slowPeriod);return i===null||a===null?{index:r,value:null}:{index:r,value:i-a}})}getValueRange(e){let t=1e-4;for(let n of e)n.value!=null&&(t=Math.max(t,Math.abs(n.value)));return{min:-t*1.2,max:t*1.2}}render(e,t,n,r,i,a){var o;let s=(o=e.canvas._chartWidth)==null?e.canvas.width:o,c=1e-4;for(let e of t)e.value!=null&&(c=Math.max(c,Math.abs(e.value)));let l=a==null?{min:-c*1.2,max:c*1.2}:a,u=n.yToPixel(0,l,i);e.save(),e.setLineDash([4,4]),e.strokeStyle=`rgba(150,150,150,0.35)`,e.lineWidth=1,e.beginPath(),e.moveTo(0,u),e.lineTo(s,u),e.stroke(),e.setLineDash([]),e.restore();let d=Math.max(n.candleBodyWidth(r,s),1),f=null;for(let a of t){if(a.value==null){f=null;continue}let t=f===null?!0:a.value>=f,o=n.xToPixel(a.index,r,s),c=n.yToPixel(a.value,l,i),p=Math.abs(c-u),m=Math.min(c,u);e.fillStyle=t?`rgba(38,166,154,0.70)`:`rgba(239,83,80,0.70)`,e.fillRect(o-d/2,m,d,p),f=a.value}}},os=class{constructor(e=`#90a4ae`,t=`#26a69a`,n=`#ef5350`){this.name=`HA`,this.color=e,this.upColor=t,this.downColor=n}compute(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i],o=(a.open+a.high+a.low+a.close)/4,s;s=i===0?(a.open+a.close)/2:(n+r)/2;let c=Math.max(a.high,s,o),l=Math.min(a.low,s,o);n=s,r=o,t.push({index:i,value:o,upper:c,lower:l,signal:s})}return t}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a,l=n.candleBodyWidth(r,c),u=l/2;for(let a of t){if(a.value==null||a.upper==null||a.lower==null||a.signal==null)continue;let t=a.value,o=a.upper,d=a.lower,f=a.signal,p=t>=f?this.upColor:this.downColor,m=n.xToPixel(a.index,r,c),h=n.yToPixel(o,s,i),g=n.yToPixel(d,s,i),_=n.yToPixel(f,s,i),v=n.yToPixel(t,s,i),y=Math.min(_,v),b=Math.max(1,Math.max(_,v)-y);e.beginPath(),e.strokeStyle=p,e.lineWidth=1,e.moveTo(m,h),e.lineTo(m,g),e.stroke(),e.fillStyle=p,e.strokeStyle=p,e.lineWidth=1,e.fillRect(m-u,y,l,b),e.strokeRect(m-u,y,l,b)}}},ss=class{constructor(e=`#26a69a`,t=`#ef5350`){this.name=`VOL`,this.pane=`sub`,this.paneHeight=80,this.upColor=e,this.downColor=t,this.color=e}compute(e){return e.map((e,t)=>{var n;return{index:t,value:(n=e.volume)==null?0:n,signal:e.close>=e.open?1:0}})}render(e,t,n,r,i){var a;let o=(a=e.canvas._chartWidth)==null?e.canvas.width:a,s=0;for(let e of t)e.value!=null&&e.value>s&&(s=e.value);if(s===0)return;let c={min:0,max:s*1.1},l=n.yToPixel(0,c,i),u=Math.max(n.candleBodyWidth(r,o),1);for(let a of t){if(a.value==null||a.value===0)continue;let t=n.xToPixel(a.index,r,o),s=n.yToPixel(a.value,c,i),d=Math.abs(l-s);e.fillStyle=a.signal===1?`${this.upColor}99`:`${this.downColor}99`,e.fillRect(t-u/2,s,u,d)}e.fillStyle=this.upColor,e.font=`10px 'Inter', system-ui, sans-serif`,e.fillText(this.name,4,11)}},cs=class{constructor(e=14,t=`#ff9800`){this.period=e,this.name=`LinReg`,this.color=t}compute(e){let t=this.period,n=[],r=t*(t-1)/2,i=t*(t*(t-1)*(2*t-1)/6)-r*r;for(let a=0;a<e.length;a++){if(a<t-1){n.push({index:a,value:null});continue}let o=0,s=0;for(let n=0;n<t;n++){let r=e[a-(t-1-n)].close;o+=r,s+=n*r}let c=(t*s-r*o)/i,l=(o-c*r)/t+c*(t-1);n.push({index:a,value:l})}return n}render(e,t,n,r,i){var a;let o=e.canvas,s=o._priceRange;if(!s)return;let c=(a=o._chartWidth)==null?e.canvas.width:a;e.beginPath(),e.strokeStyle=this.color,e.lineWidth=1.5,e.lineJoin=`round`;let l=!1;for(let a of t){if(a.value===null){l=!1;continue}let t=n.xToPixel(a.index,r,c),o=n.yToPixel(a.value,s,i);l?e.lineTo(t,o):(e.moveTo(t,o),l=!0)}e.stroke()}},ls=[{name:`Moving Average`,short_name:`MA`,type:`Trend`,enabled:!0},{name:`Exponential Moving Average`,short_name:`EMA`,type:`Trend`,enabled:!0},{name:`Weighted Moving Average`,short_name:`WMA`,type:`Trend`,enabled:!0},{name:`Hull Moving Average`,short_name:`HMA`,type:`Trend`,enabled:!0},{name:`Moving Average Ribbon`,short_name:`MARibbon`,type:`Trend`,enabled:!0},{name:`Bollinger Bands`,short_name:`BB`,type:`Volatility`,enabled:!0},{name:`Keltner Channels`,short_name:`KC`,type:`Volatility`,enabled:!0},{name:`Donchian Channels`,short_name:`DC`,type:`Volatility`,enabled:!0},{name:`Average True Range`,short_name:`ATR`,type:`Volatility`,enabled:!0},{name:`Relative Strength Index`,short_name:`RSI`,type:`Momentum`,enabled:!0},{name:`Stochastic Oscillator`,short_name:`Stoch`,type:`Momentum`,enabled:!0},{name:`Stochastic RSI`,short_name:`StochRSI`,type:`Momentum`,enabled:!0},{name:`MACD`,short_name:`MACD`,type:`Momentum`,enabled:!0},{name:`Commodity Channel Index`,short_name:`CCI`,type:`Momentum`,enabled:!0},{name:`Williams %R`,short_name:`%R`,type:`Momentum`,enabled:!0},{name:`Rate of Change`,short_name:`ROC`,type:`Momentum`,enabled:!0},{name:`On Balance Volume`,short_name:`OBV`,type:`Volume`,enabled:!0},{name:`Volume`,short_name:`VOL`,type:`Volume`,enabled:!0},{name:`Volume Weighted Average Price`,short_name:`VWAP`,type:`Volume`,enabled:!0},{name:`Accumulation/Distribution`,short_name:`A/D`,type:`Volume`,enabled:!0},{name:`Money Flow Index`,short_name:`MFI`,type:`Volume`,enabled:!0},{name:`Chaikin Money Flow`,short_name:`CMF`,type:`Volume`,enabled:!0},{name:`Pivot Points Standard`,short_name:`Pivot`,type:`Support/Resistance`,enabled:!0},{name:`Fibonacci Retracement`,short_name:`Fib`,type:`Support/Resistance`,enabled:!0},{name:`Supertrend`,short_name:`Supertrend`,type:`Trend`,enabled:!0},{name:`Parabolic SAR`,short_name:`PSAR`,type:`Trend`,enabled:!0},{name:`Ichimoku Cloud`,short_name:`Ichimoku`,type:`Trend`,enabled:!0},{name:`ADX`,short_name:`ADX`,type:`Trend Strength`,enabled:!0},{name:`Awesome Oscillator`,short_name:`AO`,type:`Momentum`,enabled:!0},{name:`Heikin Ashi`,short_name:`HA`,type:`Price Transformation`,enabled:!1},{name:`Linear Regression`,short_name:`LinReg`,type:`Trend`,enabled:!0}];function us(e,t){if(e.length===0||t<=0)return e;let n=new Map;for(let r of e){let e=Math.floor(r.time/t)*t,i=n.get(e);i?i.push(r):n.set(e,[r])}let r=[];for(let[e,t]of n){let n=t[0].high,a=t[0].low,o=0;for(let e of t){var i;e.high>n&&(n=e.high),e.low<a&&(a=e.low),o+=(i=e.volume)==null?0:i}r.push({time:e,open:t[0].open,high:n,low:a,close:t[t.length-1].close,volume:o})}return r.sort((e,t)=>e.time-t.time),r}var ds,fs=[{shortName:`MA`,factory:()=>new So(20)},{shortName:`EMA`,factory:()=>new wo(20)},{shortName:`WMA`,factory:()=>new To(20)},{shortName:`HMA`,factory:()=>new Do(20)},{shortName:`MARibbon`,factory:()=>new Ao},{shortName:`BB`,factory:()=>new jo(20,2)},{shortName:`KC`,factory:()=>new Mo(20,2)},{shortName:`DC`,factory:()=>new No(20)},{shortName:`ATR`,factory:()=>new Po(14)},{shortName:`RSI`,factory:()=>new Fo(14)},{shortName:`Stoch`,factory:()=>new Io(14,3)},{shortName:`StochRSI`,factory:()=>new Ro(14,14,3,3)},{shortName:`MACD`,factory:()=>new Bo(12,26,9)},{shortName:`CCI`,factory:()=>new Vo(20)},{shortName:`%R`,factory:()=>new Ho(14)},{shortName:`ROC`,factory:()=>new Uo(12)},{shortName:`AO`,factory:()=>new as},{shortName:`OBV`,factory:()=>new Wo},{shortName:`VWAP`,factory:()=>new Go},{shortName:`A/D`,factory:()=>new Ko},{shortName:`MFI`,factory:()=>new qo(14)},{shortName:`CMF`,factory:()=>new Jo(20)},{shortName:`Pivot`,factory:()=>new Yo},{shortName:`Fib`,factory:()=>new $o(50)},{shortName:`Supertrend`,factory:()=>new es(10,3)},{shortName:`PSAR`,factory:()=>new ts(.02,.2)},{shortName:`Ichimoku`,factory:()=>new rs(9,26,52)},{shortName:`ADX`,factory:()=>new is(14)},{shortName:`HA`,factory:()=>new os},{shortName:`VOL`,factory:()=>new ss},{shortName:`LinReg`,factory:()=>new cs(14)}],ps={kind:`select`,key:`timeframe`,label:`Timeframe`,options:[`Chart`,`1m`,`5m`,`15m`,`30m`,`1h`,`4h`,`1D`,`1W`,`1M`,`1Y`],default:`Chart`};function ms(e,t,n){if(!n)return e;let r=n.fields.filter(e=>e.kind===`number`).map(e=>{var n;return(n=t[e.key])==null?e.default:n});return r.length>0?`${e}(${r.join(`, `)})`:e}var hs=[{shortName:`MA`,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`}],factory:e=>new So(e.period,e.color,`MA`,e.source)},{shortName:`EMA`,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`}],factory:e=>new wo(e.period,e.color,`EMA`,e.source)},{shortName:`WMA`,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`}],factory:e=>new To(e.period,e.color,`WMA`,e.source)},{shortName:`HMA`,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`}],factory:e=>new Do(e.period,e.color,`HMA`,e.source)},{shortName:`MARibbon`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ffcc80`},{kind:`select`,key:`source`,label:`Source`,options:[`open`,`high`,`low`,`close`],default:`close`}],factory:e=>new Ao(e.color,e.source)},{shortName:`BB`,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`}],factory:e=>new jo(e.period,e.stdDev,e.color,`BB`,e.source)},{shortName:`KC`,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`}],factory:e=>new Mo(e.period,e.mult,e.atrPeriod,e.color)},{shortName:`DC`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#26c6da`}],factory:e=>new No(e.period,e.color)},{shortName:`ATR`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff5722`}],factory:e=>new Po(e.period,e.color)},{shortName:`RSI`,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`}],factory:e=>new Fo(e.period,e.color,`RSI`,e.source)},{shortName:`Stoch`,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`}],factory:e=>new Io(e.kPeriod,e.dPeriod,e.color)},{shortName:`StochRSI`,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`}],factory:e=>new Ro(e.rsiPeriod,e.stochPeriod,e.kPeriod,e.dPeriod,e.color)},{shortName:`MACD`,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`}],factory:e=>new Bo(e.fast,e.slow,e.signal,e.color,`MACD`,e.source)},{shortName:`CCI`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#4db6ac`}],factory:e=>new Vo(e.period,e.color)},{shortName:`%R`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff7043`}],factory:e=>new Ho(e.period,e.color)},{shortName:`ROC`,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`}],factory:e=>new Uo(e.period,e.color,e.source)},{shortName:`AO`,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`}],factory:e=>new as(e.fastPeriod,e.slowPeriod,e.color)},{shortName:`OBV`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#aed581`}],factory:e=>new Wo(e.color)},{shortName:`VWAP`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#9c27b0`}],factory:e=>new Go(e.color)},{shortName:`A/D`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ce93d8`}],factory:e=>new Ko(e.color)},{shortName:`MFI`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ffab40`}],factory:e=>new qo(e.period,e.color)},{shortName:`CMF`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:20},{kind:`color`,key:`color`,label:`Color`,default:`#80deea`}],factory:e=>new Jo(e.period,e.color)},{shortName:`Pivot`,fields:[{kind:`color`,key:`color`,label:`Color`,default:`#ffd54f`}],factory:e=>new Yo(e.color)},{shortName:`Fib`,fields:[{kind:`number`,key:`lookback`,label:`Lookback`,min:1,max:500,step:1,default:50},{kind:`color`,key:`color`,label:`Color`,default:`#e1bee7`}],factory:e=>new $o(e.lookback,e.color)},{shortName:`Supertrend`,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`}],factory:e=>new es(e.atrPeriod,e.multiplier,e.color)},{shortName:`PSAR`,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`}],factory:e=>new ts(e.step,e.maxAF,e.color)},{shortName:`Ichimoku`,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`}],factory:e=>new rs(e.tenkan,e.kijun,e.senkouB,e.color)},{shortName:`ADX`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#fff176`}],factory:e=>new is(e.period,e.color)},{shortName:`HA`,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`}],factory:e=>new os(e.color,e.upColor,e.downColor)},{shortName:`VOL`,fields:[{kind:`color`,key:`upColor`,label:`Up Color`,default:`#26a69a`},{kind:`color`,key:`downColor`,label:`Down Color`,default:`#ef5350`}],factory:e=>new ss(e.upColor,e.downColor)},{shortName:`LinReg`,fields:[{kind:`number`,key:`period`,label:`Period`,min:1,max:500,step:1,default:14},{kind:`color`,key:`color`,label:`Color`,default:`#ff9800`}],factory:e=>new cs(e.period,e.color)}],gs=70,_s=24,vs=.18,ys=80,Z=1,bs=80,xs=10,Ss=.25,Cs=.2;function ws(){return typeof window<`u`&&(`ontouchstart`in window||navigator.maxTouchPoints>1)}function Ts(e=2,t=!1,n=bs,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&&!ws()?n:r===void 0?Math.max(10,Math.round(n/e)):r}var Es=4;function Ds(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 Os(e){let t=e.max-e.min;return t>=100?0:t>=10?1:t>=1?2:t>=.1?3:4}var ks=class n{get indicators(){return this.activeIndicators.filter(e=>{if(!e.visible)return!1;let t=e.currentParams.timeframe;return!(t&&t!==`Chart`&&t!==this.timeframe)}).map(e=>e.indicator)}get isFullscreen(){return this._isCssFullscreen||!!document.fullscreenElement}constructor(o){var l,u,d,f,p,m,h,g,_,y,x,C;if(this.topBar=null,this.bottomBar=null,this.leftBar=null,this.leftBarVisible=!0,this.drawingToolsEnabled=!0,this._mobileLayout=!1,this.indicatorOverlay=null,this.subPaneOverlays=new Map,this.isinPickerModal=null,this.isins=[],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.indicatorSettingsDialog=null,this.chartSettingsDialog=null,this.tradeButton=null,this.tradePopover=null,this.draftOrderLabel=null,this.draftOrderQtyInput=null,this._hoverBuyType=`limit`,this._hoverSellType=`limit`,this._onOrderSubmit=void 0,this._minLots=1,this.scrollToEndBtn=null,this.scrollToEndVisible=!1,this.scrollAnimId=null,this.resetViewBtn=null,this.dataStore=new t,this.scaleManager=new r,this.emitter=new i,this.themeName=`dark`,this._debug=!1,this.symbol=``,this.showBidAskLines=!1,this.showActLogo=!1,this.activeIndicators=[],this.indicatorResults=new Map,this.viewport={startIndex:0,endIndex:Ts(),candleWidth:8,candleGap:2},this._targetViewport={startIndex:0,endIndex:Ts(),candleWidth:8,candleGap:2},this._isPanning=!1,this.crosshair=null,this.drawingManager=new co,this.textInputEl=null,this.textInputDrawing=null,this._pendingDrawDrag=null,this._pendingDrawResize=null,this.paneHeightOverrides=new Map,this.separatorDrag=null,this.priceAxisWidth=gs,this.timeAxisHeight=_s,this.priceScaleFactor=1,this.pricePanOffset=0,this._displayedPriceRange=null,this._lockedAutoFitBase=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.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.settingsCanvasColors={},this.streamAdapter=null,this.liveBidAsk=null,this.tickClosePriceSource=`bid`,this.levels=[],this.tradeLevelHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeLevelDragAreas=[],this.tradeLevelConfirmAreas=[],this.tradeAddBracketAreas=[],this.hoveredTradeLabel=null,this.selectedTradeLabel=null,this.tradeDragHandler=null,this.tradeDragNewPrice=null,this._pendingBracketOrderLabel=null,this._isBracketNew=!1,this.pendingLevelDrags=new Map,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.maxCandles=200,this.defaultVisibleBars=bs,this.defaultMobileVisibleBars=void 0,this.mobileBarDivisor=2,this.explicitMobileDivisor=!1,this._autoVisibleBars=!0,this.targetCandleWidth=xs,this.maxSubPanes=3,this.showCandleCountdown=!0,this.loadingOverlayEl=null,this.logoImage=null,this.isRestoringState=!1,this.onMouseMove=e=>{var t,r,i,a,o;if(this._mobileCrosshairActive||Date.now()-this._lastTouchTime<500)return;let s=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,c=e.clientX-s.left,l=e.clientY-s.top,{chartW:u,priceH:d}=this.getChartLayout(),f=(r=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):r,p=s.height-this.timeAxisHeight,m=c<u&&l<p,h=this.scaleManager.pixelToBarIndex(c,this.viewport,u),g=this.scaleManager.pixelToPrice(l,f,d),_=Math.max(Math.floor(this.viewport.startIndex),Math.min(Math.ceil(this.viewport.endIndex),Math.round(h))),v=(i=this.dataStore.all[_])==null?null:i;this.crosshair=m&&!((a=this.tradePopover)!=null&&a.isVisible)?{x:c,y:l,barIndex:_,price:g,bar:v}:null,this.crosshair&&this.emitter.emit(`crosshair`,this.crosshair);let y=this.positionRenderStyle===`dot`&&this.hoveredTradeLabel!==null;if(this.tradeButton){var b,x;if(m&&l>=0&&l<=d&&!((b=this.tradePopover)!=null&&b.isVisible)&&!y){this.tradeButton.setY(l),this.tradeButton.show(),this._tradeButtonClickData={price:g,y:l};let e=this.dataStore.all,t=e.length>0?e[e.length-1].close:g;this._hoverBuyType=g<t?`limit`:`stop`,this._hoverSellType=g>t?`limit`:`stop`}else (x=this.tradePopover)!=null&&x.isVisible||this.tradeButton.hide()}if(this._pendingDrawResize){let e=c-this._pendingDrawResize.startX,t=l-this._pendingDrawResize.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startResize(this._pendingDrawResize.drawing,this._pendingDrawResize.pointIndex),this._pendingDrawResize=null)}if(this._pendingDrawDrag){let e=c-this._pendingDrawDrag.startX,t=l-this._pendingDrawDrag.startY;Math.sqrt(e*e+t*t)>n.DRAW_GESTURE_THRESHOLD&&(this.drawingManager.startDrag(this._pendingDrawDrag.drawing,{barIndex:h,price:g}),this._pendingDrawDrag=null)}if(this.drawingManager.onMouseMove({barIndex:h,price:g}),this.axisDrag){if(this.axisDrag.axis===`price`){let e=l-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.indicatorName){let e=l-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.indicatorName,t)}else{let e=c-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-l,t=Math.max(40,Math.min(300,this.separatorDrag.startH+e));this.paneHeightOverrides.set(this.separatorDrag.indicatorName,t),this.drawCanvas.style.cursor=`ns-resize`,this.scheduleRender();return}if((o=this.tradeDragHandler)!=null&&o.active){var S;let e=this.tradeDragHandler.onMouseMove(l,this.scaleManager,f,d);if(this.tradeDragNewPrice=(S=e==null?void 0:e.newPrice)==null?null:S,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,isFullscreen:this.isFullscreen})}return}if(!this.drawingManager.getActiveTool()){var C;if(Be(c,l,this.tradeLevelHitAreas)||Ve(c,l,this.tradeLevelEditAreas)||He(c,l,this.tradeLevelConfirmAreas)){this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}if(We(c,l,this.tradeLevelDragAreas)){this.drawCanvas.style.cursor=`ns-resize`,this.scheduleRender();return}let e=Ue(c,l,this.tradeHoverAreas),t=(C=e==null?void 0:e.label)==null?null:C;if(t!==this.hoveredTradeLabel&&(this.hoveredTradeLabel=t,this.renderTradeLayer()),this.positionRenderStyle===`dot`&&t!==null){this.crosshair=null,this.drawCanvas.style.cursor=`pointer`,this.scheduleRender();return}if(this.getSeparatorPositions().find(e=>Math.abs(l-e.y)<=4))this.drawCanvas.style.cursor=`ns-resize`;else if(c>=u)this.drawCanvas.style.cursor=`ns-resize`;else if(l>=p)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(c,l,this.scaleManager,this.viewport,f,u,d);if(e)this.drawCanvas.style.cursor=e.handle.cursor;else{let e=this.drawingManager.hitTest(c,l,this.scaleManager,this.viewport,f,u,d);this.drawCanvas.style.cursor=e?`move`:`default`}}}this.scheduleRender()},this.onMouseLeave=e=>{var t;if(!(this.tradeButton&&this.tradeButton.el.contains(e.relatedTarget))&&!this._mobileCrosshairActive){if(this.crosshair=null,!((t=this.tradePopover)!=null&&t.isVisible)){var n;(n=this.tradeButton)==null||n.hide()}this.hoveredTradeLabel!==null&&(this.hoveredTradeLabel=null,this.renderTradeLayer()),this.scheduleRender()}},this.onMouseUp=()=>{var e;if((e=this.tradeDragHandler)!=null&&e.active){let e=this.tradeDragHandler.endDrag();if(e){var t;this.storePendingChange(e,e.startPrice,(t=this._pendingBracketOrderLabel)==null?void 0:t)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.drawCanvas.style.cursor=`default`,this.renderTradeLayer();return}this.axisDrag&&(this.axisDrag=null,this.drawCanvas.style.cursor=`default`,this.scheduleRender()),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 n=e.touches[0],r=this.touchToDrawingPoint(n),i=this.drawingManager.getActiveTool(),a=this.drawingManager.isPlacing();if(i!==null||a){e.preventDefault(),this._lastDrawingTouchPoint=r,a?(this._drawTouchAnchorActive=!1,this.drawingManager.onMouseMove(r)):(this.drawingManager.onMouseDown(r),this._drawTouchAnchorActive=this.drawingManager.isPlacing()),this.scheduleRender();return}let o=(t=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():t,s=n.clientX-o.left,c=n.clientY-o.top,{chartW:l,priceH:u}=this.getChartLayout(),d=this.getScaledPriceRange(this.viewport);if(s>=l){if(e.preventDefault(),c<=u)this.axisDrag={axis:`price`,startPos:c,startSize:this.priceScaleFactor};else{let e=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).map(e=>e.indicator),t=u+Z;for(let n of e){let e=this.paneH(n);if(c>=t&&c<t+e){var f;this.axisDrag={axis:`subpane`,startPos:c,startSize:(f=this.subPaneScaleFactors.get(n.name))==null?1:f,indicatorName:n.name};break}t+=e+Z}}this.scheduleRender();return}let p=o.height-this.timeAxisHeight;if(c>=p){e.preventDefault(),this.axisDrag={axis:`time`,startPos:s,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let m=this.drawingManager.getHandleAtPoint(s,c,this.scaleManager,this.viewport,d,l,u);if(m){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(m.drawing),this.drawingManager.startResize(m.drawing,m.handle.pointIndex),this.hideMobileDrawingFlyout(),this.scheduleRender();return}let h=this.drawingManager.hitTest(s,c,this.scaleManager,this.viewport,d,l,u);if(h){e.preventDefault(),this.panHandler.cancel(),this.drawingManager.selectDrawing(h),this.drawingManager.startDrag(h,r),this._drawTouchStartXY={x:n.clientX,y:n.clientY},this.hideMobileDrawingFlyout(),this.scheduleRender();return}let g=He(s,c,this.tradeLevelConfirmAreas);if(g){e.preventDefault(),g.action===`confirm`?this.applyPendingChanges(g.label):this.revertPendingChanges(g.label);return}let _=Be(s,c,this.tradeLevelHitAreas);if(_){e.preventDefault(),this._handleTradeLevelClose(_);return}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let t=We(s,c,this.tradeLevelDragAreas);if(t){e.preventDefault();let n=this.levels.find(e=>e.label===t.label);if(n){this._startTradeDragFromHit(t,n,c),this.scheduleRender();return}}let n=Ge(s,c,this.tradeAddBracketAreas);if(n){e.preventDefault(),this._startAddBracketFromHit(n,c),this.scheduleRender();return}}this.drawingManager.selectDrawing(null),this.hideMobileDrawingFlyout(),s<l&&c<p&&(this._mobileCrosshairActive?(this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null),this._mobileTapStartXY={x:s,y:c}):(this._longPressTimer!==null&&clearTimeout(this._longPressTimer),this._longPressPoint={x:s,y:c},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;if(e.touches.length!==1)return;let n=this.touchToDrawingPoint(e.touches[0]);if(this._lastDrawingTouchPoint=n,this.axisDrag){var r;e.preventDefault();let t=e.touches[0],n=(r=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():r,i=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.indicatorName){let e=a-this.axisDrag.startPos,t=Math.max(.1,Math.min(20,this.axisDrag.startSize*1.005**e));this.subPaneScaleFactors.set(this.axisDrag.indicatorName,t)}else{let e=i-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.scheduleRender();return}if(this.drawingManager.isPlacing()&&!this._drawTouchAnchorActive){e.preventDefault(),this.drawingManager.onMouseMove(n),this.scheduleRender();return}if(this.drawingManager.isDraggingDrawing()||this.drawingManager.isResizingDrawing()){e.preventDefault(),e.stopPropagation(),this.drawingManager.onMouseMove(n),this.scheduleRender();return}if((t=this.tradeDragHandler)!=null&&t.active){var i,a,o;e.preventDefault();let t=e.touches[0],n=(i=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():i,r=t.clientY-n.top,{priceH:s}=this.getChartLayout(),c=(a=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):a,l=this.tradeDragHandler.onMouseMove(r,this.scaleManager,c,s);if(this.tradeDragNewPrice=(o=l==null?void 0:l.newPrice)==null?null:o,this.renderTradeLayer(),this.tradeDragNewPrice!==null&&l){let e=l.label.indexOf(`:`),t=e===-1?l.label:l.label.slice(0,e),n=e===-1?void 0:l.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,isFullscreen:this.isFullscreen})}return}if(this._mobileTapStartXY||this._longPressTimer!==null){var s,c;let t=e.touches[0],n=(s=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():s,r=(c=this._mobileTapStartXY)==null?this._longPressPoint:c;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 l,u;e.preventDefault();let t=e.touches[0],n=(l=this._cachedDrawRect)==null?this.drawCanvas.getBoundingClientRect():l,r=t.clientX-n.left,i=t.clientY-n.top,{chartW:a,priceH:o}=this.getChartLayout(),s=(u=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):u,c=n.height-this.timeAxisHeight;if(r<a&&i<c){var d;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)));this.crosshair={x:r,y:i,barIndex:n,price:t,bar:(d=this.dataStore.all[n])==null?null:d},this.tradeButton&&(this.tradeButton.setY(i),this.tradeButton.show()),this.scheduleRender()}}},this.onDrawingTouchEnd=e=>{var t;if(this._lastTouchTime=Date.now(),this._longPressTimer!==null&&(clearTimeout(this._longPressTimer),this._longPressTimer=null,this._longPressPoint=null),(t=this.tradeDragHandler)!=null&&t.active){let e=this.tradeDragHandler.endDrag();if(e){var n;this.storePendingChange(e,e.startPrice,(n=this._pendingBracketOrderLabel)==null?void 0:n)}else this.tradeDragNewPrice=null;this._pendingBracketOrderLabel=null,this.renderTradeLayer();return}if(this.axisDrag){this.axisDrag=null,this.scheduleRender();return}let r=this._drawTouchAnchorActive;if(this._drawTouchAnchorActive=!1,!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 i;this._mobileTapStartXY=null,this._mobileCrosshairActive=!1,this.crosshair=null,(i=this.tradeButton)==null||i.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=He(i,a,this.tradeLevelConfirmAreas);if(f){f.action===`confirm`?this.applyPendingChanges(f.label):this.revertPendingChanges(f.label);return}let p=Be(i,a,this.tradeLevelHitAreas);if(p){this._handleTradeLevelClose(p);return}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=We(i,a,this.tradeLevelDragAreas);if(e){let t=this.levels.find(t=>t.label===e.label);if(t){this._startTradeDragFromHit(e,t,a),this.drawCanvas.style.cursor=`ns-resize`;return}}}if(this.tradeDragHandler&&!this.drawingManager.getActiveTool()){let e=Ge(i,a,this.tradeAddBracketAreas);if(e){this._startAddBracketFromHit(e,a),this.drawCanvas.style.cursor=`ns-resize`;return}}if(!this.drawingManager.getActiveTool()){let e=Ve(i,a,this.tradeLevelEditAreas);if(e){let t=this.levels.find(t=>t.label===e.label);t&&(this.selectedTradeLabel=t.label,this.renderTradeLayer(),this.emitter.emit(`tradeLevelEditOpen`,{label:t.label,type:t.type,data:t.data,price:t.price,side:t.side,stopLossPrice:t.stopLossPrice,takeProfitPrice:t.takeProfitPrice,isFullscreen:this.isFullscreen}));return}}let m=Ue(i,a,this.tradeHoverAreas);if(m){let e=this.pendingLevelDrags.has(m.label);this.selectedTradeLabel===m.label&&!e?this.selectedTradeLabel=null:this.selectedTradeLabel=m.label,this.renderTradeLayer();return}else this.selectedTradeLabel!==null&&(this.pendingLevelDrags.has(this.selectedTradeLabel)||(this.selectedTradeLabel=null,this.renderTradeLayer()));let h=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`).map(e=>e.indicator),t=s+Z;for(let n of e){let e=this.paneH(n);if(a>=t&&a<t+e){var g;this.axisDrag={axis:`subpane`,startPos:a,startSize:(g=this.subPaneScaleFactors.get(n.name))==null?1:g,indicatorName:n.name};break}t+=e+Z}}this.scheduleRender();return}if(a>=h){this.axisDrag={axis:`time`,startPos:i,startSize:this.viewport.endIndex-this.viewport.startIndex},this.scheduleRender();return}let _=this.getSeparatorPositions().find(e=>Math.abs(a-e.y)<=4);if(_){var v,y;let e=this.indicators.find(e=>e.name===_.indicatorName),t=(v=(y=this.paneHeightOverrides.get(_.indicatorName))==null?e==null?void 0:e.paneHeight:y)==null?ys:v;this.separatorDrag={indicatorName:_.indicatorName,startY:a,startH:t},this.scheduleRender();return}if(!this.drawingManager.onMouseDown({barIndex:l,price:u})){var b;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,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=(b=this.dataStore.all[d])==null?null:b;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=>{if(e.key===`Escape`&&this.pendingLevelDrags.size>0){this.revertPendingChanges(),e.preventDefault();return}let t=(e.ctrlKey||e.metaKey)&&e.key===`z`?`z`:e.key;if(this.drawingManager.onKeyDown(t)){var n;e.preventDefault(),this.hideMobileDrawingFlyout(),(n=this.leftBar)==null||n.setActiveTool(this.drawingManager.getActiveTool()),this.drawCanvas.style.cursor=this.drawingManager.getActiveTool()?`crosshair`:`default`,this.scheduleRender()}},this.onTick=e=>{let t=this.dataStore.all;if(t.length===0)return;this.liveBidAsk={bid:e.bid,ask:e.ask},this.setDotTickActive();let n=t[t.length-1],r=this.timeframeToMs(this.timeframe),i=this.tickClosePriceSource===`ask`?e.ask:e.bid;if(e.time<n.time+r){var a;let r={...n,high:Math.max(n.high,i),low:Math.min(n.low,i),close:i,volume:((a=n.volume)==null?0:a)+e.volume};t[t.length-1]=r}else{let a=n,o=Math.floor(e.time/r)*r;t.push({time:o,open:i,high:i,low:i,close:i,volume:e.volume}),this._debug&&console.warn(`[tick] → NEW candle @ ${new Date(o).toISOString()} (closed ${new Date(a.time).toISOString()}) | total bars=${t.length}`);let s=t[t.length-1];this._targetViewport.endIndex>=t.length&&(this._targetViewport={...this._targetViewport,startIndex:this._targetViewport.startIndex+1,endIndex:this._targetViewport.endIndex+1}),this.emitter.emit(`newBar`,{completedBar:a,openingBar:s,intervalMs:r}),this.correctCompletedBar(a.time,r),o>a.time+r&&this.fillTickGap(a.time,o)}this.recomputeIndicators(),this.scheduleRender()},typeof window>`u`||typeof document>`u`)throw Error(`acttrader-charts requires a browser environment`);let{container:w,theme:E=`dark`,series:D=`candlestick`,showVolume:O=!0,showUI:k=!0,timeframe:A=`1D`,duration:j=void 0,symbol:M=``,isins:ee,onIsinSelect:N,onOrderSubmit:te,dataLoader:P,durationTimeframeMap:ne,uiConfig:F,labels:I,tickActivityMs:re=3e4}=o;if(this.dataLoader=P==null?null:P,this.drawingToolsEnabled=o.showDrawingTools!==!1,this.uiConfig=v(F),this.labels=b(I),this.tickActivityMs=re,this.maxCandles=(l=o.maxCandles)==null?200:l,this.defaultVisibleBars=(u=o.defaultVisibleBars)==null?bs:u,this.defaultMobileVisibleBars=o.defaultMobileVisibleBars,this.explicitMobileDivisor=o.mobileBarDivisor!==void 0,this.mobileBarDivisor=(d=o.mobileBarDivisor)==null?2:d,this._autoVisibleBars=o.defaultVisibleBars==null&&o.defaultMobileVisibleBars==null,this.targetCandleWidth=(f=o.targetCandleWidth)==null?xs:f,this.viewport={...this.viewport,endIndex:Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)},this._targetViewport={...this.viewport},this.maxSubPanes=(p=o.maxSubPanes)==null?3:p,this.tickClosePriceSource=(m=o.tickClosePriceSource)==null?`bid`:m,this.tradesThresholdForHorizontalLine=(h=o.tradesThresholdForHorizontalLine)==null?2:h,o.positionRenderStyle===`line`||o.positionRenderStyle===`dot`)this.positionRenderStyleOverride=o.positionRenderStyle;else{let e=localStorage.getItem(this.RENDER_STYLE_LS_KEY);(e===`line`||e===`dot`)&&(this.positionRenderStyleOverride=e)}if(o.tradeDisplayFilter&&(this.tradeDisplayFilter=o.tradeDisplayFilter),o.canvasColors&&(this.settingsCanvasColors=o.canvasColors),this.recomputeRenderStyle(),this.showBidAskLines=(g=o.showBidAskLines)==null?!1:g,this.showActLogo=(_=o.showActLogo)==null?!1:_,this.showCandleCountdown=(y=o.showCandleCountdown)==null?!0:y,this.candleCountdownTimeframes=o.candleCountdownTimeframes,this._onOrderSubmit=te,this._minLots=(x=o.minLots)==null?1:x,this.themeName=E===`dark`?`dark`:`light`,this.themeOverrides=o.themeOverrides,this.aggregateFrom=o.aggregateFrom,this.theme=a(this.themeName===`dark`?s:c,(C=this.themeOverrides)==null?void 0:C[this.themeName]),this.series=D,this.showVolume=O,this.timeframe=A,this.duration=j,this.symbol=M,this.wrapper=document.createElement(`div`),Object.assign(this.wrapper.style,{display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,overflow:`hidden`,boxSizing:`border-box`}),k){let e={...kt,...ne};this.topBar=new Ot(e=>this.setSeries(e),e=>{this.timeframe=e,this.emitter.emit(`timeframeChange`,{timeframe:e}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`timeframe`)},e=>this.addIndicatorByName(e),(e,t)=>{var n,r;this.duration=e,this.timeframe=t,(n=this.topBar)==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.series,this.timeframe,null,e,this.theme,this.uiConfig.topBar,this.labels.topBar),this.topBar.setIndicatorOptions(ls.filter(e=>e.enabled).map(e=>({value:e.short_name,label:`${e.name} (${e.short_name})`,category:e.type}))),this.wrapper.appendChild(this.topBar.el)}let ie=document.createElement(`div`);Object.assign(ie.style,{display:`flex`,flex:`1`,minHeight:`0`,overflow:`hidden`,position:`relative`}),k&&this.drawingToolsEnabled&&(this.leftBar=new Pt(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.topBar)==null||e.setDrawingsBtnActive(!1)},this.theme,this.uiConfig.drawingToolbar,this.labels.drawingToolbar),ie.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`,Object.assign(this.textInputEl.style,{position:`absolute`,display:`none`,zIndex:`15`,background:`transparent`,border:`none`,borderBottom:`1px solid #2196f3`,color:`#f5f5f5`,font:`13px system-ui, sans-serif`,outline:`none`,minWidth:`60px`,padding:`0 2px`}),this.canvasWrap.appendChild(this.textInputEl),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 ae=document.createElement(`span`);if(ae.textContent=this.labels.chart.loading,Object.assign(ae.style,{color:`rgba(200,200,200,0.9)`,fontSize:`13px`,background:`rgba(0,0,0,0.45)`,padding:`4px 12px`,borderRadius:`4px`}),this.loadingOverlayEl.appendChild(ae),this.canvasWrap.appendChild(this.loadingOverlayEl),k){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`}),this.siSymbolSpan=document.createElement(`span`),Object.assign(this.siSymbolSpan.style,{color:this.theme.axisText,fontSize:`17px`,fontFamily:`'Inter', system-ui, sans-serif`,fontWeight:`700`,display:M?`inline`:`none`}),this.siSymbolSpan.textContent=M==null?``:M,N&&(ee&&(this.isins=ee),this.isinPickerModal=new bo(this.theme,N),this.getFloatingRoot().appendChild(this.isinPickerModal.el),Object.assign(this.siSymbolSpan.style,{cursor:`pointer`,textDecoration:`underline`,pointerEvents:`auto`}),this.siSymbolSpan.addEventListener(`click`,()=>{var e;this.isinPickerModal.show(this.isins,(e=this.siSymbolSpan.textContent)==null?``:e)})),this.siOHLCSpan=document.createElement(`span`),Object.assign(this.siOHLCSpan.style,{fontSize:`14px`,fontFamily:`'Inter', system-ui, sans-serif`,whiteSpace:`nowrap`}),this.siOHLC2Span=document.createElement(`span`),Object.assign(this.siOHLC2Span.style,{fontSize:`14px`,fontFamily:`'Inter', system-ui, sans-serif`,whiteSpace:`nowrap`}),this.siStreamDot=document.createElement(`span`),Object.assign(this.siStreamDot.style,{width:`7px`,height:`7px`,borderRadius:`50%`,background:this.theme.ui.stream.disconnected,display:`inline-block`,flexShrink:`0`});let e=document.createElement(`div`);Object.assign(e.style,{display:`flex`,alignItems:`center`,gap:`8px`}),e.append(this.siStreamDot,this.siSymbolSpan,this.siOHLCSpan),this.siEl.append(e,this.siOHLC2Span),this.canvasWrap.appendChild(this.siEl)}if(k&&(this.indicatorOverlay=new uo(this.theme,this.uiConfig.indicatorOverlay,this.labels.chart),this.canvasWrap.appendChild(this.indicatorOverlay.el),this.indicatorSettingsDialog=new fo(this.theme,this.labels.dialogs),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 xo,o.onLevelDragEnd&&this.emitter.on(`tradeLevelDragEnd`,o.onLevelDragEnd),o.onLevelEdit&&this.emitter.on(`tradeLevelEdit`,o.onLevelEdit),te){var oe;let e=(oe=o.minLots)==null?1:oe;this.tradePopover=new go(this.theme,e,(e,t,n)=>this.createDraftOrder(e,t,n),this.labels.trade),this.canvasWrap.appendChild(this.tradePopover.el),this.draftOrderQtyInput=new _o(this.priceAxisWidth,this.labels.trade),this.draftOrderQtyInput.onLotsChange=o.onLotsChange,this.canvasWrap.appendChild(this.draftOrderQtyInput.el),this.tradeButton=new ho(this.theme,this.priceAxisWidth,()=>{if(this._tradeButtonClickData&&this.tradePopover){let e=this.priceAxisWidth+10+22+4;this.tradePopover.show(this._tradeButtonClickData.price,this._tradeButtonClickData.y,e,this.dataStore.getPricePrecision(),this._hoverBuyType,this._hoverSellType)}},this.labels.trade),this.canvasWrap.appendChild(this.tradeButton.el),this.tradeButton.el.addEventListener(`mouseenter`,()=>{this.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(r>=0&&r<=i){var a,o;(a=this.tradeButton)==null||a.setY(r);let e=(o=this._displayedPriceRange)==null?this.getScaledPriceRange(this.viewport):o;this._tradeButtonClickData={price:this.scaleManager.pixelToPrice(r,e,i),y:r}}})}if(ie.appendChild(this.canvasWrap),this.wrapper.appendChild(ie),k){var se;let e={...kt,...ne};this.bottomBar=new jt((e,t)=>{var n;this.duration=e,this.timeframe=t,(n=this.topBar)==null||n.setTimeframe(t),this.emitter.emit(`durationChange`,{duration:e,timeframe:t}),this.emitStateChange(),this.updateCountdownState(),this.triggerLoad(`duration`)},(se=this.duration)==null?null:se,this.theme,e,this.uiConfig.bottomBar,this.labels.bottomBar),this.wrapper.appendChild(this.bottomBar.el)}if(w.appendChild(this.wrapper),this.themeOverrides){var L,R,ce,z;this.theme=this.buildTheme(this.themeName),(L=this.topBar)==null||L.setTheme(this.theme),(R=this.bottomBar)==null||R.setTheme(this.theme),(ce=this.leftBar)==null||ce.setTheme(this.theme),(z=this.tradeButton)==null||z.setTheme(this.theme,this.priceAxisWidth)}let le=this.canvas.getContext(`2d`);if(!le)throw Error(`Canvas 2D context unavailable`);this.ctx=le;let ue=this.drawCanvas.getContext(`2d`);if(!ue)throw Error(`Drawing canvas 2D context unavailable`);this.drawCtx=ue;let de=this.tradeCanvas.getContext(`2d`);if(!de)throw Error(`Trade canvas 2D context unavailable`);if(this.tradeCtx=de,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.onStartTextEdit=e=>this.showTextInput(e),this.panHandler=new S(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender()},()=>this.dataStore.length,()=>this.scheduleRender(),()=>{var e,t;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)||this._mobileCrosshairActive},e=>{var t;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._isPanning=!0},()=>{this._isPanning=!1}),this.zoomHandler=new T(this.drawCanvas,()=>this._targetViewport,e=>{this._targetViewport=e,this.clearDuration(),this.checkNeedMoreData(),this.scheduleRender()},()=>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.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(`contextmenu`,e=>e.preventDefault()),document.addEventListener(`keydown`,this.onKeyDown);let fe=()=>{var e;let t=!!document.fullscreenElement;t||(this._isCssFullscreen=!1),(e=this.topBar)==null||e.setFullscreen(t),this.reparentFloatingElements()};this.wrapper.addEventListener(`fullscreenchange`,fe),document.addEventListener(`fullscreenchange`,fe),this.resizeObserver=new ResizeObserver(()=>this.onResize()),this.resizeObserver.observe(this.canvasWrap),this.onResize(),this.dataLoader&&this.triggerLoad(`initial`)}loadData(e,t=!1){var n,r,i;this.isFetching=!1,this.noMoreData=!1,this.pricePanOffset=0,this.priceScaleFactor=1,this._displayedPriceRange=null,this._lockedAutoFitBase=null,this.dataStore.set(e);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;this.viewport={...this.viewport,startIndex:t?0:Math.max(0,e.length-Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars,o,this.targetCandleWidth)+Es),endIndex:e.length+Es},this._targetViewport={...this.viewport};let s=this.dataStore.hasVolumeData;if(s||(this.showVolume=!1),(i=this.topBar)==null||i.setVolumeControl(this.showVolume,s),this.showVolume&&s){var c;(c=this.indicatorOverlay)==null||c.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this.topBar)==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()})}return this.recomputeIndicators(),this.reanchorDrawingsByTimestamp(),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.recomputeIndicators(),this.scheduleRender()),this.isFetching=!1,this}setLoading(e){return this.loadingOverlayEl&&(this.loadingOverlayEl.style.display=e?`flex`:`none`),this}timeframeToMs(e){var t;let n=6e4;return(t={"1m":1*n,"5m":5*n,"15m":15*n,"30m":30*n,"1h":60*n,"4h":240*n,"1D":1440*n,"1W":10080*n,"1M":43200*n,"1Y":525600*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()?us(e,this.timeframeToMs(this.timeframe)):e}timeframeToInterval(e){var t;return(t={"1m":`1min`,"5m":`5min`,"15m":`15min`,"30m":`30min`,"1h":`1hour`,"4h":`4hour`,"1D":`1day`,"1W":`1week`,"1M":`1month`,"1Y":`1week`}[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;this.isFetching=!0,this.noMoreData=!1;let t=new Date,n=new Date(t.getTime()-this.maxCandles*this.timeframeToMs(this.timeframe)),r=this.duration?new Date(t.getTime()-this.durationToMs(this.duration)):n,i=new Date(Math.max(r.getTime(),n.getTime())),a=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0),this.dataLoader({start:i,end:t,interval:a}).then(n=>{this.loadData(this.maybeAggregate(n),e===`duration`),this.setLoading(!1),this.emitter.emit(`dataLoaded`,{timeframe:this.timeframe,interval:a,start:i,end:t})}).catch(()=>{this.isFetching=!1,this.setLoading(!1)})}checkNeedMoreData(){if(!this.dataLoader||this.isFetching||this.noMoreData)return;let e=Math.max(20,Math.round(Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)*.25));if(this._targetViewport.startIndex>e||this.dataStore.length===0)return;this.isFetching=!0;let t=this.dataStore.all[0].time,n=new Date(t-1),r=new Date(t-this.maxCandles*this.timeframeToMs(this.timeframe)),i=this.duration?new Date(t-this.durationToMs(this.duration)):r,a=new Date(Math.max(i.getTime(),r.getTime())),o=this.timeframeToInterval(this.getBaseInterval());this.setLoading(!0),this.dataLoader({start:a,end:n,interval:o}).then(e=>{this.prependData(this.maybeAggregate(e)),this.setLoading(!1)}).catch(()=>{this.isFetching=!1,this.setLoading(!1)})}addIndicator(e){var t;if(e.pane===`sub`&&this.activeIndicators.filter(e=>e.indicator.pane===`sub`).length>=this.maxSubPanes)return this;let n=hs.find(t=>t.shortName===e.name),r=n?Object.fromEntries(n.fields.map(e=>[e.key,e.default])):{};r.timeframe=`Chart`;let i={indicator:e,shortName:e.name,currentParams:r,visible:!0};this.activeIndicators.push(i),this.dataStore.length>0&&this.indicatorResults.set(e.name,e.compute(this.dataStore.all));let a=n!==void 0&&n.fields.length>0,o=ms(e.name,r,n);if(e.pane===`sub`){let t=new uo(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(e.name,t),t.addPill(e.name,e.color,o,`Chart`,!0,()=>this.removeIndicator(e.name),a?()=>this.openIndicatorSettings(e.name):null,()=>{i.visible=!i.visible,t.updatePillVisibility(e.name,i.visible),this.scheduleRender(),this.emitStateChange()})}else{var s;(s=this.indicatorOverlay)==null||s.addPill(e.name,e.color,o,`Chart`,!0,()=>this.removeIndicator(e.name),a?()=>this.openIndicatorSettings(e.name):null,()=>{var t;i.visible=!i.visible,(t=this.indicatorOverlay)==null||t.updatePillVisibility(e.name,i.visible),this.scheduleRender(),this.emitStateChange()})}return(t=this.topBar)==null||t.setIndicatorOptionActive(e.name,!0),this.scheduleRender(),this.emitStateChange(),this}removeIndicator(e){var t;this.activeIndicators=this.activeIndicators.filter(t=>t.indicator.name!==e),this.indicatorResults.delete(e),this.subPaneScaleFactors.delete(e);let n=this.subPaneOverlays.get(e);if(n)n.destroy(),n.el.remove(),this.subPaneOverlays.delete(e);else{var r;(r=this.indicatorOverlay)==null||r.removePill(e)}return(t=this.topBar)==null||t.setIndicatorOptionActive(e,!1),this.scheduleRender(),this.emitStateChange(),this}addIndicatorByName(e){if(e===`VOL`){var t;if(this.setVolume(!this.showVolume),this.showVolume){var n;(n=this.indicatorOverlay)==null||n.addPill(`VOL`,this.theme.volume.up,`VOL`,`Chart`,!0,()=>{var e,t;this.setVolume(!1),(e=this.indicatorOverlay)==null||e.removePill(`VOL`),(t=this.topBar)==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 r;(r=this.indicatorOverlay)==null||r.removePill(`VOL`)}(t=this.topBar)==null||t.setVolumeControl(this.showVolume,this.dataStore.hasVolumeData);return}let i=fs.find(t=>t.shortName===e);if(i){if(this.activeIndicators.some(t=>t.shortName===e)){this.removeIndicator(e);return}this.addIndicator(i.factory())}}openIndicatorSettings(e){var t;let n=this.activeIndicators.find(t=>t.shortName===e);if(!n)return;let r=hs.find(t=>t.shortName===e);if(!r||r.fields.length===0)return;let i={...r,fields:[...r.fields,ps]};(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.findIndex(t=>t.shortName===e);if(r===-1)return;let i=hs.find(t=>t.shortName===e);if(!i)return;let a=this.activeIndicators[r];if(!a)return;let{timeframe:o,...s}=t,c=i.factory(s);a.indicator=c,a.currentParams={...t},this.indicatorResults.delete(e),this.dataStore.length>0&&this.indicatorResults.set(e,c.compute(this.dataStore.all));let l=(n=this.subPaneOverlays.get(e))==null?this.indicatorOverlay:n;l==null||l.updatePillColor(e,c.color),l==null||l.updatePillLabel(e,ms(e,a.currentParams,i)),l==null||l.updatePillTimeframe(e,o==null?`Chart`:o),this.scheduleRender(),this.emitStateChange()}on(e,t){return this.emitter.on(e,t)}buildTheme(e){var t,n,r,i,l,u,d;let f=e===`dark`?s:c,p=this.settingsCanvasColors[e],m=p?{...p.background!==void 0&&{background:p.background},...p.grid!==void 0&&{grid:p.grid},...p.axisText!==void 0&&{axisText:p.axisText},...p.axisBorder!==void 0&&{axisBorder:p.axisBorder},...p.crosshair!==void 0&&{crosshair:p.crosshair},...((t=(n=(r=(i=(l=p.candleUp)==null?p.candleDown:l)==null?p.wickUp:i)==null?p.wickDown:r)==null?p.borderUp:n)==null?p.borderDown:t)!==void 0&&{candle:{...p.candleUp!==void 0&&{up:p.candleUp},...p.candleDown!==void 0&&{down:p.candleDown},...p.wickUp!==void 0&&{wickUp:p.wickUp},...p.wickDown!==void 0&&{wickDown:p.wickDown},...p.borderUp!==void 0&&{borderUp:p.borderUp},...p.borderDown!==void 0&&{borderDown:p.borderDown}}},...((u=p.volumeUp)==null?p.volumeDown:u)!==void 0&&{volume:{...p.volumeUp!==void 0&&{up:p.volumeUp},...p.volumeDown!==void 0&&{down:p.volumeDown}}}}:void 0;return o(a(a(f,(d=this.themeOverrides)==null?void 0:d[e]),m),this.wrapper)}setTheme(e){var t,n,r,i,a,o,s;return this.themeName=e,this.theme=this.buildTheme(e),(t=this.topBar)==null||t.setTheme(this.theme),(n=this.bottomBar)==null||n.setTheme(this.theme),(r=this.leftBar)==null||r.setTheme(this.theme),(i=this.tradeButton)==null||i.setTheme(this.theme,this.priceAxisWidth),(a=this.tradePopover)==null||a.setTheme(this.theme),(o=this.indicatorSettingsDialog)==null||o.setTheme(this.theme),(s=this.chartSettingsDialog)==null||s.setTheme(this.theme),this.applyScrollToEndBtnStyles(),this.applyResetViewBtnStyles(),this.applyMobileDrawingFlyoutTheme(),this.siSymbolSpan&&(this.siSymbolSpan.style.color=this.theme.axisText),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream.disconnected),this.scheduleRender(),this.emitStateChange(),this}setSeries(e){var t;return this.series=e,(t=this.topBar)==null||t.setSeries(e),this.emitter.emit(`seriesChange`,{series:e}),this.scheduleRender(),this.emitStateChange(),this}clearDuration(){var e,t;this.duration!==void 0&&(this.duration=void 0,(e=this.topBar)==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}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})),drawings:this.drawingManager.getDrawingsSnapshot().map(e=>({...e,points:e.points.map(e=>{var t;return{...e,timestamp:(t=this.dataStore.all[Math.floor(e.barIndex)])==null?void 0:t.time}})})),positionRenderStyle:this.positionRenderStyle,tradeDisplayFilter:this.tradeDisplayFilter,canvasColors:Object.keys(this.settingsCanvasColors).length>0?{...this.settingsCanvasColors}:void 0}}setState(e){this.isRestoringState=!0;try{var t,n,r;this.setSeries(e.series),this.setVolume(e.showVolume),this.setTheme(e.theme),this.timeframe=e.timeframe,this.duration=e.duration,(t=this.topBar)==null||t.setTimeframe(e.timeframe),(n=this.topBar)==null||n.setActiveDuration(e.duration),(r=this.bottomBar)==null||r.setActive(e.duration),this.updateCountdownState();let s=this.activeIndicators.map(e=>e.shortName);for(let e of s)this.removeIndicator(e);for(let t of e.indicators){let e=hs.find(e=>e.shortName===t.shortName);if(e){let n=e.factory(t.params);this.addIndicator(n);let r=this.activeIndicators.findIndex(e=>e.shortName===t.shortName);if(r!==-1){let e=this.activeIndicators[r];if(e){var i,a;if(e.currentParams={...t.params},t.visible===!1){var o;e.visible=!1;let n=(o=this.subPaneOverlays.get(t.shortName))==null?this.indicatorOverlay:o;n==null||n.updatePillVisibility(t.shortName,!1)}let n=(i=t.params.timeframe)==null?`Chart`:i,r=(a=this.subPaneOverlays.get(t.shortName))==null?this.indicatorOverlay:a;r==null||r.updatePillTimeframe(t.shortName,n)}}}}let c=this.dataStore.all,l=e.drawings.map(e=>({...e,points:e.points.map(e=>{if(!e.timestamp||c.length===0)return e;let t=0,n=c.length-1;for(;t<n;){var r,i;let a=t+n>>1;((r=(i=c[a])==null?void 0:i.time)==null?0:r)<e.timestamp?t=a+1:n=a}return{...e,barIndex:t+(e.barIndex-Math.floor(e.barIndex))}})}));this.drawingManager.loadDrawings(l),e.positionRenderStyle&&(this.positionRenderStyleOverride=e.positionRenderStyle,this.positionRenderStyle=e.positionRenderStyle),e.tradeDisplayFilter&&(this.tradeDisplayFilter=e.tradeDisplayFilter),e.canvasColors&&(this.settingsCanvasColors=e.canvasColors)}finally{this.isRestoringState=!1}return this.scheduleRender(),this}reanchorDrawingsByTimestamp(){let e=this.dataStore.all;if(e.length!==0)for(let r of this.drawingManager.getDrawings())for(let i of r.points){if(!i.timestamp)continue;let r=0,a=e.length-1;for(;r<a;){var t,n;let o=r+a>>1;((t=(n=e[o])==null?void 0:n.time)==null?0:t)<i.timestamp?r=o+1:a=o}i.barIndex=r+(i.barIndex-Math.floor(i.barIndex))}}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}setSymbol(e){var t;return this.symbol=e,this.siSymbolSpan&&(this.siSymbolSpan.textContent=e,this.siSymbolSpan.style.display=e?`inline`:`none`),(t=this.isinPickerModal)==null||t.setCurrentSymbol(e),this.tickActivityTimer!==null&&(clearTimeout(this.tickActivityTimer),this.tickActivityTimer=null),this.siStreamDot&&(this.siStreamDot.style.background=this.theme.ui.stream[this.streamStatus]),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=e=>e.toFixed(this.dataStore.getPricePrecision()),r=e=>e>=1e6?(e/1e6).toFixed(2)+`M`:e>=1e3?(e/1e3).toFixed(1)+`K`:e.toFixed(0),i=this.labels.ohlc,a=(e,t)=>{e.innerHTML=``;for(let[n,r,i]of t){let t=document.createElement(`span`);t.style.marginRight=`8px`;let a=document.createElement(`span`);a.textContent=n+`\xA0`,a.style.color=this.theme.axisText,a.style.opacity=`0.6`;let o=document.createElement(`span`);o.textContent=r,o.style.color=i,t.append(a,o),e.appendChild(t)}};a(this.siOHLCSpan,[[i.open,n(e.open),this.theme.axisText],[i.high,n(e.high),this.theme.axisText]]),this.siOHLC2Span&&a(this.siOHLC2Span,[[i.low,n(e.low),this.theme.axisText],[i.close,n(e.close),t],...e.volume!=null&&e.volume!==0?[[i.volume,r(e.volume),this.theme.axisText]]:[]])}setMinLots(e){var t;return(t=this.tradePopover)==null||t.setLots(e),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()}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}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: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.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.entryPriceEditable&&(r.entryPriceEditable=!0),e.orderType!==void 0&&(r.orderType=e.orderType),e.lots!==void 0&&(r.lots=Number(e.lots)),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.takeProfitPrice!==void 0&&(r.takeProfitPrice=Number(e.takeProfitPrice)),e.ToClose!==void 0&&(r.ToClose=String(e.ToClose)),r}return{label:String(e[t]),price:Number(e[n]),type:`trade`,text:e.text===void 0?void 0:String(e.text),data:e}});return this.levels=[...this.levels.filter(e=>e.type!==r),...o],this.recomputeRenderStyle(),this.renderTradeLayer(),this}removeLevelByLabel(e){return this.levels=this.levels.filter(t=>t.label!==e),this.renderTradeLayer(),this}showDraftOrder(e,t,n){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}clearDraftOrder(){return this.removeDraftOrder(),this}setDraftOrderLots(e){var t;return(t=this.draftOrderQtyInput)==null||t.setValue(e),this}updateLevelBracket(e,t,n){return 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}}),this.renderTradeLayer(),this}updateLevelMainPrice(e,t){let n=this.levels.find(t=>t.label===e);return n&&(n.price=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.scheduleRender(),this):this}updateDraftOrderPrice(e){var t;if(!this.draftOrderLabel)return!1;this.levels=this.levels.map(t=>t.label===this.draftOrderLabel?{...t,price:e}:t);let n=this.pendingLevelDrags.get(this.draftOrderLabel);if(n){let t=n.find(e=>e.field===`main`);t&&(t.newPrice=e)}let{priceH:r}=this.getChartLayout(),i=this.scaleManager.yToPixel(e,this.getScaledPriceRange(this.viewport),r);return(t=this.draftOrderQtyInput)==null||t.setY(i,r),this.renderTradeLayer(),!0}cancelLevelEdit(e){return this.pendingLevelDrags.delete(e),this.selectedTradeLabel===e&&(this.selectedTradeLabel=null),this.renderTradeLayer(),this}selectLevel(e){return this.selectedTradeLabel=e,this.renderTradeLayer(),this}destroy(){var e,t,n,r,i,a,o,s,c,l,u;this.panHandler.destroy(),this.zoomHandler.destroy(),this.resizeObserver.disconnect(),(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.tradePopover)==null||i.destroy(),(a=this.draftOrderQtyInput)==null||a.destroy(),(o=this.leftBar)==null||o.destroy(),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),document.removeEventListener(`keydown`,this.onKeyDown),(s=this.streamAdapter)==null||s.disconnect(),this.rafId!==null&&cancelAnimationFrame(this.rafId),this.scrollAnimId!==null&&cancelAnimationFrame(this.scrollAnimId),this.stopCountdownLoop(),(c=this.resetViewBtn)==null||c.remove(),(l=this.textInputEl)==null||l.remove(),(u=this._mobileDrawingFlyout)==null||u.remove(),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(st,`Delete drawing`,!0);n.addEventListener(`pointerdown`,e=>{e.stopPropagation(),this.deleteSelectedDrawing(),this.hideMobileDrawingFlyout()});let r=t(it,`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(!ws())return;this._mobileDrawingFlyout||(this._mobileDrawingFlyout=this.createMobileDrawingFlyout());let n=this._mobileDrawingFlyout;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`})}hideMobileDrawingFlyout(){this._mobileDrawingFlyout&&(this._mobileDrawingFlyout.style.display=`none`)}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.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`,`5m`,`15m`,`30m`,`1h`,`4h`]:e).includes(this.timeframe),n=this.showCandleCountdown&&t&&this.dataStore.length>0;n&&!this.countdownActive?(this.countdownActive=!0,this.startCountdownLoop()):!n&&this.countdownActive&&this.stopCountdownLoop()}openChartSettings(){this.chartSettingsDialog||(this.chartSettingsDialog=new mo(this.theme,{tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.positionRenderStyle,theme:this.themeName},this.labels.dialogs),this.getFloatingRoot().appendChild(this.chartSettingsDialog.el)),this.chartSettingsDialog.show({tradeDisplayFilter:this.tradeDisplayFilter,positionRenderStyle:this.positionRenderStyle,theme:this.themeName,canvasColors:{...this.settingsCanvasColors}},e=>{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.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;let a=this.getFloatingRoot();(e=this.topBar)==null||e.reparentFlyout(a),(t=this.leftBar)==null||t.reparentFlyout(a);let o=[(n=this.isinPickerModal)==null?void 0:n.el,(r=this.indicatorSettingsDialog)==null?void 0:r.el,(i=this.chartSettingsDialog)==null?void 0:i.el];for(let e of o)e&&e.parentElement!==a&&a.appendChild(e)}toggleDrawingTools(){var e,t;this.leftBarVisible=!this.leftBarVisible,(e=this.leftBar)==null||e.setVisible(this.leftBarVisible),(t=this.topBar)==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.topBar)==null||t.setFullscreen(e),this.reparentFloatingElements(),requestAnimationFrame(()=>this.onResize())}toggleFullscreen(){let e=!!document.fullscreenElement;!e&&!this._isCssFullscreen?this.wrapper.requestFullscreen?this.wrapper.requestFullscreen().catch(()=>{this._applyCssFullscreen(!0)}):this._applyCssFullscreen(!0):e?document.exitFullscreen().catch(()=>{}):this._applyCssFullscreen(!1)}recomputeRenderStyle(){if(this.positionRenderStyleOverride!==null){this.positionRenderStyle=this.positionRenderStyleOverride;return}this.positionRenderStyle=this.levels.filter(e=>e.type===`position`||e.type===`pending`).length>this.tradesThresholdForHorizontalLine?`dot`:`line`}renderTradeLayer(){var e,t;let n=window.devicePixelRatio||1,{tradeCtx:r,tradeCanvas:i,theme:a,viewport:o}=this;if(r.clearRect(0,0,i.width,i.height),this.levels.length===0||this.dataStore.length===0){this.tradeLevelHitAreas=[],this.tradeLevelEditAreas=[],this.tradeHoverAreas=[],this.tradeAddBracketAreas=[];return}let{chartW:s,priceH:c}=this.getChartLayout(),l=this.getScaledPriceRange(o);if(this.draftOrderLabel&&this.draftOrderQtyInput){var u;let e=this.pendingLevelDrags.get(this.draftOrderLabel),t=e==null?void 0:e.find(e=>e.field===`main`),n=this.levels.find(e=>e.label===this.draftOrderLabel),r=(u=t==null?void 0:t.newPrice)==null?n==null?void 0:n.price:u;r!==void 0&&this.draftOrderQtyInput.setY(this.scaleManager.yToPixel(r,l,c),c)}let d=this.levels.filter(e=>e.type===`pending`&&e.ToClose!=null),f=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=(n=a.find(e=>e.field===`stopLoss`))==null?void 0:n.newPrice,s=(r=a.find(e=>e.field===`takeProfit`))==null?void 0:r.newPrice,c=(i=a.find(e=>e.field===`main`))==null?void 0:i.newPrice,l=d.filter(t=>t.ToClose===e.label);if(l.length===0&&o===void 0&&s===void 0&&c===void 0)return e;let u={...e};if(c!==void 0&&(u.price=c),o!==void 0&&(u.stopLossPrice=o),s!==void 0&&(u.takeProfitPrice=s),l.length>0){var f;let t=(f=e.side)==null?`buy`:f;for(let n of l)if(t===`buy`?n.price<e.price:n.price>e.price){var p;u.stopLossPrice=(p=o==null?u.stopLossPrice:o)==null?n.price:p,u._slOrderLabel=n.label}else{var m;u.takeProfitPrice=(m=s==null?u.takeProfitPrice:s)==null?n.price:m,u._tpOrderLabel=n.label}}return u});r.save(),r.scale(n,n),r.save(),r.beginPath(),r.rect(0,0,s,c),r.clip();let p=e=>e.type===`position`&&!!e.entryPriceEditable,m=Ne(r,this.selectedTradeLabel===null?this.tradeDisplayFilter===`none`?[]:this.tradeDisplayFilter===`positions`?f.filter(e=>e.type===`position`&&!p(e)):this.tradeDisplayFilter===`orders`?f.filter(e=>e.type===`pending`||p(e)):f:f.filter(e=>e.label===this.selectedTradeLabel),this.scaleManager,l,a,s,c,this.dataStore.getPricePrecision(),this.hoveredTradeLabel,(e=(t=this.tradeDragHandler)==null?void 0:t.dragLabel)==null?null:e,this.tradeDragNewPrice,this.selectedTradeLabel,new Set(this.pendingLevelDrags.keys()),this.positionRenderStyle);r.restore(),r.restore(),this.tradeLevelHitAreas=m.hitAreas,this.tradeLevelEditAreas=m.editAreas,this.tradeHoverAreas=m.hoverAreas,this.tradeLevelDragAreas=m.dragAreas,this.tradeLevelConfirmAreas=m.confirmAreas,this.tradeAddBracketAreas=m.addBracketAreas}_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}storePendingChange(e,t,n){var r,i,a;if(e.bracketType){var o,s,c,l,u;let n=this.levels.find(t=>t.label===e.label),r=(o=n==null?void 0:n.side)==null?`buy`:o,i=this._effectiveEntryPrice(e.label,(s=n==null?void 0:n.price)==null?t:s),a=(n==null?void 0:n.entryPriceEditable)===!0,d=(n==null||(c=n.data)==null?void 0:c._isDraft)===!0,f=this.dataStore.all,p=a||d||(l=(u=f[f.length-1])==null?void 0:u.close)==null?0:l;if(!xo.isBracketPriceValid(e.newPrice,e.bracketType,i,r,p)){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 d,f;let n=this.dataStore.all,r=(d=(f=n[n.length-1])==null?void 0:f.close)==null?0:d;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}}}let p=(r=e.bracketType)==null?`main`:r,m=this._isBracketNew;this._isBracketNew=!1;let h=this.levels.find(t=>t.label===e.label);if((h==null?void 0:h.orderType)===`market`&&(h==null||(i=h.data)==null?void 0:i._isDraft)===!0){p!==`main`&&(this.updateDraftOrderBracket(p===`stopLoss`?`sl`:`tp`,e.newPrice),this.emitter.emit(`tradeLevelDrag`,{label:e.label,newPrice:e.newPrice,data:h==null?void 0:h.data,bracketType:p,isFullscreen:this.isFullscreen})),this.tradeDragNewPrice=null,this.renderTradeLayer();return}let g=((a=this.pendingLevelDrags.get(e.label))==null?[]:a).filter(e=>e.field!==p);g.push({field:p,newPrice:e.newPrice,oldPrice:t,isNew:m,bracketOrderLabel:n}),this.pendingLevelDrags.set(e.label,g),this.tradeDragNewPrice=null,this.renderTradeLayer()}createDraftOrder(e,t,n){var r;if(this.draftOrderLabel)return;let i=`__draft_${Date.now()}`,a={type:`pending`,label:i,side:e,price:t,orderType:n,data:{_isDraft:!0}};this.levels=[...this.levels,a],this.draftOrderLabel=i,this.selectedTradeLabel=i,this.pendingLevelDrags.set(i,[{field:`main`,newPrice:t,oldPrice:t}]);let{priceH:o}=this.getChartLayout(),s=this.scaleManager.yToPixel(t,this.getScaledPriceRange(this.viewport),o);this.crosshair=null,(r=this.draftOrderQtyInput)==null||r.show(s,this._minLots,this.theme,o),this.renderTradeLayer()}removeDraftOrder(){var e;this.draftOrderLabel&&(this.levels=this.levels.filter(e=>e.label!==this.draftOrderLabel),this.pendingLevelDrags.delete(this.draftOrderLabel),this.selectedTradeLabel=null,this.draftOrderLabel=null,(e=this.draftOrderQtyInput)==null||e.hide(),this.renderTradeLayer())}applyPendingChanges(e){let t=this.pendingLevelDrags.get(e);if(!t)return;let n=this.levels.find(t=>t.label===e);if(n){if(e===this.draftOrderLabel){var r,i,a,o;let s=t.find(e=>e.field===`main`),c=t.find(e=>e.field===`stopLoss`&&e.isNew),l=t.find(e=>e.field===`takeProfit`&&e.isNew),u=n;(r=this._onOrderSubmit)==null||r.call(this,{price:(i=s==null?void 0:s.newPrice)==null?u.price:i,lots:(a=(o=this.draftOrderQtyInput)==null?void 0:o.getValue())==null?this._minLots:a,side:u.side,orderType:u.orderType,...c?{stopLoss:c.newPrice}:{},...l?{takeProfit:l.newPrice}:{}}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:`draft`,isFullscreen:this.isFullscreen}),this.removeDraftOrder();return}this.emitter.emit(`tradeLevelEdit`,{label:e,type:n.type,data:n.data,isFullscreen:this.isFullscreen,changes:t.map(e=>{let t=n.data,r=n.data;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 o;return o=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:o,newPrice:e.newPrice,data:r,bracketOrderLabel:e.bracketOrderLabel}})}),this.emitter.emit(`tradeLevelConfirmed`,{label:e,type:n.type,isFullscreen:this.isFullscreen}),this.pendingLevelDrags.delete(e),this.selectedTradeLabel=null,this.renderTradeLayer()}}revertPendingChanges(e){var t;if(e&&e===this.draftOrderLabel){this.removeDraftOrder();return}!e&&this.draftOrderLabel&&this.removeDraftOrder();let n=e?this.pendingLevelDrags.has(e)?[[e,(t=this.pendingLevelDrags.get(e))==null?[]:t]]:[]:[...this.pendingLevelDrags.entries()];for(let[e]of n)this.pendingLevelDrags.delete(e);this.selectedTradeLabel=null,this.renderTradeLayer()}render(){var e,t;let{ctx:n,canvas:r,theme:i,viewport:a}=this,o=window.devicePixelRatio||1,s=r.width,c=r.height,l=s/o-this.priceAxisWidth,u=this.activeIndicators.filter(e=>e.indicator.pane===`sub`),d=u.map(e=>e.indicator).reduce((e,t)=>e+this.paneH(t)+Z,0),f=c/o-this.timeAxisHeight-d;n.clearRect(0,0,s,c),n.fillStyle=i.background,n.fillRect(0,0,s,c);let p=this.dataStore.getVisible(a);if(p.length===0)return;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*Cs,endIndex:this.viewport.endIndex+t*Cs,candleWidth:this._targetViewport.candleWidth,candleGap:this._targetViewport.candleGap},this.scheduleRender())}if(this.priceScaleFactor!==1||this.pricePanOffset!==0){if(!this._lockedAutoFitBase){var m;this._lockedAutoFitBase=(m=this._displayedPriceRange)==null?this.dataStore.getPriceRange(a):m}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{this._lockedAutoFitBase=null;let e=this.getScaledPriceRange(a);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*Ss,max:this._displayedPriceRange.max+r*Ss},this.scheduleRender())}}let h=this._displayedPriceRange,g=this.showVolume?this.dataStore.getVolumeRange(a):null,_=r;switch(_._priceRange=h,_._chartWidth=l,n.save(),n.scale(o,o),n.save(),n.beginPath(),n.rect(0,0,l,f),n.clip(),se(n,h,this.scaleManager,i,l,f),this.series){case`candlestick`:E(n,p,a,h,this.scaleManager,i,l,f);break;case`hollow`:D(n,p,a,h,this.scaleManager,i,l,f);break;case`line`:A(n,p,a,h,this.scaleManager,i,l,f,!1);break;case`area`:A(n,p,a,h,this.scaleManager,i,l,f,!0);break;case`ohlc`:j(n,p,a,h,this.scaleManager,i,l,f);break;case`heikinashi`:N(n,p,a,h,this.scaleManager,i,l,f);break;case`volumecandles`:te(n,p,a,h,this.scaleManager,i,l,f);break;case`linemarkers`:P(n,p,a,h,this.scaleManager,i,l,f);break;case`step`:ne(n,p,a,h,this.scaleManager,i,l,f);break;case`hlcarea`:I(n,p,a,h,this.scaleManager,i,l,f);break;case`baseline`:ie(n,p,a,h,this.scaleManager,i,l,f);break;case`columns`:ae(n,p,a,h,this.scaleManager,i,l,f);break;case`highlow`:oe(n,p,a,h,this.scaleManager,i,l,f);break}n.save(),n.beginPath(),n.rect(0,0,l,f),n.clip();for(let e of this.indicators.filter(e=>!e.pane||e.pane===`main`)){let t=this.indicatorResults.get(e.name);if(!t)continue;let r=t.slice(Math.floor(a.startIndex),Math.ceil(a.endIndex)+1);e.render(n,r,this.scaleManager,a,f)}n.restore(),n.restore(),et(n,h,this.scaleManager,i,l,f,this.priceAxisWidth,void 0,this.dataStore.getPricePrecision(),this.uiConfig.priceAxis);let v=this.dataStore.all[this.dataStore.all.length-1];if(v){let e=this.dataStore.getPricePrecision(),t=(t,r,i)=>{let a=this.scaleManager.yToPixel(t,h,f);n.save(),n.strokeStyle=r,n.lineWidth=1,n.setLineDash([3,3]),n.beginPath(),n.moveTo(0,a),n.lineTo(l,a),n.stroke(),n.setLineDash([]);let o=i+t.toFixed(e),s=n.measureText(o).width;n.fillStyle=r,n.fillRect(l,a-16/2,s+12,16),n.fillStyle=`#ffffff`,n.font=`10px 'Inter', system-ui, sans-serif`,n.textAlign=`left`,n.fillText(o,l+4,a+4),n.restore()};if(this.liveBidAsk){let{bid:e,ask:n}=this.liveBidAsk;this.showBidAskLines?(t(e,i.candle.down,``),t(n,i.candle.up,``)):t(this.tickClosePriceSource===`ask`?n:e,this.tickClosePriceSource===`ask`?i.candle.up:i.candle.down,``)}else{let e=v.close>=v.open;t(v.close,e?i.candle.up:i.candle.down,``)}}let y=f;for(let e of u){let t=e.indicator,r=this.paneH(t);if(n.fillStyle=i.axisBorder,n.fillRect(0,y,l+this.priceAxisWidth,Z),y+=Z,n.save(),n.beginPath(),n.rect(0,y,l+this.priceAxisWidth,r),n.clip(),n.translate(0,y),n.fillStyle=i.background,n.fillRect(0,0,l+this.priceAxisWidth,r),e.visible&&(()=>{let t=e.currentParams.timeframe;return!t||t===`Chart`||t===this.timeframe})()){let e=this.indicatorResults.get(t.name);if(e){var b,x;let o=e.slice(Math.floor(a.startIndex),Math.ceil(a.endIndex)+1),s=(b=t.getValueRange)==null?void 0:b.call(t,o),c=(x=this.subPaneScaleFactors.get(t.name))==null?1:x,u=s?Ds(s,c):void 0;t.render(n,o,this.scaleManager,a,r,u),u&&et(n,u,this.scaleManager,i,l,r,this.priceAxisWidth,3,Os(u),this.uiConfig.priceAxis)}}n.restore(),y+=r}if(this.showVolume&&g&&g.max>0){let e=f*vs;M(n,p,a,g.max,this.scaleManager,i,l,e,f-e)}{var S;let e=this.candleCountdownTimeframes===`all`?!0:((S=this.candleCountdownTimeframes)==null?[`1m`,`5m`,`15m`,`30m`,`1h`,`4h`]:S).includes(this.timeframe),t=this.showCandleCountdown&&e&&p.length>0&&a.endIndex>=this.dataStore.length-1,r=t?this.dataStore.length-1:void 0;if(this._debug&&console.log(`[countdown] showCandleCountdown:`,this.showCandleCountdown,`| tf:`,this.timeframe,`| allowed:`,e,`| bars:`,p.length,`| endIndex:`,a.endIndex,`| dataLen:`,this.dataStore.length,`| atLiveEdge:`,a.endIndex>=this.dataStore.length-1),Qe(n,p,a,this.scaleManager,i,l,y,ws()?3:void 0,this.uiConfig.timeAxis,this.timeframe,r),t){let e=this.dataStore.all[this.dataStore.length-1],t=this.timeframeToMs(this.timeframe);$e(n,e.time,t,this.dataStore.length-1,a,this.scaleManager,i,l,y,this.uiConfig.timeAxis)}}if(this.crosshair&&ce(n,this.crosshair,h,a,this.scaleManager,i,l,f,this.priceAxisWidth,y,this.timeframe,this.dataStore.getPricePrecision(),this.uiConfig.crosshair),this.logoImage){let e=f-20-40/2;n.save(),n.globalAlpha=.6,n.beginPath(),n.rect(0,0,l,f),n.clip(),n.beginPath(),n.arc(40,e,40/2,0,Math.PI*2),n.closePath(),n.clip(),n.drawImage(this.logoImage,40-40/2,e-40/2,40,40),n.restore()}n.restore();let C=this.crosshair?(e=this.dataStore.all[this.crosshair.barIndex])==null?null:e:(t=this.dataStore.all[this.dataStore.length-1])==null?null:t;if(this.renderSymbolInfoOHLC(C),this.drawingManager.render(this.drawCtx,this.scaleManager,a,h,l,f,this.dataStore.getPricePrecision()),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`)}this.updateSubPaneOverlayPositions()}recomputeIndicators(){for(let e of this.indicators)this.indicatorResults.set(e.name,e.compute(this.dataStore.all))}onResize(){let e=window.devicePixelRatio||1,t=this.canvasWrap.getBoundingClientRect();this._cachedWrapRect=t,this._cachedDrawRect=this.drawCanvas.getBoundingClientRect();for(let n of[this.canvas,this.tradeCanvas,this.drawCanvas])n.width=t.width*e,n.height=t.height*e;let n=this.wrapper.offsetWidth,r=n>0&&n<this.uiConfig.drawingToolbar.mobileBreakpoint;if(r!==this._mobileLayout){var i,a;if(this._mobileLayout=r,(i=this.leftBar)==null||i.setMobileMode(r),(a=this.topBar)==null||a.setMobileLayout(r),this.siEl&&(this.siEl.style.flexDirection=r?`column`:`row`,this.siEl.style.alignItems=r?`flex-start`:`center`,this.siEl.style.gap=r?`2px`:`8px`),r){var o;this.leftBarVisible=!1,(o=this.topBar)==null||o.setDrawingsBtnActive(!1)}else{var s,c;this.leftBarVisible=!0,(s=this.leftBar)==null||s.setVisible(!0),(c=this.topBar)==null||c.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.name))==null?e.paneHeight:n)==null?ys:t}getChartLayout(){var e;let t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).map(e=>e.indicator).reduce((e,t)=>e+this.paneH(t)+Z,0),n=(e=this._cachedWrapRect)==null?this.canvasWrap.getBoundingClientRect():e;return{chartW:n.width-this.priceAxisWidth,priceH:n.height-this.timeAxisHeight-t}}updateSubPaneOverlayPositions(){if(this.subPaneOverlays.size===0)return;let e=this.getSeparatorPositions();for(let t of e){let e=this.subPaneOverlays.get(t.indicatorName);e&&(e.el.style.top=`${t.y+Z+6}px`)}}getSeparatorPositions(){let{priceH:e}=this.getChartLayout(),t=this.activeIndicators.filter(e=>e.indicator.pane===`sub`).map(e=>e.indicator),n=[],r=e;for(let e of t)n.push({y:r,indicatorName:e.name}),r+=this.paneH(e)+Z;return n}getScaledPriceRange(e){let t=this.dataStore.getPriceRange(e),n=t.min,r=t.max;for(let t of this.indicators.filter(e=>!e.pane||e.pane===`main`)){let a=this.indicatorResults.get(t.name);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{barIndex:this.scaleManager.pixelToBarIndex(i,this.viewport,o),price:this.scaleManager.pixelToPrice(a,c,s)}}_handleTradeLevelClose(e){if(e.bracketType){var t,n;let r=this.levels.find(t=>t.label===e.label);if((r==null?void 0:r.orderType)===`market`&&(r==null||(t=r.data)==null?void 0:t._isDraft)===!0){let t=e.bracketType===`stopLoss`?`sl`:`tp`;this.updateDraftOrderBracket(t,null),this.emitter.emit(`tradeLevelEdit`,{label:e.label,data:r==null?void 0:r.data,type:`pending`,isFullscreen:this.isFullscreen,changes:[{field:e.bracketType===`stopLoss`?`REMOVE_SL`:`REMOVE_TP`,newPrice:0,data:e.data}]});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;if(this.revertPendingChanges(e.label),this.pendingLevelDrags.delete(e.label),r)return;let i=this.levels.find(t=>t.label===e.label),a=(i==null?void 0:i.type)===`position`&&!!i.entryPriceEditable,o=e.type===`position`&&!a?`CLOSED`:`CANCELLED`;this.emitter.emit(`tradeLevelClose`,{label:e.label,type:e.type,action:o,data:e.data,isFullscreen:this.isFullscreen})}_activateMobileCrosshair(e,t){var n,r,i;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)));this.crosshair={x:e,y:t,barIndex:f,price:d,bar:(i=this.dataStore.all[f])==null?null:i},this.tradeButton&&(this.tradeButton.setY(t),this.tradeButton.show()),this.scheduleRender()}_startTradeDragFromHit(e,t,n){if(this.tradeDragHandler)if(e.isBracket){var r,i,a,o;this._pendingBracketOrderLabel=(r=e.bracketOrderLabel)==null?null:r,this._isBracketNew=!1;let n=t.entryPriceEditable===!0,s=((i=t.data)==null?void 0:i._isDraft)===!0,c=this.dataStore.all,l=n||s||(a=(o=c[c.length-1])==null?void 0:o.close)==null?0:a;this.tradeDragHandler.startBracketDrag(t,e.bracketType,e.price,l,this._effectiveEntryPrice(t.label,t.price))}else if(this._pendingBracketOrderLabel=null,t.entryPriceEditable===!0){var s,c;this.selectedTradeLabel=e.label;let r=t,i=this.dataStore.all,a=(s=(c=i[i.length-1])==null?void 0:c.close)==null?0:s;this.tradeDragHandler.startDrag(t,n,e.price,r.stopLossPrice,r.takeProfitPrice,r.side,a,r.orderType)}else{var l,u;let r=t,i=this.dataStore.all,a=(l=(u=i[i.length-1])==null?void 0:u.close)==null?0:l;this.tradeDragHandler.startDrag(t,n,e.price,void 0,void 0,r.side,a,r.orderType)}}_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=u||d||(r=(i=f[f.length-1])==null?void 0:i.close)==null?0:r;d||this.emitter.emit(`tradeLevelEditOpen`,{label:a.label,type:a.type,data:a.data,price:a.price,side:a.side,stopLossPrice:a.stopLossPrice,takeProfitPrice:a.takeProfitPrice,isFullscreen:this.isFullscreen}),this._pendingBracketOrderLabel=null,this._isBracketNew=!0,this.tradeDragHandler.startBracketDrag(a,e.bracketType,l,p,this._effectiveEntryPrice(a.label,a.price))}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)return;let n=this.timeframeToInterval(this.getBaseInterval());this.dataLoader({start:new Date(e),end:new Date(t),interval:n}).then(e=>{let t=this.maybeAggregate(e);if(t.length===0)return;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.recomputeIndicators(),this.scheduleRender())}).catch(()=>{})}correctCompletedBar(e,t){if(!this.dataLoader)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}).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(()=>{})}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.scrollAnimId!==null&&(cancelAnimationFrame(this.scrollAnimId),this.scrollAnimId=null);let e=this.viewport.endIndex-this.viewport.startIndex,t=this.dataStore.length+Es,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)}resetPriceAxis(){this.priceScaleFactor=1,this.pricePanOffset=0,this._lockedAutoFitBase=null,this.scheduleRender()}resetTimeAxis(){let e=this.dataStore.length;if(e===0)return;let t=Math.max(0,e-Ts(this.mobileBarDivisor,this.explicitMobileDivisor,this.defaultVisibleBars,this.defaultMobileVisibleBars)+Es);this.viewport={...this.viewport,startIndex:t,endIndex:e+Es},this._targetViewport={...this.viewport},this.scheduleRender()}resetView(){this.resetPriceAxis(),this.resetTimeAxis()}applyResetViewBtnStyles(){this.resetViewBtn&&(this.resetViewBtn.innerHTML=gt(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.75`,transition:`opacity 0.2s ease`}))}applyScrollToEndBtnStyles(){this.scrollToEndBtn&&(this.scrollToEndBtn.innerHTML=ht(this.theme.axisText,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: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`}))}};ds=ks,ds.DRAW_GESTURE_THRESHOLD=4;var Q=null,As=new Map,js=0;function Ms(){return`dr_${Date.now()}_${js++}`}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 Ns(e={}){Q==null||Q.destroy();let t=document.getElementById(`chart`),{enableTrading:n,...r}=e;Q=new ks({theme:`dark`,...r,container:t,dataLoader:e=>{let t=Ms(),n=Q==null?void 0:Q.getState();return new Promise((r,i)=>{var a;As.set(t,{resolve:r,reject:i}),$(`dataRequest`,{requestId:t,timeframe:(a=n==null?void 0:n.timeframe)==null?``:a,interval:e.interval,start:e.start.getTime(),end:e.end.getTime()})})},...n?{onOrderSubmit:e=>{$(`placeOrder`,{price:e.price,side:e.side,orderType:`limit`})}}:{}}),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(`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(`tradeLevelEdit`,e=>$(`tradeLevelEdit`,e)),Q.on(`tradeLevelConfirmed`,e=>$(`tradeLevelConfirmed`,e)),Q.on(`tradeLevelEditOpen`,e=>$(`tradeLevelEditOpen`,e)),$(`ready`,{})}function Ps(e){if(e.type===`init`){Ns(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`setSeries`:Q.setSeries(e.payload.series);break;case`setTimeframe`:{let t=Q.getState();Q.setState({...t,timeframe:e.payload.timeframe});break}case`setSymbol`:Q.setSymbol(e.payload.symbol);break;case`addIndicator`:Q.addIndicatorByName(e.payload.shortName);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=As.get(e.payload.requestId);t&&(As.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}}document.addEventListener(`DOMContentLoaded`,()=>{Ns(),window.ChartBridge={send(e){let t;try{t=JSON.parse(e)}catch(t){$(`error`,{message:`Invalid JSON: ${e}`});return}try{Ps(t)}catch(e){$(`error`,{message:String(e)})}}}})})();</script>
|
|
236
236
|
</body>
|
|
237
237
|
</html>
|