@liberfi.io/ui-tradingview 0.1.227 → 0.1.228
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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var react=require('react'),jotai=require('jotai'),utils=require('jotai/utils'),lodashEs=require('lodash-es'),jsxRuntime=require('react/jsx-runtime');var te=(t=>(t.TradingView="TradingView",t.Original="Original",t))(te||{}),We=(t=>(t.Price="price",t.MarketCap="market_cap",t))(We||{}),Ne=(o=>(o.USD="USD",o.SOL="SOL",o.ETH="ETH",o.TRX="TRX",o.BNB="BNB",o))(Ne||{}),re=(l=>(l[l.Bars=0]="Bars",l[l.Candles=1]="Candles",l[l.Line=2]="Line",l[l.Area=3]="Area",l[l.HeikenAshi=8]="HeikenAshi",l[l.HollowCandles=9]="HollowCandles",l[l.Baseline=10]="Baseline",l[l.HiLo=12]="HiLo",l[l.Column=13]="Column",l[l.LineWithMarkers=14]="LineWithMarkers",l[l.Stepline=15]="Stepline",l[l.HLCArea=16]="HLCArea",l[l.VolCandle=19]="VolCandle",l[l.Renko=4]="Renko",l[l.Kagi=5]="Kagi",l[l.PointAndFigure=6]="PointAndFigure",l[l.LineBreak=7]="LineBreak",l))(re||{}),He=(t=>(t.Light="light",t.Dark="dark",t))(He||{}),ae=(m=>(m.HeaderWidget="header_widget",m.HeaderCandleStyleMenu="header_candle_style_menu",m.HeaderFullscreenButton="header_fullscreen_button",m.MultiCharts="multi_charts",m.CreateVolumeIndicatorByDefault="create_volume_indicator_by_default",m.VolumeForceOverlay="volume_force_overlay",m.HideDrawingToolsByDefault="hide_drawing_tools_by_default",m.LegendSeriesTitle="legend_series_title",m.LegendVolume="legend_volume",m.TimeframesToolbar="timeframes_toolbar",m.SaveDrawingToServer="save_drawing_to_server",m))(ae||{}),R=(g=>(g.Layout1A="1A",g.Layout2A="2A",g.Layout2B="2B",g.Layout3A="3A",g.Layout3B="3B",g.Layout3C="3C",g.Layout3D="3D",g.Layout3E="3E",g.Layout3F="3F",g.Layout4A="4A",g.Layout4B="4B",g.Layout4C="4C",g.Layout4D="4D",g.Layout4E="4E",g.Layout4F="4F",g.Layout5A="5A",g.Layout5B="5B",g.Layout5C="5C",g.Layout5D="5D",g.Layout6A="6A",g.Layout6B="6B",g.Layout6C="6C",g.Layout7A="7A",g.Layout8A="8A",g.Layout8B="8B",g.Layout8C="8C",g))(R||{}),Ue=(r=>(r[r.None=0]="None",r[r.ResetData=1]="ResetData",r[r.ResetChart=2]="ResetChart",r))(Ue||{});var ye=["header_widget","header_candle_style_menu","header_fullscreen_button","multi_charts","volume_force_overlay","legend_series_title","timeframes_toolbar","save_drawing_to_server"],T=["1s","30s","1m","1h","4h","1d"],S=["1s","15s","30s","1m","5m","15m","1h","4h","12h","1d"],pe=["1A","2A","2B","3A","3B","3C","3D","3E","3F","4A","4B","4C","4D","4E","4F","5A","5B","5C","5D","6A","6B","6C","7A","8A","8B","8C"],ze=["click","keydown","mousedown","mouseup","contextmenu"],C={decrease:"#F04866",increase:"#1DB954",chartBg:"#1A1A1A",card:"#242424"},$e={card:"#242424"};var I=utils.atomFamily(a=>jotai.atom(true)),M=utils.atomFamily(a=>jotai.atom(false)),f=utils.atomFamily(a=>jotai.atom(0)),x=utils.atomFamily(a=>jotai.atom([...T])),y=utils.atomFamily(a=>jotai.atom([])),w=utils.atomFamily(a=>jotai.atom(false)),_=utils.atomFamily(a=>jotai.atom("1A")),A=utils.atomFamily(a=>jotai.atom("TradingView")),E=utils.atomFamily(a=>jotai.atom("dark")),ie=utils.atomFamily(a=>jotai.atom("en")),oe=utils.atomFamily(a=>jotai.atom("Etc/UTC")),se=utils.atomFamily(a=>jotai.atom("")),D=utils.atomFamily(a=>jotai.atom("kline")),ne=utils.atomFamily(a=>jotai.atom(false)),le=utils.atomFamily(a=>jotai.atom(null)),P=utils.atomFamily(a=>jotai.atom([])),F=utils.atomFamily(a=>jotai.atom([])),O=utils.atomFamily(a=>jotai.atom(false)),W=utils.atomFamily(a=>jotai.atom(e=>{let t=e(_(a)),r=e(A(a)),i=e(f(a)),o=e(x(a)),s=e(w(a)),n=e(y(a));return {layout:t,chartType:r,selectedIndex:i,pinnedResolutions:o,showDrawingToolbar:s,areaContents:n}}),lodashEs.isEqual);var V=class{settings;chartManager;chartIndex;store;prefix;pendingTickerSymbol=null;pendingResolution=null;constructor(e,t,r,i,o,s){this.settings=e,this.chartManager=t,this.chartIndex=r,this.store=i,this.prefix=o;let h={...{resolution:"1m",chartStyle:1,symbol:"",tickerSymbol:"",rightOffset:10,barSpacing:6,dataReady:false},...s};this.patchArea(h);}get state(){return this.store.get(y(this.prefix))[this.chartIndex]??{resolution:"1m",chartStyle:1,symbol:"",tickerSymbol:"",rightOffset:10,barSpacing:6,dataReady:false}}patchArea(e){let t=[...this.store.get(y(this.prefix))],r=t[this.chartIndex]??{resolution:"1m",chartStyle:1,symbol:"",tickerSymbol:"",rightOffset:10,barSpacing:6,dataReady:false};t[this.chartIndex]={...r,...e},this.store.set(y(this.prefix),t);}setState(e,t){t!=null&&this.patchArea({[e]:t});}get tickerSymbol(){return this.state.tickerSymbol}get symbol(){return this.state.symbol}get resolution(){return this.state.resolution}get chartStyle(){return this.state.chartStyle}get rightOffset(){return this.state.rightOffset}get barSpacing(){return this.state.barSpacing}get dataReady(){return this.state.dataReady}get internalChartWidget(){return this.chartManager.internalWidget?.chartByIndex(this.chartIndex)}setChartStyle(e){this.setState("chartStyle",e),this.internalChartWidget?.setChartStyle(e);}async setSymbol(e){if(this.state.tickerSymbol!==e){this.setState("tickerSymbol",e),this.setState("dataReady",false),this.pendingTickerSymbol=e;try{let t=[this.internalChartWidget?.handleSymbolChange(e,this.tickerSymbol),this.chartManager.symbolResolver?.resolveSymbolInfo(e).then(r=>{r&&this.setState("symbol",r.name);})];for(let r of await Promise.allSettled(t))if(r.status==="rejected")throw r.reason}catch(t){console.error(t);}finally{this.pendingTickerSymbol===e&&(this.pendingTickerSymbol=null);}this.tickerSymbol===e&&this.setState("dataReady",true);}}async setResolution(e){if(this.resolution!==e){this.setState("resolution",e),this.setState("dataReady",false),this.pendingResolution=e;try{await this.internalChartWidget?.handleResolutionChange(e,this.resolution);}finally{this.pendingResolution===e&&(this.pendingResolution=null);}}}toJSON(){return {...this.state}}widgetReady(){this.internalChartWidget?.dataReady()?.then(()=>this.handleChartReady())?.catch(()=>{});}get active(){return this.chartIndex<this.chartManager.chartCount}get selected(){return this.chartManager.selectedIndex===this.chartIndex}get symbolInfo(){return this.chartManager.symbolResolver?.getSymbolInfo(this.tickerSymbol)??null}destroy(){}async handleChartReady(){this.internalChartWidget&&(this.setState("dataReady",true),this.selected&&this.internalChartWidget.setBarSpacing(this.barSpacing));}};var N=class{prefix;settings;store;initialized=false;focused=false;reloadId=0;internalWidget=null;datafeed=null;symbolResolver=null;unsubAutoSave=null;constructor(e,t,r){this.prefix=e,this.store=t,this.settings=r;}get loading(){return this.store.get(I(this.prefix))}get fullscreen(){return this.store.get(M(this.prefix))}set fullscreen(e){this.store.set(M(this.prefix),e),e?document.body.classList.add("fullScreen"):document.body.classList.remove("fullScreen");}get selectedIndex(){return this.store.get(f(this.prefix))}set selectedIndex(e){this.store.set(f(this.prefix),e);}get pinnedResolutions(){return this.store.get(x(this.prefix))}set pinnedResolutions(e){this.store.set(x(this.prefix),e);}get showDrawingToolbar(){return this.store.get(w(this.prefix))}get chartCount(){return parseInt(this.settings.layout,10)||1}get areas(){let e=this.store.get(y(this.prefix));return this._areaManagers.slice(0,e.length)}_areaManagers=[];areaByIndex(e){return this.initialized&&this.updateChartContents(),this._areaManagers[e]??null}get activeArea(){return this.areaByIndex(this.selectedIndex)}async init(){if(this.initialized)return;let e=this.settings.saveLoadAdapter.getSettings();if(e?.selectedIndex!=null&&(this.selectedIndex=e.selectedIndex),e?.pinnedResolutions){let r=e.pinnedResolutions;r.length===T.length&&r.every(i=>T.includes(i))?this.pinnedResolutions=[...T]:this.pinnedResolutions=r;}if(e?.areaContents&&e.areaContents.forEach((r,i)=>{let o=new V(this.settings,this,i,this.store,this.prefix,r);this._areaManagers[i]=o;}),e?.showDrawingToolbar!=null&&this.store.set(w(this.prefix),e.showDrawingToolbar),this.settings.updateValue("layout",e?.layout),this.settings.updateValue("chartType",e?.chartType),this.settings.enableMultiCharts||this.settings.updateValue("layout","1A"),this.settings.enableHideDrawingToolsByDefault&&this.store.set(w(this.prefix),false),this.updateChartContents(),this.settings.tickerSymbol&&this.activeArea)try{await this.activeArea.setSymbol(this.settings.tickerSymbol);}catch(r){console.warn("ChartManager init failed to set symbol",r);}this.initialized=true;let t=lodashEs.debounce(()=>{let r=this.store.get(W(this.prefix));this.settings.saveLoadAdapter.saveSettings(r).catch(console.error);},1e3);this.unsubAutoSave=this.store.sub(W(this.prefix),t);}destroy(){this.unsubAutoSave?.(),this._areaManagers.forEach(e=>e.destroy()),this._areaManagers=[];}setLoading(e){this.store.set(I(this.prefix),e);}setLocale(e){this.settings.updateValue("locale",e);}setTimezone(e){this.settings.updateValue("timezone",e);}setFocused(e){this.focused=e;}setShowDrawingToolbar(e){this.store.set(w(this.prefix),e);}setInternalWidget(e){this.internalWidget=e,this.store.set(O(this.prefix),false);}onInternalWidgetReady(){this.store.set(O(this.prefix),true),this.areas.forEach((e,t)=>{t<this.chartCount&&e.widgetReady();});}setChartType(e){this.settings.updateValue("chartType",e);}setTheme(e){this.settings.theme!==e&&(this.settings.updateValue("theme",e),this.internalWidget?.onThemeChange?.(e,this.settings.reverseColor));}setReverseColor(e){this.settings.reverseColor!==e&&(this.settings.updateValue("reverseColor",e),this.internalWidget?.onThemeChange?.(this.settings.theme,e));}setLayout(e){let t=this.settings.enableMultiCharts?e:"1A";if(this.settings.layout!==t){this.settings.updateValue("layout",t),this.updateChartContents(),this.internalWidget?.onLayoutChange?.(t);let r=this.chartCount;setTimeout(()=>{if(this.store.get(O(this.prefix)))for(let i=r;i<this.chartCount;i++)this.areaByIndex(i)?.widgetReady();});}}reloadChart(){this.reloadId+=1;}updateChartContents(){if(this.chartCount>this._areaManagers.length)for(let e=this._areaManagers.length;e<this.chartCount;e++){let t=this._areaManagers[this.selectedIndex],r=t?.toJSON(),i=new V(this.settings,this,e,this.store,this.prefix,r);this._areaManagers[e]=i,this.selectedIndex!==e&&!t&&i.setSymbol(this.settings.tickerSymbol).catch(()=>{});}this.selectedIndex>=this.chartCount&&(this.selectedIndex=this.chartCount-1);}get settingsData(){return this.store.get(W(this.prefix))}getAllCharts(){return this.updateChartContents(),this._areaManagers.slice(0,this.chartCount)}};var H=class{storageId;constructor(e){this.storageId=e;}get settingsKey(){return `${this.storageId}.TvChart.Settings`}get shapesKey(){return `${this.storageId}.TvChart.Shapes`}getSettings(){let e=this.getLocalSettingsData(),t=this.getChartStoreData();return {layout:t?.layout,selectedIndex:t?.currentAreaIndex,chartType:t?.chartType,pinnedResolutions:t?.pinnedResolutions,areaContents:t?.areas?.map(i=>({resolution:i.resolution||i.period||"1m",chartStyle:i.chartStyle,symbol:i.symbol,tickerSymbol:i.tickerSymbol,rightOffset:i.rightOffset,barSpacing:i.barSpacing})),showDrawingToolbar:t?.drawing?.toolbarSwitch,drawing:e?.drawing?{...e.drawing,defaultStates:lodashEs.omit(e,["drawing","DrawingToolGroupLastUsedTool","riskRewardAvailableChanged","riskRewardRiskSizeChanged","drawingShapeTemplate"]),lastUsedTools:e.DrawingToolGroupLastUsedTool,riskRewardAvailableChanged:e.riskRewardAvailableChanged,riskRewardRiskSizeChanged:e.riskRewardRiskSizeChanged,drawingShapeTemplate:e.drawingShapeTemplate}:void 0}}getChartStoreData(){return this.getLocalData(this.storageId)}setChartStoreData(e){this.setLocalData(this.storageId,e);}async saveSettings(e){let t=this.getChartStoreData(),r={...t,layout:e.layout,currentAreaIndex:e.selectedIndex,chartType:e.chartType,pinnedResolutions:e.pinnedResolutions,areas:e.areaContents?.map((i,o)=>({...t?.areas?.[o],...i})),drawing:{...t?.drawing,toolbarSwitch:e.showDrawingToolbar}};this.setChartStoreData(r);}async getShapes(e){let t=this.getLocalShapesData();return !t||!t[e]?[]:Object.values(t[e])}async saveShapes(e,t){let r=this.getLocalShapesData()||{};r[e]={...r[e],...t},Object.keys(r[e]).forEach(i=>{r[e][i]||delete r[e][i];}),this.setLocalShapesData(r);}getLocalData(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}setLocalData(e,t){localStorage.setItem(e,JSON.stringify(t));}getLocalSettingsData(){return this.getLocalData(this.settingsKey)}getLocalShapesData(){return this.getLocalData(this.shapesKey)}setLocalShapesData(e){this.setLocalData(this.shapesKey,e);}};function de(a){let[e,t,r,i]=a.split("/");return {address:t,chain:e,quote:r,priceType:i}}function vt(a){return !a.quote||!a.priceType?`${a.chain}/${a.address}`:`${a.chain}/${a.address}/${a.quote}/${a.priceType}`}function he(a){return `${a.chain}/${a.address}`}var Tt={dark:"Dark",light:"Light"};function B(a){return Tt[a.toLowerCase()]??"Dark"}var qe={"1s":"1S","5s":"5S","15s":"15S","30s":"30S","1m":"1","5m":"5","15m":"15","30m":"30","1h":"60","4h":"240","12h":"720","1d":"1D"};function v(a="1m"){return qe[a]??qe["1m"]}var St={"1S":"1s","5S":"5s","15S":"15s","30S":"30s",1:"1m",5:"5m",15:"15m",30:"30m",60:"1h",240:"4h",720:"12h","1D":"1d"};function U(a){return St[a]??"1s"}var xt={en:"en","zh-CN":"zh","zh-TW":"zh"};function wt(a){return xt[a]??a}var Je={"1A":"s","2A":"2h","2B":"2v","3A":"3s","3B":"3h","3C":"3v","3D":"2-1","3E":"1-2","3F":"3r","4A":"4","4B":"4h","4C":"4v","4D":"4s","4E":"1-3","4F":"2-2","5A":"1-4","5B":"5s","5C":"2-3","5D":"5h","6A":"6","6B":"6c","6C":"6h","7A":"7h","8A":"8","8B":"8c","8C":"8h"};function z(a){return Je[a]??"s"}var Lt=Object.fromEntries(Object.entries(Je).map(([a,e])=>[e,a]));function be(a){return Lt[a]??"1A"}var Rt={"1s":1e3,"5s":5e3,"15s":15e3,"30s":3e4,"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"12h":432e5,"1d":864e5};function ge(a){let e=Rt[a];if(!e)throw new Error(`Invalid interval: ${a}`);return e}function fe(a,e){let t=a.toString().length>10?a:1e3*a;return Math.floor(t/e)*e}var $=class{prefix;store;supportedResolutions=S.map(v);supportedLayouts=pe;supportedChartTypes=["TradingView"];chartNames={};priceFormatterFactory=null;saveLoadAdapter;constructor(e,t){this.prefix=e,this.store=t,this.saveLoadAdapter=new H(e),this.store.set(D(e),e);}get layout(){return this.store.get(_(this.prefix))}get chartType(){return this.store.get(A(this.prefix))}get theme(){return this.store.get(E(this.prefix))}get reverseColor(){return this.store.get(ne(this.prefix))}get locale(){return this.store.get(ie(this.prefix))}get timezone(){return this.store.get(oe(this.prefix))}get tickerSymbol(){return this.store.get(se(this.prefix))}get storageId(){return this.store.get(D(this.prefix))}get backgroundColor(){return this.store.get(le(this.prefix))}get enabledFeatures(){return this.store.get(P(this.prefix))}get disabledFeatures(){return this.store.get(F(this.prefix))}updateValue(e,t){if(t==null)return;let i={layout:()=>this.store.set(_(this.prefix),t),chartType:()=>this.store.set(A(this.prefix),t),theme:()=>this.store.set(E(this.prefix),t),reverseColor:()=>this.store.set(ne(this.prefix),t),locale:()=>this.store.set(ie(this.prefix),t),timezone:()=>this.store.set(oe(this.prefix),t),tickerSymbol:()=>this.store.set(se(this.prefix),t),storageId:()=>this.store.set(D(this.prefix),t),backgroundColor:()=>this.store.set(le(this.prefix),t),enabledFeatures:()=>this.store.set(P(this.prefix),t),disabledFeatures:()=>this.store.set(F(this.prefix),t)}[e];i&&i();}isFeatureEnabled(e){return !this.disabledFeatures.includes(e)&&this.enabledFeatures.includes(e)||ye.includes(e)}setFeature(e,t){this.resetFeature(e),t?this.store.set(P(this.prefix),[...this.enabledFeatures,e]):this.store.set(F(this.prefix),[...this.disabledFeatures,e]);}resetFeature(e){this.store.set(P(this.prefix),this.enabledFeatures.filter(t=>t!==e)),this.store.set(F(this.prefix),this.disabledFeatures.filter(t=>t!==e));}get enableMultiCharts(){return this.isFeatureEnabled("multi_charts")}get enableCreateVolumeIndicatorByDefault(){return this.isFeatureEnabled("create_volume_indicator_by_default")}get enableHideDrawingToolsByDefault(){return this.isFeatureEnabled("hide_drawing_tools_by_default")}get enableLegendSeriesTitle(){return this.isFeatureEnabled("legend_series_title")}get enableLegendVolume(){return this.isFeatureEnabled("legend_volume")}get enableTimeframesToolbar(){return this.isFeatureEnabled("timeframes_toolbar")}get enableVolumeForceOverlay(){return this.isFeatureEnabled("volume_force_overlay")}sub(e,t){let i={layout:_(this.prefix),chartType:A(this.prefix),theme:E(this.prefix)}[e];return i?this.store.sub(i,t):()=>{}}};var q=class{datafeed;cache=new Map;pendingRequests=new Map;constructor(e){this.datafeed=e;}async resolveSymbolInfo(e){return this.datafeed.resolveSymbol(e)}async resolveSymbolInfos(e){return e.filter(r=>!this.cache.has(r)&&!this.pendingRequests.has(r)).forEach(r=>{let i=this.resolveSymbolInfo(r);i.then(o=>{o&&this.cache.set(r,o);}).catch(()=>{}).finally(()=>this.pendingRequests.delete(r)),this.pendingRequests.set(r,i);}),await Promise.all(e.filter(r=>this.pendingRequests.has(r)).map(r=>this.pendingRequests.get(r))),e.map(r=>this.cache.get(r)??null).filter(r=>r!==null)}getSymbolInfo(e){return this.resolveSymbolInfo(e).catch(t=>{console.error("ChartSymbolResolver.getSymbolInfo",t);}),this.cache.get(e)??null}};var Ce=({initConfig:a,children:e})=>{let{chartManager:t,chartSettings:r}=d(),[,i]=react.useState(false);return react.useEffect(()=>{t.initialized||(r.updateValue("tickerSymbol",a.tickerSymbol),r.updateValue("theme",a.theme),r.updateValue("reverseColor",a.reverseColor),r.updateValue("layout",a.layout),r.updateValue("chartType",a.chartType),r.updateValue("timezone",a.timezone),r.updateValue("locale",a.locale),r.updateValue("backgroundColor",a.backgroundColor),r.updateValue("storageId",a.storageId),r.updateValue("enabledFeatures",a.enabledFeatures),r.updateValue("disabledFeatures",a.disabledFeatures),a.chartNames&&(r.chartNames=a.chartNames),a.priceFormatterFactory&&(r.priceFormatterFactory=a.priceFormatterFactory),a.supportedResolutions&&(r.supportedResolutions=a.supportedResolutions),a.supportedLayouts&&(r.supportedLayouts=a.supportedLayouts),a.supportedChartTypes&&(r.supportedChartTypes=a.supportedChartTypes),t.datafeed=a.datafeed,t.symbolResolver=new q(a.datafeed));},[t,r,a]),react.useEffect(()=>(t.init().then(()=>i(true)).catch(o=>{console.error("TradingViewConfig chartManager init error",o);}),()=>{t.destroy();}),[t]),t.initialized?jsxRuntime.jsx(jsxRuntime.Fragment,{children:e}):null};var Ye=react.createContext(null);function d(){let a=react.useContext(Ye);if(!a)throw new Error("useTvChartContext must be used within TradingViewProvider");return a}function kt(){return d().chartManager}function Et(){return d().prefix}var ce=class{setting;chartManager;constructor(e,t){this.setting=e,this.chartManager=t;}get internalWidget(){return this.chartManager.internalWidget}chartCount(){return this.chartManager.chartCount}setActiveChart(e){e<this.chartCount()&&(this.chartManager.selectedIndex=e);}layout(){return this.setting.layout}setLayout(e){this.chartManager.setLayout(e);}theme(){return this.setting.theme}setTheme(e){this.chartManager.setTheme(e);}setChartType(e){this.chartManager.setChartType(e);}getSetting(){return this.setting}getChartManager(){return this.chartManager}},ve=react.forwardRef(({children:a,initConfig:e,widgetConstructor:t,libraryPath:r,customCssUrl:i},o)=>{let s=jotai.useStore(),n=e.storageId,h=react.useMemo(()=>new $(n,s),[n,s]),u=react.useMemo(()=>new N(n,s,h),[n,s,h]),c=react.useMemo(()=>new ce(h,u),[h,u]);react.useImperativeHandle(o,()=>c,[c]);let m=react.useMemo(()=>({prefix:n,chartSettings:h,chartManager:u,widgetConstructor:t,libraryPath:r,customCssUrl:i}),[n,h,u,t,r,i]);return jsxRuntime.jsx(Ye.Provider,{value:m,children:jsxRuntime.jsx(Ce,{initConfig:e,children:a})})});var Te=react.memo(()=>{let{prefix:a,chartManager:e}=d(),t=jotai.useAtomValue(M(a)),r=react.useCallback(()=>{e.fullscreen=!e.fullscreen;},[e]);return jsxRuntime.jsx("button",{type:"button",onClick:r,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:t?"Exit fullscreen":"Fullscreen",children:t?"Exit":"Fullscreen"})});var Qe=react.createContext(null);function J(){let a=react.useContext(Qe);if(!a)throw new Error("useTvChartToolbarContext must be used within TradingViewToolbarProvider");return a}var xe=({children:a})=>{let{prefix:e,chartManager:t}=d(),r=jotai.useAtomValue(f(e)),i=jotai.useAtomValue(y(e)),o=react.useMemo(()=>i.length?t.areaByIndex(r):null,[t,r,i]),s=react.useMemo(()=>o?.symbolInfo??null,[o]),n=react.useMemo(()=>({activeAreaManager:o,symbolInfo:s}),[o,s]);return jsxRuntime.jsx(Qe.Provider,{value:n,children:a})};var Jt={0:"Bars",1:"Candles",2:"Line",3:"Area",8:"Heiken Ashi",9:"Hollow",10:"Baseline"},Gt=[1,0,2,3,9,8,10],we=react.memo(()=>{let{prefix:a}=d(),{activeAreaManager:e}=J(),t=jotai.useAtomValue(y(a)),r=jotai.useAtomValue(f(a)),i=t[r]?.chartStyle??1,o=react.useCallback(s=>{let n=parseInt(s.target.value,10);e?.setChartStyle(n);},[e]);return jsxRuntime.jsx("select",{value:i,onChange:o,className:"text-xs bg-transparent text-muted-foreground hover:text-foreground cursor-pointer border-none outline-none px-1 py-0.5",title:"K-line style",children:Gt.map(s=>jsxRuntime.jsx("option",{value:s,children:Jt[s]??s},s))})});var Le=react.memo(()=>{let{chartManager:a}=d(),e=react.useCallback(()=>{a.internalWidget?.openIndicatorSettingsDialog();},[a]);return jsxRuntime.jsx("button",{type:"button",onClick:e,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:"Indicators",children:"Indicators"})});var Re=react.memo(()=>{let{chartManager:a}=d(),e=react.useCallback(()=>{a.internalWidget?.openSettingsDialog();},[a]);return jsxRuntime.jsx("button",{type:"button",onClick:e,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:"Chart settings",children:"Settings"})});var Me=react.memo(()=>{let{prefix:a}=d(),{activeAreaManager:e}=J(),t=jotai.useAtomValue(x(a)),r=jotai.useAtomValue(y(a)),i=jotai.useAtomValue(f(a)),o=r[i]?.resolution,s=react.useCallback(n=>{e?.setResolution(n);},[e]);return jsxRuntime.jsx("div",{className:"flex items-center gap-0.5",children:t.map(n=>jsxRuntime.jsx("button",{type:"button",onClick:()=>s(n),className:`px-2 py-0.5 text-xs rounded cursor-pointer transition-colors ${o===n?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:n},n))})});var _e=react.memo(()=>{let{chartManager:a}=d(),e=react.useCallback(async()=>{try{let t=await a.internalWidget?.takeClientScreenshot();if(!t)return;let r=document.createElement("a");r.download=`chart-${Date.now()}.png`,r.href=t.toDataURL("image/png"),r.click();}catch(t){console.error("TradingViewSnapshot",t);}},[a]);return jsxRuntime.jsx("button",{type:"button",onClick:e,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:"Take snapshot",children:"Snapshot"})});var Pe=react.memo(({children:a,prefix:e,suffix:t,showResolutions:r=true,showKlineStyleSelect:i=true,showOpenIndicator:o=true,showOpenSettings:s=true,showFullscreen:n=true,showSnapshot:h=true})=>jsxRuntime.jsx(xe,{children:jsxRuntime.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 border-b border-border min-h-[36px] flex-shrink-0",children:[e,a??jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[r&&jsxRuntime.jsx(Me,{}),jsxRuntime.jsxs("div",{className:"flex items-center gap-0.5 ml-auto",children:[i&&jsxRuntime.jsx(we,{}),o&&jsxRuntime.jsx(Le,{}),s&&jsxRuntime.jsx(Re,{}),h&&jsxRuntime.jsx(_e,{}),n&&jsxRuntime.jsx(Te,{})]})]}),t]})}));var G=class{settings;chartManager;bridge;chartIndex;constructor(e,t,r,i){this.settings=e,this.chartManager=t,this.bridge=r,this.chartIndex=i;}get chartAreaManager(){return this.chartManager.areaByIndex(this.chartIndex)}get widget(){return this.bridge.getWidget()}get chartWidget(){return this.widget?.chart(this.chartIndex)??null}setChartStyle(e){this.chartWidget?.setChartType(e);}getChartStyle(){return this.chartWidget?.chartType()??1}handleSymbolChange(e,t){return this.bridge.asyncWidgetMethodContext((r,i)=>{r.chart(this.chartIndex).setSymbol(e,{dataReady:()=>i(),doNotActivateChart:false});})}handleResolutionChange(e,t){return this.bridge.asyncWidgetMethodContext((r,i)=>{let o=r.chart(this.chartIndex);o.dataReady(()=>{o.setResolution(v(e),{dataReady:i,doNotActivateChart:true}).catch(()=>{});});})}setPrecision(e){this.widget?.applyOverrides({"mainSeriesProperties.minTick":e===null?"default":`${Math.pow(10,e)},1,false`});}async dataReady(){if(await this.bridge.onReady(),!this.chartWidget)throw Error("ChartWidget: chartWidget is null");return new Promise(e=>{this.chartWidget?.dataReady(()=>setTimeout(e));})}timeScaleWidth(){return this.chartWidget?.getTimeScale()?.width()??NaN}rightOffset(){return this.chartWidget?.getTimeScale()?.rightOffset()??NaN}setRightOffset(e){this.chartWidget?.getTimeScale()?.setRightOffset(e);}barSpacing(){return this.chartWidget?.getTimeScale()?.barSpacing()??NaN}setBarSpacing(e){this.chartWidget?.getTimeScale()?.setBarSpacing(e);}};var K=class{settings;chartManager;bridge;constructor(e,t,r){this.settings=e,this.chartManager=t,this.bridge=r;}get widget(){return this.bridge.getWidget()}chartByIndex(e){return new G(this.settings,this.chartManager,this.bridge,e)}activeChart(){let e=this.widget?.activeChartIndex();return e===void 0?void 0:this.chartByIndex(e)}openIndicatorSettingsDialog(){this.widget?.activeChart().executeActionById("insertIndicator");}openSettingsDialog(){this.widget?.activeChart().executeActionById("chartProperties");}takeClientScreenshot(){return this.widget?.takeClientScreenshot()}onLayoutChange(e){this.widget?.setLayout(z(e));}async onThemeChange(e,t){let r=B(e);await this.widget?.changeTheme(r,{disableUndo:true}),this.bridge.applyColorPaletteOverrides();}};var Y=class{listeners=new Map;on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{this.listeners.get(e)?.delete(t);}}emit(e,t){this.listeners.get(e)?.forEach(r=>r(t));}off(e,t){this.listeners.get(e)?.delete(t);}clear(){this.listeners.clear();}};var X=class{settings;chartManager;bridge;abortController=new AbortController;constructor(e,t,r){this.settings=e,this.chartManager=t,this.bridge=r;}toJSON(){return null}async onReady(e){setTimeout(()=>{e({supported_resolutions:S.map(v),supports_marks:true,exchanges:[]});}),await this.chartManager.datafeed?.onReady({setting:this.settings,chartManager:this.chartManager,instance:this.bridge});}destroy(){this.abortController.abort();}async resolveSymbol(e,t,r,i){try{let o=await this.chartManager.datafeed?.resolveSymbol(e,i);o&&t(o);}catch(o){console.error("ChartDataFeed.resolveSymbol",o),r(o);}}async getBars(e,t,r,i,o){try{let s=await this.chartManager.datafeed?.getBars(e,t,r);s&&i(s,{noData:s.length===0});}catch(s){console.error("ChartDataFeed.getBars",s),o(s);}}subscribeBars(e,t,r,i,o){this.chartManager.datafeed?.subscribeBars(e,t,r,i,o);}unsubscribeBars(e){this.chartManager.datafeed?.unsubscribeBars(e);}async getMarks(e,t,r,i,o){this.chartManager.datafeed?.getMarks?.(e,t,r,i,o);}getQuotes(e,t,r){t(e.map(i=>({s:"ok",n:i,v:{}})));}subscribeQuotes(e,t,r,i){}unsubscribeQuotes(e){}};var Q=class{settings;chartManager;bridge;data;drawings;constructor(e,t,r){this.settings=e,this.chartManager=t,this.bridge=r,this.data=null,this.drawings=null,this.loadDataFromLocalStorage();}get layoutId(){return this.settings.storageId}get shouldResetColorPalette(){let e=this.data?.theme,t=this.data?.reverseColor;return e!==this.settings.theme||t!==this.settings.reverseColor}toJSON(){return null}getAllCharts(){return new Promise(e=>{let t=[];this.data&&t.push({id:this.data.id,name:this.data.name,symbol:this.data.symbol,resolution:this.data.resolution,timestamp:this.data.timestamp}),e(t);})}removeChart(e){throw Error("Method not implemented.")}async saveChart(e){return this.data={...e,theme:this.settings.theme,reverseColor:this.settings.reverseColor,id:this.layoutId,timestamp:0},this.saveDataToLocalStorage(),this.data.id}getChartContent(e){return new Promise(t=>{let r=JSON.parse(this.data.content),i=JSON.parse(r.charts_symbols),o=JSON.parse(r.content);t(JSON.stringify({...r,chart_symbols:JSON.stringify(i),content:JSON.stringify(o)}));})}async saveLineToolsAndGroups(e,t,r){this.drawings=this.drawings||{data:{},timestamp:0},this.drawings.data=this.drawings.data||{},this.drawings.data[t]=this.drawings.data[t]||{};try{if(!r.sources)return;for(let[i,o]of r.sources)if(!o||!o.symbol||!o.state||Object.keys(o.state).length===0||i.includes("/"))o===null&&delete this.drawings.data[t][i];else {let{address:s,chain:n}=de(o.symbol),h=he({address:s,chain:n}),u={...o,symbol:h,id:o.id.indexOf("/")>0?o.id.split("/")[0]:o.id};this.drawings.data[t][i]=u;}this.saveDataToLocalStorage();}catch(i){console.error("saveLineToolsAndGroups",i);}}async loadLineToolsAndGroups(e,t,r,i){if(!i?.symbol||!this.drawings?.data?.[t])return null;let o=i.symbol,{address:s,chain:n}=de(o),h=he({address:s,chain:n}),u=lodashEs.uniqBy(Object.values(lodashEs.cloneDeep(this.drawings.data[t])).filter(c=>c.symbol===h),"id");try{return {sources:new Map(u.map(c=>{let m=lodashEs.cloneDeep({...c,symbol:o});return [m.id,m]}))}}catch(c){return console.error("ChartSaveLoadAdapter.loadLineToolsAndGroups",c),null}}getLayoutKey(e){return `charts.tradingview.data.${e}`}getDrawingKey(e){return `charts.tradingview.drawing.${e}`}loadDataFromLocalStorage(){let e=this.getLayoutKey(this.layoutId),t=this.getDrawingKey(this.layoutId),r=localStorage.getItem(e),i=localStorage.getItem(t);if(r)try{let o=JSON.parse(r),s=JSON.parse(o.content);o.content=JSON.stringify(s),this.data=o;}catch(o){console.error("ChartSaveLoadAdapter loadDataFromLocalStorage parse layout error",o);}if(i)try{this.drawings=JSON.parse(i);}catch(o){console.error("ChartSaveLoadAdapter loadDataFromLocalStorage parse drawing error",o);}}saveDataToLocalStorage(){let e=this.getLayoutKey(this.layoutId),t=this.getDrawingKey(this.layoutId),r=Math.round(Date.now()/1e3);this.data&&(this.data.timestamp=r,localStorage.setItem(e,JSON.stringify(this.data))),this.drawings&&(this.drawings.timestamp=r,localStorage.setItem(t,JSON.stringify(this.drawings)));}};var Fe="trading.chart.proterty",Z=class{storagePrefix;initialSettings;constructor(e,t,r){this.storagePrefix=`tradingview.${e.storageId}.`,this.initialSettings={};for(let o=0;o<localStorage.length;o++){let s=localStorage.key(o);if(s&&s.startsWith(this.storagePrefix)){let n=s.slice(this.storagePrefix.length);this.initialSettings[n]=localStorage.getItem(s);}}let i={noConfirmEnabled:1};if(this.initialSettings[Fe])try{let o=JSON.parse(this.initialSettings[Fe]);Object.assign(i,o),Object.assign(i,{noConfirmEnabled:!0});}catch(o){console.error("ChartSettingsAdapter: failed to parse chart settings",o);}this.initialSettings[Fe]=JSON.stringify(i);}toJSON(){return null}removeValue(e){delete this.initialSettings[e],localStorage.removeItem(`${this.storagePrefix}${e}`);}setValue(e,t){this.initialSettings[e]=t,localStorage.setItem(`${this.storagePrefix}${e}`,t);}};var j=class{settings;chartManager;WidgetCtor;moduleInstances=new Map;symbolIntervalSubs=new Map;abortController=new AbortController;widgetReadyPromise=null;readyPromise=null;widget=null;container=null;ready=false;layoutReady=true;events=new Y;libraryPath;customCssUrl;constructor(e,t,r,i){this.settings=e,this.chartManager=t,this.WidgetCtor=r,this.libraryPath=i?.libraryPath??"static/charting_library/",this.customCssUrl=i?.customCssUrl??"custom-styles.css",this.initModules();}getWidget(){return this.widget}async init(e){if(this.widgetReadyPromise)throw new Error("ChartWidgetBridge already initialized.");let t=this.getWidgetOptions();this.container=e,this.widget=new this.WidgetCtor({...t,container:e});let r=new Promise(i=>{this.widget?.onChartReady(()=>i());});this.widgetReadyPromise=r,this.readyPromise=r.then(()=>(this.ready=true,this.handleChartReady())).catch(i=>{console.warn("ChartWidgetBridge widget ready failed",i);}),this.moduleInstances.forEach((i,o)=>{try{i.init?.call(i);}catch(s){console.warn(`ChartWidgetBridge init module ${o}`,s);}}),await Promise.race([this.readyPromise,new Promise((i,o)=>setTimeout(o,6e4,new Error("ChartWidgetBridge init timeout")))]);}async destroy(){this.moduleInstances.forEach(e=>e.destroy?.call(e)),this.symbolIntervalSubs.forEach(e=>e()),this.symbolIntervalSubs.clear(),this.events.clear(),this.abortController.abort(),this.ready=false,this.widgetReadyPromise=null,this.readyPromise=null,this.widget?.remove(),this.widget=null;}async onReady(){return new Promise((e,t)=>{this.widget?this.widget.onChartReady(()=>this.readyPromise?.then(e).catch(t)):t(Error("cannot call `onReady` before `init`"));})}async asyncWidgetMethodContext(e){return new Promise((t,r)=>{if(!this.widgetReadyPromise){r(new Error("ChartWidgetBridge: widget not ready"));return}let i=this.widgetReadyPromise.then(()=>this.waitForLayout()),o=this.abortController.signal,s=()=>r(o.reason);o.addEventListener("abort",s),i.then(()=>e(this.widget,t)).catch(r).finally(()=>o.removeEventListener("abort",s));})}getModule(e){return this.moduleInstances.get(e)}applyColorPaletteOverrides(){this.widget?.applyOverrides(this.getColorPaletteOverrides()),this.widget?.applyStudiesOverrides(this.getColorPaletteStudiesOverrides());}getWidgetOptions(){let e=["header_widget","legend_inplace_edit","display_market_status","save_shortcut","show_interval_dialog_on_key_press","symbol_info","symbol_search_hot_key","uppercase_instrument_names","show_symbol_logo_in_legend","show_symbol_logo_for_compare_studies","drawing_templates"],t=["determine_first_data_request_size_using_visible_range","request_only_visible_range_on_reset","show_exchange_logos","show_symbol_logos","dont_show_boolean_study_arguments","hide_last_na_study_output","hide_right_toolbar","seconds_resolution","saveload_separate_drawings_storage","volume_force_overlay","create_volume_indicator_by_default","two_character_bar_marks_labels"];return this.settings.enableHideDrawingToolsByDefault&&t.push("hide_left_toolbar_by_default"),this.settings.enableTimeframesToolbar||e.push("timeframes_toolbar"),this.settings.enableCreateVolumeIndicatorByDefault||e.push("create_volume_indicator_by_default"),this.settings.enableVolumeForceOverlay||e.push("volume_force_overlay"),{container:"",autosize:true,debug:false,load_last_chart:true,auto_save_delay:1,timezone:this.localTimezone,library_path:this.libraryPath,custom_css_url:this.customCssUrl,theme:B(this.settings.theme),custom_font_family:window.getComputedStyle(document.body).fontFamily,symbol:this.chartManager.activeArea?.tickerSymbol,interval:v(this.chartManager.activeArea?.resolution),locale:this.settings.locale,datafeed:this.getModule("datafeed"),save_load_adapter:this.getModule("saveLoadAdapter"),settings_adapter:this.getModule("settingsAdapter"),custom_formatters:{priceFormatterFactory:this.settings.priceFormatterFactory?(r,i)=>this.settings.priceFormatterFactory(r,i):()=>null},overrides:{...this.getSettingsOverrides(),...this.getColorPaletteOverrides()},studies_overrides:this.getColorPaletteStudiesOverrides(),disabled_features:e,enabled_features:t,supported_resolutions:S.map(v)}}async handleChartReady(){let e=z(this.settings.layout);e!==this.widget?.layout()&&await this.waitForLayout(e),this.widget?.setActiveChart(this.chartManager.selectedIndex),this.getModule("saveLoadAdapter")?.shouldResetColorPalette&&(await this.widget?.changeTheme(B(this.settings.theme),{disableUndo:true}),this.applyColorPaletteOverrides()),this.widget?.subscribe("onAutoSaveNeeded",this.onAutoSaveNeeded.bind(this)),this.widget?.subscribe("activeChartChanged",this.activeChartChanged.bind(this)),this.widget?.subscribe("layout_about_to_be_changed",this.layoutWillChange.bind(this)),this.widget?.subscribe("layout_changed",this.layoutChanged.bind(this)),this.syncChartsChanges(),this.subscribeChartsChanges(),this.installEventHooks(),this.resetTimezone();}onAutoSaveNeeded(){try{this.widget?.saveChartToServer(void 0,void 0,{defaultChartName:"DEFAULT"});}catch(e){console.warn("ChartWidgetBridge.onAutoSaveNeeded",e);}}activeChartChanged(e){this.chartManager.selectedIndex=e,this.chartManager.settings.saveLoadAdapter.saveSettings(this.chartManager.settingsData).catch(console.error);}layoutWillChange(e){this.layoutReady=false,this.chartManager.setLayout(be(e));}layoutChanged(){this.layoutReady=true,this.syncChartsChanges(),this.subscribeChartsChanges(),this.widget?.unloadUnusedCharts(),this.widget?.saveChartToServer();}syncChartsChanges(){this.widget?.symbolSync()?.setValue(false),this.widget?.intervalSync()?.setValue(false);let e=this.widget?.chartsCount()??0;for(let t=0;t<e;t++){let r=this.chartManager.areaByIndex(t),i=this.widget.chart(t);i.setSymbol(r?.tickerSymbol??"",{doNotActivateChart:true}),i.setResolution(v(r?.resolution),{doNotActivateChart:true});}}subscribeChartsChanges(){let e=this.widget?.chartsCount()??0;this.symbolIntervalSubs.forEach((t,r)=>{parseInt(r)>=e&&(t(),this.symbolIntervalSubs.delete(r));});for(let t=0;t<e;t++){if(this.symbolIntervalSubs.has(`${t}`))continue;let r=this.chartManager.areaByIndex(t),i=this.widget.chart(t);i.getPanes().forEach(u=>u.getMainSourcePriceScale()?.setAutoScale(true));let o=i.onSymbolChanged(),s=i.onIntervalChanged(),n=()=>{this.events.emit("symbolChanged",[t,i.symbol()]),r?.setSymbol(i.symbol()).catch(()=>{}),this.onAutoSaveNeeded();},h=u=>{let c=U(u);this.events.emit("resolutionChanged",[t,c]),r?.setResolution(c).catch(()=>{});};o.subscribe(r,n),s.subscribe(r,h),this.symbolIntervalSubs.set(`${t}`,()=>{o.unsubscribe(r,n),s.unsubscribe(r,h);});}}installEventHooks(){let e=this.container?.lastElementChild,t=e?.contentWindow?.document;if(t&&(t.addEventListener("click",()=>e?.click()),t.defaultView?.MutationObserver)){let r=new WeakSet,i=t.querySelector(".layout__area--center");if(i){let o=()=>{i.querySelectorAll(".chart-container").forEach((s,n)=>{r.has(s)||(r.add(s),ze.forEach(h=>{s.addEventListener(h,u=>this.events.emit("domEvent",[n,h,u]),{passive:true});}));});};new t.defaultView.MutationObserver(o).observe(i,{childList:true}),o();}}}resetTimezone(){try{let e=this.widget?.chartsCount()??0;for(let t=0;t<e;t++)this.widget?.chart(t)?.getTimezoneApi()?.setTimezone(this.localTimezone);}catch(e){console.error("ChartWidgetBridge: Reset timezone",e);}}get localTimezone(){return Intl.DateTimeFormat().resolvedOptions().timeZone}async waitForLayout(e){if(!this.widget||this.layoutReady&&!e)return;let t;return new Promise(i=>{t=i,this.widget.subscribe("layout_changed",i),e&&this.widget.setLayout(e);}).finally(()=>{this.widget.unsubscribe("layout_changed",t);})}getSettingsOverrides(){return {"mainSeriesProperties.minTick":"default","paneProperties.legendProperties.showSeriesTitle":this.settings.enableLegendSeriesTitle}}getColorPaletteOverrides(){let e=this.settings.theme==="dark"?C.card:$e.card;return {"paneProperties.background":C.chartBg,"paneProperties.backgroundType":"solid",volumePaneSize:"medium","mainSeriesProperties.candleStyle.upColor":C.increase,"mainSeriesProperties.barStyle.upColor":C.increase,"mainSeriesProperties.columnStyle.upColor":C.increase,"mainSeriesProperties.candleStyle.downColor":C.decrease,"mainSeriesProperties.barStyle.downColor":C.decrease,"mainSeriesProperties.columnStyle.downColor":C.decrease,"mainSeriesProperties.candleStyle.borderUpColor":C.increase,"mainSeriesProperties.candleStyle.borderDownColor":C.decrease,"mainSeriesProperties.candleStyle.wickUpColor":C.increase,"mainSeriesProperties.candleStyle.wickDownColor":C.decrease,"linetoolorder.bodyBackgroundColor":e,"linetoolorder.bodyBackgroundTransparency":0}}getColorPaletteStudiesOverrides(){return {"volume.volume.color.0":C.decrease,"volume.volume.color.1":C.increase,"volume.volume.transparency":80}}initModules(){Object.entries({datafeed:X,saveLoadAdapter:Q,settingsAdapter:Z}).forEach(([t,r])=>{this.moduleInstances.set(t,new r(this.settings,this.chartManager,this));});}};var Ve=react.memo(()=>null);var ke=react.forwardRef(({onReady:a},e)=>{let{chartManager:t,chartSettings:r,widgetConstructor:i,libraryPath:o,customCssUrl:s}=d(),n=react.useRef(a),[h,u]=react.useState(),[c,m]=react.useState(null),[ee,Oe]=react.useState(false);return react.useEffect(()=>{ee&&n.current&&setTimeout(n.current);},[ee]),react.useImperativeHandle(e,()=>h,[h]),react.useEffect(()=>{if(!c)return;let me=new j(r,t,i,{libraryPath:o,customCssUrl:s}),yt=new K(r,t,me);return u(yt),me.init(c).then(()=>Oe(true)).catch(pt=>{console.error("TradingViewWidgetContainer: failed to init bridge",pt);}),()=>{me.destroy().then(()=>{u(void 0),Oe(false);}).catch(()=>{console.error("TradingViewWidgetContainer: failed to destroy bridge");});}},[c,r,t,i,o,s]),jsxRuntime.jsxs("div",{className:"w-full h-full",children:[jsxRuntime.jsx(Ve,{}),jsxRuntime.jsx("div",{id:"tv_chart_container",className:"w-full h-full",ref:m})]})});var Ee=react.memo(({onReady:a})=>{let{chartManager:e,chartSettings:t}=d(),r=react.useMemo(()=>`${t.timezone}_${e.reloadId}`,[t.timezone,e.reloadId]);react.useLayoutEffect(()=>{e.setLoading(true);},[e,t.chartType,r]);let i=react.useCallback(()=>{a?.(),e.onInternalWidgetReady(),e.setLoading(false);},[e,a]);return jsxRuntime.jsx("div",{className:"flex-1 w-full overflow-hidden",children:jsxRuntime.jsx(ke,{onReady:i,ref:o=>e.setInternalWidget(o??null)})})});var vr=react.memo(({toolbar:a,loadingOverlay:e,onReady:t,children:r})=>{let{prefix:i}=d(),o=jotai.useAtomValue(I(i));return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a!==false&&jsxRuntime.jsx(Pe,{...a||{}}),jsxRuntime.jsxs("div",{className:"relative flex-1 w-full overflow-hidden",children:[o&&e&&jsxRuntime.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-background/80",children:e}),jsxRuntime.jsx(Ee,{onReady:t})]}),r]})}),Tr=react.forwardRef(({initConfig:a,widgetConstructor:e,libraryPath:t,customCssUrl:r,toolbar:i,loadingOverlay:o,onReady:s,children:n,className:h},u)=>jsxRuntime.jsx("div",{className:`flex flex-col w-full h-full ${h??""}`,children:jsxRuntime.jsx(ve,{ref:u,initConfig:a,widgetConstructor:e,libraryPath:t,customCssUrl:r,children:jsxRuntime.jsx(vr,{toolbar:i,loadingOverlay:o,onReady:s,children:n})})}));var wr=react.memo(({index:a})=>{let{prefix:e}=d(),t=jotai.useAtomValue(y(e)),r=jotai.useAtomValue(f(e)),o=t[a??r];return o?jsxRuntime.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[jsxRuntime.jsx("span",{className:"font-medium text-foreground",children:o.tickerSymbol||o.symbol}),jsxRuntime.jsx("span",{children:o.resolution})]}):null});function Rr(){return d().chartManager}function Mr(){let{prefix:a,chartManager:e}=d(),t=jotai.useAtomValue(f(a)),r=jotai.useAtomValue(y(a));return react.useMemo(()=>r.length?e.areaByIndex(t):null,[e,t,r])}function Ar(){let{prefix:a,chartManager:e}=d(),t=jotai.useAtomValue(f(a)),i=jotai.useAtomValue(y(a))[t];return react.useMemo(()=>i?.tickerSymbol?e.symbolResolver?.getSymbolInfo(i.tickerSymbol)??null:null,[e,i?.tickerSymbol])}var ct=768;function mt(a,e=ct){return a>0&&a<e}function ht(a){try{return ge(a)}catch{return ge(U(a))}}function Pr(a){return a instanceof Date?a.getTime():a}function gt(a,e){let t={time:fe(Pr(a.time),e),open:a.open,high:a.high,low:a.low,close:a.close};return a.volume!==void 0&&(t.volume=a.volume),t}function ut(a,e){return `${a.ticker??a.name}:${e}`}var De=class{source;options;liveListeners=new Map;lastHistoryBarTime=new Map;liveGeneration=0;constructor(e,t={}){this.source=e,this.options=t;}isMobileViewport(e){return mt(e,this.options.mobileBreakpointPx)}async onReady(e){await this.options.onReady?.(e);}onDestroy(){for(let e of [...this.liveListeners.keys()])this.unsubscribeLiveBars(e);this.lastHistoryBarTime.clear(),this.options.onDestroy?.();}async resolveSymbol(e,t){return await this.options.resolveSymbol?.(e,t)??null}async getBars(e,t,r){return this.getHistoryBars(e,t,r)}subscribeBars(e,t,r,i,o){this.subscribeLiveBars(e,t,r,i,o);}unsubscribeBars(e){this.unsubscribeLiveBars(e);}getMarks(e,t,r,i,o){this.options.getMarks?.(e,t,r,i,o);}getFirstBarTime(e,t,r){return this.options.getFirstBarTime?.(e,t,r)??Promise.resolve()}async getHistoryBars(e,t,r){let i=await this.source.getHistory({symbolInfo:e,resolution:t,periodParams:r}),o=ht(t),s=(i??[]).map(n=>gt(n,o));if(s.length>0){let n=ut(e,t),h=Math.max(...s.map(c=>c.time)),u=this.lastHistoryBarTime.get(n)??0;h>u&&this.lastHistoryBarTime.set(n,h);}return s}subscribeLiveBars(e,t,r,i,o){this.unsubscribeLiveBars(i);let s=ut(e,t),n=ht(t),h=++this.liveGeneration;this.liveListeners.set(i,{symbolKey:s,lastBarTime:this.lastHistoryBarTime.get(s)??0,generation:h}),this.source.subscribe({symbolInfo:e,resolution:t,listenerGuid:i,onResetCacheNeededCallback:o},u=>{let c=this.liveListeners.get(i);if(!c||c.generation!==h)return;let m=gt(u,n),ee=Math.max(c.lastBarTime,this.lastHistoryBarTime.get(c.symbolKey)??0);m.time<ee||(c.lastBarTime=m.time,r(m));});}unsubscribeLiveBars(e){this.liveListeners.has(e)&&(this.liveListeners.delete(e),this.source.unsubscribe(e));}};exports.ALL_TV_CHART_RESOLUTIONS=S;exports.ChartAreaManager=V;exports.ChartDataFeed=X;exports.ChartLibraryWidget=K;exports.ChartManager=N;exports.ChartSaveLoadAdapter=Q;exports.ChartSettings=$;exports.ChartSettingsAdapter=Z;exports.ChartSettingsStore=H;exports.ChartSymbolResolver=q;exports.ChartWidget=G;exports.ChartWidgetBridge=j;exports.DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX=ct;exports.DEFAULT_TV_CHART_RESOLUTIONS=T;exports.ENABLED_TV_CHART_FEATURES=ye;exports.EventEmitter=Y;exports.SUPPORTED_TV_CHART_LAYOUTS=pe;exports.TV_CHART_THEME_COLORS=C;exports.TradingView=Tr;exports.TradingViewAreaTitle=wr;exports.TradingViewConfig=Ce;exports.TradingViewDatafeedAdapter=De;exports.TradingViewFullscreen=Te;exports.TradingViewKlineStyleSelect=we;exports.TradingViewLayout=Ve;exports.TradingViewOpenIndicator=Le;exports.TradingViewOpenSettings=Re;exports.TradingViewProvider=ve;exports.TradingViewResolutions=Me;exports.TradingViewSnapshot=_e;exports.TradingViewToolbar=Pe;exports.TradingViewToolbarProvider=xe;exports.TradingViewWidgetContainer=ke;exports.TradingViewWidgetProvider=Ee;exports.TvChartErrorResetType=Ue;exports.TvChartFeature=ae;exports.TvChartHandle=ce;exports.TvChartKlineStyle=re;exports.TvChartLayout=R;exports.TvChartPriceType=We;exports.TvChartQuoteType=Ne;exports.TvChartTheme=He;exports.TvChartType=te;exports.chartAreasFamily=y;exports.chartFullscreenFamily=M;exports.chartLoadingFamily=I;exports.chartPinnedResolutionsFamily=x;exports.chartSelectedIndexFamily=f;exports.chartShowDrawingToolbarFamily=w;exports.getTvChartLayoutReverse=be;exports.getTvChartLibraryLayout=z;exports.getTvChartLibraryLocale=wt;exports.getTvChartLibraryResolution=v;exports.getTvChartLibraryTheme=B;exports.getTvChartResolutionFrame=ge;exports.getTvChartResolutionReverse=U;exports.getTvChartTickTimestamp=fe;exports.isTvChartMobileViewport=mt;exports.parseSymbol=de;exports.settingsBackgroundColorFamily=le;exports.settingsChartTypeFamily=A;exports.settingsDataFamily=W;exports.settingsDisabledFeaturesFamily=F;exports.settingsEnabledFeaturesFamily=P;exports.settingsLayoutFamily=_;exports.settingsLocaleFamily=ie;exports.settingsReverseColorFamily=ne;exports.settingsStorageIdFamily=D;exports.settingsThemeFamily=E;exports.settingsTickerSymbolFamily=se;exports.settingsTimezoneFamily=oe;exports.stringifySymbol=vt;exports.stringifySymbolShort=he;exports.useActiveAreaManager=Mr;exports.useChartManager=Rr;exports.useSymbolInfo=Ar;exports.useTvChartContext=d;exports.useTvChartManager=kt;exports.useTvChartPrefix=Et;exports.useTvChartToolbarContext=J;exports.widgetReadyFamily=O;//# sourceMappingURL=index.js.map
|
|
1
|
+
'use strict';var react=require('react'),jotai=require('jotai'),utils=require('jotai/utils'),lodashEs=require('lodash-es'),jsxRuntime=require('react/jsx-runtime');var te=(t=>(t.TradingView="TradingView",t.Original="Original",t))(te||{}),We=(t=>(t.Price="price",t.MarketCap="market_cap",t))(We||{}),Ne=(o=>(o.USD="USD",o.SOL="SOL",o.ETH="ETH",o.TRX="TRX",o.BNB="BNB",o))(Ne||{}),re=(l=>(l[l.Bars=0]="Bars",l[l.Candles=1]="Candles",l[l.Line=2]="Line",l[l.Area=3]="Area",l[l.HeikenAshi=8]="HeikenAshi",l[l.HollowCandles=9]="HollowCandles",l[l.Baseline=10]="Baseline",l[l.HiLo=12]="HiLo",l[l.Column=13]="Column",l[l.LineWithMarkers=14]="LineWithMarkers",l[l.Stepline=15]="Stepline",l[l.HLCArea=16]="HLCArea",l[l.VolCandle=19]="VolCandle",l[l.Renko=4]="Renko",l[l.Kagi=5]="Kagi",l[l.PointAndFigure=6]="PointAndFigure",l[l.LineBreak=7]="LineBreak",l))(re||{}),He=(t=>(t.Light="light",t.Dark="dark",t))(He||{}),ae=(m=>(m.HeaderWidget="header_widget",m.HeaderCandleStyleMenu="header_candle_style_menu",m.HeaderFullscreenButton="header_fullscreen_button",m.MultiCharts="multi_charts",m.CreateVolumeIndicatorByDefault="create_volume_indicator_by_default",m.VolumeForceOverlay="volume_force_overlay",m.HideDrawingToolsByDefault="hide_drawing_tools_by_default",m.LegendSeriesTitle="legend_series_title",m.LegendVolume="legend_volume",m.TimeframesToolbar="timeframes_toolbar",m.SaveDrawingToServer="save_drawing_to_server",m))(ae||{}),R=(g=>(g.Layout1A="1A",g.Layout2A="2A",g.Layout2B="2B",g.Layout3A="3A",g.Layout3B="3B",g.Layout3C="3C",g.Layout3D="3D",g.Layout3E="3E",g.Layout3F="3F",g.Layout4A="4A",g.Layout4B="4B",g.Layout4C="4C",g.Layout4D="4D",g.Layout4E="4E",g.Layout4F="4F",g.Layout5A="5A",g.Layout5B="5B",g.Layout5C="5C",g.Layout5D="5D",g.Layout6A="6A",g.Layout6B="6B",g.Layout6C="6C",g.Layout7A="7A",g.Layout8A="8A",g.Layout8B="8B",g.Layout8C="8C",g))(R||{}),Ue=(r=>(r[r.None=0]="None",r[r.ResetData=1]="ResetData",r[r.ResetChart=2]="ResetChart",r))(Ue||{});var ye=["header_widget","header_candle_style_menu","header_fullscreen_button","multi_charts","volume_force_overlay","legend_series_title","timeframes_toolbar","save_drawing_to_server"],T=["1s","30s","1m","1h","4h","1d"],S=["1s","15s","30s","1m","5m","15m","1h","4h","12h","1d"],pe=["1A","2A","2B","3A","3B","3C","3D","3E","3F","4A","4B","4C","4D","4E","4F","5A","5B","5C","5D","6A","6B","6C","7A","8A","8B","8C"],ze=["click","keydown","mousedown","mouseup","contextmenu"],C={decrease:"#F04866",increase:"#1DB954",chartBg:"#1A1A1A",card:"#242424"},$e={card:"#242424"};var I=utils.atomFamily(a=>jotai.atom(true)),M=utils.atomFamily(a=>jotai.atom(false)),f=utils.atomFamily(a=>jotai.atom(0)),x=utils.atomFamily(a=>jotai.atom([...T])),y=utils.atomFamily(a=>jotai.atom([])),w=utils.atomFamily(a=>jotai.atom(false)),_=utils.atomFamily(a=>jotai.atom("1A")),A=utils.atomFamily(a=>jotai.atom("TradingView")),E=utils.atomFamily(a=>jotai.atom("dark")),ie=utils.atomFamily(a=>jotai.atom("en")),oe=utils.atomFamily(a=>jotai.atom("Etc/UTC")),se=utils.atomFamily(a=>jotai.atom("")),D=utils.atomFamily(a=>jotai.atom("kline")),ne=utils.atomFamily(a=>jotai.atom(false)),le=utils.atomFamily(a=>jotai.atom(null)),P=utils.atomFamily(a=>jotai.atom([])),F=utils.atomFamily(a=>jotai.atom([])),O=utils.atomFamily(a=>jotai.atom(false)),W=utils.atomFamily(a=>jotai.atom(e=>{let t=e(_(a)),r=e(A(a)),i=e(f(a)),o=e(x(a)),s=e(w(a)),n=e(y(a));return {layout:t,chartType:r,selectedIndex:i,pinnedResolutions:o,showDrawingToolbar:s,areaContents:n}}),lodashEs.isEqual);var V=class{settings;chartManager;chartIndex;store;prefix;pendingTickerSymbol=null;pendingResolution=null;constructor(e,t,r,i,o,s){this.settings=e,this.chartManager=t,this.chartIndex=r,this.store=i,this.prefix=o;let h={...{resolution:"1m",chartStyle:1,symbol:"",tickerSymbol:"",rightOffset:10,barSpacing:6,dataReady:false},...s};this.patchArea(h);}get state(){return this.store.get(y(this.prefix))[this.chartIndex]??{resolution:"1m",chartStyle:1,symbol:"",tickerSymbol:"",rightOffset:10,barSpacing:6,dataReady:false}}patchArea(e){let t=[...this.store.get(y(this.prefix))],r=t[this.chartIndex]??{resolution:"1m",chartStyle:1,symbol:"",tickerSymbol:"",rightOffset:10,barSpacing:6,dataReady:false};t[this.chartIndex]={...r,...e},this.store.set(y(this.prefix),t);}setState(e,t){t!=null&&this.patchArea({[e]:t});}get tickerSymbol(){return this.state.tickerSymbol}get symbol(){return this.state.symbol}get resolution(){return this.state.resolution}get chartStyle(){return this.state.chartStyle}get rightOffset(){return this.state.rightOffset}get barSpacing(){return this.state.barSpacing}get dataReady(){return this.state.dataReady}get internalChartWidget(){return this.chartManager.internalWidget?.chartByIndex(this.chartIndex)}setChartStyle(e){this.setState("chartStyle",e),this.internalChartWidget?.setChartStyle(e);}async setSymbol(e){if(this.state.tickerSymbol!==e){this.setState("tickerSymbol",e),this.setState("dataReady",false),this.pendingTickerSymbol=e;try{let t=[this.internalChartWidget?.handleSymbolChange(e,this.tickerSymbol),this.chartManager.symbolResolver?.resolveSymbolInfo(e).then(r=>{r&&this.setState("symbol",r.name);})];for(let r of await Promise.allSettled(t))if(r.status==="rejected")throw r.reason}catch(t){console.error(t);}finally{this.pendingTickerSymbol===e&&(this.pendingTickerSymbol=null);}this.tickerSymbol===e&&this.setState("dataReady",true);}}async setResolution(e){if(this.resolution!==e){this.setState("resolution",e),this.setState("dataReady",false),this.pendingResolution=e;try{await this.internalChartWidget?.handleResolutionChange(e,this.resolution);}finally{this.pendingResolution===e&&(this.pendingResolution=null);}}}toJSON(){return {...this.state}}widgetReady(){this.internalChartWidget?.dataReady()?.then(()=>this.handleChartReady())?.catch(()=>{});}get active(){return this.chartIndex<this.chartManager.chartCount}get selected(){return this.chartManager.selectedIndex===this.chartIndex}get symbolInfo(){return this.chartManager.symbolResolver?.getSymbolInfo(this.tickerSymbol)??null}destroy(){}async handleChartReady(){this.internalChartWidget&&(this.setState("dataReady",true),this.selected&&this.internalChartWidget.setBarSpacing(this.barSpacing));}};var N=class{prefix;settings;store;initialized=false;focused=false;reloadId=0;internalWidget=null;datafeed=null;symbolResolver=null;unsubAutoSave=null;constructor(e,t,r){this.prefix=e,this.store=t,this.settings=r;}get loading(){return this.store.get(I(this.prefix))}get fullscreen(){return this.store.get(M(this.prefix))}set fullscreen(e){this.store.set(M(this.prefix),e),e?document.body.classList.add("fullScreen"):document.body.classList.remove("fullScreen");}get selectedIndex(){return this.store.get(f(this.prefix))}set selectedIndex(e){this.store.set(f(this.prefix),e);}get pinnedResolutions(){return this.store.get(x(this.prefix))}set pinnedResolutions(e){this.store.set(x(this.prefix),e);}get showDrawingToolbar(){return this.store.get(w(this.prefix))}get chartCount(){return parseInt(this.settings.layout,10)||1}get areas(){let e=this.store.get(y(this.prefix));return this._areaManagers.slice(0,e.length)}_areaManagers=[];areaByIndex(e){return this.initialized&&this.updateChartContents(),this._areaManagers[e]??null}get activeArea(){return this.areaByIndex(this.selectedIndex)}async init(){if(this.initialized)return;let e=this.settings.saveLoadAdapter.getSettings();if(e?.selectedIndex!=null&&(this.selectedIndex=e.selectedIndex),e?.pinnedResolutions){let r=e.pinnedResolutions;r.length===T.length&&r.every(i=>T.includes(i))?this.pinnedResolutions=[...T]:this.pinnedResolutions=r;}if(e?.areaContents&&e.areaContents.forEach((r,i)=>{let o=new V(this.settings,this,i,this.store,this.prefix,r);this._areaManagers[i]=o;}),e?.showDrawingToolbar!=null&&this.store.set(w(this.prefix),e.showDrawingToolbar),this.settings.updateValue("layout",e?.layout),this.settings.updateValue("chartType",e?.chartType),this.settings.enableMultiCharts||this.settings.updateValue("layout","1A"),this.settings.enableHideDrawingToolsByDefault&&this.store.set(w(this.prefix),false),this.updateChartContents(),this.settings.tickerSymbol&&this.activeArea)try{await this.activeArea.setSymbol(this.settings.tickerSymbol);}catch(r){console.warn("ChartManager init failed to set symbol",r);}this.initialized=true;let t=lodashEs.debounce(()=>{let r=this.store.get(W(this.prefix));this.settings.saveLoadAdapter.saveSettings(r).catch(console.error);},1e3);this.unsubAutoSave=this.store.sub(W(this.prefix),t);}destroy(){this.unsubAutoSave?.(),this._areaManagers.forEach(e=>e.destroy()),this._areaManagers=[];}setLoading(e){this.store.set(I(this.prefix),e);}setLocale(e){this.settings.updateValue("locale",e);}setTimezone(e){this.settings.updateValue("timezone",e);}setFocused(e){this.focused=e;}setShowDrawingToolbar(e){this.store.set(w(this.prefix),e);}setInternalWidget(e){this.internalWidget=e,this.store.set(O(this.prefix),false);}onInternalWidgetReady(){this.store.set(O(this.prefix),true),this.areas.forEach((e,t)=>{t<this.chartCount&&e.widgetReady();});}setChartType(e){this.settings.updateValue("chartType",e);}setTheme(e){this.settings.theme!==e&&(this.settings.updateValue("theme",e),this.internalWidget?.onThemeChange?.(e,this.settings.reverseColor));}setReverseColor(e){this.settings.reverseColor!==e&&(this.settings.updateValue("reverseColor",e),this.internalWidget?.onThemeChange?.(this.settings.theme,e));}setLayout(e){let t=this.settings.enableMultiCharts?e:"1A";if(this.settings.layout!==t){this.settings.updateValue("layout",t),this.updateChartContents(),this.internalWidget?.onLayoutChange?.(t);let r=this.chartCount;setTimeout(()=>{if(this.store.get(O(this.prefix)))for(let i=r;i<this.chartCount;i++)this.areaByIndex(i)?.widgetReady();});}}reloadChart(){this.reloadId+=1;}updateChartContents(){if(this.chartCount>this._areaManagers.length)for(let e=this._areaManagers.length;e<this.chartCount;e++){let t=this._areaManagers[this.selectedIndex],r=t?.toJSON(),i=new V(this.settings,this,e,this.store,this.prefix,r);this._areaManagers[e]=i,this.selectedIndex!==e&&!t&&i.setSymbol(this.settings.tickerSymbol).catch(()=>{});}this.selectedIndex>=this.chartCount&&(this.selectedIndex=this.chartCount-1);}get settingsData(){return this.store.get(W(this.prefix))}getAllCharts(){return this.updateChartContents(),this._areaManagers.slice(0,this.chartCount)}};var H=class{storageId;constructor(e){this.storageId=e;}get settingsKey(){return `${this.storageId}.TvChart.Settings`}get shapesKey(){return `${this.storageId}.TvChart.Shapes`}getSettings(){let e=this.getLocalSettingsData(),t=this.getChartStoreData();return {layout:t?.layout,selectedIndex:t?.currentAreaIndex,chartType:t?.chartType,pinnedResolutions:t?.pinnedResolutions,areaContents:t?.areas?.map(i=>({resolution:i.resolution||i.period||"1m",chartStyle:i.chartStyle,symbol:i.symbol,tickerSymbol:i.tickerSymbol,rightOffset:i.rightOffset,barSpacing:i.barSpacing})),showDrawingToolbar:t?.drawing?.toolbarSwitch,drawing:e?.drawing?{...e.drawing,defaultStates:lodashEs.omit(e,["drawing","DrawingToolGroupLastUsedTool","riskRewardAvailableChanged","riskRewardRiskSizeChanged","drawingShapeTemplate"]),lastUsedTools:e.DrawingToolGroupLastUsedTool,riskRewardAvailableChanged:e.riskRewardAvailableChanged,riskRewardRiskSizeChanged:e.riskRewardRiskSizeChanged,drawingShapeTemplate:e.drawingShapeTemplate}:void 0}}getChartStoreData(){return this.getLocalData(this.storageId)}setChartStoreData(e){this.setLocalData(this.storageId,e);}async saveSettings(e){let t=this.getChartStoreData(),r={...t,layout:e.layout,currentAreaIndex:e.selectedIndex,chartType:e.chartType,pinnedResolutions:e.pinnedResolutions,areas:e.areaContents?.map((i,o)=>({...t?.areas?.[o],...i})),drawing:{...t?.drawing,toolbarSwitch:e.showDrawingToolbar}};this.setChartStoreData(r);}async getShapes(e){let t=this.getLocalShapesData();return !t||!t[e]?[]:Object.values(t[e])}async saveShapes(e,t){let r=this.getLocalShapesData()||{};r[e]={...r[e],...t},Object.keys(r[e]).forEach(i=>{r[e][i]||delete r[e][i];}),this.setLocalShapesData(r);}getLocalData(e){try{let t=localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}setLocalData(e,t){localStorage.setItem(e,JSON.stringify(t));}getLocalSettingsData(){return this.getLocalData(this.settingsKey)}getLocalShapesData(){return this.getLocalData(this.shapesKey)}setLocalShapesData(e){this.setLocalData(this.shapesKey,e);}};function de(a){let[e,t,r,i]=a.split("/");return {address:t,chain:e,quote:r,priceType:i}}function vt(a){return !a.quote||!a.priceType?`${a.chain}/${a.address}`:`${a.chain}/${a.address}/${a.quote}/${a.priceType}`}function he(a){return `${a.chain}/${a.address}`}var Tt={dark:"Dark",light:"Light"};function B(a){return Tt[a.toLowerCase()]??"Dark"}var qe={"1s":"1S","5s":"5S","15s":"15S","30s":"30S","1m":"1","5m":"5","15m":"15","30m":"30","1h":"60","4h":"240","12h":"720","1d":"1D"};function v(a="1m"){return qe[a]??qe["1m"]}var St={"1S":"1s","5S":"5s","15S":"15s","30S":"30s",1:"1m",5:"5m",15:"15m",30:"30m",60:"1h",240:"4h",720:"12h","1D":"1d"};function U(a){return St[a]??"1s"}var xt={en:"en","zh-CN":"zh","zh-TW":"zh"};function wt(a){return xt[a]??a}var Je={"1A":"s","2A":"2h","2B":"2v","3A":"3s","3B":"3h","3C":"3v","3D":"2-1","3E":"1-2","3F":"3r","4A":"4","4B":"4h","4C":"4v","4D":"4s","4E":"1-3","4F":"2-2","5A":"1-4","5B":"5s","5C":"2-3","5D":"5h","6A":"6","6B":"6c","6C":"6h","7A":"7h","8A":"8","8B":"8c","8C":"8h"};function z(a){return Je[a]??"s"}var Lt=Object.fromEntries(Object.entries(Je).map(([a,e])=>[e,a]));function be(a){return Lt[a]??"1A"}var Rt={"1s":1e3,"5s":5e3,"15s":15e3,"30s":3e4,"1m":6e4,"5m":3e5,"15m":9e5,"30m":18e5,"1h":36e5,"4h":144e5,"12h":432e5,"1d":864e5};function ge(a){let e=Rt[a];if(!e)throw new Error(`Invalid interval: ${a}`);return e}function fe(a,e){let t=a.toString().length>10?a:1e3*a;return Math.floor(t/e)*e}var $=class{prefix;store;supportedResolutions=S.map(v);supportedLayouts=pe;supportedChartTypes=["TradingView"];chartNames={};priceFormatterFactory=null;saveLoadAdapter;constructor(e,t){this.prefix=e,this.store=t,this.saveLoadAdapter=new H(e),this.store.set(D(e),e);}get layout(){return this.store.get(_(this.prefix))}get chartType(){return this.store.get(A(this.prefix))}get theme(){return this.store.get(E(this.prefix))}get reverseColor(){return this.store.get(ne(this.prefix))}get locale(){return this.store.get(ie(this.prefix))}get timezone(){return this.store.get(oe(this.prefix))}get tickerSymbol(){return this.store.get(se(this.prefix))}get storageId(){return this.store.get(D(this.prefix))}get backgroundColor(){return this.store.get(le(this.prefix))}get enabledFeatures(){return this.store.get(P(this.prefix))}get disabledFeatures(){return this.store.get(F(this.prefix))}updateValue(e,t){if(t==null)return;let i={layout:()=>this.store.set(_(this.prefix),t),chartType:()=>this.store.set(A(this.prefix),t),theme:()=>this.store.set(E(this.prefix),t),reverseColor:()=>this.store.set(ne(this.prefix),t),locale:()=>this.store.set(ie(this.prefix),t),timezone:()=>this.store.set(oe(this.prefix),t),tickerSymbol:()=>this.store.set(se(this.prefix),t),storageId:()=>this.store.set(D(this.prefix),t),backgroundColor:()=>this.store.set(le(this.prefix),t),enabledFeatures:()=>this.store.set(P(this.prefix),t),disabledFeatures:()=>this.store.set(F(this.prefix),t)}[e];i&&i();}isFeatureEnabled(e){return !this.disabledFeatures.includes(e)&&this.enabledFeatures.includes(e)||ye.includes(e)}setFeature(e,t){this.resetFeature(e),t?this.store.set(P(this.prefix),[...this.enabledFeatures,e]):this.store.set(F(this.prefix),[...this.disabledFeatures,e]);}resetFeature(e){this.store.set(P(this.prefix),this.enabledFeatures.filter(t=>t!==e)),this.store.set(F(this.prefix),this.disabledFeatures.filter(t=>t!==e));}get enableMultiCharts(){return this.isFeatureEnabled("multi_charts")}get enableCreateVolumeIndicatorByDefault(){return this.isFeatureEnabled("create_volume_indicator_by_default")}get enableHideDrawingToolsByDefault(){return this.isFeatureEnabled("hide_drawing_tools_by_default")}get enableLegendSeriesTitle(){return this.isFeatureEnabled("legend_series_title")}get enableLegendVolume(){return this.isFeatureEnabled("legend_volume")}get enableTimeframesToolbar(){return this.isFeatureEnabled("timeframes_toolbar")}get enableVolumeForceOverlay(){return this.isFeatureEnabled("volume_force_overlay")}sub(e,t){let i={layout:_(this.prefix),chartType:A(this.prefix),theme:E(this.prefix)}[e];return i?this.store.sub(i,t):()=>{}}};var q=class{datafeed;cache=new Map;pendingRequests=new Map;constructor(e){this.datafeed=e;}async resolveSymbolInfo(e){return this.datafeed.resolveSymbol(e)}async resolveSymbolInfos(e){return e.filter(r=>!this.cache.has(r)&&!this.pendingRequests.has(r)).forEach(r=>{let i=this.resolveSymbolInfo(r);i.then(o=>{o&&this.cache.set(r,o);}).catch(()=>{}).finally(()=>this.pendingRequests.delete(r)),this.pendingRequests.set(r,i);}),await Promise.all(e.filter(r=>this.pendingRequests.has(r)).map(r=>this.pendingRequests.get(r))),e.map(r=>this.cache.get(r)??null).filter(r=>r!==null)}getSymbolInfo(e){return this.resolveSymbolInfo(e).catch(t=>{console.error("ChartSymbolResolver.getSymbolInfo",t);}),this.cache.get(e)??null}};var Ce=({initConfig:a,children:e})=>{let{chartManager:t,chartSettings:r}=d(),[,i]=react.useState(false);return react.useEffect(()=>{t.initialized||(r.updateValue("tickerSymbol",a.tickerSymbol),r.updateValue("theme",a.theme),r.updateValue("reverseColor",a.reverseColor),r.updateValue("layout",a.layout),r.updateValue("chartType",a.chartType),r.updateValue("timezone",a.timezone),r.updateValue("locale",a.locale),r.updateValue("backgroundColor",a.backgroundColor),r.updateValue("storageId",a.storageId),r.updateValue("enabledFeatures",a.enabledFeatures),r.updateValue("disabledFeatures",a.disabledFeatures),a.chartNames&&(r.chartNames=a.chartNames),a.priceFormatterFactory&&(r.priceFormatterFactory=a.priceFormatterFactory),a.supportedResolutions&&(r.supportedResolutions=a.supportedResolutions),a.supportedLayouts&&(r.supportedLayouts=a.supportedLayouts),a.supportedChartTypes&&(r.supportedChartTypes=a.supportedChartTypes),t.datafeed=a.datafeed,t.symbolResolver=new q(a.datafeed));},[t,r,a]),react.useEffect(()=>(t.init().then(()=>i(true)).catch(o=>{console.error("TradingViewConfig chartManager init error",o);}),()=>{t.destroy();}),[t]),t.initialized?jsxRuntime.jsx(jsxRuntime.Fragment,{children:e}):null};var Ye=react.createContext(null);function d(){let a=react.useContext(Ye);if(!a)throw new Error("useTvChartContext must be used within TradingViewProvider");return a}function kt(){return d().chartManager}function Et(){return d().prefix}var ce=class{setting;chartManager;constructor(e,t){this.setting=e,this.chartManager=t;}get internalWidget(){return this.chartManager.internalWidget}chartCount(){return this.chartManager.chartCount}setActiveChart(e){e<this.chartCount()&&(this.chartManager.selectedIndex=e);}layout(){return this.setting.layout}setLayout(e){this.chartManager.setLayout(e);}theme(){return this.setting.theme}setTheme(e){this.chartManager.setTheme(e);}setChartType(e){this.chartManager.setChartType(e);}getSetting(){return this.setting}getChartManager(){return this.chartManager}},ve=react.forwardRef(({children:a,initConfig:e,widgetConstructor:t,libraryPath:r,customCssUrl:i},o)=>{let s=jotai.useStore(),n=e.storageId,h=react.useMemo(()=>new $(n,s),[n,s]),u=react.useMemo(()=>new N(n,s,h),[n,s,h]),c=react.useMemo(()=>new ce(h,u),[h,u]);react.useImperativeHandle(o,()=>c,[c]);let m=react.useMemo(()=>({prefix:n,chartSettings:h,chartManager:u,widgetConstructor:t,libraryPath:r,customCssUrl:i}),[n,h,u,t,r,i]);return jsxRuntime.jsx(Ye.Provider,{value:m,children:jsxRuntime.jsx(Ce,{initConfig:e,children:a})})});var Te=react.memo(()=>{let{prefix:a,chartManager:e}=d(),t=jotai.useAtomValue(M(a)),r=react.useCallback(()=>{e.fullscreen=!e.fullscreen;},[e]);return jsxRuntime.jsx("button",{type:"button",onClick:r,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:t?"Exit fullscreen":"Fullscreen",children:t?"Exit":"Fullscreen"})});var Qe=react.createContext(null);function J(){let a=react.useContext(Qe);if(!a)throw new Error("useTvChartToolbarContext must be used within TradingViewToolbarProvider");return a}var xe=({children:a})=>{let{prefix:e,chartManager:t}=d(),r=jotai.useAtomValue(f(e)),i=jotai.useAtomValue(y(e)),o=react.useMemo(()=>i.length?t.areaByIndex(r):null,[t,r,i]),s=react.useMemo(()=>o?.symbolInfo??null,[o]),n=react.useMemo(()=>({activeAreaManager:o,symbolInfo:s}),[o,s]);return jsxRuntime.jsx(Qe.Provider,{value:n,children:a})};var Jt={0:"Bars",1:"Candles",2:"Line",3:"Area",8:"Heiken Ashi",9:"Hollow",10:"Baseline"},Gt=[1,0,2,3,9,8,10],we=react.memo(()=>{let{prefix:a}=d(),{activeAreaManager:e}=J(),t=jotai.useAtomValue(y(a)),r=jotai.useAtomValue(f(a)),i=t[r]?.chartStyle??1,o=react.useCallback(s=>{let n=parseInt(s.target.value,10);e?.setChartStyle(n);},[e]);return jsxRuntime.jsx("select",{value:i,onChange:o,className:"text-xs bg-transparent text-muted-foreground hover:text-foreground cursor-pointer border-none outline-none px-1 py-0.5",title:"K-line style",children:Gt.map(s=>jsxRuntime.jsx("option",{value:s,children:Jt[s]??s},s))})});var Le=react.memo(()=>{let{chartManager:a}=d(),e=react.useCallback(()=>{a.internalWidget?.openIndicatorSettingsDialog();},[a]);return jsxRuntime.jsx("button",{type:"button",onClick:e,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:"Indicators",children:"Indicators"})});var Re=react.memo(()=>{let{chartManager:a}=d(),e=react.useCallback(()=>{a.internalWidget?.openSettingsDialog();},[a]);return jsxRuntime.jsx("button",{type:"button",onClick:e,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:"Chart settings",children:"Settings"})});var Me=react.memo(()=>{let{prefix:a}=d(),{activeAreaManager:e}=J(),t=jotai.useAtomValue(x(a)),r=jotai.useAtomValue(y(a)),i=jotai.useAtomValue(f(a)),o=r[i]?.resolution,s=react.useCallback(n=>{e?.setResolution(n);},[e]);return jsxRuntime.jsx("div",{className:"flex items-center gap-0.5",children:t.map(n=>jsxRuntime.jsx("button",{type:"button",onClick:()=>s(n),className:`px-2 py-0.5 text-xs rounded cursor-pointer transition-colors ${o===n?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:n},n))})});var _e=react.memo(()=>{let{chartManager:a}=d(),e=react.useCallback(async()=>{try{let t=await a.internalWidget?.takeClientScreenshot();if(!t)return;let r=document.createElement("a");r.download=`chart-${Date.now()}.png`,r.href=t.toDataURL("image/png"),r.click();}catch(t){console.error("TradingViewSnapshot",t);}},[a]);return jsxRuntime.jsx("button",{type:"button",onClick:e,className:"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors",title:"Take snapshot",children:"Snapshot"})});var Pe=react.memo(({children:a,prefix:e,suffix:t,showResolutions:r=true,showKlineStyleSelect:i=true,showOpenIndicator:o=true,showOpenSettings:s=true,showFullscreen:n=true,showSnapshot:h=true})=>jsxRuntime.jsx(xe,{children:jsxRuntime.jsxs("div",{className:"flex items-center gap-1 px-2 py-1 border-b border-border min-h-[36px] flex-shrink-0",children:[e,a??jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[r&&jsxRuntime.jsx(Me,{}),jsxRuntime.jsxs("div",{className:"flex items-center gap-0.5 ml-auto",children:[i&&jsxRuntime.jsx(we,{}),o&&jsxRuntime.jsx(Le,{}),s&&jsxRuntime.jsx(Re,{}),h&&jsxRuntime.jsx(_e,{}),n&&jsxRuntime.jsx(Te,{})]})]}),t]})}));var G=class{settings;chartManager;bridge;chartIndex;constructor(e,t,r,i){this.settings=e,this.chartManager=t,this.bridge=r,this.chartIndex=i;}get chartAreaManager(){return this.chartManager.areaByIndex(this.chartIndex)}get widget(){return this.bridge.getWidget()}get chartWidget(){return this.widget?.chart(this.chartIndex)??null}setChartStyle(e){this.chartWidget?.setChartType(e);}getChartStyle(){return this.chartWidget?.chartType()??1}handleSymbolChange(e,t){return this.bridge.asyncWidgetMethodContext((r,i)=>{r.chart(this.chartIndex).setSymbol(e,{dataReady:()=>i(),doNotActivateChart:false});})}handleResolutionChange(e,t){return this.bridge.asyncWidgetMethodContext((r,i)=>{let o=r.chart(this.chartIndex);o.dataReady(()=>{o.setResolution(v(e),{dataReady:i,doNotActivateChart:true}).catch(()=>{});});})}setPrecision(e){this.widget?.applyOverrides({"mainSeriesProperties.minTick":e===null?"default":`${Math.pow(10,e)},1,false`});}async dataReady(){if(await this.bridge.onReady(),!this.chartWidget)throw Error("ChartWidget: chartWidget is null");return new Promise(e=>{this.chartWidget?.dataReady(()=>setTimeout(e));})}timeScaleWidth(){return this.chartWidget?.getTimeScale()?.width()??NaN}rightOffset(){return this.chartWidget?.getTimeScale()?.rightOffset()??NaN}setRightOffset(e){this.chartWidget?.getTimeScale()?.setRightOffset(e);}barSpacing(){return this.chartWidget?.getTimeScale()?.barSpacing()??NaN}setBarSpacing(e){this.chartWidget?.getTimeScale()?.setBarSpacing(e);}};var K=class{settings;chartManager;bridge;constructor(e,t,r){this.settings=e,this.chartManager=t,this.bridge=r;}get widget(){return this.bridge.getWidget()}chartByIndex(e){return new G(this.settings,this.chartManager,this.bridge,e)}activeChart(){let e=this.widget?.activeChartIndex();return e===void 0?void 0:this.chartByIndex(e)}openIndicatorSettingsDialog(){this.widget?.activeChart().executeActionById("insertIndicator");}openSettingsDialog(){this.widget?.activeChart().executeActionById("chartProperties");}takeClientScreenshot(){return this.widget?.takeClientScreenshot()}onLayoutChange(e){this.widget?.setLayout(z(e));}async onThemeChange(e,t){let r=B(e);await this.widget?.changeTheme(r,{disableUndo:true}),this.bridge.applyColorPaletteOverrides();}};var Y=class{listeners=new Map;on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{this.listeners.get(e)?.delete(t);}}emit(e,t){this.listeners.get(e)?.forEach(r=>r(t));}off(e,t){this.listeners.get(e)?.delete(t);}clear(){this.listeners.clear();}};var X=class{settings;chartManager;bridge;abortController=new AbortController;constructor(e,t,r){this.settings=e,this.chartManager=t,this.bridge=r;}toJSON(){return null}async onReady(e){setTimeout(()=>{e({supported_resolutions:S.map(v),supports_marks:true,exchanges:[]});}),await this.chartManager.datafeed?.onReady({setting:this.settings,chartManager:this.chartManager,instance:this.bridge});}destroy(){this.abortController.abort();}async resolveSymbol(e,t,r,i){try{let o=await this.chartManager.datafeed?.resolveSymbol(e,i);o&&t(o);}catch(o){console.error("ChartDataFeed.resolveSymbol",o),r(o);}}async getBars(e,t,r,i,o){try{let s=await this.chartManager.datafeed?.getBars(e,t,r);s&&i(s,{noData:s.length===0});}catch(s){console.error("ChartDataFeed.getBars",s),o(s);}}subscribeBars(e,t,r,i,o){this.chartManager.datafeed?.subscribeBars(e,t,r,i,o);}unsubscribeBars(e){this.chartManager.datafeed?.unsubscribeBars(e);}async getMarks(e,t,r,i,o){this.chartManager.datafeed?.getMarks?.(e,t,r,i,o);}getQuotes(e,t,r){t(e.map(i=>({s:"ok",n:i,v:{}})));}subscribeQuotes(e,t,r,i){}unsubscribeQuotes(e){}};var Q=class{settings;chartManager;bridge;data;drawings;constructor(e,t,r){this.settings=e,this.chartManager=t,this.bridge=r,this.data=null,this.drawings=null,this.loadDataFromLocalStorage();}get layoutId(){return this.settings.storageId}get shouldResetColorPalette(){let e=this.data?.theme,t=this.data?.reverseColor;return e!==this.settings.theme||t!==this.settings.reverseColor}toJSON(){return null}getAllCharts(){return new Promise(e=>{let t=[];this.data&&t.push({id:this.data.id,name:this.data.name,symbol:this.data.symbol,resolution:this.data.resolution,timestamp:this.data.timestamp}),e(t);})}removeChart(e){throw Error("Method not implemented.")}async saveChart(e){return this.data={...e,theme:this.settings.theme,reverseColor:this.settings.reverseColor,id:this.layoutId,timestamp:0},this.saveDataToLocalStorage(),this.data.id}getChartContent(e){return new Promise(t=>{let r=JSON.parse(this.data.content),i=JSON.parse(r.charts_symbols),o=JSON.parse(r.content);t(JSON.stringify({...r,chart_symbols:JSON.stringify(i),content:JSON.stringify(o)}));})}async saveLineToolsAndGroups(e,t,r){this.drawings=this.drawings||{data:{},timestamp:0},this.drawings.data=this.drawings.data||{},this.drawings.data[t]=this.drawings.data[t]||{};try{if(!r.sources)return;for(let[i,o]of r.sources)if(!o||!o.symbol||!o.state||Object.keys(o.state).length===0||i.includes("/"))o===null&&delete this.drawings.data[t][i];else {let{address:s,chain:n}=de(o.symbol),h=he({address:s,chain:n}),u={...o,symbol:h,id:o.id.indexOf("/")>0?o.id.split("/")[0]:o.id};this.drawings.data[t][i]=u;}this.saveDataToLocalStorage();}catch(i){console.error("saveLineToolsAndGroups",i);}}async loadLineToolsAndGroups(e,t,r,i){if(!i?.symbol||!this.drawings?.data?.[t])return null;let o=i.symbol,{address:s,chain:n}=de(o),h=he({address:s,chain:n}),u=lodashEs.uniqBy(Object.values(lodashEs.cloneDeep(this.drawings.data[t])).filter(c=>c.symbol===h),"id");try{return {sources:new Map(u.map(c=>{let m=lodashEs.cloneDeep({...c,symbol:o});return [m.id,m]}))}}catch(c){return console.error("ChartSaveLoadAdapter.loadLineToolsAndGroups",c),null}}getLayoutKey(e){return `charts.tradingview.data.${e}`}getDrawingKey(e){return `charts.tradingview.drawing.${e}`}loadDataFromLocalStorage(){let e=this.getLayoutKey(this.layoutId),t=this.getDrawingKey(this.layoutId),r=localStorage.getItem(e),i=localStorage.getItem(t);if(r)try{let o=JSON.parse(r),s=JSON.parse(o.content);o.content=JSON.stringify(s),this.data=o;}catch(o){console.error("ChartSaveLoadAdapter loadDataFromLocalStorage parse layout error",o);}if(i)try{this.drawings=JSON.parse(i);}catch(o){console.error("ChartSaveLoadAdapter loadDataFromLocalStorage parse drawing error",o);}}saveDataToLocalStorage(){let e=this.getLayoutKey(this.layoutId),t=this.getDrawingKey(this.layoutId),r=Math.round(Date.now()/1e3);this.data&&(this.data.timestamp=r,localStorage.setItem(e,JSON.stringify(this.data))),this.drawings&&(this.drawings.timestamp=r,localStorage.setItem(t,JSON.stringify(this.drawings)));}};var Fe="trading.chart.proterty",Z=class{storagePrefix;initialSettings;constructor(e,t,r){this.storagePrefix=`tradingview.${e.storageId}.`,this.initialSettings={};for(let o=0;o<localStorage.length;o++){let s=localStorage.key(o);if(s&&s.startsWith(this.storagePrefix)){let n=s.slice(this.storagePrefix.length);this.initialSettings[n]=localStorage.getItem(s);}}let i={noConfirmEnabled:1};if(this.initialSettings[Fe])try{let o=JSON.parse(this.initialSettings[Fe]);Object.assign(i,o),Object.assign(i,{noConfirmEnabled:!0});}catch(o){console.error("ChartSettingsAdapter: failed to parse chart settings",o);}this.initialSettings[Fe]=JSON.stringify(i);}toJSON(){return null}removeValue(e){delete this.initialSettings[e],localStorage.removeItem(`${this.storagePrefix}${e}`);}setValue(e,t){this.initialSettings[e]=t,localStorage.setItem(`${this.storagePrefix}${e}`,t);}};var j=class{settings;chartManager;WidgetCtor;moduleInstances=new Map;symbolIntervalSubs=new Map;abortController=new AbortController;widgetReadyPromise=null;readyPromise=null;widget=null;container=null;ready=false;layoutReady=true;events=new Y;libraryPath;customCssUrl;constructor(e,t,r,i){this.settings=e,this.chartManager=t,this.WidgetCtor=r,this.libraryPath=i?.libraryPath??"/static/charting_library/",this.customCssUrl=i?.customCssUrl??"custom-styles.css",this.initModules();}getWidget(){return this.widget}async init(e){if(this.widgetReadyPromise)throw new Error("ChartWidgetBridge already initialized.");let t=this.getWidgetOptions();this.container=e,this.widget=new this.WidgetCtor({...t,container:e});let r=new Promise(i=>{this.widget?.onChartReady(()=>i());});this.widgetReadyPromise=r,this.readyPromise=r.then(()=>(this.ready=true,this.handleChartReady())).catch(i=>{console.warn("ChartWidgetBridge widget ready failed",i);}),this.moduleInstances.forEach((i,o)=>{try{i.init?.call(i);}catch(s){console.warn(`ChartWidgetBridge init module ${o}`,s);}}),await Promise.race([this.readyPromise,new Promise((i,o)=>setTimeout(o,6e4,new Error("ChartWidgetBridge init timeout")))]);}async destroy(){this.moduleInstances.forEach(e=>e.destroy?.call(e)),this.symbolIntervalSubs.forEach(e=>e()),this.symbolIntervalSubs.clear(),this.events.clear(),this.abortController.abort(),this.ready=false,this.widgetReadyPromise=null,this.readyPromise=null,this.widget?.remove(),this.widget=null;}async onReady(){return new Promise((e,t)=>{this.widget?this.widget.onChartReady(()=>this.readyPromise?.then(e).catch(t)):t(Error("cannot call `onReady` before `init`"));})}async asyncWidgetMethodContext(e){return new Promise((t,r)=>{if(!this.widgetReadyPromise){r(new Error("ChartWidgetBridge: widget not ready"));return}let i=this.widgetReadyPromise.then(()=>this.waitForLayout()),o=this.abortController.signal,s=()=>r(o.reason);o.addEventListener("abort",s),i.then(()=>e(this.widget,t)).catch(r).finally(()=>o.removeEventListener("abort",s));})}getModule(e){return this.moduleInstances.get(e)}applyColorPaletteOverrides(){this.widget?.applyOverrides(this.getColorPaletteOverrides()),this.widget?.applyStudiesOverrides(this.getColorPaletteStudiesOverrides());}getWidgetOptions(){let e=["header_widget","legend_inplace_edit","display_market_status","save_shortcut","show_interval_dialog_on_key_press","symbol_info","symbol_search_hot_key","uppercase_instrument_names","show_symbol_logo_in_legend","show_symbol_logo_for_compare_studies","drawing_templates"],t=["determine_first_data_request_size_using_visible_range","request_only_visible_range_on_reset","show_exchange_logos","show_symbol_logos","dont_show_boolean_study_arguments","hide_last_na_study_output","hide_right_toolbar","seconds_resolution","saveload_separate_drawings_storage","volume_force_overlay","create_volume_indicator_by_default","two_character_bar_marks_labels"];return this.settings.enableHideDrawingToolsByDefault&&t.push("hide_left_toolbar_by_default"),this.settings.enableTimeframesToolbar||e.push("timeframes_toolbar"),this.settings.enableCreateVolumeIndicatorByDefault||e.push("create_volume_indicator_by_default"),this.settings.enableVolumeForceOverlay||e.push("volume_force_overlay"),{container:"",autosize:true,debug:false,load_last_chart:true,auto_save_delay:1,timezone:this.localTimezone,library_path:this.libraryPath,custom_css_url:this.customCssUrl,theme:B(this.settings.theme),custom_font_family:window.getComputedStyle(document.body).fontFamily,symbol:this.chartManager.activeArea?.tickerSymbol,interval:v(this.chartManager.activeArea?.resolution),locale:this.settings.locale,datafeed:this.getModule("datafeed"),save_load_adapter:this.getModule("saveLoadAdapter"),settings_adapter:this.getModule("settingsAdapter"),custom_formatters:{priceFormatterFactory:this.settings.priceFormatterFactory?(r,i)=>this.settings.priceFormatterFactory(r,i):()=>null},overrides:{...this.getSettingsOverrides(),...this.getColorPaletteOverrides()},studies_overrides:this.getColorPaletteStudiesOverrides(),disabled_features:e,enabled_features:t,supported_resolutions:S.map(v)}}async handleChartReady(){let e=z(this.settings.layout);e!==this.widget?.layout()&&await this.waitForLayout(e),this.widget?.setActiveChart(this.chartManager.selectedIndex),this.getModule("saveLoadAdapter")?.shouldResetColorPalette&&(await this.widget?.changeTheme(B(this.settings.theme),{disableUndo:true}),this.applyColorPaletteOverrides()),this.widget?.subscribe("onAutoSaveNeeded",this.onAutoSaveNeeded.bind(this)),this.widget?.subscribe("activeChartChanged",this.activeChartChanged.bind(this)),this.widget?.subscribe("layout_about_to_be_changed",this.layoutWillChange.bind(this)),this.widget?.subscribe("layout_changed",this.layoutChanged.bind(this)),this.syncChartsChanges(),this.subscribeChartsChanges(),this.installEventHooks(),this.resetTimezone();}onAutoSaveNeeded(){try{this.widget?.saveChartToServer(void 0,void 0,{defaultChartName:"DEFAULT"});}catch(e){console.warn("ChartWidgetBridge.onAutoSaveNeeded",e);}}activeChartChanged(e){this.chartManager.selectedIndex=e,this.chartManager.settings.saveLoadAdapter.saveSettings(this.chartManager.settingsData).catch(console.error);}layoutWillChange(e){this.layoutReady=false,this.chartManager.setLayout(be(e));}layoutChanged(){this.layoutReady=true,this.syncChartsChanges(),this.subscribeChartsChanges(),this.widget?.unloadUnusedCharts(),this.widget?.saveChartToServer();}syncChartsChanges(){this.widget?.symbolSync()?.setValue(false),this.widget?.intervalSync()?.setValue(false);let e=this.widget?.chartsCount()??0;for(let t=0;t<e;t++){let r=this.chartManager.areaByIndex(t),i=this.widget.chart(t);i.setSymbol(r?.tickerSymbol??"",{doNotActivateChart:true}),i.setResolution(v(r?.resolution),{doNotActivateChart:true});}}subscribeChartsChanges(){let e=this.widget?.chartsCount()??0;this.symbolIntervalSubs.forEach((t,r)=>{parseInt(r)>=e&&(t(),this.symbolIntervalSubs.delete(r));});for(let t=0;t<e;t++){if(this.symbolIntervalSubs.has(`${t}`))continue;let r=this.chartManager.areaByIndex(t),i=this.widget.chart(t);i.getPanes().forEach(u=>u.getMainSourcePriceScale()?.setAutoScale(true));let o=i.onSymbolChanged(),s=i.onIntervalChanged(),n=()=>{this.events.emit("symbolChanged",[t,i.symbol()]),r?.setSymbol(i.symbol()).catch(()=>{}),this.onAutoSaveNeeded();},h=u=>{let c=U(u);this.events.emit("resolutionChanged",[t,c]),r?.setResolution(c).catch(()=>{});};o.subscribe(r,n),s.subscribe(r,h),this.symbolIntervalSubs.set(`${t}`,()=>{o.unsubscribe(r,n),s.unsubscribe(r,h);});}}installEventHooks(){let e=this.container?.lastElementChild,t=e?.contentWindow?.document;if(t&&(t.addEventListener("click",()=>e?.click()),t.defaultView?.MutationObserver)){let r=new WeakSet,i=t.querySelector(".layout__area--center");if(i){let o=()=>{i.querySelectorAll(".chart-container").forEach((s,n)=>{r.has(s)||(r.add(s),ze.forEach(h=>{s.addEventListener(h,u=>this.events.emit("domEvent",[n,h,u]),{passive:true});}));});};new t.defaultView.MutationObserver(o).observe(i,{childList:true}),o();}}}resetTimezone(){try{let e=this.widget?.chartsCount()??0;for(let t=0;t<e;t++)this.widget?.chart(t)?.getTimezoneApi()?.setTimezone(this.localTimezone);}catch(e){console.error("ChartWidgetBridge: Reset timezone",e);}}get localTimezone(){return Intl.DateTimeFormat().resolvedOptions().timeZone}async waitForLayout(e){if(!this.widget||this.layoutReady&&!e)return;let t;return new Promise(i=>{t=i,this.widget.subscribe("layout_changed",i),e&&this.widget.setLayout(e);}).finally(()=>{this.widget.unsubscribe("layout_changed",t);})}getSettingsOverrides(){return {"mainSeriesProperties.minTick":"default","paneProperties.legendProperties.showSeriesTitle":this.settings.enableLegendSeriesTitle}}getColorPaletteOverrides(){let e=this.settings.theme==="dark"?C.card:$e.card;return {"paneProperties.background":C.chartBg,"paneProperties.backgroundType":"solid",volumePaneSize:"medium","mainSeriesProperties.candleStyle.upColor":C.increase,"mainSeriesProperties.barStyle.upColor":C.increase,"mainSeriesProperties.columnStyle.upColor":C.increase,"mainSeriesProperties.candleStyle.downColor":C.decrease,"mainSeriesProperties.barStyle.downColor":C.decrease,"mainSeriesProperties.columnStyle.downColor":C.decrease,"mainSeriesProperties.candleStyle.borderUpColor":C.increase,"mainSeriesProperties.candleStyle.borderDownColor":C.decrease,"mainSeriesProperties.candleStyle.wickUpColor":C.increase,"mainSeriesProperties.candleStyle.wickDownColor":C.decrease,"linetoolorder.bodyBackgroundColor":e,"linetoolorder.bodyBackgroundTransparency":0}}getColorPaletteStudiesOverrides(){return {"volume.volume.color.0":C.decrease,"volume.volume.color.1":C.increase,"volume.volume.transparency":80}}initModules(){Object.entries({datafeed:X,saveLoadAdapter:Q,settingsAdapter:Z}).forEach(([t,r])=>{this.moduleInstances.set(t,new r(this.settings,this.chartManager,this));});}};var Ve=react.memo(()=>null);var ke=react.forwardRef(({onReady:a},e)=>{let{chartManager:t,chartSettings:r,widgetConstructor:i,libraryPath:o,customCssUrl:s}=d(),n=react.useRef(a),[h,u]=react.useState(),[c,m]=react.useState(null),[ee,Oe]=react.useState(false);return react.useEffect(()=>{ee&&n.current&&setTimeout(n.current);},[ee]),react.useImperativeHandle(e,()=>h,[h]),react.useEffect(()=>{if(!c)return;let me=new j(r,t,i,{libraryPath:o,customCssUrl:s}),yt=new K(r,t,me);return u(yt),me.init(c).then(()=>Oe(true)).catch(pt=>{console.error("TradingViewWidgetContainer: failed to init bridge",pt);}),()=>{me.destroy().then(()=>{u(void 0),Oe(false);}).catch(()=>{console.error("TradingViewWidgetContainer: failed to destroy bridge");});}},[c,r,t,i,o,s]),jsxRuntime.jsxs("div",{className:"w-full h-full",children:[jsxRuntime.jsx(Ve,{}),jsxRuntime.jsx("div",{id:"tv_chart_container",className:"w-full h-full",ref:m})]})});var Ee=react.memo(({onReady:a})=>{let{chartManager:e,chartSettings:t}=d(),r=react.useMemo(()=>`${t.timezone}_${e.reloadId}`,[t.timezone,e.reloadId]);react.useLayoutEffect(()=>{e.setLoading(true);},[e,t.chartType,r]);let i=react.useCallback(()=>{a?.(),e.onInternalWidgetReady(),e.setLoading(false);},[e,a]);return jsxRuntime.jsx("div",{className:"flex-1 w-full overflow-hidden",children:jsxRuntime.jsx(ke,{onReady:i,ref:o=>e.setInternalWidget(o??null)})})});var vr=react.memo(({toolbar:a,loadingOverlay:e,onReady:t,children:r})=>{let{prefix:i}=d(),o=jotai.useAtomValue(I(i));return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[a!==false&&jsxRuntime.jsx(Pe,{...a||{}}),jsxRuntime.jsxs("div",{className:"relative flex-1 w-full overflow-hidden",children:[o&&e&&jsxRuntime.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-background/80",children:e}),jsxRuntime.jsx(Ee,{onReady:t})]}),r]})}),Tr=react.forwardRef(({initConfig:a,widgetConstructor:e,libraryPath:t,customCssUrl:r,toolbar:i,loadingOverlay:o,onReady:s,children:n,className:h},u)=>jsxRuntime.jsx("div",{className:`flex flex-col w-full h-full ${h??""}`,children:jsxRuntime.jsx(ve,{ref:u,initConfig:a,widgetConstructor:e,libraryPath:t,customCssUrl:r,children:jsxRuntime.jsx(vr,{toolbar:i,loadingOverlay:o,onReady:s,children:n})})}));var wr=react.memo(({index:a})=>{let{prefix:e}=d(),t=jotai.useAtomValue(y(e)),r=jotai.useAtomValue(f(e)),o=t[a??r];return o?jsxRuntime.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[jsxRuntime.jsx("span",{className:"font-medium text-foreground",children:o.tickerSymbol||o.symbol}),jsxRuntime.jsx("span",{children:o.resolution})]}):null});function Rr(){return d().chartManager}function Mr(){let{prefix:a,chartManager:e}=d(),t=jotai.useAtomValue(f(a)),r=jotai.useAtomValue(y(a));return react.useMemo(()=>r.length?e.areaByIndex(t):null,[e,t,r])}function Ar(){let{prefix:a,chartManager:e}=d(),t=jotai.useAtomValue(f(a)),i=jotai.useAtomValue(y(a))[t];return react.useMemo(()=>i?.tickerSymbol?e.symbolResolver?.getSymbolInfo(i.tickerSymbol)??null:null,[e,i?.tickerSymbol])}var ct=768;function mt(a,e=ct){return a>0&&a<e}function ht(a){try{return ge(a)}catch{return ge(U(a))}}function Pr(a){return a instanceof Date?a.getTime():a}function gt(a,e){let t={time:fe(Pr(a.time),e),open:a.open,high:a.high,low:a.low,close:a.close};return a.volume!==void 0&&(t.volume=a.volume),t}function ut(a,e){return `${a.ticker??a.name}:${e}`}var De=class{source;options;liveListeners=new Map;lastHistoryBarTime=new Map;liveGeneration=0;constructor(e,t={}){this.source=e,this.options=t;}isMobileViewport(e){return mt(e,this.options.mobileBreakpointPx)}async onReady(e){await this.options.onReady?.(e);}onDestroy(){for(let e of [...this.liveListeners.keys()])this.unsubscribeLiveBars(e);this.lastHistoryBarTime.clear(),this.options.onDestroy?.();}async resolveSymbol(e,t){return await this.options.resolveSymbol?.(e,t)??null}async getBars(e,t,r){return this.getHistoryBars(e,t,r)}subscribeBars(e,t,r,i,o){this.subscribeLiveBars(e,t,r,i,o);}unsubscribeBars(e){this.unsubscribeLiveBars(e);}getMarks(e,t,r,i,o){this.options.getMarks?.(e,t,r,i,o);}getFirstBarTime(e,t,r){return this.options.getFirstBarTime?.(e,t,r)??Promise.resolve()}async getHistoryBars(e,t,r){let i=await this.source.getHistory({symbolInfo:e,resolution:t,periodParams:r}),o=ht(t),s=(i??[]).map(n=>gt(n,o));if(s.length>0){let n=ut(e,t),h=Math.max(...s.map(c=>c.time)),u=this.lastHistoryBarTime.get(n)??0;h>u&&this.lastHistoryBarTime.set(n,h);}return s}subscribeLiveBars(e,t,r,i,o){this.unsubscribeLiveBars(i);let s=ut(e,t),n=ht(t),h=++this.liveGeneration;this.liveListeners.set(i,{symbolKey:s,lastBarTime:this.lastHistoryBarTime.get(s)??0,generation:h}),this.source.subscribe({symbolInfo:e,resolution:t,listenerGuid:i,onResetCacheNeededCallback:o},u=>{let c=this.liveListeners.get(i);if(!c||c.generation!==h)return;let m=gt(u,n),ee=Math.max(c.lastBarTime,this.lastHistoryBarTime.get(c.symbolKey)??0);m.time<ee||(c.lastBarTime=m.time,r(m));});}unsubscribeLiveBars(e){this.liveListeners.has(e)&&(this.liveListeners.delete(e),this.source.unsubscribe(e));}};exports.ALL_TV_CHART_RESOLUTIONS=S;exports.ChartAreaManager=V;exports.ChartDataFeed=X;exports.ChartLibraryWidget=K;exports.ChartManager=N;exports.ChartSaveLoadAdapter=Q;exports.ChartSettings=$;exports.ChartSettingsAdapter=Z;exports.ChartSettingsStore=H;exports.ChartSymbolResolver=q;exports.ChartWidget=G;exports.ChartWidgetBridge=j;exports.DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX=ct;exports.DEFAULT_TV_CHART_RESOLUTIONS=T;exports.ENABLED_TV_CHART_FEATURES=ye;exports.EventEmitter=Y;exports.SUPPORTED_TV_CHART_LAYOUTS=pe;exports.TV_CHART_THEME_COLORS=C;exports.TradingView=Tr;exports.TradingViewAreaTitle=wr;exports.TradingViewConfig=Ce;exports.TradingViewDatafeedAdapter=De;exports.TradingViewFullscreen=Te;exports.TradingViewKlineStyleSelect=we;exports.TradingViewLayout=Ve;exports.TradingViewOpenIndicator=Le;exports.TradingViewOpenSettings=Re;exports.TradingViewProvider=ve;exports.TradingViewResolutions=Me;exports.TradingViewSnapshot=_e;exports.TradingViewToolbar=Pe;exports.TradingViewToolbarProvider=xe;exports.TradingViewWidgetContainer=ke;exports.TradingViewWidgetProvider=Ee;exports.TvChartErrorResetType=Ue;exports.TvChartFeature=ae;exports.TvChartHandle=ce;exports.TvChartKlineStyle=re;exports.TvChartLayout=R;exports.TvChartPriceType=We;exports.TvChartQuoteType=Ne;exports.TvChartTheme=He;exports.TvChartType=te;exports.chartAreasFamily=y;exports.chartFullscreenFamily=M;exports.chartLoadingFamily=I;exports.chartPinnedResolutionsFamily=x;exports.chartSelectedIndexFamily=f;exports.chartShowDrawingToolbarFamily=w;exports.getTvChartLayoutReverse=be;exports.getTvChartLibraryLayout=z;exports.getTvChartLibraryLocale=wt;exports.getTvChartLibraryResolution=v;exports.getTvChartLibraryTheme=B;exports.getTvChartResolutionFrame=ge;exports.getTvChartResolutionReverse=U;exports.getTvChartTickTimestamp=fe;exports.isTvChartMobileViewport=mt;exports.parseSymbol=de;exports.settingsBackgroundColorFamily=le;exports.settingsChartTypeFamily=A;exports.settingsDataFamily=W;exports.settingsDisabledFeaturesFamily=F;exports.settingsEnabledFeaturesFamily=P;exports.settingsLayoutFamily=_;exports.settingsLocaleFamily=ie;exports.settingsReverseColorFamily=ne;exports.settingsStorageIdFamily=D;exports.settingsThemeFamily=E;exports.settingsTickerSymbolFamily=se;exports.settingsTimezoneFamily=oe;exports.stringifySymbol=vt;exports.stringifySymbolShort=he;exports.useActiveAreaManager=Mr;exports.useChartManager=Rr;exports.useSymbolInfo=Ar;exports.useTvChartContext=d;exports.useTvChartManager=kt;exports.useTvChartPrefix=Et;exports.useTvChartToolbarContext=J;exports.widgetReadyFamily=O;//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|