@liberfi.io/ui-tradingview 0.1.232 → 0.1.233
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.d.mts +11 -0
- package/dist/index.d.ts +11 -0
- 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 +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/types.ts","../src/lib/constants.ts","../src/lib/atoms.ts","../src/lib/ChartAreaManager.ts","../src/lib/ChartManager.ts","../src/lib/ChartSettingsStore.ts","../src/lib/utils.ts","../src/lib/ChartSettings.ts","../src/lib/ChartSymbolResolver.ts","../src/components/TradingViewConfig.tsx","../src/components/TradingViewProvider.tsx","../src/components/TradingViewFullscreen.tsx","../src/components/TradingViewToolbarProvider.tsx","../src/components/TradingViewKlineStyleSelect.tsx","../src/components/TradingViewOpenIndicator.tsx","../src/components/TradingViewOpenSettings.tsx","../src/components/TradingViewResolutions.tsx","../src/components/TradingViewSnapshot.tsx","../src/components/TradingViewToolbar.tsx","../src/lib/ChartWidget.ts","../src/lib/ChartLibraryWidget.ts","../src/lib/event-emitter.ts","../src/lib/ChartDataFeed.ts","../src/lib/ChartSaveLoadAdapter.ts","../src/lib/ChartSettingsAdapter.ts","../src/lib/ChartWidgetBridge.ts","../src/components/TradingViewLayout.tsx","../src/components/TradingViewWidgetContainer.tsx","../src/components/TradingViewWidgetProvider.tsx","../src/components/TradingView.tsx","../src/components/TradingViewAreaTitle.tsx","../src/hooks/useChartManager.ts","../src/hooks/useActiveAreaManager.ts","../src/hooks/useSymbolInfo.ts","../src/lib/TradingViewDatafeedAdapter.ts"],"names":["TvChartType","TvChartPriceType","TvChartQuoteType","TvChartKlineStyle","TvChartTheme","TvChartFeature","TvChartLayout","TvChartErrorResetType","ENABLED_TV_CHART_FEATURES","DEFAULT_TV_CHART_RESOLUTIONS","ALL_TV_CHART_RESOLUTIONS","SUPPORTED_TV_CHART_LAYOUTS","TV_CHART_INTERESTED_DOM_EVENTS","TV_CHART_THEME_COLORS","TV_CHART_LIGHT_THEME_COLORS","chartLoadingFamily","atomFamily","prefix","atom","chartFullscreenFamily","chartSelectedIndexFamily","chartPinnedResolutionsFamily","chartAreasFamily","chartShowDrawingToolbarFamily","settingsLayoutFamily","settingsChartTypeFamily","settingsThemeFamily","settingsLocaleFamily","settingsTimezoneFamily","settingsTickerSymbolFamily","settingsStorageIdFamily","settingsReverseColorFamily","settingsBackgroundColorFamily","settingsEnabledFeaturesFamily","settingsDisabledFeaturesFamily","widgetReadyFamily","settingsDataFamily","get","layout","chartType","selectedIndex","pinnedResolutions","showDrawingToolbar","areaContents","isEqual","ChartAreaManager","settings","manager","index","store","areaSettings","merged","patch","areas","current","key","value","chartStyle","symbol","promises","info","p","e","resolution","ChartManager","v","idx","areaStates","stored","pr","r","ac","area","save","debounce","data","a","loading","locale","timezone","focused","show","widget","theme","reverseColor","target","prevCount","i","currentArea","currentSettings","newArea","ChartSettingsStore","storageId","localSettings","chartStoreData","omit","newChartStoreData","updated","k","parseSymbol","chain","address","quote","priceType","stringifySymbol","stringifySymbolShort","THEME_MAP","getTvChartLibraryTheme","RESOLUTION_MAP","getTvChartLibraryResolution","RESOLUTION_MAP_REVERSE","getTvChartResolutionReverse","LOCALE_MAP","getTvChartLibraryLocale","LAYOUT_MAP","getTvChartLibraryLayout","LAYOUT_MAP_REVERSE","getTvChartLayoutReverse","RESOLUTION_FRAMES","getTvChartResolutionFrame","frame","getTvChartTickTimestamp","time","timeframe","timeInMs","ChartSettings","setter","feature","enabled","f","callback","ChartSymbolResolver","datafeed","symbols","s","promise","TradingViewConfig","initConfig","children","chartManager","chartSettings","useTvChartContext","setInitialized","useState","useEffect","jsx","Fragment","TvChartContext","createContext","ctx","useContext","useTvChartManager","useTvChartPrefix","TvChartHandle","setting","TradingViewProvider","forwardRef","widgetConstructor","libraryPath","customCssUrl","ref","useStore","useMemo","handle","useImperativeHandle","TradingViewFullscreen","memo","t","useTranslation","fullscreen","useAtomValue","handleToggle","useCallback","TvChartToolbarContext","useTvChartToolbarContext","TradingViewToolbarProvider","activeAreaManager","symbolInfo","KLINE_STYLE_LABEL_KEYS","DEFAULT_STYLES","TradingViewKlineStyleSelect","currentStyle","handleChange","style","TradingViewOpenIndicator","handleClick","TradingViewOpenSettings","TradingViewResolutions","currentResolution","TradingViewSnapshot","canvas","link","TradingViewToolbar","prefixSlot","suffix","showResolutions","showKlineStyleSelect","showOpenIndicator","showOpenSettings","showFullscreen","showSnapshot","jsxs","ChartWidget","bridge","prevSymbol","done","prevResolution","chart","precision","resolve","offset","spacing","ChartLibraryWidget","tvTheme","EventEmitter","event","listener","fn","ChartDataFeed","symbolName","onResolve","onError","extension","periodParams","onResult","bars","onTick","listenerGuid","onResetCacheNeededCallback","from","to","onDataCallback","onErrorCallback","n","fastSymbols","onRealtimeCallback","ChartSaveLoadAdapter","charts","content","chartsSymbols","_storageId","chartIndex","sourceId","source","saveSource","_tool","symbolToLoad","shortSymbol","loadedSources","uniqBy","cloneDeep","it","resultSource","layoutKey","drawingKey","drawing","parsed","parsedContent","now","CHART_SETTINGS_KEY","ChartSettingsAdapter","settingsKey","defaultChartSettings","ChartWidgetBridge","options","container","widgetReadyPromise","error","mod","name","_","reject","unsub","layoutReady","signal","handleAbort","disabledFeatures","enabledFeatures","minTick","chartCount","pane","symbolSub","intervalSub","onSymbolChanged","onIntervalChanged","interval","iframe","doc","seen","register","el","evt","count","handler","cardColor","Ctor","TradingViewLayout","TradingViewWidgetContainer","onReady","onReadyRef","useRef","setWidget","containerElement","setContainerElement","ready","setReady","libWidget","TradingViewWidgetProvider","renderId","useLayoutEffect","handleReady","TradingViewInner","toolbar","loadingOverlay","TradingView","className","TradingViewAreaTitle","useChartManager","useActiveAreaManager","useSymbolInfo","activeArea","DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX","isTvChartMobileViewport","widthPx","breakpointPx","getTimeframeMs","toNumericTime","toBar","candle","bar","historyKey","TradingViewDatafeedAdapter","candles","next","prev","symbolKey","generation","state","last"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n Bar,\n GetMarksCallback,\n LibrarySymbolInfo,\n Mark,\n PeriodParams,\n ResolutionString,\n SubscribeBarsCallback,\n SymbolResolveExtension,\n Timezone,\n} from \"./charting-library.types\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport enum TvChartType {\n TradingView = \"TradingView\",\n Original = \"Original\",\n}\n\nexport enum TvChartPriceType {\n Price = \"price\",\n MarketCap = \"market_cap\",\n}\n\nexport enum TvChartQuoteType {\n USD = \"USD\",\n SOL = \"SOL\",\n ETH = \"ETH\",\n TRX = \"TRX\",\n BNB = \"BNB\",\n}\n\nexport type TvChartResolution =\n | \"1s\"\n | \"5s\"\n | \"15s\"\n | \"30s\"\n | \"1m\"\n | \"5m\"\n | \"15m\"\n | \"30m\"\n | \"1h\"\n | \"4h\"\n | \"12h\"\n | \"1d\";\n\nexport enum TvChartKlineStyle {\n Bars = 0,\n Candles = 1,\n Line = 2,\n Area = 3,\n HeikenAshi = 8,\n HollowCandles = 9,\n Baseline = 10,\n HiLo = 12,\n Column = 13,\n LineWithMarkers = 14,\n Stepline = 15,\n HLCArea = 16,\n VolCandle = 19,\n Renko = 4,\n Kagi = 5,\n PointAndFigure = 6,\n LineBreak = 7,\n}\n\nexport enum TvChartTheme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\nexport enum TvChartFeature {\n HeaderWidget = \"header_widget\",\n HeaderCandleStyleMenu = \"header_candle_style_menu\",\n HeaderFullscreenButton = \"header_fullscreen_button\",\n MultiCharts = \"multi_charts\",\n CreateVolumeIndicatorByDefault = \"create_volume_indicator_by_default\",\n VolumeForceOverlay = \"volume_force_overlay\",\n HideDrawingToolsByDefault = \"hide_drawing_tools_by_default\",\n LegendSeriesTitle = \"legend_series_title\",\n LegendVolume = \"legend_volume\",\n TimeframesToolbar = \"timeframes_toolbar\",\n SaveDrawingToServer = \"save_drawing_to_server\",\n}\n\nexport enum TvChartLayout {\n Layout1A = \"1A\",\n Layout2A = \"2A\",\n Layout2B = \"2B\",\n Layout3A = \"3A\",\n Layout3B = \"3B\",\n Layout3C = \"3C\",\n Layout3D = \"3D\",\n Layout3E = \"3E\",\n Layout3F = \"3F\",\n Layout4A = \"4A\",\n Layout4B = \"4B\",\n Layout4C = \"4C\",\n Layout4D = \"4D\",\n Layout4E = \"4E\",\n Layout4F = \"4F\",\n Layout5A = \"5A\",\n Layout5B = \"5B\",\n Layout5C = \"5C\",\n Layout5D = \"5D\",\n Layout6A = \"6A\",\n Layout6B = \"6B\",\n Layout6C = \"6C\",\n Layout7A = \"7A\",\n Layout8A = \"8A\",\n Layout8B = \"8B\",\n Layout8C = \"8C\",\n}\n\n// ---------------------------------------------------------------------------\n// Symbol types\n// ---------------------------------------------------------------------------\n\nexport interface TvChartSymbol {\n chain: string;\n address: string;\n quote?: TvChartQuoteType;\n priceType?: TvChartPriceType;\n}\n\nexport interface TvChartSymbolChange {\n index?: number;\n tickerSymbol: string;\n libTickerSymbol: string;\n}\n\nexport interface TvChartSymbolInfo extends LibrarySymbolInfo {\n symbol: string;\n full_name: string;\n address: string;\n priceType: TvChartPriceType;\n quote: TvChartQuoteType;\n precision: number;\n}\n\n// ---------------------------------------------------------------------------\n// DataFeed module interface (injectable by consumer)\n// ---------------------------------------------------------------------------\n\n/**\n * Injectable history + live datafeed. Prefer {@link TradingViewDatafeedAdapter}\n * as the stable seam; ChartManager.datafeed remains this interface.\n */\nexport interface ITvChartDataFeedModule {\n onReady(options: {\n setting: ChartSettings;\n chartManager: ChartManager;\n instance: ChartWidgetBridge;\n }): Promise<void>;\n\n onDestroy(): void;\n\n resolveSymbol(\n symbolName: string,\n extension?: SymbolResolveExtension,\n ): Promise<LibrarySymbolInfo | null>;\n\n getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n ): Promise<Bar[]>;\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void;\n\n unsubscribeBars(listenerGuid: string): void;\n\n getMarks?(\n symbolInfo: LibrarySymbolInfo,\n from: number,\n to: number,\n onDataCallback: GetMarksCallback<Mark>,\n resolution: ResolutionString,\n ): void;\n\n getFirstBarTime?(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n options: { timezone: Timezone },\n ): Promise<void>;\n}\n\nexport interface ITvChartSymbolResolver {\n resolveSymbolInfo(symbol: string): Promise<LibrarySymbolInfo | null>;\n resolveSymbolInfos(symbols: string[]): Promise<LibrarySymbolInfo[]>;\n getSymbolInfo(symbol: string): LibrarySymbolInfo | null;\n}\n\n// ---------------------------------------------------------------------------\n// Area state (stored in atoms)\n// ---------------------------------------------------------------------------\n\nexport interface ChartAreaState {\n tickerSymbol: string;\n symbol: string;\n resolution: TvChartResolution;\n chartStyle: TvChartKlineStyle;\n rightOffset: number;\n barSpacing: number;\n dataReady: boolean;\n crosshair?: { time: number; price: number };\n firstBarTime?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Error reset\n// ---------------------------------------------------------------------------\n\nexport enum TvChartErrorResetType {\n None = 0,\n ResetData = 1,\n ResetChart = 2,\n}\n","import { TvChartFeature, TvChartLayout, TvChartResolution } from \"./types\";\n\nexport const ENABLED_TV_CHART_FEATURES: TvChartFeature[] = [\n TvChartFeature.HeaderWidget,\n TvChartFeature.HeaderCandleStyleMenu,\n TvChartFeature.HeaderFullscreenButton,\n TvChartFeature.MultiCharts,\n TvChartFeature.VolumeForceOverlay,\n TvChartFeature.LegendSeriesTitle,\n TvChartFeature.TimeframesToolbar,\n TvChartFeature.SaveDrawingToServer,\n];\n\nexport const DEFAULT_TV_CHART_RESOLUTIONS: TvChartResolution[] = [\n \"1s\",\n \"30s\",\n \"1m\",\n \"1h\",\n \"4h\",\n \"1d\",\n];\n\nexport const ALL_TV_CHART_RESOLUTIONS: TvChartResolution[] = [\n \"1s\",\n \"15s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"1h\",\n \"4h\",\n \"12h\",\n \"1d\",\n];\n\nexport const SUPPORTED_TV_CHART_LAYOUTS: TvChartLayout[] = [\n TvChartLayout.Layout1A,\n TvChartLayout.Layout2A,\n TvChartLayout.Layout2B,\n TvChartLayout.Layout3A,\n TvChartLayout.Layout3B,\n TvChartLayout.Layout3C,\n TvChartLayout.Layout3D,\n TvChartLayout.Layout3E,\n TvChartLayout.Layout3F,\n TvChartLayout.Layout4A,\n TvChartLayout.Layout4B,\n TvChartLayout.Layout4C,\n TvChartLayout.Layout4D,\n TvChartLayout.Layout4E,\n TvChartLayout.Layout4F,\n TvChartLayout.Layout5A,\n TvChartLayout.Layout5B,\n TvChartLayout.Layout5C,\n TvChartLayout.Layout5D,\n TvChartLayout.Layout6A,\n TvChartLayout.Layout6B,\n TvChartLayout.Layout6C,\n TvChartLayout.Layout7A,\n TvChartLayout.Layout8A,\n TvChartLayout.Layout8B,\n TvChartLayout.Layout8C,\n];\n\nexport const TV_CHART_INTERESTED_DOM_EVENTS = [\n \"click\",\n \"keydown\",\n \"mousedown\",\n \"mouseup\",\n \"contextmenu\",\n];\n\nexport const TV_CHART_THEME_COLORS = {\n decrease: \"#F04866\",\n increase: \"#1DB954\",\n chartBg: \"#1A1A1A\",\n card: \"#242424\",\n};\n\nexport const TV_CHART_LIGHT_THEME_COLORS = {\n card: \"#242424\",\n};\n","import { atom } from \"jotai\";\nimport { atomFamily } from \"jotai/utils\";\nimport { DEFAULT_TV_CHART_RESOLUTIONS } from \"./constants\";\nimport type { ChartAreaState, TvChartResolution } from \"./types\";\nimport { TvChartLayout, TvChartType } from \"./types\";\nimport { isEqual } from \"lodash-es\";\n\n// ---------------------------------------------------------------------------\n// Manager state atoms (keyed by prefix = storageId)\n// ---------------------------------------------------------------------------\n\nexport const chartLoadingFamily = atomFamily((prefix: string) => (void prefix, atom(true)));\n\nexport const chartFullscreenFamily = atomFamily((prefix: string) => (void prefix, atom(false)));\n\nexport const chartSelectedIndexFamily = atomFamily((prefix: string) => (void prefix, atom(0)));\n\nexport const chartPinnedResolutionsFamily = atomFamily((prefix: string) =>\n (void prefix, atom<TvChartResolution[]>([...DEFAULT_TV_CHART_RESOLUTIONS])),\n);\n\nexport const chartAreasFamily = atomFamily((prefix: string) =>\n (void prefix, atom<ChartAreaState[]>([])),\n);\n\nexport const chartShowDrawingToolbarFamily = atomFamily((prefix: string) =>\n (void prefix, atom(false)),\n);\n\n// ---------------------------------------------------------------------------\n// Settings atoms (keyed by prefix)\n// ---------------------------------------------------------------------------\n\nexport const settingsLayoutFamily = atomFamily((prefix: string) =>\n (void prefix, atom<TvChartLayout>(TvChartLayout.Layout1A)),\n);\n\nexport const settingsChartTypeFamily = atomFamily((prefix: string) =>\n (void prefix, atom<TvChartType>(TvChartType.TradingView)),\n);\n\nexport const settingsThemeFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"dark\")),\n);\n\nexport const settingsLocaleFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"en\")),\n);\n\nexport const settingsTimezoneFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"Etc/UTC\")),\n);\n\nexport const settingsTickerSymbolFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"\")),\n);\n\nexport const settingsStorageIdFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"kline\")),\n);\n\nexport const settingsReverseColorFamily = atomFamily((prefix: string) =>\n (void prefix, atom<boolean>(false)),\n);\n\nexport const settingsBackgroundColorFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string | null>(null)),\n);\n\nexport const settingsEnabledFeaturesFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string[]>([])),\n);\n\nexport const settingsDisabledFeaturesFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string[]>([])),\n);\n\n// ---------------------------------------------------------------------------\n// Widget ready atom\n// ---------------------------------------------------------------------------\n\nexport const widgetReadyFamily = atomFamily((prefix: string) => (void prefix, atom(false)));\n\n// ---------------------------------------------------------------------------\n// Derived: combined settings data for auto-save (debounced externally)\n// ---------------------------------------------------------------------------\n\nexport const settingsDataFamily = atomFamily((prefix: string) =>\n atom((get) => {\n const layout = get(settingsLayoutFamily(prefix));\n const chartType = get(settingsChartTypeFamily(prefix));\n const selectedIndex = get(chartSelectedIndexFamily(prefix));\n const pinnedResolutions = get(chartPinnedResolutionsFamily(prefix));\n const showDrawingToolbar = get(chartShowDrawingToolbarFamily(prefix));\n const areaContents = get(chartAreasFamily(prefix));\n\n return {\n layout,\n chartType,\n selectedIndex,\n pinnedResolutions,\n showDrawingToolbar,\n areaContents,\n };\n }),\n isEqual,\n);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Store } from \"jotai/vanilla/store\";\nimport { chartAreasFamily } from \"./atoms\";\nimport type { ChartAreaState, TvChartResolution } from \"./types\";\nimport { TvChartKlineStyle } from \"./types\";\nimport type { SeriesType } from \"./charting-library.types\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\n\n/**\n * Manages the state of a single chart area (pane).\n * Reads/writes the corresponding index in chartAreasFamily(prefix).\n */\nexport class ChartAreaManager {\n readonly settings: ChartSettings;\n readonly chartManager: ChartManager;\n readonly chartIndex: number;\n private store: Store;\n private prefix: string;\n\n pendingTickerSymbol: string | null = null;\n pendingResolution: string | null = null;\n\n constructor(\n settings: ChartSettings,\n manager: ChartManager,\n index: number,\n store: Store,\n prefix: string,\n areaSettings?: Partial<ChartAreaState>,\n ) {\n this.settings = settings;\n this.chartManager = manager;\n this.chartIndex = index;\n this.store = store;\n this.prefix = prefix;\n\n const defaults: ChartAreaState = {\n resolution: \"1m\",\n chartStyle: TvChartKlineStyle.Candles,\n symbol: \"\",\n tickerSymbol: \"\",\n rightOffset: 10,\n barSpacing: 6,\n dataReady: false,\n };\n\n const merged = { ...defaults, ...areaSettings };\n this.patchArea(merged);\n }\n\n // ---- state access ----\n\n get state(): ChartAreaState {\n const areas = this.store.get(chartAreasFamily(this.prefix));\n return (\n areas[this.chartIndex] ?? {\n resolution: \"1m\" as TvChartResolution,\n chartStyle: TvChartKlineStyle.Candles,\n symbol: \"\",\n tickerSymbol: \"\",\n rightOffset: 10,\n barSpacing: 6,\n dataReady: false,\n }\n );\n }\n\n private patchArea(patch: Partial<ChartAreaState>): void {\n const areas = [...this.store.get(chartAreasFamily(this.prefix))];\n const current = areas[this.chartIndex] ?? {\n resolution: \"1m\" as TvChartResolution,\n chartStyle: TvChartKlineStyle.Candles,\n symbol: \"\",\n tickerSymbol: \"\",\n rightOffset: 10,\n barSpacing: 6,\n dataReady: false,\n };\n areas[this.chartIndex] = { ...current, ...patch };\n this.store.set(chartAreasFamily(this.prefix), areas);\n }\n\n setState(key: keyof ChartAreaState, value: any): void {\n if (value !== undefined && value !== null) {\n this.patchArea({ [key]: value } as any);\n }\n }\n\n // ---- getters ----\n\n get tickerSymbol(): string {\n return this.state.tickerSymbol;\n }\n get symbol(): string {\n return this.state.symbol;\n }\n get resolution(): TvChartResolution {\n return this.state.resolution;\n }\n get chartStyle(): SeriesType {\n return this.state.chartStyle;\n }\n get rightOffset(): number {\n return this.state.rightOffset;\n }\n get barSpacing(): number {\n return this.state.barSpacing;\n }\n get dataReady(): boolean {\n return this.state.dataReady;\n }\n\n // ---- widget ref ----\n\n get internalChartWidget() {\n return this.chartManager.internalWidget?.chartByIndex(this.chartIndex);\n }\n\n // ---- actions ----\n\n setChartStyle(chartStyle: SeriesType): void {\n this.setState(\"chartStyle\", chartStyle);\n this.internalChartWidget?.setChartStyle(chartStyle);\n }\n\n async setSymbol(symbol: string): Promise<void> {\n if (this.state.tickerSymbol === symbol) return;\n this.setState(\"tickerSymbol\", symbol);\n this.setState(\"dataReady\", false);\n this.pendingTickerSymbol = symbol;\n\n try {\n const promises = [\n this.internalChartWidget?.handleSymbolChange(symbol, this.tickerSymbol),\n this.chartManager.symbolResolver?.resolveSymbolInfo(symbol).then((info: any) => {\n if (info) this.setState(\"symbol\", info.name);\n }),\n ];\n for (const p of await Promise.allSettled(promises)) {\n if (p.status === \"rejected\") throw p.reason;\n }\n } catch (e) {\n console.error(e);\n } finally {\n if (this.pendingTickerSymbol === symbol) this.pendingTickerSymbol = null;\n }\n if (this.tickerSymbol === symbol) {\n this.setState(\"dataReady\", true);\n }\n }\n\n async setResolution(resolution: TvChartResolution): Promise<void> {\n if (this.resolution === resolution) return;\n this.setState(\"resolution\", resolution);\n this.setState(\"dataReady\", false);\n this.pendingResolution = resolution;\n\n try {\n await this.internalChartWidget?.handleResolutionChange(resolution, this.resolution);\n } finally {\n if (this.pendingResolution === resolution) this.pendingResolution = null;\n }\n }\n\n toJSON(): ChartAreaState {\n return { ...this.state };\n }\n\n widgetReady(): void {\n this.internalChartWidget\n ?.dataReady()\n ?.then(() => this.handleChartReady())\n ?.catch(() => {});\n }\n\n get active(): boolean {\n return this.chartIndex < this.chartManager.chartCount;\n }\n\n get selected(): boolean {\n return this.chartManager.selectedIndex === this.chartIndex;\n }\n\n get symbolInfo() {\n return this.chartManager.symbolResolver?.getSymbolInfo(this.tickerSymbol) ?? null;\n }\n\n destroy(): void {\n // no subscriptions to clean up since state lives in atoms\n }\n\n // ---- internal ----\n\n private async handleChartReady(): Promise<void> {\n if (!this.internalChartWidget) return;\n this.setState(\"dataReady\", true);\n\n if (this.selected) {\n this.internalChartWidget.setBarSpacing(this.barSpacing);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Store } from \"jotai/vanilla/store\";\nimport { debounce } from \"lodash-es\";\nimport {\n chartLoadingFamily,\n chartFullscreenFamily,\n chartSelectedIndexFamily,\n chartPinnedResolutionsFamily,\n chartAreasFamily,\n chartShowDrawingToolbarFamily,\n settingsDataFamily,\n widgetReadyFamily,\n} from \"./atoms\";\nimport { DEFAULT_TV_CHART_RESOLUTIONS } from \"./constants\";\nimport { ChartSettings } from \"./ChartSettings\";\nimport { ChartAreaManager } from \"./ChartAreaManager\";\nimport type { ChartLibraryWidget } from \"./ChartLibraryWidget\";\nimport type { ITvChartDataFeedModule, ITvChartSymbolResolver, TvChartResolution } from \"./types\";\nimport { TvChartLayout } from \"./types\";\n\n/**\n * Core chart manager that orchestrates areas, settings, and widget lifecycle.\n * State is backed by jotai atoms keyed by prefix (storageId).\n */\nexport class ChartManager {\n readonly prefix: string;\n readonly settings: ChartSettings;\n private store: Store;\n\n initialized = false;\n focused = false;\n reloadId = 0;\n\n internalWidget: ChartLibraryWidget | null = null;\n datafeed: ITvChartDataFeedModule | null = null;\n symbolResolver: ITvChartSymbolResolver | null = null;\n\n private unsubAutoSave: (() => void) | null = null;\n\n constructor(prefix: string, store: Store, settings: ChartSettings) {\n this.prefix = prefix;\n this.store = store;\n this.settings = settings;\n }\n\n // ---- atom-backed state ----\n\n get loading(): boolean {\n return this.store.get(chartLoadingFamily(this.prefix));\n }\n\n get fullscreen(): boolean {\n return this.store.get(chartFullscreenFamily(this.prefix));\n }\n set fullscreen(v: boolean) {\n this.store.set(chartFullscreenFamily(this.prefix), v);\n if (v) document.body.classList.add(\"fullScreen\");\n else document.body.classList.remove(\"fullScreen\");\n }\n\n get selectedIndex(): number {\n return this.store.get(chartSelectedIndexFamily(this.prefix));\n }\n set selectedIndex(idx: number) {\n this.store.set(chartSelectedIndexFamily(this.prefix), idx);\n }\n\n get pinnedResolutions(): TvChartResolution[] {\n return this.store.get(chartPinnedResolutionsFamily(this.prefix));\n }\n set pinnedResolutions(v: TvChartResolution[]) {\n this.store.set(chartPinnedResolutionsFamily(this.prefix), v);\n }\n\n get showDrawingToolbar(): boolean {\n return this.store.get(chartShowDrawingToolbarFamily(this.prefix));\n }\n\n get chartCount(): number {\n return parseInt(this.settings.layout, 10) || 1;\n }\n\n get areas(): ChartAreaManager[] {\n const areaStates = this.store.get(chartAreasFamily(this.prefix));\n return this._areaManagers.slice(0, areaStates.length);\n }\n\n private _areaManagers: ChartAreaManager[] = [];\n\n areaByIndex(index: number): ChartAreaManager | null {\n if (this.initialized) this.updateChartContents();\n return this._areaManagers[index] ?? null;\n }\n\n get activeArea(): ChartAreaManager | null {\n return this.areaByIndex(this.selectedIndex);\n }\n\n // ---- lifecycle ----\n\n async init(): Promise<void> {\n if (this.initialized) return;\n\n const stored = this.settings.saveLoadAdapter.getSettings();\n\n if (stored?.selectedIndex != null) {\n this.selectedIndex = stored.selectedIndex;\n }\n\n if (stored?.pinnedResolutions) {\n const pr = stored.pinnedResolutions as TvChartResolution[];\n if (\n pr.length === DEFAULT_TV_CHART_RESOLUTIONS.length &&\n pr.every((r) => DEFAULT_TV_CHART_RESOLUTIONS.includes(r))\n ) {\n this.pinnedResolutions = [...DEFAULT_TV_CHART_RESOLUTIONS];\n } else {\n this.pinnedResolutions = pr;\n }\n }\n\n if (stored?.areaContents) {\n stored.areaContents.forEach((ac: any, idx: number) => {\n const area = new ChartAreaManager(\n this.settings,\n this,\n idx,\n this.store,\n this.prefix,\n ac,\n );\n this._areaManagers[idx] = area;\n });\n }\n\n if (stored?.showDrawingToolbar != null) {\n this.store.set(chartShowDrawingToolbarFamily(this.prefix), stored.showDrawingToolbar);\n }\n\n this.settings.updateValue(\"layout\", stored?.layout);\n this.settings.updateValue(\"chartType\", stored?.chartType);\n\n if (!this.settings.enableMultiCharts) {\n this.settings.updateValue(\"layout\", TvChartLayout.Layout1A);\n }\n if (this.settings.enableHideDrawingToolsByDefault) {\n this.store.set(chartShowDrawingToolbarFamily(this.prefix), false);\n }\n\n this.updateChartContents();\n\n if (this.settings.tickerSymbol && this.activeArea) {\n try {\n await this.activeArea.setSymbol(this.settings.tickerSymbol);\n } catch (e) {\n console.warn(\"ChartManager init failed to set symbol\", e);\n }\n }\n\n this.initialized = true;\n\n // auto-save on settings change (debounced)\n const save = debounce(() => {\n const data = this.store.get(settingsDataFamily(this.prefix));\n this.settings.saveLoadAdapter.saveSettings(data).catch(console.error);\n }, 1000);\n\n this.unsubAutoSave = this.store.sub(settingsDataFamily(this.prefix), save);\n }\n\n destroy(): void {\n this.unsubAutoSave?.();\n this._areaManagers.forEach((a) => a.destroy());\n this._areaManagers = [];\n }\n\n // ---- mutations ----\n\n setLoading(loading: boolean): void {\n this.store.set(chartLoadingFamily(this.prefix), loading);\n }\n\n setLocale(locale: string): void {\n this.settings.updateValue(\"locale\", locale);\n }\n\n setTimezone(timezone: string): void {\n this.settings.updateValue(\"timezone\", timezone);\n }\n\n setFocused(focused: boolean): void {\n this.focused = focused;\n }\n\n setShowDrawingToolbar(show: boolean): void {\n this.store.set(chartShowDrawingToolbarFamily(this.prefix), show);\n }\n\n setInternalWidget(widget: ChartLibraryWidget | null): void {\n this.internalWidget = widget;\n this.store.set(widgetReadyFamily(this.prefix), false);\n }\n\n onInternalWidgetReady(): void {\n this.store.set(widgetReadyFamily(this.prefix), true);\n this.areas.forEach((area, idx) => {\n if (idx < this.chartCount) area.widgetReady();\n });\n }\n\n setChartType(chartType: string): void {\n this.settings.updateValue(\"chartType\", chartType);\n }\n\n setTheme(theme: string): void {\n if (this.settings.theme !== theme) {\n this.settings.updateValue(\"theme\", theme);\n void this.internalWidget?.onThemeChange?.(theme, this.settings.reverseColor);\n }\n }\n\n setReverseColor(reverseColor: boolean): void {\n if (this.settings.reverseColor !== reverseColor) {\n this.settings.updateValue(\"reverseColor\", reverseColor);\n void this.internalWidget?.onThemeChange?.(this.settings.theme, reverseColor);\n }\n }\n\n setLayout(layout: TvChartLayout): void {\n const target = this.settings.enableMultiCharts ? layout : TvChartLayout.Layout1A;\n if (this.settings.layout !== target) {\n this.settings.updateValue(\"layout\", target);\n this.updateChartContents();\n this.internalWidget?.onLayoutChange?.(target);\n\n const prevCount = this.chartCount;\n setTimeout(() => {\n if (this.store.get(widgetReadyFamily(this.prefix))) {\n for (let i = prevCount; i < this.chartCount; i++) {\n this.areaByIndex(i)?.widgetReady();\n }\n }\n });\n }\n }\n\n reloadChart(): void {\n this.reloadId += 1;\n }\n\n // ---- internal ----\n\n updateChartContents(): void {\n if (this.chartCount > this._areaManagers.length) {\n for (let i = this._areaManagers.length; i < this.chartCount; i++) {\n const currentArea = this._areaManagers[this.selectedIndex];\n const currentSettings = currentArea?.toJSON();\n const newArea = new ChartAreaManager(\n this.settings,\n this,\n i,\n this.store,\n this.prefix,\n currentSettings,\n );\n this._areaManagers[i] = newArea;\n if (this.selectedIndex !== i && !currentArea) {\n newArea.setSymbol(this.settings.tickerSymbol).catch(() => {});\n }\n }\n }\n if (this.selectedIndex >= this.chartCount) {\n this.selectedIndex = this.chartCount - 1;\n }\n }\n\n get settingsData() {\n return this.store.get(settingsDataFamily(this.prefix));\n }\n\n getAllCharts(): ChartAreaManager[] {\n this.updateChartContents();\n return this._areaManagers.slice(0, this.chartCount);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { omit } from \"lodash-es\";\n\n/**\n * Persists chart settings, shapes, and drawing data to localStorage.\n * All keys are scoped by `storageId` to support multiple instances.\n */\nexport class ChartSettingsStore {\n private storageId: string;\n\n constructor(storageId: string) {\n this.storageId = storageId;\n }\n\n private get settingsKey() {\n return `${this.storageId}.TvChart.Settings`;\n }\n private get shapesKey() {\n return `${this.storageId}.TvChart.Shapes`;\n }\n\n getSettings(): any {\n const localSettings = this.getLocalSettingsData();\n const chartStoreData = this.getChartStoreData();\n\n const settings: any = {\n layout: chartStoreData?.layout,\n selectedIndex: chartStoreData?.currentAreaIndex,\n chartType: chartStoreData?.chartType,\n pinnedResolutions: chartStoreData?.pinnedResolutions,\n areaContents: chartStoreData?.areas?.map((v: any) => ({\n resolution: v.resolution || v.period || \"1m\",\n chartStyle: v.chartStyle,\n symbol: v.symbol,\n tickerSymbol: v.tickerSymbol,\n rightOffset: v.rightOffset,\n barSpacing: v.barSpacing,\n })),\n showDrawingToolbar: chartStoreData?.drawing?.toolbarSwitch,\n drawing: localSettings?.drawing\n ? {\n ...localSettings.drawing,\n defaultStates: omit(localSettings, [\n \"drawing\",\n \"DrawingToolGroupLastUsedTool\",\n \"riskRewardAvailableChanged\",\n \"riskRewardRiskSizeChanged\",\n \"drawingShapeTemplate\",\n ]),\n lastUsedTools: localSettings.DrawingToolGroupLastUsedTool,\n riskRewardAvailableChanged: localSettings.riskRewardAvailableChanged,\n riskRewardRiskSizeChanged: localSettings.riskRewardRiskSizeChanged,\n drawingShapeTemplate: localSettings.drawingShapeTemplate,\n }\n : undefined,\n };\n\n return settings;\n }\n\n getChartStoreData(): any {\n return this.getLocalData(this.storageId);\n }\n\n setChartStoreData(data: any): void {\n this.setLocalData(this.storageId, data);\n }\n\n async saveSettings(data: any): Promise<void> {\n const chartStoreData = this.getChartStoreData();\n const newChartStoreData = {\n ...chartStoreData,\n layout: data.layout,\n currentAreaIndex: data.selectedIndex,\n chartType: data.chartType,\n pinnedResolutions: data.pinnedResolutions,\n areas: data.areaContents?.map((v: any, i: number) => ({\n ...chartStoreData?.areas?.[i],\n ...v,\n })),\n drawing: {\n ...chartStoreData?.drawing,\n toolbarSwitch: data.showDrawingToolbar,\n },\n };\n this.setChartStoreData(newChartStoreData);\n }\n\n async getShapes(key: string): Promise<any[]> {\n const data = this.getLocalShapesData();\n if (!data || !data[key]) return [];\n return Object.values(data[key]);\n }\n\n async saveShapes(key: string, updated: any): Promise<void> {\n const data = this.getLocalShapesData() || {};\n data[key] = { ...data[key], ...updated };\n Object.keys(data[key]).forEach((k) => {\n if (!data[key][k]) delete data[key][k];\n });\n this.setLocalShapesData(data);\n }\n\n private getLocalData(key: string): any | null {\n try {\n const value = localStorage.getItem(key);\n return value ? JSON.parse(value) : null;\n } catch {\n return null;\n }\n }\n\n private setLocalData(key: string, data: any): void {\n localStorage.setItem(key, JSON.stringify(data));\n }\n\n private getLocalSettingsData(): any | null {\n return this.getLocalData(this.settingsKey);\n }\n\n private getLocalShapesData(): any | null {\n return this.getLocalData(this.shapesKey);\n }\n\n private setLocalShapesData(data: any): void {\n this.setLocalData(this.shapesKey, data);\n }\n}\n","import type {\n LanguageCode,\n LayoutType,\n ResolutionString,\n ThemeName,\n} from \"./charting-library.types\";\nimport {\n TvChartLayout,\n TvChartPriceType,\n TvChartQuoteType,\n TvChartResolution,\n type TvChartSymbol,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Symbol helpers\n// ---------------------------------------------------------------------------\n\nexport function parseSymbol(symbol: string): TvChartSymbol {\n const [chain, address, quote, priceType] = symbol.split(\"/\");\n return {\n address,\n chain,\n quote: quote as TvChartQuoteType,\n priceType: priceType as TvChartPriceType,\n };\n}\n\nexport function stringifySymbol(symbol: TvChartSymbol): string {\n if (!symbol.quote || !symbol.priceType) {\n return `${symbol.chain}/${symbol.address}`;\n }\n return `${symbol.chain}/${symbol.address}/${symbol.quote}/${symbol.priceType}`;\n}\n\nexport function stringifySymbolShort(symbol: TvChartSymbol): string {\n return `${symbol.chain}/${symbol.address}`;\n}\n\n// ---------------------------------------------------------------------------\n// Theme\n// ---------------------------------------------------------------------------\n\nconst THEME_MAP: Record<string, ThemeName> = {\n dark: \"Dark\",\n light: \"Light\",\n};\n\nexport function getTvChartLibraryTheme(theme: string): ThemeName {\n return THEME_MAP[theme.toLowerCase()] ?? \"Dark\";\n}\n\n// ---------------------------------------------------------------------------\n// Resolution\n// ---------------------------------------------------------------------------\n\nconst RESOLUTION_MAP: Record<TvChartResolution, string> = {\n \"1s\": \"1S\",\n \"5s\": \"5S\",\n \"15s\": \"15S\",\n \"30s\": \"30S\",\n \"1m\": \"1\",\n \"5m\": \"5\",\n \"15m\": \"15\",\n \"30m\": \"30\",\n \"1h\": \"60\",\n \"4h\": \"240\",\n \"12h\": \"720\",\n \"1d\": \"1D\",\n};\n\nexport function getTvChartLibraryResolution(\n resolution: TvChartResolution = \"1m\",\n): ResolutionString {\n return (RESOLUTION_MAP[resolution] ?? RESOLUTION_MAP[\"1m\"]) as ResolutionString;\n}\n\nconst RESOLUTION_MAP_REVERSE: Record<string, TvChartResolution> = {\n \"1S\": \"1s\",\n \"5S\": \"5s\",\n \"15S\": \"15s\",\n \"30S\": \"30s\",\n \"1\": \"1m\",\n \"5\": \"5m\",\n \"15\": \"15m\",\n \"30\": \"30m\",\n \"60\": \"1h\",\n \"240\": \"4h\",\n \"720\": \"12h\",\n \"1D\": \"1d\",\n};\n\nexport function getTvChartResolutionReverse(resolution: string): TvChartResolution {\n return RESOLUTION_MAP_REVERSE[resolution] ?? \"1s\";\n}\n\n// ---------------------------------------------------------------------------\n// Locale\n// ---------------------------------------------------------------------------\n\nconst LOCALE_MAP: Record<string, LanguageCode> = {\n en: \"en\",\n \"zh-CN\": \"zh\",\n \"zh-TW\": \"zh\",\n};\n\nexport function getTvChartLibraryLocale(locale: string): LanguageCode {\n return LOCALE_MAP[locale] ?? locale;\n}\n\n// ---------------------------------------------------------------------------\n// Layout\n// ---------------------------------------------------------------------------\n\nexport const LAYOUT_MAP: Record<TvChartLayout, LayoutType> = {\n [TvChartLayout.Layout1A]: \"s\",\n [TvChartLayout.Layout2A]: \"2h\",\n [TvChartLayout.Layout2B]: \"2v\",\n [TvChartLayout.Layout3A]: \"3s\",\n [TvChartLayout.Layout3B]: \"3h\",\n [TvChartLayout.Layout3C]: \"3v\",\n [TvChartLayout.Layout3D]: \"2-1\",\n [TvChartLayout.Layout3E]: \"1-2\",\n [TvChartLayout.Layout3F]: \"3r\",\n [TvChartLayout.Layout4A]: \"4\",\n [TvChartLayout.Layout4B]: \"4h\",\n [TvChartLayout.Layout4C]: \"4v\",\n [TvChartLayout.Layout4D]: \"4s\",\n [TvChartLayout.Layout4E]: \"1-3\",\n [TvChartLayout.Layout4F]: \"2-2\",\n [TvChartLayout.Layout5A]: \"1-4\",\n [TvChartLayout.Layout5B]: \"5s\",\n [TvChartLayout.Layout5C]: \"2-3\",\n [TvChartLayout.Layout5D]: \"5h\",\n [TvChartLayout.Layout6A]: \"6\",\n [TvChartLayout.Layout6B]: \"6c\",\n [TvChartLayout.Layout6C]: \"6h\",\n [TvChartLayout.Layout7A]: \"7h\",\n [TvChartLayout.Layout8A]: \"8\",\n [TvChartLayout.Layout8B]: \"8c\",\n [TvChartLayout.Layout8C]: \"8h\",\n};\n\nexport function getTvChartLibraryLayout(layout: TvChartLayout): LayoutType {\n return LAYOUT_MAP[layout] ?? \"s\";\n}\n\nconst LAYOUT_MAP_REVERSE: Record<string, TvChartLayout> = Object.fromEntries(\n Object.entries(LAYOUT_MAP).map(([k, v]) => [v, k as TvChartLayout]),\n);\n\nexport function getTvChartLayoutReverse(layout: LayoutType): TvChartLayout {\n return LAYOUT_MAP_REVERSE[layout] ?? TvChartLayout.Layout1A;\n}\n\n// ---------------------------------------------------------------------------\n// Alignment\n// ---------------------------------------------------------------------------\n\nconst ALIGNMENTS_MAP: Record<string, number> = {\n left: 0,\n center: 1,\n right: 2,\n};\n\nexport function getTvChartLibraryAlignment(alignment: string): number {\n return ALIGNMENTS_MAP[alignment] ?? 0;\n}\n\n// ---------------------------------------------------------------------------\n// Time helpers\n// ---------------------------------------------------------------------------\n\nconst RESOLUTION_FRAMES: Record<TvChartResolution, number> = {\n \"1s\": 1e3,\n \"5s\": 5e3,\n \"15s\": 15e3,\n \"30s\": 3e4,\n \"1m\": 6e4,\n \"5m\": 3e5,\n \"15m\": 9e5,\n \"30m\": 18e5,\n \"1h\": 36e5,\n \"4h\": 144e5,\n \"12h\": 432e5,\n \"1d\": 864e5,\n};\n\nexport function getTvChartResolutionFrame(resolution: TvChartResolution): number {\n const frame = RESOLUTION_FRAMES[resolution];\n if (!frame) throw new Error(`Invalid interval: ${resolution}`);\n return frame;\n}\n\nexport function getTvChartTickTimestamp(time: number, timeframe: number): number {\n const timeInMs = time.toString().length > 10 ? time : 1e3 * time;\n return Math.floor(timeInMs / timeframe) * timeframe;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Store } from \"jotai/vanilla/store\";\nimport {\n settingsLayoutFamily,\n settingsChartTypeFamily,\n settingsThemeFamily,\n settingsLocaleFamily,\n settingsTimezoneFamily,\n settingsTickerSymbolFamily,\n settingsStorageIdFamily,\n settingsReverseColorFamily,\n settingsBackgroundColorFamily,\n settingsEnabledFeaturesFamily,\n settingsDisabledFeaturesFamily,\n} from \"./atoms\";\nimport { ALL_TV_CHART_RESOLUTIONS, ENABLED_TV_CHART_FEATURES, SUPPORTED_TV_CHART_LAYOUTS } from \"./constants\";\nimport { ChartSettingsStore } from \"./ChartSettingsStore\";\nimport { TvChartFeature, TvChartLayout, TvChartType } from \"./types\";\nimport { getTvChartLibraryResolution } from \"./utils\";\nimport type { SeriesFormatterFactory } from \"./charting-library.types\";\n\n/**\n * Manages chart-level settings via jotai atoms (keyed by prefix).\n * Replaces the BehaviorSubject-based TvChartSettings.\n */\nexport class ChartSettings {\n readonly prefix: string;\n private store: Store;\n\n supportedResolutions = ALL_TV_CHART_RESOLUTIONS.map(getTvChartLibraryResolution);\n supportedLayouts = SUPPORTED_TV_CHART_LAYOUTS;\n supportedChartTypes = [TvChartType.TradingView];\n chartNames: Record<string, string> = {};\n priceFormatterFactory: SeriesFormatterFactory | null = null;\n saveLoadAdapter: ChartSettingsStore;\n\n constructor(prefix: string, store: Store) {\n this.prefix = prefix;\n this.store = store;\n this.saveLoadAdapter = new ChartSettingsStore(prefix);\n this.store.set(settingsStorageIdFamily(prefix), prefix);\n }\n\n // ---- getters backed by atoms ----\n\n get layout(): TvChartLayout {\n return this.store.get(settingsLayoutFamily(this.prefix));\n }\n\n get chartType(): TvChartType {\n return this.store.get(settingsChartTypeFamily(this.prefix));\n }\n\n get theme(): string {\n return this.store.get(settingsThemeFamily(this.prefix));\n }\n\n get reverseColor(): boolean {\n return this.store.get(settingsReverseColorFamily(this.prefix));\n }\n\n get locale(): string {\n return this.store.get(settingsLocaleFamily(this.prefix));\n }\n\n get timezone(): string {\n return this.store.get(settingsTimezoneFamily(this.prefix));\n }\n\n get tickerSymbol(): string {\n return this.store.get(settingsTickerSymbolFamily(this.prefix));\n }\n\n get storageId(): string {\n return this.store.get(settingsStorageIdFamily(this.prefix));\n }\n\n get backgroundColor(): string | null {\n return this.store.get(settingsBackgroundColorFamily(this.prefix));\n }\n\n get enabledFeatures(): string[] {\n return this.store.get(settingsEnabledFeaturesFamily(this.prefix));\n }\n\n get disabledFeatures(): string[] {\n return this.store.get(settingsDisabledFeaturesFamily(this.prefix));\n }\n\n // ---- setters ----\n\n updateValue(key: string, value: any): void {\n if (value === null || value === undefined) return;\n\n const setters: Record<string, () => void> = {\n layout: () => this.store.set(settingsLayoutFamily(this.prefix), value),\n chartType: () => this.store.set(settingsChartTypeFamily(this.prefix), value),\n theme: () => this.store.set(settingsThemeFamily(this.prefix), value),\n reverseColor: () => this.store.set(settingsReverseColorFamily(this.prefix), value),\n locale: () => this.store.set(settingsLocaleFamily(this.prefix), value),\n timezone: () => this.store.set(settingsTimezoneFamily(this.prefix), value),\n tickerSymbol: () => this.store.set(settingsTickerSymbolFamily(this.prefix), value),\n storageId: () => this.store.set(settingsStorageIdFamily(this.prefix), value),\n backgroundColor: () => this.store.set(settingsBackgroundColorFamily(this.prefix), value),\n enabledFeatures: () => this.store.set(settingsEnabledFeaturesFamily(this.prefix), value),\n disabledFeatures: () => this.store.set(settingsDisabledFeaturesFamily(this.prefix), value),\n };\n\n const setter = setters[key];\n if (setter) setter();\n }\n\n // ---- feature helpers ----\n\n isFeatureEnabled(feature: TvChartFeature): boolean {\n return (\n (!this.disabledFeatures.includes(feature) && this.enabledFeatures.includes(feature)) ||\n ENABLED_TV_CHART_FEATURES.includes(feature)\n );\n }\n\n setFeature(feature: string, enabled: boolean): void {\n this.resetFeature(feature);\n if (enabled) {\n this.store.set(settingsEnabledFeaturesFamily(this.prefix), [...this.enabledFeatures, feature]);\n } else {\n this.store.set(settingsDisabledFeaturesFamily(this.prefix), [...this.disabledFeatures, feature]);\n }\n }\n\n resetFeature(feature: string): void {\n this.store.set(\n settingsEnabledFeaturesFamily(this.prefix),\n this.enabledFeatures.filter((f) => f !== feature),\n );\n this.store.set(\n settingsDisabledFeaturesFamily(this.prefix),\n this.disabledFeatures.filter((f) => f !== feature),\n );\n }\n\n get enableMultiCharts(): boolean {\n return this.isFeatureEnabled(TvChartFeature.MultiCharts);\n }\n\n get enableCreateVolumeIndicatorByDefault(): boolean {\n return this.isFeatureEnabled(TvChartFeature.CreateVolumeIndicatorByDefault);\n }\n\n get enableHideDrawingToolsByDefault(): boolean {\n return this.isFeatureEnabled(TvChartFeature.HideDrawingToolsByDefault);\n }\n\n get enableLegendSeriesTitle(): boolean {\n return this.isFeatureEnabled(TvChartFeature.LegendSeriesTitle);\n }\n\n get enableLegendVolume(): boolean {\n return this.isFeatureEnabled(TvChartFeature.LegendVolume);\n }\n\n get enableTimeframesToolbar(): boolean {\n return this.isFeatureEnabled(TvChartFeature.TimeframesToolbar);\n }\n\n get enableVolumeForceOverlay(): boolean {\n return this.isFeatureEnabled(TvChartFeature.VolumeForceOverlay);\n }\n\n /**\n * Subscribe to a specific atom change. Returns unsubscribe function.\n */\n sub(key: string, callback: () => void): () => void {\n const atomMap: Record<string, any> = {\n layout: settingsLayoutFamily(this.prefix),\n chartType: settingsChartTypeFamily(this.prefix),\n theme: settingsThemeFamily(this.prefix),\n };\n const a = atomMap[key];\n if (a) return this.store.sub(a, callback);\n return () => {};\n }\n}\n","import type { LibrarySymbolInfo } from \"./charting-library.types\";\nimport type { ITvChartDataFeedModule, ITvChartSymbolResolver } from \"./types\";\n\n/**\n * Resolves and caches symbol info via the injected DataFeedModule.\n */\nexport class ChartSymbolResolver implements ITvChartSymbolResolver {\n private datafeed: ITvChartDataFeedModule;\n private cache = new Map<string, LibrarySymbolInfo>();\n private pendingRequests = new Map<string, Promise<LibrarySymbolInfo | null>>();\n\n constructor(datafeed: ITvChartDataFeedModule) {\n this.datafeed = datafeed;\n }\n\n async resolveSymbolInfo(symbol: string): Promise<LibrarySymbolInfo | null> {\n return this.datafeed.resolveSymbol(symbol);\n }\n\n async resolveSymbolInfos(symbols: string[]): Promise<LibrarySymbolInfo[]> {\n const toResolve = symbols.filter(\n (s) => !this.cache.has(s) && !this.pendingRequests.has(s),\n );\n\n toResolve.forEach((s) => {\n const promise = this.resolveSymbolInfo(s);\n void promise\n .then((info) => {\n if (info) this.cache.set(s, info);\n })\n .catch(() => undefined)\n .finally(() => this.pendingRequests.delete(s));\n this.pendingRequests.set(s, promise);\n });\n\n await Promise.all(\n symbols\n .filter((s) => this.pendingRequests.has(s))\n .map((s) => this.pendingRequests.get(s)),\n );\n\n return symbols\n .map((s) => this.cache.get(s) ?? null)\n .filter((s): s is LibrarySymbolInfo => s !== null);\n }\n\n getSymbolInfo(symbol: string): LibrarySymbolInfo | null {\n this.resolveSymbolInfo(symbol).catch((e) => {\n console.error(\"ChartSymbolResolver.getSymbolInfo\", e);\n });\n return this.cache.get(symbol) ?? null;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type PropsWithChildren, useEffect, useState } from \"react\";\nimport { ChartSymbolResolver } from \"../lib/ChartSymbolResolver\";\nimport type {\n LanguageCode,\n SeriesFormatterFactory,\n Timezone,\n WidgetConstructor,\n} from \"../lib/charting-library.types\";\nimport type { ITvChartDataFeedModule, TvChartResolution } from \"../lib/types\";\nimport {\n TvChartFeature,\n TvChartKlineStyle,\n TvChartLayout,\n TvChartTheme,\n TvChartType,\n} from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TvChartConfig {\n storageId: string;\n tickerSymbol: string;\n datafeed: ITvChartDataFeedModule;\n resolution: TvChartResolution;\n supportedResolutions?: TvChartResolution[];\n layout: TvChartLayout;\n supportedLayouts?: TvChartLayout[];\n chartType: TvChartType;\n supportedChartTypes?: TvChartType[];\n chartNames?: Record<string, string>;\n kLineStyle: TvChartKlineStyle;\n theme: TvChartTheme;\n reverseColor?: boolean;\n backgroundColor?: string;\n timezone: Timezone;\n locale: LanguageCode;\n enabledFeatures?: TvChartFeature[];\n disabledFeatures?: TvChartFeature[];\n priceFormatterFactory?: SeriesFormatterFactory;\n}\n\nexport interface TradingViewConfigProps {\n initConfig: TvChartConfig;\n widgetConstructor: WidgetConstructor;\n libraryPath?: string;\n customCssUrl?: string;\n}\n\nexport const TradingViewConfig = ({\n initConfig,\n children,\n}: PropsWithChildren<{ initConfig: TvChartConfig }>) => {\n const { chartManager, chartSettings } = useTvChartContext();\n const [, setInitialized] = useState(false);\n\n useEffect(() => {\n if (!chartManager.initialized) {\n chartSettings.updateValue(\"tickerSymbol\", initConfig.tickerSymbol);\n chartSettings.updateValue(\"theme\", initConfig.theme);\n chartSettings.updateValue(\"reverseColor\", initConfig.reverseColor);\n chartSettings.updateValue(\"layout\", initConfig.layout);\n chartSettings.updateValue(\"chartType\", initConfig.chartType);\n chartSettings.updateValue(\"timezone\", initConfig.timezone);\n chartSettings.updateValue(\"locale\", initConfig.locale);\n chartSettings.updateValue(\"backgroundColor\", initConfig.backgroundColor);\n chartSettings.updateValue(\"storageId\", initConfig.storageId);\n chartSettings.updateValue(\"enabledFeatures\", initConfig.enabledFeatures);\n chartSettings.updateValue(\n \"disabledFeatures\",\n initConfig.disabledFeatures,\n );\n\n if (initConfig.chartNames)\n chartSettings.chartNames = initConfig.chartNames;\n if (initConfig.priceFormatterFactory) {\n chartSettings.priceFormatterFactory = initConfig.priceFormatterFactory;\n }\n if (initConfig.supportedResolutions) {\n chartSettings.supportedResolutions =\n initConfig.supportedResolutions as any;\n }\n if (initConfig.supportedLayouts) {\n chartSettings.supportedLayouts = initConfig.supportedLayouts;\n }\n if (initConfig.supportedChartTypes) {\n chartSettings.supportedChartTypes = initConfig.supportedChartTypes;\n }\n\n chartManager.datafeed = initConfig.datafeed;\n chartManager.symbolResolver = new ChartSymbolResolver(\n initConfig.datafeed,\n );\n }\n }, [chartManager, chartSettings, initConfig]);\n\n useEffect(() => {\n chartManager\n .init()\n .then(() => setInitialized(true))\n .catch((e) => {\n console.error(\"TradingViewConfig chartManager init error\", e);\n });\n return () => {\n chartManager.destroy();\n };\n }, [chartManager]);\n\n return chartManager.initialized ? <>{children}</> : null;\n};\n","import {\n createContext,\n forwardRef,\n type PropsWithChildren,\n useContext,\n useImperativeHandle,\n useMemo,\n} from \"react\";\nimport { useStore } from \"jotai\";\nimport { ChartManager } from \"../lib/ChartManager\";\nimport { ChartSettings } from \"../lib/ChartSettings\";\nimport type { WidgetConstructor } from \"../lib/charting-library.types\";\nimport type { TvChartLayout, TvChartType } from \"../lib/types\";\nimport {\n TradingViewConfig,\n type TradingViewConfigProps,\n} from \"./TradingViewConfig\";\n\nexport interface TvChartContextValue {\n prefix: string;\n chartSettings: ChartSettings;\n chartManager: ChartManager;\n widgetConstructor: WidgetConstructor;\n libraryPath?: string;\n customCssUrl?: string;\n}\n\nconst TvChartContext = createContext<TvChartContextValue | null>(null);\n\nexport function useTvChartContext(): TvChartContextValue {\n const ctx = useContext(TvChartContext);\n if (!ctx)\n throw new Error(\n \"useTvChartContext must be used within TradingViewProvider\",\n );\n return ctx;\n}\n\nexport function useTvChartManager(): ChartManager {\n return useTvChartContext().chartManager;\n}\n\nexport function useTvChartPrefix(): string {\n return useTvChartContext().prefix;\n}\n\nexport class TvChartHandle {\n readonly setting: ChartSettings;\n readonly chartManager: ChartManager;\n\n constructor(setting: ChartSettings, chartManager: ChartManager) {\n this.setting = setting;\n this.chartManager = chartManager;\n }\n\n get internalWidget() {\n return this.chartManager.internalWidget;\n }\n\n chartCount(): number {\n return this.chartManager.chartCount;\n }\n\n setActiveChart(index: number): void {\n if (index < this.chartCount()) {\n this.chartManager.selectedIndex = index;\n }\n }\n\n layout(): TvChartLayout {\n return this.setting.layout;\n }\n\n setLayout(layout: TvChartLayout): void {\n this.chartManager.setLayout(layout);\n }\n\n theme(): string {\n return this.setting.theme;\n }\n\n setTheme(theme: string): void {\n this.chartManager.setTheme(theme);\n }\n\n setChartType(chartType: TvChartType): void {\n this.chartManager.setChartType(chartType);\n }\n\n getSetting(): ChartSettings {\n return this.setting;\n }\n\n getChartManager(): ChartManager {\n return this.chartManager;\n }\n}\n\nexport type TradingViewProviderProps = PropsWithChildren<TradingViewConfigProps>;\n\nexport const TradingViewProvider = forwardRef<\n TvChartHandle,\n TradingViewProviderProps\n>(\n (\n { children, initConfig, widgetConstructor, libraryPath, customCssUrl },\n ref,\n ) => {\n const store = useStore();\n const prefix = initConfig.storageId;\n\n const chartSettings = useMemo(\n () => new ChartSettings(prefix, store),\n [prefix, store],\n );\n\n const chartManager = useMemo(\n () => new ChartManager(prefix, store, chartSettings),\n [prefix, store, chartSettings],\n );\n\n const handle = useMemo(\n () => new TvChartHandle(chartSettings, chartManager),\n [chartSettings, chartManager],\n );\n\n useImperativeHandle(ref, () => handle, [handle]);\n\n const value = useMemo<TvChartContextValue>(\n () => ({\n prefix,\n chartSettings,\n chartManager,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n }),\n [\n prefix,\n chartSettings,\n chartManager,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n ],\n );\n\n return (\n <TvChartContext.Provider value={value}>\n <TradingViewConfig initConfig={initConfig}>\n {children}\n </TradingViewConfig>\n </TvChartContext.Provider>\n );\n },\n);\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { chartFullscreenFamily } from \"../lib/atoms\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewFullscreen = memo(() => {\n const { t } = useTranslation();\n const { prefix, chartManager } = useTvChartContext();\n const fullscreen = useAtomValue(chartFullscreenFamily(prefix));\n\n const handleToggle = useCallback(() => {\n chartManager.fullscreen = !chartManager.fullscreen;\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={\n fullscreen\n ? t(\"tradingView.exitFullscreen\" as never)\n : t(\"tradingView.fullscreen\" as never)\n }\n >\n {fullscreen\n ? t(\"tradingView.exit\" as never)\n : t(\"tradingView.fullscreen\" as never)}\n </button>\n );\n});\n","import {\n createContext,\n type PropsWithChildren,\n useContext,\n useMemo,\n} from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport type { ChartAreaManager } from \"../lib/ChartAreaManager\";\nimport { chartAreasFamily, chartSelectedIndexFamily } from \"../lib/atoms\";\nimport type { LibrarySymbolInfo } from \"../lib/charting-library.types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TvChartToolbarContextValue {\n activeAreaManager: ChartAreaManager | null;\n symbolInfo: LibrarySymbolInfo | null;\n}\n\nconst TvChartToolbarContext = createContext<TvChartToolbarContextValue | null>(\n null,\n);\n\nexport function useTvChartToolbarContext(): TvChartToolbarContextValue {\n const ctx = useContext(TvChartToolbarContext);\n if (!ctx)\n throw new Error(\n \"useTvChartToolbarContext must be used within TradingViewToolbarProvider\",\n );\n return ctx;\n}\n\nexport const TradingViewToolbarProvider = ({ children }: PropsWithChildren) => {\n const { prefix, chartManager } = useTvChartContext();\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n\n const activeAreaManager = useMemo(() => {\n if (!areas.length) return null;\n return chartManager.areaByIndex(selectedIndex);\n }, [chartManager, selectedIndex, areas]);\n\n const symbolInfo = useMemo(() => {\n return activeAreaManager?.symbolInfo ?? null;\n }, [activeAreaManager]);\n\n const value = useMemo<TvChartToolbarContextValue>(\n () => ({ activeAreaManager, symbolInfo }),\n [activeAreaManager, symbolInfo],\n );\n\n return (\n <TvChartToolbarContext.Provider value={value}>\n {children}\n </TvChartToolbarContext.Provider>\n );\n};\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { chartAreasFamily, chartSelectedIndexFamily } from \"../lib/atoms\";\nimport { TvChartKlineStyle } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nconst KLINE_STYLE_LABEL_KEYS: Record<number, string> = {\n [TvChartKlineStyle.Bars]: \"tradingView.style.bars\",\n [TvChartKlineStyle.Candles]: \"tradingView.style.candles\",\n [TvChartKlineStyle.Line]: \"tradingView.style.line\",\n [TvChartKlineStyle.Area]: \"tradingView.style.area\",\n [TvChartKlineStyle.HeikenAshi]: \"tradingView.style.heikenAshi\",\n [TvChartKlineStyle.HollowCandles]: \"tradingView.style.hollowCandles\",\n [TvChartKlineStyle.Baseline]: \"tradingView.style.baseline\",\n};\n\nconst DEFAULT_STYLES = [\n TvChartKlineStyle.Candles,\n TvChartKlineStyle.Bars,\n TvChartKlineStyle.Line,\n TvChartKlineStyle.Area,\n TvChartKlineStyle.HollowCandles,\n TvChartKlineStyle.HeikenAshi,\n TvChartKlineStyle.Baseline,\n];\n\nexport const TradingViewKlineStyleSelect = memo(() => {\n const { t } = useTranslation();\n const { prefix } = useTvChartContext();\n const { activeAreaManager } = useTvChartToolbarContext();\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n\n const currentStyle =\n areas[selectedIndex]?.chartStyle ?? TvChartKlineStyle.Candles;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n const style = parseInt(e.target.value, 10);\n activeAreaManager?.setChartStyle(style);\n },\n [activeAreaManager],\n );\n\n return (\n <select\n value={currentStyle}\n onChange={handleChange}\n className=\"text-xs bg-transparent text-muted-foreground hover:text-foreground cursor-pointer border-none outline-none px-1 py-0.5\"\n title={t(\"tradingView.klineStyle\" as never)}\n >\n {DEFAULT_STYLES.map((style) => (\n <option key={style} value={style}>\n {KLINE_STYLE_LABEL_KEYS[style]\n ? t(KLINE_STYLE_LABEL_KEYS[style] as never)\n : style}\n </option>\n ))}\n </select>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewOpenIndicator = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n\n const handleClick = useCallback(() => {\n chartManager.internalWidget?.openIndicatorSettingsDialog();\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={t(\"tradingView.indicators\" as never)}\n >\n {t(\"tradingView.indicators\" as never)}\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewOpenSettings = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n\n const handleClick = useCallback(() => {\n chartManager.internalWidget?.openSettingsDialog();\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={t(\"tradingView.chartSettings\" as never)}\n >\n {t(\"tradingView.settings\" as never)}\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport {\n chartPinnedResolutionsFamily,\n chartAreasFamily,\n chartSelectedIndexFamily,\n} from \"../lib/atoms\";\nimport type { TvChartResolution } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nexport const TradingViewResolutions = memo(() => {\n const { prefix } = useTvChartContext();\n const { activeAreaManager } = useTvChartToolbarContext();\n const pinnedResolutions = useAtomValue(chartPinnedResolutionsFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n\n const currentResolution = areas[selectedIndex]?.resolution;\n\n const handleClick = useCallback(\n (resolution: TvChartResolution) => {\n void activeAreaManager?.setResolution(resolution);\n },\n [activeAreaManager],\n );\n\n return (\n <div className=\"flex items-center gap-0.5\">\n {pinnedResolutions.map((r) => (\n <button\n key={r}\n type=\"button\"\n onClick={() => handleClick(r)}\n className={`px-2 py-0.5 text-xs rounded cursor-pointer transition-colors ${\n currentResolution === r\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n }`}\n >\n {r}\n </button>\n ))}\n </div>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewSnapshot = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n\n const handleClick = useCallback(async () => {\n try {\n const canvas = await chartManager.internalWidget?.takeClientScreenshot();\n if (!canvas) return;\n const link = document.createElement(\"a\");\n link.download = `chart-${Date.now()}.png`;\n link.href = canvas.toDataURL(\"image/png\");\n link.click();\n } catch (e) {\n console.error(\"TradingViewSnapshot\", e);\n }\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={t(\"tradingView.takeSnapshot\" as never)}\n >\n {t(\"tradingView.snapshot\" as never)}\n </button>\n );\n});\n","import { memo, type ReactNode } from \"react\";\nimport { TradingViewFullscreen } from \"./TradingViewFullscreen\";\nimport { TradingViewKlineStyleSelect } from \"./TradingViewKlineStyleSelect\";\nimport { TradingViewOpenIndicator } from \"./TradingViewOpenIndicator\";\nimport { TradingViewOpenSettings } from \"./TradingViewOpenSettings\";\nimport { TradingViewResolutions } from \"./TradingViewResolutions\";\nimport { TradingViewSnapshot } from \"./TradingViewSnapshot\";\nimport { TradingViewToolbarProvider } from \"./TradingViewToolbarProvider\";\n\nexport interface TradingViewToolbarProps {\n /** Extra elements to render before the default toolbar items */\n prefix?: ReactNode;\n /** Extra elements to render after the default toolbar items */\n suffix?: ReactNode;\n /** Override the default toolbar items entirely */\n children?: ReactNode;\n /** Show/hide resolution buttons (default: true) */\n showResolutions?: boolean;\n /** Show/hide kline style selector (default: true) */\n showKlineStyleSelect?: boolean;\n /** Show/hide indicator button (default: true) */\n showOpenIndicator?: boolean;\n /** Show/hide settings button (default: true) */\n showOpenSettings?: boolean;\n /** Show/hide fullscreen button (default: true) */\n showFullscreen?: boolean;\n /** Show/hide snapshot button (default: true) */\n showSnapshot?: boolean;\n}\n\nexport const TradingViewToolbar = memo(\n ({\n children,\n prefix: prefixSlot,\n suffix,\n showResolutions = true,\n showKlineStyleSelect = true,\n showOpenIndicator = true,\n showOpenSettings = true,\n showFullscreen = true,\n showSnapshot = true,\n }: TradingViewToolbarProps) => {\n return (\n <TradingViewToolbarProvider>\n <div className=\"flex items-center gap-1 px-2 py-1 border-b border-border min-h-[36px] flex-shrink-0\">\n {prefixSlot}\n {children ?? (\n <>\n {showResolutions && <TradingViewResolutions />}\n <div className=\"flex items-center gap-0.5 ml-auto\">\n {showKlineStyleSelect && <TradingViewKlineStyleSelect />}\n {showOpenIndicator && <TradingViewOpenIndicator />}\n {showOpenSettings && <TradingViewOpenSettings />}\n {showSnapshot && <TradingViewSnapshot />}\n {showFullscreen && <TradingViewFullscreen />}\n </div>\n </>\n )}\n {suffix}\n </div>\n </TradingViewToolbarProvider>\n );\n },\n);\n"," \nimport type { ResolutionString, SeriesType } from \"./charting-library.types\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport type { TvChartResolution } from \"./types\";\nimport { getTvChartLibraryResolution } from \"./utils\";\n\n/**\n * Per-area widget wrapper that proxies operations to the TradingView chart API.\n */\nexport class ChartWidget {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n private bridge: ChartWidgetBridge;\n readonly chartIndex: number;\n\n constructor(\n settings: ChartSettings,\n chartManager: ChartManager,\n bridge: ChartWidgetBridge,\n index: number,\n ) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n this.chartIndex = index;\n }\n\n get chartAreaManager() {\n return this.chartManager.areaByIndex(this.chartIndex);\n }\n\n get widget() {\n return this.bridge.getWidget();\n }\n\n get chartWidget() {\n return this.widget?.chart(this.chartIndex) ?? null;\n }\n\n setChartStyle(chartType: SeriesType): void {\n this.chartWidget?.setChartType(chartType);\n }\n\n getChartStyle(): SeriesType {\n return this.chartWidget?.chartType() ?? 1;\n }\n\n handleSymbolChange(symbol: string, prevSymbol: string): Promise<void> {\n void prevSymbol;\n return this.bridge.asyncWidgetMethodContext((widget, done) => {\n widget.chart(this.chartIndex).setSymbol(symbol, {\n dataReady: () => done(),\n doNotActivateChart: false,\n });\n });\n }\n\n handleResolutionChange(resolution: TvChartResolution, prevResolution: string): Promise<void> {\n void prevResolution;\n return this.bridge.asyncWidgetMethodContext((widget, done) => {\n const chart = widget.chart(this.chartIndex);\n chart.dataReady(() => {\n chart\n .setResolution(getTvChartLibraryResolution(resolution) as ResolutionString, {\n dataReady: done,\n doNotActivateChart: true,\n })\n .catch(() => {});\n });\n });\n }\n\n setPrecision(precision: number | null): void {\n this.widget?.applyOverrides({\n \"mainSeriesProperties.minTick\":\n precision === null ? \"default\" : `${Math.pow(10, precision)},1,false`,\n });\n }\n\n async dataReady(): Promise<void> {\n await this.bridge.onReady();\n if (!this.chartWidget) throw Error(\"ChartWidget: chartWidget is null\");\n return new Promise((resolve) => {\n this.chartWidget?.dataReady(() => setTimeout(resolve));\n });\n }\n\n timeScaleWidth(): number {\n return this.chartWidget?.getTimeScale()?.width() ?? NaN;\n }\n\n rightOffset(): number {\n return this.chartWidget?.getTimeScale()?.rightOffset() ?? NaN;\n }\n\n setRightOffset(offset: number): void {\n this.chartWidget?.getTimeScale()?.setRightOffset(offset);\n }\n\n barSpacing(): number {\n return this.chartWidget?.getTimeScale()?.barSpacing() ?? NaN;\n }\n\n setBarSpacing(spacing: number): void {\n this.chartWidget?.getTimeScale()?.setBarSpacing(spacing);\n }\n}\n"," \nimport type { ThemeName } from \"./charting-library.types\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { ChartWidget } from \"./ChartWidget\";\nimport { TvChartLayout } from \"./types\";\nimport { getTvChartLibraryLayout, getTvChartLibraryTheme } from \"./utils\";\n\n/**\n * High-level wrapper around the TradingView IChartingLibraryWidget.\n * Provides convenience methods for theme, layout, screenshots, etc.\n */\nexport class ChartLibraryWidget {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n readonly bridge: ChartWidgetBridge;\n\n constructor(settings: ChartSettings, chartManager: ChartManager, bridge: ChartWidgetBridge) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n }\n\n get widget() {\n return this.bridge.getWidget();\n }\n\n chartByIndex(index: number): ChartWidget {\n return new ChartWidget(this.settings, this.chartManager, this.bridge, index);\n }\n\n activeChart(): ChartWidget | undefined {\n const idx = this.widget?.activeChartIndex();\n return idx === undefined ? undefined : this.chartByIndex(idx);\n }\n\n openIndicatorSettingsDialog(): void {\n this.widget?.activeChart().executeActionById(\"insertIndicator\");\n }\n\n openSettingsDialog(): void {\n this.widget?.activeChart().executeActionById(\"chartProperties\");\n }\n\n takeClientScreenshot(): Promise<HTMLCanvasElement> | undefined {\n return this.widget?.takeClientScreenshot();\n }\n\n onLayoutChange(layout: TvChartLayout): void {\n this.widget?.setLayout(getTvChartLibraryLayout(layout));\n }\n\n async onThemeChange(theme: string, reverseColor: boolean): Promise<void> {\n void reverseColor;\n const tvTheme = getTvChartLibraryTheme(theme) as ThemeName;\n await this.widget?.changeTheme(tvTheme, { disableUndo: true });\n this.bridge.applyColorPaletteOverrides();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Listener<T = any> = (value: T) => void;\n\n/**\n * Lightweight typed event emitter for internal bridge-level events.\n * Replaces rxjs Subject for non-React event passing.\n */\nexport class EventEmitter<TEvents extends Record<string, any> = Record<string, any>> {\n private listeners = new Map<keyof TEvents, Set<Listener>>();\n\n on<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(listener);\n return () => {\n this.listeners.get(event)?.delete(listener);\n };\n }\n\n emit<K extends keyof TEvents>(event: K, value: TEvents[K]): void {\n this.listeners.get(event)?.forEach((fn) => fn(value));\n }\n\n off<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void {\n this.listeners.get(event)?.delete(listener);\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n GetMarksCallback,\n HistoryCallback,\n LibrarySymbolInfo,\n Mark,\n PeriodParams,\n ResolutionString,\n ResolveCallback,\n SubscribeBarsCallback,\n SymbolResolveExtension,\n} from \"./charting-library.types\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { ALL_TV_CHART_RESOLUTIONS } from \"./constants\";\nimport { getTvChartLibraryResolution } from \"./utils\";\n\n/**\n * TradingView Charting Library Datafeed API class.\n * Delegates history, live subscribe/unsubscribe, and symbol resolve to the\n * injectable {@link ITvChartDataFeedModule}. Consumers should implement that\n * module with {@link TradingViewDatafeedAdapter} rather than changing this class.\n */\nexport class ChartDataFeed {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n private bridge: ChartWidgetBridge;\n private abortController = new AbortController();\n\n constructor(settings: ChartSettings, chartManager: ChartManager, bridge: ChartWidgetBridge) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n }\n\n // Prevent JSON.stringify from following chartManager → internalWidget → chartManager (circular).\n toJSON(): null {\n return null;\n }\n\n async onReady(callback: (data: any) => void): Promise<void> {\n setTimeout(() => {\n callback({\n supported_resolutions: ALL_TV_CHART_RESOLUTIONS.map(getTvChartLibraryResolution),\n supports_marks: true,\n exchanges: [],\n });\n });\n await this.chartManager.datafeed?.onReady({\n setting: this.settings,\n chartManager: this.chartManager,\n instance: this.bridge,\n });\n }\n\n destroy(): void {\n this.abortController.abort();\n }\n\n async resolveSymbol(\n symbolName: string,\n onResolve: ResolveCallback,\n onError: ErrorCallback,\n extension?: SymbolResolveExtension,\n ): Promise<void> {\n try {\n const symbolInfo = await this.chartManager.datafeed?.resolveSymbol(symbolName, extension);\n if (symbolInfo) onResolve(symbolInfo);\n } catch (e) {\n console.error(\"ChartDataFeed.resolveSymbol\", e);\n onError(e as any);\n }\n }\n\n async getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n onResult: HistoryCallback,\n onError: ErrorCallback,\n ): Promise<void> {\n try {\n const bars = await this.chartManager.datafeed?.getBars(symbolInfo, resolution, periodParams);\n if (bars) onResult(bars, { noData: bars.length === 0 });\n } catch (e) {\n console.error(\"ChartDataFeed.getBars\", e);\n onError(e as any);\n }\n }\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void {\n this.chartManager.datafeed?.subscribeBars(\n symbolInfo,\n resolution,\n onTick,\n listenerGuid,\n onResetCacheNeededCallback,\n );\n }\n\n unsubscribeBars(listenerGuid: string): void {\n this.chartManager.datafeed?.unsubscribeBars(listenerGuid);\n }\n\n async getMarks(\n symbolInfo: LibrarySymbolInfo,\n from: number,\n to: number,\n onDataCallback: GetMarksCallback<Mark>,\n resolution: ResolutionString,\n ): Promise<void> {\n this.chartManager.datafeed?.getMarks?.(symbolInfo, from, to, onDataCallback, resolution);\n }\n\n /**\n * TradingView calls getQuotes to populate the current-price display in the\n * chart header. Without this method, TradingView's internal quote session\n * (qs_*) is created but never resolved, triggering \"Cannot read properties\n * of undefined\" errors. Returning an \"ok\" status with empty values tells\n * TradingView that the datafeed supports the quotes API but has no quote data\n * beyond what is already on the chart, which suppresses the internal errors.\n */\n getQuotes(\n symbols: string[],\n onDataCallback: (data: any[]) => void,\n onErrorCallback: (reason: string) => void,\n ): void {\n void onErrorCallback;\n onDataCallback(symbols.map((n) => ({ s: \"ok\", n, v: {} })));\n }\n\n /**\n * TradingView calls subscribeQuotes to receive real-time price ticks for the\n * header display. We return a no-op here because the chart already receives\n * real-time data via subscribeBars. Implementing this stub prevents the\n * internal qs_* session from remaining in a pending/broken state.\n */\n subscribeQuotes(\n symbols: string[],\n fastSymbols: string[],\n onRealtimeCallback: (data: any[]) => void,\n listenerGuid: string,\n ): void {\n void symbols;\n void fastSymbols;\n void onRealtimeCallback;\n void listenerGuid;\n }\n\n unsubscribeQuotes(listenerGuid: string): void {\n void listenerGuid;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { cloneDeep, uniqBy } from \"lodash-es\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { parseSymbol, stringifySymbolShort } from \"./utils\";\n\n/**\n * Adapter for TradingView save_load_adapter — persists chart layout and\n * drawing data to localStorage, keyed by storageId for multi-instance support.\n */\nexport class ChartSaveLoadAdapter {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n private bridge: ChartWidgetBridge;\n private data: any | null;\n private drawings: any | null;\n\n constructor(settings: ChartSettings, chartManager: ChartManager, bridge: ChartWidgetBridge) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n this.data = null;\n this.drawings = null;\n this.loadDataFromLocalStorage();\n }\n\n get layoutId(): string {\n return this.settings.storageId;\n }\n\n get shouldResetColorPalette(): boolean {\n const theme = this.data?.theme;\n const reverseColor = this.data?.reverseColor;\n return theme !== this.settings.theme || reverseColor !== this.settings.reverseColor;\n }\n\n // Prevent JSON.stringify from following chartManager → internalWidget → chartManager (circular).\n toJSON(): null {\n return null;\n }\n\n // ---- TradingView save_load_adapter interface ----\n\n getAllCharts(): Promise<any[]> {\n return new Promise((resolve) => {\n const charts: any[] = [];\n if (this.data) {\n charts.push({\n id: this.data.id,\n name: this.data.name,\n symbol: this.data.symbol,\n resolution: this.data.resolution,\n timestamp: this.data.timestamp,\n });\n }\n resolve(charts);\n });\n }\n\n removeChart(index: number): void {\n void index;\n throw Error(\"Method not implemented.\");\n }\n\n async saveChart(chart: any): Promise<string> {\n this.data = {\n ...chart,\n theme: this.settings.theme,\n reverseColor: this.settings.reverseColor,\n id: this.layoutId,\n timestamp: 0,\n };\n this.saveDataToLocalStorage();\n return this.data.id;\n }\n\n getChartContent(content: any): Promise<string> {\n void content;\n return new Promise((resolve) => {\n const data = JSON.parse(this.data.content);\n const chartsSymbols = JSON.parse(data.charts_symbols);\n const content = JSON.parse(data.content);\n resolve(\n JSON.stringify({\n ...data,\n chart_symbols: JSON.stringify(chartsSymbols),\n content: JSON.stringify(content),\n }),\n );\n });\n }\n\n async saveLineToolsAndGroups(\n _storageId: string,\n chartIndex: string,\n data: any,\n ): Promise<void> {\n this.drawings = this.drawings || { data: {}, timestamp: 0 };\n this.drawings.data = this.drawings.data || {};\n this.drawings.data[chartIndex] = this.drawings.data[chartIndex] || {};\n\n try {\n if (!data.sources) return;\n\n for (const [sourceId, source] of data.sources) {\n if (\n !source ||\n !source.symbol ||\n !source.state ||\n Object.keys(source.state).length === 0 ||\n sourceId.includes(\"/\")\n ) {\n if (source === null) {\n delete this.drawings.data[chartIndex][sourceId];\n }\n } else {\n const { address, chain } = parseSymbol(source.symbol);\n const symbol = stringifySymbolShort({ address, chain });\n const saveSource = {\n ...source,\n symbol,\n id: source.id.indexOf(\"/\") > 0 ? source.id.split(\"/\")[0] : source.id,\n };\n this.drawings.data[chartIndex][sourceId] = saveSource;\n }\n }\n this.saveDataToLocalStorage();\n } catch (e) {\n console.error(\"saveLineToolsAndGroups\", e);\n }\n }\n\n async loadLineToolsAndGroups(\n _storageId: string,\n chartIndex: string,\n _tool: string,\n symbolToLoad?: { symbol?: string },\n ): Promise<any | null> {\n if (!symbolToLoad?.symbol || !this.drawings?.data?.[chartIndex]) return null;\n\n const symbol = symbolToLoad.symbol;\n const { address, chain } = parseSymbol(symbol);\n const shortSymbol = stringifySymbolShort({ address, chain });\n\n const loadedSources = uniqBy(\n Object.values(cloneDeep(this.drawings.data[chartIndex])).filter(\n (it: any) => it.symbol === shortSymbol,\n ),\n \"id\",\n );\n\n try {\n return {\n sources: new Map<string, any>(\n loadedSources.map((source: any) => {\n const resultSource = cloneDeep({ ...source, symbol });\n return [resultSource.id, resultSource];\n }),\n ),\n };\n } catch (e) {\n console.error(\"ChartSaveLoadAdapter.loadLineToolsAndGroups\", e);\n return null;\n }\n }\n\n // ---- internal ----\n\n private getLayoutKey(key: string): string {\n return `charts.tradingview.data.${key}`;\n }\n\n private getDrawingKey(key: string): string {\n return `charts.tradingview.drawing.${key}`;\n }\n\n private loadDataFromLocalStorage(): void {\n const layoutKey = this.getLayoutKey(this.layoutId);\n const drawingKey = this.getDrawingKey(this.layoutId);\n const layout = localStorage.getItem(layoutKey);\n const drawing = localStorage.getItem(drawingKey);\n\n if (layout) {\n try {\n const parsed = JSON.parse(layout);\n const parsedContent = JSON.parse(parsed.content);\n parsed.content = JSON.stringify(parsedContent);\n this.data = parsed;\n } catch (e) {\n console.error(\"ChartSaveLoadAdapter loadDataFromLocalStorage parse layout error\", e);\n }\n }\n if (drawing) {\n try {\n this.drawings = JSON.parse(drawing);\n } catch (e) {\n console.error(\"ChartSaveLoadAdapter loadDataFromLocalStorage parse drawing error\", e);\n }\n }\n }\n\n private saveDataToLocalStorage(): void {\n const layoutKey = this.getLayoutKey(this.layoutId);\n const drawingKey = this.getDrawingKey(this.layoutId);\n const now = Math.round(Date.now() / 1e3);\n\n if (this.data) {\n this.data.timestamp = now;\n localStorage.setItem(layoutKey, JSON.stringify(this.data));\n }\n if (this.drawings) {\n this.drawings.timestamp = now;\n localStorage.setItem(drawingKey, JSON.stringify(this.drawings));\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\n\nconst CHART_SETTINGS_KEY = \"trading.chart.proterty\";\n\n/**\n * Adapter for TradingView settings_adapter — reads/writes per-instance\n * chart settings to localStorage with a scoped prefix.\n */\nexport class ChartSettingsAdapter {\n private storagePrefix: string;\n initialSettings: Record<string, any>;\n\n constructor(\n settings: ChartSettings,\n chartManager: ChartManager,\n bridge: ChartWidgetBridge,\n ) {\n void chartManager;\n void bridge;\n this.storagePrefix = `tradingview.${settings.storageId}.`;\n this.initialSettings = {};\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (!key) continue;\n\n if (key.startsWith(this.storagePrefix)) {\n const settingsKey = key.slice(this.storagePrefix.length);\n this.initialSettings[settingsKey] = localStorage.getItem(key);\n }\n }\n\n const defaultChartSettings = { noConfirmEnabled: 1 };\n if (this.initialSettings[CHART_SETTINGS_KEY]) {\n try {\n const chartSettings = JSON.parse(this.initialSettings[CHART_SETTINGS_KEY]);\n Object.assign(defaultChartSettings, chartSettings);\n Object.assign(defaultChartSettings, { noConfirmEnabled: true });\n } catch (e) {\n console.error(\"ChartSettingsAdapter: failed to parse chart settings\", e);\n }\n }\n this.initialSettings[CHART_SETTINGS_KEY] = JSON.stringify(defaultChartSettings);\n }\n\n toJSON(): null {\n return null;\n }\n\n removeValue(key: string): void {\n delete this.initialSettings[key];\n localStorage.removeItem(`${this.storagePrefix}${key}`);\n }\n\n setValue(key: string, value: any): void {\n this.initialSettings[key] = value;\n localStorage.setItem(`${this.storagePrefix}${key}`, value);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n ChartingLibraryWidgetOptions,\n CrossHairMovedEventParams,\n IChartingLibraryWidget,\n LayoutType,\n ResolutionString,\n TimezoneId,\n Timezone,\n VisibleTimeRange,\n WidgetConstructor,\n ColorTypes,\n} from \"./charting-library.types\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { EventEmitter } from \"./event-emitter\";\nimport { ChartDataFeed } from \"./ChartDataFeed\";\nimport { ChartSaveLoadAdapter } from \"./ChartSaveLoadAdapter\";\nimport { ChartSettingsAdapter } from \"./ChartSettingsAdapter\";\nimport {\n TV_CHART_INTERESTED_DOM_EVENTS,\n TV_CHART_THEME_COLORS,\n TV_CHART_LIGHT_THEME_COLORS,\n ALL_TV_CHART_RESOLUTIONS,\n} from \"./constants\";\nimport {\n getTvChartLayoutReverse,\n getTvChartLibraryLayout,\n getTvChartLibraryResolution,\n getTvChartLibraryTheme,\n getTvChartResolutionReverse,\n} from \"./utils\";\n\ninterface BridgeEvents {\n symbolChanged: [number, string];\n resolutionChanged: [number, string];\n visibleRangeChanged: [number, VisibleTimeRange];\n crosshairMoved: [number, CrossHairMovedEventParams];\n domEvent: [number, string, Event];\n}\n\ntype ModuleConstructor = new (\n settings: ChartSettings,\n chartManager: ChartManager,\n bridge: ChartWidgetBridge,\n) => any;\n\n/**\n * Bridge between our React/jotai layer and the TradingView charting library widget.\n * Manages widget lifecycle, chart subscriptions, and module orchestration.\n */\nexport class ChartWidgetBridge {\n readonly settings: ChartSettings;\n readonly chartManager: ChartManager;\n\n private WidgetCtor: WidgetConstructor;\n private moduleInstances = new Map<string, any>();\n private symbolIntervalSubs = new Map<string, () => void>();\n private abortController = new AbortController();\n\n private widgetReadyPromise: Promise<void> | null = null;\n private readyPromise: Promise<void> | null = null;\n\n widget: IChartingLibraryWidget | null = null;\n container: HTMLDivElement | null = null;\n ready = false;\n layoutReady = true;\n\n readonly events = new EventEmitter<BridgeEvents>();\n\n private libraryPath: string;\n private customCssUrl: string;\n\n constructor(\n settings: ChartSettings,\n chartManager: ChartManager,\n widgetConstructor: WidgetConstructor,\n options?: { libraryPath?: string; customCssUrl?: string },\n ) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.WidgetCtor = widgetConstructor;\n // Root-relative so nested Next routes (e.g. /tokens/sol/:address) do not\n // resolve bundles against the page path. TradingView treats library_path\n // as relative to the HTML page when it has no leading slash.\n this.libraryPath = options?.libraryPath ?? \"/static/charting_library/\";\n // custom_css_url is resolved relative to library_path by TradingView,\n // so this should be just the filename, not a full path.\n this.customCssUrl = options?.customCssUrl ?? \"custom-styles.css\";\n\n this.initModules();\n }\n\n // ---- public ----\n\n getWidget(): IChartingLibraryWidget | null {\n return this.widget;\n }\n\n async init(container: HTMLDivElement): Promise<void> {\n if (this.widgetReadyPromise) {\n throw new Error(\"ChartWidgetBridge already initialized.\");\n }\n\n const options = this.getWidgetOptions();\n this.container = container;\n this.widget = new this.WidgetCtor({ ...options, container });\n\n const widgetReadyPromise = new Promise<void>((resolve) => {\n this.widget?.onChartReady(() => resolve());\n });\n this.widgetReadyPromise = widgetReadyPromise;\n\n this.readyPromise = widgetReadyPromise\n .then(() => {\n this.ready = true;\n return this.handleChartReady();\n })\n .catch((error) => {\n console.warn(\"ChartWidgetBridge widget ready failed\", error);\n });\n\n this.moduleInstances.forEach((mod, name) => {\n try {\n mod.init?.call(mod);\n } catch (e) {\n console.warn(`ChartWidgetBridge init module ${name}`, e);\n }\n });\n\n await Promise.race([\n this.readyPromise,\n new Promise((_, reject) =>\n setTimeout(reject, 6e4, new Error(\"ChartWidgetBridge init timeout\")),\n ),\n ]);\n }\n\n async destroy(): Promise<void> {\n this.moduleInstances.forEach((mod) => mod.destroy?.call(mod));\n this.symbolIntervalSubs.forEach((unsub) => unsub());\n this.symbolIntervalSubs.clear();\n this.events.clear();\n this.abortController.abort();\n\n this.ready = false;\n this.widgetReadyPromise = null;\n this.readyPromise = null;\n\n this.widget?.remove();\n this.widget = null;\n }\n\n async onReady(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.widget) {\n this.widget.onChartReady(() => this.readyPromise?.then(resolve).catch(reject));\n } else {\n reject(Error(\"cannot call `onReady` before `init`\"));\n }\n });\n }\n\n async asyncWidgetMethodContext(\n callback: (widget: IChartingLibraryWidget, done: () => void) => void,\n ): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.widgetReadyPromise) {\n reject(new Error(\"ChartWidgetBridge: widget not ready\"));\n return;\n }\n\n const layoutReady = this.widgetReadyPromise.then(() => this.waitForLayout());\n const signal = this.abortController.signal;\n const handleAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", handleAbort);\n\n layoutReady\n .then(() => callback(this.widget!, resolve))\n .catch(reject)\n .finally(() => signal.removeEventListener(\"abort\", handleAbort));\n });\n }\n\n getModule(name: string): any {\n return this.moduleInstances.get(name);\n }\n\n applyColorPaletteOverrides(): void {\n this.widget?.applyOverrides(this.getColorPaletteOverrides());\n this.widget?.applyStudiesOverrides(this.getColorPaletteStudiesOverrides());\n }\n\n // ---- widget options ----\n\n private getWidgetOptions(): ChartingLibraryWidgetOptions {\n const disabledFeatures = [\n \"header_widget\",\n \"legend_inplace_edit\",\n \"display_market_status\",\n \"save_shortcut\",\n \"show_interval_dialog_on_key_press\",\n \"symbol_info\",\n \"symbol_search_hot_key\",\n \"uppercase_instrument_names\",\n \"show_symbol_logo_in_legend\",\n \"show_symbol_logo_for_compare_studies\",\n \"drawing_templates\",\n ];\n const enabledFeatures = [\n \"determine_first_data_request_size_using_visible_range\",\n \"request_only_visible_range_on_reset\",\n \"show_exchange_logos\",\n \"show_symbol_logos\",\n \"dont_show_boolean_study_arguments\",\n \"hide_last_na_study_output\",\n \"hide_right_toolbar\",\n \"seconds_resolution\",\n \"saveload_separate_drawings_storage\",\n \"volume_force_overlay\",\n \"create_volume_indicator_by_default\",\n \"two_character_bar_marks_labels\",\n ];\n\n if (this.settings.enableHideDrawingToolsByDefault) {\n enabledFeatures.push(\"hide_left_toolbar_by_default\");\n }\n if (!this.settings.enableTimeframesToolbar) {\n disabledFeatures.push(\"timeframes_toolbar\");\n }\n if (!this.settings.enableCreateVolumeIndicatorByDefault) {\n disabledFeatures.push(\"create_volume_indicator_by_default\");\n }\n if (!this.settings.enableVolumeForceOverlay) {\n disabledFeatures.push(\"volume_force_overlay\");\n }\n\n return {\n container: \"\",\n autosize: true,\n debug: false,\n load_last_chart: true,\n auto_save_delay: 1,\n timezone: this.localTimezone as Timezone,\n library_path: this.libraryPath,\n custom_css_url: this.customCssUrl,\n theme: getTvChartLibraryTheme(this.settings.theme),\n custom_font_family: window.getComputedStyle(document.body).fontFamily,\n symbol: this.chartManager.activeArea?.tickerSymbol,\n interval: getTvChartLibraryResolution(\n this.chartManager.activeArea?.resolution,\n ) as ResolutionString,\n locale: this.settings.locale,\n datafeed: this.getModule(\"datafeed\"),\n save_load_adapter: this.getModule(\"saveLoadAdapter\"),\n settings_adapter: this.getModule(\"settingsAdapter\"),\n custom_formatters: {\n // Must return null (not {}) when no factory is configured so TradingView\n // falls back to its built-in price formatter instead of calling {}.format().\n priceFormatterFactory: this.settings.priceFormatterFactory\n ? (symbolInfo: any, minTick: string) =>\n this.settings.priceFormatterFactory!(symbolInfo, minTick)\n : () => null,\n },\n overrides: { ...this.getSettingsOverrides(), ...this.getColorPaletteOverrides() },\n studies_overrides: this.getColorPaletteStudiesOverrides(),\n disabled_features: disabledFeatures,\n enabled_features: enabledFeatures,\n supported_resolutions: ALL_TV_CHART_RESOLUTIONS.map(getTvChartLibraryResolution),\n };\n }\n\n // ---- chart ready ----\n\n private async handleChartReady(): Promise<void> {\n const layout = getTvChartLibraryLayout(this.settings.layout);\n if (layout !== this.widget?.layout()) {\n await this.waitForLayout(layout as LayoutType);\n }\n\n this.widget?.setActiveChart(this.chartManager.selectedIndex);\n\n const saveLoadAdapter = this.getModule(\"saveLoadAdapter\") as ChartSaveLoadAdapter;\n if (saveLoadAdapter?.shouldResetColorPalette) {\n await this.widget?.changeTheme(getTvChartLibraryTheme(this.settings.theme), {\n disableUndo: true,\n });\n this.applyColorPaletteOverrides();\n }\n\n this.widget?.subscribe(\"onAutoSaveNeeded\", this.onAutoSaveNeeded.bind(this));\n this.widget?.subscribe(\"activeChartChanged\", this.activeChartChanged.bind(this));\n this.widget?.subscribe(\"layout_about_to_be_changed\", this.layoutWillChange.bind(this));\n this.widget?.subscribe(\"layout_changed\", this.layoutChanged.bind(this));\n\n this.syncChartsChanges();\n this.subscribeChartsChanges();\n this.installEventHooks();\n this.resetTimezone();\n }\n\n // ---- event handlers ----\n\n private onAutoSaveNeeded(): void {\n try {\n this.widget?.saveChartToServer(undefined, undefined, { defaultChartName: \"DEFAULT\" });\n } catch (e) {\n console.warn(\"ChartWidgetBridge.onAutoSaveNeeded\", e);\n }\n }\n\n private activeChartChanged(index: number): void {\n this.chartManager.selectedIndex = index;\n this.chartManager.settings.saveLoadAdapter\n .saveSettings(this.chartManager.settingsData)\n .catch(console.error);\n }\n\n private layoutWillChange(layout: LayoutType): void {\n this.layoutReady = false;\n this.chartManager.setLayout(getTvChartLayoutReverse(layout));\n }\n\n private layoutChanged(): void {\n this.layoutReady = true;\n this.syncChartsChanges();\n this.subscribeChartsChanges();\n this.widget?.unloadUnusedCharts();\n this.widget?.saveChartToServer();\n }\n\n // ---- sync / subscribe helpers ----\n\n private syncChartsChanges(): void {\n this.widget?.symbolSync()?.setValue(false);\n this.widget?.intervalSync()?.setValue(false);\n\n const chartCount = this.widget?.chartsCount() ?? 0;\n for (let i = 0; i < chartCount; i++) {\n const area = this.chartManager.areaByIndex(i);\n const chart = this.widget!.chart(i);\n void chart.setSymbol(area?.tickerSymbol ?? \"\", { doNotActivateChart: true });\n void chart.setResolution(\n getTvChartLibraryResolution(area?.resolution) as ResolutionString,\n { doNotActivateChart: true },\n );\n }\n }\n\n private subscribeChartsChanges(): void {\n const chartCount = this.widget?.chartsCount() ?? 0;\n\n this.symbolIntervalSubs.forEach((unsub, key) => {\n if (parseInt(key) >= chartCount) {\n unsub();\n this.symbolIntervalSubs.delete(key);\n }\n });\n\n for (let i = 0; i < chartCount; i++) {\n if (this.symbolIntervalSubs.has(`${i}`)) continue;\n\n const area = this.chartManager.areaByIndex(i);\n const chart = this.widget!.chart(i);\n\n chart.getPanes().forEach((pane) => pane.getMainSourcePriceScale()?.setAutoScale(true));\n\n const symbolSub = chart.onSymbolChanged();\n const intervalSub = chart.onIntervalChanged();\n\n const onSymbolChanged = () => {\n this.events.emit(\"symbolChanged\", [i, chart.symbol()]);\n area?.setSymbol(chart.symbol()).catch(() => {});\n this.onAutoSaveNeeded();\n };\n\n const onIntervalChanged = (interval: ResolutionString) => {\n const resolution = getTvChartResolutionReverse(interval);\n this.events.emit(\"resolutionChanged\", [i, resolution]);\n area?.setResolution(resolution).catch(() => {});\n };\n\n symbolSub.subscribe(area, onSymbolChanged);\n intervalSub.subscribe(area, onIntervalChanged);\n\n this.symbolIntervalSubs.set(`${i}`, () => {\n symbolSub.unsubscribe(area, onSymbolChanged);\n intervalSub.unsubscribe(area, onIntervalChanged);\n });\n }\n }\n\n private installEventHooks(): void {\n const iframe = this.container?.lastElementChild as HTMLIFrameElement | null;\n const doc = iframe?.contentWindow?.document;\n if (!doc) return;\n\n doc.addEventListener(\"click\", () => iframe?.click());\n\n if (doc.defaultView?.MutationObserver) {\n const seen = new WeakSet();\n const layout = doc.querySelector(\".layout__area--center\");\n if (layout) {\n const register = () => {\n layout.querySelectorAll(\".chart-container\").forEach((el, idx) => {\n if (!seen.has(el)) {\n seen.add(el);\n TV_CHART_INTERESTED_DOM_EVENTS.forEach((name) => {\n el.addEventListener(\n name,\n (evt) => this.events.emit(\"domEvent\", [idx, name, evt]),\n { passive: true },\n );\n });\n }\n });\n };\n new doc.defaultView.MutationObserver(register).observe(layout, { childList: true });\n register();\n }\n }\n }\n\n private resetTimezone(): void {\n try {\n const count = this.widget?.chartsCount() ?? 0;\n for (let i = 0; i < count; i++) {\n this.widget\n ?.chart(i)\n ?.getTimezoneApi()\n ?.setTimezone(this.localTimezone as TimezoneId);\n }\n } catch (e) {\n console.error(\"ChartWidgetBridge: Reset timezone\", e);\n }\n }\n\n private get localTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n private async waitForLayout(layout?: LayoutType): Promise<void> {\n if (!this.widget || (this.layoutReady && !layout)) return;\n let handler: () => void;\n const p = new Promise<void>((resolve) => {\n handler = resolve;\n this.widget!.subscribe(\"layout_changed\", resolve);\n if (layout) this.widget!.setLayout(layout);\n }).finally(() => {\n this.widget!.unsubscribe(\"layout_changed\", handler);\n });\n return p;\n }\n\n // ---- overrides ----\n\n private getSettingsOverrides(): Record<string, any> {\n return {\n \"mainSeriesProperties.minTick\": \"default\",\n \"paneProperties.legendProperties.showSeriesTitle\": this.settings.enableLegendSeriesTitle,\n };\n }\n\n private getColorPaletteOverrides(): Record<string, any> {\n const cardColor =\n this.settings.theme === \"dark\"\n ? TV_CHART_THEME_COLORS.card\n : TV_CHART_LIGHT_THEME_COLORS.card;\n\n return {\n \"paneProperties.background\": TV_CHART_THEME_COLORS.chartBg,\n \"paneProperties.backgroundType\": \"solid\" as ColorTypes,\n volumePaneSize: \"medium\",\n \"mainSeriesProperties.candleStyle.upColor\": TV_CHART_THEME_COLORS.increase,\n \"mainSeriesProperties.barStyle.upColor\": TV_CHART_THEME_COLORS.increase,\n \"mainSeriesProperties.columnStyle.upColor\": TV_CHART_THEME_COLORS.increase,\n \"mainSeriesProperties.candleStyle.downColor\": TV_CHART_THEME_COLORS.decrease,\n \"mainSeriesProperties.barStyle.downColor\": TV_CHART_THEME_COLORS.decrease,\n \"mainSeriesProperties.columnStyle.downColor\": TV_CHART_THEME_COLORS.decrease,\n \"mainSeriesProperties.candleStyle.borderUpColor\": TV_CHART_THEME_COLORS.increase,\n \"mainSeriesProperties.candleStyle.borderDownColor\": TV_CHART_THEME_COLORS.decrease,\n \"mainSeriesProperties.candleStyle.wickUpColor\": TV_CHART_THEME_COLORS.increase,\n \"mainSeriesProperties.candleStyle.wickDownColor\": TV_CHART_THEME_COLORS.decrease,\n \"linetoolorder.bodyBackgroundColor\": cardColor,\n \"linetoolorder.bodyBackgroundTransparency\": 0,\n };\n }\n\n private getColorPaletteStudiesOverrides(): Record<string, any> {\n return {\n \"volume.volume.color.0\": TV_CHART_THEME_COLORS.decrease,\n \"volume.volume.color.1\": TV_CHART_THEME_COLORS.increase,\n \"volume.volume.transparency\": 80,\n };\n }\n\n // ---- modules ----\n\n private initModules(): void {\n const MODULES: Record<string, ModuleConstructor> = {\n datafeed: ChartDataFeed,\n saveLoadAdapter: ChartSaveLoadAdapter as any,\n settingsAdapter: ChartSettingsAdapter as any,\n };\n Object.entries(MODULES).forEach(([name, Ctor]) => {\n this.moduleInstances.set(name, new Ctor(this.settings, this.chartManager, this));\n });\n }\n}\n","import { memo } from \"react\";\n\n/**\n * Placeholder for multi-chart layout area title injection.\n * The TradingView charting library renders charts into its own iframes,\n * so layout-level customization is done via the bridge's installEventHooks.\n *\n * This component can be extended to inject custom UI above or around\n * individual chart panes when multi-chart layouts are active.\n */\nexport const TradingViewLayout = memo(() => {\n return null;\n});\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { ChartLibraryWidget } from \"../lib/ChartLibraryWidget\";\nimport { ChartWidgetBridge } from \"../lib/ChartWidgetBridge\";\nimport { TradingViewLayout } from \"./TradingViewLayout\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TradingViewWidgetContainerProps {\n onReady?: () => void;\n}\n\nexport const TradingViewWidgetContainer = forwardRef<\n ChartLibraryWidget | undefined,\n TradingViewWidgetContainerProps\n>(({ onReady }, ref) => {\n const {\n chartManager,\n chartSettings,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n } = useTvChartContext();\n\n const onReadyRef = useRef(onReady);\n const [widget, setWidget] = useState<ChartLibraryWidget>();\n const [containerElement, setContainerElement] =\n useState<HTMLDivElement | null>(null);\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n if (ready && onReadyRef.current) {\n setTimeout(onReadyRef.current);\n }\n }, [ready]);\n\n useImperativeHandle(ref, () => widget, [widget]);\n\n useEffect(() => {\n if (!containerElement) return;\n\n const bridge = new ChartWidgetBridge(\n chartSettings,\n chartManager,\n widgetConstructor,\n {\n libraryPath,\n customCssUrl,\n },\n );\n const libWidget = new ChartLibraryWidget(\n chartSettings,\n chartManager,\n bridge,\n );\n\n setWidget(libWidget);\n\n bridge\n .init(containerElement)\n .then(() => setReady(true))\n .catch((error) => {\n console.error(\n \"TradingViewWidgetContainer: failed to init bridge\",\n error,\n );\n });\n\n return () => {\n bridge\n .destroy()\n .then(() => {\n setWidget(undefined);\n setReady(false);\n })\n .catch(() => {\n console.error(\"TradingViewWidgetContainer: failed to destroy bridge\");\n });\n };\n }, [\n containerElement,\n chartSettings,\n chartManager,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n ]);\n\n return (\n <div className=\"w-full h-full\">\n <TradingViewLayout />\n <div\n id=\"tv_chart_container\"\n className=\"w-full h-full\"\n ref={setContainerElement}\n />\n </div>\n );\n});\n","import { memo, useCallback, useLayoutEffect, useMemo } from \"react\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { TradingViewWidgetContainer } from \"./TradingViewWidgetContainer\";\n\nexport interface TradingViewWidgetProviderProps {\n onReady?: () => void;\n}\n\nexport const TradingViewWidgetProvider = memo(\n ({ onReady }: TradingViewWidgetProviderProps) => {\n const { chartManager, chartSettings } = useTvChartContext();\n\n const renderId = useMemo(\n () => `${chartSettings.timezone}_${chartManager.reloadId}`,\n [chartSettings.timezone, chartManager.reloadId],\n );\n\n useLayoutEffect(() => {\n chartManager.setLoading(true);\n }, [chartManager, chartSettings.chartType, renderId]);\n\n const handleReady = useCallback(() => {\n onReady?.();\n chartManager.onInternalWidgetReady();\n chartManager.setLoading(false);\n }, [chartManager, onReady]);\n\n return (\n <div className=\"h-full min-h-0 w-full overflow-hidden\">\n <TradingViewWidgetContainer\n onReady={handleReady}\n ref={(ref) => chartManager.setInternalWidget(ref ?? null)}\n />\n </div>\n );\n },\n);\n","import { forwardRef, memo, type ReactNode } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chartLoadingFamily } from \"../lib/atoms\";\nimport type { WidgetConstructor } from \"../lib/charting-library.types\";\nimport type { TvChartConfig } from \"./TradingViewConfig\";\nimport {\n TradingViewProvider,\n TvChartHandle,\n useTvChartContext,\n} from \"./TradingViewProvider\";\nimport {\n TradingViewToolbar,\n type TradingViewToolbarProps,\n} from \"./TradingViewToolbar\";\nimport { TradingViewWidgetProvider } from \"./TradingViewWidgetProvider\";\n\nexport interface TradingViewInstance {\n handle: TvChartHandle;\n}\n\nexport interface TradingViewProps {\n /** Chart configuration */\n initConfig: TvChartConfig;\n /** TradingView Widget constructor (injected by consumer) */\n widgetConstructor: WidgetConstructor;\n /** Path to charting library static files */\n libraryPath?: string;\n /** Custom CSS URL for the charting library */\n customCssUrl?: string;\n /** Toolbar configuration; pass false to hide */\n toolbar?: TradingViewToolbarProps | false;\n /** Optional loading overlay */\n loadingOverlay?: ReactNode;\n /** Called when chart widget is ready */\n onReady?: () => void;\n /** Additional children rendered below the chart */\n children?: ReactNode;\n /** Class name for the outer container */\n className?: string;\n}\n\nconst TradingViewInner = memo(\n ({\n toolbar,\n loadingOverlay,\n onReady,\n children,\n }: Pick<\n TradingViewProps,\n \"toolbar\" | \"loadingOverlay\" | \"onReady\" | \"children\"\n >) => {\n const { prefix } = useTvChartContext();\n const loading = useAtomValue(chartLoadingFamily(prefix));\n\n return (\n <>\n {toolbar !== false && <TradingViewToolbar {...(toolbar || {})} />}\n <div className=\"relative flex-1 w-full overflow-hidden\">\n {loading && loadingOverlay && (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-background/80\">\n {loadingOverlay}\n </div>\n )}\n <TradingViewWidgetProvider onReady={onReady} />\n </div>\n {children}\n </>\n );\n },\n);\n\n/**\n * Main TradingView K-line chart component.\n * Wraps the TradingView Charting Library with jotai-based state management\n * and multi-instance support via storageId.\n */\nexport const TradingView = forwardRef<TvChartHandle, TradingViewProps>(\n (\n {\n initConfig,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n toolbar,\n loadingOverlay,\n onReady,\n children,\n className,\n },\n ref,\n ) => {\n return (\n <div className={`flex flex-col w-full h-full ${className ?? \"\"}`}>\n <TradingViewProvider\n ref={ref}\n initConfig={initConfig}\n widgetConstructor={widgetConstructor}\n libraryPath={libraryPath}\n customCssUrl={customCssUrl}\n >\n <TradingViewInner\n toolbar={toolbar}\n loadingOverlay={loadingOverlay}\n onReady={onReady}\n >\n {children}\n </TradingViewInner>\n </TradingViewProvider>\n </div>\n );\n },\n);\n","import { memo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chartAreasFamily, chartSelectedIndexFamily } from \"../lib/atoms\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TradingViewAreaTitleProps {\n index?: number;\n}\n\n/**\n * Displays the symbol/resolution title for a chart area.\n * Useful when rendering custom headers in multi-chart layouts.\n */\nexport const TradingViewAreaTitle = memo(\n ({ index }: TradingViewAreaTitleProps) => {\n const { prefix } = useTvChartContext();\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const targetIndex = index ?? selectedIndex;\n const area = areas[targetIndex];\n\n if (!area) return null;\n\n return (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {area.tickerSymbol || area.symbol}\n </span>\n <span>{area.resolution}</span>\n </div>\n );\n },\n);\n","import { useTvChartContext } from \"../components/TradingViewProvider\";\n\n/**\n * Returns the ChartManager instance for the current TradingView context.\n */\nexport function useChartManager() {\n return useTvChartContext().chartManager;\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTvChartContext } from \"../components/TradingViewProvider\";\nimport { chartSelectedIndexFamily, chartAreasFamily } from \"../lib/atoms\";\n\n/**\n * Returns the ChartAreaManager for the currently active chart area.\n */\nexport function useActiveAreaManager() {\n const { prefix, chartManager } = useTvChartContext();\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n\n return useMemo(() => {\n if (!areas.length) return null;\n return chartManager.areaByIndex(selectedIndex);\n }, [chartManager, selectedIndex, areas]);\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTvChartContext } from \"../components/TradingViewProvider\";\nimport { chartSelectedIndexFamily, chartAreasFamily } from \"../lib/atoms\";\n\n/**\n * Returns the resolved symbol info for the active chart area.\n */\nexport function useSymbolInfo() {\n const { prefix, chartManager } = useTvChartContext();\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n const activeArea = areas[selectedIndex];\n\n return useMemo(() => {\n if (!activeArea?.tickerSymbol) return null;\n return (\n chartManager.symbolResolver?.getSymbolInfo(activeArea.tickerSymbol) ??\n null\n );\n }, [chartManager, activeArea?.tickerSymbol]);\n}\n","import type {\n Bar,\n GetMarksCallback,\n LibrarySymbolInfo,\n Mark,\n PeriodParams,\n ResolutionString,\n SubscribeBarsCallback,\n SymbolResolveExtension,\n Timezone,\n} from \"./charting-library.types\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ITvChartDataFeedModule, TvChartResolution } from \"./types\";\nimport {\n getTvChartResolutionFrame,\n getTvChartResolutionReverse,\n getTvChartTickTimestamp,\n} from \"./utils\";\n\n/**\n * Raw candle the consumer source returns. `time` may be unix seconds\n * (≤10 digits), milliseconds (>10 digits), or a `Date`.\n * {@link TradingViewDatafeedAdapter} owns unit mapping via\n * {@link getTvChartTickTimestamp}.\n */\nexport interface TradingViewCandle {\n time: number | Date;\n open: number;\n high: number;\n low: number;\n close: number;\n volume?: number;\n}\n\nexport interface TradingViewHistoryRequest {\n symbolInfo: LibrarySymbolInfo;\n resolution: ResolutionString;\n periodParams: PeriodParams;\n}\n\nexport interface TradingViewLiveSubscribeRequest {\n symbolInfo: LibrarySymbolInfo;\n resolution: ResolutionString;\n listenerGuid: string;\n onResetCacheNeededCallback: () => void;\n}\n\n/**\n * Consumer candle backend. The adapter wraps this with timestamp mapping,\n * out-of-order live-bar filtering, and idempotent unsubscribe.\n */\nexport interface CandleSource {\n getHistory(request: TradingViewHistoryRequest): Promise<readonly TradingViewCandle[]>;\n subscribe(\n request: TradingViewLiveSubscribeRequest,\n onCandle: (candle: TradingViewCandle) => void,\n ): void;\n unsubscribe(listenerGuid: string): void;\n}\n\nexport interface TradingViewDatafeedAdapterOptions {\n resolveSymbol?: ITvChartDataFeedModule[\"resolveSymbol\"];\n onReady?: ITvChartDataFeedModule[\"onReady\"];\n onDestroy?: ITvChartDataFeedModule[\"onDestroy\"];\n getMarks?: ITvChartDataFeedModule[\"getMarks\"];\n getFirstBarTime?: ITvChartDataFeedModule[\"getFirstBarTime\"];\n /** Viewport width (px) below which {@link isTvChartMobileViewport} is true. */\n mobileBreakpointPx?: number;\n}\n\ninterface LiveListenerState {\n symbolKey: string;\n lastBarTime: number;\n generation: number;\n}\n\n/** Tailwind `md` — unit-level mobile/resize seam, no widget required. */\nexport const DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX = 768;\n\nexport function isTvChartMobileViewport(\n widthPx: number,\n breakpointPx: number = DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX,\n): boolean {\n return widthPx > 0 && widthPx < breakpointPx;\n}\n\nfunction getTimeframeMs(resolution: string): number {\n try {\n return getTvChartResolutionFrame(resolution as TvChartResolution);\n } catch {\n return getTvChartResolutionFrame(getTvChartResolutionReverse(resolution));\n }\n}\n\nfunction toNumericTime(time: number | Date): number {\n return time instanceof Date ? time.getTime() : time;\n}\n\nfunction toBar(candle: TradingViewCandle, timeframe: number): Bar {\n const bar: Bar = {\n time: getTvChartTickTimestamp(toNumericTime(candle.time), timeframe),\n open: candle.open,\n high: candle.high,\n low: candle.low,\n close: candle.close,\n };\n if (candle.volume !== undefined) bar.volume = candle.volume;\n return bar;\n}\n\nfunction historyKey(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString): string {\n return `${symbolInfo.ticker ?? symbolInfo.name}:${resolution}`;\n}\n\n/**\n * Consumer-facing TradingView datafeed seam.\n *\n * Implements {@link ITvChartDataFeedModule} so `ChartManager.datafeed` and\n * `ChartDataFeed` stay unchanged. History, live subscribe, and unsubscribe\n * are explicit methods; symbol resolve / onReady / onDestroy are delegated.\n */\nexport class TradingViewDatafeedAdapter implements ITvChartDataFeedModule {\n private readonly source: CandleSource;\n private readonly options: TradingViewDatafeedAdapterOptions;\n private readonly liveListeners = new Map<string, LiveListenerState>();\n private readonly lastHistoryBarTime = new Map<string, number>();\n private liveGeneration = 0;\n\n constructor(source: CandleSource, options: TradingViewDatafeedAdapterOptions = {}) {\n this.source = source;\n this.options = options;\n }\n\n isMobileViewport(widthPx: number): boolean {\n return isTvChartMobileViewport(widthPx, this.options.mobileBreakpointPx);\n }\n\n async onReady(options: {\n setting: ChartSettings;\n chartManager: ChartManager;\n instance: ChartWidgetBridge;\n }): Promise<void> {\n await this.options.onReady?.(options);\n }\n\n onDestroy(): void {\n for (const listenerGuid of [...this.liveListeners.keys()]) {\n this.unsubscribeLiveBars(listenerGuid);\n }\n this.lastHistoryBarTime.clear();\n this.options.onDestroy?.();\n }\n\n async resolveSymbol(\n symbolName: string,\n extension?: SymbolResolveExtension,\n ): Promise<LibrarySymbolInfo | null> {\n return (await this.options.resolveSymbol?.(symbolName, extension)) ?? null;\n }\n\n async getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n ): Promise<Bar[]> {\n return this.getHistoryBars(symbolInfo, resolution, periodParams);\n }\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void {\n this.subscribeLiveBars(\n symbolInfo,\n resolution,\n onTick,\n listenerGuid,\n onResetCacheNeededCallback,\n );\n }\n\n unsubscribeBars(listenerGuid: string): void {\n this.unsubscribeLiveBars(listenerGuid);\n }\n\n getMarks(\n symbolInfo: LibrarySymbolInfo,\n from: number,\n to: number,\n onDataCallback: GetMarksCallback<Mark>,\n resolution: ResolutionString,\n ): void {\n this.options.getMarks?.(symbolInfo, from, to, onDataCallback, resolution);\n }\n\n getFirstBarTime(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n options: { timezone: Timezone },\n ): Promise<void> {\n return this.options.getFirstBarTime?.(symbolInfo, resolution, options) ?? Promise.resolve();\n }\n\n /**\n * Fetch history candles, map timestamps, and return `[]` when the source\n * has no data. {@link ChartDataFeed} maps `[]` to `{ noData: true }`.\n */\n async getHistoryBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n ): Promise<Bar[]> {\n const candles = await this.source.getHistory({\n symbolInfo,\n resolution,\n periodParams,\n });\n const timeframe = getTimeframeMs(resolution);\n const bars = (candles ?? []).map((candle) => toBar(candle, timeframe));\n if (bars.length > 0) {\n const key = historyKey(symbolInfo, resolution);\n const next = Math.max(...bars.map((bar) => bar.time));\n const prev = this.lastHistoryBarTime.get(key) ?? 0;\n if (next > prev) this.lastHistoryBarTime.set(key, next);\n }\n return bars;\n }\n\n /**\n * Subscribe to live candles. Out-of-order ticks (`time < last bar time`)\n * are dropped. Re-subscribing the same guid unsubscribes the previous\n * source listener first.\n */\n subscribeLiveBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void {\n this.unsubscribeLiveBars(listenerGuid);\n\n const symbolKey = historyKey(symbolInfo, resolution);\n const timeframe = getTimeframeMs(resolution);\n const generation = ++this.liveGeneration;\n this.liveListeners.set(listenerGuid, {\n symbolKey,\n lastBarTime: this.lastHistoryBarTime.get(symbolKey) ?? 0,\n generation,\n });\n\n this.source.subscribe(\n {\n symbolInfo,\n resolution,\n listenerGuid,\n onResetCacheNeededCallback,\n },\n (candle) => {\n const state = this.liveListeners.get(listenerGuid);\n if (!state || state.generation !== generation) return;\n const bar = toBar(candle, timeframe);\n const last = Math.max(\n state.lastBarTime,\n this.lastHistoryBarTime.get(state.symbolKey) ?? 0,\n );\n if (bar.time < last) return;\n state.lastBarTime = bar.time;\n onTick(bar);\n },\n );\n }\n\n /**\n * Unsubscribe a live listener. The source is called at most once per guid;\n * a second call is a no-op (Map delete).\n */\n unsubscribeLiveBars(listenerGuid: string): void {\n if (!this.liveListeners.has(listenerGuid)) return;\n this.liveListeners.delete(listenerGuid);\n this.source.unsubscribe(listenerGuid);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/types.ts","../src/lib/constants.ts","../src/lib/atoms.ts","../src/lib/ChartAreaManager.ts","../src/lib/ChartManager.ts","../src/lib/ChartSettingsStore.ts","../src/lib/utils.ts","../src/lib/ChartSettings.ts","../src/lib/ChartSymbolResolver.ts","../src/components/TradingViewConfig.tsx","../src/components/TradingViewProvider.tsx","../src/components/TradingViewFullscreen.tsx","../src/components/TradingViewToolbarProvider.tsx","../src/components/TradingViewKlineStyleSelect.tsx","../src/components/TradingViewOpenIndicator.tsx","../src/components/TradingViewOpenSettings.tsx","../src/components/TradingViewResolutions.tsx","../src/components/TradingViewSnapshot.tsx","../src/components/TradingViewToolbar.tsx","../src/lib/ChartWidget.ts","../src/lib/ChartLibraryWidget.ts","../src/lib/event-emitter.ts","../src/lib/ChartDataFeed.ts","../src/lib/ChartSaveLoadAdapter.ts","../src/lib/ChartSettingsAdapter.ts","../src/lib/ChartWidgetBridge.ts","../src/components/TradingViewLayout.tsx","../src/components/TradingViewWidgetContainer.tsx","../src/components/TradingViewWidgetProvider.tsx","../src/components/TradingView.tsx","../src/components/TradingViewAreaTitle.tsx","../src/hooks/useChartManager.ts","../src/hooks/useActiveAreaManager.ts","../src/hooks/useSymbolInfo.ts","../src/lib/TradingViewDatafeedAdapter.ts"],"names":["TvChartType","TvChartPriceType","TvChartQuoteType","TvChartKlineStyle","TvChartTheme","TvChartFeature","TvChartLayout","TvChartErrorResetType","ENABLED_TV_CHART_FEATURES","DEFAULT_TV_CHART_RESOLUTIONS","ALL_TV_CHART_RESOLUTIONS","SUPPORTED_TV_CHART_LAYOUTS","TV_CHART_INTERESTED_DOM_EVENTS","TV_CHART_THEME_COLORS","TV_CHART_LIGHT_THEME_COLORS","chartLoadingFamily","atomFamily","prefix","atom","chartFullscreenFamily","chartSelectedIndexFamily","chartPinnedResolutionsFamily","chartAreasFamily","chartShowDrawingToolbarFamily","settingsLayoutFamily","settingsChartTypeFamily","settingsThemeFamily","settingsLocaleFamily","settingsTimezoneFamily","settingsTickerSymbolFamily","settingsStorageIdFamily","settingsReverseColorFamily","settingsBackgroundColorFamily","settingsIncreaseColorFamily","settingsDecreaseColorFamily","settingsEnabledFeaturesFamily","settingsDisabledFeaturesFamily","widgetReadyFamily","settingsDataFamily","get","layout","chartType","selectedIndex","pinnedResolutions","showDrawingToolbar","areaContents","isEqual","ChartAreaManager","settings","manager","index","store","areaSettings","merged","patch","areas","current","key","value","chartStyle","symbol","promises","info","p","e","resolution","ChartManager","v","idx","areaStates","stored","pr","r","ac","area","save","debounce","data","a","loading","locale","timezone","focused","show","widget","theme","colors","reverseColor","target","prevCount","i","currentArea","currentSettings","newArea","ChartSettingsStore","storageId","localSettings","chartStoreData","omit","newChartStoreData","updated","k","parseSymbol","chain","address","quote","priceType","stringifySymbol","stringifySymbolShort","THEME_MAP","getTvChartLibraryTheme","RESOLUTION_MAP","getTvChartLibraryResolution","RESOLUTION_MAP_REVERSE","getTvChartResolutionReverse","LOCALE_MAP","getTvChartLibraryLocale","LAYOUT_MAP","getTvChartLibraryLayout","LAYOUT_MAP_REVERSE","getTvChartLayoutReverse","RESOLUTION_FRAMES","getTvChartResolutionFrame","frame","getTvChartTickTimestamp","time","timeframe","timeInMs","ChartSettings","setter","feature","enabled","f","callback","ChartSymbolResolver","datafeed","symbols","s","promise","TradingViewConfig","initConfig","children","chartManager","chartSettings","useTvChartContext","initialized","setInitialized","useState","useEffect","jsx","Fragment","TvChartContext","createContext","ctx","useContext","useTvChartManager","useTvChartPrefix","TvChartHandle","setting","TradingViewProvider","forwardRef","widgetConstructor","libraryPath","customCssUrl","ref","useStore","useMemo","handle","useImperativeHandle","TradingViewFullscreen","memo","t","useTranslation","fullscreen","useAtomValue","handleToggle","useCallback","TvChartToolbarContext","useTvChartToolbarContext","TradingViewToolbarProvider","activeAreaManager","symbolInfo","KLINE_STYLE_LABEL_KEYS","DEFAULT_STYLES","TradingViewKlineStyleSelect","currentStyle","handleChange","style","TradingViewOpenIndicator","handleClick","TradingViewOpenSettings","TradingViewResolutions","currentResolution","TradingViewSnapshot","canvas","link","TradingViewToolbar","prefixSlot","suffix","showResolutions","showKlineStyleSelect","showOpenIndicator","showOpenSettings","showFullscreen","showSnapshot","jsxs","ChartWidget","bridge","prevSymbol","done","prevResolution","chart","precision","resolve","offset","spacing","ChartLibraryWidget","tvTheme","EventEmitter","event","listener","fn","ChartDataFeed","symbolName","onResolve","onError","extension","periodParams","onResult","bars","onTick","listenerGuid","onResetCacheNeededCallback","from","to","onDataCallback","onErrorCallback","n","fastSymbols","onRealtimeCallback","ChartSaveLoadAdapter","charts","content","chartsSymbols","_storageId","chartIndex","sourceId","source","saveSource","_tool","symbolToLoad","shortSymbol","loadedSources","uniqBy","cloneDeep","it","resultSource","layoutKey","drawingKey","drawing","parsed","parsedContent","now","CHART_SETTINGS_KEY","ChartSettingsAdapter","settingsKey","defaultChartSettings","ChartWidgetBridge","options","container","widgetReadyPromise","error","mod","name","_","reject","unsub","layoutReady","signal","handleAbort","disabledFeatures","enabledFeatures","minTick","chartCount","pane","symbolSub","intervalSub","onSymbolChanged","onIntervalChanged","interval","iframe","doc","seen","register","el","evt","count","handler","backgroundColor","increaseColor","decreaseColor","cardColor","fallback","probe","resolved","Ctor","TradingViewLayout","TradingViewWidgetContainer","onReady","onReadyRef","useRef","setWidget","containerElement","setContainerElement","ready","setReady","libWidget","TradingViewWidgetProvider","renderId","useLayoutEffect","handleReady","TradingViewInner","toolbar","loadingOverlay","TradingView","className","TradingViewAreaTitle","useChartManager","useActiveAreaManager","useSymbolInfo","activeArea","DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX","isTvChartMobileViewport","widthPx","breakpointPx","getTimeframeMs","toNumericTime","toBar","candle","bar","historyKey","TradingViewDatafeedAdapter","candles","next","prev","symbolKey","generation","state","last"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n Bar,\n GetMarksCallback,\n LibrarySymbolInfo,\n Mark,\n PeriodParams,\n ResolutionString,\n SubscribeBarsCallback,\n SymbolResolveExtension,\n Timezone,\n} from \"./charting-library.types\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport enum TvChartType {\n TradingView = \"TradingView\",\n Original = \"Original\",\n}\n\nexport enum TvChartPriceType {\n Price = \"price\",\n MarketCap = \"market_cap\",\n}\n\nexport enum TvChartQuoteType {\n USD = \"USD\",\n SOL = \"SOL\",\n ETH = \"ETH\",\n TRX = \"TRX\",\n BNB = \"BNB\",\n}\n\nexport type TvChartResolution =\n | \"1s\"\n | \"5s\"\n | \"15s\"\n | \"30s\"\n | \"1m\"\n | \"5m\"\n | \"15m\"\n | \"30m\"\n | \"1h\"\n | \"4h\"\n | \"12h\"\n | \"1d\";\n\nexport enum TvChartKlineStyle {\n Bars = 0,\n Candles = 1,\n Line = 2,\n Area = 3,\n HeikenAshi = 8,\n HollowCandles = 9,\n Baseline = 10,\n HiLo = 12,\n Column = 13,\n LineWithMarkers = 14,\n Stepline = 15,\n HLCArea = 16,\n VolCandle = 19,\n Renko = 4,\n Kagi = 5,\n PointAndFigure = 6,\n LineBreak = 7,\n}\n\nexport enum TvChartTheme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\nexport enum TvChartFeature {\n HeaderWidget = \"header_widget\",\n HeaderCandleStyleMenu = \"header_candle_style_menu\",\n HeaderFullscreenButton = \"header_fullscreen_button\",\n TradingAccountManager = \"trading_account_manager\",\n MultiCharts = \"multi_charts\",\n CreateVolumeIndicatorByDefault = \"create_volume_indicator_by_default\",\n VolumeForceOverlay = \"volume_force_overlay\",\n HideDrawingToolsByDefault = \"hide_drawing_tools_by_default\",\n LegendSeriesTitle = \"legend_series_title\",\n LegendVolume = \"legend_volume\",\n TimeframesToolbar = \"timeframes_toolbar\",\n SaveDrawingToServer = \"save_drawing_to_server\",\n}\n\nexport enum TvChartLayout {\n Layout1A = \"1A\",\n Layout2A = \"2A\",\n Layout2B = \"2B\",\n Layout3A = \"3A\",\n Layout3B = \"3B\",\n Layout3C = \"3C\",\n Layout3D = \"3D\",\n Layout3E = \"3E\",\n Layout3F = \"3F\",\n Layout4A = \"4A\",\n Layout4B = \"4B\",\n Layout4C = \"4C\",\n Layout4D = \"4D\",\n Layout4E = \"4E\",\n Layout4F = \"4F\",\n Layout5A = \"5A\",\n Layout5B = \"5B\",\n Layout5C = \"5C\",\n Layout5D = \"5D\",\n Layout6A = \"6A\",\n Layout6B = \"6B\",\n Layout6C = \"6C\",\n Layout7A = \"7A\",\n Layout8A = \"8A\",\n Layout8B = \"8B\",\n Layout8C = \"8C\",\n}\n\n// ---------------------------------------------------------------------------\n// Symbol types\n// ---------------------------------------------------------------------------\n\nexport interface TvChartSymbol {\n chain: string;\n address: string;\n quote?: TvChartQuoteType;\n priceType?: TvChartPriceType;\n}\n\nexport interface TvChartSymbolChange {\n index?: number;\n tickerSymbol: string;\n libTickerSymbol: string;\n}\n\nexport interface TvChartSymbolInfo extends LibrarySymbolInfo {\n symbol: string;\n full_name: string;\n address: string;\n priceType: TvChartPriceType;\n quote: TvChartQuoteType;\n precision: number;\n}\n\n// ---------------------------------------------------------------------------\n// DataFeed module interface (injectable by consumer)\n// ---------------------------------------------------------------------------\n\n/**\n * Injectable history + live datafeed. Prefer {@link TradingViewDatafeedAdapter}\n * as the stable seam; ChartManager.datafeed remains this interface.\n */\nexport interface ITvChartDataFeedModule {\n onReady(options: {\n setting: ChartSettings;\n chartManager: ChartManager;\n instance: ChartWidgetBridge;\n }): Promise<void>;\n\n onDestroy(): void;\n\n resolveSymbol(\n symbolName: string,\n extension?: SymbolResolveExtension,\n ): Promise<LibrarySymbolInfo | null>;\n\n getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n ): Promise<Bar[]>;\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void;\n\n unsubscribeBars(listenerGuid: string): void;\n\n getMarks?(\n symbolInfo: LibrarySymbolInfo,\n from: number,\n to: number,\n onDataCallback: GetMarksCallback<Mark>,\n resolution: ResolutionString,\n ): void;\n\n getFirstBarTime?(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n options: { timezone: Timezone },\n ): Promise<void>;\n}\n\nexport interface ITvChartSymbolResolver {\n resolveSymbolInfo(symbol: string): Promise<LibrarySymbolInfo | null>;\n resolveSymbolInfos(symbols: string[]): Promise<LibrarySymbolInfo[]>;\n getSymbolInfo(symbol: string): LibrarySymbolInfo | null;\n}\n\n// ---------------------------------------------------------------------------\n// Area state (stored in atoms)\n// ---------------------------------------------------------------------------\n\nexport interface ChartAreaState {\n tickerSymbol: string;\n symbol: string;\n resolution: TvChartResolution;\n chartStyle: TvChartKlineStyle;\n rightOffset: number;\n barSpacing: number;\n dataReady: boolean;\n crosshair?: { time: number; price: number };\n firstBarTime?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Error reset\n// ---------------------------------------------------------------------------\n\nexport enum TvChartErrorResetType {\n None = 0,\n ResetData = 1,\n ResetChart = 2,\n}\n","import { TvChartFeature, TvChartLayout, TvChartResolution } from \"./types\";\n\nexport const ENABLED_TV_CHART_FEATURES: TvChartFeature[] = [\n TvChartFeature.HeaderWidget,\n TvChartFeature.HeaderCandleStyleMenu,\n TvChartFeature.HeaderFullscreenButton,\n TvChartFeature.MultiCharts,\n TvChartFeature.VolumeForceOverlay,\n TvChartFeature.LegendSeriesTitle,\n TvChartFeature.TimeframesToolbar,\n TvChartFeature.SaveDrawingToServer,\n];\n\nexport const DEFAULT_TV_CHART_RESOLUTIONS: TvChartResolution[] = [\n \"1s\",\n \"30s\",\n \"1m\",\n \"1h\",\n \"4h\",\n \"1d\",\n];\n\nexport const ALL_TV_CHART_RESOLUTIONS: TvChartResolution[] = [\n \"1s\",\n \"15s\",\n \"30s\",\n \"1m\",\n \"5m\",\n \"15m\",\n \"1h\",\n \"4h\",\n \"12h\",\n \"1d\",\n];\n\nexport const SUPPORTED_TV_CHART_LAYOUTS: TvChartLayout[] = [\n TvChartLayout.Layout1A,\n TvChartLayout.Layout2A,\n TvChartLayout.Layout2B,\n TvChartLayout.Layout3A,\n TvChartLayout.Layout3B,\n TvChartLayout.Layout3C,\n TvChartLayout.Layout3D,\n TvChartLayout.Layout3E,\n TvChartLayout.Layout3F,\n TvChartLayout.Layout4A,\n TvChartLayout.Layout4B,\n TvChartLayout.Layout4C,\n TvChartLayout.Layout4D,\n TvChartLayout.Layout4E,\n TvChartLayout.Layout4F,\n TvChartLayout.Layout5A,\n TvChartLayout.Layout5B,\n TvChartLayout.Layout5C,\n TvChartLayout.Layout5D,\n TvChartLayout.Layout6A,\n TvChartLayout.Layout6B,\n TvChartLayout.Layout6C,\n TvChartLayout.Layout7A,\n TvChartLayout.Layout8A,\n TvChartLayout.Layout8B,\n TvChartLayout.Layout8C,\n];\n\nexport const TV_CHART_INTERESTED_DOM_EVENTS = [\n \"click\",\n \"keydown\",\n \"mousedown\",\n \"mouseup\",\n \"contextmenu\",\n];\n\nexport const TV_CHART_THEME_COLORS = {\n decrease: \"#f76816\",\n increase: \"#c7ff2e\",\n chartBg: \"#050807\",\n card: \"#0e1211\",\n};\n\nexport const TV_CHART_LIGHT_THEME_COLORS = {\n card: \"#242424\",\n};\n","import { atom } from \"jotai\";\nimport { atomFamily } from \"jotai/utils\";\nimport { DEFAULT_TV_CHART_RESOLUTIONS } from \"./constants\";\nimport type { ChartAreaState, TvChartResolution } from \"./types\";\nimport { TvChartLayout, TvChartType } from \"./types\";\nimport { isEqual } from \"lodash-es\";\n\n// ---------------------------------------------------------------------------\n// Manager state atoms (keyed by prefix = storageId)\n// ---------------------------------------------------------------------------\n\nexport const chartLoadingFamily = atomFamily((prefix: string) => (void prefix, atom(true)));\n\nexport const chartFullscreenFamily = atomFamily((prefix: string) => (void prefix, atom(false)));\n\nexport const chartSelectedIndexFamily = atomFamily((prefix: string) => (void prefix, atom(0)));\n\nexport const chartPinnedResolutionsFamily = atomFamily((prefix: string) =>\n (void prefix, atom<TvChartResolution[]>([...DEFAULT_TV_CHART_RESOLUTIONS])),\n);\n\nexport const chartAreasFamily = atomFamily((prefix: string) =>\n (void prefix, atom<ChartAreaState[]>([])),\n);\n\nexport const chartShowDrawingToolbarFamily = atomFamily((prefix: string) =>\n (void prefix, atom(false)),\n);\n\n// ---------------------------------------------------------------------------\n// Settings atoms (keyed by prefix)\n// ---------------------------------------------------------------------------\n\nexport const settingsLayoutFamily = atomFamily((prefix: string) =>\n (void prefix, atom<TvChartLayout>(TvChartLayout.Layout1A)),\n);\n\nexport const settingsChartTypeFamily = atomFamily((prefix: string) =>\n (void prefix, atom<TvChartType>(TvChartType.TradingView)),\n);\n\nexport const settingsThemeFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"dark\")),\n);\n\nexport const settingsLocaleFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"en\")),\n);\n\nexport const settingsTimezoneFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"Etc/UTC\")),\n);\n\nexport const settingsTickerSymbolFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"\")),\n);\n\nexport const settingsStorageIdFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string>(\"kline\")),\n);\n\nexport const settingsReverseColorFamily = atomFamily((prefix: string) =>\n (void prefix, atom<boolean>(false)),\n);\n\nexport const settingsBackgroundColorFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string | null>(null)),\n);\n\nexport const settingsIncreaseColorFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string | null>(null)),\n);\n\nexport const settingsDecreaseColorFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string | null>(null)),\n);\n\nexport const settingsEnabledFeaturesFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string[]>([])),\n);\n\nexport const settingsDisabledFeaturesFamily = atomFamily((prefix: string) =>\n (void prefix, atom<string[]>([])),\n);\n\n// ---------------------------------------------------------------------------\n// Widget ready atom\n// ---------------------------------------------------------------------------\n\nexport const widgetReadyFamily = atomFamily((prefix: string) => (void prefix, atom(false)));\n\n// ---------------------------------------------------------------------------\n// Derived: combined settings data for auto-save (debounced externally)\n// ---------------------------------------------------------------------------\n\nexport const settingsDataFamily = atomFamily((prefix: string) =>\n atom((get) => {\n const layout = get(settingsLayoutFamily(prefix));\n const chartType = get(settingsChartTypeFamily(prefix));\n const selectedIndex = get(chartSelectedIndexFamily(prefix));\n const pinnedResolutions = get(chartPinnedResolutionsFamily(prefix));\n const showDrawingToolbar = get(chartShowDrawingToolbarFamily(prefix));\n const areaContents = get(chartAreasFamily(prefix));\n\n return {\n layout,\n chartType,\n selectedIndex,\n pinnedResolutions,\n showDrawingToolbar,\n areaContents,\n };\n }),\n isEqual,\n);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Store } from \"jotai/vanilla/store\";\nimport { chartAreasFamily } from \"./atoms\";\nimport type { ChartAreaState, TvChartResolution } from \"./types\";\nimport { TvChartKlineStyle } from \"./types\";\nimport type { SeriesType } from \"./charting-library.types\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\n\n/**\n * Manages the state of a single chart area (pane).\n * Reads/writes the corresponding index in chartAreasFamily(prefix).\n */\nexport class ChartAreaManager {\n readonly settings: ChartSettings;\n readonly chartManager: ChartManager;\n readonly chartIndex: number;\n private store: Store;\n private prefix: string;\n\n pendingTickerSymbol: string | null = null;\n pendingResolution: string | null = null;\n\n constructor(\n settings: ChartSettings,\n manager: ChartManager,\n index: number,\n store: Store,\n prefix: string,\n areaSettings?: Partial<ChartAreaState>,\n ) {\n this.settings = settings;\n this.chartManager = manager;\n this.chartIndex = index;\n this.store = store;\n this.prefix = prefix;\n\n const defaults: ChartAreaState = {\n resolution: \"1m\",\n chartStyle: TvChartKlineStyle.Candles,\n symbol: \"\",\n tickerSymbol: \"\",\n rightOffset: 10,\n barSpacing: 6,\n dataReady: false,\n };\n\n const merged = { ...defaults, ...areaSettings };\n this.patchArea(merged);\n }\n\n // ---- state access ----\n\n get state(): ChartAreaState {\n const areas = this.store.get(chartAreasFamily(this.prefix));\n return (\n areas[this.chartIndex] ?? {\n resolution: \"1m\" as TvChartResolution,\n chartStyle: TvChartKlineStyle.Candles,\n symbol: \"\",\n tickerSymbol: \"\",\n rightOffset: 10,\n barSpacing: 6,\n dataReady: false,\n }\n );\n }\n\n private patchArea(patch: Partial<ChartAreaState>): void {\n const areas = [...this.store.get(chartAreasFamily(this.prefix))];\n const current = areas[this.chartIndex] ?? {\n resolution: \"1m\" as TvChartResolution,\n chartStyle: TvChartKlineStyle.Candles,\n symbol: \"\",\n tickerSymbol: \"\",\n rightOffset: 10,\n barSpacing: 6,\n dataReady: false,\n };\n areas[this.chartIndex] = { ...current, ...patch };\n this.store.set(chartAreasFamily(this.prefix), areas);\n }\n\n setState(key: keyof ChartAreaState, value: any): void {\n if (value !== undefined && value !== null) {\n this.patchArea({ [key]: value } as any);\n }\n }\n\n // ---- getters ----\n\n get tickerSymbol(): string {\n return this.state.tickerSymbol;\n }\n get symbol(): string {\n return this.state.symbol;\n }\n get resolution(): TvChartResolution {\n return this.state.resolution;\n }\n get chartStyle(): SeriesType {\n return this.state.chartStyle;\n }\n get rightOffset(): number {\n return this.state.rightOffset;\n }\n get barSpacing(): number {\n return this.state.barSpacing;\n }\n get dataReady(): boolean {\n return this.state.dataReady;\n }\n\n // ---- widget ref ----\n\n get internalChartWidget() {\n return this.chartManager.internalWidget?.chartByIndex(this.chartIndex);\n }\n\n // ---- actions ----\n\n setChartStyle(chartStyle: SeriesType): void {\n this.setState(\"chartStyle\", chartStyle);\n this.internalChartWidget?.setChartStyle(chartStyle);\n }\n\n async setSymbol(symbol: string): Promise<void> {\n if (this.state.tickerSymbol === symbol) return;\n this.setState(\"tickerSymbol\", symbol);\n this.setState(\"dataReady\", false);\n this.pendingTickerSymbol = symbol;\n\n try {\n const promises = [\n this.internalChartWidget?.handleSymbolChange(symbol, this.tickerSymbol),\n this.chartManager.symbolResolver?.resolveSymbolInfo(symbol).then((info: any) => {\n if (info) this.setState(\"symbol\", info.name);\n }),\n ];\n for (const p of await Promise.allSettled(promises)) {\n if (p.status === \"rejected\") throw p.reason;\n }\n } catch (e) {\n console.error(e);\n } finally {\n if (this.pendingTickerSymbol === symbol) this.pendingTickerSymbol = null;\n }\n if (this.tickerSymbol === symbol) {\n this.setState(\"dataReady\", true);\n }\n }\n\n async setResolution(resolution: TvChartResolution): Promise<void> {\n if (this.resolution === resolution) return;\n this.setState(\"resolution\", resolution);\n this.setState(\"dataReady\", false);\n this.pendingResolution = resolution;\n\n try {\n await this.internalChartWidget?.handleResolutionChange(resolution, this.resolution);\n } finally {\n if (this.pendingResolution === resolution) this.pendingResolution = null;\n }\n }\n\n toJSON(): ChartAreaState {\n return { ...this.state };\n }\n\n widgetReady(): void {\n this.internalChartWidget\n ?.dataReady()\n ?.then(() => this.handleChartReady())\n ?.catch(() => {});\n }\n\n get active(): boolean {\n return this.chartIndex < this.chartManager.chartCount;\n }\n\n get selected(): boolean {\n return this.chartManager.selectedIndex === this.chartIndex;\n }\n\n get symbolInfo() {\n return this.chartManager.symbolResolver?.getSymbolInfo(this.tickerSymbol) ?? null;\n }\n\n destroy(): void {\n // no subscriptions to clean up since state lives in atoms\n }\n\n // ---- internal ----\n\n private async handleChartReady(): Promise<void> {\n if (!this.internalChartWidget) return;\n this.setState(\"dataReady\", true);\n\n if (this.selected) {\n this.internalChartWidget.setBarSpacing(this.barSpacing);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Store } from \"jotai/vanilla/store\";\nimport { debounce } from \"lodash-es\";\nimport {\n chartLoadingFamily,\n chartFullscreenFamily,\n chartSelectedIndexFamily,\n chartPinnedResolutionsFamily,\n chartAreasFamily,\n chartShowDrawingToolbarFamily,\n settingsDataFamily,\n widgetReadyFamily,\n} from \"./atoms\";\nimport { DEFAULT_TV_CHART_RESOLUTIONS } from \"./constants\";\nimport { ChartSettings } from \"./ChartSettings\";\nimport { ChartAreaManager } from \"./ChartAreaManager\";\nimport type { ChartLibraryWidget } from \"./ChartLibraryWidget\";\nimport type { ITvChartDataFeedModule, ITvChartSymbolResolver, TvChartResolution } from \"./types\";\nimport { TvChartLayout } from \"./types\";\n\n/**\n * Core chart manager that orchestrates areas, settings, and widget lifecycle.\n * State is backed by jotai atoms keyed by prefix (storageId).\n */\nexport class ChartManager {\n readonly prefix: string;\n readonly settings: ChartSettings;\n private store: Store;\n\n initialized = false;\n focused = false;\n reloadId = 0;\n\n internalWidget: ChartLibraryWidget | null = null;\n datafeed: ITvChartDataFeedModule | null = null;\n symbolResolver: ITvChartSymbolResolver | null = null;\n\n private unsubAutoSave: (() => void) | null = null;\n\n constructor(prefix: string, store: Store, settings: ChartSettings) {\n this.prefix = prefix;\n this.store = store;\n this.settings = settings;\n }\n\n // ---- atom-backed state ----\n\n get loading(): boolean {\n return this.store.get(chartLoadingFamily(this.prefix));\n }\n\n get fullscreen(): boolean {\n return this.store.get(chartFullscreenFamily(this.prefix));\n }\n set fullscreen(v: boolean) {\n this.store.set(chartFullscreenFamily(this.prefix), v);\n if (v) document.body.classList.add(\"fullScreen\");\n else document.body.classList.remove(\"fullScreen\");\n }\n\n get selectedIndex(): number {\n return this.store.get(chartSelectedIndexFamily(this.prefix));\n }\n set selectedIndex(idx: number) {\n this.store.set(chartSelectedIndexFamily(this.prefix), idx);\n }\n\n get pinnedResolutions(): TvChartResolution[] {\n return this.store.get(chartPinnedResolutionsFamily(this.prefix));\n }\n set pinnedResolutions(v: TvChartResolution[]) {\n this.store.set(chartPinnedResolutionsFamily(this.prefix), v);\n }\n\n get showDrawingToolbar(): boolean {\n return this.store.get(chartShowDrawingToolbarFamily(this.prefix));\n }\n\n get chartCount(): number {\n return parseInt(this.settings.layout, 10) || 1;\n }\n\n get areas(): ChartAreaManager[] {\n const areaStates = this.store.get(chartAreasFamily(this.prefix));\n return this._areaManagers.slice(0, areaStates.length);\n }\n\n private _areaManagers: ChartAreaManager[] = [];\n\n areaByIndex(index: number): ChartAreaManager | null {\n if (this.initialized) this.updateChartContents();\n return this._areaManagers[index] ?? null;\n }\n\n get activeArea(): ChartAreaManager | null {\n return this.areaByIndex(this.selectedIndex);\n }\n\n // ---- lifecycle ----\n\n async init(): Promise<void> {\n if (this.initialized) return;\n\n const stored = this.settings.saveLoadAdapter.getSettings();\n\n if (stored?.selectedIndex != null) {\n this.selectedIndex = stored.selectedIndex;\n }\n\n if (stored?.pinnedResolutions) {\n const pr = stored.pinnedResolutions as TvChartResolution[];\n if (\n pr.length === DEFAULT_TV_CHART_RESOLUTIONS.length &&\n pr.every((r) => DEFAULT_TV_CHART_RESOLUTIONS.includes(r))\n ) {\n this.pinnedResolutions = [...DEFAULT_TV_CHART_RESOLUTIONS];\n } else {\n this.pinnedResolutions = pr;\n }\n }\n\n if (stored?.areaContents) {\n stored.areaContents.forEach((ac: any, idx: number) => {\n const area = new ChartAreaManager(\n this.settings,\n this,\n idx,\n this.store,\n this.prefix,\n ac,\n );\n this._areaManagers[idx] = area;\n });\n }\n\n if (stored?.showDrawingToolbar != null) {\n this.store.set(chartShowDrawingToolbarFamily(this.prefix), stored.showDrawingToolbar);\n }\n\n this.settings.updateValue(\"layout\", stored?.layout);\n this.settings.updateValue(\"chartType\", stored?.chartType);\n\n if (!this.settings.enableMultiCharts) {\n this.settings.updateValue(\"layout\", TvChartLayout.Layout1A);\n }\n if (this.settings.enableHideDrawingToolsByDefault) {\n this.store.set(chartShowDrawingToolbarFamily(this.prefix), false);\n }\n\n this.updateChartContents();\n\n if (this.settings.tickerSymbol && this.activeArea) {\n try {\n await this.activeArea.setSymbol(this.settings.tickerSymbol);\n } catch (e) {\n console.warn(\"ChartManager init failed to set symbol\", e);\n }\n }\n\n this.initialized = true;\n\n // auto-save on settings change (debounced)\n const save = debounce(() => {\n const data = this.store.get(settingsDataFamily(this.prefix));\n this.settings.saveLoadAdapter.saveSettings(data).catch(console.error);\n }, 1000);\n\n this.unsubAutoSave = this.store.sub(settingsDataFamily(this.prefix), save);\n }\n\n destroy(): void {\n this.unsubAutoSave?.();\n this._areaManagers.forEach((a) => a.destroy());\n this._areaManagers = [];\n }\n\n // ---- mutations ----\n\n setLoading(loading: boolean): void {\n this.store.set(chartLoadingFamily(this.prefix), loading);\n }\n\n setLocale(locale: string): void {\n this.settings.updateValue(\"locale\", locale);\n }\n\n setTimezone(timezone: string): void {\n this.settings.updateValue(\"timezone\", timezone);\n }\n\n setFocused(focused: boolean): void {\n this.focused = focused;\n }\n\n setShowDrawingToolbar(show: boolean): void {\n this.store.set(chartShowDrawingToolbarFamily(this.prefix), show);\n }\n\n setInternalWidget(widget: ChartLibraryWidget | null): void {\n this.internalWidget = widget;\n this.store.set(widgetReadyFamily(this.prefix), false);\n }\n\n onInternalWidgetReady(): void {\n this.store.set(widgetReadyFamily(this.prefix), true);\n this.areas.forEach((area, idx) => {\n if (idx < this.chartCount) area.widgetReady();\n });\n }\n\n setChartType(chartType: string): void {\n this.settings.updateValue(\"chartType\", chartType);\n }\n\n setTheme(theme: string): void {\n if (this.settings.theme !== theme) {\n this.settings.updateValue(\"theme\", theme);\n void this.internalWidget?.onThemeChange?.(theme, this.settings.reverseColor);\n }\n }\n\n setColorPalette(colors: {\n backgroundColor?: string;\n increaseColor?: string;\n decreaseColor?: string;\n }): void {\n this.settings.updateValue(\"backgroundColor\", colors.backgroundColor);\n this.settings.updateValue(\"increaseColor\", colors.increaseColor);\n this.settings.updateValue(\"decreaseColor\", colors.decreaseColor);\n this.internalWidget?.bridge.applyColorPaletteOverrides();\n }\n\n setReverseColor(reverseColor: boolean): void {\n if (this.settings.reverseColor !== reverseColor) {\n this.settings.updateValue(\"reverseColor\", reverseColor);\n void this.internalWidget?.onThemeChange?.(this.settings.theme, reverseColor);\n }\n }\n\n setLayout(layout: TvChartLayout): void {\n const target = this.settings.enableMultiCharts ? layout : TvChartLayout.Layout1A;\n if (this.settings.layout !== target) {\n this.settings.updateValue(\"layout\", target);\n this.updateChartContents();\n this.internalWidget?.onLayoutChange?.(target);\n\n const prevCount = this.chartCount;\n setTimeout(() => {\n if (this.store.get(widgetReadyFamily(this.prefix))) {\n for (let i = prevCount; i < this.chartCount; i++) {\n this.areaByIndex(i)?.widgetReady();\n }\n }\n });\n }\n }\n\n reloadChart(): void {\n this.reloadId += 1;\n }\n\n // ---- internal ----\n\n updateChartContents(): void {\n if (this.chartCount > this._areaManagers.length) {\n for (let i = this._areaManagers.length; i < this.chartCount; i++) {\n const currentArea = this._areaManagers[this.selectedIndex];\n const currentSettings = currentArea?.toJSON();\n const newArea = new ChartAreaManager(\n this.settings,\n this,\n i,\n this.store,\n this.prefix,\n currentSettings,\n );\n this._areaManagers[i] = newArea;\n if (this.selectedIndex !== i && !currentArea) {\n newArea.setSymbol(this.settings.tickerSymbol).catch(() => {});\n }\n }\n }\n if (this.selectedIndex >= this.chartCount) {\n this.selectedIndex = this.chartCount - 1;\n }\n }\n\n get settingsData() {\n return this.store.get(settingsDataFamily(this.prefix));\n }\n\n getAllCharts(): ChartAreaManager[] {\n this.updateChartContents();\n return this._areaManagers.slice(0, this.chartCount);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { omit } from \"lodash-es\";\n\n/**\n * Persists chart settings, shapes, and drawing data to localStorage.\n * All keys are scoped by `storageId` to support multiple instances.\n */\nexport class ChartSettingsStore {\n private storageId: string;\n\n constructor(storageId: string) {\n this.storageId = storageId;\n }\n\n private get settingsKey() {\n return `${this.storageId}.TvChart.Settings`;\n }\n private get shapesKey() {\n return `${this.storageId}.TvChart.Shapes`;\n }\n\n getSettings(): any {\n const localSettings = this.getLocalSettingsData();\n const chartStoreData = this.getChartStoreData();\n\n const settings: any = {\n layout: chartStoreData?.layout,\n selectedIndex: chartStoreData?.currentAreaIndex,\n chartType: chartStoreData?.chartType,\n pinnedResolutions: chartStoreData?.pinnedResolutions,\n areaContents: chartStoreData?.areas?.map((v: any) => ({\n resolution: v.resolution || v.period || \"1m\",\n chartStyle: v.chartStyle,\n symbol: v.symbol,\n tickerSymbol: v.tickerSymbol,\n rightOffset: v.rightOffset,\n barSpacing: v.barSpacing,\n })),\n showDrawingToolbar: chartStoreData?.drawing?.toolbarSwitch,\n drawing: localSettings?.drawing\n ? {\n ...localSettings.drawing,\n defaultStates: omit(localSettings, [\n \"drawing\",\n \"DrawingToolGroupLastUsedTool\",\n \"riskRewardAvailableChanged\",\n \"riskRewardRiskSizeChanged\",\n \"drawingShapeTemplate\",\n ]),\n lastUsedTools: localSettings.DrawingToolGroupLastUsedTool,\n riskRewardAvailableChanged: localSettings.riskRewardAvailableChanged,\n riskRewardRiskSizeChanged: localSettings.riskRewardRiskSizeChanged,\n drawingShapeTemplate: localSettings.drawingShapeTemplate,\n }\n : undefined,\n };\n\n return settings;\n }\n\n getChartStoreData(): any {\n return this.getLocalData(this.storageId);\n }\n\n setChartStoreData(data: any): void {\n this.setLocalData(this.storageId, data);\n }\n\n async saveSettings(data: any): Promise<void> {\n const chartStoreData = this.getChartStoreData();\n const newChartStoreData = {\n ...chartStoreData,\n layout: data.layout,\n currentAreaIndex: data.selectedIndex,\n chartType: data.chartType,\n pinnedResolutions: data.pinnedResolutions,\n areas: data.areaContents?.map((v: any, i: number) => ({\n ...chartStoreData?.areas?.[i],\n ...v,\n })),\n drawing: {\n ...chartStoreData?.drawing,\n toolbarSwitch: data.showDrawingToolbar,\n },\n };\n this.setChartStoreData(newChartStoreData);\n }\n\n async getShapes(key: string): Promise<any[]> {\n const data = this.getLocalShapesData();\n if (!data || !data[key]) return [];\n return Object.values(data[key]);\n }\n\n async saveShapes(key: string, updated: any): Promise<void> {\n const data = this.getLocalShapesData() || {};\n data[key] = { ...data[key], ...updated };\n Object.keys(data[key]).forEach((k) => {\n if (!data[key][k]) delete data[key][k];\n });\n this.setLocalShapesData(data);\n }\n\n private getLocalData(key: string): any | null {\n try {\n const value = localStorage.getItem(key);\n return value ? JSON.parse(value) : null;\n } catch {\n return null;\n }\n }\n\n private setLocalData(key: string, data: any): void {\n localStorage.setItem(key, JSON.stringify(data));\n }\n\n private getLocalSettingsData(): any | null {\n return this.getLocalData(this.settingsKey);\n }\n\n private getLocalShapesData(): any | null {\n return this.getLocalData(this.shapesKey);\n }\n\n private setLocalShapesData(data: any): void {\n this.setLocalData(this.shapesKey, data);\n }\n}\n","import type {\n LanguageCode,\n LayoutType,\n ResolutionString,\n ThemeName,\n} from \"./charting-library.types\";\nimport {\n TvChartLayout,\n TvChartPriceType,\n TvChartQuoteType,\n TvChartResolution,\n type TvChartSymbol,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Symbol helpers\n// ---------------------------------------------------------------------------\n\nexport function parseSymbol(symbol: string): TvChartSymbol {\n const [chain, address, quote, priceType] = symbol.split(\"/\");\n return {\n address,\n chain,\n quote: quote as TvChartQuoteType,\n priceType: priceType as TvChartPriceType,\n };\n}\n\nexport function stringifySymbol(symbol: TvChartSymbol): string {\n if (!symbol.quote || !symbol.priceType) {\n return `${symbol.chain}/${symbol.address}`;\n }\n return `${symbol.chain}/${symbol.address}/${symbol.quote}/${symbol.priceType}`;\n}\n\nexport function stringifySymbolShort(symbol: TvChartSymbol): string {\n return `${symbol.chain}/${symbol.address}`;\n}\n\n// ---------------------------------------------------------------------------\n// Theme\n// ---------------------------------------------------------------------------\n\nconst THEME_MAP: Record<string, ThemeName> = {\n dark: \"Dark\",\n light: \"Light\",\n};\n\nexport function getTvChartLibraryTheme(theme: string): ThemeName {\n return THEME_MAP[theme.toLowerCase()] ?? \"Dark\";\n}\n\n// ---------------------------------------------------------------------------\n// Resolution\n// ---------------------------------------------------------------------------\n\nconst RESOLUTION_MAP: Record<TvChartResolution, string> = {\n \"1s\": \"1S\",\n \"5s\": \"5S\",\n \"15s\": \"15S\",\n \"30s\": \"30S\",\n \"1m\": \"1\",\n \"5m\": \"5\",\n \"15m\": \"15\",\n \"30m\": \"30\",\n \"1h\": \"60\",\n \"4h\": \"240\",\n \"12h\": \"720\",\n \"1d\": \"1D\",\n};\n\nexport function getTvChartLibraryResolution(\n resolution: TvChartResolution = \"1m\",\n): ResolutionString {\n return (RESOLUTION_MAP[resolution] ?? RESOLUTION_MAP[\"1m\"]) as ResolutionString;\n}\n\nconst RESOLUTION_MAP_REVERSE: Record<string, TvChartResolution> = {\n \"1S\": \"1s\",\n \"5S\": \"5s\",\n \"15S\": \"15s\",\n \"30S\": \"30s\",\n \"1\": \"1m\",\n \"5\": \"5m\",\n \"15\": \"15m\",\n \"30\": \"30m\",\n \"60\": \"1h\",\n \"240\": \"4h\",\n \"720\": \"12h\",\n \"1D\": \"1d\",\n};\n\nexport function getTvChartResolutionReverse(resolution: string): TvChartResolution {\n return RESOLUTION_MAP_REVERSE[resolution] ?? \"1s\";\n}\n\n// ---------------------------------------------------------------------------\n// Locale\n// ---------------------------------------------------------------------------\n\nconst LOCALE_MAP: Record<string, LanguageCode> = {\n en: \"en\",\n \"zh-CN\": \"zh\",\n \"zh-TW\": \"zh\",\n};\n\nexport function getTvChartLibraryLocale(locale: string): LanguageCode {\n return LOCALE_MAP[locale] ?? locale;\n}\n\n// ---------------------------------------------------------------------------\n// Layout\n// ---------------------------------------------------------------------------\n\nexport const LAYOUT_MAP: Record<TvChartLayout, LayoutType> = {\n [TvChartLayout.Layout1A]: \"s\",\n [TvChartLayout.Layout2A]: \"2h\",\n [TvChartLayout.Layout2B]: \"2v\",\n [TvChartLayout.Layout3A]: \"3s\",\n [TvChartLayout.Layout3B]: \"3h\",\n [TvChartLayout.Layout3C]: \"3v\",\n [TvChartLayout.Layout3D]: \"2-1\",\n [TvChartLayout.Layout3E]: \"1-2\",\n [TvChartLayout.Layout3F]: \"3r\",\n [TvChartLayout.Layout4A]: \"4\",\n [TvChartLayout.Layout4B]: \"4h\",\n [TvChartLayout.Layout4C]: \"4v\",\n [TvChartLayout.Layout4D]: \"4s\",\n [TvChartLayout.Layout4E]: \"1-3\",\n [TvChartLayout.Layout4F]: \"2-2\",\n [TvChartLayout.Layout5A]: \"1-4\",\n [TvChartLayout.Layout5B]: \"5s\",\n [TvChartLayout.Layout5C]: \"2-3\",\n [TvChartLayout.Layout5D]: \"5h\",\n [TvChartLayout.Layout6A]: \"6\",\n [TvChartLayout.Layout6B]: \"6c\",\n [TvChartLayout.Layout6C]: \"6h\",\n [TvChartLayout.Layout7A]: \"7h\",\n [TvChartLayout.Layout8A]: \"8\",\n [TvChartLayout.Layout8B]: \"8c\",\n [TvChartLayout.Layout8C]: \"8h\",\n};\n\nexport function getTvChartLibraryLayout(layout: TvChartLayout): LayoutType {\n return LAYOUT_MAP[layout] ?? \"s\";\n}\n\nconst LAYOUT_MAP_REVERSE: Record<string, TvChartLayout> = Object.fromEntries(\n Object.entries(LAYOUT_MAP).map(([k, v]) => [v, k as TvChartLayout]),\n);\n\nexport function getTvChartLayoutReverse(layout: LayoutType): TvChartLayout {\n return LAYOUT_MAP_REVERSE[layout] ?? TvChartLayout.Layout1A;\n}\n\n// ---------------------------------------------------------------------------\n// Alignment\n// ---------------------------------------------------------------------------\n\nconst ALIGNMENTS_MAP: Record<string, number> = {\n left: 0,\n center: 1,\n right: 2,\n};\n\nexport function getTvChartLibraryAlignment(alignment: string): number {\n return ALIGNMENTS_MAP[alignment] ?? 0;\n}\n\n// ---------------------------------------------------------------------------\n// Time helpers\n// ---------------------------------------------------------------------------\n\nconst RESOLUTION_FRAMES: Record<TvChartResolution, number> = {\n \"1s\": 1e3,\n \"5s\": 5e3,\n \"15s\": 15e3,\n \"30s\": 3e4,\n \"1m\": 6e4,\n \"5m\": 3e5,\n \"15m\": 9e5,\n \"30m\": 18e5,\n \"1h\": 36e5,\n \"4h\": 144e5,\n \"12h\": 432e5,\n \"1d\": 864e5,\n};\n\nexport function getTvChartResolutionFrame(resolution: TvChartResolution): number {\n const frame = RESOLUTION_FRAMES[resolution];\n if (!frame) throw new Error(`Invalid interval: ${resolution}`);\n return frame;\n}\n\nexport function getTvChartTickTimestamp(time: number, timeframe: number): number {\n const timeInMs = time.toString().length > 10 ? time : 1e3 * time;\n return Math.floor(timeInMs / timeframe) * timeframe;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Store } from \"jotai/vanilla/store\";\nimport {\n settingsLayoutFamily,\n settingsChartTypeFamily,\n settingsThemeFamily,\n settingsLocaleFamily,\n settingsTimezoneFamily,\n settingsTickerSymbolFamily,\n settingsStorageIdFamily,\n settingsReverseColorFamily,\n settingsBackgroundColorFamily,\n settingsIncreaseColorFamily,\n settingsDecreaseColorFamily,\n settingsEnabledFeaturesFamily,\n settingsDisabledFeaturesFamily,\n} from \"./atoms\";\nimport { ALL_TV_CHART_RESOLUTIONS, ENABLED_TV_CHART_FEATURES, SUPPORTED_TV_CHART_LAYOUTS } from \"./constants\";\nimport { ChartSettingsStore } from \"./ChartSettingsStore\";\nimport { TvChartFeature, TvChartLayout, TvChartType } from \"./types\";\nimport { getTvChartLibraryResolution } from \"./utils\";\nimport type { SeriesFormatterFactory } from \"./charting-library.types\";\n\n/**\n * Manages chart-level settings via jotai atoms (keyed by prefix).\n * Replaces the BehaviorSubject-based TvChartSettings.\n */\nexport class ChartSettings {\n readonly prefix: string;\n private store: Store;\n\n supportedResolutions = ALL_TV_CHART_RESOLUTIONS.map(getTvChartLibraryResolution);\n supportedLayouts = SUPPORTED_TV_CHART_LAYOUTS;\n supportedChartTypes = [TvChartType.TradingView];\n chartNames: Record<string, string> = {};\n priceFormatterFactory: SeriesFormatterFactory | null = null;\n saveLoadAdapter: ChartSettingsStore;\n\n constructor(prefix: string, store: Store) {\n this.prefix = prefix;\n this.store = store;\n this.saveLoadAdapter = new ChartSettingsStore(prefix);\n this.store.set(settingsStorageIdFamily(prefix), prefix);\n }\n\n // ---- getters backed by atoms ----\n\n get layout(): TvChartLayout {\n return this.store.get(settingsLayoutFamily(this.prefix));\n }\n\n get chartType(): TvChartType {\n return this.store.get(settingsChartTypeFamily(this.prefix));\n }\n\n get theme(): string {\n return this.store.get(settingsThemeFamily(this.prefix));\n }\n\n get reverseColor(): boolean {\n return this.store.get(settingsReverseColorFamily(this.prefix));\n }\n\n get locale(): string {\n return this.store.get(settingsLocaleFamily(this.prefix));\n }\n\n get timezone(): string {\n return this.store.get(settingsTimezoneFamily(this.prefix));\n }\n\n get tickerSymbol(): string {\n return this.store.get(settingsTickerSymbolFamily(this.prefix));\n }\n\n get storageId(): string {\n return this.store.get(settingsStorageIdFamily(this.prefix));\n }\n\n get backgroundColor(): string | null {\n return this.store.get(settingsBackgroundColorFamily(this.prefix));\n }\n\n get increaseColor(): string | null {\n return this.store.get(settingsIncreaseColorFamily(this.prefix));\n }\n\n get decreaseColor(): string | null {\n return this.store.get(settingsDecreaseColorFamily(this.prefix));\n }\n\n get enabledFeatures(): string[] {\n return this.store.get(settingsEnabledFeaturesFamily(this.prefix));\n }\n\n get disabledFeatures(): string[] {\n return this.store.get(settingsDisabledFeaturesFamily(this.prefix));\n }\n\n // ---- setters ----\n\n updateValue(key: string, value: any): void {\n if (value === null || value === undefined) return;\n\n const setters: Record<string, () => void> = {\n layout: () => this.store.set(settingsLayoutFamily(this.prefix), value),\n chartType: () => this.store.set(settingsChartTypeFamily(this.prefix), value),\n theme: () => this.store.set(settingsThemeFamily(this.prefix), value),\n reverseColor: () => this.store.set(settingsReverseColorFamily(this.prefix), value),\n locale: () => this.store.set(settingsLocaleFamily(this.prefix), value),\n timezone: () => this.store.set(settingsTimezoneFamily(this.prefix), value),\n tickerSymbol: () => this.store.set(settingsTickerSymbolFamily(this.prefix), value),\n storageId: () => this.store.set(settingsStorageIdFamily(this.prefix), value),\n backgroundColor: () => this.store.set(settingsBackgroundColorFamily(this.prefix), value),\n increaseColor: () => this.store.set(settingsIncreaseColorFamily(this.prefix), value),\n decreaseColor: () => this.store.set(settingsDecreaseColorFamily(this.prefix), value),\n enabledFeatures: () => this.store.set(settingsEnabledFeaturesFamily(this.prefix), value),\n disabledFeatures: () => this.store.set(settingsDisabledFeaturesFamily(this.prefix), value),\n };\n\n const setter = setters[key];\n if (setter) setter();\n }\n\n // ---- feature helpers ----\n\n isFeatureEnabled(feature: TvChartFeature): boolean {\n return (\n (!this.disabledFeatures.includes(feature) && this.enabledFeatures.includes(feature)) ||\n ENABLED_TV_CHART_FEATURES.includes(feature)\n );\n }\n\n setFeature(feature: string, enabled: boolean): void {\n this.resetFeature(feature);\n if (enabled) {\n this.store.set(settingsEnabledFeaturesFamily(this.prefix), [...this.enabledFeatures, feature]);\n } else {\n this.store.set(settingsDisabledFeaturesFamily(this.prefix), [...this.disabledFeatures, feature]);\n }\n }\n\n resetFeature(feature: string): void {\n this.store.set(\n settingsEnabledFeaturesFamily(this.prefix),\n this.enabledFeatures.filter((f) => f !== feature),\n );\n this.store.set(\n settingsDisabledFeaturesFamily(this.prefix),\n this.disabledFeatures.filter((f) => f !== feature),\n );\n }\n\n get enableMultiCharts(): boolean {\n return this.isFeatureEnabled(TvChartFeature.MultiCharts);\n }\n\n get enableCreateVolumeIndicatorByDefault(): boolean {\n return this.isFeatureEnabled(TvChartFeature.CreateVolumeIndicatorByDefault);\n }\n\n get enableHideDrawingToolsByDefault(): boolean {\n return this.isFeatureEnabled(TvChartFeature.HideDrawingToolsByDefault);\n }\n\n get enableLegendSeriesTitle(): boolean {\n return this.isFeatureEnabled(TvChartFeature.LegendSeriesTitle);\n }\n\n get enableLegendVolume(): boolean {\n return this.isFeatureEnabled(TvChartFeature.LegendVolume);\n }\n\n get enableTimeframesToolbar(): boolean {\n return this.isFeatureEnabled(TvChartFeature.TimeframesToolbar);\n }\n\n get enableVolumeForceOverlay(): boolean {\n return this.isFeatureEnabled(TvChartFeature.VolumeForceOverlay);\n }\n\n /**\n * Subscribe to a specific atom change. Returns unsubscribe function.\n */\n sub(key: string, callback: () => void): () => void {\n const atomMap: Record<string, any> = {\n layout: settingsLayoutFamily(this.prefix),\n chartType: settingsChartTypeFamily(this.prefix),\n theme: settingsThemeFamily(this.prefix),\n };\n const a = atomMap[key];\n if (a) return this.store.sub(a, callback);\n return () => {};\n }\n}\n","import type { LibrarySymbolInfo } from \"./charting-library.types\";\nimport type { ITvChartDataFeedModule, ITvChartSymbolResolver } from \"./types\";\n\n/**\n * Resolves and caches symbol info via the injected DataFeedModule.\n */\nexport class ChartSymbolResolver implements ITvChartSymbolResolver {\n private datafeed: ITvChartDataFeedModule;\n private cache = new Map<string, LibrarySymbolInfo>();\n private pendingRequests = new Map<string, Promise<LibrarySymbolInfo | null>>();\n\n constructor(datafeed: ITvChartDataFeedModule) {\n this.datafeed = datafeed;\n }\n\n async resolveSymbolInfo(symbol: string): Promise<LibrarySymbolInfo | null> {\n return this.datafeed.resolveSymbol(symbol);\n }\n\n async resolveSymbolInfos(symbols: string[]): Promise<LibrarySymbolInfo[]> {\n const toResolve = symbols.filter(\n (s) => !this.cache.has(s) && !this.pendingRequests.has(s),\n );\n\n toResolve.forEach((s) => {\n const promise = this.resolveSymbolInfo(s);\n void promise\n .then((info) => {\n if (info) this.cache.set(s, info);\n })\n .catch(() => undefined)\n .finally(() => this.pendingRequests.delete(s));\n this.pendingRequests.set(s, promise);\n });\n\n await Promise.all(\n symbols\n .filter((s) => this.pendingRequests.has(s))\n .map((s) => this.pendingRequests.get(s)),\n );\n\n return symbols\n .map((s) => this.cache.get(s) ?? null)\n .filter((s): s is LibrarySymbolInfo => s !== null);\n }\n\n getSymbolInfo(symbol: string): LibrarySymbolInfo | null {\n this.resolveSymbolInfo(symbol).catch((e) => {\n console.error(\"ChartSymbolResolver.getSymbolInfo\", e);\n });\n return this.cache.get(symbol) ?? null;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type PropsWithChildren, useEffect, useState } from \"react\";\nimport { ChartSymbolResolver } from \"../lib/ChartSymbolResolver\";\nimport type {\n LanguageCode,\n SeriesFormatterFactory,\n Timezone,\n WidgetConstructor,\n} from \"../lib/charting-library.types\";\nimport type { ITvChartDataFeedModule, TvChartResolution } from \"../lib/types\";\nimport {\n TvChartFeature,\n TvChartKlineStyle,\n TvChartLayout,\n TvChartTheme,\n TvChartType,\n} from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TvChartConfig {\n storageId: string;\n tickerSymbol: string;\n datafeed: ITvChartDataFeedModule;\n resolution: TvChartResolution;\n supportedResolutions?: TvChartResolution[];\n layout: TvChartLayout;\n supportedLayouts?: TvChartLayout[];\n chartType: TvChartType;\n supportedChartTypes?: TvChartType[];\n chartNames?: Record<string, string>;\n kLineStyle: TvChartKlineStyle;\n theme: TvChartTheme;\n reverseColor?: boolean;\n backgroundColor?: string;\n increaseColor?: string;\n decreaseColor?: string;\n timezone: Timezone;\n locale: LanguageCode;\n enabledFeatures?: TvChartFeature[];\n disabledFeatures?: TvChartFeature[];\n priceFormatterFactory?: SeriesFormatterFactory;\n}\n\nexport interface TradingViewConfigProps {\n initConfig: TvChartConfig;\n widgetConstructor: WidgetConstructor;\n libraryPath?: string;\n customCssUrl?: string;\n}\n\nexport const TradingViewConfig = ({\n initConfig,\n children,\n}: PropsWithChildren<{ initConfig: TvChartConfig }>) => {\n const { chartManager, chartSettings } = useTvChartContext();\n const [initialized, setInitialized] = useState(false);\n\n useEffect(() => {\n if (!chartManager.initialized) {\n chartSettings.updateValue(\"tickerSymbol\", initConfig.tickerSymbol);\n chartSettings.updateValue(\"theme\", initConfig.theme);\n chartSettings.updateValue(\"reverseColor\", initConfig.reverseColor);\n chartSettings.updateValue(\"layout\", initConfig.layout);\n chartSettings.updateValue(\"chartType\", initConfig.chartType);\n chartSettings.updateValue(\"timezone\", initConfig.timezone);\n chartSettings.updateValue(\"locale\", initConfig.locale);\n chartSettings.updateValue(\"backgroundColor\", initConfig.backgroundColor);\n chartSettings.updateValue(\"increaseColor\", initConfig.increaseColor);\n chartSettings.updateValue(\"decreaseColor\", initConfig.decreaseColor);\n chartSettings.updateValue(\"storageId\", initConfig.storageId);\n chartSettings.updateValue(\"enabledFeatures\", initConfig.enabledFeatures);\n chartSettings.updateValue(\n \"disabledFeatures\",\n initConfig.disabledFeatures,\n );\n\n if (initConfig.chartNames)\n chartSettings.chartNames = initConfig.chartNames;\n if (initConfig.priceFormatterFactory) {\n chartSettings.priceFormatterFactory = initConfig.priceFormatterFactory;\n }\n if (initConfig.supportedResolutions) {\n chartSettings.supportedResolutions =\n initConfig.supportedResolutions as any;\n }\n if (initConfig.supportedLayouts) {\n chartSettings.supportedLayouts = initConfig.supportedLayouts;\n }\n if (initConfig.supportedChartTypes) {\n chartSettings.supportedChartTypes = initConfig.supportedChartTypes;\n }\n\n chartManager.datafeed = initConfig.datafeed;\n chartManager.symbolResolver = new ChartSymbolResolver(\n initConfig.datafeed,\n );\n }\n }, [chartManager, chartSettings, initConfig]);\n\n useEffect(() => {\n if (!initialized) return;\n\n chartManager.setTheme(initConfig.theme);\n chartManager.setColorPalette({\n backgroundColor: initConfig.backgroundColor,\n increaseColor: initConfig.increaseColor,\n decreaseColor: initConfig.decreaseColor,\n });\n }, [\n chartManager,\n initialized,\n initConfig.backgroundColor,\n initConfig.decreaseColor,\n initConfig.increaseColor,\n initConfig.theme,\n ]);\n\n useEffect(() => {\n chartManager\n .init()\n .then(() => setInitialized(true))\n .catch((e) => {\n console.error(\"TradingViewConfig chartManager init error\", e);\n });\n return () => {\n chartManager.destroy();\n };\n }, [chartManager]);\n\n return initialized && chartManager.initialized ? <>{children}</> : null;\n};\n","import {\n createContext,\n forwardRef,\n type PropsWithChildren,\n useContext,\n useImperativeHandle,\n useMemo,\n} from \"react\";\nimport { useStore } from \"jotai\";\nimport { ChartManager } from \"../lib/ChartManager\";\nimport { ChartSettings } from \"../lib/ChartSettings\";\nimport type { WidgetConstructor } from \"../lib/charting-library.types\";\nimport type { TvChartLayout, TvChartType } from \"../lib/types\";\nimport {\n TradingViewConfig,\n type TradingViewConfigProps,\n} from \"./TradingViewConfig\";\n\nexport interface TvChartContextValue {\n prefix: string;\n chartSettings: ChartSettings;\n chartManager: ChartManager;\n widgetConstructor: WidgetConstructor;\n libraryPath?: string;\n customCssUrl?: string;\n}\n\nconst TvChartContext = createContext<TvChartContextValue | null>(null);\n\nexport function useTvChartContext(): TvChartContextValue {\n const ctx = useContext(TvChartContext);\n if (!ctx)\n throw new Error(\n \"useTvChartContext must be used within TradingViewProvider\",\n );\n return ctx;\n}\n\nexport function useTvChartManager(): ChartManager {\n return useTvChartContext().chartManager;\n}\n\nexport function useTvChartPrefix(): string {\n return useTvChartContext().prefix;\n}\n\nexport class TvChartHandle {\n readonly setting: ChartSettings;\n readonly chartManager: ChartManager;\n\n constructor(setting: ChartSettings, chartManager: ChartManager) {\n this.setting = setting;\n this.chartManager = chartManager;\n }\n\n get internalWidget() {\n return this.chartManager.internalWidget;\n }\n\n chartCount(): number {\n return this.chartManager.chartCount;\n }\n\n setActiveChart(index: number): void {\n if (index < this.chartCount()) {\n this.chartManager.selectedIndex = index;\n }\n }\n\n layout(): TvChartLayout {\n return this.setting.layout;\n }\n\n setLayout(layout: TvChartLayout): void {\n this.chartManager.setLayout(layout);\n }\n\n theme(): string {\n return this.setting.theme;\n }\n\n setTheme(theme: string): void {\n this.chartManager.setTheme(theme);\n }\n\n setChartType(chartType: TvChartType): void {\n this.chartManager.setChartType(chartType);\n }\n\n getSetting(): ChartSettings {\n return this.setting;\n }\n\n getChartManager(): ChartManager {\n return this.chartManager;\n }\n}\n\nexport type TradingViewProviderProps = PropsWithChildren<TradingViewConfigProps>;\n\nexport const TradingViewProvider = forwardRef<\n TvChartHandle,\n TradingViewProviderProps\n>(\n (\n { children, initConfig, widgetConstructor, libraryPath, customCssUrl },\n ref,\n ) => {\n const store = useStore();\n const prefix = initConfig.storageId;\n\n const chartSettings = useMemo(\n () => new ChartSettings(prefix, store),\n [prefix, store],\n );\n\n const chartManager = useMemo(\n () => new ChartManager(prefix, store, chartSettings),\n [prefix, store, chartSettings],\n );\n\n const handle = useMemo(\n () => new TvChartHandle(chartSettings, chartManager),\n [chartSettings, chartManager],\n );\n\n useImperativeHandle(ref, () => handle, [handle]);\n\n const value = useMemo<TvChartContextValue>(\n () => ({\n prefix,\n chartSettings,\n chartManager,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n }),\n [\n prefix,\n chartSettings,\n chartManager,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n ],\n );\n\n return (\n <TvChartContext.Provider value={value}>\n <TradingViewConfig initConfig={initConfig}>\n {children}\n </TradingViewConfig>\n </TvChartContext.Provider>\n );\n },\n);\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { chartFullscreenFamily } from \"../lib/atoms\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewFullscreen = memo(() => {\n const { t } = useTranslation();\n const { prefix, chartManager } = useTvChartContext();\n const fullscreen = useAtomValue(chartFullscreenFamily(prefix));\n\n const handleToggle = useCallback(() => {\n chartManager.fullscreen = !chartManager.fullscreen;\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={\n fullscreen\n ? t(\"tradingView.exitFullscreen\" as never)\n : t(\"tradingView.fullscreen\" as never)\n }\n >\n {fullscreen\n ? t(\"tradingView.exit\" as never)\n : t(\"tradingView.fullscreen\" as never)}\n </button>\n );\n});\n","import {\n createContext,\n type PropsWithChildren,\n useContext,\n useMemo,\n} from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport type { ChartAreaManager } from \"../lib/ChartAreaManager\";\nimport { chartAreasFamily, chartSelectedIndexFamily } from \"../lib/atoms\";\nimport type { LibrarySymbolInfo } from \"../lib/charting-library.types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TvChartToolbarContextValue {\n activeAreaManager: ChartAreaManager | null;\n symbolInfo: LibrarySymbolInfo | null;\n}\n\nconst TvChartToolbarContext = createContext<TvChartToolbarContextValue | null>(\n null,\n);\n\nexport function useTvChartToolbarContext(): TvChartToolbarContextValue {\n const ctx = useContext(TvChartToolbarContext);\n if (!ctx)\n throw new Error(\n \"useTvChartToolbarContext must be used within TradingViewToolbarProvider\",\n );\n return ctx;\n}\n\nexport const TradingViewToolbarProvider = ({ children }: PropsWithChildren) => {\n const { prefix, chartManager } = useTvChartContext();\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n\n const activeAreaManager = useMemo(() => {\n if (!areas.length) return null;\n return chartManager.areaByIndex(selectedIndex);\n }, [chartManager, selectedIndex, areas]);\n\n const symbolInfo = useMemo(() => {\n return activeAreaManager?.symbolInfo ?? null;\n }, [activeAreaManager]);\n\n const value = useMemo<TvChartToolbarContextValue>(\n () => ({ activeAreaManager, symbolInfo }),\n [activeAreaManager, symbolInfo],\n );\n\n return (\n <TvChartToolbarContext.Provider value={value}>\n {children}\n </TvChartToolbarContext.Provider>\n );\n};\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { chartAreasFamily, chartSelectedIndexFamily } from \"../lib/atoms\";\nimport { TvChartKlineStyle } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nconst KLINE_STYLE_LABEL_KEYS: Record<number, string> = {\n [TvChartKlineStyle.Bars]: \"tradingView.style.bars\",\n [TvChartKlineStyle.Candles]: \"tradingView.style.candles\",\n [TvChartKlineStyle.Line]: \"tradingView.style.line\",\n [TvChartKlineStyle.Area]: \"tradingView.style.area\",\n [TvChartKlineStyle.HeikenAshi]: \"tradingView.style.heikenAshi\",\n [TvChartKlineStyle.HollowCandles]: \"tradingView.style.hollowCandles\",\n [TvChartKlineStyle.Baseline]: \"tradingView.style.baseline\",\n};\n\nconst DEFAULT_STYLES = [\n TvChartKlineStyle.Candles,\n TvChartKlineStyle.Bars,\n TvChartKlineStyle.Line,\n TvChartKlineStyle.Area,\n TvChartKlineStyle.HollowCandles,\n TvChartKlineStyle.HeikenAshi,\n TvChartKlineStyle.Baseline,\n];\n\nexport const TradingViewKlineStyleSelect = memo(() => {\n const { t } = useTranslation();\n const { prefix } = useTvChartContext();\n const { activeAreaManager } = useTvChartToolbarContext();\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n\n const currentStyle =\n areas[selectedIndex]?.chartStyle ?? TvChartKlineStyle.Candles;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n const style = parseInt(e.target.value, 10);\n activeAreaManager?.setChartStyle(style);\n },\n [activeAreaManager],\n );\n\n return (\n <select\n value={currentStyle}\n onChange={handleChange}\n className=\"text-xs bg-transparent text-muted-foreground hover:text-foreground cursor-pointer border-none outline-none px-1 py-0.5\"\n title={t(\"tradingView.klineStyle\" as never)}\n >\n {DEFAULT_STYLES.map((style) => (\n <option key={style} value={style}>\n {KLINE_STYLE_LABEL_KEYS[style]\n ? t(KLINE_STYLE_LABEL_KEYS[style] as never)\n : style}\n </option>\n ))}\n </select>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewOpenIndicator = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n\n const handleClick = useCallback(() => {\n chartManager.internalWidget?.openIndicatorSettingsDialog();\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={t(\"tradingView.indicators\" as never)}\n >\n {t(\"tradingView.indicators\" as never)}\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewOpenSettings = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n\n const handleClick = useCallback(() => {\n chartManager.internalWidget?.openSettingsDialog();\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={t(\"tradingView.chartSettings\" as never)}\n >\n {t(\"tradingView.settings\" as never)}\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport {\n chartPinnedResolutionsFamily,\n chartAreasFamily,\n chartSelectedIndexFamily,\n} from \"../lib/atoms\";\nimport type { TvChartResolution } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nexport const TradingViewResolutions = memo(() => {\n const { prefix } = useTvChartContext();\n const { activeAreaManager } = useTvChartToolbarContext();\n const pinnedResolutions = useAtomValue(chartPinnedResolutionsFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n\n const currentResolution = areas[selectedIndex]?.resolution;\n\n const handleClick = useCallback(\n (resolution: TvChartResolution) => {\n void activeAreaManager?.setResolution(resolution);\n },\n [activeAreaManager],\n );\n\n return (\n <div className=\"flex items-center gap-0.5\">\n {pinnedResolutions.map((r) => (\n <button\n key={r}\n type=\"button\"\n onClick={() => handleClick(r)}\n className={`px-2 py-0.5 text-xs rounded cursor-pointer transition-colors ${\n currentResolution === r\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground hover:text-foreground hover:bg-muted\"\n }`}\n >\n {r}\n </button>\n ))}\n </div>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewSnapshot = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n\n const handleClick = useCallback(async () => {\n try {\n const canvas = await chartManager.internalWidget?.takeClientScreenshot();\n if (!canvas) return;\n const link = document.createElement(\"a\");\n link.download = `chart-${Date.now()}.png`;\n link.href = canvas.toDataURL(\"image/png\");\n link.click();\n } catch (e) {\n console.error(\"TradingViewSnapshot\", e);\n }\n }, [chartManager]);\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className=\"text-xs text-muted-foreground hover:text-foreground px-1.5 py-0.5 rounded hover:bg-muted cursor-pointer transition-colors\"\n title={t(\"tradingView.takeSnapshot\" as never)}\n >\n {t(\"tradingView.snapshot\" as never)}\n </button>\n );\n});\n","import { memo, type ReactNode } from \"react\";\nimport { TradingViewFullscreen } from \"./TradingViewFullscreen\";\nimport { TradingViewKlineStyleSelect } from \"./TradingViewKlineStyleSelect\";\nimport { TradingViewOpenIndicator } from \"./TradingViewOpenIndicator\";\nimport { TradingViewOpenSettings } from \"./TradingViewOpenSettings\";\nimport { TradingViewResolutions } from \"./TradingViewResolutions\";\nimport { TradingViewSnapshot } from \"./TradingViewSnapshot\";\nimport { TradingViewToolbarProvider } from \"./TradingViewToolbarProvider\";\n\nexport interface TradingViewToolbarProps {\n /** Extra elements to render before the default toolbar items */\n prefix?: ReactNode;\n /** Extra elements to render after the default toolbar items */\n suffix?: ReactNode;\n /** Override the default toolbar items entirely */\n children?: ReactNode;\n /** Show/hide resolution buttons (default: true) */\n showResolutions?: boolean;\n /** Show/hide kline style selector (default: true) */\n showKlineStyleSelect?: boolean;\n /** Show/hide indicator button (default: true) */\n showOpenIndicator?: boolean;\n /** Show/hide settings button (default: true) */\n showOpenSettings?: boolean;\n /** Show/hide fullscreen button (default: true) */\n showFullscreen?: boolean;\n /** Show/hide snapshot button (default: true) */\n showSnapshot?: boolean;\n}\n\nexport const TradingViewToolbar = memo(\n ({\n children,\n prefix: prefixSlot,\n suffix,\n showResolutions = true,\n showKlineStyleSelect = true,\n showOpenIndicator = true,\n showOpenSettings = true,\n showFullscreen = true,\n showSnapshot = true,\n }: TradingViewToolbarProps) => {\n return (\n <TradingViewToolbarProvider>\n <div className=\"flex items-center gap-1 px-2 py-1 border-b border-border min-h-[36px] flex-shrink-0\">\n {prefixSlot}\n {children ?? (\n <>\n {showResolutions && <TradingViewResolutions />}\n <div className=\"flex items-center gap-0.5 ml-auto\">\n {showKlineStyleSelect && <TradingViewKlineStyleSelect />}\n {showOpenIndicator && <TradingViewOpenIndicator />}\n {showOpenSettings && <TradingViewOpenSettings />}\n {showSnapshot && <TradingViewSnapshot />}\n {showFullscreen && <TradingViewFullscreen />}\n </div>\n </>\n )}\n {suffix}\n </div>\n </TradingViewToolbarProvider>\n );\n },\n);\n"," \nimport type { ResolutionString, SeriesType } from \"./charting-library.types\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport type { TvChartResolution } from \"./types\";\nimport { getTvChartLibraryResolution } from \"./utils\";\n\n/**\n * Per-area widget wrapper that proxies operations to the TradingView chart API.\n */\nexport class ChartWidget {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n private bridge: ChartWidgetBridge;\n readonly chartIndex: number;\n\n constructor(\n settings: ChartSettings,\n chartManager: ChartManager,\n bridge: ChartWidgetBridge,\n index: number,\n ) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n this.chartIndex = index;\n }\n\n get chartAreaManager() {\n return this.chartManager.areaByIndex(this.chartIndex);\n }\n\n get widget() {\n return this.bridge.getWidget();\n }\n\n get chartWidget() {\n return this.widget?.chart(this.chartIndex) ?? null;\n }\n\n setChartStyle(chartType: SeriesType): void {\n this.chartWidget?.setChartType(chartType);\n }\n\n getChartStyle(): SeriesType {\n return this.chartWidget?.chartType() ?? 1;\n }\n\n handleSymbolChange(symbol: string, prevSymbol: string): Promise<void> {\n void prevSymbol;\n return this.bridge.asyncWidgetMethodContext((widget, done) => {\n widget.chart(this.chartIndex).setSymbol(symbol, {\n dataReady: () => done(),\n doNotActivateChart: false,\n });\n });\n }\n\n handleResolutionChange(resolution: TvChartResolution, prevResolution: string): Promise<void> {\n void prevResolution;\n return this.bridge.asyncWidgetMethodContext((widget, done) => {\n const chart = widget.chart(this.chartIndex);\n chart.dataReady(() => {\n chart\n .setResolution(getTvChartLibraryResolution(resolution) as ResolutionString, {\n dataReady: done,\n doNotActivateChart: true,\n })\n .catch(() => {});\n });\n });\n }\n\n setPrecision(precision: number | null): void {\n this.widget?.applyOverrides({\n \"mainSeriesProperties.minTick\":\n precision === null ? \"default\" : `${Math.pow(10, precision)},1,false`,\n });\n }\n\n async dataReady(): Promise<void> {\n await this.bridge.onReady();\n if (!this.chartWidget) throw Error(\"ChartWidget: chartWidget is null\");\n return new Promise((resolve) => {\n this.chartWidget?.dataReady(() => setTimeout(resolve));\n });\n }\n\n timeScaleWidth(): number {\n return this.chartWidget?.getTimeScale()?.width() ?? NaN;\n }\n\n rightOffset(): number {\n return this.chartWidget?.getTimeScale()?.rightOffset() ?? NaN;\n }\n\n setRightOffset(offset: number): void {\n this.chartWidget?.getTimeScale()?.setRightOffset(offset);\n }\n\n barSpacing(): number {\n return this.chartWidget?.getTimeScale()?.barSpacing() ?? NaN;\n }\n\n setBarSpacing(spacing: number): void {\n this.chartWidget?.getTimeScale()?.setBarSpacing(spacing);\n }\n}\n"," \nimport type { ThemeName } from \"./charting-library.types\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { ChartWidget } from \"./ChartWidget\";\nimport { TvChartLayout } from \"./types\";\nimport { getTvChartLibraryLayout, getTvChartLibraryTheme } from \"./utils\";\n\n/**\n * High-level wrapper around the TradingView IChartingLibraryWidget.\n * Provides convenience methods for theme, layout, screenshots, etc.\n */\nexport class ChartLibraryWidget {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n readonly bridge: ChartWidgetBridge;\n\n constructor(settings: ChartSettings, chartManager: ChartManager, bridge: ChartWidgetBridge) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n }\n\n get widget() {\n return this.bridge.getWidget();\n }\n\n chartByIndex(index: number): ChartWidget {\n return new ChartWidget(this.settings, this.chartManager, this.bridge, index);\n }\n\n activeChart(): ChartWidget | undefined {\n const idx = this.widget?.activeChartIndex();\n return idx === undefined ? undefined : this.chartByIndex(idx);\n }\n\n openIndicatorSettingsDialog(): void {\n this.widget?.activeChart().executeActionById(\"insertIndicator\");\n }\n\n openSettingsDialog(): void {\n this.widget?.activeChart().executeActionById(\"chartProperties\");\n }\n\n takeClientScreenshot(): Promise<HTMLCanvasElement> | undefined {\n return this.widget?.takeClientScreenshot();\n }\n\n onLayoutChange(layout: TvChartLayout): void {\n this.widget?.setLayout(getTvChartLibraryLayout(layout));\n }\n\n async onThemeChange(theme: string, reverseColor: boolean): Promise<void> {\n void reverseColor;\n const tvTheme = getTvChartLibraryTheme(theme) as ThemeName;\n await this.widget?.changeTheme(tvTheme, { disableUndo: true });\n this.bridge.applyColorPaletteOverrides();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype Listener<T = any> = (value: T) => void;\n\n/**\n * Lightweight typed event emitter for internal bridge-level events.\n * Replaces rxjs Subject for non-React event passing.\n */\nexport class EventEmitter<TEvents extends Record<string, any> = Record<string, any>> {\n private listeners = new Map<keyof TEvents, Set<Listener>>();\n\n on<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(listener);\n return () => {\n this.listeners.get(event)?.delete(listener);\n };\n }\n\n emit<K extends keyof TEvents>(event: K, value: TEvents[K]): void {\n this.listeners.get(event)?.forEach((fn) => fn(value));\n }\n\n off<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void {\n this.listeners.get(event)?.delete(listener);\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n GetMarksCallback,\n HistoryCallback,\n LibrarySymbolInfo,\n Mark,\n PeriodParams,\n ResolutionString,\n ResolveCallback,\n SubscribeBarsCallback,\n SymbolResolveExtension,\n} from \"./charting-library.types\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { ALL_TV_CHART_RESOLUTIONS } from \"./constants\";\nimport { getTvChartLibraryResolution } from \"./utils\";\n\n/**\n * TradingView Charting Library Datafeed API class.\n * Delegates history, live subscribe/unsubscribe, and symbol resolve to the\n * injectable {@link ITvChartDataFeedModule}. Consumers should implement that\n * module with {@link TradingViewDatafeedAdapter} rather than changing this class.\n */\nexport class ChartDataFeed {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n private bridge: ChartWidgetBridge;\n private abortController = new AbortController();\n\n constructor(settings: ChartSettings, chartManager: ChartManager, bridge: ChartWidgetBridge) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n }\n\n // Prevent JSON.stringify from following chartManager → internalWidget → chartManager (circular).\n toJSON(): null {\n return null;\n }\n\n async onReady(callback: (data: any) => void): Promise<void> {\n setTimeout(() => {\n callback({\n supported_resolutions: ALL_TV_CHART_RESOLUTIONS.map(getTvChartLibraryResolution),\n supports_marks: true,\n exchanges: [],\n });\n });\n await this.chartManager.datafeed?.onReady({\n setting: this.settings,\n chartManager: this.chartManager,\n instance: this.bridge,\n });\n }\n\n destroy(): void {\n this.abortController.abort();\n }\n\n async resolveSymbol(\n symbolName: string,\n onResolve: ResolveCallback,\n onError: ErrorCallback,\n extension?: SymbolResolveExtension,\n ): Promise<void> {\n try {\n const symbolInfo = await this.chartManager.datafeed?.resolveSymbol(symbolName, extension);\n if (symbolInfo) onResolve(symbolInfo);\n } catch (e) {\n console.error(\"ChartDataFeed.resolveSymbol\", e);\n onError(e as any);\n }\n }\n\n async getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n onResult: HistoryCallback,\n onError: ErrorCallback,\n ): Promise<void> {\n try {\n const bars = await this.chartManager.datafeed?.getBars(symbolInfo, resolution, periodParams);\n if (bars) onResult(bars, { noData: bars.length === 0 });\n } catch (e) {\n console.error(\"ChartDataFeed.getBars\", e);\n onError(e as any);\n }\n }\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void {\n this.chartManager.datafeed?.subscribeBars(\n symbolInfo,\n resolution,\n onTick,\n listenerGuid,\n onResetCacheNeededCallback,\n );\n }\n\n unsubscribeBars(listenerGuid: string): void {\n this.chartManager.datafeed?.unsubscribeBars(listenerGuid);\n }\n\n async getMarks(\n symbolInfo: LibrarySymbolInfo,\n from: number,\n to: number,\n onDataCallback: GetMarksCallback<Mark>,\n resolution: ResolutionString,\n ): Promise<void> {\n this.chartManager.datafeed?.getMarks?.(symbolInfo, from, to, onDataCallback, resolution);\n }\n\n /**\n * TradingView calls getQuotes to populate the current-price display in the\n * chart header. Without this method, TradingView's internal quote session\n * (qs_*) is created but never resolved, triggering \"Cannot read properties\n * of undefined\" errors. Returning an \"ok\" status with empty values tells\n * TradingView that the datafeed supports the quotes API but has no quote data\n * beyond what is already on the chart, which suppresses the internal errors.\n */\n getQuotes(\n symbols: string[],\n onDataCallback: (data: any[]) => void,\n onErrorCallback: (reason: string) => void,\n ): void {\n void onErrorCallback;\n onDataCallback(symbols.map((n) => ({ s: \"ok\", n, v: {} })));\n }\n\n /**\n * TradingView calls subscribeQuotes to receive real-time price ticks for the\n * header display. We return a no-op here because the chart already receives\n * real-time data via subscribeBars. Implementing this stub prevents the\n * internal qs_* session from remaining in a pending/broken state.\n */\n subscribeQuotes(\n symbols: string[],\n fastSymbols: string[],\n onRealtimeCallback: (data: any[]) => void,\n listenerGuid: string,\n ): void {\n void symbols;\n void fastSymbols;\n void onRealtimeCallback;\n void listenerGuid;\n }\n\n unsubscribeQuotes(listenerGuid: string): void {\n void listenerGuid;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { cloneDeep, uniqBy } from \"lodash-es\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { parseSymbol, stringifySymbolShort } from \"./utils\";\n\n/**\n * Adapter for TradingView save_load_adapter — persists chart layout and\n * drawing data to localStorage, keyed by storageId for multi-instance support.\n */\nexport class ChartSaveLoadAdapter {\n private settings: ChartSettings;\n private chartManager: ChartManager;\n private bridge: ChartWidgetBridge;\n private data: any | null;\n private drawings: any | null;\n\n constructor(settings: ChartSettings, chartManager: ChartManager, bridge: ChartWidgetBridge) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.bridge = bridge;\n this.data = null;\n this.drawings = null;\n this.loadDataFromLocalStorage();\n }\n\n get layoutId(): string {\n return this.settings.storageId;\n }\n\n get shouldResetColorPalette(): boolean {\n const theme = this.data?.theme;\n const reverseColor = this.data?.reverseColor;\n return theme !== this.settings.theme || reverseColor !== this.settings.reverseColor;\n }\n\n // Prevent JSON.stringify from following chartManager → internalWidget → chartManager (circular).\n toJSON(): null {\n return null;\n }\n\n // ---- TradingView save_load_adapter interface ----\n\n getAllCharts(): Promise<any[]> {\n return new Promise((resolve) => {\n const charts: any[] = [];\n if (this.data) {\n charts.push({\n id: this.data.id,\n name: this.data.name,\n symbol: this.data.symbol,\n resolution: this.data.resolution,\n timestamp: this.data.timestamp,\n });\n }\n resolve(charts);\n });\n }\n\n removeChart(index: number): void {\n void index;\n throw Error(\"Method not implemented.\");\n }\n\n async saveChart(chart: any): Promise<string> {\n this.data = {\n ...chart,\n theme: this.settings.theme,\n reverseColor: this.settings.reverseColor,\n id: this.layoutId,\n timestamp: 0,\n };\n this.saveDataToLocalStorage();\n return this.data.id;\n }\n\n getChartContent(content: any): Promise<string> {\n void content;\n return new Promise((resolve) => {\n const data = JSON.parse(this.data.content);\n const chartsSymbols = JSON.parse(data.charts_symbols);\n const content = JSON.parse(data.content);\n resolve(\n JSON.stringify({\n ...data,\n chart_symbols: JSON.stringify(chartsSymbols),\n content: JSON.stringify(content),\n }),\n );\n });\n }\n\n async saveLineToolsAndGroups(\n _storageId: string,\n chartIndex: string,\n data: any,\n ): Promise<void> {\n this.drawings = this.drawings || { data: {}, timestamp: 0 };\n this.drawings.data = this.drawings.data || {};\n this.drawings.data[chartIndex] = this.drawings.data[chartIndex] || {};\n\n try {\n if (!data.sources) return;\n\n for (const [sourceId, source] of data.sources) {\n if (\n !source ||\n !source.symbol ||\n !source.state ||\n Object.keys(source.state).length === 0 ||\n sourceId.includes(\"/\")\n ) {\n if (source === null) {\n delete this.drawings.data[chartIndex][sourceId];\n }\n } else {\n const { address, chain } = parseSymbol(source.symbol);\n const symbol = stringifySymbolShort({ address, chain });\n const saveSource = {\n ...source,\n symbol,\n id: source.id.indexOf(\"/\") > 0 ? source.id.split(\"/\")[0] : source.id,\n };\n this.drawings.data[chartIndex][sourceId] = saveSource;\n }\n }\n this.saveDataToLocalStorage();\n } catch (e) {\n console.error(\"saveLineToolsAndGroups\", e);\n }\n }\n\n async loadLineToolsAndGroups(\n _storageId: string,\n chartIndex: string,\n _tool: string,\n symbolToLoad?: { symbol?: string },\n ): Promise<any | null> {\n if (!symbolToLoad?.symbol || !this.drawings?.data?.[chartIndex]) return null;\n\n const symbol = symbolToLoad.symbol;\n const { address, chain } = parseSymbol(symbol);\n const shortSymbol = stringifySymbolShort({ address, chain });\n\n const loadedSources = uniqBy(\n Object.values(cloneDeep(this.drawings.data[chartIndex])).filter(\n (it: any) => it.symbol === shortSymbol,\n ),\n \"id\",\n );\n\n try {\n return {\n sources: new Map<string, any>(\n loadedSources.map((source: any) => {\n const resultSource = cloneDeep({ ...source, symbol });\n return [resultSource.id, resultSource];\n }),\n ),\n };\n } catch (e) {\n console.error(\"ChartSaveLoadAdapter.loadLineToolsAndGroups\", e);\n return null;\n }\n }\n\n // ---- internal ----\n\n private getLayoutKey(key: string): string {\n return `charts.tradingview.data.${key}`;\n }\n\n private getDrawingKey(key: string): string {\n return `charts.tradingview.drawing.${key}`;\n }\n\n private loadDataFromLocalStorage(): void {\n const layoutKey = this.getLayoutKey(this.layoutId);\n const drawingKey = this.getDrawingKey(this.layoutId);\n const layout = localStorage.getItem(layoutKey);\n const drawing = localStorage.getItem(drawingKey);\n\n if (layout) {\n try {\n const parsed = JSON.parse(layout);\n const parsedContent = JSON.parse(parsed.content);\n parsed.content = JSON.stringify(parsedContent);\n this.data = parsed;\n } catch (e) {\n console.error(\"ChartSaveLoadAdapter loadDataFromLocalStorage parse layout error\", e);\n }\n }\n if (drawing) {\n try {\n this.drawings = JSON.parse(drawing);\n } catch (e) {\n console.error(\"ChartSaveLoadAdapter loadDataFromLocalStorage parse drawing error\", e);\n }\n }\n }\n\n private saveDataToLocalStorage(): void {\n const layoutKey = this.getLayoutKey(this.layoutId);\n const drawingKey = this.getDrawingKey(this.layoutId);\n const now = Math.round(Date.now() / 1e3);\n\n if (this.data) {\n this.data.timestamp = now;\n localStorage.setItem(layoutKey, JSON.stringify(this.data));\n }\n if (this.drawings) {\n this.drawings.timestamp = now;\n localStorage.setItem(drawingKey, JSON.stringify(this.drawings));\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\n\nconst CHART_SETTINGS_KEY = \"trading.chart.proterty\";\n\n/**\n * Adapter for TradingView settings_adapter — reads/writes per-instance\n * chart settings to localStorage with a scoped prefix.\n */\nexport class ChartSettingsAdapter {\n private storagePrefix: string;\n initialSettings: Record<string, any>;\n\n constructor(\n settings: ChartSettings,\n chartManager: ChartManager,\n bridge: ChartWidgetBridge,\n ) {\n void chartManager;\n void bridge;\n this.storagePrefix = `tradingview.${settings.storageId}.`;\n this.initialSettings = {};\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (!key) continue;\n\n if (key.startsWith(this.storagePrefix)) {\n const settingsKey = key.slice(this.storagePrefix.length);\n this.initialSettings[settingsKey] = localStorage.getItem(key);\n }\n }\n\n const defaultChartSettings = { noConfirmEnabled: 1 };\n if (this.initialSettings[CHART_SETTINGS_KEY]) {\n try {\n const chartSettings = JSON.parse(this.initialSettings[CHART_SETTINGS_KEY]);\n Object.assign(defaultChartSettings, chartSettings);\n Object.assign(defaultChartSettings, { noConfirmEnabled: true });\n } catch (e) {\n console.error(\"ChartSettingsAdapter: failed to parse chart settings\", e);\n }\n }\n this.initialSettings[CHART_SETTINGS_KEY] = JSON.stringify(defaultChartSettings);\n }\n\n toJSON(): null {\n return null;\n }\n\n removeValue(key: string): void {\n delete this.initialSettings[key];\n localStorage.removeItem(`${this.storagePrefix}${key}`);\n }\n\n setValue(key: string, value: any): void {\n this.initialSettings[key] = value;\n localStorage.setItem(`${this.storagePrefix}${key}`, value);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n ChartingLibraryWidgetOptions,\n CrossHairMovedEventParams,\n IChartingLibraryWidget,\n LayoutType,\n ResolutionString,\n TimezoneId,\n Timezone,\n VisibleTimeRange,\n WidgetConstructor,\n ColorTypes,\n} from \"./charting-library.types\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport { EventEmitter } from \"./event-emitter\";\nimport { ChartDataFeed } from \"./ChartDataFeed\";\nimport { ChartSaveLoadAdapter } from \"./ChartSaveLoadAdapter\";\nimport { ChartSettingsAdapter } from \"./ChartSettingsAdapter\";\nimport {\n TV_CHART_INTERESTED_DOM_EVENTS,\n TV_CHART_THEME_COLORS,\n TV_CHART_LIGHT_THEME_COLORS,\n ALL_TV_CHART_RESOLUTIONS,\n} from \"./constants\";\nimport {\n getTvChartLayoutReverse,\n getTvChartLibraryLayout,\n getTvChartLibraryResolution,\n getTvChartLibraryTheme,\n getTvChartResolutionReverse,\n} from \"./utils\";\n\ninterface BridgeEvents {\n symbolChanged: [number, string];\n resolutionChanged: [number, string];\n visibleRangeChanged: [number, VisibleTimeRange];\n crosshairMoved: [number, CrossHairMovedEventParams];\n domEvent: [number, string, Event];\n}\n\ntype ModuleConstructor = new (\n settings: ChartSettings,\n chartManager: ChartManager,\n bridge: ChartWidgetBridge,\n) => any;\n\n/**\n * Bridge between our React/jotai layer and the TradingView charting library widget.\n * Manages widget lifecycle, chart subscriptions, and module orchestration.\n */\nexport class ChartWidgetBridge {\n readonly settings: ChartSettings;\n readonly chartManager: ChartManager;\n\n private WidgetCtor: WidgetConstructor;\n private moduleInstances = new Map<string, any>();\n private symbolIntervalSubs = new Map<string, () => void>();\n private abortController = new AbortController();\n\n private widgetReadyPromise: Promise<void> | null = null;\n private readyPromise: Promise<void> | null = null;\n\n widget: IChartingLibraryWidget | null = null;\n container: HTMLDivElement | null = null;\n ready = false;\n layoutReady = true;\n\n readonly events = new EventEmitter<BridgeEvents>();\n\n private libraryPath: string;\n private customCssUrl: string;\n\n constructor(\n settings: ChartSettings,\n chartManager: ChartManager,\n widgetConstructor: WidgetConstructor,\n options?: { libraryPath?: string; customCssUrl?: string },\n ) {\n this.settings = settings;\n this.chartManager = chartManager;\n this.WidgetCtor = widgetConstructor;\n // Root-relative so nested Next routes (e.g. /tokens/sol/:address) do not\n // resolve bundles against the page path. TradingView treats library_path\n // as relative to the HTML page when it has no leading slash.\n this.libraryPath = options?.libraryPath ?? \"/static/charting_library/\";\n // custom_css_url is resolved relative to library_path by TradingView,\n // so this should be just the filename, not a full path.\n this.customCssUrl = options?.customCssUrl ?? \"custom-styles.css\";\n\n this.initModules();\n }\n\n // ---- public ----\n\n getWidget(): IChartingLibraryWidget | null {\n return this.widget;\n }\n\n async init(container: HTMLDivElement): Promise<void> {\n if (this.widgetReadyPromise) {\n throw new Error(\"ChartWidgetBridge already initialized.\");\n }\n\n const options = this.getWidgetOptions();\n this.container = container;\n this.widget = new this.WidgetCtor({ ...options, container });\n\n const widgetReadyPromise = new Promise<void>((resolve) => {\n this.widget?.onChartReady(() => resolve());\n });\n this.widgetReadyPromise = widgetReadyPromise;\n\n this.readyPromise = widgetReadyPromise\n .then(() => {\n this.ready = true;\n return this.handleChartReady();\n })\n .catch((error) => {\n console.warn(\"ChartWidgetBridge widget ready failed\", error);\n });\n\n this.moduleInstances.forEach((mod, name) => {\n try {\n mod.init?.call(mod);\n } catch (e) {\n console.warn(`ChartWidgetBridge init module ${name}`, e);\n }\n });\n\n await Promise.race([\n this.readyPromise,\n new Promise((_, reject) =>\n setTimeout(reject, 6e4, new Error(\"ChartWidgetBridge init timeout\")),\n ),\n ]);\n }\n\n async destroy(): Promise<void> {\n this.moduleInstances.forEach((mod) => mod.destroy?.call(mod));\n this.symbolIntervalSubs.forEach((unsub) => unsub());\n this.symbolIntervalSubs.clear();\n this.events.clear();\n this.abortController.abort();\n\n this.ready = false;\n this.widgetReadyPromise = null;\n this.readyPromise = null;\n\n this.widget?.remove();\n this.widget = null;\n }\n\n async onReady(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.widget) {\n this.widget.onChartReady(() => this.readyPromise?.then(resolve).catch(reject));\n } else {\n reject(Error(\"cannot call `onReady` before `init`\"));\n }\n });\n }\n\n async asyncWidgetMethodContext(\n callback: (widget: IChartingLibraryWidget, done: () => void) => void,\n ): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (!this.widgetReadyPromise) {\n reject(new Error(\"ChartWidgetBridge: widget not ready\"));\n return;\n }\n\n const layoutReady = this.widgetReadyPromise.then(() => this.waitForLayout());\n const signal = this.abortController.signal;\n const handleAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", handleAbort);\n\n layoutReady\n .then(() => callback(this.widget!, resolve))\n .catch(reject)\n .finally(() => signal.removeEventListener(\"abort\", handleAbort));\n });\n }\n\n getModule(name: string): any {\n return this.moduleInstances.get(name);\n }\n\n applyColorPaletteOverrides(): void {\n this.widget?.applyOverrides(this.getColorPaletteOverrides());\n this.widget?.applyStudiesOverrides(this.getColorPaletteStudiesOverrides());\n }\n\n // ---- widget options ----\n\n private getWidgetOptions(): ChartingLibraryWidgetOptions {\n const disabledFeatures = [\n \"header_widget\",\n \"legend_inplace_edit\",\n \"display_market_status\",\n \"save_shortcut\",\n \"show_interval_dialog_on_key_press\",\n \"symbol_info\",\n \"symbol_search_hot_key\",\n \"uppercase_instrument_names\",\n \"show_symbol_logo_in_legend\",\n \"show_symbol_logo_for_compare_studies\",\n \"drawing_templates\",\n ...this.settings.disabledFeatures,\n ];\n const enabledFeatures = [\n \"determine_first_data_request_size_using_visible_range\",\n \"request_only_visible_range_on_reset\",\n \"show_exchange_logos\",\n \"show_symbol_logos\",\n \"dont_show_boolean_study_arguments\",\n \"hide_last_na_study_output\",\n \"hide_right_toolbar\",\n \"seconds_resolution\",\n \"saveload_separate_drawings_storage\",\n \"volume_force_overlay\",\n \"create_volume_indicator_by_default\",\n \"two_character_bar_marks_labels\",\n ...this.settings.enabledFeatures,\n ];\n\n if (this.settings.enableHideDrawingToolsByDefault) {\n enabledFeatures.push(\"hide_left_toolbar_by_default\");\n }\n if (!this.settings.enableTimeframesToolbar) {\n disabledFeatures.push(\"timeframes_toolbar\");\n }\n if (!this.settings.enableCreateVolumeIndicatorByDefault) {\n disabledFeatures.push(\"create_volume_indicator_by_default\");\n }\n if (!this.settings.enableVolumeForceOverlay) {\n disabledFeatures.push(\"volume_force_overlay\");\n }\n\n return {\n container: \"\",\n autosize: true,\n debug: false,\n load_last_chart: true,\n auto_save_delay: 1,\n timezone: this.localTimezone as Timezone,\n library_path: this.libraryPath,\n custom_css_url: this.customCssUrl,\n theme: getTvChartLibraryTheme(this.settings.theme),\n custom_font_family: window.getComputedStyle(document.body).fontFamily,\n symbol: this.chartManager.activeArea?.tickerSymbol,\n interval: getTvChartLibraryResolution(\n this.chartManager.activeArea?.resolution,\n ) as ResolutionString,\n locale: this.settings.locale,\n datafeed: this.getModule(\"datafeed\"),\n save_load_adapter: this.getModule(\"saveLoadAdapter\"),\n settings_adapter: this.getModule(\"settingsAdapter\"),\n custom_formatters: {\n // Must return null (not {}) when no factory is configured so TradingView\n // falls back to its built-in price formatter instead of calling {}.format().\n priceFormatterFactory: this.settings.priceFormatterFactory\n ? (symbolInfo: any, minTick: string) =>\n this.settings.priceFormatterFactory!(symbolInfo, minTick)\n : () => null,\n },\n overrides: { ...this.getSettingsOverrides(), ...this.getColorPaletteOverrides() },\n studies_overrides: this.getColorPaletteStudiesOverrides(),\n disabled_features: [...new Set(disabledFeatures)],\n enabled_features: [...new Set(enabledFeatures)].filter(\n (feature) => !disabledFeatures.includes(feature),\n ),\n supported_resolutions: ALL_TV_CHART_RESOLUTIONS.map(getTvChartLibraryResolution),\n };\n }\n\n // ---- chart ready ----\n\n private async handleChartReady(): Promise<void> {\n const layout = getTvChartLibraryLayout(this.settings.layout);\n if (layout !== this.widget?.layout()) {\n await this.waitForLayout(layout as LayoutType);\n }\n\n this.widget?.setActiveChart(this.chartManager.selectedIndex);\n\n const saveLoadAdapter = this.getModule(\"saveLoadAdapter\") as ChartSaveLoadAdapter;\n if (saveLoadAdapter?.shouldResetColorPalette) {\n await this.widget?.changeTheme(getTvChartLibraryTheme(this.settings.theme), {\n disableUndo: true,\n });\n }\n this.applyColorPaletteOverrides();\n\n this.widget?.subscribe(\"onAutoSaveNeeded\", this.onAutoSaveNeeded.bind(this));\n this.widget?.subscribe(\"activeChartChanged\", this.activeChartChanged.bind(this));\n this.widget?.subscribe(\"layout_about_to_be_changed\", this.layoutWillChange.bind(this));\n this.widget?.subscribe(\"layout_changed\", this.layoutChanged.bind(this));\n\n this.syncChartsChanges();\n this.subscribeChartsChanges();\n this.installEventHooks();\n this.resetTimezone();\n }\n\n // ---- event handlers ----\n\n private onAutoSaveNeeded(): void {\n try {\n this.widget?.saveChartToServer(undefined, undefined, { defaultChartName: \"DEFAULT\" });\n } catch (e) {\n console.warn(\"ChartWidgetBridge.onAutoSaveNeeded\", e);\n }\n }\n\n private activeChartChanged(index: number): void {\n this.chartManager.selectedIndex = index;\n this.chartManager.settings.saveLoadAdapter\n .saveSettings(this.chartManager.settingsData)\n .catch(console.error);\n }\n\n private layoutWillChange(layout: LayoutType): void {\n this.layoutReady = false;\n this.chartManager.setLayout(getTvChartLayoutReverse(layout));\n }\n\n private layoutChanged(): void {\n this.layoutReady = true;\n this.syncChartsChanges();\n this.subscribeChartsChanges();\n this.widget?.unloadUnusedCharts();\n this.widget?.saveChartToServer();\n }\n\n // ---- sync / subscribe helpers ----\n\n private syncChartsChanges(): void {\n this.widget?.symbolSync()?.setValue(false);\n this.widget?.intervalSync()?.setValue(false);\n\n const chartCount = this.widget?.chartsCount() ?? 0;\n for (let i = 0; i < chartCount; i++) {\n const area = this.chartManager.areaByIndex(i);\n const chart = this.widget!.chart(i);\n void chart.setSymbol(area?.tickerSymbol ?? \"\", { doNotActivateChart: true });\n void chart.setResolution(\n getTvChartLibraryResolution(area?.resolution) as ResolutionString,\n { doNotActivateChart: true },\n );\n }\n }\n\n private subscribeChartsChanges(): void {\n const chartCount = this.widget?.chartsCount() ?? 0;\n\n this.symbolIntervalSubs.forEach((unsub, key) => {\n if (parseInt(key) >= chartCount) {\n unsub();\n this.symbolIntervalSubs.delete(key);\n }\n });\n\n for (let i = 0; i < chartCount; i++) {\n if (this.symbolIntervalSubs.has(`${i}`)) continue;\n\n const area = this.chartManager.areaByIndex(i);\n const chart = this.widget!.chart(i);\n\n chart.getPanes().forEach((pane) => pane.getMainSourcePriceScale()?.setAutoScale(true));\n\n const symbolSub = chart.onSymbolChanged();\n const intervalSub = chart.onIntervalChanged();\n\n const onSymbolChanged = () => {\n this.events.emit(\"symbolChanged\", [i, chart.symbol()]);\n area?.setSymbol(chart.symbol()).catch(() => {});\n this.onAutoSaveNeeded();\n };\n\n const onIntervalChanged = (interval: ResolutionString) => {\n const resolution = getTvChartResolutionReverse(interval);\n this.events.emit(\"resolutionChanged\", [i, resolution]);\n area?.setResolution(resolution).catch(() => {});\n };\n\n symbolSub.subscribe(area, onSymbolChanged);\n intervalSub.subscribe(area, onIntervalChanged);\n\n this.symbolIntervalSubs.set(`${i}`, () => {\n symbolSub.unsubscribe(area, onSymbolChanged);\n intervalSub.unsubscribe(area, onIntervalChanged);\n });\n }\n }\n\n private installEventHooks(): void {\n const iframe = this.container?.lastElementChild as HTMLIFrameElement | null;\n const doc = iframe?.contentWindow?.document;\n if (!doc) return;\n\n doc.addEventListener(\"click\", () => iframe?.click());\n\n if (doc.defaultView?.MutationObserver) {\n const seen = new WeakSet();\n const layout = doc.querySelector(\".layout__area--center\");\n if (layout) {\n const register = () => {\n layout.querySelectorAll(\".chart-container\").forEach((el, idx) => {\n if (!seen.has(el)) {\n seen.add(el);\n TV_CHART_INTERESTED_DOM_EVENTS.forEach((name) => {\n el.addEventListener(\n name,\n (evt) => this.events.emit(\"domEvent\", [idx, name, evt]),\n { passive: true },\n );\n });\n }\n });\n };\n new doc.defaultView.MutationObserver(register).observe(layout, { childList: true });\n register();\n }\n }\n }\n\n private resetTimezone(): void {\n try {\n const count = this.widget?.chartsCount() ?? 0;\n for (let i = 0; i < count; i++) {\n this.widget\n ?.chart(i)\n ?.getTimezoneApi()\n ?.setTimezone(this.localTimezone as TimezoneId);\n }\n } catch (e) {\n console.error(\"ChartWidgetBridge: Reset timezone\", e);\n }\n }\n\n private get localTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n private async waitForLayout(layout?: LayoutType): Promise<void> {\n if (!this.widget || (this.layoutReady && !layout)) return;\n let handler: () => void;\n const p = new Promise<void>((resolve) => {\n handler = resolve;\n this.widget!.subscribe(\"layout_changed\", resolve);\n if (layout) this.widget!.setLayout(layout);\n }).finally(() => {\n this.widget!.unsubscribe(\"layout_changed\", handler);\n });\n return p;\n }\n\n // ---- overrides ----\n\n private getSettingsOverrides(): Record<string, any> {\n return {\n \"mainSeriesProperties.minTick\": \"default\",\n \"paneProperties.legendProperties.showSeriesTitle\": this.settings.enableLegendSeriesTitle,\n };\n }\n\n private getColorPaletteOverrides(): Record<string, any> {\n const backgroundColor = this.resolveThemeColor(\n this.settings.backgroundColor,\n TV_CHART_THEME_COLORS.chartBg,\n );\n const increaseColor = this.resolveThemeColor(\n this.settings.increaseColor,\n TV_CHART_THEME_COLORS.increase,\n );\n const decreaseColor = this.resolveThemeColor(\n this.settings.decreaseColor,\n TV_CHART_THEME_COLORS.decrease,\n );\n const cardColor =\n this.settings.theme === \"dark\"\n ? TV_CHART_THEME_COLORS.card\n : TV_CHART_LIGHT_THEME_COLORS.card;\n\n return {\n \"paneProperties.background\": backgroundColor,\n \"paneProperties.backgroundType\": \"solid\" as ColorTypes,\n volumePaneSize: \"medium\",\n \"mainSeriesProperties.candleStyle.upColor\": increaseColor,\n \"mainSeriesProperties.barStyle.upColor\": increaseColor,\n \"mainSeriesProperties.columnStyle.upColor\": increaseColor,\n \"mainSeriesProperties.candleStyle.downColor\": decreaseColor,\n \"mainSeriesProperties.barStyle.downColor\": decreaseColor,\n \"mainSeriesProperties.columnStyle.downColor\": decreaseColor,\n \"mainSeriesProperties.candleStyle.borderUpColor\": increaseColor,\n \"mainSeriesProperties.candleStyle.borderDownColor\": decreaseColor,\n \"mainSeriesProperties.candleStyle.wickUpColor\": increaseColor,\n \"mainSeriesProperties.candleStyle.wickDownColor\": decreaseColor,\n \"mainSeriesProperties.hollowCandleStyle.upColor\": increaseColor,\n \"mainSeriesProperties.hollowCandleStyle.downColor\": decreaseColor,\n \"mainSeriesProperties.hollowCandleStyle.borderUpColor\": increaseColor,\n \"mainSeriesProperties.hollowCandleStyle.borderDownColor\": decreaseColor,\n \"mainSeriesProperties.hollowCandleStyle.wickUpColor\": increaseColor,\n \"mainSeriesProperties.hollowCandleStyle.wickDownColor\": decreaseColor,\n \"mainSeriesProperties.haStyle.upColor\": increaseColor,\n \"mainSeriesProperties.haStyle.downColor\": decreaseColor,\n \"mainSeriesProperties.haStyle.borderUpColor\": increaseColor,\n \"mainSeriesProperties.haStyle.borderDownColor\": decreaseColor,\n \"mainSeriesProperties.haStyle.wickUpColor\": increaseColor,\n \"mainSeriesProperties.haStyle.wickDownColor\": decreaseColor,\n \"mainSeriesProperties.lineStyle.color\": increaseColor,\n \"mainSeriesProperties.areaStyle.color1\": increaseColor,\n \"mainSeriesProperties.areaStyle.color2\": backgroundColor,\n \"mainSeriesProperties.areaStyle.linecolor\": increaseColor,\n \"mainSeriesProperties.areaStyle.transparency\": 65,\n \"mainSeriesProperties.baselineStyle.topFillColor1\": increaseColor,\n \"mainSeriesProperties.baselineStyle.topFillColor2\": backgroundColor,\n \"mainSeriesProperties.baselineStyle.bottomFillColor1\": decreaseColor,\n \"mainSeriesProperties.baselineStyle.bottomFillColor2\": backgroundColor,\n \"mainSeriesProperties.baselineStyle.topLineColor\": increaseColor,\n \"mainSeriesProperties.baselineStyle.bottomLineColor\": decreaseColor,\n \"mainSeriesProperties.baselineStyle.transparency\": 65,\n \"linetoolorder.bodyBackgroundColor\": cardColor,\n \"linetoolorder.bodyBackgroundTransparency\": 0,\n };\n }\n\n private getColorPaletteStudiesOverrides(): Record<string, any> {\n const increaseColor = this.resolveThemeColor(\n this.settings.increaseColor,\n TV_CHART_THEME_COLORS.increase,\n );\n const decreaseColor = this.resolveThemeColor(\n this.settings.decreaseColor,\n TV_CHART_THEME_COLORS.decrease,\n );\n\n return {\n \"volume.volume.color.0\": decreaseColor,\n \"volume.volume.color.1\": increaseColor,\n \"volume.volume.transparency\": 80,\n };\n }\n\n private resolveThemeColor(value: string | null, fallback: string): string {\n if (!value || !value.includes(\"var(\")) return value ?? fallback;\n if (typeof document === \"undefined\" || !document.body) return fallback;\n\n const probe = document.createElement(\"span\");\n probe.style.color = value;\n probe.style.display = \"none\";\n document.body.appendChild(probe);\n const resolved = window.getComputedStyle(probe).color;\n probe.remove();\n\n return resolved || fallback;\n }\n\n // ---- modules ----\n\n private initModules(): void {\n const MODULES: Record<string, ModuleConstructor> = {\n datafeed: ChartDataFeed,\n saveLoadAdapter: ChartSaveLoadAdapter as any,\n settingsAdapter: ChartSettingsAdapter as any,\n };\n Object.entries(MODULES).forEach(([name, Ctor]) => {\n this.moduleInstances.set(name, new Ctor(this.settings, this.chartManager, this));\n });\n }\n}\n","import { memo } from \"react\";\n\n/**\n * Placeholder for multi-chart layout area title injection.\n * The TradingView charting library renders charts into its own iframes,\n * so layout-level customization is done via the bridge's installEventHooks.\n *\n * This component can be extended to inject custom UI above or around\n * individual chart panes when multi-chart layouts are active.\n */\nexport const TradingViewLayout = memo(() => {\n return null;\n});\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { ChartLibraryWidget } from \"../lib/ChartLibraryWidget\";\nimport { ChartWidgetBridge } from \"../lib/ChartWidgetBridge\";\nimport { TradingViewLayout } from \"./TradingViewLayout\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TradingViewWidgetContainerProps {\n onReady?: () => void;\n}\n\nexport const TradingViewWidgetContainer = forwardRef<\n ChartLibraryWidget | undefined,\n TradingViewWidgetContainerProps\n>(({ onReady }, ref) => {\n const {\n chartManager,\n chartSettings,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n } = useTvChartContext();\n\n const onReadyRef = useRef(onReady);\n const [widget, setWidget] = useState<ChartLibraryWidget>();\n const [containerElement, setContainerElement] =\n useState<HTMLDivElement | null>(null);\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n if (ready && onReadyRef.current) {\n setTimeout(onReadyRef.current);\n }\n }, [ready]);\n\n useImperativeHandle(ref, () => widget, [widget]);\n\n useEffect(() => {\n if (!containerElement) return;\n\n const bridge = new ChartWidgetBridge(\n chartSettings,\n chartManager,\n widgetConstructor,\n {\n libraryPath,\n customCssUrl,\n },\n );\n const libWidget = new ChartLibraryWidget(\n chartSettings,\n chartManager,\n bridge,\n );\n\n setWidget(libWidget);\n\n bridge\n .init(containerElement)\n .then(() => setReady(true))\n .catch((error) => {\n console.error(\n \"TradingViewWidgetContainer: failed to init bridge\",\n error,\n );\n });\n\n return () => {\n bridge\n .destroy()\n .then(() => {\n setWidget(undefined);\n setReady(false);\n })\n .catch(() => {\n console.error(\"TradingViewWidgetContainer: failed to destroy bridge\");\n });\n };\n }, [\n containerElement,\n chartSettings,\n chartManager,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n ]);\n\n return (\n <div className=\"w-full h-full\">\n <TradingViewLayout />\n <div\n id=\"tv_chart_container\"\n className=\"w-full h-full\"\n ref={setContainerElement}\n />\n </div>\n );\n});\n","import { memo, useCallback, useLayoutEffect, useMemo } from \"react\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { TradingViewWidgetContainer } from \"./TradingViewWidgetContainer\";\n\nexport interface TradingViewWidgetProviderProps {\n onReady?: () => void;\n}\n\nexport const TradingViewWidgetProvider = memo(\n ({ onReady }: TradingViewWidgetProviderProps) => {\n const { chartManager, chartSettings } = useTvChartContext();\n\n const renderId = useMemo(\n () => `${chartSettings.timezone}_${chartManager.reloadId}`,\n [chartSettings.timezone, chartManager.reloadId],\n );\n\n useLayoutEffect(() => {\n chartManager.setLoading(true);\n }, [chartManager, chartSettings.chartType, renderId]);\n\n const handleReady = useCallback(() => {\n onReady?.();\n chartManager.onInternalWidgetReady();\n chartManager.setLoading(false);\n }, [chartManager, onReady]);\n\n return (\n <div className=\"h-full min-h-0 w-full overflow-hidden\">\n <TradingViewWidgetContainer\n onReady={handleReady}\n ref={(ref) => chartManager.setInternalWidget(ref ?? null)}\n />\n </div>\n );\n },\n);\n","import { forwardRef, memo, type ReactNode } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chartLoadingFamily } from \"../lib/atoms\";\nimport type { WidgetConstructor } from \"../lib/charting-library.types\";\nimport type { TvChartConfig } from \"./TradingViewConfig\";\nimport {\n TradingViewProvider,\n TvChartHandle,\n useTvChartContext,\n} from \"./TradingViewProvider\";\nimport {\n TradingViewToolbar,\n type TradingViewToolbarProps,\n} from \"./TradingViewToolbar\";\nimport { TradingViewWidgetProvider } from \"./TradingViewWidgetProvider\";\n\nexport interface TradingViewInstance {\n handle: TvChartHandle;\n}\n\nexport interface TradingViewProps {\n /** Chart configuration */\n initConfig: TvChartConfig;\n /** TradingView Widget constructor (injected by consumer) */\n widgetConstructor: WidgetConstructor;\n /** Path to charting library static files */\n libraryPath?: string;\n /** Custom CSS URL for the charting library */\n customCssUrl?: string;\n /** Toolbar configuration; pass false to hide */\n toolbar?: TradingViewToolbarProps | false;\n /** Optional loading overlay */\n loadingOverlay?: ReactNode;\n /** Called when chart widget is ready */\n onReady?: () => void;\n /** Additional children rendered below the chart */\n children?: ReactNode;\n /** Class name for the outer container */\n className?: string;\n}\n\nconst TradingViewInner = memo(\n ({\n toolbar,\n loadingOverlay,\n onReady,\n children,\n }: Pick<\n TradingViewProps,\n \"toolbar\" | \"loadingOverlay\" | \"onReady\" | \"children\"\n >) => {\n const { prefix } = useTvChartContext();\n const loading = useAtomValue(chartLoadingFamily(prefix));\n\n return (\n <>\n {toolbar !== false && <TradingViewToolbar {...(toolbar || {})} />}\n <div className=\"relative flex-1 w-full overflow-hidden\">\n {loading && loadingOverlay && (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-background/80\">\n {loadingOverlay}\n </div>\n )}\n <TradingViewWidgetProvider onReady={onReady} />\n </div>\n {children}\n </>\n );\n },\n);\n\n/**\n * Main TradingView K-line chart component.\n * Wraps the TradingView Charting Library with jotai-based state management\n * and multi-instance support via storageId.\n */\nexport const TradingView = forwardRef<TvChartHandle, TradingViewProps>(\n (\n {\n initConfig,\n widgetConstructor,\n libraryPath,\n customCssUrl,\n toolbar,\n loadingOverlay,\n onReady,\n children,\n className,\n },\n ref,\n ) => {\n return (\n <div className={`flex flex-col w-full h-full ${className ?? \"\"}`}>\n <TradingViewProvider\n ref={ref}\n initConfig={initConfig}\n widgetConstructor={widgetConstructor}\n libraryPath={libraryPath}\n customCssUrl={customCssUrl}\n >\n <TradingViewInner\n toolbar={toolbar}\n loadingOverlay={loadingOverlay}\n onReady={onReady}\n >\n {children}\n </TradingViewInner>\n </TradingViewProvider>\n </div>\n );\n },\n);\n","import { memo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chartAreasFamily, chartSelectedIndexFamily } from \"../lib/atoms\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport interface TradingViewAreaTitleProps {\n index?: number;\n}\n\n/**\n * Displays the symbol/resolution title for a chart area.\n * Useful when rendering custom headers in multi-chart layouts.\n */\nexport const TradingViewAreaTitle = memo(\n ({ index }: TradingViewAreaTitleProps) => {\n const { prefix } = useTvChartContext();\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const targetIndex = index ?? selectedIndex;\n const area = areas[targetIndex];\n\n if (!area) return null;\n\n return (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {area.tickerSymbol || area.symbol}\n </span>\n <span>{area.resolution}</span>\n </div>\n );\n },\n);\n","import { useTvChartContext } from \"../components/TradingViewProvider\";\n\n/**\n * Returns the ChartManager instance for the current TradingView context.\n */\nexport function useChartManager() {\n return useTvChartContext().chartManager;\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTvChartContext } from \"../components/TradingViewProvider\";\nimport { chartSelectedIndexFamily, chartAreasFamily } from \"../lib/atoms\";\n\n/**\n * Returns the ChartAreaManager for the currently active chart area.\n */\nexport function useActiveAreaManager() {\n const { prefix, chartManager } = useTvChartContext();\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n\n return useMemo(() => {\n if (!areas.length) return null;\n return chartManager.areaByIndex(selectedIndex);\n }, [chartManager, selectedIndex, areas]);\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTvChartContext } from \"../components/TradingViewProvider\";\nimport { chartSelectedIndexFamily, chartAreasFamily } from \"../lib/atoms\";\n\n/**\n * Returns the resolved symbol info for the active chart area.\n */\nexport function useSymbolInfo() {\n const { prefix, chartManager } = useTvChartContext();\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n const activeArea = areas[selectedIndex];\n\n return useMemo(() => {\n if (!activeArea?.tickerSymbol) return null;\n return (\n chartManager.symbolResolver?.getSymbolInfo(activeArea.tickerSymbol) ??\n null\n );\n }, [chartManager, activeArea?.tickerSymbol]);\n}\n","import type {\n Bar,\n GetMarksCallback,\n LibrarySymbolInfo,\n Mark,\n PeriodParams,\n ResolutionString,\n SubscribeBarsCallback,\n SymbolResolveExtension,\n Timezone,\n} from \"./charting-library.types\";\nimport type { ChartManager } from \"./ChartManager\";\nimport type { ChartSettings } from \"./ChartSettings\";\nimport type { ChartWidgetBridge } from \"./ChartWidgetBridge\";\nimport type { ITvChartDataFeedModule, TvChartResolution } from \"./types\";\nimport {\n getTvChartResolutionFrame,\n getTvChartResolutionReverse,\n getTvChartTickTimestamp,\n} from \"./utils\";\n\n/**\n * Raw candle the consumer source returns. `time` may be unix seconds\n * (≤10 digits), milliseconds (>10 digits), or a `Date`.\n * {@link TradingViewDatafeedAdapter} owns unit mapping via\n * {@link getTvChartTickTimestamp}.\n */\nexport interface TradingViewCandle {\n time: number | Date;\n open: number;\n high: number;\n low: number;\n close: number;\n volume?: number;\n}\n\nexport interface TradingViewHistoryRequest {\n symbolInfo: LibrarySymbolInfo;\n resolution: ResolutionString;\n periodParams: PeriodParams;\n}\n\nexport interface TradingViewLiveSubscribeRequest {\n symbolInfo: LibrarySymbolInfo;\n resolution: ResolutionString;\n listenerGuid: string;\n onResetCacheNeededCallback: () => void;\n}\n\n/**\n * Consumer candle backend. The adapter wraps this with timestamp mapping,\n * out-of-order live-bar filtering, and idempotent unsubscribe.\n */\nexport interface CandleSource {\n getHistory(request: TradingViewHistoryRequest): Promise<readonly TradingViewCandle[]>;\n subscribe(\n request: TradingViewLiveSubscribeRequest,\n onCandle: (candle: TradingViewCandle) => void,\n ): void;\n unsubscribe(listenerGuid: string): void;\n}\n\nexport interface TradingViewDatafeedAdapterOptions {\n resolveSymbol?: ITvChartDataFeedModule[\"resolveSymbol\"];\n onReady?: ITvChartDataFeedModule[\"onReady\"];\n onDestroy?: ITvChartDataFeedModule[\"onDestroy\"];\n getMarks?: ITvChartDataFeedModule[\"getMarks\"];\n getFirstBarTime?: ITvChartDataFeedModule[\"getFirstBarTime\"];\n /** Viewport width (px) below which {@link isTvChartMobileViewport} is true. */\n mobileBreakpointPx?: number;\n}\n\ninterface LiveListenerState {\n symbolKey: string;\n lastBarTime: number;\n generation: number;\n}\n\n/** Tailwind `md` — unit-level mobile/resize seam, no widget required. */\nexport const DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX = 768;\n\nexport function isTvChartMobileViewport(\n widthPx: number,\n breakpointPx: number = DEFAULT_TV_CHART_MOBILE_BREAKPOINT_PX,\n): boolean {\n return widthPx > 0 && widthPx < breakpointPx;\n}\n\nfunction getTimeframeMs(resolution: string): number {\n try {\n return getTvChartResolutionFrame(resolution as TvChartResolution);\n } catch {\n return getTvChartResolutionFrame(getTvChartResolutionReverse(resolution));\n }\n}\n\nfunction toNumericTime(time: number | Date): number {\n return time instanceof Date ? time.getTime() : time;\n}\n\nfunction toBar(candle: TradingViewCandle, timeframe: number): Bar {\n const bar: Bar = {\n time: getTvChartTickTimestamp(toNumericTime(candle.time), timeframe),\n open: candle.open,\n high: candle.high,\n low: candle.low,\n close: candle.close,\n };\n if (candle.volume !== undefined) bar.volume = candle.volume;\n return bar;\n}\n\nfunction historyKey(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString): string {\n return `${symbolInfo.ticker ?? symbolInfo.name}:${resolution}`;\n}\n\n/**\n * Consumer-facing TradingView datafeed seam.\n *\n * Implements {@link ITvChartDataFeedModule} so `ChartManager.datafeed` and\n * `ChartDataFeed` stay unchanged. History, live subscribe, and unsubscribe\n * are explicit methods; symbol resolve / onReady / onDestroy are delegated.\n */\nexport class TradingViewDatafeedAdapter implements ITvChartDataFeedModule {\n private readonly source: CandleSource;\n private readonly options: TradingViewDatafeedAdapterOptions;\n private readonly liveListeners = new Map<string, LiveListenerState>();\n private readonly lastHistoryBarTime = new Map<string, number>();\n private liveGeneration = 0;\n\n constructor(source: CandleSource, options: TradingViewDatafeedAdapterOptions = {}) {\n this.source = source;\n this.options = options;\n }\n\n isMobileViewport(widthPx: number): boolean {\n return isTvChartMobileViewport(widthPx, this.options.mobileBreakpointPx);\n }\n\n async onReady(options: {\n setting: ChartSettings;\n chartManager: ChartManager;\n instance: ChartWidgetBridge;\n }): Promise<void> {\n await this.options.onReady?.(options);\n }\n\n onDestroy(): void {\n for (const listenerGuid of [...this.liveListeners.keys()]) {\n this.unsubscribeLiveBars(listenerGuid);\n }\n this.lastHistoryBarTime.clear();\n this.options.onDestroy?.();\n }\n\n async resolveSymbol(\n symbolName: string,\n extension?: SymbolResolveExtension,\n ): Promise<LibrarySymbolInfo | null> {\n return (await this.options.resolveSymbol?.(symbolName, extension)) ?? null;\n }\n\n async getBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n ): Promise<Bar[]> {\n return this.getHistoryBars(symbolInfo, resolution, periodParams);\n }\n\n subscribeBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void {\n this.subscribeLiveBars(\n symbolInfo,\n resolution,\n onTick,\n listenerGuid,\n onResetCacheNeededCallback,\n );\n }\n\n unsubscribeBars(listenerGuid: string): void {\n this.unsubscribeLiveBars(listenerGuid);\n }\n\n getMarks(\n symbolInfo: LibrarySymbolInfo,\n from: number,\n to: number,\n onDataCallback: GetMarksCallback<Mark>,\n resolution: ResolutionString,\n ): void {\n this.options.getMarks?.(symbolInfo, from, to, onDataCallback, resolution);\n }\n\n getFirstBarTime(\n symbolInfo: LibrarySymbolInfo,\n resolution: string,\n options: { timezone: Timezone },\n ): Promise<void> {\n return this.options.getFirstBarTime?.(symbolInfo, resolution, options) ?? Promise.resolve();\n }\n\n /**\n * Fetch history candles, map timestamps, and return `[]` when the source\n * has no data. {@link ChartDataFeed} maps `[]` to `{ noData: true }`.\n */\n async getHistoryBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n periodParams: PeriodParams,\n ): Promise<Bar[]> {\n const candles = await this.source.getHistory({\n symbolInfo,\n resolution,\n periodParams,\n });\n const timeframe = getTimeframeMs(resolution);\n const bars = (candles ?? []).map((candle) => toBar(candle, timeframe));\n if (bars.length > 0) {\n const key = historyKey(symbolInfo, resolution);\n const next = Math.max(...bars.map((bar) => bar.time));\n const prev = this.lastHistoryBarTime.get(key) ?? 0;\n if (next > prev) this.lastHistoryBarTime.set(key, next);\n }\n return bars;\n }\n\n /**\n * Subscribe to live candles. Out-of-order ticks (`time < last bar time`)\n * are dropped. Re-subscribing the same guid unsubscribes the previous\n * source listener first.\n */\n subscribeLiveBars(\n symbolInfo: LibrarySymbolInfo,\n resolution: ResolutionString,\n onTick: SubscribeBarsCallback,\n listenerGuid: string,\n onResetCacheNeededCallback: () => void,\n ): void {\n this.unsubscribeLiveBars(listenerGuid);\n\n const symbolKey = historyKey(symbolInfo, resolution);\n const timeframe = getTimeframeMs(resolution);\n const generation = ++this.liveGeneration;\n this.liveListeners.set(listenerGuid, {\n symbolKey,\n lastBarTime: this.lastHistoryBarTime.get(symbolKey) ?? 0,\n generation,\n });\n\n this.source.subscribe(\n {\n symbolInfo,\n resolution,\n listenerGuid,\n onResetCacheNeededCallback,\n },\n (candle) => {\n const state = this.liveListeners.get(listenerGuid);\n if (!state || state.generation !== generation) return;\n const bar = toBar(candle, timeframe);\n const last = Math.max(\n state.lastBarTime,\n this.lastHistoryBarTime.get(state.symbolKey) ?? 0,\n );\n if (bar.time < last) return;\n state.lastBarTime = bar.time;\n onTick(bar);\n },\n );\n }\n\n /**\n * Unsubscribe a live listener. The source is called at most once per guid;\n * a second call is a no-op (Map delete).\n */\n unsubscribeLiveBars(listenerGuid: string): void {\n if (!this.liveListeners.has(listenerGuid)) return;\n this.liveListeners.delete(listenerGuid);\n this.source.unsubscribe(listenerGuid);\n }\n}\n"]}
|