@liberfi.io/ui-tradingview 0.1.237 → 0.1.239

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.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/TradingViewToolbarIcons.tsx","../src/components/TradingViewFullscreen.tsx","../src/components/TradingViewKlineStyleSelect.tsx","../src/components/TradingViewToolbarProvider.tsx","../src/components/TradingViewMultiChartSelect.tsx","../src/components/TradingViewOpenIndicator.tsx","../src/components/TradingViewOpenSettings.tsx","../src/components/TradingViewPriceTypeSwitch.tsx","../src/components/TradingViewQuoteTypeSwitch.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","previousResolution","ChartManager","v","idx","areaStates","stored","pr","r","ac","area","initialResolution","initialChartStyle","save","debounce","data","a","loading","locale","timezone","focused","show","widget","theme","colors","reverseColor","target","prevCount","activeResolution","activeChartStyle","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","cached","pending","request","symbols","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","SnapshotIcon","props","jsxs","FullscreenIcon","RestoreScreenIcon","ChartSettingsIcon","DownloadIcon","CopyIcon","TradingViewFullscreen","memo","t","useTranslation","fullscreen","useAtomValue","handleToggle","useCallback","STYLE_OPTIONS","TRADING_VIEW_DROPDOWN_STYLE","TRADING_VIEW_DROPDOWN_ITEM_CLASS","KlineStyleIcon","hollow","bars","TradingViewKlineStyleSelect","open","setOpen","wrapperRef","useRef","currentStyle","handleSelect","style","handlePointerDown","event","handleKeyDown","labelKey","active","TvChartToolbarContext","useTvChartToolbarContext","TradingViewToolbarProvider","activeAreaManager","symbolInfo","activeTickerSymbol","NEXT_LAYOUT_BY_CHART_COUNT","TradingViewMultiChartSelect","onSelectSymbol","selecting","setSelecting","handleAddChart","chartCount","nextLayout","selectedSymbol","currentCount","currentNextLayout","disabled","TradingViewOpenIndicator","handleClick","TradingViewOpenSettings","TradingViewPriceTypeSwitch","className","activePriceType","areaSymbol","TradingViewQuoteTypeSwitch","nativeQuote","activeQuote","TradingViewResolutions","currentResolution","TradingViewSnapshot","handleDownload","canvas","link","handleCopy","blob","resolve","TradingViewToolbar","prefixSlot","suffix","showResolutions","showKlineStyleSelect","showOpenIndicator","showOpenSettings","showFullscreen","showSnapshot","showMultiChartSelect","showPriceTypeSwitch","showQuoteTypeSwitch","onSelectMultiChartSymbol","ChartWidget","bridge","prevSymbol","done","prevResolution","chart","precision","offset","spacing","ChartLibraryWidget","tvTheme","EventEmitter","listener","fn","ChartDataFeed","symbolName","onResolve","onError","extension","periodParams","onResult","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","pane","symbolSub","intervalSub","onSymbolChanged","onIntervalChanged","interval","iframe","doc","seen","register","el","evt","count","handler","backgroundColor","increaseColor","decreaseColor","cardColor","fallback","probe","resolved","Ctor","REDUCED_LAYOUT_BY_CHART_COUNT","InjectedAreaTitle","onClose","closeRef","label","closeElement","stopChartInteraction","handleClose","TradingViewLayout","ready","rootsRef","closeChart","remainingSymbols","areaIndex","syncRoots","entry","mainDiv","element","createRoot","handleLayoutChanged","entries","TradingViewWidgetContainer","onReady","onReadyRef","setWidget","containerElement","setContainerElement","setReady","libWidget","TradingViewWidgetProvider","renderId","useLayoutEffect","handleReady","TradingViewInner","toolbar","loadingOverlay","previousOverflow","TradingView","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 IframeLoadingCompatibilityMode = \"iframe_loading_compatibility_mode\",\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.applyChartStyle();\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 const previousResolution = this.resolution;\n if (previousResolution === resolution) return;\n this.setState(\"resolution\", resolution);\n this.setState(\"dataReady\", false);\n this.pendingResolution = resolution;\n\n try {\n await this.internalChartWidget?.handleResolutionChange(\n resolution,\n previousResolution,\n );\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 this.applyChartStyle();\n\n if (this.selected) {\n this.internalChartWidget.setBarSpacing(this.barSpacing);\n }\n }\n\n private applyChartStyle(): void {\n try {\n this.internalChartWidget?.setChartStyle(this.chartStyle);\n } catch {\n // A newly added TradingView pane can be addressable one tick after layout change.\n // Its persisted style is applied again by handleChartReady.\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 type { SeriesType } from \"./charting-library.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 const initialResolution = this.activeArea?.resolution;\n if (initialResolution) await this.setResolution(initialResolution);\n const initialChartStyle = this.activeArea?.chartStyle;\n if (initialChartStyle != null) this.setChartStyle(initialChartStyle);\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 const prevCount = this.chartCount;\n const activeResolution = this.activeArea?.resolution;\n const activeChartStyle = this.activeArea?.chartStyle;\n this.settings.updateValue(\"layout\", target);\n this.updateChartContents();\n if (activeResolution) void this.setResolution(activeResolution);\n if (activeChartStyle != null) this.setChartStyle(activeChartStyle);\n this.internalWidget?.onLayoutChange?.(target);\n\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 async setResolution(resolution: TvChartResolution): Promise<void> {\n await Promise.all(\n this.getAllCharts().map((area) => area.setResolution(resolution)),\n );\n }\n\n setChartStyle(chartStyle: SeriesType): void {\n this.getAllCharts().forEach((area) => area.setChartStyle(chartStyle));\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 const cached = this.cache.get(symbol);\n if (cached) return cached;\n\n const pending = this.pendingRequests.get(symbol);\n if (pending) return pending;\n\n const request = this.datafeed\n .resolveSymbol(symbol)\n .then((info) => {\n if (info) this.cache.set(symbol, info);\n return info;\n })\n .finally(() => this.pendingRequests.delete(symbol));\n this.pendingRequests.set(symbol, request);\n return request;\n }\n\n async resolveSymbolInfos(symbols: string[]): Promise<LibrarySymbolInfo[]> {\n const resolved = await Promise.all(\n symbols.map((symbol) => this.resolveSymbolInfo(symbol)),\n );\n return resolved.filter(\n (info): info is LibrarySymbolInfo => info !== null,\n );\n }\n\n getSymbolInfo(symbol: string): LibrarySymbolInfo | null {\n void 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 type { SVGProps } from \"react\";\n\nexport function SnapshotIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.86509 3.91271C7.23373 3.34358 7.86564 3 8.54372 3H11.4563C12.1344 3 12.7663 3.34358 13.1349 3.91271L13.7312 4.83333H16C17.1046 4.83333 18 5.72876 18 6.83333V14C18 15.1046 17.1046 16 16 16H4C2.89543 16 2 15.1046 2 14V6.83333C2 5.72877 2.89543 4.83333 4 4.83333L6.26878 4.83333L6.86509 3.91271ZM7.70441 4.45635C7.88873 4.17179 8.20468 4 8.54372 4H11.4563C11.7953 4 12.1113 4.17179 12.2956 4.45635L12.8919 5.37698C13.0762 5.66154 13.3922 5.83333 13.7312 5.83333H16C16.5523 5.83333 17 6.28105 17 6.83333V14C17 14.5523 16.5523 15 16 15H4C3.44772 15 3 14.5523 3 14V6.83333C3 6.28105 3.44772 5.83333 4 5.83333H6.26878C6.60782 5.83333 6.92377 5.66154 7.10809 5.37698L7.70441 4.45635Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13 10C13 11.6569 11.6569 13 10 13C8.34315 13 7 11.6569 7 10C7 8.34315 8.34315 7 10 7C11.6569 7 13 8.34315 13 10ZM10 12C11.1046 12 12 11.1046 12 10C12 8.89543 11.1046 8 10 8C8.89543 8 8 8.89543 8 10C8 11.1046 8.89543 12 10 12Z\"\n />\n </svg>\n );\n}\n\nexport function FullscreenIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n data-icon=\"fullscreen\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.5 4C16.5 3.72386 16.2761 3.5 16 3.5H10.6154C10.3392 3.5 10.1154 3.72386 10.1154 4 10.1154 4.27614 10.3392 4.5 10.6154 4.5H14.7929L10.6464 8.64645C10.4512 8.84171 10.4512 9.15829 10.6464 9.35355 10.8417 9.54882 11.1583 9.54882 11.3536 9.35355L15.5 5.20711V9.38462C15.5 9.66076 15.7239 9.88462 16 9.88462 16.2761 9.88462 16.5 9.66076 16.5 9.38462V4ZM3.5 16C3.5 16.2761 3.72386 16.5 4 16.5H9.38462C9.66076 16.5 9.88462 16.2761 9.88462 16 9.88462 15.7239 9.66076 15.5 9.38462 15.5H5.20711L9.35355 11.3536C9.54882 11.1583 9.54882 10.8417 9.35355 10.6464 9.15829 10.4512 8.84171 10.4512 8.64645 10.6464L4.5 14.7929V10.6154C4.5 10.3392 4.27614 10.1154 4 10.1154 3.72386 10.1154 3.5 10.3392 3.5 10.6154V16Z\"\n />\n </svg>\n );\n}\n\nexport function RestoreScreenIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n data-icon=\"restore-screen\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.1154 9.38461C10.1154 9.66076 10.3392 9.88461 10.6154 9.88461L16 9.88461C16.2761 9.88461 16.5 9.66076 16.5 9.38461 16.5 9.10847 16.2761 8.88461 16 8.88461L11.8225 8.88461 15.9689 4.73817C16.1642 4.54291 16.1642 4.22632 15.9689 4.03106 15.7737 3.8358 15.4571 3.8358 15.2618 4.03106L11.1154 8.17751 11.1154 4C11.1154 3.72385 10.8915 3.5 10.6154 3.5 10.3392 3.5 10.1154 3.72385 10.1154 4L10.1154 9.38461ZM9.88464 10.6154C9.88464 10.3392 9.66079 10.1154 9.38464 10.1154L4.00003 10.1154C3.72389 10.1154 3.50003 10.3392 3.50003 10.6154 3.50003 10.8915 3.72388 11.1154 4.00003 11.1154L8.17754 11.1154 4.03109 15.2618C3.83583 15.4571 3.83583 15.7737 4.03109 15.9689 4.22635 16.1642 4.54293 16.1642 4.7382 15.9689L8.88464 11.8225 8.88464 16C8.88464 16.2761 9.1085 16.5 9.38464 16.5 9.66079 16.5 9.88464 16.2761 9.88464 16L9.88464 10.6154Z\"\n />\n </svg>\n );\n}\n\nexport function ChartSettingsIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11 2.42264L16.0622 5.34529C16.681 5.70256 17.0622 6.36281 17.0622 7.07734V12.9226C17.0622 13.6372 16.681 14.2974 16.0622 14.6547L11 17.5773C10.3812 17.9346 9.6188 17.9346 9 17.5773L3.93782 14.6547C3.31902 14.2974 2.93782 13.6372 2.93782 12.9226V7.07734C2.93782 6.36281 3.31902 5.70256 3.93782 5.34529L9 2.42264C9.6188 2.06538 10.3812 2.06538 11 2.42264ZM10.5 3.28867C10.1906 3.11004 9.8094 3.11004 9.5 3.28867L4.43782 6.21132C4.12842 6.38995 3.93782 6.72008 3.93782 7.07734V12.9226C3.93782 13.2799 4.12842 13.61 4.43782 13.7887L9.5 16.7113C9.8094 16.89 10.1906 16.89 10.5 16.7113L15.5622 13.7887C15.8716 13.61 16.0622 13.2799 16.0622 12.9226V7.07734C16.0622 6.72008 15.8716 6.38995 15.5622 6.21132L10.5 3.28867Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13 10C13 11.6569 11.6569 13 10 13C8.34315 13 7 11.6569 7 10C7 8.34315 8.34315 7 10 7C11.6569 7 13 8.34315 13 10ZM10 12C11.1046 12 12 11.1046 12 10C12 8.89543 11.1046 8 10 8C8.89543 8 8 8.89543 8 10C8 11.1046 8.89543 12 10 12Z\"\n />\n </svg>\n );\n}\n\nexport function DownloadIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M10 2.5v10m0 0 3.5-3.5M10 12.5 6.5 9M3 13.5v2A1.5 1.5 0 0 0 4.5 17h11a1.5 1.5 0 0 0 1.5-1.5v-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function CopyIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n {...props}\n >\n <rect\n x=\"6.5\"\n y=\"6.5\"\n width=\"10\"\n height=\"10\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M13.5 6.5v-2A1.5 1.5 0 0 0 12 3H4.5A1.5 1.5 0 0 0 3 4.5V12A1.5 1.5 0 0 0 4.5 13.5h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\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\";\nimport { FullscreenIcon, RestoreScreenIcon } from \"./TradingViewToolbarIcons\";\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 aria-label={\n fullscreen\n ? t(\"tradingView.exitFullscreen\" as never)\n : t(\"tradingView.fullscreen\" as never)\n }\n className=\"inline-flex h-6 w-6 cursor-pointer items-center justify-center bg-transparent p-0 text-text-muted transition-colors hover:text-text-primary\"\n title={\n fullscreen\n ? t(\"tradingView.exitFullscreen\" as never)\n : t(\"tradingView.fullscreen\" as never)\n }\n >\n {fullscreen ? <RestoreScreenIcon /> : <FullscreenIcon />}\n </button>\n );\n});\n","import {\n memo,\n useCallback,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type SVGProps,\n} 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\";\n\nconst STYLE_OPTIONS = [\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 [TvChartKlineStyle.HiLo, \"tradingView.style.highLow\"],\n [TvChartKlineStyle.Column, \"tradingView.style.columns\"],\n] as const;\n\nexport const TRADING_VIEW_DROPDOWN_STYLE: CSSProperties = {\n width: 256,\n borderRadius: 14,\n border: \"1px solid var(--color-border-control)\",\n background: \"var(--color-surface-interactive)\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.5)\",\n};\n\nexport const TRADING_VIEW_DROPDOWN_ITEM_CLASS =\n \"flex w-full cursor-pointer items-center gap-2.5 rounded-[10px] px-3 py-2 text-sm transition-all\";\n\nfunction KlineStyleIcon({\n chartStyle,\n ...props\n}: SVGProps<SVGSVGElement> & { chartStyle: TvChartKlineStyle }) {\n if (\n chartStyle === TvChartKlineStyle.Line ||\n chartStyle === TvChartKlineStyle.Area ||\n chartStyle === TvChartKlineStyle.Baseline\n ) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" {...props}>\n <path\n d=\"M2.5 14.5 7 9.5l3.5 2.5L15 5.5h2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {chartStyle !== TvChartKlineStyle.Line && (\n <path\n d=\"M2.5 14.5 7 9.5l3.5 2.5L15 5.5h2.5V17h-15Z\"\n fill=\"currentColor\"\n opacity={chartStyle === TvChartKlineStyle.Area ? 0.25 : 0.12}\n />\n )}\n {chartStyle === TvChartKlineStyle.Baseline && (\n <path d=\"M2 12h16\" stroke=\"currentColor\" strokeDasharray=\"2 2\" />\n )}\n </svg>\n );\n }\n\n if (chartStyle === TvChartKlineStyle.Column) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" {...props}>\n <rect\n x=\"2.5\"\n y=\"8\"\n width=\"4\"\n height=\"9\"\n rx=\".5\"\n stroke=\"currentColor\"\n />\n <rect x=\"8\" y=\"3\" width=\"4\" height=\"14\" rx=\".5\" stroke=\"currentColor\" />\n <rect\n x=\"13.5\"\n y=\"11\"\n width=\"4\"\n height=\"6\"\n rx=\".5\"\n stroke=\"currentColor\"\n />\n </svg>\n );\n }\n\n const hollow =\n chartStyle === TvChartKlineStyle.HollowCandles ||\n chartStyle === TvChartKlineStyle.HiLo;\n const bars = chartStyle === TvChartKlineStyle.Bars;\n\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" {...props}>\n <path d=\"M6 2.5v15M14 4v12\" stroke=\"currentColor\" />\n {bars ? (\n <>\n <path d=\"M3 7h3M6 13h3M11 8h3M14 12h3\" stroke=\"currentColor\" />\n </>\n ) : (\n <>\n <rect\n x=\"3.5\"\n y={chartStyle === TvChartKlineStyle.HeikenAshi ? \"6.5\" : \"5\"}\n width=\"5\"\n height={chartStyle === TvChartKlineStyle.HeikenAshi ? \"8\" : \"10\"}\n rx=\".5\"\n fill={hollow ? \"none\" : \"currentColor\"}\n stroke=\"currentColor\"\n />\n <rect\n x=\"11.5\"\n y={chartStyle === TvChartKlineStyle.HeikenAshi ? \"5\" : \"7\"}\n width=\"5\"\n height={chartStyle === TvChartKlineStyle.HeikenAshi ? \"7\" : \"6\"}\n rx=\".5\"\n fill=\"none\"\n stroke=\"currentColor\"\n />\n </>\n )}\n </svg>\n );\n}\n\nexport const TradingViewKlineStyleSelect = memo(() => {\n const { t } = useTranslation();\n const { prefix, chartManager } = useTvChartContext();\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const currentStyle =\n areas[selectedIndex]?.chartStyle ?? TvChartKlineStyle.Candles;\n\n const handleSelect = useCallback(\n (style: TvChartKlineStyle) => {\n setOpen(false);\n chartManager.setChartStyle(style);\n },\n [chartManager],\n );\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: MouseEvent) => {\n if (!wrapperRef.current?.contains(event.target as Node)) setOpen(false);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={wrapperRef} className=\"relative inline-flex\">\n <button\n type=\"button\"\n aria-label={t(\"tradingView.klineStyle\" as never)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"inline-flex h-6 min-h-0 min-w-0 cursor-pointer items-center bg-transparent p-0 text-foreground transition-opacity hover:opacity-80\"\n title={t(\"tradingView.klineStyle\" as never)}\n >\n <KlineStyleIcon chartStyle={currentStyle} width={20} height={20} />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label={t(\"tradingView.klineStyle\" as never)}\n className=\"absolute left-0 top-full z-50 mt-2 w-64 overflow-hidden\"\n style={TRADING_VIEW_DROPDOWN_STYLE}\n >\n <div className=\"p-1\">\n {STYLE_OPTIONS.map(([style, labelKey]) => {\n const active = currentStyle === style;\n return (\n <button\n key={style}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n data-active={active}\n data-style={style}\n onMouseDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleSelect(style);\n }}\n className={[\n TRADING_VIEW_DROPDOWN_ITEM_CLASS,\n active\n ? \"bg-action-primary/[0.08] text-brand-primary\"\n : \"text-text-secondary hover:bg-surface-strong/50 hover:text-text-primary\",\n ].join(\" \")}\n >\n <KlineStyleIcon chartStyle={style} width={20} height={20} />\n <span className=\"flex-1 text-left\">\n {t(labelKey as never)}\n </span>\n {active && (\n <svg\n viewBox=\"0 0 24 24\"\n width={16}\n height={16}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"flex-shrink-0\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\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 activeTickerSymbol: string;\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 activeTickerSymbol = areas[selectedIndex]?.tickerSymbol ?? \"\";\n\n const value = useMemo<TvChartToolbarContextValue>(\n () => ({ activeAreaManager, activeTickerSymbol, symbolInfo }),\n [activeAreaManager, activeTickerSymbol, symbolInfo],\n );\n\n return (\n <TvChartToolbarContext.Provider value={value}>\n {children}\n </TvChartToolbarContext.Provider>\n );\n};\n","import { memo, useCallback, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { TvChartLayout } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nconst NEXT_LAYOUT_BY_CHART_COUNT: Partial<Record<number, TvChartLayout>> = {\n 1: TvChartLayout.Layout2A,\n 2: TvChartLayout.Layout3E,\n 3: TvChartLayout.Layout4A,\n 4: TvChartLayout.Layout5C,\n 5: TvChartLayout.Layout6A,\n 6: TvChartLayout.Layout7A,\n 7: TvChartLayout.Layout8A,\n};\n\nexport interface TradingViewMultiChartSelectProps {\n /** Opens the consumer token picker and returns its chart symbol. */\n onSelectSymbol?: (\n activeTickerSymbol: string,\n ) => Promise<string | null | undefined>;\n}\n\n/** Adds a selected token as a chart and chooses its layout automatically. */\nexport const TradingViewMultiChartSelect = memo(\n ({ onSelectSymbol }: TradingViewMultiChartSelectProps) => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const { activeTickerSymbol } = useTvChartToolbarContext();\n const [selecting, setSelecting] = useState(false);\n\n const handleAddChart = useCallback(async () => {\n const chartCount = chartManager.chartCount;\n const nextLayout = NEXT_LAYOUT_BY_CHART_COUNT[chartCount];\n if (!onSelectSymbol || !nextLayout || selecting) return;\n\n setSelecting(true);\n try {\n const selectedSymbol = await onSelectSymbol(activeTickerSymbol);\n if (!selectedSymbol) return;\n\n const currentCount = chartManager.chartCount;\n const currentNextLayout = NEXT_LAYOUT_BY_CHART_COUNT[currentCount];\n if (!currentNextLayout) return;\n\n chartManager.setLayout(currentNextLayout);\n await chartManager.areaByIndex(currentCount)?.setSymbol(selectedSymbol);\n } finally {\n setSelecting(false);\n }\n }, [activeTickerSymbol, chartManager, onSelectSymbol, selecting]);\n\n const disabled =\n !onSelectSymbol ||\n selecting ||\n chartManager.chartCount === 0 ||\n chartManager.chartCount >= 8;\n\n return (\n <button\n type=\"button\"\n data-testid=\"multi-chart\"\n disabled={disabled}\n onClick={() => void handleAddChart()}\n className=\"inline-flex h-6 min-h-0 min-w-0 cursor-pointer items-center gap-1 bg-transparent p-0 text-xs text-foreground transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-40\"\n title={t(\"tradingView.multiCharts\" as never)}\n >\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M17.3846 2C17.5478 2 17.7044 2.06483 17.8198 2.18024C17.9352 2.29565 18 2.45217 18 2.61538V17.3846C18 17.5478 17.9352 17.7044 17.8198 17.8198C17.7044 17.9352 17.5478 18 17.3846 18H2.61538C2.45217 18 2.29565 17.9352 2.18024 17.8198C2.06483 17.7044 2 17.5478 2 17.3846V2.61538C2 2.45217 2.06483 2.29565 2.18024 2.18024C2.29565 2.06483 2.45217 2 2.61538 2H17.3846ZM9.58954 3.23077H3.23077V16.7692H9.58974L9.58954 3.23077ZM16.7692 3.23077H10.4101L10.4103 16.7692H16.7692V10.4103H10.4103V9.58974H16.7692V3.23077Z\"\n fill=\"currentColor\"\n />\n </svg>\n <span>{t(\"tradingView.multiCharts\" as never)}</span>\n </button>\n );\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 aria-label={t(\"tradingView.indicators\" as never)}\n className=\"inline-flex h-6 min-h-0 min-w-0 cursor-pointer items-center bg-transparent p-0 text-foreground transition-opacity hover:opacity-80\"\n title={t(\"tradingView.indicators\" as never)}\n >\n <svg\n aria-hidden=\"true\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.5 5.5C7.5 4.11929 8.61929 3 10 3C11.3807 3 12.5 4.11929 12.5 5.5V5.82143C12.5 6.09757 12.2761 6.32143 12 6.32143C11.7239 6.32143 11.5 6.09757 11.5 5.82143V5.5C11.5 4.67157 10.8284 4 10 4C9.17157 4 8.5 4.67157 8.5 5.5V8H11C11.2761 8 11.5 8.22386 11.5 8.5C11.5 8.77614 11.2761 9 11 9H8.5V14.4999C8.5 15.8806 7.38071 16.9999 6 16.9999C4.61929 16.9999 3.5 15.8806 3.5 14.4999C3.5 14.2237 3.72386 13.9999 4 13.9999C4.27614 13.9999 4.5 14.2237 4.5 14.4999C4.5 15.3283 5.17157 15.9999 6 15.9999C6.82843 15.9999 7.5 15.3283 7.5 14.4999V9H5C4.72386 9 4.5 8.77614 4.5 8.5C4.5 8.22386 4.72386 8 5 8H7.5V5.5ZM14.2071 14.5001L15.8536 16.1465C16.0488 16.3418 16.0488 16.6584 15.8536 16.8536C15.6583 17.0489 15.3417 17.0489 15.1464 16.8536L13.5 15.2072L11.8536 16.8536C11.6583 17.0489 11.3417 17.0489 11.1464 16.8536C10.9512 16.6584 10.9512 16.3418 11.1464 16.1465L12.7929 14.5001L11.1464 12.8536C10.9512 12.6584 10.9512 12.3418 11.1464 12.1465C11.3417 11.9513 11.6583 11.9513 11.8536 12.1465L13.5 13.793L15.1464 12.1465C15.3417 11.9513 15.6583 11.9513 15.8536 12.1465C16.0488 12.3418 16.0488 12.6584 15.8536 12.8536L14.2071 14.5001Z\"\n />\n </svg>\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { ChartSettingsIcon } from \"./TradingViewToolbarIcons\";\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 aria-label={t(\"tradingView.chartSettings\" as never)}\n className=\"inline-flex h-6 w-6 cursor-pointer items-center justify-center bg-transparent p-0 text-text-muted transition-colors hover:text-text-primary\"\n title={t(\"tradingView.chartSettings\" as never)}\n >\n <ChartSettingsIcon />\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { TvChartPriceType, TvChartQuoteType } from \"../lib/types\";\nimport { parseSymbol, stringifySymbol } from \"../lib/utils\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nexport interface TradingViewPriceTypeSwitchProps {\n className?: string;\n}\n\nexport const TradingViewPriceTypeSwitch = memo(\n ({ className }: TradingViewPriceTypeSwitchProps) => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const { activeTickerSymbol } = useTvChartToolbarContext();\n const symbol = parseSymbol(activeTickerSymbol);\n const activePriceType = symbol.priceType ?? TvChartPriceType.Price;\n\n const handleToggle = useCallback(() => {\n if (!symbol.chain || !symbol.address) return;\n const priceType =\n activePriceType === TvChartPriceType.Price\n ? TvChartPriceType.MarketCap\n : TvChartPriceType.Price;\n\n void Promise.all(\n chartManager.getAllCharts().map((area) => {\n const areaSymbol = parseSymbol(area.tickerSymbol);\n if (!areaSymbol.chain || !areaSymbol.address)\n return Promise.resolve();\n return area.setSymbol(\n stringifySymbol({\n ...areaSymbol,\n quote: areaSymbol.quote ?? TvChartQuoteType.USD,\n priceType,\n }),\n );\n }),\n );\n }, [activePriceType, chartManager, symbol]);\n\n if (!activeTickerSymbol) return null;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n data-testid=\"price-type\"\n onClick={handleToggle}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleToggle();\n }\n }}\n className={`cursor-pointer items-center gap-0.5 text-xs ${className ?? \"flex\"}`}\n aria-label={t(\"tradingView.priceType\" as never)}\n >\n <span\n className={\n activePriceType === TvChartPriceType.Price\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {t(\"tradingView.price\" as never)}\n </span>\n <span className=\"text-text-disabled\" aria-hidden=\"true\">\n /\n </span>\n <span\n className={\n activePriceType === TvChartPriceType.MarketCap\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {t(\"tradingView.marketCap\" as never)}\n </span>\n </div>\n );\n },\n);\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { TvChartPriceType, TvChartQuoteType } from \"../lib/types\";\nimport { parseSymbol, stringifySymbol } from \"../lib/utils\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nexport interface TradingViewQuoteTypeSwitchProps {\n nativeQuote: TvChartQuoteType;\n className?: string;\n}\n\nexport const TradingViewQuoteTypeSwitch = memo(\n ({ nativeQuote, className }: TradingViewQuoteTypeSwitchProps) => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const { activeTickerSymbol } = useTvChartToolbarContext();\n const symbol = parseSymbol(activeTickerSymbol);\n const activeQuote = symbol.quote ?? TvChartQuoteType.USD;\n\n const handleToggle = useCallback(() => {\n if (!symbol.chain || !symbol.address) return;\n const quote =\n activeQuote === TvChartQuoteType.USD\n ? nativeQuote\n : TvChartQuoteType.USD;\n\n void Promise.all(\n chartManager.getAllCharts().map((area) => {\n const areaSymbol = parseSymbol(area.tickerSymbol);\n if (!areaSymbol.chain || !areaSymbol.address)\n return Promise.resolve();\n return area.setSymbol(\n stringifySymbol({\n ...areaSymbol,\n quote,\n priceType: areaSymbol.priceType ?? TvChartPriceType.Price,\n }),\n );\n }),\n );\n }, [activeQuote, chartManager, nativeQuote, symbol]);\n\n if (!activeTickerSymbol) return null;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n data-testid=\"quote-type\"\n onClick={handleToggle}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleToggle();\n }\n }}\n className={`cursor-pointer items-center gap-0.5 text-xs ${className ?? \"flex\"}`}\n aria-label={t(\"tradingView.quoteType\" as never)}\n >\n <span\n className={\n activeQuote === TvChartQuoteType.USD\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {TvChartQuoteType.USD}\n </span>\n <span className=\"text-text-disabled\" aria-hidden=\"true\">\n /\n </span>\n <span\n className={\n activeQuote !== TvChartQuoteType.USD\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {nativeQuote}\n </span>\n </div>\n );\n },\n);\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n chartPinnedResolutionsFamily,\n chartAreasFamily,\n chartSelectedIndexFamily,\n} from \"../lib/atoms\";\nimport type { TvChartResolution } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewResolutions = memo(() => {\n const { t } = useTranslation();\n const { prefix, chartManager } = useTvChartContext();\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 chartManager.setResolution(resolution);\n },\n [chartManager],\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 {t(`common.resolution.${r}`)}\n </button>\n ))}\n </div>\n );\n});\n","import { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n TRADING_VIEW_DROPDOWN_ITEM_CLASS,\n TRADING_VIEW_DROPDOWN_STYLE,\n} from \"./TradingViewKlineStyleSelect\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport {\n CopyIcon,\n DownloadIcon,\n SnapshotIcon,\n} from \"./TradingViewToolbarIcons\";\n\nexport const TradingViewSnapshot = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const handleDownload = useCallback(async () => {\n setOpen(false);\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 document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (e) {\n console.error(\"TradingViewSnapshot\", e);\n }\n }, [chartManager]);\n\n const handleCopy = useCallback(async () => {\n setOpen(false);\n try {\n const canvas = await chartManager.internalWidget?.takeClientScreenshot();\n if (!canvas) return;\n const blob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, \"image/png\"),\n );\n if (!blob || !navigator.clipboard?.write || !globalThis.ClipboardItem) {\n throw new Error(\"Image clipboard API is not available\");\n }\n await navigator.clipboard.write([\n new ClipboardItem({ \"image/png\": blob }),\n ]);\n } catch (e) {\n console.error(\"TradingViewSnapshot\", e);\n }\n }, [chartManager]);\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: MouseEvent) => {\n if (!wrapperRef.current?.contains(event.target as Node)) setOpen(false);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={wrapperRef} className=\"relative inline-flex\">\n <button\n type=\"button\"\n onClick={() => setOpen((value) => !value)}\n aria-label={t(\"tradingView.takeSnapshot\" as never)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className=\"inline-flex h-6 w-6 cursor-pointer items-center justify-center bg-transparent p-0 text-text-muted transition-colors hover:text-text-primary\"\n title={t(\"tradingView.takeSnapshot\" as never)}\n >\n <SnapshotIcon />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label={t(\"tradingView.snapshot\" as never)}\n className=\"absolute right-0 top-full z-50 mt-2 w-64 overflow-hidden p-1\"\n style={TRADING_VIEW_DROPDOWN_STYLE}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={handleDownload}\n className={`${TRADING_VIEW_DROPDOWN_ITEM_CLASS} text-text-secondary hover:bg-surface-strong/50 hover:text-text-primary`}\n >\n <DownloadIcon />\n <span>{t(\"tradingView.downloadSnapshot\" as never)}</span>\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={handleCopy}\n className={`${TRADING_VIEW_DROPDOWN_ITEM_CLASS} text-text-secondary hover:bg-surface-strong/50 hover:text-text-primary`}\n >\n <CopyIcon />\n <span>{t(\"tradingView.copySnapshot\" as never)}</span>\n </button>\n </div>\n )}\n </div>\n );\n});\n","import { memo, type ReactNode } from \"react\";\nimport type { TvChartQuoteType } from \"../lib/types\";\nimport { TradingViewFullscreen } from \"./TradingViewFullscreen\";\nimport { TradingViewKlineStyleSelect } from \"./TradingViewKlineStyleSelect\";\nimport { TradingViewMultiChartSelect } from \"./TradingViewMultiChartSelect\";\nimport { TradingViewOpenIndicator } from \"./TradingViewOpenIndicator\";\nimport { TradingViewOpenSettings } from \"./TradingViewOpenSettings\";\nimport { TradingViewPriceTypeSwitch } from \"./TradingViewPriceTypeSwitch\";\nimport { TradingViewQuoteTypeSwitch } from \"./TradingViewQuoteTypeSwitch\";\nimport { TradingViewResolutions } from \"./TradingViewResolutions\";\nimport { TradingViewSnapshot } from \"./TradingViewSnapshot\";\nimport { TradingViewToolbarProvider } from \"./TradingViewToolbarProvider\";\n\nexport type TradingViewMultiChartSymbolSelector = (\n activeTickerSymbol: string,\n) => Promise<string | null | undefined>;\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 /** Show/hide multi-chart layout selector (default: false) */\n showMultiChartSelect?: boolean;\n /** Show/hide price/market-cap switch (default: false) */\n showPriceTypeSwitch?: boolean;\n /** Show/hide USD/native quote switch (default: false) */\n showQuoteTypeSwitch?: boolean;\n /** Native quote displayed by the quote switch */\n nativeQuote?: TvChartQuoteType;\n /** Opens the consumer token picker and returns the selected chart symbol */\n onSelectMultiChartSymbol?: TradingViewMultiChartSymbolSelector;\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 showMultiChartSelect = false,\n showPriceTypeSwitch = false,\n showQuoteTypeSwitch = false,\n nativeQuote,\n onSelectMultiChartSymbol,\n }: TradingViewToolbarProps) => {\n return (\n <TradingViewToolbarProvider>\n <div className=\"flex h-9 w-full flex-none items-center border-b border-border px-4\">\n {prefixSlot}\n {children ?? (\n <>\n <div className=\"flex min-w-0 flex-1 items-center justify-start gap-2.5\">\n {showResolutions && <TradingViewResolutions />}\n {showMultiChartSelect && (\n <>\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n <TradingViewMultiChartSelect\n onSelectSymbol={onSelectMultiChartSymbol}\n />\n </>\n )}\n {(showKlineStyleSelect || showOpenIndicator) && (\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n )}\n {showKlineStyleSelect && (\n <div className=\"hidden sm:block\">\n <TradingViewKlineStyleSelect />\n </div>\n )}\n {showOpenIndicator && (\n <div className=\"hidden sm:block\">\n <TradingViewOpenIndicator />\n </div>\n )}\n {showPriceTypeSwitch && (\n <>\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n <TradingViewPriceTypeSwitch className=\"hidden sm:flex\" />\n </>\n )}\n {showQuoteTypeSwitch && nativeQuote && (\n <>\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n <TradingViewQuoteTypeSwitch\n nativeQuote={nativeQuote}\n className=\"hidden sm:flex\"\n />\n </>\n )}\n </div>\n <div className=\"flex flex-none items-center justify-end gap-2.5\">\n {showPriceTypeSwitch && (\n <TradingViewPriceTypeSwitch className=\"flex sm:hidden\" />\n )}\n {showKlineStyleSelect && (\n <div className=\"sm:hidden\">\n <TradingViewKlineStyleSelect />\n </div>\n )}\n {showOpenIndicator && (\n <div className=\"sm:hidden\">\n <TradingViewOpenIndicator />\n </div>\n )}\n {showSnapshot && (\n <div className=\"hidden sm:flex\">\n <TradingViewSnapshot />\n </div>\n )}\n {showFullscreen && (\n <div className=\"hidden sm:flex\">\n <TradingViewFullscreen />\n </div>\n )}\n {showOpenSettings && (\n <div className=\"hidden sm:flex\">\n <TradingViewOpenSettings />\n </div>\n )}\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 this.chartManager.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { useAtomValue } from \"jotai\";\nimport type { ChartManager } from \"../lib/ChartManager\";\nimport {\n chartAreasFamily,\n settingsLayoutFamily,\n widgetReadyFamily,\n} from \"../lib/atoms\";\nimport { TvChartLayout } from \"../lib/types\";\nimport { parseSymbol } from \"../lib/utils\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nconst REDUCED_LAYOUT_BY_CHART_COUNT: Partial<Record<number, TvChartLayout>> = {\n 2: TvChartLayout.Layout1A,\n 3: TvChartLayout.Layout2A,\n 4: TvChartLayout.Layout3E,\n 5: TvChartLayout.Layout4A,\n 6: TvChartLayout.Layout5C,\n 7: TvChartLayout.Layout6A,\n 8: TvChartLayout.Layout7A,\n};\n\ninterface InjectedAreaTitleProps {\n chartManager: ChartManager;\n index: number;\n onClose: (index: number) => void;\n}\n\nfunction InjectedAreaTitle({\n chartManager,\n index,\n onClose,\n}: InjectedAreaTitleProps) {\n const closeRef = useRef<HTMLButtonElement>(null);\n const area = chartManager.areaByIndex(index);\n const parsed = parseSymbol(area?.tickerSymbol ?? \"\");\n const symbolInfo = area?.symbolInfo;\n const label =\n symbolInfo?.description ||\n symbolInfo?.name ||\n parsed.address ||\n area?.tickerSymbol ||\n \"-\";\n\n useEffect(() => {\n const closeElement = closeRef.current;\n if (!closeElement) return;\n\n const stopChartInteraction = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const handleClose = (event: Event) => {\n stopChartInteraction(event);\n onClose(index);\n };\n\n // The title is mounted inside TradingView's iframe. Native capture-phase\n // listeners are required because React's delegated event listener belongs\n // to the host document and does not receive iframe events.\n closeElement.addEventListener(\"mousedown\", stopChartInteraction, true);\n closeElement.addEventListener(\"click\", handleClose, true);\n return () => {\n closeElement.removeEventListener(\"mousedown\", stopChartInteraction, true);\n closeElement.removeEventListener(\"click\", handleClose, true);\n };\n }, [index, onClose]);\n\n return (\n <div\n style={{\n alignItems: \"center\",\n background: \"var(--tv-color-pane-background, #050807)\",\n boxSizing: \"border-box\",\n color: \"var(--tv-color-toolbar-button-text-hover, #f5f5f5)\",\n display: \"flex\",\n fontFamily: \"inherit\",\n height: \"32px\",\n justifyContent: \"space-between\",\n padding: \"6px 8px\",\n width: \"100%\",\n }}\n >\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n gap: \"8px\",\n minWidth: 0,\n }}\n >\n <span\n style={{\n fontSize: \"12px\",\n fontWeight: 500,\n maxWidth: \"220px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={label}\n >\n {label}\n </span>\n <span\n style={{\n color: \"var(--tv-color-toolbar-button-text, #8b949e)\",\n fontSize: \"11px\",\n }}\n >\n {area?.resolution}\n </span>\n </div>\n {index > 0 && (\n <button\n ref={closeRef}\n type=\"button\"\n aria-label=\"Close chart\"\n style={{\n alignItems: \"center\",\n background: \"transparent\",\n border: 0,\n color: \"var(--tv-color-toolbar-button-text, #8b949e)\",\n cursor: \"pointer\",\n display: \"flex\",\n fontSize: \"18px\",\n height: \"20px\",\n justifyContent: \"center\",\n lineHeight: 1,\n padding: 0,\n width: \"20px\",\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n\ninterface InjectedRoot {\n element: HTMLDivElement;\n root: Root;\n}\n\n/** Injects the original per-area title and close interaction into multi-chart panes. */\nexport function TradingViewLayout() {\n const { prefix, chartManager } = useTvChartContext();\n const ready = useAtomValue(widgetReadyFamily(prefix));\n const layout = useAtomValue(settingsLayoutFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n const rootsRef = useRef(new Map<number, InjectedRoot>());\n\n const closeChart = useCallback(\n (index: number) => {\n const chartCount = chartManager.chartCount;\n const nextLayout = REDUCED_LAYOUT_BY_CHART_COUNT[chartCount];\n if (!nextLayout || index <= 0 || index >= chartCount) return;\n\n const widget = chartManager.internalWidget?.widget;\n const remainingSymbols = Array.from(\n { length: chartCount },\n (_, areaIndex) => widget?.chart(areaIndex)?.symbol(),\n ).filter(\n (symbol, areaIndex): symbol is string =>\n areaIndex !== index && Boolean(symbol),\n );\n\n chartManager.setLayout(nextLayout);\n setTimeout(() => {\n remainingSymbols.forEach((symbol, areaIndex) => {\n void chartManager.areaByIndex(areaIndex)?.setSymbol(symbol);\n });\n });\n },\n [chartManager],\n );\n\n const syncRoots = useCallback(() => {\n const widget = chartManager.internalWidget?.widget;\n const chartCount = chartManager.chartCount;\n\n rootsRef.current.forEach((entry, index) => {\n if (\n chartCount === 1 ||\n index >= chartCount ||\n !entry.element.isConnected\n ) {\n entry.root.unmount();\n rootsRef.current.delete(index);\n }\n });\n\n if (!widget || chartCount <= 1) return;\n\n for (let index = 0; index < chartCount; index += 1) {\n let entry = rootsRef.current.get(index);\n if (!entry) {\n const chart = widget.chart(index) as any;\n const mainDiv = chart?._chartWidget?._mainDiv as\n | HTMLElement\n | undefined;\n if (!mainDiv) continue;\n\n const element = mainDiv.ownerDocument.createElement(\"div\");\n element.style.width = \"100%\";\n element.style.zIndex = \"100\";\n mainDiv.prepend(element);\n entry = { element, root: createRoot(element) };\n rootsRef.current.set(index, entry);\n }\n\n entry.root.render(\n <InjectedAreaTitle\n chartManager={chartManager}\n index={index}\n onClose={closeChart}\n />,\n );\n }\n }, [chartManager, closeChart]);\n\n useEffect(() => {\n if (!ready) return;\n const widget = chartManager.internalWidget?.widget;\n if (!widget) return;\n\n const handleLayoutChanged = () => setTimeout(syncRoots);\n handleLayoutChanged();\n widget.subscribe(\"layout_changed\", handleLayoutChanged);\n return () => widget.unsubscribe(\"layout_changed\", handleLayoutChanged);\n }, [chartManager, ready, syncRoots]);\n\n useEffect(() => {\n if (ready) setTimeout(syncRoots);\n }, [areas, layout, ready, syncRoots]);\n\n useEffect(\n () => () => {\n const entries = [...rootsRef.current.values()];\n rootsRef.current.clear();\n queueMicrotask(() => entries.forEach((entry) => entry.root.unmount()));\n },\n [],\n );\n\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, useEffect } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chartFullscreenFamily, 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 const fullscreen = useAtomValue(chartFullscreenFamily(prefix));\n\n useEffect(() => {\n if (!fullscreen) return;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [fullscreen]);\n\n return (\n <div\n data-fullscreen={fullscreen}\n style={\n fullscreen\n ? {\n background: \"var(--color-background, #050807)\",\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100vh\",\n inset: 0,\n minHeight: 0,\n position: \"fixed\",\n width: \"100vw\",\n zIndex: 9999,\n }\n : { display: \"contents\" }\n }\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 </div>\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/TradingViewToolbarIcons.tsx","../src/components/TradingViewFullscreen.tsx","../src/components/TradingViewKlineStyleSelect.tsx","../src/components/TradingViewToolbarProvider.tsx","../src/components/TradingViewMultiChartSelect.tsx","../src/components/TradingViewOpenIndicator.tsx","../src/components/TradingViewOpenSettings.tsx","../src/components/TradingViewPriceTypeSwitch.tsx","../src/components/TradingViewQuoteTypeSwitch.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","previousResolution","ChartManager","v","idx","areaStates","stored","pr","r","ac","area","initialResolution","initialChartStyle","save","debounce","data","a","loading","locale","timezone","focused","show","widget","theme","colors","reverseColor","target","prevCount","activeResolution","activeChartStyle","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","cached","pending","request","symbols","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","SnapshotIcon","props","jsxs","FullscreenIcon","RestoreScreenIcon","ChartSettingsIcon","DownloadIcon","CopyIcon","TradingViewFullscreen","memo","t","useTranslation","fullscreen","useAtomValue","handleToggle","useCallback","STYLE_OPTIONS","TRADING_VIEW_DROPDOWN_STYLE","TRADING_VIEW_DROPDOWN_ITEM_CLASS","KlineStyleIcon","hollow","bars","TradingViewKlineStyleSelect","open","setOpen","wrapperRef","useRef","currentStyle","handleSelect","style","handlePointerDown","event","handleKeyDown","labelKey","active","TvChartToolbarContext","useTvChartToolbarContext","TradingViewToolbarProvider","activeAreaManager","symbolInfo","activeTickerSymbol","NEXT_LAYOUT_BY_CHART_COUNT","TradingViewMultiChartSelect","onSelectSymbol","selecting","setSelecting","handleAddChart","chartCount","nextLayout","selectedSymbol","currentCount","currentNextLayout","disabled","TradingViewOpenIndicator","handleClick","TradingViewOpenSettings","TradingViewPriceTypeSwitch","className","activePriceType","areaSymbol","TradingViewQuoteTypeSwitch","nativeQuote","activeQuote","TradingViewResolutions","currentResolution","TradingViewSnapshot","handleDownload","canvas","link","handleCopy","blob","resolve","TradingViewToolbar","prefixSlot","suffix","showResolutions","showKlineStyleSelect","showOpenIndicator","showOpenSettings","showFullscreen","showSnapshot","showMultiChartSelect","showPriceTypeSwitch","showQuoteTypeSwitch","onSelectMultiChartSymbol","ChartWidget","bridge","prevSymbol","done","prevResolution","chart","precision","offset","spacing","ChartLibraryWidget","tvTheme","EventEmitter","listener","fn","ChartDataFeed","symbolName","onResolve","onError","extension","periodParams","onResult","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","pane","symbolSub","intervalSub","onSymbolChanged","onIntervalChanged","interval","iframe","doc","seen","register","el","evt","count","handler","backgroundColor","increaseColor","decreaseColor","cardColor","fallback","probe","resolved","Ctor","REDUCED_LAYOUT_BY_CHART_COUNT","InjectedAreaTitle","onClose","closeRef","label","closeElement","stopChartInteraction","handleClose","TradingViewLayout","ready","rootsRef","closeChart","remainingSymbols","areaIndex","syncRoots","entry","mainDiv","element","createRoot","handleLayoutChanged","entries","TradingViewWidgetContainer","onReady","onReadyRef","setWidget","containerElement","setContainerElement","setReady","libWidget","TradingViewWidgetProvider","renderId","useLayoutEffect","handleReady","TradingViewInner","toolbar","loadingOverlay","previousOverflow","TradingView","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 IframeLoadingCompatibilityMode = \"iframe_loading_compatibility_mode\",\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.applyChartStyle();\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 const previousResolution = this.resolution;\n if (previousResolution === resolution) return;\n this.setState(\"resolution\", resolution);\n this.setState(\"dataReady\", false);\n this.pendingResolution = resolution;\n\n try {\n await this.internalChartWidget?.handleResolutionChange(\n resolution,\n previousResolution,\n );\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 this.applyChartStyle();\n\n if (this.selected) {\n this.internalChartWidget.setBarSpacing(this.barSpacing);\n }\n }\n\n private applyChartStyle(): void {\n try {\n this.internalChartWidget?.setChartStyle(this.chartStyle);\n } catch {\n // A newly added TradingView pane can be addressable one tick after layout change.\n // Its persisted style is applied again by handleChartReady.\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 type { SeriesType } from \"./charting-library.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 const initialResolution = this.activeArea?.resolution;\n if (initialResolution) await this.setResolution(initialResolution);\n const initialChartStyle = this.activeArea?.chartStyle;\n if (initialChartStyle != null) this.setChartStyle(initialChartStyle);\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 const prevCount = this.chartCount;\n const activeResolution = this.activeArea?.resolution;\n const activeChartStyle = this.activeArea?.chartStyle;\n this.settings.updateValue(\"layout\", target);\n this.updateChartContents();\n if (activeResolution) void this.setResolution(activeResolution);\n if (activeChartStyle != null) this.setChartStyle(activeChartStyle);\n this.internalWidget?.onLayoutChange?.(target);\n\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 async setResolution(resolution: TvChartResolution): Promise<void> {\n await Promise.all(\n this.getAllCharts().map((area) => area.setResolution(resolution)),\n );\n }\n\n setChartStyle(chartStyle: SeriesType): void {\n this.getAllCharts().forEach((area) => area.setChartStyle(chartStyle));\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 const cached = this.cache.get(symbol);\n if (cached) return cached;\n\n const pending = this.pendingRequests.get(symbol);\n if (pending) return pending;\n\n const request = this.datafeed\n .resolveSymbol(symbol)\n .then((info) => {\n if (info) this.cache.set(symbol, info);\n return info;\n })\n .finally(() => this.pendingRequests.delete(symbol));\n this.pendingRequests.set(symbol, request);\n return request;\n }\n\n async resolveSymbolInfos(symbols: string[]): Promise<LibrarySymbolInfo[]> {\n const resolved = await Promise.all(\n symbols.map((symbol) => this.resolveSymbolInfo(symbol)),\n );\n return resolved.filter(\n (info): info is LibrarySymbolInfo => info !== null,\n );\n }\n\n getSymbolInfo(symbol: string): LibrarySymbolInfo | null {\n void 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 type { SVGProps } from \"react\";\n\nexport function SnapshotIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.86509 3.91271C7.23373 3.34358 7.86564 3 8.54372 3H11.4563C12.1344 3 12.7663 3.34358 13.1349 3.91271L13.7312 4.83333H16C17.1046 4.83333 18 5.72876 18 6.83333V14C18 15.1046 17.1046 16 16 16H4C2.89543 16 2 15.1046 2 14V6.83333C2 5.72877 2.89543 4.83333 4 4.83333L6.26878 4.83333L6.86509 3.91271ZM7.70441 4.45635C7.88873 4.17179 8.20468 4 8.54372 4H11.4563C11.7953 4 12.1113 4.17179 12.2956 4.45635L12.8919 5.37698C13.0762 5.66154 13.3922 5.83333 13.7312 5.83333H16C16.5523 5.83333 17 6.28105 17 6.83333V14C17 14.5523 16.5523 15 16 15H4C3.44772 15 3 14.5523 3 14V6.83333C3 6.28105 3.44772 5.83333 4 5.83333H6.26878C6.60782 5.83333 6.92377 5.66154 7.10809 5.37698L7.70441 4.45635Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13 10C13 11.6569 11.6569 13 10 13C8.34315 13 7 11.6569 7 10C7 8.34315 8.34315 7 10 7C11.6569 7 13 8.34315 13 10ZM10 12C11.1046 12 12 11.1046 12 10C12 8.89543 11.1046 8 10 8C8.89543 8 8 8.89543 8 10C8 11.1046 8.89543 12 10 12Z\"\n />\n </svg>\n );\n}\n\nexport function FullscreenIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n data-icon=\"fullscreen\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.5 4C16.5 3.72386 16.2761 3.5 16 3.5H10.6154C10.3392 3.5 10.1154 3.72386 10.1154 4 10.1154 4.27614 10.3392 4.5 10.6154 4.5H14.7929L10.6464 8.64645C10.4512 8.84171 10.4512 9.15829 10.6464 9.35355 10.8417 9.54882 11.1583 9.54882 11.3536 9.35355L15.5 5.20711V9.38462C15.5 9.66076 15.7239 9.88462 16 9.88462 16.2761 9.88462 16.5 9.66076 16.5 9.38462V4ZM3.5 16C3.5 16.2761 3.72386 16.5 4 16.5H9.38462C9.66076 16.5 9.88462 16.2761 9.88462 16 9.88462 15.7239 9.66076 15.5 9.38462 15.5H5.20711L9.35355 11.3536C9.54882 11.1583 9.54882 10.8417 9.35355 10.6464 9.15829 10.4512 8.84171 10.4512 8.64645 10.6464L4.5 14.7929V10.6154C4.5 10.3392 4.27614 10.1154 4 10.1154 3.72386 10.1154 3.5 10.3392 3.5 10.6154V16Z\"\n />\n </svg>\n );\n}\n\nexport function RestoreScreenIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n data-icon=\"restore-screen\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M10.1154 9.38461C10.1154 9.66076 10.3392 9.88461 10.6154 9.88461L16 9.88461C16.2761 9.88461 16.5 9.66076 16.5 9.38461 16.5 9.10847 16.2761 8.88461 16 8.88461L11.8225 8.88461 15.9689 4.73817C16.1642 4.54291 16.1642 4.22632 15.9689 4.03106 15.7737 3.8358 15.4571 3.8358 15.2618 4.03106L11.1154 8.17751 11.1154 4C11.1154 3.72385 10.8915 3.5 10.6154 3.5 10.3392 3.5 10.1154 3.72385 10.1154 4L10.1154 9.38461ZM9.88464 10.6154C9.88464 10.3392 9.66079 10.1154 9.38464 10.1154L4.00003 10.1154C3.72389 10.1154 3.50003 10.3392 3.50003 10.6154 3.50003 10.8915 3.72388 11.1154 4.00003 11.1154L8.17754 11.1154 4.03109 15.2618C3.83583 15.4571 3.83583 15.7737 4.03109 15.9689 4.22635 16.1642 4.54293 16.1642 4.7382 15.9689L8.88464 11.8225 8.88464 16C8.88464 16.2761 9.1085 16.5 9.38464 16.5 9.66079 16.5 9.88464 16.2761 9.88464 16L9.88464 10.6154Z\"\n />\n </svg>\n );\n}\n\nexport function ChartSettingsIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11 2.42264L16.0622 5.34529C16.681 5.70256 17.0622 6.36281 17.0622 7.07734V12.9226C17.0622 13.6372 16.681 14.2974 16.0622 14.6547L11 17.5773C10.3812 17.9346 9.6188 17.9346 9 17.5773L3.93782 14.6547C3.31902 14.2974 2.93782 13.6372 2.93782 12.9226V7.07734C2.93782 6.36281 3.31902 5.70256 3.93782 5.34529L9 2.42264C9.6188 2.06538 10.3812 2.06538 11 2.42264ZM10.5 3.28867C10.1906 3.11004 9.8094 3.11004 9.5 3.28867L4.43782 6.21132C4.12842 6.38995 3.93782 6.72008 3.93782 7.07734V12.9226C3.93782 13.2799 4.12842 13.61 4.43782 13.7887L9.5 16.7113C9.8094 16.89 10.1906 16.89 10.5 16.7113L15.5622 13.7887C15.8716 13.61 16.0622 13.2799 16.0622 12.9226V7.07734C16.0622 6.72008 15.8716 6.38995 15.5622 6.21132L10.5 3.28867Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13 10C13 11.6569 11.6569 13 10 13C8.34315 13 7 11.6569 7 10C7 8.34315 8.34315 7 10 7C11.6569 7 13 8.34315 13 10ZM10 12C11.1046 12 12 11.1046 12 10C12 8.89543 11.1046 8 10 8C8.89543 8 8 8.89543 8 10C8 11.1046 8.89543 12 10 12Z\"\n />\n </svg>\n );\n}\n\nexport function DownloadIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M10 2.5v10m0 0 3.5-3.5M10 12.5 6.5 9M3 13.5v2A1.5 1.5 0 0 0 4.5 17h11a1.5 1.5 0 0 0 1.5-1.5v-2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function CopyIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n {...props}\n >\n <rect\n x=\"6.5\"\n y=\"6.5\"\n width=\"10\"\n height=\"10\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M13.5 6.5v-2A1.5 1.5 0 0 0 12 3H4.5A1.5 1.5 0 0 0 3 4.5V12A1.5 1.5 0 0 0 4.5 13.5h2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\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\";\nimport { FullscreenIcon, RestoreScreenIcon } from \"./TradingViewToolbarIcons\";\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 aria-label={\n fullscreen\n ? t(\"tradingView.exitFullscreen\" as never)\n : t(\"tradingView.fullscreen\" as never)\n }\n className=\"inline-flex h-6 w-6 cursor-pointer items-center justify-center bg-transparent p-0 text-text-muted transition-colors hover:text-text-primary\"\n title={\n fullscreen\n ? t(\"tradingView.exitFullscreen\" as never)\n : t(\"tradingView.fullscreen\" as never)\n }\n >\n {fullscreen ? <RestoreScreenIcon /> : <FullscreenIcon />}\n </button>\n );\n});\n","import {\n memo,\n useCallback,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type SVGProps,\n} 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\";\n\nconst STYLE_OPTIONS = [\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 [TvChartKlineStyle.HiLo, \"tradingView.style.highLow\"],\n [TvChartKlineStyle.Column, \"tradingView.style.columns\"],\n] as const;\n\nexport const TRADING_VIEW_DROPDOWN_STYLE: CSSProperties = {\n width: 256,\n borderRadius: 14,\n border: \"1px solid var(--color-border-control)\",\n background: \"var(--color-surface-interactive)\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.5)\",\n};\n\nexport const TRADING_VIEW_DROPDOWN_ITEM_CLASS =\n \"flex w-full cursor-pointer items-center gap-2.5 rounded-[10px] px-3 py-2 text-sm transition-all\";\n\nfunction KlineStyleIcon({\n chartStyle,\n ...props\n}: SVGProps<SVGSVGElement> & { chartStyle: TvChartKlineStyle }) {\n if (\n chartStyle === TvChartKlineStyle.Line ||\n chartStyle === TvChartKlineStyle.Area ||\n chartStyle === TvChartKlineStyle.Baseline\n ) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" {...props}>\n <path\n d=\"M2.5 14.5 7 9.5l3.5 2.5L15 5.5h2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {chartStyle !== TvChartKlineStyle.Line && (\n <path\n d=\"M2.5 14.5 7 9.5l3.5 2.5L15 5.5h2.5V17h-15Z\"\n fill=\"currentColor\"\n opacity={chartStyle === TvChartKlineStyle.Area ? 0.25 : 0.12}\n />\n )}\n {chartStyle === TvChartKlineStyle.Baseline && (\n <path d=\"M2 12h16\" stroke=\"currentColor\" strokeDasharray=\"2 2\" />\n )}\n </svg>\n );\n }\n\n if (chartStyle === TvChartKlineStyle.Column) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" {...props}>\n <rect\n x=\"2.5\"\n y=\"8\"\n width=\"4\"\n height=\"9\"\n rx=\".5\"\n stroke=\"currentColor\"\n />\n <rect x=\"8\" y=\"3\" width=\"4\" height=\"14\" rx=\".5\" stroke=\"currentColor\" />\n <rect\n x=\"13.5\"\n y=\"11\"\n width=\"4\"\n height=\"6\"\n rx=\".5\"\n stroke=\"currentColor\"\n />\n </svg>\n );\n }\n\n const hollow =\n chartStyle === TvChartKlineStyle.HollowCandles ||\n chartStyle === TvChartKlineStyle.HiLo;\n const bars = chartStyle === TvChartKlineStyle.Bars;\n\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" {...props}>\n <path d=\"M6 2.5v15M14 4v12\" stroke=\"currentColor\" />\n {bars ? (\n <>\n <path d=\"M3 7h3M6 13h3M11 8h3M14 12h3\" stroke=\"currentColor\" />\n </>\n ) : (\n <>\n <rect\n x=\"3.5\"\n y={chartStyle === TvChartKlineStyle.HeikenAshi ? \"6.5\" : \"5\"}\n width=\"5\"\n height={chartStyle === TvChartKlineStyle.HeikenAshi ? \"8\" : \"10\"}\n rx=\".5\"\n fill={hollow ? \"none\" : \"currentColor\"}\n stroke=\"currentColor\"\n />\n <rect\n x=\"11.5\"\n y={chartStyle === TvChartKlineStyle.HeikenAshi ? \"5\" : \"7\"}\n width=\"5\"\n height={chartStyle === TvChartKlineStyle.HeikenAshi ? \"7\" : \"6\"}\n rx=\".5\"\n fill=\"none\"\n stroke=\"currentColor\"\n />\n </>\n )}\n </svg>\n );\n}\n\nexport const TradingViewKlineStyleSelect = memo(() => {\n const { t } = useTranslation();\n const { prefix, chartManager } = useTvChartContext();\n const areas = useAtomValue(chartAreasFamily(prefix));\n const selectedIndex = useAtomValue(chartSelectedIndexFamily(prefix));\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const currentStyle =\n areas[selectedIndex]?.chartStyle ?? TvChartKlineStyle.Candles;\n\n const handleSelect = useCallback(\n (style: TvChartKlineStyle) => {\n setOpen(false);\n chartManager.setChartStyle(style);\n },\n [chartManager],\n );\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: MouseEvent) => {\n if (!wrapperRef.current?.contains(event.target as Node)) setOpen(false);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={wrapperRef} className=\"relative inline-flex\">\n <button\n type=\"button\"\n aria-label={t(\"tradingView.klineStyle\" as never)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"inline-flex h-6 min-h-0 min-w-0 cursor-pointer items-center bg-transparent p-0 text-foreground transition-opacity hover:opacity-80\"\n title={t(\"tradingView.klineStyle\" as never)}\n >\n <KlineStyleIcon chartStyle={currentStyle} width={20} height={20} />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label={t(\"tradingView.klineStyle\" as never)}\n className=\"absolute left-0 top-full z-50 mt-2 w-64 overflow-hidden\"\n style={TRADING_VIEW_DROPDOWN_STYLE}\n >\n <div className=\"p-1\">\n {STYLE_OPTIONS.map(([style, labelKey]) => {\n const active = currentStyle === style;\n return (\n <button\n key={style}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n data-active={active}\n data-style={style}\n onMouseDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleSelect(style);\n }}\n className={[\n TRADING_VIEW_DROPDOWN_ITEM_CLASS,\n active\n ? \"bg-action-primary/[0.08] text-brand-primary\"\n : \"text-text-secondary hover:bg-surface-strong/50 hover:text-text-primary\",\n ].join(\" \")}\n >\n <KlineStyleIcon chartStyle={style} width={20} height={20} />\n <span className=\"flex-1 text-left\">\n {t(labelKey as never)}\n </span>\n {active && (\n <svg\n viewBox=\"0 0 24 24\"\n width={16}\n height={16}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"flex-shrink-0\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\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 activeTickerSymbol: string;\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 activeTickerSymbol = areas[selectedIndex]?.tickerSymbol ?? \"\";\n\n const value = useMemo<TvChartToolbarContextValue>(\n () => ({ activeAreaManager, activeTickerSymbol, symbolInfo }),\n [activeAreaManager, activeTickerSymbol, symbolInfo],\n );\n\n return (\n <TvChartToolbarContext.Provider value={value}>\n {children}\n </TvChartToolbarContext.Provider>\n );\n};\n","import { memo, useCallback, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { TvChartLayout } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nconst NEXT_LAYOUT_BY_CHART_COUNT: Partial<Record<number, TvChartLayout>> = {\n 1: TvChartLayout.Layout2A,\n 2: TvChartLayout.Layout3E,\n 3: TvChartLayout.Layout4A,\n 4: TvChartLayout.Layout5C,\n 5: TvChartLayout.Layout6A,\n 6: TvChartLayout.Layout7A,\n 7: TvChartLayout.Layout8A,\n};\n\nexport interface TradingViewMultiChartSelectProps {\n /** Opens the consumer token picker and returns its chart symbol. */\n onSelectSymbol?: (\n activeTickerSymbol: string,\n ) => Promise<string | null | undefined>;\n}\n\n/** Adds a selected token as a chart and chooses its layout automatically. */\nexport const TradingViewMultiChartSelect = memo(\n ({ onSelectSymbol }: TradingViewMultiChartSelectProps) => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const { activeTickerSymbol } = useTvChartToolbarContext();\n const [selecting, setSelecting] = useState(false);\n\n const handleAddChart = useCallback(async () => {\n const chartCount = chartManager.chartCount;\n const nextLayout = NEXT_LAYOUT_BY_CHART_COUNT[chartCount];\n if (!onSelectSymbol || !nextLayout || selecting) return;\n\n setSelecting(true);\n try {\n const selectedSymbol = await onSelectSymbol(activeTickerSymbol);\n if (!selectedSymbol) return;\n\n const currentCount = chartManager.chartCount;\n const currentNextLayout = NEXT_LAYOUT_BY_CHART_COUNT[currentCount];\n if (!currentNextLayout) return;\n\n chartManager.setLayout(currentNextLayout);\n await chartManager.areaByIndex(currentCount)?.setSymbol(selectedSymbol);\n } finally {\n setSelecting(false);\n }\n }, [activeTickerSymbol, chartManager, onSelectSymbol, selecting]);\n\n const disabled =\n !onSelectSymbol ||\n selecting ||\n chartManager.chartCount === 0 ||\n chartManager.chartCount >= 8;\n\n return (\n <button\n type=\"button\"\n data-testid=\"multi-chart\"\n disabled={disabled}\n onClick={() => void handleAddChart()}\n className=\"inline-flex h-6 min-h-0 min-w-0 cursor-pointer items-center gap-1 bg-transparent p-0 text-xs text-foreground transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-40\"\n title={t(\"tradingView.multiCharts\" as never)}\n >\n <svg\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n >\n <path\n d=\"M17.3846 2C17.5478 2 17.7044 2.06483 17.8198 2.18024C17.9352 2.29565 18 2.45217 18 2.61538V17.3846C18 17.5478 17.9352 17.7044 17.8198 17.8198C17.7044 17.9352 17.5478 18 17.3846 18H2.61538C2.45217 18 2.29565 17.9352 2.18024 17.8198C2.06483 17.7044 2 17.5478 2 17.3846V2.61538C2 2.45217 2.06483 2.29565 2.18024 2.18024C2.29565 2.06483 2.45217 2 2.61538 2H17.3846ZM9.58954 3.23077H3.23077V16.7692H9.58974L9.58954 3.23077ZM16.7692 3.23077H10.4101L10.4103 16.7692H16.7692V10.4103H10.4103V9.58974H16.7692V3.23077Z\"\n fill=\"currentColor\"\n />\n </svg>\n <span>{t(\"tradingView.multiCharts\" as never)}</span>\n </button>\n );\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 aria-label={t(\"tradingView.indicators\" as never)}\n className=\"inline-flex h-6 min-h-0 min-w-0 cursor-pointer items-center bg-transparent p-0 text-foreground transition-opacity hover:opacity-80\"\n title={t(\"tradingView.indicators\" as never)}\n >\n <svg\n aria-hidden=\"true\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.5 5.5C7.5 4.11929 8.61929 3 10 3C11.3807 3 12.5 4.11929 12.5 5.5V5.82143C12.5 6.09757 12.2761 6.32143 12 6.32143C11.7239 6.32143 11.5 6.09757 11.5 5.82143V5.5C11.5 4.67157 10.8284 4 10 4C9.17157 4 8.5 4.67157 8.5 5.5V8H11C11.2761 8 11.5 8.22386 11.5 8.5C11.5 8.77614 11.2761 9 11 9H8.5V14.4999C8.5 15.8806 7.38071 16.9999 6 16.9999C4.61929 16.9999 3.5 15.8806 3.5 14.4999C3.5 14.2237 3.72386 13.9999 4 13.9999C4.27614 13.9999 4.5 14.2237 4.5 14.4999C4.5 15.3283 5.17157 15.9999 6 15.9999C6.82843 15.9999 7.5 15.3283 7.5 14.4999V9H5C4.72386 9 4.5 8.77614 4.5 8.5C4.5 8.22386 4.72386 8 5 8H7.5V5.5ZM14.2071 14.5001L15.8536 16.1465C16.0488 16.3418 16.0488 16.6584 15.8536 16.8536C15.6583 17.0489 15.3417 17.0489 15.1464 16.8536L13.5 15.2072L11.8536 16.8536C11.6583 17.0489 11.3417 17.0489 11.1464 16.8536C10.9512 16.6584 10.9512 16.3418 11.1464 16.1465L12.7929 14.5001L11.1464 12.8536C10.9512 12.6584 10.9512 12.3418 11.1464 12.1465C11.3417 11.9513 11.6583 11.9513 11.8536 12.1465L13.5 13.793L15.1464 12.1465C15.3417 11.9513 15.6583 11.9513 15.8536 12.1465C16.0488 12.3418 16.0488 12.6584 15.8536 12.8536L14.2071 14.5001Z\"\n />\n </svg>\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { ChartSettingsIcon } from \"./TradingViewToolbarIcons\";\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 aria-label={t(\"tradingView.chartSettings\" as never)}\n className=\"inline-flex h-6 w-6 cursor-pointer items-center justify-center bg-transparent p-0 text-text-muted transition-colors hover:text-text-primary\"\n title={t(\"tradingView.chartSettings\" as never)}\n >\n <ChartSettingsIcon />\n </button>\n );\n});\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { TvChartPriceType, TvChartQuoteType } from \"../lib/types\";\nimport { parseSymbol, stringifySymbol } from \"../lib/utils\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nexport interface TradingViewPriceTypeSwitchProps {\n className?: string;\n}\n\nexport const TradingViewPriceTypeSwitch = memo(\n ({ className }: TradingViewPriceTypeSwitchProps) => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const { activeTickerSymbol } = useTvChartToolbarContext();\n const symbol = parseSymbol(activeTickerSymbol);\n const activePriceType = symbol.priceType ?? TvChartPriceType.Price;\n\n const handleToggle = useCallback(() => {\n if (!symbol.chain || !symbol.address) return;\n const priceType =\n activePriceType === TvChartPriceType.Price\n ? TvChartPriceType.MarketCap\n : TvChartPriceType.Price;\n\n void Promise.all(\n chartManager.getAllCharts().map((area) => {\n const areaSymbol = parseSymbol(area.tickerSymbol);\n if (!areaSymbol.chain || !areaSymbol.address)\n return Promise.resolve();\n return area.setSymbol(\n stringifySymbol({\n ...areaSymbol,\n quote: areaSymbol.quote ?? TvChartQuoteType.USD,\n priceType,\n }),\n );\n }),\n );\n }, [activePriceType, chartManager, symbol]);\n\n if (!activeTickerSymbol) return null;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n data-testid=\"price-type\"\n onClick={handleToggle}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleToggle();\n }\n }}\n className={`cursor-pointer items-center gap-0.5 text-xs ${className ?? \"flex\"}`}\n aria-label={t(\"tradingView.priceType\" as never)}\n >\n <span\n className={\n activePriceType === TvChartPriceType.Price\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {t(\"tradingView.price\" as never)}\n </span>\n <span className=\"text-text-disabled\" aria-hidden=\"true\">\n /\n </span>\n <span\n className={\n activePriceType === TvChartPriceType.MarketCap\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {t(\"tradingView.marketCap\" as never)}\n </span>\n </div>\n );\n },\n);\n","import { memo, useCallback } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport { TvChartPriceType, TvChartQuoteType } from \"../lib/types\";\nimport { parseSymbol, stringifySymbol } from \"../lib/utils\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport { useTvChartToolbarContext } from \"./TradingViewToolbarProvider\";\n\nexport interface TradingViewQuoteTypeSwitchProps {\n nativeQuote: TvChartQuoteType;\n className?: string;\n}\n\nexport const TradingViewQuoteTypeSwitch = memo(\n ({ nativeQuote, className }: TradingViewQuoteTypeSwitchProps) => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const { activeTickerSymbol } = useTvChartToolbarContext();\n const symbol = parseSymbol(activeTickerSymbol);\n const activeQuote = symbol.quote ?? TvChartQuoteType.USD;\n\n const handleToggle = useCallback(() => {\n if (!symbol.chain || !symbol.address) return;\n const quote =\n activeQuote === TvChartQuoteType.USD\n ? nativeQuote\n : TvChartQuoteType.USD;\n\n void Promise.all(\n chartManager.getAllCharts().map((area) => {\n const areaSymbol = parseSymbol(area.tickerSymbol);\n if (!areaSymbol.chain || !areaSymbol.address)\n return Promise.resolve();\n return area.setSymbol(\n stringifySymbol({\n ...areaSymbol,\n quote,\n priceType: areaSymbol.priceType ?? TvChartPriceType.Price,\n }),\n );\n }),\n );\n }, [activeQuote, chartManager, nativeQuote, symbol]);\n\n if (!activeTickerSymbol) return null;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n data-testid=\"quote-type\"\n onClick={handleToggle}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleToggle();\n }\n }}\n className={`cursor-pointer items-center gap-0.5 text-xs ${className ?? \"flex\"}`}\n aria-label={t(\"tradingView.quoteType\" as never)}\n >\n <span\n className={\n activeQuote === TvChartQuoteType.USD\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {TvChartQuoteType.USD}\n </span>\n <span className=\"text-text-disabled\" aria-hidden=\"true\">\n /\n </span>\n <span\n className={\n activeQuote !== TvChartQuoteType.USD\n ? \"text-text-primary\"\n : \"text-text-muted\"\n }\n >\n {nativeQuote}\n </span>\n </div>\n );\n },\n);\n","import { memo, useCallback } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n chartPinnedResolutionsFamily,\n chartAreasFamily,\n chartSelectedIndexFamily,\n} from \"../lib/atoms\";\nimport type { TvChartResolution } from \"../lib/types\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nexport const TradingViewResolutions = memo(() => {\n const { t } = useTranslation();\n const { prefix, chartManager } = useTvChartContext();\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 chartManager.setResolution(resolution);\n },\n [chartManager],\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 {t(`common.resolution.${r}`)}\n </button>\n ))}\n </div>\n );\n});\n","import { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"@liberfi.io/i18n\";\nimport {\n TRADING_VIEW_DROPDOWN_ITEM_CLASS,\n TRADING_VIEW_DROPDOWN_STYLE,\n} from \"./TradingViewKlineStyleSelect\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\nimport {\n CopyIcon,\n DownloadIcon,\n SnapshotIcon,\n} from \"./TradingViewToolbarIcons\";\n\nexport const TradingViewSnapshot = memo(() => {\n const { t } = useTranslation();\n const { chartManager } = useTvChartContext();\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const handleDownload = useCallback(async () => {\n setOpen(false);\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 document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (e) {\n console.error(\"TradingViewSnapshot\", e);\n }\n }, [chartManager]);\n\n const handleCopy = useCallback(async () => {\n setOpen(false);\n try {\n const canvas = await chartManager.internalWidget?.takeClientScreenshot();\n if (!canvas) return;\n const blob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, \"image/png\"),\n );\n if (!blob || !navigator.clipboard?.write || !globalThis.ClipboardItem) {\n throw new Error(\"Image clipboard API is not available\");\n }\n await navigator.clipboard.write([\n new ClipboardItem({ \"image/png\": blob }),\n ]);\n } catch (e) {\n console.error(\"TradingViewSnapshot\", e);\n }\n }, [chartManager]);\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: MouseEvent) => {\n if (!wrapperRef.current?.contains(event.target as Node)) setOpen(false);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(\"mousedown\", handlePointerDown);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handlePointerDown);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [open]);\n\n return (\n <div ref={wrapperRef} className=\"relative inline-flex\">\n <button\n type=\"button\"\n onClick={() => setOpen((value) => !value)}\n aria-label={t(\"tradingView.takeSnapshot\" as never)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className=\"inline-flex h-6 w-6 cursor-pointer items-center justify-center bg-transparent p-0 text-text-muted transition-colors hover:text-text-primary\"\n title={t(\"tradingView.takeSnapshot\" as never)}\n >\n <SnapshotIcon />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label={t(\"tradingView.snapshot\" as never)}\n className=\"absolute right-0 top-full z-50 mt-2 w-64 overflow-hidden p-1\"\n style={TRADING_VIEW_DROPDOWN_STYLE}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={handleDownload}\n className={`${TRADING_VIEW_DROPDOWN_ITEM_CLASS} text-text-secondary hover:bg-surface-strong/50 hover:text-text-primary`}\n >\n <DownloadIcon />\n <span>{t(\"tradingView.downloadSnapshot\" as never)}</span>\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={handleCopy}\n className={`${TRADING_VIEW_DROPDOWN_ITEM_CLASS} text-text-secondary hover:bg-surface-strong/50 hover:text-text-primary`}\n >\n <CopyIcon />\n <span>{t(\"tradingView.copySnapshot\" as never)}</span>\n </button>\n </div>\n )}\n </div>\n );\n});\n","import { memo, type ReactNode } from \"react\";\nimport type { TvChartQuoteType } from \"../lib/types\";\nimport { TradingViewFullscreen } from \"./TradingViewFullscreen\";\nimport { TradingViewKlineStyleSelect } from \"./TradingViewKlineStyleSelect\";\nimport { TradingViewMultiChartSelect } from \"./TradingViewMultiChartSelect\";\nimport { TradingViewOpenIndicator } from \"./TradingViewOpenIndicator\";\nimport { TradingViewOpenSettings } from \"./TradingViewOpenSettings\";\nimport { TradingViewPriceTypeSwitch } from \"./TradingViewPriceTypeSwitch\";\nimport { TradingViewQuoteTypeSwitch } from \"./TradingViewQuoteTypeSwitch\";\nimport { TradingViewResolutions } from \"./TradingViewResolutions\";\nimport { TradingViewSnapshot } from \"./TradingViewSnapshot\";\nimport { TradingViewToolbarProvider } from \"./TradingViewToolbarProvider\";\n\nexport type TradingViewMultiChartSymbolSelector = (\n activeTickerSymbol: string,\n) => Promise<string | null | undefined>;\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 /** Show/hide multi-chart layout selector (default: false) */\n showMultiChartSelect?: boolean;\n /** Show/hide price/market-cap switch (default: false) */\n showPriceTypeSwitch?: boolean;\n /** Show/hide USD/native quote switch (default: false) */\n showQuoteTypeSwitch?: boolean;\n /** Native quote displayed by the quote switch */\n nativeQuote?: TvChartQuoteType;\n /** Opens the consumer token picker and returns the selected chart symbol */\n onSelectMultiChartSymbol?: TradingViewMultiChartSymbolSelector;\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 showMultiChartSelect = false,\n showPriceTypeSwitch = false,\n showQuoteTypeSwitch = false,\n nativeQuote,\n onSelectMultiChartSymbol,\n }: TradingViewToolbarProps) => {\n return (\n <TradingViewToolbarProvider>\n <div className=\"flex h-9 w-full flex-none items-center border-b border-border px-4\">\n {prefixSlot}\n {children ?? (\n <>\n <div className=\"flex min-w-0 flex-1 items-center justify-start gap-2.5\">\n {showResolutions && <TradingViewResolutions />}\n {showMultiChartSelect && (\n <>\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n <TradingViewMultiChartSelect\n onSelectSymbol={onSelectMultiChartSymbol}\n />\n </>\n )}\n {(showKlineStyleSelect || showOpenIndicator) && (\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n )}\n {showKlineStyleSelect && (\n <div className=\"hidden sm:block\">\n <TradingViewKlineStyleSelect />\n </div>\n )}\n {showOpenIndicator && (\n <div className=\"hidden sm:block\">\n <TradingViewOpenIndicator />\n </div>\n )}\n {showPriceTypeSwitch && (\n <>\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n <TradingViewPriceTypeSwitch className=\"hidden sm:flex\" />\n </>\n )}\n {showQuoteTypeSwitch && nativeQuote && (\n <>\n <div className=\"hidden h-4 w-px bg-border sm:block\" />\n <TradingViewQuoteTypeSwitch\n nativeQuote={nativeQuote}\n className=\"hidden sm:flex\"\n />\n </>\n )}\n </div>\n <div className=\"flex flex-none items-center justify-end gap-2.5\">\n {showPriceTypeSwitch && (\n <TradingViewPriceTypeSwitch className=\"flex sm:hidden\" />\n )}\n {showKlineStyleSelect && (\n <div className=\"sm:hidden\">\n <TradingViewKlineStyleSelect />\n </div>\n )}\n {showOpenIndicator && (\n <div className=\"sm:hidden\">\n <TradingViewOpenIndicator />\n </div>\n )}\n {showSnapshot && (\n <div className=\"hidden sm:flex\">\n <TradingViewSnapshot />\n </div>\n )}\n {showFullscreen && (\n <div className=\"hidden sm:flex\">\n <TradingViewFullscreen />\n </div>\n )}\n {showOpenSettings && (\n <div className=\"hidden sm:flex\">\n <TradingViewOpenSettings />\n </div>\n )}\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 this.chartManager.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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport { useAtomValue } from \"jotai\";\nimport type { ChartManager } from \"../lib/ChartManager\";\nimport {\n chartAreasFamily,\n settingsLayoutFamily,\n widgetReadyFamily,\n} from \"../lib/atoms\";\nimport { TvChartLayout } from \"../lib/types\";\nimport { parseSymbol } from \"../lib/utils\";\nimport { useTvChartContext } from \"./TradingViewProvider\";\n\nconst REDUCED_LAYOUT_BY_CHART_COUNT: Partial<Record<number, TvChartLayout>> = {\n 2: TvChartLayout.Layout1A,\n 3: TvChartLayout.Layout2A,\n 4: TvChartLayout.Layout3E,\n 5: TvChartLayout.Layout4A,\n 6: TvChartLayout.Layout5C,\n 7: TvChartLayout.Layout6A,\n 8: TvChartLayout.Layout7A,\n};\n\ninterface InjectedAreaTitleProps {\n chartManager: ChartManager;\n index: number;\n onClose: (index: number) => void;\n}\n\nfunction InjectedAreaTitle({\n chartManager,\n index,\n onClose,\n}: InjectedAreaTitleProps) {\n const closeRef = useRef<HTMLButtonElement>(null);\n const area = chartManager.areaByIndex(index);\n const parsed = parseSymbol(area?.tickerSymbol ?? \"\");\n const symbolInfo = area?.symbolInfo;\n const label =\n symbolInfo?.description ||\n symbolInfo?.name ||\n parsed.address ||\n area?.tickerSymbol ||\n \"-\";\n\n useEffect(() => {\n const closeElement = closeRef.current;\n if (!closeElement) return;\n\n const stopChartInteraction = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n const handleClose = (event: Event) => {\n stopChartInteraction(event);\n onClose(index);\n };\n\n // The title is mounted inside TradingView's iframe. Native capture-phase\n // listeners are required because React's delegated event listener belongs\n // to the host document and does not receive iframe events.\n closeElement.addEventListener(\"mousedown\", stopChartInteraction, true);\n closeElement.addEventListener(\"click\", handleClose, true);\n return () => {\n closeElement.removeEventListener(\"mousedown\", stopChartInteraction, true);\n closeElement.removeEventListener(\"click\", handleClose, true);\n };\n }, [index, onClose]);\n\n return (\n <div\n style={{\n alignItems: \"center\",\n background: \"var(--tv-color-pane-background, #050807)\",\n boxSizing: \"border-box\",\n color: \"var(--tv-color-toolbar-button-text-hover, #f5f5f5)\",\n display: \"flex\",\n fontFamily: \"inherit\",\n height: \"32px\",\n justifyContent: \"space-between\",\n padding: \"6px 8px\",\n width: \"100%\",\n }}\n >\n <div\n style={{\n alignItems: \"center\",\n display: \"flex\",\n gap: \"8px\",\n minWidth: 0,\n }}\n >\n <span\n style={{\n fontSize: \"12px\",\n fontWeight: 500,\n maxWidth: \"220px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={label}\n >\n {label}\n </span>\n <span\n style={{\n color: \"var(--tv-color-toolbar-button-text, #8b949e)\",\n fontSize: \"11px\",\n }}\n >\n {area?.resolution}\n </span>\n </div>\n {index > 0 && (\n <button\n ref={closeRef}\n type=\"button\"\n aria-label=\"Close chart\"\n style={{\n alignItems: \"center\",\n background: \"transparent\",\n border: 0,\n color: \"var(--tv-color-toolbar-button-text, #8b949e)\",\n cursor: \"pointer\",\n display: \"flex\",\n fontSize: \"18px\",\n height: \"20px\",\n justifyContent: \"center\",\n lineHeight: 1,\n padding: 0,\n width: \"20px\",\n }}\n >\n ×\n </button>\n )}\n </div>\n );\n}\n\ninterface InjectedRoot {\n element: HTMLDivElement;\n root: Root;\n}\n\n/** Injects the original per-area title and close interaction into multi-chart panes. */\nexport function TradingViewLayout() {\n const { prefix, chartManager } = useTvChartContext();\n const ready = useAtomValue(widgetReadyFamily(prefix));\n const layout = useAtomValue(settingsLayoutFamily(prefix));\n const areas = useAtomValue(chartAreasFamily(prefix));\n const rootsRef = useRef(new Map<number, InjectedRoot>());\n\n const closeChart = useCallback(\n (index: number) => {\n const chartCount = chartManager.chartCount;\n const nextLayout = REDUCED_LAYOUT_BY_CHART_COUNT[chartCount];\n if (!nextLayout || index <= 0 || index >= chartCount) return;\n\n const widget = chartManager.internalWidget?.widget;\n const remainingSymbols = Array.from(\n { length: chartCount },\n (_, areaIndex) => widget?.chart(areaIndex)?.symbol(),\n ).filter(\n (symbol, areaIndex): symbol is string =>\n areaIndex !== index && Boolean(symbol),\n );\n\n chartManager.setLayout(nextLayout);\n setTimeout(() => {\n remainingSymbols.forEach((symbol, areaIndex) => {\n void chartManager.areaByIndex(areaIndex)?.setSymbol(symbol);\n });\n });\n },\n [chartManager],\n );\n\n const syncRoots = useCallback(() => {\n const widget = chartManager.internalWidget?.widget;\n const chartCount = chartManager.chartCount;\n\n rootsRef.current.forEach((entry, index) => {\n if (\n chartCount === 1 ||\n index >= chartCount ||\n !entry.element.isConnected\n ) {\n entry.root.unmount();\n rootsRef.current.delete(index);\n }\n });\n\n if (!widget || chartCount <= 1) return;\n\n for (let index = 0; index < chartCount; index += 1) {\n let entry = rootsRef.current.get(index);\n if (!entry) {\n const chart = widget.chart(index) as any;\n const mainDiv = chart?._chartWidget?._mainDiv as\n | HTMLElement\n | undefined;\n if (!mainDiv) continue;\n\n const element = mainDiv.ownerDocument.createElement(\"div\");\n element.style.width = \"100%\";\n element.style.zIndex = \"100\";\n mainDiv.prepend(element);\n entry = { element, root: createRoot(element) };\n rootsRef.current.set(index, entry);\n }\n\n entry.root.render(\n <InjectedAreaTitle\n chartManager={chartManager}\n index={index}\n onClose={closeChart}\n />,\n );\n }\n }, [chartManager, closeChart]);\n\n useEffect(() => {\n if (!ready) return;\n const widget = chartManager.internalWidget?.widget;\n if (!widget) return;\n\n const handleLayoutChanged = () => setTimeout(syncRoots);\n handleLayoutChanged();\n widget.subscribe(\"layout_changed\", handleLayoutChanged);\n return () => {\n // React detaches the widget ref before passive effect cleanup. Once the\n // manager no longer owns this widget, its iframe API may already be gone.\n if (chartManager.internalWidget?.widget === widget) {\n widget.unsubscribe(\"layout_changed\", handleLayoutChanged);\n }\n };\n }, [chartManager, ready, syncRoots]);\n\n useEffect(() => {\n if (ready) setTimeout(syncRoots);\n }, [areas, layout, ready, syncRoots]);\n\n useEffect(\n () => () => {\n const entries = [...rootsRef.current.values()];\n rootsRef.current.clear();\n queueMicrotask(() => entries.forEach((entry) => entry.root.unmount()));\n },\n [],\n );\n\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, useEffect } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chartFullscreenFamily, 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 const fullscreen = useAtomValue(chartFullscreenFamily(prefix));\n\n useEffect(() => {\n if (!fullscreen) return;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [fullscreen]);\n\n return (\n <div\n data-fullscreen={fullscreen}\n style={\n fullscreen\n ? {\n background: \"var(--color-background, #050807)\",\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100vh\",\n inset: 0,\n minHeight: 0,\n position: \"fixed\",\n width: \"100vw\",\n zIndex: 9999,\n }\n : { display: \"contents\" }\n }\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 </div>\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"]}