react-klinecharts-ui 0.5.0 → 0.6.0

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/provider/ChartTerminalContext.ts","../src/data/periods.ts","../src/provider/ChartTerminalProvider.tsx","../src/hooks/useKlinechartsUITheme.ts","../src/hooks/useKlinechartsUILoading.ts","../src/hooks/usePeriods.ts","../src/data/timezones.ts","../src/hooks/useTimezone.ts","../src/hooks/useSymbolSearch.ts","../src/data/indicators.ts","../src/hooks/useIndicators.ts","../src/data/drawings.ts","../src/hooks/useDrawingTools.ts","../src/data/candle-types.ts","../src/hooks/useKlinechartsUISettings.ts","../src/hooks/useScreenshot.ts","../src/hooks/useFullscreen.ts","../src/hooks/useOrderLines.ts","../src/hooks/useUndoRedo.ts","../src/hooks/useLayoutManager.ts","../src/hooks/useScriptEditor.ts","../src/hooks/useCrosshair.ts","../src/hooks/useAlerts.ts","../src/hooks/useDataExport.ts","../src/hooks/useWatchlist.ts","../src/hooks/useReplay.ts","../src/hooks/useCompare.ts","../src/hooks/useMeasure.ts","../src/hooks/useAnnotations.ts","../src/utils/createDataLoader.ts"],"names":["useCallback","useMemo","useRef","useEffect","useState","overlays","DRAWING_GROUP_ID","indicators","id","registerIndicator"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type {\n KlinechartsUIState,\n KlinechartsUIContextValue,\n KlinechartsUIDispatchValue,\n} from \"./types\";\n\nexport const KlinechartsUIStateContext =\n createContext<KlinechartsUIState | null>(null);\n\nexport const KlinechartsUIDispatchContext =\n createContext<KlinechartsUIDispatchValue | null>(null);\n\n/**\n * @internal\n * Reads only the stable dispatch slice. Hooks that use this won't re-render\n * when chart state changes (e.g. symbol, period, isLoading).\n */\nexport function useKlinechartsUIDispatch(): KlinechartsUIDispatchValue {\n const ctx = useContext(KlinechartsUIDispatchContext);\n if (!ctx) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return ctx;\n}\n\n/**\n * Primary hook — returns the full combined context value.\n * For performance-sensitive cases, prefer the two split hooks internally.\n */\nexport function useKlinechartsUI(): KlinechartsUIContextValue {\n const state = useContext(KlinechartsUIStateContext);\n const dispatch = useContext(KlinechartsUIDispatchContext);\n if (!state || !dispatch) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return { state, ...dispatch };\n}\n","import type { Period as KlinechartsPeriod } from \"react-klinecharts\";\n\nexport interface TerminalPeriod extends KlinechartsPeriod {\n label: string;\n}\n\nexport const DEFAULT_PERIODS: TerminalPeriod[] = [\n { span: 1, type: \"minute\", label: \"1m\" },\n { span: 5, type: \"minute\", label: \"5m\" },\n { span: 15, type: \"minute\", label: \"15m\" },\n { span: 1, type: \"hour\", label: \"1H\" },\n { span: 2, type: \"hour\", label: \"2H\" },\n { span: 4, type: \"hour\", label: \"4H\" },\n { span: 1, type: \"day\", label: \"D\" },\n { span: 1, type: \"week\", label: \"W\" },\n { span: 1, type: \"month\", label: \"M\" },\n { span: 1, type: \"year\", label: \"Y\" },\n];\n","import {\n useReducer,\n useMemo,\n useEffect,\n useCallback,\n useRef,\n type ReactElement,\n} from \"react\";\nimport type {\n KlinechartsUIOptions,\n KlinechartsUIState,\n KlinechartsUIAction,\n} from \"./types\";\nimport {\n KlinechartsUIStateContext,\n KlinechartsUIDispatchContext,\n} from \"./ChartTerminalContext\";\nimport { DEFAULT_PERIODS } from \"../data/periods\";\nimport { registerExtensions } from \"../extensions\";\nimport { registerOverlay } from \"react-klinecharts\";\n\nfunction reducer(\n state: KlinechartsUIState,\n action: KlinechartsUIAction,\n): KlinechartsUIState {\n switch (action.type) {\n case \"SET_CHART\":\n return { ...state, chart: action.chart };\n case \"SET_SYMBOL\":\n return { ...state, symbol: action.symbol };\n case \"SET_PERIOD\":\n return { ...state, period: action.period };\n case \"SET_THEME\":\n return { ...state, theme: action.theme };\n case \"SET_TIMEZONE\":\n return { ...state, timezone: action.timezone };\n case \"SET_LOADING\":\n return { ...state, isLoading: action.isLoading };\n case \"SET_MAIN_INDICATORS\":\n return { ...state, mainIndicators: action.indicators };\n case \"SET_SUB_INDICATORS\":\n return { ...state, subIndicators: action.indicators };\n case \"SET_INDICATOR_AXES\":\n return { ...state, indicatorAxes: action.axes };\n case \"SET_INDICATOR_VISIBILITY\":\n return { ...state, indicatorVisibility: action.visibility };\n case \"SET_ALERTS\":\n return { ...state, alerts: action.alerts };\n case \"SET_MEASURE\":\n return { ...state, measure: { ...state.measure, ...action.measure } };\n case \"SET_REPLAY\":\n return { ...state, replay: { ...state.replay, ...action.replay } };\n case \"SET_STYLES\":\n return { ...state, styles: action.styles };\n case \"SET_LOCALE\":\n return { ...state, locale: action.locale };\n case \"SET_SCREENSHOT_URL\":\n return { ...state, screenshotUrl: action.url };\n default:\n return state;\n }\n}\n\nexport function KlinechartsUIProvider({\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme = \"light\",\n defaultTimezone = \"Asia/Shanghai\",\n defaultMainIndicators = [\"MA\"],\n defaultSubIndicators = [\"VOL\"],\n defaultLocale = \"en-US\",\n periods,\n styles,\n registerExtensions: shouldRegister = true,\n overlays: extraOverlays,\n children,\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n onSettingsChange,\n}: KlinechartsUIOptions): ReactElement {\n // Lazy initializer — runs only once, avoiding a new object on every render.\n const [state, dispatch] = useReducer(\n reducer,\n {\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme,\n defaultTimezone,\n defaultMainIndicators,\n defaultSubIndicators,\n defaultLocale,\n periods,\n styles,\n },\n (opts) => ({\n chart: null,\n datafeed: opts.datafeed,\n symbol: opts.defaultSymbol ?? null,\n period: opts.defaultPeriod ?? (opts.periods ?? DEFAULT_PERIODS)[0],\n theme: opts.defaultTheme ?? \"light\",\n timezone: opts.defaultTimezone ?? \"Asia/Shanghai\",\n isLoading: false,\n locale: opts.defaultLocale ?? \"en-US\",\n periods: opts.periods ?? DEFAULT_PERIODS,\n mainIndicators: opts.defaultMainIndicators ?? [\"MA\"],\n subIndicators: (opts.defaultSubIndicators ?? [\"VOL\"]).reduce(\n (acc, name) => ({ ...acc, [name]: \"\" }),\n {} as Record<string, string>,\n ),\n indicatorAxes: {},\n indicatorVisibility: {},\n alerts: [],\n measure: { isActive: false, fromPoint: null, result: null },\n replay: {\n isReplaying: false,\n isPaused: false,\n speed: 1 as const,\n barIndex: 0,\n totalBars: 0,\n },\n styles: opts.styles,\n screenshotUrl: null,\n }),\n );\n\n const fullscreenContainerRef = useRef<HTMLElement | null>(null);\n const undoRedoListenerRef = useRef<import(\"./types\").UndoRedoListener | null>(null);\n\n // Provider-owned feature resources (single owner across all hook instances).\n const alertTriggeredListenerRef = useRef<\n ((alert: import(\"./featureTypes\").Alert) => void) | null\n >(null);\n const replayIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const replaySavedDataRef = useRef<import(\"react-klinecharts\").KLineData[]>([]);\n const replayIndexRef = useRef<number>(0);\n // Last seen close price, used by the alerts poller to detect crossings.\n const alertPrevCloseRef = useRef<number | null>(null);\n\n // Tracks the current state so enhancedDispatch can compute the new state\n // synchronously (reducer is pure, so we can call it before dispatch).\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // Keep latest callbacks in a ref so enhancedDispatch closure never goes stale.\n const callbacksRef = useRef({\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n });\n callbacksRef.current = {\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n };\n\n /**\n * Wraps dispatch so that per-action callbacks are called synchronously.\n * Because React's dispatch is async, we pre-compute the new state by\n * calling reducer() directly (it is pure) — this gives onStateChange the\n * correct post-action state without any useEffect delay.\n */\n const enhancedDispatch = useCallback((action: KlinechartsUIAction) => {\n const prevState = stateRef.current;\n const newState = reducer(prevState, action);\n stateRef.current = newState; // Update immediately so sequential sync dispatches see the new state\n dispatch(action);\n const cbs = callbacksRef.current;\n cbs.onStateChange?.(action, newState, prevState);\n switch (action.type) {\n case \"SET_SYMBOL\":\n cbs.onSymbolChange?.(action.symbol);\n break;\n case \"SET_PERIOD\":\n cbs.onPeriodChange?.(action.period);\n break;\n case \"SET_THEME\":\n cbs.onThemeChange?.(action.theme);\n break;\n case \"SET_TIMEZONE\":\n cbs.onTimezoneChange?.(action.timezone);\n break;\n case \"SET_MAIN_INDICATORS\":\n cbs.onMainIndicatorsChange?.(action.indicators);\n break;\n case \"SET_SUB_INDICATORS\":\n cbs.onSubIndicatorsChange?.(action.indicators);\n break;\n }\n }, []);\n\n // Capture initial overlays in a ref so the effect doesn't re-run when the\n // consumer passes an inline array (which would be a new reference each render).\n const extraOverlaysRef = useRef(extraOverlays);\n\n useEffect(() => {\n if (shouldRegister) {\n registerExtensions();\n }\n extraOverlaysRef.current?.forEach((overlay) => registerOverlay(overlay));\n }, [shouldRegister]);\n\n useEffect(() => {\n if (state.chart && state.styles) {\n state.chart.setStyles(state.styles);\n }\n }, [state.chart, state.styles]);\n\n // Provider-owned price-alert poller (single owner). Runs one 1s interval —\n // only while there is a chart and at least one alert — reads the live alert\n // list from stateRef, marks crossings triggered, and notifies the listener\n // registered via useAlerts.onAlertTriggered. Replaces the per-hook interval\n // so multiple useAlerts instances can no longer each spawn a poller.\n const hasAlerts = state.alerts.length > 0;\n useEffect(() => {\n const chart = state.chart;\n if (!chart || !hasAlerts) return;\n\n // Seed on (re)start so the first tick never fires a spurious crossing.\n alertPrevCloseRef.current = null;\n\n const interval = setInterval(() => {\n const dataList = chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const currentClose = dataList[dataList.length - 1].close;\n const prevClose = alertPrevCloseRef.current;\n alertPrevCloseRef.current = currentClose;\n if (prevClose === null) return;\n\n const alerts = stateRef.current.alerts;\n let changed = false;\n const next = alerts.map((alert) => {\n if (alert.triggered) return alert;\n\n const crossedUp =\n prevClose < alert.price && currentClose >= alert.price;\n const crossedDown =\n prevClose > alert.price && currentClose <= alert.price;\n const shouldTrigger =\n alert.condition === \"crossing_up\"\n ? crossedUp\n : alert.condition === \"crossing_down\"\n ? crossedDown\n : crossedUp || crossedDown;\n\n if (shouldTrigger) {\n changed = true;\n const triggered = { ...alert, triggered: true };\n alertTriggeredListenerRef.current?.(triggered);\n return triggered;\n }\n return alert;\n });\n\n if (changed) {\n enhancedDispatch({ type: \"SET_ALERTS\", alerts: next });\n }\n }, 1000);\n\n return () => clearInterval(interval);\n }, [state.chart, hasAlerts, enhancedDispatch]);\n\n // Provider owns the replay playback interval — clear it if the provider\n // unmounts (the hook no longer clears it on its own unmount, since the timer\n // is shared across instances).\n useEffect(() => {\n return () => {\n if (replayIntervalRef.current !== null) {\n clearInterval(replayIntervalRef.current);\n replayIntervalRef.current = null;\n }\n };\n }, []);\n\n // Dispatch context is stable — only recreated if datafeed/onSettingsChange\n // reference changes (which should be rare / memoised by the consumer).\n const dispatchValue = useMemo(\n () => ({\n dispatch: enhancedDispatch,\n datafeed,\n onSettingsChange,\n fullscreenContainerRef,\n undoRedoListenerRef,\n alertTriggeredListenerRef,\n replayIntervalRef,\n replaySavedDataRef,\n replayIndexRef,\n }),\n [enhancedDispatch, datafeed, onSettingsChange],\n );\n\n return (\n <KlinechartsUIStateContext.Provider value={state}>\n <KlinechartsUIDispatchContext.Provider value={dispatchValue}>\n {children}\n </KlinechartsUIDispatchContext.Provider>\n </KlinechartsUIStateContext.Provider>\n );\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUIThemeReturn {\n theme: string;\n setTheme: (theme: string) => void;\n toggleTheme: () => void;\n}\n\nexport function useKlinechartsUITheme(): UseKlinechartsUIThemeReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setTheme = useCallback(\n (theme: string) => {\n state.chart?.setStyles(theme);\n dispatch({ type: \"SET_THEME\", theme });\n },\n [state.chart, dispatch]\n );\n\n const toggleTheme = useCallback(() => {\n const newTheme = state.theme === \"light\" ? \"dark\" : \"light\";\n setTheme(newTheme);\n }, [state.theme, setTheme]);\n\n return {\n theme: state.theme,\n setTheme,\n toggleTheme,\n };\n}\n","import { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUILoadingReturn {\n isLoading: boolean;\n}\n\nexport function useKlinechartsUILoading(): UseKlinechartsUILoadingReturn {\n const { state } = useKlinechartsUI();\n return { isLoading: state.isLoading };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface UsePeriodsReturn {\n periods: TerminalPeriod[];\n activePeriod: TerminalPeriod;\n setPeriod: (period: TerminalPeriod) => void;\n}\n\nexport function usePeriods(): UsePeriodsReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setPeriod = useCallback(\n (period: TerminalPeriod) => {\n dispatch({ type: \"SET_PERIOD\", period });\n },\n [dispatch]\n );\n\n return {\n periods: state.periods,\n activePeriod: state.period,\n setPeriod,\n };\n}\n","export interface TimezoneOption {\n key: string;\n localeKey: string;\n}\n\nexport const TIMEZONES: TimezoneOption[] = [\n { key: \"Etc/UTC\", localeKey: \"utc\" },\n { key: \"Pacific/Honolulu\", localeKey: \"honolulu\" },\n { key: \"America/Juneau\", localeKey: \"juneau\" },\n { key: \"America/Los_Angeles\", localeKey: \"los_angeles\" },\n { key: \"America/Chicago\", localeKey: \"chicago\" },\n { key: \"America/Toronto\", localeKey: \"toronto\" },\n { key: \"America/Sao_Paulo\", localeKey: \"sao_paulo\" },\n { key: \"Europe/London\", localeKey: \"london\" },\n { key: \"Europe/Berlin\", localeKey: \"berlin\" },\n { key: \"Asia/Bahrain\", localeKey: \"bahrain\" },\n { key: \"Asia/Dubai\", localeKey: \"dubai\" },\n { key: \"Asia/Ashkhabad\", localeKey: \"ashkhabad\" },\n { key: \"Asia/Almaty\", localeKey: \"almaty\" },\n { key: \"Asia/Bangkok\", localeKey: \"bangkok\" },\n { key: \"Asia/Shanghai\", localeKey: \"shanghai\" },\n { key: \"Asia/Tokyo\", localeKey: \"tokyo\" },\n { key: \"Australia/Sydney\", localeKey: \"sydney\" },\n { key: \"Pacific/Norfolk\", localeKey: \"norfolk\" },\n];\n","import { useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport { TIMEZONES } from \"../data/timezones\";\n\nexport interface TimezoneItem {\n key: string;\n localeKey: string;\n}\n\nexport interface UseTimezoneReturn {\n timezones: TimezoneItem[];\n activeTimezone: string;\n setTimezone: (timezone: string) => void;\n}\n\nexport function useTimezone(): UseTimezoneReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const timezones = useMemo(\n () =>\n TIMEZONES.map((tz) => ({\n key: tz.key,\n localeKey: tz.localeKey,\n })),\n []\n );\n\n const setTimezone = useCallback(\n (timezone: string) => {\n state.chart?.setTimezone(timezone);\n dispatch({ type: \"SET_TIMEZONE\", timezone });\n },\n [state.chart, dispatch]\n );\n\n return {\n timezones,\n activeTimezone: state.timezone,\n setTimezone,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { PartialSymbolInfo } from \"../provider/types\";\n\nexport interface UseSymbolSearchReturn {\n query: string;\n results: PartialSymbolInfo[];\n isSearching: boolean;\n activeSymbol: PartialSymbolInfo | null;\n setQuery: (query: string) => void;\n selectSymbol: (symbol: PartialSymbolInfo) => void;\n clearResults: () => void;\n}\n\nexport function useSymbolSearch(debounceMs = 300): UseSymbolSearchReturn {\n const { state, dispatch, datafeed } = useKlinechartsUI();\n const [query, setQueryState] = useState(\"\");\n const [results, setResults] = useState<PartialSymbolInfo[]>([]);\n const [isSearching, setIsSearching] = useState(false);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // AbortController for the in-flight fetch — cancelled when a new query arrives.\n const abortRef = useRef<AbortController | null>(null);\n\n const setQuery = useCallback(\n (q: string) => {\n setQueryState(q);\n\n // Cancel previous debounce timer.\n if (timerRef.current) clearTimeout(timerRef.current);\n\n // Cancel previous in-flight request.\n abortRef.current?.abort();\n abortRef.current = null;\n\n if (!q.trim()) {\n setResults([]);\n setIsSearching(false);\n return;\n }\n\n setIsSearching(true);\n timerRef.current = setTimeout(async () => {\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const data = await datafeed.searchSymbols(q, controller.signal);\n if (!controller.signal.aborted) {\n setResults(data);\n }\n } catch {\n if (!controller.signal.aborted) {\n setResults([]);\n }\n } finally {\n if (!controller.signal.aborted) {\n setIsSearching(false);\n }\n }\n }, debounceMs);\n },\n [datafeed, debounceMs]\n );\n\n const selectSymbol = useCallback(\n (symbol: PartialSymbolInfo) => {\n dispatch({ type: \"SET_SYMBOL\", symbol });\n setQueryState(\"\");\n setResults([]);\n },\n [dispatch]\n );\n\n const clearResults = useCallback(() => {\n setQueryState(\"\");\n setResults([]);\n setIsSearching(false);\n }, []);\n\n // Cleanup on unmount.\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n abortRef.current?.abort();\n };\n }, []);\n\n return {\n query,\n results,\n isSearching,\n activeSymbol: state.symbol,\n setQuery,\n selectSymbol,\n clearResults,\n };\n}\n","export interface IndicatorParamConfig {\n label: string;\n defaultValue: number;\n}\n\nexport interface IndicatorDefinition {\n name: string;\n localeKey: string;\n params: IndicatorParamConfig[];\n}\n\nexport const MAIN_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"SMA\",\n \"BOLL\",\n \"SAR\",\n \"BBI\",\n \"BOLL_TV\",\n \"Ichimoku\",\n \"SuperTrend\",\n \"HMA\",\n \"VWAP\",\n \"PivotPoints\",\n \"MA_Ribbon\",\n];\n\nexport const SUB_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"VOL\",\n \"MACD\",\n \"BOLL\",\n \"KDJ\",\n \"RSI\",\n \"BIAS\",\n \"BRAR\",\n \"CCI\",\n \"DMI\",\n \"CR\",\n \"PSY\",\n \"DMA\",\n \"TRIX\",\n \"OBV\",\n \"VR\",\n \"WR\",\n \"MTM\",\n \"EMV\",\n \"SAR\",\n \"SMA\",\n \"ROC\",\n \"PVT\",\n \"BBI\",\n \"AO\",\n \"MACD_TV\",\n \"RSI_TV\",\n \"CCI_TV\",\n \"Stochastic\",\n];\n\nexport const INDICATOR_PARAMS: Record<string, IndicatorDefinition> = {\n SMA: {\n name: \"SMA\",\n localeKey: \"sma\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 2 },\n ],\n },\n BOLL: {\n name: \"BOLL\",\n localeKey: \"boll\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"standard_deviation\", defaultValue: 2 },\n ],\n },\n SAR: {\n name: \"SAR\",\n localeKey: \"sar\",\n params: [\n { label: \"params_1\", defaultValue: 2 },\n { label: \"params_2\", defaultValue: 2 },\n { label: \"params_3\", defaultValue: 20 },\n ],\n },\n BBI: {\n name: \"BBI\",\n localeKey: \"bbi\",\n params: [\n { label: \"params_1\", defaultValue: 3 },\n { label: \"params_2\", defaultValue: 6 },\n { label: \"params_3\", defaultValue: 12 },\n { label: \"params_4\", defaultValue: 24 },\n ],\n },\n MACD: {\n name: \"MACD\",\n localeKey: \"macd\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 26 },\n { label: \"params_3\", defaultValue: 9 },\n ],\n },\n KDJ: {\n name: \"KDJ\",\n localeKey: \"kdj\",\n params: [\n { label: \"params_1\", defaultValue: 9 },\n { label: \"params_2\", defaultValue: 3 },\n { label: \"params_3\", defaultValue: 3 },\n ],\n },\n BRAR: {\n name: \"BRAR\",\n localeKey: \"brar\",\n params: [{ label: \"params_1\", defaultValue: 26 }],\n },\n CCI: {\n name: \"CCI\",\n localeKey: \"cci\",\n params: [{ label: \"params_1\", defaultValue: 20 }],\n },\n DMI: {\n name: \"DMI\",\n localeKey: \"dmi\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n CR: {\n name: \"CR\",\n localeKey: \"cr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 10 },\n { label: \"params_3\", defaultValue: 20 },\n { label: \"params_4\", defaultValue: 40 },\n { label: \"params_5\", defaultValue: 60 },\n ],\n },\n PSY: {\n name: \"PSY\",\n localeKey: \"psy\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n DMA: {\n name: \"DMA\",\n localeKey: \"dma\",\n params: [\n { label: \"params_1\", defaultValue: 10 },\n { label: \"params_2\", defaultValue: 50 },\n { label: \"params_3\", defaultValue: 10 },\n ],\n },\n TRIX: {\n name: \"TRIX\",\n localeKey: \"trix\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n OBV: {\n name: \"OBV\",\n localeKey: \"obv\",\n params: [{ label: \"params_1\", defaultValue: 30 }],\n },\n VR: {\n name: \"VR\",\n localeKey: \"vr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n MTM: {\n name: \"MTM\",\n localeKey: \"mtm\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n EMV: {\n name: \"EMV\",\n localeKey: \"emv\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n ROC: {\n name: \"ROC\",\n localeKey: \"roc\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n PVT: {\n name: \"PVT\",\n localeKey: \"pvt\",\n params: [],\n },\n AO: {\n name: \"AO\",\n localeKey: \"ao\",\n params: [\n { label: \"params_1\", defaultValue: 5 },\n { label: \"params_2\", defaultValue: 34 },\n ],\n },\n BOLL_TV: {\n name: \"BOLL_TV\",\n localeKey: \"boll_tv\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"multiplier\", defaultValue: 2 },\n ],\n },\n Ichimoku: {\n name: \"Ichimoku\",\n localeKey: \"ichimoku\",\n params: [\n { label: \"tenkan\", defaultValue: 9 },\n { label: \"kijun\", defaultValue: 26 },\n { label: \"senkou_b\", defaultValue: 52 },\n { label: \"offset\", defaultValue: 26 },\n ],\n },\n SuperTrend: {\n name: \"SuperTrend\",\n localeKey: \"super_trend\",\n params: [\n { label: \"period\", defaultValue: 10 },\n { label: \"factor\", defaultValue: 3 },\n ],\n },\n HMA: {\n name: \"HMA\",\n localeKey: \"hma\",\n params: [{ label: \"period\", defaultValue: 9 }],\n },\n VWAP: {\n name: \"VWAP\",\n localeKey: \"vwap\",\n params: [],\n },\n PivotPoints: {\n name: \"PivotPoints\",\n localeKey: \"pivot_points\",\n params: [],\n },\n MA_Ribbon: {\n name: \"MA_Ribbon\",\n localeKey: \"ma_ribbon\",\n params: [\n { label: \"period_1\", defaultValue: 10 },\n { label: \"period_2\", defaultValue: 20 },\n { label: \"period_3\", defaultValue: 30 },\n { label: \"period_4\", defaultValue: 40 },\n ],\n },\n MACD_TV: {\n name: \"MACD_TV\",\n localeKey: \"macd_tv\",\n params: [\n { label: \"fast\", defaultValue: 12 },\n { label: \"slow\", defaultValue: 26 },\n { label: \"signal\", defaultValue: 9 },\n ],\n },\n RSI_TV: {\n name: \"RSI_TV\",\n localeKey: \"rsi_tv\",\n params: [\n { label: \"rsi_period\", defaultValue: 14 },\n { label: \"ma_period\", defaultValue: 14 },\n ],\n },\n CCI_TV: {\n name: \"CCI_TV\",\n localeKey: \"cci_tv\",\n params: [{ label: \"period\", defaultValue: 20 }],\n },\n Stochastic: {\n name: \"Stochastic\",\n localeKey: \"stochastic\",\n params: [\n { label: \"period\", defaultValue: 14 },\n { label: \"smooth_k\", defaultValue: 3 },\n { label: \"smooth_d\", defaultValue: 3 },\n ],\n },\n};\n","import { useCallback, useMemo, useRef } from \"react\";\nimport type { YAxisOverride } from \"react-klinecharts\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\nimport {\n MAIN_INDICATORS,\n SUB_INDICATORS,\n INDICATOR_PARAMS,\n} from \"../data/indicators\";\n\nexport interface IndicatorInfo {\n name: string;\n isActive: boolean;\n /**\n * Whether the indicator is currently visible on the chart. Defaults to\n * `true`; only `false` after the indicator has been hidden via\n * `setIndicatorVisible` or `collapseSubIndicator`. Meaningful only when\n * `isActive` is `true` (inactive indicators are always reported `true`).\n */\n visible: boolean;\n}\n\n/** Options accepted when adding an indicator. */\nexport interface AddIndicatorOptions {\n /**\n * Bind the indicator to a custom Y-axis (klinecharts v10 multiple y-axes).\n * Provide a stable `id` to create/share a secondary axis; e.g.\n * `{ id: \"rsi_axis\", position: \"left\" }`. Omit to use the pane's default\n * (shared) axis.\n */\n yAxis?: YAxisOverride;\n}\n\nexport interface UseIndicatorsReturn {\n mainIndicators: IndicatorInfo[];\n subIndicators: IndicatorInfo[];\n activeMainIndicators: string[];\n activeSubIndicators: Record<string, string>;\n availableMainIndicators: string[];\n availableSubIndicators: string[];\n addMainIndicator: (name: string, options?: AddIndicatorOptions) => void;\n removeMainIndicator: (name: string) => void;\n addSubIndicator: (name: string, options?: AddIndicatorOptions) => void;\n removeSubIndicator: (name: string) => void;\n toggleMainIndicator: (name: string) => void;\n toggleSubIndicator: (name: string) => void;\n moveToMain: (name: string) => void;\n moveToSub: (name: string) => void;\n setIndicatorVisible: (\n name: string,\n isMain: boolean,\n visible: boolean,\n ) => void;\n /**\n * Read whether an indicator is currently visible. Returns `true` for the\n * default (un-toggled) state and for inactive indicators. This is the\n * reactive read counterpart to `setIndicatorVisible` — UI no longer needs to\n * track visibility locally or reach into the chart instance.\n */\n isIndicatorVisible: (name: string, isMain: boolean) => boolean;\n updateIndicatorParams: (\n name: string,\n paneId: string,\n params: number[],\n ) => void;\n getIndicatorParams: (\n name: string,\n ) => { label: string; defaultValue: number }[];\n isMainIndicatorActive: (name: string) => boolean;\n isSubIndicatorActive: (name: string) => boolean;\n /** Collapse a sub-indicator pane to minimal height (30px). */\n collapseSubIndicator: (name: string) => void;\n /** Expand a previously collapsed sub-indicator pane to its prior height. */\n expandSubIndicator: (name: string) => void;\n /** Whether the given sub-indicator pane is currently collapsed. */\n isSubIndicatorCollapsed: (name: string) => boolean;\n /** Reorder a sub-indicator pane up or down relative to other sub-indicators. */\n reorderSubIndicator: (name: string, direction: \"up\" | \"down\") => void;\n /**\n * Custom Y-axis bindings, keyed by indicator id (`main_<name>` /\n * `sub_<name>`). Only contains indicators bound to a secondary axis.\n */\n indicatorAxes: Record<string, string>;\n /** Get the custom `yAxisId` an indicator is bound to, or `undefined` for the default axis. */\n getIndicatorAxis: (name: string, isMain: boolean) => string | undefined;\n /**\n * Visibility overrides keyed by indicator id (`main_<name>` / `sub_<name>`).\n * Only contains indicators hidden away from the default; an absent key means\n * visible. Mirror of the provider state, exposed for layout-preset\n * persistence and direct rendering.\n */\n indicatorVisibility: Record<string, boolean>;\n /**\n * Rebind an existing indicator to a different Y-axis. Because klinecharts v10\n * `overrideIndicator` cannot change axis binding, this removes and recreates\n * the indicator (preserving calc params, styles and visibility).\n * Pass `yAxis` to bind to a secondary axis, or omit it to return the\n * indicator to the pane's default (shared) axis.\n */\n bindIndicatorToNewAxis: (\n name: string,\n isMain: boolean,\n yAxis?: YAxisOverride,\n ) => void;\n}\n\nconst COLLAPSED_HEIGHT = 30;\n\nexport function useIndicators(): UseIndicatorsReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n\n // Track original pane heights for collapse/expand\n const paneHeightsRef = useRef<Record<string, number>>({});\n const collapsedPanesRef = useRef<Set<string>>(new Set());\n\n const mainIndicators = useMemo(() => {\n const activeNames = state.mainIndicators;\n const inactive = MAIN_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({\n name,\n isActive: true,\n visible: state.indicatorVisibility[`main_${name}`] ?? true,\n })),\n ...inactive.map((name) => ({ name, isActive: false, visible: true })),\n ];\n }, [state.mainIndicators, state.indicatorVisibility]);\n\n const subIndicators = useMemo(() => {\n const activeNames = Object.keys(state.subIndicators);\n const inactive = SUB_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({\n name,\n isActive: true,\n visible: state.indicatorVisibility[`sub_${name}`] ?? true,\n })),\n ...inactive.map((name) => ({ name, isActive: false, visible: true })),\n ];\n }, [state.subIndicators, state.indicatorVisibility]);\n\n const addMainIndicator = useCallback(\n (name: string, options?: AddIndicatorOptions) => {\n if (state.mainIndicators.includes(name)) return;\n const yAxis = options?.yAxis;\n state.chart?.createIndicator(\n { name, id: `main_${name}` },\n { isStack: true, pane: { id: \"candle_pane\" }, yAxis },\n );\n const newIndicators = [...state.mainIndicators, name];\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n if (yAxis?.id) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [`main_${name}`]: yAxis.id },\n });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: false,\n isMain: true,\n paneId: \"candle_pane\",\n yAxisId: yAxis?.id,\n },\n });\n },\n [state.chart, state.mainIndicators, state.indicatorAxes, dispatch, undoRedoListenerRef],\n );\n\n const removeMainIndicator = useCallback(\n (name: string) => {\n const id = `main_${name}`;\n const yAxisId = state.indicatorAxes[id];\n state.chart?.removeIndicator({ id });\n const newIndicators = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n if (yAxisId) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n if (id in state.indicatorVisibility) {\n const nextVisibility = { ...state.indicatorVisibility };\n delete nextVisibility[id];\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: true, isMain: true, paneId: \"candle_pane\", yAxisId },\n });\n },\n [\n state.chart,\n state.mainIndicators,\n state.indicatorAxes,\n state.indicatorVisibility,\n dispatch,\n undoRedoListenerRef,\n ],\n );\n\n const addSubIndicator = useCallback(\n (name: string, options?: AddIndicatorOptions) => {\n if (name in state.subIndicators) return;\n const id = `sub_${name}`;\n const yAxis = options?.yAxis;\n state.chart?.createIndicator({ name, id }, { yAxis });\n const paneId = state.chart?.getIndicators({ id })?.[0]?.paneId ?? \"\";\n const newIndicators = { ...state.subIndicators, [name]: paneId };\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n if (yAxis?.id) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [id]: yAxis.id },\n });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: false, isMain: false, paneId, yAxisId: yAxis?.id },\n });\n },\n [state.chart, state.subIndicators, state.indicatorAxes, dispatch, undoRedoListenerRef],\n );\n\n const removeSubIndicator = useCallback(\n (name: string) => {\n const id = `sub_${name}`;\n const paneId = state.subIndicators[name] ?? \"\";\n const yAxisId = state.indicatorAxes[id];\n state.chart?.removeIndicator({ id });\n const newIndicators = { ...state.subIndicators };\n delete newIndicators[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n if (yAxisId) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n if (id in state.indicatorVisibility) {\n const nextVisibility = { ...state.indicatorVisibility };\n delete nextVisibility[id];\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: true, isMain: false, paneId, yAxisId },\n });\n },\n [\n state.chart,\n state.subIndicators,\n state.indicatorAxes,\n state.indicatorVisibility,\n dispatch,\n undoRedoListenerRef,\n ],\n );\n\n const toggleMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) {\n removeMainIndicator(name);\n } else {\n addMainIndicator(name);\n }\n },\n [state.mainIndicators, addMainIndicator, removeMainIndicator],\n );\n\n const toggleSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) {\n removeSubIndicator(name);\n } else {\n addSubIndicator(name);\n }\n },\n [state.subIndicators, addSubIndicator, removeSubIndicator],\n );\n\n const setIndicatorVisible = useCallback(\n (name: string, isMain: boolean, visible: boolean) => {\n const id = isMain ? `main_${name}` : `sub_${name}`;\n state.chart?.overrideIndicator({ name, id, visible });\n // Mirror into provider state so `isIndicatorVisible` / the `visible`\n // field stay reactive. Keep the map sparse: drop the key when visible\n // (the default) instead of storing `true`.\n const nextVisibility = { ...state.indicatorVisibility };\n if (visible) delete nextVisibility[id];\n else nextVisibility[id] = false;\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n },\n [state.chart, state.indicatorVisibility, dispatch],\n );\n\n const isIndicatorVisible = useCallback(\n (name: string, isMain: boolean) =>\n state.indicatorVisibility[isMain ? `main_${name}` : `sub_${name}`] ?? true,\n [state.indicatorVisibility],\n );\n\n const updateIndicatorParams = useCallback(\n // `paneId` is kept in the signature for API stability; klinecharts v10\n // `overrideIndicator` no longer accepts it and targets by name/id instead.\n (name: string, _paneId: string, params: number[]) => {\n state.chart?.overrideIndicator({ name, calcParams: params });\n },\n [state.chart],\n );\n\n const getIndicatorParams = useCallback((name: string) => {\n const config = INDICATOR_PARAMS[name];\n if (!config) return [];\n return config.params.map((p) => ({\n label: p.label,\n defaultValue: p.defaultValue,\n }));\n }, []);\n\n const moveToMain = useCallback(\n (name: string) => {\n if (!state.chart) return;\n const prevCalcParams =\n state.chart.getIndicators({ id: `sub_${name}` })?.[0]?.calcParams;\n state.chart.removeIndicator({ id: `sub_${name}` });\n state.chart.createIndicator(\n {\n name,\n id: `main_${name}`,\n ...(prevCalcParams ? { calcParams: prevCalcParams } : {}),\n },\n { isStack: true, pane: { id: \"candle_pane\" } },\n );\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSub });\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const moveToSub = useCallback(\n (name: string) => {\n if (!state.chart) return;\n const prevCalcParams =\n state.chart.getIndicators({ id: `main_${name}` })?.[0]?.calcParams;\n state.chart.removeIndicator({ id: `main_${name}` });\n const subId = `sub_${name}`;\n state.chart.createIndicator({\n name,\n id: subId,\n ...(prevCalcParams ? { calcParams: prevCalcParams } : {}),\n });\n const paneId =\n state.chart.getIndicators({ id: subId })?.[0]?.paneId ?? \"\";\n const newMain = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newMain });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: { ...state.subIndicators, [name]: paneId },\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const isMainIndicatorActive = useCallback(\n (name: string) => state.mainIndicators.includes(name),\n [state.mainIndicators],\n );\n\n const isSubIndicatorActive = useCallback(\n (name: string) => name in state.subIndicators,\n [state.subIndicators],\n );\n\n const collapseSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n if (!state.chart || !paneId) return;\n\n const currentSize = (state.chart as any).getSize?.(paneId);\n if (currentSize?.height && currentSize.height > COLLAPSED_HEIGHT) {\n paneHeightsRef.current[paneId] = currentSize.height;\n }\n collapsedPanesRef.current.add(paneId);\n\n (state.chart as any).setPaneOptions?.({\n id: paneId,\n height: COLLAPSED_HEIGHT,\n });\n const id = `sub_${name}`;\n state.chart.overrideIndicator({ name, id, visible: false });\n dispatch({\n type: \"SET_INDICATOR_VISIBILITY\",\n visibility: { ...state.indicatorVisibility, [id]: false },\n });\n },\n [state.chart, state.subIndicators, state.indicatorVisibility, dispatch],\n );\n\n const expandSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n if (!state.chart || !paneId) return;\n\n const savedHeight = paneHeightsRef.current[paneId] ?? 100;\n collapsedPanesRef.current.delete(paneId);\n\n (state.chart as any).setPaneOptions?.({\n id: paneId,\n height: savedHeight,\n });\n const id = `sub_${name}`;\n state.chart.overrideIndicator({ name, id, visible: true });\n const nextVisibility = { ...state.indicatorVisibility };\n delete nextVisibility[id];\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n },\n [state.chart, state.subIndicators, state.indicatorVisibility, dispatch],\n );\n\n const isSubIndicatorCollapsed = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n return paneId ? collapsedPanesRef.current.has(paneId) : false;\n },\n [state.subIndicators],\n );\n\n const reorderSubIndicator = useCallback(\n (name: string, direction: \"up\" | \"down\") => {\n if (!state.chart) return;\n\n const subNames = Object.keys(state.subIndicators);\n const idx = subNames.indexOf(name);\n if (idx === -1) return;\n\n const swapIdx = direction === \"up\" ? idx - 1 : idx + 1;\n if (swapIdx < 0 || swapIdx >= subNames.length) return;\n\n // Collect full indicator state for all sub-indicators\n const subStates = subNames.map((n) => {\n const id = `sub_${n}`;\n const indicator = state.chart!.getIndicators({ id })?.[0];\n return {\n name: n,\n calcParams: indicator?.calcParams,\n visible: indicator?.visible ?? true,\n styles: indicator?.styles,\n paneId: state.subIndicators[n],\n };\n });\n\n // Swap the two entries\n [subStates[idx], subStates[swapIdx]] = [subStates[swapIdx], subStates[idx]];\n\n // Remove all sub-indicators\n for (const n of subNames) {\n state.chart!.removeIndicator({ id: `sub_${n}` });\n }\n\n // Recreate in new order\n const newSubIndicators: Record<string, string> = {};\n for (const sub of subStates) {\n const id = `sub_${sub.name}`;\n state.chart!.createIndicator({\n name: sub.name,\n id,\n ...(sub.calcParams ? { calcParams: sub.calcParams } : {}),\n visible: sub.visible,\n });\n const paneId =\n state.chart!.getIndicators({ id })?.[0]?.paneId ?? \"\";\n newSubIndicators[sub.name] = paneId;\n\n if (sub.styles) {\n state.chart!.overrideIndicator({\n name: sub.name,\n id,\n styles: sub.styles,\n });\n }\n }\n\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSubIndicators });\n },\n [state.chart, state.subIndicators, dispatch],\n );\n\n const getIndicatorAxis = useCallback(\n (name: string, isMain: boolean) =>\n state.indicatorAxes[isMain ? `main_${name}` : `sub_${name}`],\n [state.indicatorAxes],\n );\n\n const bindIndicatorToNewAxis = useCallback(\n (name: string, isMain: boolean, yAxis?: YAxisOverride) => {\n if (!state.chart) return;\n const id = isMain ? `main_${name}` : `sub_${name}`;\n const current = state.chart.getIndicators({ id })?.[0];\n if (!current) return;\n\n // Snapshot the indicator before recreating it on a different axis.\n const calcParams = current.calcParams;\n const styles = current.styles;\n const visible = current.visible ?? true;\n // Main indicators live on the candle pane; sub-indicators keep their pane.\n const paneId = isMain\n ? \"candle_pane\"\n : (current.paneId ?? state.subIndicators[name] ?? \"\");\n\n state.chart.removeIndicator({ id });\n state.chart.createIndicator(\n {\n name,\n id,\n ...(calcParams ? { calcParams } : {}),\n visible,\n },\n {\n isStack: isMain,\n ...(paneId ? { pane: { id: paneId } } : {}),\n yAxis,\n },\n );\n if (styles) {\n state.chart.overrideIndicator({ name, id, styles });\n }\n\n const nextAxes = { ...state.indicatorAxes };\n if (yAxis?.id) nextAxes[id] = yAxis.id;\n else delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n },\n [state.chart, state.indicatorAxes, state.subIndicators, dispatch],\n );\n\n return {\n mainIndicators,\n subIndicators,\n activeMainIndicators: state.mainIndicators,\n activeSubIndicators: state.subIndicators,\n availableMainIndicators: MAIN_INDICATORS,\n availableSubIndicators: SUB_INDICATORS,\n addMainIndicator,\n removeMainIndicator,\n addSubIndicator,\n removeSubIndicator,\n toggleMainIndicator,\n toggleSubIndicator,\n moveToMain,\n moveToSub,\n setIndicatorVisible,\n isIndicatorVisible,\n updateIndicatorParams,\n getIndicatorParams,\n isMainIndicatorActive,\n isSubIndicatorActive,\n collapseSubIndicator,\n expandSubIndicator,\n isSubIndicatorCollapsed,\n reorderSubIndicator,\n indicatorAxes: state.indicatorAxes,\n getIndicatorAxis,\n indicatorVisibility: state.indicatorVisibility,\n bindIndicatorToNewAxis,\n };\n}\n","export interface DrawingTool {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingToolCategory {\n key: string;\n tools: DrawingTool[];\n}\n\nexport const DRAWING_CATEGORIES: DrawingToolCategory[] = [\n {\n key: \"singleLine\",\n tools: [\n { name: \"horizontalStraightLine\", localeKey: \"horizontal_straight_line\" },\n { name: \"horizontalRayLine\", localeKey: \"horizontal_ray_line\" },\n { name: \"horizontalSegment\", localeKey: \"horizontal_segment\" },\n { name: \"verticalStraightLine\", localeKey: \"vertical_straight_line\" },\n { name: \"verticalRayLine\", localeKey: \"vertical_ray_line\" },\n { name: \"verticalSegment\", localeKey: \"vertical_segment\" },\n { name: \"straightLine\", localeKey: \"straight_line\" },\n { name: \"rayLine\", localeKey: \"ray_line\" },\n { name: \"segment\", localeKey: \"segment\" },\n { name: \"arrow\", localeKey: \"arrow\" },\n { name: \"priceLine\", localeKey: \"price_line\" },\n ],\n },\n {\n key: \"moreLine\",\n tools: [\n { name: \"priceChannelLine\", localeKey: \"price_channel_line\" },\n { name: \"parallelStraightLine\", localeKey: \"parallel_straight_line\" },\n { name: \"ray\", localeKey: \"ray\" },\n { name: \"parallelChannel\", localeKey: \"parallel_channel\" },\n ],\n },\n {\n key: \"polygon\",\n tools: [\n { name: \"circle\", localeKey: \"circle\" },\n { name: \"rect\", localeKey: \"rect\" },\n { name: \"parallelogram\", localeKey: \"parallelogram\" },\n { name: \"triangle\", localeKey: \"triangle\" },\n ],\n },\n {\n key: \"fibonacci\",\n tools: [\n { name: \"fibonacciLine\", localeKey: \"fibonacci_line\" },\n { name: \"fibonacciSegment\", localeKey: \"fibonacci_segment\" },\n { name: \"fibonacciCircle\", localeKey: \"fibonacci_circle\" },\n { name: \"fibonacciSpiral\", localeKey: \"fibonacci_spiral\" },\n {\n name: \"fibonacciSpeedResistanceFan\",\n localeKey: \"fibonacci_speed_resistance_fan\",\n },\n { name: \"fibonacciExtension\", localeKey: \"fibonacci_extension\" },\n { name: \"fibRetracement\", localeKey: \"fib_retracement\" },\n { name: \"gannBox\", localeKey: \"gann_box\" },\n { name: \"gannFan\", localeKey: \"gann_fan\" },\n ],\n },\n {\n key: \"wave\",\n tools: [\n { name: \"xabcd\", localeKey: \"xabcd\" },\n { name: \"abcd\", localeKey: \"abcd\" },\n { name: \"threeWaves\", localeKey: \"three_waves\" },\n { name: \"fiveWaves\", localeKey: \"five_waves\" },\n { name: \"eightWaves\", localeKey: \"eight_waves\" },\n { name: \"anyWaves\", localeKey: \"any_waves\" },\n { name: \"elliottWave\", localeKey: \"elliott_wave\" },\n ],\n },\n {\n key: \"measure\",\n tools: [\n { name: \"measure\", localeKey: \"measure\" },\n ],\n },\n {\n key: \"position\",\n tools: [\n { name: \"longPosition\", localeKey: \"long_position\" },\n { name: \"shortPosition\", localeKey: \"short_position\" },\n ],\n },\n {\n key: \"annotation\",\n tools: [\n { name: \"brush\", localeKey: \"brush\" },\n ],\n },\n];\n\nexport type MagnetMode = \"normal\" | \"weak\" | \"strong\";\n","import { useState, useCallback, useMemo, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\nimport { DRAWING_CATEGORIES, type MagnetMode } from \"../data/drawings\";\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\nexport interface DrawingToolItem {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingCategoryItem {\n key: string;\n tools: DrawingToolItem[];\n}\n\nexport interface UseDrawingToolsReturn {\n categories: DrawingCategoryItem[];\n activeTool: string | null;\n magnetMode: MagnetMode;\n isLocked: boolean;\n isVisible: boolean;\n /** Whether drawing tools auto-retrigger after completing a shape. Default: true. */\n autoRetrigger: boolean;\n selectTool: (name: string) => void;\n clearActiveTool: () => void;\n setMagnetMode: (mode: MagnetMode) => void;\n toggleLock: () => void;\n toggleVisibility: () => void;\n removeAllDrawings: () => void;\n /** Enable/disable auto-retrigger mode. */\n setAutoRetrigger: (enabled: boolean) => void;\n}\n\nexport function useDrawingTools(): UseDrawingToolsReturn {\n const { state } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n const [activeTool, setActiveTool] = useState<string | null>(null);\n const [magnetMode, setMagnetModeState] = useState<MagnetMode>(\"normal\");\n const [isLocked, setIsLocked] = useState(false);\n const [isVisible, setIsVisible] = useState(true);\n const [autoRetrigger, setAutoRetrigger] = useState(true);\n\n // Refs to capture latest state for the onDrawEnd closure\n const activeToolRef = useRef(activeTool);\n activeToolRef.current = activeTool;\n const autoRetriggerRef = useRef(autoRetrigger);\n autoRetriggerRef.current = autoRetrigger;\n const isLockedRef = useRef(isLocked);\n isLockedRef.current = isLocked;\n const isVisibleRef = useRef(isVisible);\n isVisibleRef.current = isVisible;\n const magnetModeRef = useRef(magnetMode);\n magnetModeRef.current = magnetMode;\n\n const categories = useMemo(\n () =>\n DRAWING_CATEGORIES.map((cat) => ({\n key: cat.key,\n tools: cat.tools.map((tool) => ({\n name: tool.name,\n localeKey: tool.localeKey,\n })),\n })),\n []\n );\n\n const createOverlayForTool = useCallback(\n (name: string) => {\n const mode =\n magnetModeRef.current === \"strong\"\n ? \"strong_magnet\"\n : magnetModeRef.current === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n state.chart?.createOverlay({\n name,\n groupId: DRAWING_GROUP_ID,\n lock: isLockedRef.current,\n visible: isVisibleRef.current,\n mode: mode as any,\n onDrawEnd: (event: any) => {\n const o = event.overlay;\n undoRedoListenerRef.current?.({\n type: \"overlay_added\",\n data: {\n id: o.id,\n overlayData: {\n name: o.name,\n points: o.points,\n styles: o.styles,\n extendData: o.extendData,\n },\n },\n });\n // Auto-retrigger: immediately start another overlay of the same type\n if (autoRetriggerRef.current && activeToolRef.current === name) {\n requestAnimationFrame(() => {\n createOverlayForTool(name);\n });\n }\n },\n });\n },\n [state.chart, undoRedoListenerRef],\n );\n\n const selectTool = useCallback(\n (name: string) => {\n setActiveTool(name);\n createOverlayForTool(name);\n },\n [createOverlayForTool],\n );\n\n const clearActiveTool = useCallback(() => {\n setActiveTool(null);\n }, []);\n\n const setMagnetMode = useCallback(\n (mode: MagnetMode) => {\n setMagnetModeState(mode);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n const overlayMode =\n mode === \"strong\"\n ? \"strong_magnet\"\n : mode === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n mode: overlayMode as any,\n });\n });\n }\n },\n [state.chart]\n );\n\n const toggleLock = useCallback(() => {\n const newLocked = !isLocked;\n setIsLocked(newLocked);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n lock: newLocked,\n });\n });\n }\n }, [state.chart, isLocked]);\n\n const toggleVisibility = useCallback(() => {\n const newVisible = !isVisible;\n setIsVisible(newVisible);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n visible: newVisible,\n });\n });\n }\n }, [state.chart, isVisible]);\n\n const removeAllDrawings = useCallback(() => {\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays && overlays.length > 0) {\n const snapshot = overlays.map((o: any) => ({\n name: o.name,\n id: o.id,\n points: o.points,\n styles: o.styles,\n extendData: o.extendData,\n }));\n undoRedoListenerRef.current?.({\n type: \"overlays_removed\",\n data: { overlays: snapshot },\n });\n }\n state.chart?.removeOverlay({ groupId: DRAWING_GROUP_ID });\n setActiveTool(null);\n }, [state.chart, undoRedoListenerRef]);\n\n return {\n categories,\n activeTool,\n magnetMode,\n isLocked,\n isVisible,\n autoRetrigger,\n selectTool,\n clearActiveTool,\n setMagnetMode,\n toggleLock,\n toggleVisibility,\n removeAllDrawings,\n setAutoRetrigger,\n };\n}\n","export interface CandleTypeOption {\n key: string;\n localeKey: string;\n}\n\nexport const CANDLE_TYPES: CandleTypeOption[] = [\n { key: \"candle_solid\", localeKey: \"candle_solid\" },\n { key: \"candle_stroke\", localeKey: \"candle_stroke\" },\n { key: \"candle_up_stroke\", localeKey: \"candle_up_stroke\" },\n { key: \"candle_down_stroke\", localeKey: \"candle_down_stroke\" },\n { key: \"ohlc\", localeKey: \"ohlc\" },\n { key: \"area\", localeKey: \"area\" },\n];\n\nexport const PRICE_AXIS_TYPES = [\"normal\", \"percentage\", \"logarithm\"] as const;\nexport type PriceAxisType = (typeof PRICE_AXIS_TYPES)[number];\n\nexport const YAXIS_POSITIONS = [\"left\", \"right\"] as const;\nexport type YAxisPosition = (typeof YAXIS_POSITIONS)[number];\n\nexport const COMPARE_RULES = [\"current_open\", \"prev_close\"] as const;\nexport type CompareRule = (typeof COMPARE_RULES)[number];\n\nexport const TOOLTIP_SHOW_RULES = [\"always\", \"follow_cross\", \"none\"] as const;\nexport type TooltipShowRule = (typeof TOOLTIP_SHOW_RULES)[number];\n","import { useState, useCallback, useMemo, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport {\n CANDLE_TYPES,\n PRICE_AXIS_TYPES,\n YAXIS_POSITIONS,\n COMPARE_RULES,\n TOOLTIP_SHOW_RULES,\n type PriceAxisType,\n type YAxisPosition,\n type CompareRule,\n type TooltipShowRule,\n} from \"../data/candle-types\";\n\nexport interface CandleTypeItem {\n key: string;\n localeKey: string;\n}\n\nexport interface KlinechartsUISettingsState {\n // Candle\n candleType: string;\n candleUpColor: string;\n candleDownColor: string;\n compareRule: CompareRule;\n // Price marks\n showLastPrice: boolean;\n showLastPriceLine: boolean;\n showHighPrice: boolean;\n showLowPrice: boolean;\n showIndicatorLastValue: boolean;\n // Axis\n priceAxisType: PriceAxisType;\n yAxisPosition: YAxisPosition;\n yAxisInside: boolean;\n reverseCoordinate: boolean;\n showTimeAxis: boolean;\n // Chart elements\n showGrid: boolean;\n showCrosshair: boolean;\n // Tooltips\n showCandleTooltip: boolean;\n showIndicatorTooltip: boolean;\n tooltipShowRule: TooltipShowRule;\n}\n\nexport interface UseKlinechartsUISettingsReturn extends KlinechartsUISettingsState {\n candleTypes: CandleTypeItem[];\n priceAxisTypes: { key: PriceAxisType; localeKey: string }[];\n yAxisPositions: { key: YAxisPosition; localeKey: string }[];\n compareRules: { key: CompareRule; localeKey: string }[];\n tooltipShowRules: { key: TooltipShowRule; localeKey: string }[];\n setCandleType: (type: string) => void;\n setCandleUpColor: (color: string) => void;\n setCandleDownColor: (color: string) => void;\n setCompareRule: (rule: CompareRule) => void;\n setShowLastPrice: (show: boolean) => void;\n setShowLastPriceLine: (show: boolean) => void;\n setShowHighPrice: (show: boolean) => void;\n setShowLowPrice: (show: boolean) => void;\n setShowIndicatorLastValue: (show: boolean) => void;\n setPriceAxisType: (type: PriceAxisType) => void;\n setYAxisPosition: (position: YAxisPosition) => void;\n setYAxisInside: (inside: boolean) => void;\n setReverseCoordinate: (reverse: boolean) => void;\n setShowTimeAxis: (show: boolean) => void;\n setShowGrid: (show: boolean) => void;\n setShowCrosshair: (show: boolean) => void;\n setShowCandleTooltip: (show: boolean) => void;\n setShowIndicatorTooltip: (show: boolean) => void;\n setTooltipShowRule: (rule: TooltipShowRule) => void;\n resetToDefaults: () => void;\n}\n\nconst defaultSettings: KlinechartsUISettingsState = {\n candleType: \"candle_solid\",\n candleUpColor: \"#2DC08E\",\n candleDownColor: \"#F92855\",\n compareRule: \"current_open\",\n showLastPrice: true,\n showLastPriceLine: true,\n showHighPrice: true,\n showLowPrice: true,\n showIndicatorLastValue: true,\n priceAxisType: \"normal\",\n yAxisPosition: \"right\",\n yAxisInside: false,\n reverseCoordinate: false,\n showTimeAxis: true,\n showGrid: true,\n showCrosshair: true,\n showCandleTooltip: true,\n showIndicatorTooltip: true,\n tooltipShowRule: \"always\",\n};\n\nexport function useKlinechartsUISettings(): UseKlinechartsUISettingsReturn {\n const { state, onSettingsChange } = useKlinechartsUI();\n const [settings, setSettings] = useState<KlinechartsUISettingsState>(defaultSettings);\n const isInitialMount = useRef(true);\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n onSettingsChange?.({ ...settings });\n }, [settings, onSettingsChange]);\n\n const candleTypes = useMemo(\n () =>\n CANDLE_TYPES.map((ct) => ({\n key: ct.key,\n localeKey: ct.localeKey,\n })),\n []\n );\n\n const priceAxisTypes = useMemo(\n () => PRICE_AXIS_TYPES.map((pat) => ({ key: pat, localeKey: pat })),\n []\n );\n\n const yAxisPositions = useMemo(\n () => YAXIS_POSITIONS.map((p) => ({ key: p, localeKey: p })),\n []\n );\n\n const compareRules = useMemo(\n () => COMPARE_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n const tooltipShowRules = useMemo(\n () => TOOLTIP_SHOW_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n const applyPaneAxis = useCallback(\n (axis: Record<string, unknown>) => {\n // klinecharts v10: axis configuration moved off setPaneOptions to\n // overrideYAxis. NOTE: klinecharts beta2 .d.ts mistypes the parameter of\n // `overrideYAxis` as `XAxisOverride` (the param names of overrideYAxis /\n // overrideXAxis are swapped in the core typings), while the runtime\n // correctly applies these fields to the Y (price) axis — hence the cast.\n (\n state.chart as unknown as {\n overrideYAxis?: (axis: Record<string, unknown>) => void;\n }\n )?.overrideYAxis?.({ paneId: \"candle_pane\", ...axis });\n },\n [state.chart]\n );\n\n // Apply initial settings when chart becomes available\n const hasAppliedInitial = useRef(false);\n useEffect(() => {\n if (!state.chart || hasAppliedInitial.current) return;\n hasAppliedInitial.current = true;\n\n // Sync axis settings via overrideYAxis (klinecharts v10: setPaneOptions no\n // longer handles axis configuration).\n const needsAxisOverride =\n settings.reverseCoordinate ||\n settings.priceAxisType !== \"normal\" ||\n settings.yAxisPosition !== \"right\" ||\n settings.yAxisInside;\n if (needsAxisOverride) {\n applyPaneAxis({\n ...(settings.priceAxisType !== \"normal\" && { name: settings.priceAxisType }),\n ...(settings.reverseCoordinate && { reverse: true }),\n ...(settings.yAxisPosition !== \"right\" && { position: settings.yAxisPosition }),\n ...(settings.yAxisInside && { inside: true }),\n });\n }\n\n // Sync indicator last value mark (klinecharts defaults to show: false)\n if (settings.showIndicatorLastValue) {\n state.chart.setStyles({\n indicator: { lastValueMark: { show: true } },\n });\n }\n }, [state.chart]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const applyStyle = useCallback(\n (path: string, value: unknown) => {\n const parts = path.split(\".\");\n const styleObj: Record<string, unknown> = {};\n let current: Record<string, unknown> = styleObj;\n for (let i = 0; i < parts.length - 1; i++) {\n current[parts[i]] = {};\n current = current[parts[i]] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = value;\n state.chart?.setStyles(styleObj);\n },\n [state.chart]\n );\n\n\n const setCandleType = useCallback(\n (type: string) => {\n applyStyle(\"candle.type\", type);\n setSettings((s) => ({ ...s, candleType: type }));\n },\n [applyStyle]\n );\n\n const setCandleUpColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { upColor: color, upBorderColor: color, upWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleUpColor: color }));\n },\n [state.chart]\n );\n\n const setCandleDownColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { downColor: color, downBorderColor: color, downWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleDownColor: color }));\n },\n [state.chart]\n );\n\n const setCompareRule = useCallback(\n (rule: CompareRule) => {\n applyStyle(\"candle.bar.compareRule\", rule);\n setSettings((s) => ({ ...s, compareRule: rule }));\n },\n [applyStyle]\n );\n\n const setShowLastPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.show\", show);\n setSettings((s) => ({ ...s, showLastPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLastPriceLine = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.line.show\", show);\n setSettings((s) => ({ ...s, showLastPriceLine: show }));\n },\n [applyStyle]\n );\n\n const setShowHighPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.high.show\", show);\n setSettings((s) => ({ ...s, showHighPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLowPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.low.show\", show);\n setSettings((s) => ({ ...s, showLowPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorLastValue = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.lastValueMark.show\", show);\n setSettings((s) => ({ ...s, showIndicatorLastValue: show }));\n },\n [applyStyle]\n );\n\n const setPriceAxisType = useCallback(\n (type: PriceAxisType) => {\n applyPaneAxis({ name: type });\n setSettings((s) => ({ ...s, priceAxisType: type }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisPosition = useCallback(\n (position: YAxisPosition) => {\n applyPaneAxis({ position });\n setSettings((s) => ({ ...s, yAxisPosition: position }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisInside = useCallback(\n (inside: boolean) => {\n applyPaneAxis({ inside });\n setSettings((s) => ({ ...s, yAxisInside: inside }));\n },\n [applyPaneAxis]\n );\n\n const setReverseCoordinate = useCallback(\n (reverse: boolean) => {\n applyPaneAxis({ reverse });\n setSettings((s) => ({ ...s, reverseCoordinate: reverse }));\n },\n [applyPaneAxis]\n );\n\n const setShowGrid = useCallback(\n (show: boolean) => {\n applyStyle(\"grid.show\", show);\n setSettings((s) => ({ ...s, showGrid: show }));\n },\n [applyStyle]\n );\n\n const setShowTimeAxis = useCallback(\n (show: boolean) => {\n applyStyle(\"xAxis.show\", show);\n setSettings((s) => ({ ...s, showTimeAxis: show }));\n },\n [applyStyle]\n );\n\n const setShowCrosshair = useCallback(\n (show: boolean) => {\n applyStyle(\"crosshair.show\", show);\n setSettings((s) => ({ ...s, showCrosshair: show }));\n },\n [applyStyle]\n );\n\n const setShowCandleTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.tooltip.show\", show);\n setSettings((s) => ({ ...s, showCandleTooltip: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.tooltip.show\", show);\n setSettings((s) => ({ ...s, showIndicatorTooltip: show }));\n },\n [applyStyle]\n );\n\n const setTooltipShowRule = useCallback(\n (rule: TooltipShowRule) => {\n state.chart?.setStyles({\n candle: { tooltip: { showRule: rule } },\n indicator: { tooltip: { showRule: rule } },\n });\n setSettings((s) => ({ ...s, tooltipShowRule: rule }));\n },\n [state.chart]\n );\n\n const resetToDefaults = useCallback(() => {\n setSettings(defaultSettings);\n state.chart?.setStyles(state.theme);\n // Reset axis options to defaults\n applyPaneAxis({ name: \"normal\", reverse: false, position: \"right\", inside: false });\n }, [state.chart, state.theme, applyPaneAxis]);\n\n return {\n ...settings,\n candleTypes,\n priceAxisTypes,\n yAxisPositions,\n compareRules,\n tooltipShowRules,\n setCandleType,\n setCandleUpColor,\n setCandleDownColor,\n setCompareRule,\n setShowLastPrice,\n setShowLastPriceLine,\n setShowHighPrice,\n setShowLowPrice,\n setShowIndicatorLastValue,\n setPriceAxisType,\n setYAxisPosition,\n setYAxisInside,\n setReverseCoordinate,\n setShowTimeAxis,\n setShowGrid,\n setShowCrosshair,\n setShowCandleTooltip,\n setShowIndicatorTooltip,\n setTooltipShowRule,\n resetToDefaults,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseScreenshotReturn {\n screenshotUrl: string | null;\n capture: () => void;\n download: (filename?: string) => void;\n clear: () => void;\n}\n\nexport function useScreenshot(): UseScreenshotReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const capture = useCallback(() => {\n if (!state.chart) return;\n const url = state.chart.getConvertPictureUrl(true, \"jpeg\", state.theme === \"dark\" ? \"#151517\" : \"#ffffff\");\n dispatch({ type: \"SET_SCREENSHOT_URL\", url });\n }, [state.chart, state.theme, dispatch]);\n\n const download = useCallback(\n (filename = \"chart-screenshot.jpg\") => {\n if (!state.screenshotUrl) return;\n const link = document.createElement(\"a\");\n link.href = state.screenshotUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n [state.screenshotUrl]\n );\n\n const clear = useCallback(() => {\n dispatch({ type: \"SET_SCREENSHOT_URL\", url: null });\n }, [dispatch]);\n\n return {\n screenshotUrl: state.screenshotUrl,\n capture,\n download,\n clear,\n };\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport interface UseFullscreenReturn {\n isFullscreen: boolean;\n toggle: () => void;\n enter: () => void;\n exit: () => void;\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nexport function useFullscreen(): UseFullscreenReturn {\n const { fullscreenContainerRef } = useKlinechartsUIDispatch();\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n const enter = useCallback(() => {\n const el = fullscreenContainerRef.current;\n if (!el) return;\n if (el.requestFullscreen) {\n el.requestFullscreen();\n } else if (\"webkitRequestFullscreen\" in el) {\n (el as HTMLElement & { webkitRequestFullscreen: () => void }).webkitRequestFullscreen();\n } else if (\"msRequestFullscreen\" in el) {\n (el as HTMLElement & { msRequestFullscreen: () => void }).msRequestFullscreen();\n }\n }, [fullscreenContainerRef]);\n\n const exit = useCallback(() => {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (\"webkitExitFullscreen\" in document) {\n (document as Document & { webkitExitFullscreen: () => void }).webkitExitFullscreen();\n } else if (\"msExitFullscreen\" in document) {\n (document as Document & { msExitFullscreen: () => void }).msExitFullscreen();\n }\n }, []);\n\n const toggle = useCallback(() => {\n if (isFullscreen) {\n exit();\n } else {\n enter();\n }\n }, [isFullscreen, enter, exit]);\n\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", handler);\n document.addEventListener(\"webkitfullscreenchange\", handler);\n return () => {\n document.removeEventListener(\"fullscreenchange\", handler);\n document.removeEventListener(\"webkitfullscreenchange\", handler);\n };\n }, []);\n\n return {\n isFullscreen,\n toggle,\n enter,\n exit,\n containerRef: fullscreenContainerRef,\n };\n}\n","import { useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { OrderLineExtendData } from \"../extensions/overlays/orderLine\";\n\nexport interface OrderLineOptions extends OrderLineExtendData {\n /** Unique identifier. Auto-generated if omitted. */\n id?: string;\n /** Price level for the line. */\n price: number;\n /** Whether the user can drag the line to change its price. Defaults to false. */\n draggable?: boolean;\n /**\n * Called when the user finishes dragging the line to a new price.\n * Receives the final price value after the drag ends.\n */\n onPriceChange?: (price: number) => void;\n}\n\nexport interface UseOrderLinesReturn {\n /**\n * Creates an order line overlay at the given price level.\n * Returns the line id, or null if the chart is not yet ready.\n */\n createOrderLine: (options: OrderLineOptions) => string | null;\n /**\n * Updates an existing order line.\n * Supply only the fields you want to change.\n * Updating onPriceChange replaces the previous callback.\n */\n updateOrderLine: (\n id: string,\n options: Partial<Omit<OrderLineOptions, \"id\">>,\n ) => void;\n /** Removes the order line with the given id. */\n removeOrderLine: (id: string) => void;\n /** Removes all order lines created with this hook. */\n removeAllOrderLines: () => void;\n}\n\nexport function useOrderLines(): UseOrderLinesReturn {\n const { state } = useKlinechartsUI();\n\n // Map of id → onPriceChange callback. The stable onPressedMoveEnd closure\n // reads from this ref so callbacks can be updated without re-creating overlays.\n const callbacksRef = useRef<Map<string, (price: number) => void>>(new Map());\n\n const createOrderLine = useCallback(\n (options: OrderLineOptions): string | null => {\n if (!state.chart) return null;\n const {\n id: optId,\n price,\n draggable = false,\n onPriceChange,\n ...extendData\n } = options;\n const id =\n optId ??\n `order_line_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\n if (onPriceChange) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n // Anchor the point using the latest bar's timestamp. This is stable\n // across data pagination (left-scroll adds bars, shifting dataIndex).\n const dataList = state.chart.getDataList();\n const anchorTimestamp =\n dataList.length > 0 ? dataList[dataList.length - 1].timestamp : Date.now();\n\n state.chart.createOverlay({\n name: \"orderLine\",\n id,\n points: [{ timestamp: anchorTimestamp, value: price }],\n extendData,\n lock: !draggable,\n mode: \"normal\",\n onPressedMoveEnd: (event) => {\n const newPrice = event.overlay.points[0]?.value;\n if (newPrice != null) {\n callbacksRef.current.get(id)?.(newPrice);\n }\n },\n });\n return id;\n },\n [state.chart],\n );\n\n const updateOrderLine = useCallback(\n (id: string, options: Partial<Omit<OrderLineOptions, \"id\">>) => {\n if (!state.chart) return;\n const { price, draggable, onPriceChange, ...extendData } = options;\n const existing = state.chart.getOverlays({ id })?.[0];\n if (!existing) return;\n\n if (onPriceChange !== undefined) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n const dataList = state.chart.getDataList();\n const anchorTimestamp =\n dataList.length > 0 ? dataList[dataList.length - 1].timestamp : Date.now();\n state.chart.overrideOverlay({\n id,\n ...(price != null\n ? { points: [{ timestamp: anchorTimestamp, value: price }] }\n : {}),\n ...(draggable != null ? { lock: !draggable } : {}),\n extendData: {\n ...(existing.extendData as OrderLineExtendData),\n ...extendData,\n },\n });\n },\n [state.chart],\n );\n\n const removeOrderLine = useCallback(\n (id: string) => {\n state.chart?.removeOverlay({ id });\n callbacksRef.current.delete(id);\n },\n [state.chart],\n );\n\n const removeAllOrderLines = useCallback(() => {\n state.chart?.removeOverlay({ name: \"orderLine\" });\n callbacksRef.current.clear();\n }, [state.chart]);\n\n return {\n createOrderLine,\n updateOrderLine,\n removeOrderLine,\n removeAllOrderLines,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport type UndoRedoActionType =\n | \"overlay_added\"\n | \"overlays_removed\"\n | \"indicator_toggled\";\n\nexport interface UndoRedoAction {\n type: UndoRedoActionType;\n /** Snapshot data needed to undo/redo this action */\n data: any;\n}\n\nexport interface UseUndoRedoReturn {\n /** Whether there are actions to undo */\n canUndo: boolean;\n /** Whether there are actions to redo */\n canRedo: boolean;\n /** Undo the last action */\n undo: () => void;\n /** Redo the last undone action */\n redo: () => void;\n /** Push a new action onto the undo stack (clears redo stack) */\n pushAction: (action: UndoRedoAction) => void;\n /** Clear all undo/redo history */\n clear: () => void;\n}\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\n/**\n * Headless hook for undo/redo of drawing overlays and indicator toggles.\n *\n * Supports keyboard shortcuts: Ctrl+Z (undo), Ctrl+Y / Ctrl+Shift+Z (redo).\n */\nexport function useUndoRedo(): UseUndoRedoReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n const [undoStack, setUndoStack] = useState<UndoRedoAction[]>([]);\n const [redoStack, setRedoStack] = useState<UndoRedoAction[]>([]);\n const isProcessingRef = useRef(false);\n\n const canUndo = undoStack.length > 0;\n const canRedo = redoStack.length > 0;\n\n const pushAction = useCallback((action: UndoRedoAction) => {\n if (isProcessingRef.current) return; // skip actions triggered by undo/redo itself\n setUndoStack((prev) => [...prev, action]);\n setRedoStack([]);\n }, []);\n\n // Register pushAction so other hooks (useDrawingTools, useIndicators) can call it.\n useEffect(() => {\n undoRedoListenerRef.current = pushAction as any;\n return () => { undoRedoListenerRef.current = null; };\n }, [pushAction, undoRedoListenerRef]);\n\n const clear = useCallback(() => {\n setUndoStack([]);\n setRedoStack([]);\n }, []);\n\n const undo = useCallback(() => {\n if (undoStack.length === 0 || !state.chart || isProcessingRef.current)\n return;\n isProcessingRef.current = true;\n\n const action = undoStack[undoStack.length - 1];\n setUndoStack((prev) => prev.slice(0, -1));\n\n try {\n switch (action.type) {\n case \"overlay_added\": {\n // Remove the overlay that was added\n const { id, overlayData } = action.data;\n state.chart.removeOverlay({ id });\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"overlay_added\",\n data: { id, overlayData },\n },\n ]);\n break;\n }\n case \"overlays_removed\": {\n // Restore all overlays that were removed\n const { overlays } = action.data;\n const restoredIds: string[] = [];\n for (const overlay of overlays) {\n const newId = state.chart.createOverlay({\n ...overlay,\n groupId: DRAWING_GROUP_ID,\n });\n if (typeof newId === \"string\") {\n restoredIds.push(newId);\n }\n }\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"overlays_removed\",\n data: {\n overlays: overlays.map((o: any, i: number) => ({\n ...o,\n id: restoredIds[i],\n })),\n },\n },\n ]);\n break;\n }\n case \"indicator_toggled\": {\n const { name, wasActive, isMain, paneId, yAxisId } = action.data;\n const id = isMain ? `main_${name}` : `sub_${name}`;\n if (wasActive) {\n // It was active before, so re-add it (preserving its axis binding).\n if (isMain) {\n state.chart.createIndicator(\n { name, id },\n {\n isStack: true,\n pane: { id: \"candle_pane\" },\n ...(yAxisId ? { yAxis: { id: yAxisId } } : {}),\n },\n );\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n } else {\n state.chart.createIndicator(\n { name, id },\n yAxisId ? { yAxis: { id: yAxisId } } : undefined,\n );\n const newPaneId =\n state.chart.getIndicators({ id })?.[0]?.paneId ?? \"\";\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: {\n ...state.subIndicators,\n [name]: newPaneId,\n },\n });\n }\n if (yAxisId) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [id]: yAxisId },\n });\n }\n } else {\n // It was not active before, so remove it\n state.chart.removeIndicator({ id });\n if (isMain) {\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: state.mainIndicators.filter(\n (n) => n !== name,\n ),\n });\n } else {\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSub,\n });\n }\n if (state.indicatorAxes[id]) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n }\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: !wasActive,\n isMain,\n paneId,\n yAxisId,\n },\n },\n ]);\n break;\n }\n }\n } finally {\n isProcessingRef.current = false;\n }\n }, [undoStack, state.chart, state.mainIndicators, state.subIndicators, state.indicatorAxes, dispatch]);\n\n const redo = useCallback(() => {\n if (redoStack.length === 0 || !state.chart || isProcessingRef.current)\n return;\n isProcessingRef.current = true;\n\n const action = redoStack[redoStack.length - 1];\n setRedoStack((prev) => prev.slice(0, -1));\n\n try {\n switch (action.type) {\n case \"overlay_added\": {\n // Re-create the overlay\n const { overlayData } = action.data;\n const newId = state.chart.createOverlay({\n ...overlayData,\n groupId: DRAWING_GROUP_ID,\n });\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"overlay_added\",\n data: {\n id: typeof newId === \"string\" ? newId : action.data.id,\n overlayData,\n },\n },\n ]);\n break;\n }\n case \"overlays_removed\": {\n // Remove all the restored overlays\n const { overlays } = action.data;\n const snapshotOverlays = overlays.map((o: any) => {\n const allOverlays = state.chart?.getOverlays({ id: o.id });\n const actual = allOverlays?.[0];\n return actual\n ? {\n name: actual.name,\n points: actual.points,\n styles: actual.styles,\n extendData: actual.extendData,\n }\n : o;\n });\n for (const overlay of overlays) {\n state.chart.removeOverlay({ id: overlay.id });\n }\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"overlays_removed\",\n data: { overlays: snapshotOverlays },\n },\n ]);\n break;\n }\n case \"indicator_toggled\": {\n const { name, wasActive, isMain, paneId, yAxisId } = action.data;\n const id = isMain ? `main_${name}` : `sub_${name}`;\n if (wasActive) {\n if (isMain) {\n state.chart.createIndicator(\n { name, id },\n {\n isStack: true,\n pane: { id: \"candle_pane\" },\n ...(yAxisId ? { yAxis: { id: yAxisId } } : {}),\n },\n );\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n } else {\n state.chart.createIndicator(\n { name, id },\n yAxisId ? { yAxis: { id: yAxisId } } : undefined,\n );\n const newPaneId =\n state.chart.getIndicators({ id })?.[0]?.paneId ?? \"\";\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: {\n ...state.subIndicators,\n [name]: newPaneId,\n },\n });\n }\n if (yAxisId) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [id]: yAxisId },\n });\n }\n } else {\n state.chart.removeIndicator({ id });\n if (isMain) {\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: state.mainIndicators.filter(\n (n) => n !== name,\n ),\n });\n } else {\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSub,\n });\n }\n if (state.indicatorAxes[id]) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n }\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: !wasActive,\n isMain,\n paneId,\n yAxisId,\n },\n },\n ]);\n break;\n }\n }\n } finally {\n isProcessingRef.current = false;\n }\n }, [redoStack, state.chart, state.mainIndicators, state.subIndicators, state.indicatorAxes, dispatch]);\n\n // Keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n const isCtrlOrMeta = e.ctrlKey || e.metaKey;\n if (!isCtrlOrMeta) return;\n\n if (e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n undo();\n } else if (\n e.key === \"y\" ||\n (e.key === \"z\" && e.shiftKey)\n ) {\n e.preventDefault();\n redo();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [undo, redo]);\n\n return {\n canUndo,\n canRedo,\n undo,\n redo,\n pushAction,\n clear,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nconst STORAGE_KEY_PREFIX = \"klinecharts_layout:\";\nconst INDEX_KEY = \"klinecharts_layout_index\";\nconst STATE_VERSION = \"1.0\";\n\nexport interface ChartLayoutState {\n version: string;\n meta: {\n symbol: string;\n period: string;\n timestamp: number;\n lastModified: number;\n };\n indicators: Array<{\n paneId: string;\n name: string;\n calcParams: any[];\n visible: boolean;\n styles?: any;\n /** Custom Y-axis the indicator is bound to (klinecharts v10 multiple y-axes). */\n yAxisId?: string;\n }>;\n drawings: Array<{\n name: string;\n points: any[];\n styles?: any;\n extendData?: any;\n }>;\n}\n\nexport interface LayoutEntry {\n id: string;\n name: string;\n symbol: string;\n period: string;\n timestamp: number;\n lastModified: number;\n state: ChartLayoutState;\n}\n\nexport interface UseLayoutManagerReturn {\n /** List of saved layout entries */\n layouts: LayoutEntry[];\n /** Save current chart state as a named layout */\n saveLayout: (name: string) => string | null;\n /** Load a layout by ID and apply to the chart */\n loadLayout: (id: string) => boolean;\n /** Delete a layout by ID */\n deleteLayout: (id: string) => void;\n /** Rename a layout */\n renameLayout: (id: string, name: string) => boolean;\n /** Refresh the layouts list from localStorage */\n refreshLayouts: () => void;\n /** Whether auto-save is enabled */\n autoSaveEnabled: boolean;\n /** Toggle auto-save on/off */\n setAutoSaveEnabled: (enabled: boolean) => void;\n}\n\nfunction generateId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(\n /[xy]/g,\n (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n },\n );\n}\n\nfunction getLayoutIds(): string[] {\n try {\n const raw = localStorage.getItem(INDEX_KEY);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction getEntry(id: string): LayoutEntry | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY_PREFIX + id);\n return raw ? JSON.parse(raw) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Headless hook for saving, loading, and managing named chart layouts\n * via localStorage. Supports auto-save with 5-second debounce.\n */\nexport function useLayoutManager(): UseLayoutManagerReturn {\n const { state, dispatch } = useKlinechartsUI();\n const [layouts, setLayouts] = useState<LayoutEntry[]>([]);\n const [autoSaveEnabled, setAutoSaveEnabled] = useState(false);\n const autoSaveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const autoSaveIdRef = useRef<string | null>(null);\n\n const refreshLayouts = useCallback(() => {\n const entries = getLayoutIds()\n .map((id) => getEntry(id))\n .filter((e): e is LayoutEntry => e !== null);\n setLayouts(entries);\n }, []);\n\n // Load layouts on mount\n useEffect(() => {\n refreshLayouts();\n }, [refreshLayouts]);\n\n const serializeState = useCallback((): ChartLayoutState | null => {\n const chart = state.chart;\n if (!chart) return null;\n\n const indicators: ChartLayoutState[\"indicators\"] = [];\n const indicatorMap = (chart as any).getIndicatorByPaneId?.();\n if (indicatorMap) {\n indicatorMap.forEach((paneIndicators: any, paneId: string) => {\n paneIndicators.forEach((indicator: any) => {\n // Persist a custom axis binding only when it was explicitly tracked\n // (avoids serializing the pane's default axis id).\n const yAxisId = state.indicatorAxes[indicator.id];\n indicators.push({\n paneId,\n name: indicator.name,\n calcParams: indicator.calcParams,\n visible: indicator.visible,\n ...(indicator.styles ? { styles: indicator.styles } : {}),\n ...(yAxisId ? { yAxisId } : {}),\n });\n });\n });\n }\n\n const drawings: ChartLayoutState[\"drawings\"] = [];\n const allOverlays = chart.getOverlays({});\n if (allOverlays) {\n for (const overlay of allOverlays) {\n drawings.push({\n name: overlay.name,\n points: overlay.points,\n styles: overlay.styles,\n extendData: overlay.extendData,\n });\n }\n }\n\n return {\n version: STATE_VERSION,\n meta: {\n symbol: state.symbol?.ticker ?? \"\",\n period: state.period?.label ?? \"\",\n timestamp: Date.now(),\n lastModified: Date.now(),\n },\n indicators,\n drawings,\n };\n }, [state.chart, state.symbol, state.period, state.indicatorAxes]);\n\n const saveLayout = useCallback(\n (name: string): string | null => {\n const chartState = serializeState();\n if (!chartState) return null;\n\n const id = generateId();\n const now = Date.now();\n const entry: LayoutEntry = {\n id,\n name: name.trim() || `Layout ${new Date(now).toLocaleString()}`,\n symbol: chartState.meta.symbol,\n period: chartState.meta.period,\n timestamp: now,\n lastModified: now,\n state: chartState,\n };\n\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(entry),\n );\n const ids = getLayoutIds();\n if (!ids.includes(id)) {\n ids.push(id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n }\n\n refreshLayouts();\n return id;\n },\n [serializeState, refreshLayouts],\n );\n\n const loadLayout = useCallback(\n (id: string): boolean => {\n const entry = getEntry(id);\n if (!entry || !state.chart) return false;\n\n const chartState = entry.state;\n if (chartState.version !== STATE_VERSION) return false;\n\n const chart = state.chart;\n\n // Clear existing overlays\n chart.removeOverlay();\n\n // Clear existing indicators (except built-in)\n const indicatorMap = (chart as any).getIndicatorByPaneId?.();\n if (indicatorMap) {\n indicatorMap.forEach((_paneIndicators: any, paneId: string) => {\n _paneIndicators.forEach((_: any, indicatorName: string) => {\n chart.removeIndicator({ paneId, name: indicatorName });\n });\n });\n }\n\n // Restore indicators\n const newMainIndicators: string[] = [];\n const newSubIndicators: Record<string, string> = {};\n const restoredAxes: Record<string, string> = {};\n const restoredVisibility: Record<string, boolean> = {};\n\n if (chartState.indicators) {\n for (const ind of chartState.indicators) {\n const isMain = ind.paneId === \"candle_pane\";\n // Use the canonical id convention so the restored indicators stay in\n // sync with useIndicators (removable, axis-trackable).\n const id = isMain ? `main_${ind.name}` : `sub_${ind.name}`;\n chart.createIndicator(\n {\n name: ind.name,\n id,\n calcParams: ind.calcParams,\n visible: ind.visible,\n },\n {\n isStack: ind.paneId !== \"candle_pane\",\n pane: { id: ind.paneId },\n ...(ind.yAxisId ? { yAxis: { id: ind.yAxisId } } : {}),\n },\n );\n\n if (ind.styles) {\n chart.overrideIndicator({\n name: ind.name,\n id,\n styles: ind.styles,\n });\n }\n\n if (ind.yAxisId) {\n restoredAxes[id] = ind.yAxisId;\n }\n\n // Mirror visibility into the sparse map (only when hidden) so the\n // useIndicators getter reflects the restored preset.\n if (ind.visible === false) {\n restoredVisibility[id] = false;\n }\n\n if (isMain) {\n newMainIndicators.push(ind.name);\n } else {\n newSubIndicators[ind.name] = ind.paneId;\n }\n }\n }\n\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: newMainIndicators,\n });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSubIndicators,\n });\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: restoredAxes,\n });\n dispatch({\n type: \"SET_INDICATOR_VISIBILITY\",\n visibility: restoredVisibility,\n });\n\n // Restore drawings\n if (chartState.drawings) {\n for (const drawing of chartState.drawings) {\n chart.createOverlay({\n name: drawing.name,\n points: drawing.points,\n styles: drawing.styles,\n extendData: drawing.extendData,\n });\n }\n }\n\n return true;\n },\n [state.chart, dispatch],\n );\n\n const deleteLayout = useCallback(\n (id: string) => {\n localStorage.removeItem(STORAGE_KEY_PREFIX + id);\n const ids = getLayoutIds().filter((i) => i !== id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n refreshLayouts();\n },\n [refreshLayouts],\n );\n\n const renameLayout = useCallback(\n (id: string, name: string): boolean => {\n const entry = getEntry(id);\n if (!entry) return false;\n const updated = {\n ...entry,\n name: name.trim(),\n lastModified: Date.now(),\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(updated),\n );\n refreshLayouts();\n return true;\n },\n [refreshLayouts],\n );\n\n // Auto-save with 5-second debounce\n useEffect(() => {\n if (!autoSaveEnabled || !state.chart) return;\n\n if (autoSaveTimerRef.current) {\n clearTimeout(autoSaveTimerRef.current);\n }\n\n autoSaveTimerRef.current = setTimeout(() => {\n const chartState = serializeState();\n if (!chartState) return;\n\n if (autoSaveIdRef.current) {\n // Update existing auto-save slot\n const entry = getEntry(autoSaveIdRef.current);\n if (entry) {\n const updated = {\n ...entry,\n lastModified: Date.now(),\n state: chartState,\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + autoSaveIdRef.current,\n JSON.stringify(updated),\n );\n refreshLayouts();\n }\n } else {\n // Create initial auto-save slot\n const id = generateId();\n const now = Date.now();\n const entry: LayoutEntry = {\n id,\n name: \"Auto-save\",\n symbol: chartState.meta.symbol,\n period: chartState.meta.period,\n timestamp: now,\n lastModified: now,\n state: chartState,\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(entry),\n );\n const ids = getLayoutIds();\n ids.push(id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n autoSaveIdRef.current = id;\n refreshLayouts();\n }\n }, 5000);\n\n return () => {\n if (autoSaveTimerRef.current) {\n clearTimeout(autoSaveTimerRef.current);\n }\n };\n }, [\n autoSaveEnabled,\n state.chart,\n state.mainIndicators,\n state.subIndicators,\n serializeState,\n refreshLayouts,\n ]);\n\n return {\n layouts,\n saveLayout,\n loadLayout,\n deleteLayout,\n renameLayout,\n refreshLayouts,\n autoSaveEnabled,\n setAutoSaveEnabled,\n };\n}\n","import { useState, useCallback, useRef } from \"react\";\nimport { registerIndicator } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport TA from \"../utils/TA\";\n\nconst DEFAULT_SCRIPT = `// Custom Indicator — Pine Script Style\n// Available: TA, dataList, params\n\nconst period = params[0] ?? 14\nconst closes = dataList.map(d => d.close)\nconst highs = dataList.map(d => d.high)\nconst lows = dataList.map(d => d.low)\n\n// Example: RSI + Bollinger Bands\nconst rsi = TA.rsi(closes, period)\nconst boll = TA.bollinger(closes, period, 2)\n\n// Return one object per candle — each key = one line on chart\nreturn rsi.map((v, i) => ({\n rsi: v,\n upper: boll.upper[i],\n mid: boll.mid[i],\n lower: boll.lower[i],\n}))`;\n\nconst SERIES_COLORS = [\n \"#2962FF\",\n \"#FF6D00\",\n \"#00BCD4\",\n \"#E91E63\",\n \"#76FF03\",\n \"#FFD600\",\n];\n\n/** Keys shadowed inside the sandbox so user code cannot access them. */\nconst SHADOW_KEYS = [\n \"fetch\",\n \"XMLHttpRequest\",\n \"WebSocket\",\n \"Worker\",\n \"SharedWorker\",\n \"importScripts\",\n \"self\",\n \"caches\",\n \"indexedDB\",\n];\n\nlet scriptCounter = 0;\n\nexport type ScriptPlacement = \"main\" | \"sub\";\n\nexport interface UseScriptEditorReturn {\n /** Current script source code */\n code: string;\n setCode: (code: string) => void;\n /** Display name of the script */\n scriptName: string;\n setScriptName: (name: string) => void;\n /** Comma-separated numeric params (e.g. \"14, 26, 9\") */\n params: string;\n setParams: (params: string) => void;\n /** Where to place the indicator */\n placement: ScriptPlacement;\n setPlacement: (p: ScriptPlacement) => void;\n /** Last error message (empty = no error) */\n error: string;\n /** Last status message */\n status: string;\n /** Whether the script is currently running */\n isRunning: boolean;\n /** Whether there is a script indicator currently on the chart */\n hasActiveScript: boolean;\n /** Execute the script and register the indicator */\n runScript: () => void;\n /** Remove the current script indicator from the chart */\n removeScript: () => void;\n /** Reset code to the default template */\n resetCode: () => void;\n /** Export the current code as a downloadable .js file */\n exportScript: () => void;\n /** Import a script from a File object */\n importScript: (file: File) => void;\n /** The default template code */\n defaultScript: string;\n}\n\n/**\n * Headless hook for a Pine Script-style custom indicator editor.\n *\n * Scripts are plain JavaScript function bodies that receive:\n * - `TA` — technical analysis math library\n * - `dataList` — KLineData[] (open, high, low, close, volume, timestamp)\n * - `params` — number[] from the params input\n *\n * Must return an array of objects, one per candle. Each key = one chart series.\n */\nexport function useScriptEditor(): UseScriptEditorReturn {\n const { state } = useKlinechartsUI();\n\n const [code, setCode] = useState(DEFAULT_SCRIPT);\n const [scriptName, setScriptName] = useState(\"\");\n const [params, setParams] = useState(\"14\");\n const [placement, setPlacement] = useState<ScriptPlacement>(\"sub\");\n const [error, setError] = useState(\"\");\n const [status, setStatus] = useState(\"\");\n const [isRunning, setIsRunning] = useState(false);\n\n const activeIdRef = useRef<string | null>(null);\n const activeNameRef = useRef<string | null>(null);\n\n const hasActiveScript = activeNameRef.current !== null;\n\n const runScript = useCallback(() => {\n const chart = state.chart;\n if (!chart) {\n setError(\"Chart not initialized\");\n return;\n }\n\n setError(\"\");\n setStatus(\"Running...\");\n setIsRunning(true);\n\n try {\n const parsedParams = params\n .split(\",\")\n .map((s) => parseFloat(s.trim()))\n .filter((n) => !isNaN(n));\n\n const dataList = (chart as any).getDataList?.() ?? [];\n\n // Execute in sandboxed new Function — shadow dangerous globals\n const allArgs = [\n ...SHADOW_KEYS,\n \"TA\",\n \"dataList\",\n \"params\",\n `\"use strict\";\\n${code}`,\n ];\n const fn = new Function(...allArgs);\n const shadowValues = SHADOW_KEYS.map(() => undefined);\n const result = fn(...shadowValues, TA, dataList, parsedParams);\n\n if (!Array.isArray(result)) {\n throw new Error(\"Script must return an Array.\");\n }\n\n const sample = result.find((v: unknown) => v !== null && v !== undefined);\n const seriesKeys: string[] = sample ? Object.keys(sample) : [\"value\"];\n if (seriesKeys.length === 0) {\n throw new Error(\"Returned objects have no keys.\");\n }\n\n scriptCounter++;\n const indicatorName = `_custom_script_${scriptCounter}`;\n\n const figures = seriesKeys.map((key, i) => ({\n key,\n title: `${key}: `,\n type: \"line\" as const,\n styles: () => ({ color: SERIES_COLORS[i % SERIES_COLORS.length] }),\n }));\n\n registerIndicator({\n name: indicatorName,\n shortName:\n (scriptName.trim() || `Script #${scriptCounter}`) +\n (placement === \"main\" ? \" (Main)\" : \" (Sub)\"),\n calcParams: parsedParams,\n figures: figures as any,\n calc: () => result,\n extendData: {\n isCustomScript: true,\n code,\n placement,\n },\n });\n\n // Remove previous custom script indicator if exists\n if (activeNameRef.current) {\n try {\n chart.removeIndicator({\n id:\n activeIdRef.current === \"candle_pane\"\n ? \"candle_pane\"\n : activeIdRef.current!,\n name: activeNameRef.current,\n } as any);\n } catch {\n // ignore\n }\n }\n\n // Add to chart\n let paneId: string | null = null;\n if (placement === \"main\") {\n paneId = chart.createIndicator(\n { name: indicatorName },\n { isStack: true, pane: { id: \"candle_pane\" } },\n );\n } else {\n paneId = chart.createIndicator({ name: indicatorName });\n }\n\n activeIdRef.current = typeof paneId === \"string\" ? paneId : null;\n activeNameRef.current = indicatorName;\n\n const title = scriptName.trim() || `Script #${scriptCounter}`;\n setStatus(\n `${title} applied to ${placement === \"main\" ? \"Main Chart\" : \"Sub Pane\"} — ${seriesKeys.length} series: ${seriesKeys.join(\", \")}`,\n );\n } catch (e: any) {\n setError(e?.message ?? String(e));\n } finally {\n setIsRunning(false);\n }\n }, [state.chart, code, scriptName, params, placement]);\n\n const removeScript = useCallback(() => {\n const chart = state.chart;\n if (chart && activeNameRef.current && activeIdRef.current) {\n try {\n chart.removeIndicator({\n id: activeIdRef.current,\n name: activeNameRef.current,\n } as any);\n } catch {\n // ignore\n }\n activeIdRef.current = null;\n activeNameRef.current = null;\n setStatus(\"Indicator removed.\");\n }\n }, [state.chart]);\n\n const resetCode = useCallback(() => {\n setCode(DEFAULT_SCRIPT);\n setError(\"\");\n setStatus(\"\");\n }, []);\n\n const exportScript = useCallback(() => {\n const blob = new Blob([code], {\n type: \"text/javascript;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${scriptName.trim() || \"custom_indicator\"}.js`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n setStatus(\"Script exported.\");\n }, [code, scriptName]);\n\n const importScript = useCallback(\n (file: File) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n const content = e.target?.result as string;\n if (content) {\n setCode(content);\n if (!scriptName) {\n setScriptName(file.name.replace(/\\.(js|ts|txt)$/i, \"\"));\n }\n setError(\"\");\n setStatus(`Loaded ${file.name}`);\n }\n };\n reader.readAsText(file);\n },\n [scriptName],\n );\n\n return {\n code,\n setCode,\n scriptName,\n setScriptName,\n params,\n setParams,\n placement,\n setPlacement,\n error,\n status,\n isRunning,\n hasActiveScript,\n runScript,\n removeScript,\n resetCode,\n exportScript,\n importScript,\n defaultScript: DEFAULT_SCRIPT,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface CrosshairBarData {\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n timestamp: number;\n change: number;\n changePercent: number;\n}\n\nexport interface UseCrosshairReturn {\n /** OHLCV data of the bar under the crosshair. Null when cursor is off-chart. */\n barData: CrosshairBarData | null;\n}\n\nexport function useCrosshair(): UseCrosshairReturn {\n const { state } = useKlinechartsUI();\n const [barData, setBarData] = useState<CrosshairBarData | null>(null);\n const rafRef = useRef<number>(0);\n\n const handler = useCallback(\n (event: any) => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = 0;\n\n const klineData = event?.kLineData;\n if (!klineData) {\n setBarData(null);\n return;\n }\n\n const pricePrecision = state.symbol?.pricePrecision ?? 2;\n const open = klineData.open ?? 0;\n const close = klineData.close ?? 0;\n const change = parseFloat((close - open).toFixed(pricePrecision));\n const changePercent =\n open !== 0\n ? parseFloat(((change / open) * 100).toFixed(2))\n : 0;\n\n setBarData({\n open,\n high: klineData.high ?? 0,\n low: klineData.low ?? 0,\n close,\n volume: klineData.volume ?? 0,\n timestamp: klineData.timestamp ?? 0,\n change,\n changePercent,\n });\n });\n },\n [state.symbol?.pricePrecision],\n );\n\n useEffect(() => {\n const chart = state.chart;\n if (!chart) return;\n\n (chart as any).subscribeAction?.(\"onCrosshairChange\", handler);\n\n return () => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = 0;\n }\n (chart as any).unsubscribeAction?.(\"onCrosshairChange\", handler);\n };\n }, [state.chart, handler]);\n\n return { barData };\n}\n","import { useCallback } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { Alert, AlertCondition } from \"../provider/featureTypes\";\n\nexport type { Alert, AlertCondition } from \"../provider/featureTypes\";\n\nexport interface UseAlertsReturn {\n alerts: Alert[];\n addAlert: (\n price: number,\n condition: AlertCondition,\n message?: string,\n ) => string;\n removeAlert: (id: string) => void;\n clearAlerts: () => void;\n onAlertTriggered: (callback: (alert: Alert) => void) => void;\n}\n\nlet alertCounter = 0;\n\n/**\n * Headless hook for price-crossing alerts.\n *\n * The alert list lives in the shared provider store, and the 1s crossing\n * poller + the `onAlertTriggered` listener are owned by the provider. This\n * means several `useAlerts()` instances (toolbar, list panel, sound trigger)\n * observe and mutate one synchronized list and share a single poller — they no\n * longer drift apart or each spawn their own interval.\n */\nexport function useAlerts(): UseAlertsReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { alertTriggeredListenerRef } = useKlinechartsUIDispatch();\n const alerts = state.alerts;\n\n const addAlert = useCallback(\n (price: number, condition: AlertCondition, message?: string): string => {\n const id = `alert_${++alertCounter}`;\n\n const alert: Alert = {\n id,\n price,\n condition,\n message,\n triggered: false,\n };\n\n dispatch({ type: \"SET_ALERTS\", alerts: [...state.alerts, alert] });\n\n if (state.chart) {\n state.chart.createOverlay({\n name: \"horizontalStraightLine\",\n id,\n groupId: \"price_alerts\",\n points: [{ value: price }],\n styles: {\n line: {\n style: \"dashed\",\n color: \"#ff9800\",\n size: 1,\n },\n },\n lock: true,\n });\n }\n\n return id;\n },\n [state.chart, state.alerts, dispatch],\n );\n\n const removeAlert = useCallback(\n (id: string) => {\n dispatch({\n type: \"SET_ALERTS\",\n alerts: state.alerts.filter((a) => a.id !== id),\n });\n state.chart?.removeOverlay({ id });\n },\n [state.chart, state.alerts, dispatch],\n );\n\n const clearAlerts = useCallback(() => {\n for (const alert of state.alerts) {\n state.chart?.removeOverlay({ id: alert.id });\n }\n dispatch({ type: \"SET_ALERTS\", alerts: [] });\n }, [state.chart, state.alerts, dispatch]);\n\n const onAlertTriggered = useCallback(\n (callback: (alert: Alert) => void) => {\n alertTriggeredListenerRef.current = callback;\n },\n [alertTriggeredListenerRef],\n );\n\n return {\n alerts,\n addAlert,\n removeAlert,\n clearAlerts,\n onAlertTriggered,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type ExportFormat = \"csv\" | \"json\";\n\nexport interface UseDataExportReturn {\n /** Export all chart data */\n exportAll: (format: ExportFormat) => void;\n /** Export only the visible range */\n exportVisible: (format: ExportFormat) => void;\n}\n\nexport function useDataExport(): UseDataExportReturn {\n const { state } = useKlinechartsUI();\n\n const exportAll = useCallback(\n (format: ExportFormat) => {\n if (!state.chart) return;\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n downloadData(dataList, format, state.symbol?.ticker);\n },\n [state.chart, state.symbol?.ticker]\n );\n\n const exportVisible = useCallback(\n (format: ExportFormat) => {\n if (!state.chart) return;\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const visibleRange = (state.chart as any).getVisibleRange?.();\n if (!visibleRange) {\n downloadData(dataList, format, state.symbol?.ticker);\n return;\n }\n\n const { from, to } = visibleRange as { from: number; to: number };\n const visibleData = dataList.slice(from, to);\n downloadData(visibleData, format, state.symbol?.ticker);\n },\n [state.chart, state.symbol?.ticker]\n );\n\n return { exportAll, exportVisible };\n}\n\nfunction formatRow(bar: any): {\n date: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n} {\n return {\n date: new Date(bar.timestamp).toISOString(),\n open: bar.open,\n high: bar.high,\n low: bar.low,\n close: bar.close,\n volume: bar.volume ?? 0,\n };\n}\n\nfunction buildCsv(dataList: any[]): string {\n const header = \"Date,Open,High,Low,Close,Volume\\n\";\n const rows = dataList.map((bar) => {\n const r = formatRow(bar);\n return `${r.date},${r.open},${r.high},${r.low},${r.close},${r.volume}`;\n });\n return header + rows.join(\"\\n\");\n}\n\nfunction buildJson(dataList: any[]): string {\n return JSON.stringify(dataList.map(formatRow), null, 2);\n}\n\nfunction downloadData(\n dataList: any[],\n format: ExportFormat,\n ticker?: string\n): void {\n const content = format === \"csv\" ? buildCsv(dataList) : buildJson(dataList);\n const mimeType = format === \"csv\" ? \"text/csv\" : \"application/json\";\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n\n const date = new Date().toISOString().slice(0, 10);\n const prefix = ticker ?? \"chart\";\n const filename = `${prefix}_${date}.${format}`;\n\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n URL.revokeObjectURL(url);\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { SymbolInfo, KLineData } from \"react-klinecharts\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface WatchlistItem {\n ticker: string;\n lastPrice: number | null;\n change: number | null;\n changePercent: number | null;\n}\n\nexport interface UseWatchlistReturn {\n items: WatchlistItem[];\n addSymbol: (ticker: string) => void;\n removeSymbol: (ticker: string) => void;\n switchSymbol: (ticker: string) => void;\n activeSymbol: string | null;\n}\n\nexport function useWatchlist(): UseWatchlistReturn {\n const { state } = useKlinechartsUI();\n const { dispatch, datafeed } = useKlinechartsUIDispatch();\n\n const [items, setItems] = useState<WatchlistItem[]>([]);\n\n // Track active subscriptions so we can clean them up.\n const subscriptionsRef = useRef<\n Map<string, { symbolInfo: SymbolInfo; period: TerminalPeriod }>\n >(new Map());\n\n const activeSymbol = state.symbol?.ticker ?? null;\n\n const addSymbol = useCallback(\n (ticker: string) => {\n // Prevent duplicates.\n setItems((prev) => {\n if (prev.some((item) => item.ticker === ticker)) return prev;\n return [\n ...prev,\n { ticker, lastPrice: null, change: null, changePercent: null },\n ];\n });\n\n if (subscriptionsRef.current.has(ticker)) return;\n\n const symbolInfo = { ticker } as SymbolInfo;\n const period = state.period;\n\n subscriptionsRef.current.set(ticker, { symbolInfo, period });\n\n datafeed.subscribe(symbolInfo, period, (bar: KLineData) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.ticker !== ticker) return item;\n const change = bar.close - bar.open;\n const changePercent =\n bar.open !== 0 ? (change / bar.open) * 100 : null;\n return {\n ...item,\n lastPrice: bar.close,\n change,\n changePercent,\n };\n }),\n );\n });\n },\n [datafeed, state.period],\n );\n\n const removeSymbol = useCallback(\n (ticker: string) => {\n const sub = subscriptionsRef.current.get(ticker);\n if (sub) {\n datafeed.unsubscribe(sub.symbolInfo, sub.period);\n subscriptionsRef.current.delete(ticker);\n }\n setItems((prev) => prev.filter((item) => item.ticker !== ticker));\n },\n [datafeed],\n );\n\n const switchSymbol = useCallback(\n (ticker: string) => {\n dispatch({ type: \"SET_SYMBOL\", symbol: { ticker } });\n },\n [dispatch],\n );\n\n // Clean up all subscriptions on unmount.\n useEffect(() => {\n return () => {\n subscriptionsRef.current.forEach((sub) => {\n datafeed.unsubscribe(sub.symbolInfo, sub.period);\n });\n subscriptionsRef.current.clear();\n };\n }, [datafeed]);\n\n return {\n items,\n addSymbol,\n removeSymbol,\n switchSymbol,\n activeSymbol,\n };\n}\n","import { useCallback } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { ReplaySpeed } from \"../provider/featureTypes\";\n\nexport type { ReplaySpeed } from \"../provider/featureTypes\";\n\nexport interface UseReplayReturn {\n /** Whether a replay session is active */\n isReplaying: boolean;\n /** Whether the replay is currently paused */\n isPaused: boolean;\n /** Current playback speed multiplier */\n speed: ReplaySpeed;\n /** Current bar index in the replay */\n barIndex: number;\n /** Total number of bars in the saved data */\n totalBars: number;\n /** Start replaying from the beginning */\n startReplay: () => void;\n /** Stop replay and restore original data */\n stopReplay: () => void;\n /** Toggle play/pause */\n togglePause: () => void;\n /** Advance one bar while paused */\n stepForward: () => void;\n /** Go back one bar while paused */\n stepBackward: () => void;\n /** Seek to a specific bar index (0-based). Pauses playback. */\n seekTo: (index: number) => void;\n /** Change the playback speed */\n setSpeed: (speed: ReplaySpeed) => void;\n}\n\n/**\n * Headless hook for historical data replay (bar-by-bar playback).\n *\n * Loads the current chart data, clears the chart, then progressively adds\n * bars back one at a time at the configured speed.\n *\n * Replay control state lives in the shared provider store and the playback\n * interval + data buffers are owned by the provider (accessed through stable\n * refs). This guarantees a single playback session even when `useReplay()` is\n * mounted in several components (e.g. toolbar + bottom controls + status bar):\n * starting in one and stepping in another drives the same timer and buffer.\n */\nexport function useReplay(): UseReplayReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { replayIntervalRef, replaySavedDataRef, replayIndexRef } =\n useKlinechartsUIDispatch();\n\n const { isReplaying, isPaused, speed, barIndex, totalBars } = state.replay;\n\n const clearInterval_ = useCallback(() => {\n if (replayIntervalRef.current !== null) {\n clearInterval(replayIntervalRef.current);\n replayIntervalRef.current = null;\n }\n }, [replayIntervalRef]);\n\n const addNextBar = useCallback(() => {\n if (!state.chart) return;\n\n const data = replaySavedDataRef.current;\n const idx = replayIndexRef.current;\n\n if (idx >= data.length) {\n // Replay finished — stop the interval but keep replay state\n clearInterval_();\n dispatch({ type: \"SET_REPLAY\", replay: { isPaused: true } });\n return;\n }\n\n const bar = data[idx];\n (state.chart as any).updateData?.(bar);\n replayIndexRef.current = idx + 1;\n dispatch({ type: \"SET_REPLAY\", replay: { barIndex: idx + 1 } });\n }, [state.chart, clearInterval_, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const startInterval = useCallback(\n (currentSpeed: ReplaySpeed) => {\n clearInterval_();\n replayIntervalRef.current = setInterval(addNextBar, 1000 / currentSpeed);\n },\n [addNextBar, clearInterval_, replayIntervalRef],\n );\n\n const startReplay = useCallback(() => {\n if (!state.chart) return;\n\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n // Save a copy of the original data\n replaySavedDataRef.current = [...dataList];\n replayIndexRef.current = 0;\n\n dispatch({\n type: \"SET_REPLAY\",\n replay: {\n totalBars: dataList.length,\n barIndex: 0,\n isReplaying: true,\n isPaused: false,\n },\n });\n\n // Clear chart data\n (state.chart as any).clearData?.();\n\n // Start the playback interval\n startInterval(speed);\n }, [state.chart, speed, startInterval, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const stopReplay = useCallback(() => {\n if (!state.chart) return;\n\n clearInterval_();\n\n // Restore original data\n const data = replaySavedDataRef.current;\n if (data.length > 0) {\n (state.chart as any).clearData?.();\n for (const bar of data) {\n (state.chart as any).updateData?.(bar);\n }\n }\n\n replaySavedDataRef.current = [];\n replayIndexRef.current = 0;\n\n dispatch({\n type: \"SET_REPLAY\",\n replay: { isReplaying: false, isPaused: false, barIndex: 0, totalBars: 0 },\n });\n }, [state.chart, clearInterval_, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const togglePause = useCallback(() => {\n if (!isReplaying) return;\n\n if (isPaused) {\n // Resume\n startInterval(speed);\n dispatch({ type: \"SET_REPLAY\", replay: { isPaused: false } });\n } else {\n // Pause\n clearInterval_();\n dispatch({ type: \"SET_REPLAY\", replay: { isPaused: true } });\n }\n }, [isReplaying, isPaused, speed, startInterval, clearInterval_, dispatch]);\n\n const stepForward = useCallback(() => {\n if (!isReplaying || !isPaused) return;\n addNextBar();\n }, [isReplaying, isPaused, addNextBar]);\n\n const stepBackward = useCallback(() => {\n if (!isReplaying || !isPaused || !state.chart) return;\n const idx = replayIndexRef.current;\n if (idx <= 1) return;\n\n // Remove the last bar by rebuilding data up to idx-1\n const data = replaySavedDataRef.current;\n (state.chart as any).clearData?.();\n for (let i = 0; i < idx - 1; i++) {\n (state.chart as any).updateData?.(data[i]);\n }\n replayIndexRef.current = idx - 1;\n dispatch({ type: \"SET_REPLAY\", replay: { barIndex: idx - 1 } });\n }, [isReplaying, isPaused, state.chart, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const seekTo = useCallback(\n (targetIndex: number) => {\n if (!isReplaying || !state.chart) return;\n const data = replaySavedDataRef.current;\n const clamped = Math.max(0, Math.min(targetIndex, data.length));\n\n // Pause if playing\n clearInterval_();\n\n // Rebuild chart data up to the target index\n (state.chart as any).clearData?.();\n for (let i = 0; i < clamped; i++) {\n (state.chart as any).updateData?.(data[i]);\n }\n replayIndexRef.current = clamped;\n dispatch({\n type: \"SET_REPLAY\",\n replay: { isPaused: true, barIndex: clamped },\n });\n },\n [isReplaying, state.chart, clearInterval_, replaySavedDataRef, replayIndexRef, dispatch],\n );\n\n const setSpeed = useCallback(\n (newSpeed: ReplaySpeed) => {\n dispatch({ type: \"SET_REPLAY\", replay: { speed: newSpeed } });\n\n // If currently playing, restart the interval with the new speed\n if (isReplaying && !isPaused) {\n startInterval(newSpeed);\n }\n },\n [isReplaying, isPaused, startInterval, dispatch],\n );\n\n return {\n isReplaying,\n isPaused,\n speed,\n barIndex,\n totalBars,\n startReplay,\n stopReplay,\n togglePause,\n stepForward,\n stepBackward,\n seekTo,\n setSpeed,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { registerIndicator } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface CompareSymbol {\n ticker: string;\n /** Base price (first bar close) used for percentage normalization */\n basePrice: number | null;\n color: string;\n visible: boolean;\n}\n\nexport interface UseCompareReturn {\n /** Currently compared symbols */\n symbols: CompareSymbol[];\n /** Add a symbol — fetches data, normalizes to %, renders as indicator line */\n addSymbol: (ticker: string, color?: string) => Promise<void>;\n /** Remove a symbol overlay */\n removeSymbol: (ticker: string) => void;\n /** Toggle visibility of a compared symbol */\n toggleSymbol: (ticker: string) => void;\n /** Clear all comparisons */\n clearAll: () => void;\n}\n\nconst DEFAULT_COLORS = [\n \"#2196f3\",\n \"#ff9800\",\n \"#4caf50\",\n \"#e91e63\",\n \"#9c27b0\",\n \"#00bcd4\",\n \"#ff5722\",\n \"#8bc34a\",\n];\n\nlet colorIndex = 0;\nlet compareCounter = 0;\n\n/**\n * Headless hook for comparing multiple symbols on the same chart.\n *\n * Fetches historical data for each added symbol via the datafeed,\n * normalizes prices to percentage change from the first bar,\n * and renders each as a custom indicator line on the main pane.\n */\nexport function useCompare(): UseCompareReturn {\n const { state, datafeed } = useKlinechartsUI();\n const [symbols, setSymbols] = useState<CompareSymbol[]>([]);\n const indicatorsRef = useRef<\n Map<string, { name: string; paneId: string }>\n >(new Map());\n\n const addSymbol = useCallback(\n async (ticker: string, color?: string) => {\n if (!state.chart || !datafeed) return;\n if (indicatorsRef.current.has(ticker)) return;\n\n const assignedColor =\n color ?? DEFAULT_COLORS[colorIndex++ % DEFAULT_COLORS.length];\n\n const mainDataList = state.chart.getDataList();\n if (!mainDataList || mainDataList.length === 0) return;\n\n const from = mainDataList[0].timestamp;\n const to = mainDataList[mainDataList.length - 1].timestamp;\n\n // Fetch compare symbol data\n const compareData = await datafeed.getHistoryKLineData(\n { ticker } as any,\n { ...state.period!, label: \"\" },\n from,\n to,\n );\n\n if (!compareData || compareData.length === 0) return;\n\n // Build timestamp → close lookup\n const compareMap = new Map<number, number>();\n for (const bar of compareData) {\n compareMap.set(bar.timestamp, bar.close);\n }\n\n // Find the base price (first aligned bar)\n let basePrice: number | null = null;\n for (const bar of mainDataList) {\n const close = compareMap.get(bar.timestamp);\n if (close != null) {\n basePrice = close;\n break;\n }\n }\n if (basePrice === null || basePrice === 0) return;\n const bp = basePrice;\n\n // Build %-change array aligned to main chart timeline\n const normalizedData = mainDataList.map((mainBar) => {\n const close = compareMap.get(mainBar.timestamp);\n return {\n pct: close != null ? ((close - bp) / bp) * 100 : NaN,\n };\n });\n\n // Register custom indicator\n const indicatorName = `__cmp_${++compareCounter}_${ticker}`;\n\n registerIndicator({\n name: indicatorName,\n shortName: ticker,\n figures: [\n {\n key: \"pct\",\n title: `${ticker} %: `,\n type: \"line\",\n styles: () => ({ color: assignedColor }),\n },\n ] as any,\n calc: () => normalizedData,\n });\n\n // Place on main pane\n const paneId = state.chart.createIndicator(\n { name: indicatorName },\n { isStack: true, pane: { id: \"candle_pane\" } },\n );\n\n indicatorsRef.current.set(ticker, {\n name: indicatorName,\n paneId: typeof paneId === \"string\" ? paneId : \"candle_pane\",\n });\n\n setSymbols((prev) => {\n if (prev.some((s) => s.ticker === ticker)) return prev;\n return [\n ...prev,\n { ticker, basePrice: bp, color: assignedColor, visible: true },\n ];\n });\n },\n [state.chart, state.period, datafeed],\n );\n\n const removeSymbol = useCallback(\n (ticker: string) => {\n const info = indicatorsRef.current.get(ticker);\n if (info && state.chart) {\n try {\n state.chart.removeIndicator({ name: info.name } as any);\n } catch {\n // indicator may already be removed\n }\n indicatorsRef.current.delete(ticker);\n }\n setSymbols((prev) => prev.filter((s) => s.ticker !== ticker));\n },\n [state.chart],\n );\n\n const toggleSymbol = useCallback(\n (ticker: string) => {\n const info = indicatorsRef.current.get(ticker);\n if (!info || !state.chart) return;\n\n setSymbols((prev) => {\n const sym = prev.find((s) => s.ticker === ticker);\n if (!sym) return prev;\n\n const newVisible = !sym.visible;\n state.chart?.overrideIndicator({\n name: info.name,\n visible: newVisible,\n } as any);\n\n return prev.map((s) =>\n s.ticker === ticker ? { ...s, visible: newVisible } : s,\n );\n });\n },\n [state.chart],\n );\n\n const clearAll = useCallback(() => {\n indicatorsRef.current.forEach((info) => {\n try {\n state.chart?.removeIndicator({ name: info.name } as any);\n } catch {\n // ignore\n }\n });\n indicatorsRef.current.clear();\n setSymbols([]);\n }, [state.chart]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n indicatorsRef.current.forEach((info) => {\n try {\n state.chart?.removeIndicator({ name: info.name } as any);\n } catch {\n // ignore\n }\n });\n indicatorsRef.current.clear();\n };\n }, [state.chart]);\n\n return { symbols, addSymbol, removeSymbol, toggleSymbol, clearAll };\n}\n","import { useCallback, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { MeasurePoint, MeasureResult } from \"../provider/featureTypes\";\n\nexport type { MeasurePoint, MeasureResult } from \"../provider/featureTypes\";\n\nexport interface UseMeasureReturn {\n /** Whether measure mode is active (waiting for clicks) */\n isActive: boolean;\n /** Start measure mode — next two clicks on chart set from/to */\n startMeasure: () => void;\n /** Cancel measure mode */\n cancelMeasure: () => void;\n /** Current measurement result (null until both points are set) */\n result: MeasureResult | null;\n /** Clear the current measurement */\n clearResult: () => void;\n /** First point (set after first click) */\n fromPoint: MeasurePoint | null;\n}\n\nconst MEASURE_OVERLAY_ID = \"__measure_line__\";\n\nfunction computeResult(from: MeasurePoint, to: MeasurePoint): MeasureResult {\n const priceDiff = to.price - from.price;\n const pricePercent = from.price !== 0 ? (priceDiff / from.price) * 100 : 0;\n const bars = Math.abs(to.barIndex - from.barIndex);\n const timeDiff = Math.abs(to.timestamp - from.timestamp);\n return { from, to, priceDiff, pricePercent, bars, timeDiff };\n}\n\n/**\n * Headless hook for measuring distance/time/percentage between two points.\n *\n * Activates measure mode, captures two clicks on the chart via overlay\n * interaction, then computes price diff, %, bar count, and time diff. The\n * measure state (active/from/result) lives in the shared provider store, so a\n * toolbar toggle and a separate result-readout panel stay in sync no matter\n * where each is mounted.\n */\nexport function useMeasure(): UseMeasureReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { isActive, fromPoint, result } = state.measure;\n\n const cleanup = useCallback(() => {\n state.chart?.removeOverlay({ id: MEASURE_OVERLAY_ID });\n }, [state.chart]);\n\n const startMeasure = useCallback(() => {\n cleanup();\n dispatch({\n type: \"SET_MEASURE\",\n measure: { isActive: true, fromPoint: null, result: null },\n });\n\n if (!state.chart) return;\n\n // Create a segment overlay that the user draws by clicking two points.\n // The onDrawEnd callback fires when the user finishes placing both points.\n state.chart.createOverlay({\n name: \"segment\",\n id: MEASURE_OVERLAY_ID,\n groupId: \"measure\",\n styles: {\n line: {\n style: \"dashed\" as any,\n color: \"#FFD600\",\n size: 1,\n },\n },\n lock: true,\n onDrawEnd: (event: any) => {\n const overlay = event?.overlay;\n const points = overlay?.points;\n if (!points || points.length < 2) return;\n\n const chart = state.chart;\n if (!chart) return;\n\n const dataList = chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const makePoint = (p: any): MeasurePoint => {\n const idx = Math.max(\n 0,\n Math.min(p.dataIndex ?? 0, dataList.length - 1),\n );\n const bar = dataList[idx];\n return {\n price: p.value ?? bar?.close ?? 0,\n timestamp: bar?.timestamp ?? 0,\n barIndex: idx,\n };\n };\n\n const from = makePoint(points[0]);\n const to = makePoint(points[1]);\n\n dispatch({\n type: \"SET_MEASURE\",\n measure: {\n isActive: false,\n fromPoint: from,\n result: computeResult(from, to),\n },\n });\n },\n });\n }, [state.chart, cleanup, dispatch]);\n\n const cancelMeasure = useCallback(() => {\n cleanup();\n dispatch({ type: \"SET_MEASURE\", measure: { isActive: false, fromPoint: null } });\n }, [cleanup, dispatch]);\n\n const clearResult = useCallback(() => {\n cleanup();\n dispatch({ type: \"SET_MEASURE\", measure: { result: null, fromPoint: null } });\n }, [cleanup, dispatch]);\n\n // Clean up the overlay on unmount.\n useEffect(() => {\n return () => {\n state.chart?.removeOverlay({ id: MEASURE_OVERLAY_ID });\n };\n }, [state.chart]);\n\n return {\n isActive,\n startMeasure,\n cancelMeasure,\n result,\n clearResult,\n fromPoint,\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface Annotation {\n id: string;\n text: string;\n price: number;\n timestamp: number;\n color?: string;\n}\n\nexport interface UseAnnotationsReturn {\n annotations: Annotation[];\n addAnnotation: (\n text: string,\n price: number,\n timestamp: number,\n color?: string,\n ) => string;\n removeAnnotation: (id: string) => void;\n updateAnnotation: (\n id: string,\n updates: Partial<Pick<Annotation, \"text\" | \"color\">>,\n ) => void;\n clearAnnotations: () => void;\n}\n\nlet annotationCounter = 0;\n\nexport function useAnnotations(): UseAnnotationsReturn {\n const { state } = useKlinechartsUI();\n const [annotations, setAnnotations] = useState<Annotation[]>([]);\n\n const addAnnotation = useCallback(\n (text: string, price: number, timestamp: number, color?: string): string => {\n const id = `annotation_${++annotationCounter}`;\n\n const annotation: Annotation = {\n id,\n text,\n price,\n timestamp,\n color,\n };\n\n setAnnotations((prev) => [...prev, annotation]);\n\n if (state.chart) {\n state.chart.createOverlay({\n name: \"simpleAnnotation\",\n id,\n groupId: \"annotations\",\n points: [{ timestamp, value: price }],\n extendData: text,\n styles: color\n ? {\n text: {\n color,\n },\n }\n : undefined,\n lock: true,\n });\n }\n\n return id;\n },\n [state.chart],\n );\n\n const removeAnnotation = useCallback(\n (id: string) => {\n setAnnotations((prev) => prev.filter((a) => a.id !== id));\n state.chart?.removeOverlay({ id });\n },\n [state.chart],\n );\n\n const updateAnnotation = useCallback(\n (id: string, updates: Partial<Pick<Annotation, \"text\" | \"color\">>) => {\n setAnnotations((prev) =>\n prev.map((a) => (a.id === id ? { ...a, ...updates } : a)),\n );\n\n if (state.chart) {\n const overrideData: Record<string, any> = { id };\n\n if (updates.text !== undefined) {\n overrideData.extendData = updates.text;\n }\n\n if (updates.color !== undefined) {\n overrideData.styles = {\n text: {\n color: updates.color,\n },\n };\n }\n\n state.chart.overrideOverlay(overrideData as any);\n }\n },\n [state.chart],\n );\n\n const clearAnnotations = useCallback(() => {\n setAnnotations((prev) => {\n for (const annotation of prev) {\n state.chart?.removeOverlay({ id: annotation.id });\n }\n return [];\n });\n }, [state.chart]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n state.chart?.removeOverlay({ groupId: \"annotations\" });\n };\n }, [state.chart]);\n\n return {\n annotations,\n addAnnotation,\n removeAnnotation,\n updateAnnotation,\n clearAnnotations,\n };\n}\n","import type { Dispatch } from \"react\";\nimport type { DataLoader, KLineData } from \"react-klinecharts\";\nimport type { Datafeed, KlinechartsUIAction } from \"../provider/types\";\n\n/**\n * Creates a klinecharts DataLoader from a Datafeed instance.\n * This bridges the react-klinecharts-ui Datafeed interface to the\n * klinecharts native DataLoader format used by KLineChart component.\n *\n * In klinecharts terminology:\n * - \"init\" = initial data load\n * - \"forward\" = load older data (user scrolled left into history)\n * - \"backward\" = load newer data (user scrolled right)\n */\nexport function createDataLoader(\n datafeed: Datafeed,\n dispatch: Dispatch<KlinechartsUIAction>,\n): DataLoader {\n let oldestTimestamp: number | null = null;\n // Incremented on every \"init\" request. Forward requests capture the value at\n // their start and bail out if a newer init has begun while they were in-flight.\n let currentGen = 0;\n\n return {\n getBars: async (params) => {\n try {\n dispatch({ type: \"SET_LOADING\", isLoading: true });\n\n if (params.type === \"init\") {\n oldestTimestamp = null;\n const gen = ++currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n Date.now(),\n );\n if (gen !== currentGen) return; // newer init started — discard stale result\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"forward\" && oldestTimestamp !== null) {\n const gen = currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n oldestTimestamp - 1,\n );\n if (gen !== currentGen) return; // init for new period started — discard\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"backward\") {\n // Backward pagination (loading data newer than what we have) is generally\n // not needed in typical terminal usage because we subscribe via ws for real-time.\n params.callback([], { forward: false, backward: false });\n }\n } catch (error) {\n console.error(\"Failed to load chart data:\", error);\n params.callback([], { forward: false, backward: false });\n } finally {\n dispatch({ type: \"SET_LOADING\", isLoading: false });\n }\n },\n subscribeBar: (params) => {\n datafeed.subscribe(\n params.symbol,\n { ...params.period, label: \"\" },\n (klineData) => params.callback(klineData as KLineData),\n );\n },\n unsubscribeBar: (params) => {\n datafeed.unsubscribe(params.symbol, { ...params.period, label: \"\" });\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/provider/ChartTerminalContext.ts","../src/data/periods.ts","../src/provider/ChartTerminalProvider.tsx","../src/hooks/useKlinechartsUITheme.ts","../src/hooks/useKlinechartsUILoading.ts","../src/hooks/usePeriods.ts","../src/data/timezones.ts","../src/hooks/useTimezone.ts","../src/hooks/useSymbolSearch.ts","../src/data/indicators.ts","../src/hooks/useIndicators.ts","../src/data/drawings.ts","../src/hooks/useDrawingTools.ts","../src/data/candle-types.ts","../src/hooks/useKlinechartsUISettings.ts","../src/hooks/useScreenshot.ts","../src/hooks/useHotkeys.ts","../src/hooks/useChartAxes.ts","../src/hooks/useFullscreen.ts","../src/hooks/useOrderLines.ts","../src/hooks/useUndoRedo.ts","../src/hooks/useLayoutManager.ts","../src/hooks/useScriptEditor.ts","../src/hooks/useCrosshair.ts","../src/hooks/useAlerts.ts","../src/hooks/useDataExport.ts","../src/hooks/useWatchlist.ts","../src/hooks/useReplay.ts","../src/hooks/useCompare.ts","../src/hooks/useMeasure.ts","../src/hooks/useAnnotations.ts","../src/utils/createDataLoader.ts"],"names":["useCallback","useMemo","useRef","useEffect","useState","overlays","registerHotkey","registerHotkeyGlobal","getHotkey","getHotkeyGlobal","DRAWING_GROUP_ID","indicators","id","registerIndicator"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type {\n KlinechartsUIState,\n KlinechartsUIContextValue,\n KlinechartsUIDispatchValue,\n} from \"./types\";\n\nexport const KlinechartsUIStateContext =\n createContext<KlinechartsUIState | null>(null);\n\nexport const KlinechartsUIDispatchContext =\n createContext<KlinechartsUIDispatchValue | null>(null);\n\n/**\n * @internal\n * Reads only the stable dispatch slice. Hooks that use this won't re-render\n * when chart state changes (e.g. symbol, period, isLoading).\n */\nexport function useKlinechartsUIDispatch(): KlinechartsUIDispatchValue {\n const ctx = useContext(KlinechartsUIDispatchContext);\n if (!ctx) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return ctx;\n}\n\n/**\n * Primary hook — returns the full combined context value.\n * For performance-sensitive cases, prefer the two split hooks internally.\n */\nexport function useKlinechartsUI(): KlinechartsUIContextValue {\n const state = useContext(KlinechartsUIStateContext);\n const dispatch = useContext(KlinechartsUIDispatchContext);\n if (!state || !dispatch) {\n throw new Error(\n \"useKlinechartsUI must be used within a <KlinechartsUIProvider>\"\n );\n }\n return { state, ...dispatch };\n}\n","import type { Period as KlinechartsPeriod } from \"react-klinecharts\";\n\nexport interface TerminalPeriod extends KlinechartsPeriod {\n label: string;\n}\n\nexport const DEFAULT_PERIODS: TerminalPeriod[] = [\n { span: 1, type: \"minute\", label: \"1m\" },\n { span: 5, type: \"minute\", label: \"5m\" },\n { span: 15, type: \"minute\", label: \"15m\" },\n { span: 1, type: \"hour\", label: \"1H\" },\n { span: 2, type: \"hour\", label: \"2H\" },\n { span: 4, type: \"hour\", label: \"4H\" },\n { span: 1, type: \"day\", label: \"D\" },\n { span: 1, type: \"week\", label: \"W\" },\n { span: 1, type: \"month\", label: \"M\" },\n { span: 1, type: \"year\", label: \"Y\" },\n];\n","import {\n useReducer,\n useMemo,\n useEffect,\n useCallback,\n useRef,\n type ReactElement,\n} from \"react\";\nimport type {\n KlinechartsUIOptions,\n KlinechartsUIState,\n KlinechartsUIAction,\n} from \"./types\";\nimport {\n KlinechartsUIStateContext,\n KlinechartsUIDispatchContext,\n} from \"./ChartTerminalContext\";\nimport { DEFAULT_PERIODS } from \"../data/periods\";\nimport { registerExtensions } from \"../extensions\";\nimport { registerOverlay } from \"react-klinecharts\";\n\nfunction reducer(\n state: KlinechartsUIState,\n action: KlinechartsUIAction,\n): KlinechartsUIState {\n switch (action.type) {\n case \"SET_CHART\":\n return { ...state, chart: action.chart };\n case \"SET_SYMBOL\":\n return { ...state, symbol: action.symbol };\n case \"SET_PERIOD\":\n return { ...state, period: action.period };\n case \"SET_THEME\":\n return { ...state, theme: action.theme };\n case \"SET_TIMEZONE\":\n return { ...state, timezone: action.timezone };\n case \"SET_LOADING\":\n return { ...state, isLoading: action.isLoading };\n case \"SET_MAIN_INDICATORS\":\n return { ...state, mainIndicators: action.indicators };\n case \"SET_SUB_INDICATORS\":\n return { ...state, subIndicators: action.indicators };\n case \"SET_INDICATOR_AXES\":\n return { ...state, indicatorAxes: action.axes };\n case \"SET_INDICATOR_VISIBILITY\":\n return { ...state, indicatorVisibility: action.visibility };\n case \"SET_ALERTS\":\n return { ...state, alerts: action.alerts };\n case \"SET_MEASURE\":\n return { ...state, measure: { ...state.measure, ...action.measure } };\n case \"SET_REPLAY\":\n return { ...state, replay: { ...state.replay, ...action.replay } };\n case \"SET_STYLES\":\n return { ...state, styles: action.styles };\n case \"SET_LOCALE\":\n return { ...state, locale: action.locale };\n case \"SET_SCREENSHOT_URL\":\n return { ...state, screenshotUrl: action.url };\n default:\n return state;\n }\n}\n\nexport function KlinechartsUIProvider({\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme = \"light\",\n defaultTimezone = \"Asia/Shanghai\",\n defaultMainIndicators = [\"MA\"],\n defaultSubIndicators = [\"VOL\"],\n defaultLocale = \"en-US\",\n periods,\n styles,\n registerExtensions: shouldRegister = true,\n overlays: extraOverlays,\n children,\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n onSettingsChange,\n}: KlinechartsUIOptions): ReactElement {\n // Lazy initializer — runs only once, avoiding a new object on every render.\n const [state, dispatch] = useReducer(\n reducer,\n {\n datafeed,\n defaultSymbol,\n defaultPeriod,\n defaultTheme,\n defaultTimezone,\n defaultMainIndicators,\n defaultSubIndicators,\n defaultLocale,\n periods,\n styles,\n },\n (opts) => ({\n chart: null,\n datafeed: opts.datafeed,\n symbol: opts.defaultSymbol ?? null,\n period: opts.defaultPeriod ?? (opts.periods ?? DEFAULT_PERIODS)[0],\n theme: opts.defaultTheme ?? \"light\",\n timezone: opts.defaultTimezone ?? \"Asia/Shanghai\",\n isLoading: false,\n locale: opts.defaultLocale ?? \"en-US\",\n periods: opts.periods ?? DEFAULT_PERIODS,\n mainIndicators: opts.defaultMainIndicators ?? [\"MA\"],\n subIndicators: (opts.defaultSubIndicators ?? [\"VOL\"]).reduce(\n (acc, name) => ({ ...acc, [name]: \"\" }),\n {} as Record<string, string>,\n ),\n indicatorAxes: {},\n indicatorVisibility: {},\n alerts: [],\n measure: { isActive: false, fromPoint: null, result: null },\n replay: {\n isReplaying: false,\n isPaused: false,\n speed: 1 as const,\n barIndex: 0,\n totalBars: 0,\n },\n styles: opts.styles,\n screenshotUrl: null,\n }),\n );\n\n const fullscreenContainerRef = useRef<HTMLElement | null>(null);\n const undoRedoListenerRef = useRef<import(\"./types\").UndoRedoListener | null>(null);\n\n // Provider-owned feature resources (single owner across all hook instances).\n const alertTriggeredListenerRef = useRef<\n ((alert: import(\"./featureTypes\").Alert) => void) | null\n >(null);\n const replayIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const replaySavedDataRef = useRef<import(\"react-klinecharts\").KLineData[]>([]);\n const replayIndexRef = useRef<number>(0);\n // Last seen close price, used by the alerts poller to detect crossings.\n const alertPrevCloseRef = useRef<number | null>(null);\n\n // Tracks the current state so enhancedDispatch can compute the new state\n // synchronously (reducer is pure, so we can call it before dispatch).\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // Keep latest callbacks in a ref so enhancedDispatch closure never goes stale.\n const callbacksRef = useRef({\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n });\n callbacksRef.current = {\n onStateChange,\n onSymbolChange,\n onPeriodChange,\n onThemeChange,\n onTimezoneChange,\n onMainIndicatorsChange,\n onSubIndicatorsChange,\n };\n\n /**\n * Wraps dispatch so that per-action callbacks are called synchronously.\n * Because React's dispatch is async, we pre-compute the new state by\n * calling reducer() directly (it is pure) — this gives onStateChange the\n * correct post-action state without any useEffect delay.\n */\n const enhancedDispatch = useCallback((action: KlinechartsUIAction) => {\n const prevState = stateRef.current;\n const newState = reducer(prevState, action);\n stateRef.current = newState; // Update immediately so sequential sync dispatches see the new state\n dispatch(action);\n const cbs = callbacksRef.current;\n cbs.onStateChange?.(action, newState, prevState);\n switch (action.type) {\n case \"SET_SYMBOL\":\n cbs.onSymbolChange?.(action.symbol);\n break;\n case \"SET_PERIOD\":\n cbs.onPeriodChange?.(action.period);\n break;\n case \"SET_THEME\":\n cbs.onThemeChange?.(action.theme);\n break;\n case \"SET_TIMEZONE\":\n cbs.onTimezoneChange?.(action.timezone);\n break;\n case \"SET_MAIN_INDICATORS\":\n cbs.onMainIndicatorsChange?.(action.indicators);\n break;\n case \"SET_SUB_INDICATORS\":\n cbs.onSubIndicatorsChange?.(action.indicators);\n break;\n }\n }, []);\n\n // Capture initial overlays in a ref so the effect doesn't re-run when the\n // consumer passes an inline array (which would be a new reference each render).\n const extraOverlaysRef = useRef(extraOverlays);\n\n useEffect(() => {\n if (shouldRegister) {\n registerExtensions();\n }\n extraOverlaysRef.current?.forEach((overlay) => registerOverlay(overlay));\n }, [shouldRegister]);\n\n useEffect(() => {\n if (state.chart && state.styles) {\n state.chart.setStyles(state.styles);\n }\n }, [state.chart, state.styles]);\n\n // Provider-owned price-alert poller (single owner). Runs one 1s interval —\n // only while there is a chart and at least one alert — reads the live alert\n // list from stateRef, marks crossings triggered, and notifies the listener\n // registered via useAlerts.onAlertTriggered. Replaces the per-hook interval\n // so multiple useAlerts instances can no longer each spawn a poller.\n const hasAlerts = state.alerts.length > 0;\n useEffect(() => {\n const chart = state.chart;\n if (!chart || !hasAlerts) return;\n\n // Seed on (re)start so the first tick never fires a spurious crossing.\n alertPrevCloseRef.current = null;\n\n const interval = setInterval(() => {\n const dataList = chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const currentClose = dataList[dataList.length - 1].close;\n const prevClose = alertPrevCloseRef.current;\n alertPrevCloseRef.current = currentClose;\n if (prevClose === null) return;\n\n const alerts = stateRef.current.alerts;\n let changed = false;\n const next = alerts.map((alert) => {\n if (alert.triggered) return alert;\n\n const crossedUp =\n prevClose < alert.price && currentClose >= alert.price;\n const crossedDown =\n prevClose > alert.price && currentClose <= alert.price;\n const shouldTrigger =\n alert.condition === \"crossing_up\"\n ? crossedUp\n : alert.condition === \"crossing_down\"\n ? crossedDown\n : crossedUp || crossedDown;\n\n if (shouldTrigger) {\n changed = true;\n const triggered = { ...alert, triggered: true };\n alertTriggeredListenerRef.current?.(triggered);\n return triggered;\n }\n return alert;\n });\n\n if (changed) {\n enhancedDispatch({ type: \"SET_ALERTS\", alerts: next });\n }\n }, 1000);\n\n return () => clearInterval(interval);\n }, [state.chart, hasAlerts, enhancedDispatch]);\n\n // Provider owns the replay playback interval — clear it if the provider\n // unmounts (the hook no longer clears it on its own unmount, since the timer\n // is shared across instances).\n useEffect(() => {\n return () => {\n if (replayIntervalRef.current !== null) {\n clearInterval(replayIntervalRef.current);\n replayIntervalRef.current = null;\n }\n };\n }, []);\n\n // Dispatch context is stable — only recreated if datafeed/onSettingsChange\n // reference changes (which should be rare / memoised by the consumer).\n const dispatchValue = useMemo(\n () => ({\n dispatch: enhancedDispatch,\n datafeed,\n onSettingsChange,\n fullscreenContainerRef,\n undoRedoListenerRef,\n alertTriggeredListenerRef,\n replayIntervalRef,\n replaySavedDataRef,\n replayIndexRef,\n }),\n [enhancedDispatch, datafeed, onSettingsChange],\n );\n\n return (\n <KlinechartsUIStateContext.Provider value={state}>\n <KlinechartsUIDispatchContext.Provider value={dispatchValue}>\n {children}\n </KlinechartsUIDispatchContext.Provider>\n </KlinechartsUIStateContext.Provider>\n );\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUIThemeReturn {\n theme: string;\n setTheme: (theme: string) => void;\n toggleTheme: () => void;\n}\n\nexport function useKlinechartsUITheme(): UseKlinechartsUIThemeReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setTheme = useCallback(\n (theme: string) => {\n state.chart?.setStyles(theme);\n dispatch({ type: \"SET_THEME\", theme });\n },\n [state.chart, dispatch]\n );\n\n const toggleTheme = useCallback(() => {\n const newTheme = state.theme === \"light\" ? \"dark\" : \"light\";\n setTheme(newTheme);\n }, [state.theme, setTheme]);\n\n return {\n theme: state.theme,\n setTheme,\n toggleTheme,\n };\n}\n","import { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseKlinechartsUILoadingReturn {\n isLoading: boolean;\n}\n\nexport function useKlinechartsUILoading(): UseKlinechartsUILoadingReturn {\n const { state } = useKlinechartsUI();\n return { isLoading: state.isLoading };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface UsePeriodsReturn {\n periods: TerminalPeriod[];\n activePeriod: TerminalPeriod;\n setPeriod: (period: TerminalPeriod) => void;\n}\n\nexport function usePeriods(): UsePeriodsReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const setPeriod = useCallback(\n (period: TerminalPeriod) => {\n dispatch({ type: \"SET_PERIOD\", period });\n },\n [dispatch]\n );\n\n return {\n periods: state.periods,\n activePeriod: state.period,\n setPeriod,\n };\n}\n","export interface TimezoneOption {\n key: string;\n localeKey: string;\n}\n\nexport const TIMEZONES: TimezoneOption[] = [\n { key: \"Etc/UTC\", localeKey: \"utc\" },\n { key: \"Pacific/Honolulu\", localeKey: \"honolulu\" },\n { key: \"America/Juneau\", localeKey: \"juneau\" },\n { key: \"America/Los_Angeles\", localeKey: \"los_angeles\" },\n { key: \"America/Chicago\", localeKey: \"chicago\" },\n { key: \"America/Toronto\", localeKey: \"toronto\" },\n { key: \"America/Sao_Paulo\", localeKey: \"sao_paulo\" },\n { key: \"Europe/London\", localeKey: \"london\" },\n { key: \"Europe/Berlin\", localeKey: \"berlin\" },\n { key: \"Asia/Bahrain\", localeKey: \"bahrain\" },\n { key: \"Asia/Dubai\", localeKey: \"dubai\" },\n { key: \"Asia/Ashkhabad\", localeKey: \"ashkhabad\" },\n { key: \"Asia/Almaty\", localeKey: \"almaty\" },\n { key: \"Asia/Bangkok\", localeKey: \"bangkok\" },\n { key: \"Asia/Shanghai\", localeKey: \"shanghai\" },\n { key: \"Asia/Tokyo\", localeKey: \"tokyo\" },\n { key: \"Australia/Sydney\", localeKey: \"sydney\" },\n { key: \"Pacific/Norfolk\", localeKey: \"norfolk\" },\n];\n","import { useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport { TIMEZONES } from \"../data/timezones\";\n\nexport interface TimezoneItem {\n key: string;\n localeKey: string;\n}\n\nexport interface UseTimezoneReturn {\n timezones: TimezoneItem[];\n activeTimezone: string;\n setTimezone: (timezone: string) => void;\n}\n\nexport function useTimezone(): UseTimezoneReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const timezones = useMemo(\n () =>\n TIMEZONES.map((tz) => ({\n key: tz.key,\n localeKey: tz.localeKey,\n })),\n []\n );\n\n const setTimezone = useCallback(\n (timezone: string) => {\n state.chart?.setTimezone(timezone);\n dispatch({ type: \"SET_TIMEZONE\", timezone });\n },\n [state.chart, dispatch]\n );\n\n return {\n timezones,\n activeTimezone: state.timezone,\n setTimezone,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { PartialSymbolInfo } from \"../provider/types\";\n\nexport interface UseSymbolSearchReturn {\n query: string;\n results: PartialSymbolInfo[];\n isSearching: boolean;\n activeSymbol: PartialSymbolInfo | null;\n setQuery: (query: string) => void;\n selectSymbol: (symbol: PartialSymbolInfo) => void;\n clearResults: () => void;\n}\n\nexport function useSymbolSearch(debounceMs = 300): UseSymbolSearchReturn {\n const { state, dispatch, datafeed } = useKlinechartsUI();\n const [query, setQueryState] = useState(\"\");\n const [results, setResults] = useState<PartialSymbolInfo[]>([]);\n const [isSearching, setIsSearching] = useState(false);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n // AbortController for the in-flight fetch — cancelled when a new query arrives.\n const abortRef = useRef<AbortController | null>(null);\n\n const setQuery = useCallback(\n (q: string) => {\n setQueryState(q);\n\n // Cancel previous debounce timer.\n if (timerRef.current) clearTimeout(timerRef.current);\n\n // Cancel previous in-flight request.\n abortRef.current?.abort();\n abortRef.current = null;\n\n if (!q.trim()) {\n setResults([]);\n setIsSearching(false);\n return;\n }\n\n setIsSearching(true);\n timerRef.current = setTimeout(async () => {\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const data = await datafeed.searchSymbols(q, controller.signal);\n if (!controller.signal.aborted) {\n setResults(data);\n }\n } catch {\n if (!controller.signal.aborted) {\n setResults([]);\n }\n } finally {\n if (!controller.signal.aborted) {\n setIsSearching(false);\n }\n }\n }, debounceMs);\n },\n [datafeed, debounceMs]\n );\n\n const selectSymbol = useCallback(\n (symbol: PartialSymbolInfo) => {\n dispatch({ type: \"SET_SYMBOL\", symbol });\n setQueryState(\"\");\n setResults([]);\n },\n [dispatch]\n );\n\n const clearResults = useCallback(() => {\n setQueryState(\"\");\n setResults([]);\n setIsSearching(false);\n }, []);\n\n // Cleanup on unmount.\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n abortRef.current?.abort();\n };\n }, []);\n\n return {\n query,\n results,\n isSearching,\n activeSymbol: state.symbol,\n setQuery,\n selectSymbol,\n clearResults,\n };\n}\n","export interface IndicatorParamConfig {\n label: string;\n defaultValue: number;\n}\n\nexport interface IndicatorDefinition {\n name: string;\n localeKey: string;\n params: IndicatorParamConfig[];\n}\n\nexport const MAIN_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"SMA\",\n \"BOLL\",\n \"SAR\",\n \"BBI\",\n \"BOLL_TV\",\n \"Ichimoku\",\n \"SuperTrend\",\n \"HMA\",\n \"VWAP\",\n \"PivotPoints\",\n \"MA_Ribbon\",\n];\n\nexport const SUB_INDICATORS: string[] = [\n \"MA\",\n \"EMA\",\n \"VOL\",\n \"MACD\",\n \"BOLL\",\n \"KDJ\",\n \"RSI\",\n \"BIAS\",\n \"BRAR\",\n \"CCI\",\n \"DMI\",\n \"CR\",\n \"PSY\",\n \"DMA\",\n \"TRIX\",\n \"OBV\",\n \"VR\",\n \"WR\",\n \"MTM\",\n \"EMV\",\n \"SAR\",\n \"SMA\",\n \"ROC\",\n \"PVT\",\n \"BBI\",\n \"AO\",\n \"MACD_TV\",\n \"RSI_TV\",\n \"CCI_TV\",\n \"Stochastic\",\n];\n\nexport const INDICATOR_PARAMS: Record<string, IndicatorDefinition> = {\n SMA: {\n name: \"SMA\",\n localeKey: \"sma\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 2 },\n ],\n },\n BOLL: {\n name: \"BOLL\",\n localeKey: \"boll\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"standard_deviation\", defaultValue: 2 },\n ],\n },\n SAR: {\n name: \"SAR\",\n localeKey: \"sar\",\n params: [\n { label: \"params_1\", defaultValue: 2 },\n { label: \"params_2\", defaultValue: 2 },\n { label: \"params_3\", defaultValue: 20 },\n ],\n },\n BBI: {\n name: \"BBI\",\n localeKey: \"bbi\",\n params: [\n { label: \"params_1\", defaultValue: 3 },\n { label: \"params_2\", defaultValue: 6 },\n { label: \"params_3\", defaultValue: 12 },\n { label: \"params_4\", defaultValue: 24 },\n ],\n },\n MACD: {\n name: \"MACD\",\n localeKey: \"macd\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 26 },\n { label: \"params_3\", defaultValue: 9 },\n ],\n },\n KDJ: {\n name: \"KDJ\",\n localeKey: \"kdj\",\n params: [\n { label: \"params_1\", defaultValue: 9 },\n { label: \"params_2\", defaultValue: 3 },\n { label: \"params_3\", defaultValue: 3 },\n ],\n },\n BRAR: {\n name: \"BRAR\",\n localeKey: \"brar\",\n params: [{ label: \"params_1\", defaultValue: 26 }],\n },\n CCI: {\n name: \"CCI\",\n localeKey: \"cci\",\n params: [{ label: \"params_1\", defaultValue: 20 }],\n },\n DMI: {\n name: \"DMI\",\n localeKey: \"dmi\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n CR: {\n name: \"CR\",\n localeKey: \"cr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 10 },\n { label: \"params_3\", defaultValue: 20 },\n { label: \"params_4\", defaultValue: 40 },\n { label: \"params_5\", defaultValue: 60 },\n ],\n },\n PSY: {\n name: \"PSY\",\n localeKey: \"psy\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n DMA: {\n name: \"DMA\",\n localeKey: \"dma\",\n params: [\n { label: \"params_1\", defaultValue: 10 },\n { label: \"params_2\", defaultValue: 50 },\n { label: \"params_3\", defaultValue: 10 },\n ],\n },\n TRIX: {\n name: \"TRIX\",\n localeKey: \"trix\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n OBV: {\n name: \"OBV\",\n localeKey: \"obv\",\n params: [{ label: \"params_1\", defaultValue: 30 }],\n },\n VR: {\n name: \"VR\",\n localeKey: \"vr\",\n params: [\n { label: \"params_1\", defaultValue: 26 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n MTM: {\n name: \"MTM\",\n localeKey: \"mtm\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n EMV: {\n name: \"EMV\",\n localeKey: \"emv\",\n params: [\n { label: \"params_1\", defaultValue: 14 },\n { label: \"params_2\", defaultValue: 9 },\n ],\n },\n ROC: {\n name: \"ROC\",\n localeKey: \"roc\",\n params: [\n { label: \"params_1\", defaultValue: 12 },\n { label: \"params_2\", defaultValue: 6 },\n ],\n },\n PVT: {\n name: \"PVT\",\n localeKey: \"pvt\",\n params: [],\n },\n AO: {\n name: \"AO\",\n localeKey: \"ao\",\n params: [\n { label: \"params_1\", defaultValue: 5 },\n { label: \"params_2\", defaultValue: 34 },\n ],\n },\n BOLL_TV: {\n name: \"BOLL_TV\",\n localeKey: \"boll_tv\",\n params: [\n { label: \"period\", defaultValue: 20 },\n { label: \"multiplier\", defaultValue: 2 },\n ],\n },\n Ichimoku: {\n name: \"Ichimoku\",\n localeKey: \"ichimoku\",\n params: [\n { label: \"tenkan\", defaultValue: 9 },\n { label: \"kijun\", defaultValue: 26 },\n { label: \"senkou_b\", defaultValue: 52 },\n { label: \"offset\", defaultValue: 26 },\n ],\n },\n SuperTrend: {\n name: \"SuperTrend\",\n localeKey: \"super_trend\",\n params: [\n { label: \"period\", defaultValue: 10 },\n { label: \"factor\", defaultValue: 3 },\n ],\n },\n HMA: {\n name: \"HMA\",\n localeKey: \"hma\",\n params: [{ label: \"period\", defaultValue: 9 }],\n },\n VWAP: {\n name: \"VWAP\",\n localeKey: \"vwap\",\n params: [],\n },\n PivotPoints: {\n name: \"PivotPoints\",\n localeKey: \"pivot_points\",\n params: [],\n },\n MA_Ribbon: {\n name: \"MA_Ribbon\",\n localeKey: \"ma_ribbon\",\n params: [\n { label: \"period_1\", defaultValue: 10 },\n { label: \"period_2\", defaultValue: 20 },\n { label: \"period_3\", defaultValue: 30 },\n { label: \"period_4\", defaultValue: 40 },\n ],\n },\n MACD_TV: {\n name: \"MACD_TV\",\n localeKey: \"macd_tv\",\n params: [\n { label: \"fast\", defaultValue: 12 },\n { label: \"slow\", defaultValue: 26 },\n { label: \"signal\", defaultValue: 9 },\n ],\n },\n RSI_TV: {\n name: \"RSI_TV\",\n localeKey: \"rsi_tv\",\n params: [\n { label: \"rsi_period\", defaultValue: 14 },\n { label: \"ma_period\", defaultValue: 14 },\n ],\n },\n CCI_TV: {\n name: \"CCI_TV\",\n localeKey: \"cci_tv\",\n params: [{ label: \"period\", defaultValue: 20 }],\n },\n Stochastic: {\n name: \"Stochastic\",\n localeKey: \"stochastic\",\n params: [\n { label: \"period\", defaultValue: 14 },\n { label: \"smooth_k\", defaultValue: 3 },\n { label: \"smooth_d\", defaultValue: 3 },\n ],\n },\n};\n","import { useCallback, useMemo, useRef } from \"react\";\nimport type { YAxisOverride } from \"react-klinecharts\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\nimport {\n MAIN_INDICATORS,\n SUB_INDICATORS,\n INDICATOR_PARAMS,\n} from \"../data/indicators\";\n\nexport interface IndicatorInfo {\n name: string;\n isActive: boolean;\n /**\n * Whether the indicator is currently visible on the chart. Defaults to\n * `true`; only `false` after the indicator has been hidden via\n * `setIndicatorVisible` or `collapseSubIndicator`. Meaningful only when\n * `isActive` is `true` (inactive indicators are always reported `true`).\n */\n visible: boolean;\n}\n\n/** Options accepted when adding an indicator. */\nexport interface AddIndicatorOptions {\n /**\n * Bind the indicator to a custom Y-axis (klinecharts v10 multiple y-axes).\n * Provide a stable `id` to create/share a secondary axis; e.g.\n * `{ id: \"rsi_axis\", position: \"left\" }`. Omit to use the pane's default\n * (shared) axis.\n */\n yAxis?: YAxisOverride;\n}\n\nexport interface UseIndicatorsReturn {\n mainIndicators: IndicatorInfo[];\n subIndicators: IndicatorInfo[];\n activeMainIndicators: string[];\n activeSubIndicators: Record<string, string>;\n availableMainIndicators: string[];\n availableSubIndicators: string[];\n addMainIndicator: (name: string, options?: AddIndicatorOptions) => void;\n removeMainIndicator: (name: string) => void;\n addSubIndicator: (name: string, options?: AddIndicatorOptions) => void;\n removeSubIndicator: (name: string) => void;\n toggleMainIndicator: (name: string) => void;\n toggleSubIndicator: (name: string) => void;\n moveToMain: (name: string) => void;\n moveToSub: (name: string) => void;\n setIndicatorVisible: (\n name: string,\n isMain: boolean,\n visible: boolean,\n ) => void;\n /**\n * Read whether an indicator is currently visible. Returns `true` for the\n * default (un-toggled) state and for inactive indicators. This is the\n * reactive read counterpart to `setIndicatorVisible` — UI no longer needs to\n * track visibility locally or reach into the chart instance.\n */\n isIndicatorVisible: (name: string, isMain: boolean) => boolean;\n updateIndicatorParams: (\n name: string,\n paneId: string,\n params: number[],\n ) => void;\n getIndicatorParams: (\n name: string,\n ) => { label: string; defaultValue: number }[];\n isMainIndicatorActive: (name: string) => boolean;\n isSubIndicatorActive: (name: string) => boolean;\n /** Collapse a sub-indicator pane to minimal height (30px). */\n collapseSubIndicator: (name: string) => void;\n /** Expand a previously collapsed sub-indicator pane to its prior height. */\n expandSubIndicator: (name: string) => void;\n /** Whether the given sub-indicator pane is currently collapsed. */\n isSubIndicatorCollapsed: (name: string) => boolean;\n /** Reorder a sub-indicator pane up or down relative to other sub-indicators. */\n reorderSubIndicator: (name: string, direction: \"up\" | \"down\") => void;\n /**\n * Custom Y-axis bindings, keyed by indicator id (`main_<name>` /\n * `sub_<name>`). Only contains indicators bound to a secondary axis.\n */\n indicatorAxes: Record<string, string>;\n /** Get the custom `yAxisId` an indicator is bound to, or `undefined` for the default axis. */\n getIndicatorAxis: (name: string, isMain: boolean) => string | undefined;\n /**\n * Visibility overrides keyed by indicator id (`main_<name>` / `sub_<name>`).\n * Only contains indicators hidden away from the default; an absent key means\n * visible. Mirror of the provider state, exposed for layout-preset\n * persistence and direct rendering.\n */\n indicatorVisibility: Record<string, boolean>;\n /**\n * Rebind an existing indicator to a different Y-axis. Because klinecharts v10\n * `overrideIndicator` cannot change axis binding, this removes and recreates\n * the indicator (preserving calc params, styles and visibility).\n * Pass `yAxis` to bind to a secondary axis, or omit it to return the\n * indicator to the pane's default (shared) axis.\n */\n bindIndicatorToNewAxis: (\n name: string,\n isMain: boolean,\n yAxis?: YAxisOverride,\n ) => void;\n}\n\nconst COLLAPSED_HEIGHT = 30;\n\nexport function useIndicators(): UseIndicatorsReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n\n // Track original pane heights for collapse/expand\n const paneHeightsRef = useRef<Record<string, number>>({});\n const collapsedPanesRef = useRef<Set<string>>(new Set());\n\n const mainIndicators = useMemo(() => {\n const activeNames = state.mainIndicators;\n const inactive = MAIN_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({\n name,\n isActive: true,\n visible: state.indicatorVisibility[`main_${name}`] ?? true,\n })),\n ...inactive.map((name) => ({ name, isActive: false, visible: true })),\n ];\n }, [state.mainIndicators, state.indicatorVisibility]);\n\n const subIndicators = useMemo(() => {\n const activeNames = Object.keys(state.subIndicators);\n const inactive = SUB_INDICATORS.filter((n) => !activeNames.includes(n));\n return [\n ...activeNames.map((name) => ({\n name,\n isActive: true,\n visible: state.indicatorVisibility[`sub_${name}`] ?? true,\n })),\n ...inactive.map((name) => ({ name, isActive: false, visible: true })),\n ];\n }, [state.subIndicators, state.indicatorVisibility]);\n\n const addMainIndicator = useCallback(\n (name: string, options?: AddIndicatorOptions) => {\n if (state.mainIndicators.includes(name)) return;\n const yAxis = options?.yAxis;\n state.chart?.createIndicator(\n { name, id: `main_${name}` },\n { isStack: true, pane: { id: \"candle_pane\" }, yAxis },\n );\n const newIndicators = [...state.mainIndicators, name];\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n if (yAxis?.id) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [`main_${name}`]: yAxis.id },\n });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: false,\n isMain: true,\n paneId: \"candle_pane\",\n yAxisId: yAxis?.id,\n },\n });\n },\n [state.chart, state.mainIndicators, state.indicatorAxes, dispatch, undoRedoListenerRef],\n );\n\n const removeMainIndicator = useCallback(\n (name: string) => {\n const id = `main_${name}`;\n const yAxisId = state.indicatorAxes[id];\n state.chart?.removeIndicator({ id });\n const newIndicators = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n if (yAxisId) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n if (id in state.indicatorVisibility) {\n const nextVisibility = { ...state.indicatorVisibility };\n delete nextVisibility[id];\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: true, isMain: true, paneId: \"candle_pane\", yAxisId },\n });\n },\n [\n state.chart,\n state.mainIndicators,\n state.indicatorAxes,\n state.indicatorVisibility,\n dispatch,\n undoRedoListenerRef,\n ],\n );\n\n const addSubIndicator = useCallback(\n (name: string, options?: AddIndicatorOptions) => {\n if (name in state.subIndicators) return;\n const id = `sub_${name}`;\n const yAxis = options?.yAxis;\n state.chart?.createIndicator({ name, id }, { yAxis });\n const paneId = state.chart?.getIndicators({ id })?.[0]?.paneId ?? \"\";\n const newIndicators = { ...state.subIndicators, [name]: paneId };\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n if (yAxis?.id) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [id]: yAxis.id },\n });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: false, isMain: false, paneId, yAxisId: yAxis?.id },\n });\n },\n [state.chart, state.subIndicators, state.indicatorAxes, dispatch, undoRedoListenerRef],\n );\n\n const removeSubIndicator = useCallback(\n (name: string) => {\n const id = `sub_${name}`;\n const paneId = state.subIndicators[name] ?? \"\";\n const yAxisId = state.indicatorAxes[id];\n state.chart?.removeIndicator({ id });\n const newIndicators = { ...state.subIndicators };\n delete newIndicators[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n if (yAxisId) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n if (id in state.indicatorVisibility) {\n const nextVisibility = { ...state.indicatorVisibility };\n delete nextVisibility[id];\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n }\n undoRedoListenerRef.current?.({\n type: \"indicator_toggled\",\n data: { name, wasActive: true, isMain: false, paneId, yAxisId },\n });\n },\n [\n state.chart,\n state.subIndicators,\n state.indicatorAxes,\n state.indicatorVisibility,\n dispatch,\n undoRedoListenerRef,\n ],\n );\n\n const toggleMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) {\n removeMainIndicator(name);\n } else {\n addMainIndicator(name);\n }\n },\n [state.mainIndicators, addMainIndicator, removeMainIndicator],\n );\n\n const toggleSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) {\n removeSubIndicator(name);\n } else {\n addSubIndicator(name);\n }\n },\n [state.subIndicators, addSubIndicator, removeSubIndicator],\n );\n\n const setIndicatorVisible = useCallback(\n (name: string, isMain: boolean, visible: boolean) => {\n const id = isMain ? `main_${name}` : `sub_${name}`;\n state.chart?.overrideIndicator({ name, id, visible });\n // Mirror into provider state so `isIndicatorVisible` / the `visible`\n // field stay reactive. Keep the map sparse: drop the key when visible\n // (the default) instead of storing `true`.\n const nextVisibility = { ...state.indicatorVisibility };\n if (visible) delete nextVisibility[id];\n else nextVisibility[id] = false;\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n },\n [state.chart, state.indicatorVisibility, dispatch],\n );\n\n const isIndicatorVisible = useCallback(\n (name: string, isMain: boolean) =>\n state.indicatorVisibility[isMain ? `main_${name}` : `sub_${name}`] ?? true,\n [state.indicatorVisibility],\n );\n\n const updateIndicatorParams = useCallback(\n // `paneId` is kept in the signature for API stability; klinecharts v10\n // `overrideIndicator` no longer accepts it and targets by name/id instead.\n (name: string, _paneId: string, params: number[]) => {\n state.chart?.overrideIndicator({ name, calcParams: params });\n },\n [state.chart],\n );\n\n const getIndicatorParams = useCallback((name: string) => {\n const config = INDICATOR_PARAMS[name];\n if (!config) return [];\n return config.params.map((p) => ({\n label: p.label,\n defaultValue: p.defaultValue,\n }));\n }, []);\n\n const moveToMain = useCallback(\n (name: string) => {\n if (!state.chart) return;\n const prevCalcParams =\n state.chart.getIndicators({ id: `sub_${name}` })?.[0]?.calcParams;\n state.chart.removeIndicator({ id: `sub_${name}` });\n state.chart.createIndicator(\n {\n name,\n id: `main_${name}`,\n ...(prevCalcParams ? { calcParams: prevCalcParams } : {}),\n },\n { isStack: true, pane: { id: \"candle_pane\" } },\n );\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSub });\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const moveToSub = useCallback(\n (name: string) => {\n if (!state.chart) return;\n const prevCalcParams =\n state.chart.getIndicators({ id: `main_${name}` })?.[0]?.calcParams;\n state.chart.removeIndicator({ id: `main_${name}` });\n const subId = `sub_${name}`;\n state.chart.createIndicator({\n name,\n id: subId,\n ...(prevCalcParams ? { calcParams: prevCalcParams } : {}),\n });\n const paneId =\n state.chart.getIndicators({ id: subId })?.[0]?.paneId ?? \"\";\n const newMain = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newMain });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: { ...state.subIndicators, [name]: paneId },\n });\n },\n [state.chart, state.mainIndicators, state.subIndicators, dispatch],\n );\n\n const isMainIndicatorActive = useCallback(\n (name: string) => state.mainIndicators.includes(name),\n [state.mainIndicators],\n );\n\n const isSubIndicatorActive = useCallback(\n (name: string) => name in state.subIndicators,\n [state.subIndicators],\n );\n\n const collapseSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n if (!state.chart || !paneId) return;\n\n const currentSize = (state.chart as any).getSize?.(paneId);\n if (currentSize?.height && currentSize.height > COLLAPSED_HEIGHT) {\n paneHeightsRef.current[paneId] = currentSize.height;\n }\n collapsedPanesRef.current.add(paneId);\n\n (state.chart as any).setPaneOptions?.({\n id: paneId,\n height: COLLAPSED_HEIGHT,\n });\n const id = `sub_${name}`;\n state.chart.overrideIndicator({ name, id, visible: false });\n dispatch({\n type: \"SET_INDICATOR_VISIBILITY\",\n visibility: { ...state.indicatorVisibility, [id]: false },\n });\n },\n [state.chart, state.subIndicators, state.indicatorVisibility, dispatch],\n );\n\n const expandSubIndicator = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n if (!state.chart || !paneId) return;\n\n const savedHeight = paneHeightsRef.current[paneId] ?? 100;\n collapsedPanesRef.current.delete(paneId);\n\n (state.chart as any).setPaneOptions?.({\n id: paneId,\n height: savedHeight,\n });\n const id = `sub_${name}`;\n state.chart.overrideIndicator({ name, id, visible: true });\n const nextVisibility = { ...state.indicatorVisibility };\n delete nextVisibility[id];\n dispatch({ type: \"SET_INDICATOR_VISIBILITY\", visibility: nextVisibility });\n },\n [state.chart, state.subIndicators, state.indicatorVisibility, dispatch],\n );\n\n const isSubIndicatorCollapsed = useCallback(\n (name: string) => {\n const paneId = state.subIndicators[name];\n return paneId ? collapsedPanesRef.current.has(paneId) : false;\n },\n [state.subIndicators],\n );\n\n const reorderSubIndicator = useCallback(\n (name: string, direction: \"up\" | \"down\") => {\n if (!state.chart) return;\n\n const subNames = Object.keys(state.subIndicators);\n const idx = subNames.indexOf(name);\n if (idx === -1) return;\n\n const swapIdx = direction === \"up\" ? idx - 1 : idx + 1;\n if (swapIdx < 0 || swapIdx >= subNames.length) return;\n\n // Collect full indicator state for all sub-indicators\n const subStates = subNames.map((n) => {\n const id = `sub_${n}`;\n const indicator = state.chart!.getIndicators({ id })?.[0];\n return {\n name: n,\n calcParams: indicator?.calcParams,\n visible: indicator?.visible ?? true,\n styles: indicator?.styles,\n paneId: state.subIndicators[n],\n };\n });\n\n // Swap the two entries\n [subStates[idx], subStates[swapIdx]] = [subStates[swapIdx], subStates[idx]];\n\n // Remove all sub-indicators\n for (const n of subNames) {\n state.chart!.removeIndicator({ id: `sub_${n}` });\n }\n\n // Recreate in new order\n const newSubIndicators: Record<string, string> = {};\n for (const sub of subStates) {\n const id = `sub_${sub.name}`;\n state.chart!.createIndicator({\n name: sub.name,\n id,\n ...(sub.calcParams ? { calcParams: sub.calcParams } : {}),\n visible: sub.visible,\n });\n const paneId =\n state.chart!.getIndicators({ id })?.[0]?.paneId ?? \"\";\n newSubIndicators[sub.name] = paneId;\n\n if (sub.styles) {\n state.chart!.overrideIndicator({\n name: sub.name,\n id,\n styles: sub.styles,\n });\n }\n }\n\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newSubIndicators });\n },\n [state.chart, state.subIndicators, dispatch],\n );\n\n const getIndicatorAxis = useCallback(\n (name: string, isMain: boolean) =>\n state.indicatorAxes[isMain ? `main_${name}` : `sub_${name}`],\n [state.indicatorAxes],\n );\n\n const bindIndicatorToNewAxis = useCallback(\n (name: string, isMain: boolean, yAxis?: YAxisOverride) => {\n if (!state.chart) return;\n const id = isMain ? `main_${name}` : `sub_${name}`;\n const current = state.chart.getIndicators({ id })?.[0];\n if (!current) return;\n\n // Snapshot the indicator before recreating it on a different axis.\n const calcParams = current.calcParams;\n const styles = current.styles;\n const visible = current.visible ?? true;\n // Main indicators live on the candle pane; sub-indicators keep their pane.\n const paneId = isMain\n ? \"candle_pane\"\n : (current.paneId ?? state.subIndicators[name] ?? \"\");\n\n state.chart.removeIndicator({ id });\n state.chart.createIndicator(\n {\n name,\n id,\n ...(calcParams ? { calcParams } : {}),\n visible,\n },\n {\n isStack: isMain,\n ...(paneId ? { pane: { id: paneId } } : {}),\n yAxis,\n },\n );\n if (styles) {\n state.chart.overrideIndicator({ name, id, styles });\n }\n\n const nextAxes = { ...state.indicatorAxes };\n if (yAxis?.id) nextAxes[id] = yAxis.id;\n else delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n },\n [state.chart, state.indicatorAxes, state.subIndicators, dispatch],\n );\n\n return {\n mainIndicators,\n subIndicators,\n activeMainIndicators: state.mainIndicators,\n activeSubIndicators: state.subIndicators,\n availableMainIndicators: MAIN_INDICATORS,\n availableSubIndicators: SUB_INDICATORS,\n addMainIndicator,\n removeMainIndicator,\n addSubIndicator,\n removeSubIndicator,\n toggleMainIndicator,\n toggleSubIndicator,\n moveToMain,\n moveToSub,\n setIndicatorVisible,\n isIndicatorVisible,\n updateIndicatorParams,\n getIndicatorParams,\n isMainIndicatorActive,\n isSubIndicatorActive,\n collapseSubIndicator,\n expandSubIndicator,\n isSubIndicatorCollapsed,\n reorderSubIndicator,\n indicatorAxes: state.indicatorAxes,\n getIndicatorAxis,\n indicatorVisibility: state.indicatorVisibility,\n bindIndicatorToNewAxis,\n };\n}\n","export interface DrawingTool {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingToolCategory {\n key: string;\n tools: DrawingTool[];\n}\n\nexport const DRAWING_CATEGORIES: DrawingToolCategory[] = [\n {\n key: \"singleLine\",\n tools: [\n { name: \"horizontalStraightLine\", localeKey: \"horizontal_straight_line\" },\n { name: \"horizontalRayLine\", localeKey: \"horizontal_ray_line\" },\n { name: \"horizontalSegment\", localeKey: \"horizontal_segment\" },\n { name: \"verticalStraightLine\", localeKey: \"vertical_straight_line\" },\n { name: \"verticalRayLine\", localeKey: \"vertical_ray_line\" },\n { name: \"verticalSegment\", localeKey: \"vertical_segment\" },\n { name: \"straightLine\", localeKey: \"straight_line\" },\n { name: \"rayLine\", localeKey: \"ray_line\" },\n { name: \"segment\", localeKey: \"segment\" },\n { name: \"arrow\", localeKey: \"arrow\" },\n { name: \"priceLine\", localeKey: \"price_line\" },\n ],\n },\n {\n key: \"moreLine\",\n tools: [\n { name: \"priceChannelLine\", localeKey: \"price_channel_line\" },\n { name: \"parallelStraightLine\", localeKey: \"parallel_straight_line\" },\n { name: \"ray\", localeKey: \"ray\" },\n { name: \"parallelChannel\", localeKey: \"parallel_channel\" },\n ],\n },\n {\n key: \"polygon\",\n tools: [\n { name: \"circle\", localeKey: \"circle\" },\n { name: \"rect\", localeKey: \"rect\" },\n { name: \"parallelogram\", localeKey: \"parallelogram\" },\n { name: \"triangle\", localeKey: \"triangle\" },\n ],\n },\n {\n key: \"fibonacci\",\n tools: [\n { name: \"fibonacciLine\", localeKey: \"fibonacci_line\" },\n { name: \"fibonacciSegment\", localeKey: \"fibonacci_segment\" },\n { name: \"fibonacciCircle\", localeKey: \"fibonacci_circle\" },\n { name: \"fibonacciSpiral\", localeKey: \"fibonacci_spiral\" },\n {\n name: \"fibonacciSpeedResistanceFan\",\n localeKey: \"fibonacci_speed_resistance_fan\",\n },\n { name: \"fibonacciExtension\", localeKey: \"fibonacci_extension\" },\n { name: \"fibRetracement\", localeKey: \"fib_retracement\" },\n { name: \"gannBox\", localeKey: \"gann_box\" },\n { name: \"gannFan\", localeKey: \"gann_fan\" },\n ],\n },\n {\n key: \"wave\",\n tools: [\n { name: \"xabcd\", localeKey: \"xabcd\" },\n { name: \"abcd\", localeKey: \"abcd\" },\n { name: \"threeWaves\", localeKey: \"three_waves\" },\n { name: \"fiveWaves\", localeKey: \"five_waves\" },\n { name: \"eightWaves\", localeKey: \"eight_waves\" },\n { name: \"anyWaves\", localeKey: \"any_waves\" },\n { name: \"elliottWave\", localeKey: \"elliott_wave\" },\n ],\n },\n {\n key: \"measure\",\n tools: [\n { name: \"measure\", localeKey: \"measure\" },\n ],\n },\n {\n key: \"position\",\n tools: [\n { name: \"longPosition\", localeKey: \"long_position\" },\n { name: \"shortPosition\", localeKey: \"short_position\" },\n ],\n },\n {\n key: \"annotation\",\n tools: [\n { name: \"brush\", localeKey: \"brush\" },\n ],\n },\n];\n\nexport type MagnetMode = \"normal\" | \"weak\" | \"strong\";\n","import { useState, useCallback, useMemo, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\nimport { DRAWING_CATEGORIES, type MagnetMode } from \"../data/drawings\";\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\nexport interface DrawingToolItem {\n name: string;\n localeKey: string;\n}\n\nexport interface DrawingCategoryItem {\n key: string;\n tools: DrawingToolItem[];\n}\n\nexport interface UseDrawingToolsReturn {\n categories: DrawingCategoryItem[];\n activeTool: string | null;\n magnetMode: MagnetMode;\n isLocked: boolean;\n isVisible: boolean;\n /** Whether drawing tools auto-retrigger after completing a shape. Default: true. */\n autoRetrigger: boolean;\n selectTool: (name: string) => void;\n clearActiveTool: () => void;\n setMagnetMode: (mode: MagnetMode) => void;\n toggleLock: () => void;\n toggleVisibility: () => void;\n removeAllDrawings: () => void;\n /** Enable/disable auto-retrigger mode. */\n setAutoRetrigger: (enabled: boolean) => void;\n}\n\nexport function useDrawingTools(): UseDrawingToolsReturn {\n const { state } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n const [activeTool, setActiveTool] = useState<string | null>(null);\n const [magnetMode, setMagnetModeState] = useState<MagnetMode>(\"normal\");\n const [isLocked, setIsLocked] = useState(false);\n const [isVisible, setIsVisible] = useState(true);\n const [autoRetrigger, setAutoRetrigger] = useState(true);\n\n // Refs to capture latest state for the onDrawEnd closure\n const activeToolRef = useRef(activeTool);\n activeToolRef.current = activeTool;\n const autoRetriggerRef = useRef(autoRetrigger);\n autoRetriggerRef.current = autoRetrigger;\n const isLockedRef = useRef(isLocked);\n isLockedRef.current = isLocked;\n const isVisibleRef = useRef(isVisible);\n isVisibleRef.current = isVisible;\n const magnetModeRef = useRef(magnetMode);\n magnetModeRef.current = magnetMode;\n\n const categories = useMemo(\n () =>\n DRAWING_CATEGORIES.map((cat) => ({\n key: cat.key,\n tools: cat.tools.map((tool) => ({\n name: tool.name,\n localeKey: tool.localeKey,\n })),\n })),\n []\n );\n\n const createOverlayForTool = useCallback(\n (name: string) => {\n const mode =\n magnetModeRef.current === \"strong\"\n ? \"strong_magnet\"\n : magnetModeRef.current === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n state.chart?.createOverlay({\n name,\n groupId: DRAWING_GROUP_ID,\n lock: isLockedRef.current,\n visible: isVisibleRef.current,\n mode: mode as any,\n onDrawEnd: (event: any) => {\n const o = event.overlay;\n undoRedoListenerRef.current?.({\n type: \"overlay_added\",\n data: {\n id: o.id,\n overlayData: {\n name: o.name,\n points: o.points,\n styles: o.styles,\n extendData: o.extendData,\n },\n },\n });\n // Auto-retrigger: immediately start another overlay of the same type\n if (autoRetriggerRef.current && activeToolRef.current === name) {\n requestAnimationFrame(() => {\n createOverlayForTool(name);\n });\n }\n },\n });\n },\n [state.chart, undoRedoListenerRef],\n );\n\n const selectTool = useCallback(\n (name: string) => {\n setActiveTool(name);\n createOverlayForTool(name);\n },\n [createOverlayForTool],\n );\n\n const clearActiveTool = useCallback(() => {\n setActiveTool(null);\n }, []);\n\n const setMagnetMode = useCallback(\n (mode: MagnetMode) => {\n setMagnetModeState(mode);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n const overlayMode =\n mode === \"strong\"\n ? \"strong_magnet\"\n : mode === \"weak\"\n ? \"weak_magnet\"\n : \"normal\";\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n mode: overlayMode as any,\n });\n });\n }\n },\n [state.chart]\n );\n\n const toggleLock = useCallback(() => {\n const newLocked = !isLocked;\n setIsLocked(newLocked);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n lock: newLocked,\n });\n });\n }\n }, [state.chart, isLocked]);\n\n const toggleVisibility = useCallback(() => {\n const newVisible = !isVisible;\n setIsVisible(newVisible);\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays) {\n overlays.forEach((overlay: any) => {\n state.chart?.overrideOverlay({\n id: overlay.id,\n visible: newVisible,\n });\n });\n }\n }, [state.chart, isVisible]);\n\n const removeAllDrawings = useCallback(() => {\n const overlays = state.chart?.getOverlays({ groupId: DRAWING_GROUP_ID });\n if (overlays && overlays.length > 0) {\n const snapshot = overlays.map((o: any) => ({\n name: o.name,\n id: o.id,\n points: o.points,\n styles: o.styles,\n extendData: o.extendData,\n }));\n undoRedoListenerRef.current?.({\n type: \"overlays_removed\",\n data: { overlays: snapshot },\n });\n }\n state.chart?.removeOverlay({ groupId: DRAWING_GROUP_ID });\n setActiveTool(null);\n }, [state.chart, undoRedoListenerRef]);\n\n return {\n categories,\n activeTool,\n magnetMode,\n isLocked,\n isVisible,\n autoRetrigger,\n selectTool,\n clearActiveTool,\n setMagnetMode,\n toggleLock,\n toggleVisibility,\n removeAllDrawings,\n setAutoRetrigger,\n };\n}\n","export interface CandleTypeOption {\n key: string;\n localeKey: string;\n}\n\nexport const CANDLE_TYPES: CandleTypeOption[] = [\n { key: \"candle_solid\", localeKey: \"candle_solid\" },\n { key: \"candle_stroke\", localeKey: \"candle_stroke\" },\n { key: \"candle_up_stroke\", localeKey: \"candle_up_stroke\" },\n { key: \"candle_down_stroke\", localeKey: \"candle_down_stroke\" },\n { key: \"ohlc\", localeKey: \"ohlc\" },\n { key: \"area\", localeKey: \"area\" },\n];\n\nexport const PRICE_AXIS_TYPES = [\"normal\", \"percentage\", \"logarithm\"] as const;\nexport type PriceAxisType = (typeof PRICE_AXIS_TYPES)[number];\n\nexport const YAXIS_POSITIONS = [\"left\", \"right\"] as const;\nexport type YAxisPosition = (typeof YAXIS_POSITIONS)[number];\n\nexport const COMPARE_RULES = [\"current_open\", \"prev_close\"] as const;\nexport type CompareRule = (typeof COMPARE_RULES)[number];\n\nexport const TOOLTIP_SHOW_RULES = [\"always\", \"follow_cross\", \"none\"] as const;\nexport type TooltipShowRule = (typeof TOOLTIP_SHOW_RULES)[number];\n","import { useState, useCallback, useMemo, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport {\n CANDLE_TYPES,\n PRICE_AXIS_TYPES,\n YAXIS_POSITIONS,\n COMPARE_RULES,\n TOOLTIP_SHOW_RULES,\n type PriceAxisType,\n type YAxisPosition,\n type CompareRule,\n type TooltipShowRule,\n} from \"../data/candle-types\";\n\nexport interface CandleTypeItem {\n key: string;\n localeKey: string;\n}\n\nexport interface KlinechartsUISettingsState {\n // Candle\n candleType: string;\n candleUpColor: string;\n candleDownColor: string;\n compareRule: CompareRule;\n // Price marks\n showLastPrice: boolean;\n showLastPriceLine: boolean;\n showHighPrice: boolean;\n showLowPrice: boolean;\n showIndicatorLastValue: boolean;\n // Axis\n priceAxisType: PriceAxisType;\n yAxisPosition: YAxisPosition;\n yAxisInside: boolean;\n reverseCoordinate: boolean;\n showTimeAxis: boolean;\n // Chart elements\n showGrid: boolean;\n showCrosshair: boolean;\n // Tooltips\n showCandleTooltip: boolean;\n showIndicatorTooltip: boolean;\n tooltipShowRule: TooltipShowRule;\n}\n\nexport interface UseKlinechartsUISettingsReturn extends KlinechartsUISettingsState {\n candleTypes: CandleTypeItem[];\n priceAxisTypes: { key: PriceAxisType; localeKey: string }[];\n yAxisPositions: { key: YAxisPosition; localeKey: string }[];\n compareRules: { key: CompareRule; localeKey: string }[];\n tooltipShowRules: { key: TooltipShowRule; localeKey: string }[];\n setCandleType: (type: string) => void;\n setCandleUpColor: (color: string) => void;\n setCandleDownColor: (color: string) => void;\n setCompareRule: (rule: CompareRule) => void;\n setShowLastPrice: (show: boolean) => void;\n setShowLastPriceLine: (show: boolean) => void;\n setShowHighPrice: (show: boolean) => void;\n setShowLowPrice: (show: boolean) => void;\n setShowIndicatorLastValue: (show: boolean) => void;\n setPriceAxisType: (type: PriceAxisType) => void;\n setYAxisPosition: (position: YAxisPosition) => void;\n setYAxisInside: (inside: boolean) => void;\n setReverseCoordinate: (reverse: boolean) => void;\n setShowTimeAxis: (show: boolean) => void;\n setShowGrid: (show: boolean) => void;\n setShowCrosshair: (show: boolean) => void;\n setShowCandleTooltip: (show: boolean) => void;\n setShowIndicatorTooltip: (show: boolean) => void;\n setTooltipShowRule: (rule: TooltipShowRule) => void;\n resetToDefaults: () => void;\n}\n\nconst defaultSettings: KlinechartsUISettingsState = {\n candleType: \"candle_solid\",\n candleUpColor: \"#2DC08E\",\n candleDownColor: \"#F92855\",\n compareRule: \"current_open\",\n showLastPrice: true,\n showLastPriceLine: true,\n showHighPrice: true,\n showLowPrice: true,\n showIndicatorLastValue: true,\n priceAxisType: \"normal\",\n yAxisPosition: \"right\",\n yAxisInside: false,\n reverseCoordinate: false,\n showTimeAxis: true,\n showGrid: true,\n showCrosshair: true,\n showCandleTooltip: true,\n showIndicatorTooltip: true,\n tooltipShowRule: \"always\",\n};\n\nexport function useKlinechartsUISettings(): UseKlinechartsUISettingsReturn {\n const { state, onSettingsChange } = useKlinechartsUI();\n const [settings, setSettings] = useState<KlinechartsUISettingsState>(defaultSettings);\n const isInitialMount = useRef(true);\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n return;\n }\n onSettingsChange?.({ ...settings });\n }, [settings, onSettingsChange]);\n\n const candleTypes = useMemo(\n () =>\n CANDLE_TYPES.map((ct) => ({\n key: ct.key,\n localeKey: ct.localeKey,\n })),\n []\n );\n\n const priceAxisTypes = useMemo(\n () => PRICE_AXIS_TYPES.map((pat) => ({ key: pat, localeKey: pat })),\n []\n );\n\n const yAxisPositions = useMemo(\n () => YAXIS_POSITIONS.map((p) => ({ key: p, localeKey: p })),\n []\n );\n\n const compareRules = useMemo(\n () => COMPARE_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n const tooltipShowRules = useMemo(\n () => TOOLTIP_SHOW_RULES.map((r) => ({ key: r, localeKey: r })),\n []\n );\n\n const applyPaneAxis = useCallback(\n (axis: Record<string, unknown>) => {\n // klinecharts v10: axis configuration moved off setPaneOptions to\n // overrideYAxis. NOTE: klinecharts beta2 .d.ts mistypes the parameter of\n // `overrideYAxis` as `XAxisOverride` (the param names of overrideYAxis /\n // overrideXAxis are swapped in the core typings), while the runtime\n // correctly applies these fields to the Y (price) axis — hence the cast.\n (\n state.chart as unknown as {\n overrideYAxis?: (axis: Record<string, unknown>) => void;\n }\n )?.overrideYAxis?.({ paneId: \"candle_pane\", ...axis });\n },\n [state.chart]\n );\n\n // Apply initial settings when chart becomes available\n const hasAppliedInitial = useRef(false);\n useEffect(() => {\n if (!state.chart || hasAppliedInitial.current) return;\n hasAppliedInitial.current = true;\n\n // Sync axis settings via overrideYAxis (klinecharts v10: setPaneOptions no\n // longer handles axis configuration).\n const needsAxisOverride =\n settings.reverseCoordinate ||\n settings.priceAxisType !== \"normal\" ||\n settings.yAxisPosition !== \"right\" ||\n settings.yAxisInside;\n if (needsAxisOverride) {\n applyPaneAxis({\n ...(settings.priceAxisType !== \"normal\" && { name: settings.priceAxisType }),\n ...(settings.reverseCoordinate && { reverse: true }),\n ...(settings.yAxisPosition !== \"right\" && { position: settings.yAxisPosition }),\n ...(settings.yAxisInside && { inside: true }),\n });\n }\n\n // Sync indicator last value mark (klinecharts defaults to show: false)\n if (settings.showIndicatorLastValue) {\n state.chart.setStyles({\n indicator: { lastValueMark: { show: true } },\n });\n }\n }, [state.chart]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const applyStyle = useCallback(\n (path: string, value: unknown) => {\n const parts = path.split(\".\");\n const styleObj: Record<string, unknown> = {};\n let current: Record<string, unknown> = styleObj;\n for (let i = 0; i < parts.length - 1; i++) {\n current[parts[i]] = {};\n current = current[parts[i]] as Record<string, unknown>;\n }\n current[parts[parts.length - 1]] = value;\n state.chart?.setStyles(styleObj);\n },\n [state.chart]\n );\n\n\n const setCandleType = useCallback(\n (type: string) => {\n applyStyle(\"candle.type\", type);\n setSettings((s) => ({ ...s, candleType: type }));\n },\n [applyStyle]\n );\n\n const setCandleUpColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { upColor: color, upBorderColor: color, upWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleUpColor: color }));\n },\n [state.chart]\n );\n\n const setCandleDownColor = useCallback(\n (color: string) => {\n state.chart?.setStyles({\n candle: {\n bar: { downColor: color, downBorderColor: color, downWickColor: color },\n },\n });\n setSettings((s) => ({ ...s, candleDownColor: color }));\n },\n [state.chart]\n );\n\n const setCompareRule = useCallback(\n (rule: CompareRule) => {\n applyStyle(\"candle.bar.compareRule\", rule);\n setSettings((s) => ({ ...s, compareRule: rule }));\n },\n [applyStyle]\n );\n\n const setShowLastPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.show\", show);\n setSettings((s) => ({ ...s, showLastPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLastPriceLine = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.last.line.show\", show);\n setSettings((s) => ({ ...s, showLastPriceLine: show }));\n },\n [applyStyle]\n );\n\n const setShowHighPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.high.show\", show);\n setSettings((s) => ({ ...s, showHighPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowLowPrice = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.priceMark.low.show\", show);\n setSettings((s) => ({ ...s, showLowPrice: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorLastValue = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.lastValueMark.show\", show);\n setSettings((s) => ({ ...s, showIndicatorLastValue: show }));\n },\n [applyStyle]\n );\n\n const setPriceAxisType = useCallback(\n (type: PriceAxisType) => {\n applyPaneAxis({ name: type });\n setSettings((s) => ({ ...s, priceAxisType: type }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisPosition = useCallback(\n (position: YAxisPosition) => {\n applyPaneAxis({ position });\n setSettings((s) => ({ ...s, yAxisPosition: position }));\n },\n [applyPaneAxis]\n );\n\n const setYAxisInside = useCallback(\n (inside: boolean) => {\n applyPaneAxis({ inside });\n setSettings((s) => ({ ...s, yAxisInside: inside }));\n },\n [applyPaneAxis]\n );\n\n const setReverseCoordinate = useCallback(\n (reverse: boolean) => {\n applyPaneAxis({ reverse });\n setSettings((s) => ({ ...s, reverseCoordinate: reverse }));\n },\n [applyPaneAxis]\n );\n\n const setShowGrid = useCallback(\n (show: boolean) => {\n applyStyle(\"grid.show\", show);\n setSettings((s) => ({ ...s, showGrid: show }));\n },\n [applyStyle]\n );\n\n const setShowTimeAxis = useCallback(\n (show: boolean) => {\n applyStyle(\"xAxis.show\", show);\n setSettings((s) => ({ ...s, showTimeAxis: show }));\n },\n [applyStyle]\n );\n\n const setShowCrosshair = useCallback(\n (show: boolean) => {\n applyStyle(\"crosshair.show\", show);\n setSettings((s) => ({ ...s, showCrosshair: show }));\n },\n [applyStyle]\n );\n\n const setShowCandleTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"candle.tooltip.show\", show);\n setSettings((s) => ({ ...s, showCandleTooltip: show }));\n },\n [applyStyle]\n );\n\n const setShowIndicatorTooltip = useCallback(\n (show: boolean) => {\n applyStyle(\"indicator.tooltip.show\", show);\n setSettings((s) => ({ ...s, showIndicatorTooltip: show }));\n },\n [applyStyle]\n );\n\n const setTooltipShowRule = useCallback(\n (rule: TooltipShowRule) => {\n state.chart?.setStyles({\n candle: { tooltip: { showRule: rule } },\n indicator: { tooltip: { showRule: rule } },\n });\n setSettings((s) => ({ ...s, tooltipShowRule: rule }));\n },\n [state.chart]\n );\n\n const resetToDefaults = useCallback(() => {\n setSettings(defaultSettings);\n state.chart?.setStyles(state.theme);\n // Reset axis options to defaults\n applyPaneAxis({ name: \"normal\", reverse: false, position: \"right\", inside: false });\n }, [state.chart, state.theme, applyPaneAxis]);\n\n return {\n ...settings,\n candleTypes,\n priceAxisTypes,\n yAxisPositions,\n compareRules,\n tooltipShowRules,\n setCandleType,\n setCandleUpColor,\n setCandleDownColor,\n setCompareRule,\n setShowLastPrice,\n setShowLastPriceLine,\n setShowHighPrice,\n setShowLowPrice,\n setShowIndicatorLastValue,\n setPriceAxisType,\n setYAxisPosition,\n setYAxisInside,\n setReverseCoordinate,\n setShowTimeAxis,\n setShowGrid,\n setShowCrosshair,\n setShowCandleTooltip,\n setShowIndicatorTooltip,\n setTooltipShowRule,\n resetToDefaults,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface UseScreenshotReturn {\n screenshotUrl: string | null;\n capture: () => void;\n download: (filename?: string) => void;\n clear: () => void;\n}\n\nexport function useScreenshot(): UseScreenshotReturn {\n const { state, dispatch } = useKlinechartsUI();\n\n const capture = useCallback(() => {\n if (!state.chart) return;\n const url = state.chart.getConvertPictureUrl(true, \"jpeg\", state.theme === \"dark\" ? \"#151517\" : \"#ffffff\");\n dispatch({ type: \"SET_SCREENSHOT_URL\", url });\n }, [state.chart, state.theme, dispatch]);\n\n const download = useCallback(\n (filename = \"chart-screenshot.jpg\") => {\n if (!state.screenshotUrl) return;\n const link = document.createElement(\"a\");\n link.href = state.screenshotUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n },\n [state.screenshotUrl]\n );\n\n const clear = useCallback(() => {\n dispatch({ type: \"SET_SCREENSHOT_URL\", url: null });\n }, [dispatch]);\n\n return {\n screenshotUrl: state.screenshotUrl,\n capture,\n download,\n clear,\n };\n}\n","import { useCallback } from \"react\";\nimport {\n registerHotkey as registerHotkeyGlobal,\n getHotkey as getHotkeyGlobal,\n getSupportedHotkeys,\n} from \"react-klinecharts\";\nimport type { HotkeyTemplate, Hotkey } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type { HotkeyTemplate, Hotkey } from \"react-klinecharts\";\nexport type { HotkeyActionParams } from \"react-klinecharts\";\n\nexport interface UseHotkeysReturn {\n /**\n * Register a custom hotkey globally. Idempotent per `template.name` — calling\n * again with the same name replaces the previous handler. The `action`\n * callback receives the chart instance, the keyboard event and the matched\n * hotkey template (see klinecharts `HotkeyActionParams`).\n */\n registerHotkey: (template: HotkeyTemplate) => void;\n /** Look up a registered hotkey template by name (built-in or custom). */\n getHotkey: (name: string) => HotkeyTemplate | null;\n /** Names of every registered hotkey (built-in + custom). */\n supportedHotkeys: string[];\n /**\n * Enable or disable hotkey handling for the current chart. Pass `exclude`\n * to keep hotkeys on but silence specific ones by name.\n */\n setHotkeysEnabled: (enabled: boolean, exclude?: string[]) => void;\n /** The current hotkey config (`{ enabled, exclude }`) for the chart, or null. */\n getHotkeysConfig: () => Hotkey | null;\n}\n\n/**\n * Headless hook for klinecharts v10 keyboard shortcuts (added in\n * klinecharts 10.0.0-beta3).\n *\n * Custom hotkeys are registered **globally** via klinecharts `registerHotkey`,\n * so a shortcut defined here is shared by every chart in the page; the\n * per-chart enable/exclude switches operate on the provider's chart instance.\n */\nexport function useHotkeys(): UseHotkeysReturn {\n const { state } = useKlinechartsUI();\n\n const registerHotkey = useCallback((template: HotkeyTemplate) => {\n registerHotkeyGlobal(template);\n }, []);\n\n const getHotkey = useCallback(\n (name: string) => getHotkeyGlobal(name) ?? null,\n [],\n );\n\n const setHotkeysEnabled = useCallback(\n (enabled: boolean, exclude?: string[]) => {\n state.chart?.setHotkey(\n exclude ? { enabled, exclude } : { enabled },\n );\n },\n [state.chart],\n );\n\n const getHotkeysConfig = useCallback(\n () => state.chart?.getHotkey() ?? null,\n [state.chart],\n );\n\n return {\n registerHotkey,\n getHotkey,\n supportedHotkeys: getSupportedHotkeys(),\n setHotkeysEnabled,\n getHotkeysConfig,\n };\n}\n","import { useCallback } from \"react\";\nimport type { XAxisOverride, YAxisOverride } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type { XAxisOverride, YAxisOverride } from \"react-klinecharts\";\n\nexport interface UseChartAxesReturn {\n /**\n * Override the main pane's X (time) axis — e.g. `scrollZoomEnabled`,\n * `name`, or a custom `createTicks` generator. Added in klinecharts\n * 10.0.0-beta2.\n */\n overrideXAxis: (override: XAxisOverride) => void;\n /**\n * Override a Y (value) axis — e.g. `reverse` to flip the price scale,\n * `inside` to draw labels inside the pane, `position`, or a custom\n * `createRange` / `createTicks`. Target a specific axis with `id` / `paneId`.\n * Added in klinecharts 10.0.0-beta2.\n */\n overrideYAxis: (override: YAxisOverride) => void;\n}\n\n// klinecharts 10.0.0-beta3 ships these two instance methods with their\n// parameter types crossed in the published `.d.ts` (`overrideXAxis` is typed to\n// accept `YAxisOverride` and vice-versa). The runtime is correct, so we cast\n// through this shape to expose semantically-correct signatures to consumers.\ntype AxisOverrideChart = {\n overrideXAxis: (override: XAxisOverride) => void;\n overrideYAxis: (override: YAxisOverride) => void;\n};\n\n/**\n * Headless hook for overriding the chart's built-in X / Y axes (klinecharts\n * v10 `overrideXAxis` / `overrideYAxis`). For binding indicators to additional\n * secondary Y-axes, use {@link useIndicators} instead.\n */\nexport function useChartAxes(): UseChartAxesReturn {\n const { state } = useKlinechartsUI();\n\n const overrideXAxis = useCallback(\n (override: XAxisOverride) => {\n if (!state.chart) return;\n (state.chart as unknown as AxisOverrideChart).overrideXAxis(override);\n },\n [state.chart],\n );\n\n const overrideYAxis = useCallback(\n (override: YAxisOverride) => {\n if (!state.chart) return;\n (state.chart as unknown as AxisOverrideChart).overrideYAxis(override);\n },\n [state.chart],\n );\n\n return { overrideXAxis, overrideYAxis };\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport { useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport interface UseFullscreenReturn {\n isFullscreen: boolean;\n toggle: () => void;\n enter: () => void;\n exit: () => void;\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nexport function useFullscreen(): UseFullscreenReturn {\n const { fullscreenContainerRef } = useKlinechartsUIDispatch();\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n const enter = useCallback(() => {\n const el = fullscreenContainerRef.current;\n if (!el) return;\n if (el.requestFullscreen) {\n el.requestFullscreen();\n } else if (\"webkitRequestFullscreen\" in el) {\n (el as HTMLElement & { webkitRequestFullscreen: () => void }).webkitRequestFullscreen();\n } else if (\"msRequestFullscreen\" in el) {\n (el as HTMLElement & { msRequestFullscreen: () => void }).msRequestFullscreen();\n }\n }, [fullscreenContainerRef]);\n\n const exit = useCallback(() => {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (\"webkitExitFullscreen\" in document) {\n (document as Document & { webkitExitFullscreen: () => void }).webkitExitFullscreen();\n } else if (\"msExitFullscreen\" in document) {\n (document as Document & { msExitFullscreen: () => void }).msExitFullscreen();\n }\n }, []);\n\n const toggle = useCallback(() => {\n if (isFullscreen) {\n exit();\n } else {\n enter();\n }\n }, [isFullscreen, enter, exit]);\n\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", handler);\n document.addEventListener(\"webkitfullscreenchange\", handler);\n return () => {\n document.removeEventListener(\"fullscreenchange\", handler);\n document.removeEventListener(\"webkitfullscreenchange\", handler);\n };\n }, []);\n\n return {\n isFullscreen,\n toggle,\n enter,\n exit,\n containerRef: fullscreenContainerRef,\n };\n}\n","import { useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { OrderLineExtendData } from \"../extensions/overlays/orderLine\";\n\nexport interface OrderLineOptions extends OrderLineExtendData {\n /** Unique identifier. Auto-generated if omitted. */\n id?: string;\n /** Price level for the line. */\n price: number;\n /** Whether the user can drag the line to change its price. Defaults to false. */\n draggable?: boolean;\n /**\n * Called when the user finishes dragging the line to a new price.\n * Receives the final price value after the drag ends.\n */\n onPriceChange?: (price: number) => void;\n}\n\nexport interface UseOrderLinesReturn {\n /**\n * Creates an order line overlay at the given price level.\n * Returns the line id, or null if the chart is not yet ready.\n */\n createOrderLine: (options: OrderLineOptions) => string | null;\n /**\n * Updates an existing order line.\n * Supply only the fields you want to change.\n * Updating onPriceChange replaces the previous callback.\n */\n updateOrderLine: (\n id: string,\n options: Partial<Omit<OrderLineOptions, \"id\">>,\n ) => void;\n /** Removes the order line with the given id. */\n removeOrderLine: (id: string) => void;\n /** Removes all order lines created with this hook. */\n removeAllOrderLines: () => void;\n}\n\nexport function useOrderLines(): UseOrderLinesReturn {\n const { state } = useKlinechartsUI();\n\n // Map of id → onPriceChange callback. The stable onPressedMoveEnd closure\n // reads from this ref so callbacks can be updated without re-creating overlays.\n const callbacksRef = useRef<Map<string, (price: number) => void>>(new Map());\n\n const createOrderLine = useCallback(\n (options: OrderLineOptions): string | null => {\n if (!state.chart) return null;\n const {\n id: optId,\n price,\n draggable = false,\n onPriceChange,\n ...extendData\n } = options;\n const id =\n optId ??\n `order_line_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n\n if (onPriceChange) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n // Anchor the point using the latest bar's timestamp. This is stable\n // across data pagination (left-scroll adds bars, shifting dataIndex).\n const dataList = state.chart.getDataList();\n const anchorTimestamp =\n dataList.length > 0 ? dataList[dataList.length - 1].timestamp : Date.now();\n\n state.chart.createOverlay({\n name: \"orderLine\",\n id,\n points: [{ timestamp: anchorTimestamp, value: price }],\n extendData,\n lock: !draggable,\n mode: \"normal\",\n onPressedMoveEnd: (event) => {\n const newPrice = event.overlay.points[0]?.value;\n if (newPrice != null) {\n callbacksRef.current.get(id)?.(newPrice);\n }\n },\n });\n return id;\n },\n [state.chart],\n );\n\n const updateOrderLine = useCallback(\n (id: string, options: Partial<Omit<OrderLineOptions, \"id\">>) => {\n if (!state.chart) return;\n const { price, draggable, onPriceChange, ...extendData } = options;\n const existing = state.chart.getOverlays({ id })?.[0];\n if (!existing) return;\n\n if (onPriceChange !== undefined) {\n callbacksRef.current.set(id, onPriceChange);\n }\n\n const dataList = state.chart.getDataList();\n const anchorTimestamp =\n dataList.length > 0 ? dataList[dataList.length - 1].timestamp : Date.now();\n state.chart.overrideOverlay({\n id,\n ...(price != null\n ? { points: [{ timestamp: anchorTimestamp, value: price }] }\n : {}),\n ...(draggable != null ? { lock: !draggable } : {}),\n extendData: {\n ...(existing.extendData as OrderLineExtendData),\n ...extendData,\n },\n });\n },\n [state.chart],\n );\n\n const removeOrderLine = useCallback(\n (id: string) => {\n state.chart?.removeOverlay({ id });\n callbacksRef.current.delete(id);\n },\n [state.chart],\n );\n\n const removeAllOrderLines = useCallback(() => {\n state.chart?.removeOverlay({ name: \"orderLine\" });\n callbacksRef.current.clear();\n }, [state.chart]);\n\n return {\n createOrderLine,\n updateOrderLine,\n removeOrderLine,\n removeAllOrderLines,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useKlinechartsUI, useKlinechartsUIDispatch } from \"../provider/ChartTerminalContext\";\n\nexport type UndoRedoActionType =\n | \"overlay_added\"\n | \"overlays_removed\"\n | \"indicator_toggled\";\n\nexport interface UndoRedoAction {\n type: UndoRedoActionType;\n /** Snapshot data needed to undo/redo this action */\n data: any;\n}\n\nexport interface UseUndoRedoReturn {\n /** Whether there are actions to undo */\n canUndo: boolean;\n /** Whether there are actions to redo */\n canRedo: boolean;\n /** Undo the last action */\n undo: () => void;\n /** Redo the last undone action */\n redo: () => void;\n /** Push a new action onto the undo stack (clears redo stack) */\n pushAction: (action: UndoRedoAction) => void;\n /** Clear all undo/redo history */\n clear: () => void;\n}\n\nconst DRAWING_GROUP_ID = \"drawing_tools\";\n\n/**\n * Headless hook for undo/redo of drawing overlays and indicator toggles.\n *\n * Supports keyboard shortcuts: Ctrl+Z (undo), Ctrl+Y / Ctrl+Shift+Z (redo).\n */\nexport function useUndoRedo(): UseUndoRedoReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { undoRedoListenerRef } = useKlinechartsUIDispatch();\n const [undoStack, setUndoStack] = useState<UndoRedoAction[]>([]);\n const [redoStack, setRedoStack] = useState<UndoRedoAction[]>([]);\n const isProcessingRef = useRef(false);\n\n const canUndo = undoStack.length > 0;\n const canRedo = redoStack.length > 0;\n\n const pushAction = useCallback((action: UndoRedoAction) => {\n if (isProcessingRef.current) return; // skip actions triggered by undo/redo itself\n setUndoStack((prev) => [...prev, action]);\n setRedoStack([]);\n }, []);\n\n // Register pushAction so other hooks (useDrawingTools, useIndicators) can call it.\n useEffect(() => {\n undoRedoListenerRef.current = pushAction as any;\n return () => { undoRedoListenerRef.current = null; };\n }, [pushAction, undoRedoListenerRef]);\n\n const clear = useCallback(() => {\n setUndoStack([]);\n setRedoStack([]);\n }, []);\n\n const undo = useCallback(() => {\n if (undoStack.length === 0 || !state.chart || isProcessingRef.current)\n return;\n isProcessingRef.current = true;\n\n const action = undoStack[undoStack.length - 1];\n setUndoStack((prev) => prev.slice(0, -1));\n\n try {\n switch (action.type) {\n case \"overlay_added\": {\n // Remove the overlay that was added\n const { id, overlayData } = action.data;\n state.chart.removeOverlay({ id });\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"overlay_added\",\n data: { id, overlayData },\n },\n ]);\n break;\n }\n case \"overlays_removed\": {\n // Restore all overlays that were removed\n const { overlays } = action.data;\n const restoredIds: string[] = [];\n for (const overlay of overlays) {\n const newId = state.chart.createOverlay({\n ...overlay,\n groupId: DRAWING_GROUP_ID,\n });\n if (typeof newId === \"string\") {\n restoredIds.push(newId);\n }\n }\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"overlays_removed\",\n data: {\n overlays: overlays.map((o: any, i: number) => ({\n ...o,\n id: restoredIds[i],\n })),\n },\n },\n ]);\n break;\n }\n case \"indicator_toggled\": {\n const { name, wasActive, isMain, paneId, yAxisId } = action.data;\n const id = isMain ? `main_${name}` : `sub_${name}`;\n if (wasActive) {\n // It was active before, so re-add it (preserving its axis binding).\n if (isMain) {\n state.chart.createIndicator(\n { name, id },\n {\n isStack: true,\n pane: { id: \"candle_pane\" },\n ...(yAxisId ? { yAxis: { id: yAxisId } } : {}),\n },\n );\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n } else {\n state.chart.createIndicator(\n { name, id },\n yAxisId ? { yAxis: { id: yAxisId } } : undefined,\n );\n const newPaneId =\n state.chart.getIndicators({ id })?.[0]?.paneId ?? \"\";\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: {\n ...state.subIndicators,\n [name]: newPaneId,\n },\n });\n }\n if (yAxisId) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [id]: yAxisId },\n });\n }\n } else {\n // It was not active before, so remove it\n state.chart.removeIndicator({ id });\n if (isMain) {\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: state.mainIndicators.filter(\n (n) => n !== name,\n ),\n });\n } else {\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSub,\n });\n }\n if (state.indicatorAxes[id]) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n }\n setRedoStack((prev) => [\n ...prev,\n {\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: !wasActive,\n isMain,\n paneId,\n yAxisId,\n },\n },\n ]);\n break;\n }\n }\n } finally {\n isProcessingRef.current = false;\n }\n }, [undoStack, state.chart, state.mainIndicators, state.subIndicators, state.indicatorAxes, dispatch]);\n\n const redo = useCallback(() => {\n if (redoStack.length === 0 || !state.chart || isProcessingRef.current)\n return;\n isProcessingRef.current = true;\n\n const action = redoStack[redoStack.length - 1];\n setRedoStack((prev) => prev.slice(0, -1));\n\n try {\n switch (action.type) {\n case \"overlay_added\": {\n // Re-create the overlay\n const { overlayData } = action.data;\n const newId = state.chart.createOverlay({\n ...overlayData,\n groupId: DRAWING_GROUP_ID,\n });\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"overlay_added\",\n data: {\n id: typeof newId === \"string\" ? newId : action.data.id,\n overlayData,\n },\n },\n ]);\n break;\n }\n case \"overlays_removed\": {\n // Remove all the restored overlays\n const { overlays } = action.data;\n const snapshotOverlays = overlays.map((o: any) => {\n const allOverlays = state.chart?.getOverlays({ id: o.id });\n const actual = allOverlays?.[0];\n return actual\n ? {\n name: actual.name,\n points: actual.points,\n styles: actual.styles,\n extendData: actual.extendData,\n }\n : o;\n });\n for (const overlay of overlays) {\n state.chart.removeOverlay({ id: overlay.id });\n }\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"overlays_removed\",\n data: { overlays: snapshotOverlays },\n },\n ]);\n break;\n }\n case \"indicator_toggled\": {\n const { name, wasActive, isMain, paneId, yAxisId } = action.data;\n const id = isMain ? `main_${name}` : `sub_${name}`;\n if (wasActive) {\n if (isMain) {\n state.chart.createIndicator(\n { name, id },\n {\n isStack: true,\n pane: { id: \"candle_pane\" },\n ...(yAxisId ? { yAxis: { id: yAxisId } } : {}),\n },\n );\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: [...state.mainIndicators, name],\n });\n } else {\n state.chart.createIndicator(\n { name, id },\n yAxisId ? { yAxis: { id: yAxisId } } : undefined,\n );\n const newPaneId =\n state.chart.getIndicators({ id })?.[0]?.paneId ?? \"\";\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: {\n ...state.subIndicators,\n [name]: newPaneId,\n },\n });\n }\n if (yAxisId) {\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: { ...state.indicatorAxes, [id]: yAxisId },\n });\n }\n } else {\n state.chart.removeIndicator({ id });\n if (isMain) {\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: state.mainIndicators.filter(\n (n) => n !== name,\n ),\n });\n } else {\n const newSub = { ...state.subIndicators };\n delete newSub[name];\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSub,\n });\n }\n if (state.indicatorAxes[id]) {\n const nextAxes = { ...state.indicatorAxes };\n delete nextAxes[id];\n dispatch({ type: \"SET_INDICATOR_AXES\", axes: nextAxes });\n }\n }\n setUndoStack((prev) => [\n ...prev,\n {\n type: \"indicator_toggled\",\n data: {\n name,\n wasActive: !wasActive,\n isMain,\n paneId,\n yAxisId,\n },\n },\n ]);\n break;\n }\n }\n } finally {\n isProcessingRef.current = false;\n }\n }, [redoStack, state.chart, state.mainIndicators, state.subIndicators, state.indicatorAxes, dispatch]);\n\n // Keyboard shortcuts\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n const isCtrlOrMeta = e.ctrlKey || e.metaKey;\n if (!isCtrlOrMeta) return;\n\n if (e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n undo();\n } else if (\n e.key === \"y\" ||\n (e.key === \"z\" && e.shiftKey)\n ) {\n e.preventDefault();\n redo();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [undo, redo]);\n\n return {\n canUndo,\n canRedo,\n undo,\n redo,\n pushAction,\n clear,\n };\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nconst STORAGE_KEY_PREFIX = \"klinecharts_layout:\";\nconst INDEX_KEY = \"klinecharts_layout_index\";\nconst STATE_VERSION = \"1.0\";\n\nexport interface ChartLayoutState {\n version: string;\n meta: {\n symbol: string;\n period: string;\n timestamp: number;\n lastModified: number;\n };\n indicators: Array<{\n paneId: string;\n name: string;\n calcParams: any[];\n visible: boolean;\n styles?: any;\n /** Custom Y-axis the indicator is bound to (klinecharts v10 multiple y-axes). */\n yAxisId?: string;\n }>;\n drawings: Array<{\n name: string;\n points: any[];\n styles?: any;\n extendData?: any;\n }>;\n}\n\nexport interface LayoutEntry {\n id: string;\n name: string;\n symbol: string;\n period: string;\n timestamp: number;\n lastModified: number;\n state: ChartLayoutState;\n}\n\nexport interface UseLayoutManagerReturn {\n /** List of saved layout entries */\n layouts: LayoutEntry[];\n /** Save current chart state as a named layout */\n saveLayout: (name: string) => string | null;\n /** Load a layout by ID and apply to the chart */\n loadLayout: (id: string) => boolean;\n /** Delete a layout by ID */\n deleteLayout: (id: string) => void;\n /** Rename a layout */\n renameLayout: (id: string, name: string) => boolean;\n /** Refresh the layouts list from localStorage */\n refreshLayouts: () => void;\n /** Whether auto-save is enabled */\n autoSaveEnabled: boolean;\n /** Toggle auto-save on/off */\n setAutoSaveEnabled: (enabled: boolean) => void;\n}\n\nfunction generateId(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(\n /[xy]/g,\n (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n },\n );\n}\n\nfunction getLayoutIds(): string[] {\n try {\n const raw = localStorage.getItem(INDEX_KEY);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction getEntry(id: string): LayoutEntry | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY_PREFIX + id);\n return raw ? JSON.parse(raw) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Headless hook for saving, loading, and managing named chart layouts\n * via localStorage. Supports auto-save with 5-second debounce.\n */\nexport function useLayoutManager(): UseLayoutManagerReturn {\n const { state, dispatch } = useKlinechartsUI();\n const [layouts, setLayouts] = useState<LayoutEntry[]>([]);\n const [autoSaveEnabled, setAutoSaveEnabled] = useState(false);\n const autoSaveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const autoSaveIdRef = useRef<string | null>(null);\n\n const refreshLayouts = useCallback(() => {\n const entries = getLayoutIds()\n .map((id) => getEntry(id))\n .filter((e): e is LayoutEntry => e !== null);\n setLayouts(entries);\n }, []);\n\n // Load layouts on mount\n useEffect(() => {\n refreshLayouts();\n }, [refreshLayouts]);\n\n const serializeState = useCallback((): ChartLayoutState | null => {\n const chart = state.chart;\n if (!chart) return null;\n\n const indicators: ChartLayoutState[\"indicators\"] = [];\n const indicatorMap = (chart as any).getIndicatorByPaneId?.();\n if (indicatorMap) {\n indicatorMap.forEach((paneIndicators: any, paneId: string) => {\n paneIndicators.forEach((indicator: any) => {\n // Persist a custom axis binding only when it was explicitly tracked\n // (avoids serializing the pane's default axis id).\n const yAxisId = state.indicatorAxes[indicator.id];\n indicators.push({\n paneId,\n name: indicator.name,\n calcParams: indicator.calcParams,\n visible: indicator.visible,\n ...(indicator.styles ? { styles: indicator.styles } : {}),\n ...(yAxisId ? { yAxisId } : {}),\n });\n });\n });\n }\n\n const drawings: ChartLayoutState[\"drawings\"] = [];\n const allOverlays = chart.getOverlays({});\n if (allOverlays) {\n for (const overlay of allOverlays) {\n drawings.push({\n name: overlay.name,\n points: overlay.points,\n styles: overlay.styles,\n extendData: overlay.extendData,\n });\n }\n }\n\n return {\n version: STATE_VERSION,\n meta: {\n symbol: state.symbol?.ticker ?? \"\",\n period: state.period?.label ?? \"\",\n timestamp: Date.now(),\n lastModified: Date.now(),\n },\n indicators,\n drawings,\n };\n }, [state.chart, state.symbol, state.period, state.indicatorAxes]);\n\n const saveLayout = useCallback(\n (name: string): string | null => {\n const chartState = serializeState();\n if (!chartState) return null;\n\n const id = generateId();\n const now = Date.now();\n const entry: LayoutEntry = {\n id,\n name: name.trim() || `Layout ${new Date(now).toLocaleString()}`,\n symbol: chartState.meta.symbol,\n period: chartState.meta.period,\n timestamp: now,\n lastModified: now,\n state: chartState,\n };\n\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(entry),\n );\n const ids = getLayoutIds();\n if (!ids.includes(id)) {\n ids.push(id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n }\n\n refreshLayouts();\n return id;\n },\n [serializeState, refreshLayouts],\n );\n\n const loadLayout = useCallback(\n (id: string): boolean => {\n const entry = getEntry(id);\n if (!entry || !state.chart) return false;\n\n const chartState = entry.state;\n if (chartState.version !== STATE_VERSION) return false;\n\n const chart = state.chart;\n\n // Clear existing overlays\n chart.removeOverlay();\n\n // Clear existing indicators (except built-in)\n const indicatorMap = (chart as any).getIndicatorByPaneId?.();\n if (indicatorMap) {\n indicatorMap.forEach((_paneIndicators: any, paneId: string) => {\n _paneIndicators.forEach((_: any, indicatorName: string) => {\n chart.removeIndicator({ paneId, name: indicatorName });\n });\n });\n }\n\n // Restore indicators\n const newMainIndicators: string[] = [];\n const newSubIndicators: Record<string, string> = {};\n const restoredAxes: Record<string, string> = {};\n const restoredVisibility: Record<string, boolean> = {};\n\n if (chartState.indicators) {\n for (const ind of chartState.indicators) {\n const isMain = ind.paneId === \"candle_pane\";\n // Use the canonical id convention so the restored indicators stay in\n // sync with useIndicators (removable, axis-trackable).\n const id = isMain ? `main_${ind.name}` : `sub_${ind.name}`;\n chart.createIndicator(\n {\n name: ind.name,\n id,\n calcParams: ind.calcParams,\n visible: ind.visible,\n },\n {\n isStack: ind.paneId !== \"candle_pane\",\n pane: { id: ind.paneId },\n ...(ind.yAxisId ? { yAxis: { id: ind.yAxisId } } : {}),\n },\n );\n\n if (ind.styles) {\n chart.overrideIndicator({\n name: ind.name,\n id,\n styles: ind.styles,\n });\n }\n\n if (ind.yAxisId) {\n restoredAxes[id] = ind.yAxisId;\n }\n\n // Mirror visibility into the sparse map (only when hidden) so the\n // useIndicators getter reflects the restored preset.\n if (ind.visible === false) {\n restoredVisibility[id] = false;\n }\n\n if (isMain) {\n newMainIndicators.push(ind.name);\n } else {\n newSubIndicators[ind.name] = ind.paneId;\n }\n }\n }\n\n dispatch({\n type: \"SET_MAIN_INDICATORS\",\n indicators: newMainIndicators,\n });\n dispatch({\n type: \"SET_SUB_INDICATORS\",\n indicators: newSubIndicators,\n });\n dispatch({\n type: \"SET_INDICATOR_AXES\",\n axes: restoredAxes,\n });\n dispatch({\n type: \"SET_INDICATOR_VISIBILITY\",\n visibility: restoredVisibility,\n });\n\n // Restore drawings\n if (chartState.drawings) {\n for (const drawing of chartState.drawings) {\n chart.createOverlay({\n name: drawing.name,\n points: drawing.points,\n styles: drawing.styles,\n extendData: drawing.extendData,\n });\n }\n }\n\n return true;\n },\n [state.chart, dispatch],\n );\n\n const deleteLayout = useCallback(\n (id: string) => {\n localStorage.removeItem(STORAGE_KEY_PREFIX + id);\n const ids = getLayoutIds().filter((i) => i !== id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n refreshLayouts();\n },\n [refreshLayouts],\n );\n\n const renameLayout = useCallback(\n (id: string, name: string): boolean => {\n const entry = getEntry(id);\n if (!entry) return false;\n const updated = {\n ...entry,\n name: name.trim(),\n lastModified: Date.now(),\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(updated),\n );\n refreshLayouts();\n return true;\n },\n [refreshLayouts],\n );\n\n // Auto-save with 5-second debounce\n useEffect(() => {\n if (!autoSaveEnabled || !state.chart) return;\n\n if (autoSaveTimerRef.current) {\n clearTimeout(autoSaveTimerRef.current);\n }\n\n autoSaveTimerRef.current = setTimeout(() => {\n const chartState = serializeState();\n if (!chartState) return;\n\n if (autoSaveIdRef.current) {\n // Update existing auto-save slot\n const entry = getEntry(autoSaveIdRef.current);\n if (entry) {\n const updated = {\n ...entry,\n lastModified: Date.now(),\n state: chartState,\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + autoSaveIdRef.current,\n JSON.stringify(updated),\n );\n refreshLayouts();\n }\n } else {\n // Create initial auto-save slot\n const id = generateId();\n const now = Date.now();\n const entry: LayoutEntry = {\n id,\n name: \"Auto-save\",\n symbol: chartState.meta.symbol,\n period: chartState.meta.period,\n timestamp: now,\n lastModified: now,\n state: chartState,\n };\n localStorage.setItem(\n STORAGE_KEY_PREFIX + id,\n JSON.stringify(entry),\n );\n const ids = getLayoutIds();\n ids.push(id);\n localStorage.setItem(INDEX_KEY, JSON.stringify(ids));\n autoSaveIdRef.current = id;\n refreshLayouts();\n }\n }, 5000);\n\n return () => {\n if (autoSaveTimerRef.current) {\n clearTimeout(autoSaveTimerRef.current);\n }\n };\n }, [\n autoSaveEnabled,\n state.chart,\n state.mainIndicators,\n state.subIndicators,\n serializeState,\n refreshLayouts,\n ]);\n\n return {\n layouts,\n saveLayout,\n loadLayout,\n deleteLayout,\n renameLayout,\n refreshLayouts,\n autoSaveEnabled,\n setAutoSaveEnabled,\n };\n}\n","import { useState, useCallback, useRef } from \"react\";\nimport { registerIndicator } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport TA from \"../utils/TA\";\n\nconst DEFAULT_SCRIPT = `// Custom Indicator — Pine Script Style\n// Available: TA, dataList, params\n\nconst period = params[0] ?? 14\nconst closes = dataList.map(d => d.close)\nconst highs = dataList.map(d => d.high)\nconst lows = dataList.map(d => d.low)\n\n// Example: RSI + Bollinger Bands\nconst rsi = TA.rsi(closes, period)\nconst boll = TA.bollinger(closes, period, 2)\n\n// Return one object per candle — each key = one line on chart\nreturn rsi.map((v, i) => ({\n rsi: v,\n upper: boll.upper[i],\n mid: boll.mid[i],\n lower: boll.lower[i],\n}))`;\n\nconst SERIES_COLORS = [\n \"#2962FF\",\n \"#FF6D00\",\n \"#00BCD4\",\n \"#E91E63\",\n \"#76FF03\",\n \"#FFD600\",\n];\n\n/** Keys shadowed inside the sandbox so user code cannot access them. */\nconst SHADOW_KEYS = [\n \"fetch\",\n \"XMLHttpRequest\",\n \"WebSocket\",\n \"Worker\",\n \"SharedWorker\",\n \"importScripts\",\n \"self\",\n \"caches\",\n \"indexedDB\",\n];\n\nlet scriptCounter = 0;\n\nexport type ScriptPlacement = \"main\" | \"sub\";\n\nexport interface UseScriptEditorReturn {\n /** Current script source code */\n code: string;\n setCode: (code: string) => void;\n /** Display name of the script */\n scriptName: string;\n setScriptName: (name: string) => void;\n /** Comma-separated numeric params (e.g. \"14, 26, 9\") */\n params: string;\n setParams: (params: string) => void;\n /** Where to place the indicator */\n placement: ScriptPlacement;\n setPlacement: (p: ScriptPlacement) => void;\n /** Last error message (empty = no error) */\n error: string;\n /** Last status message */\n status: string;\n /** Whether the script is currently running */\n isRunning: boolean;\n /** Whether there is a script indicator currently on the chart */\n hasActiveScript: boolean;\n /** Execute the script and register the indicator */\n runScript: () => void;\n /** Remove the current script indicator from the chart */\n removeScript: () => void;\n /** Reset code to the default template */\n resetCode: () => void;\n /** Export the current code as a downloadable .js file */\n exportScript: () => void;\n /** Import a script from a File object */\n importScript: (file: File) => void;\n /** The default template code */\n defaultScript: string;\n}\n\n/**\n * Headless hook for a Pine Script-style custom indicator editor.\n *\n * Scripts are plain JavaScript function bodies that receive:\n * - `TA` — technical analysis math library\n * - `dataList` — KLineData[] (open, high, low, close, volume, timestamp)\n * - `params` — number[] from the params input\n *\n * Must return an array of objects, one per candle. Each key = one chart series.\n */\nexport function useScriptEditor(): UseScriptEditorReturn {\n const { state } = useKlinechartsUI();\n\n const [code, setCode] = useState(DEFAULT_SCRIPT);\n const [scriptName, setScriptName] = useState(\"\");\n const [params, setParams] = useState(\"14\");\n const [placement, setPlacement] = useState<ScriptPlacement>(\"sub\");\n const [error, setError] = useState(\"\");\n const [status, setStatus] = useState(\"\");\n const [isRunning, setIsRunning] = useState(false);\n\n const activeIdRef = useRef<string | null>(null);\n const activeNameRef = useRef<string | null>(null);\n\n const hasActiveScript = activeNameRef.current !== null;\n\n const runScript = useCallback(() => {\n const chart = state.chart;\n if (!chart) {\n setError(\"Chart not initialized\");\n return;\n }\n\n setError(\"\");\n setStatus(\"Running...\");\n setIsRunning(true);\n\n try {\n const parsedParams = params\n .split(\",\")\n .map((s) => parseFloat(s.trim()))\n .filter((n) => !isNaN(n));\n\n const dataList = (chart as any).getDataList?.() ?? [];\n\n // Execute in sandboxed new Function — shadow dangerous globals\n const allArgs = [\n ...SHADOW_KEYS,\n \"TA\",\n \"dataList\",\n \"params\",\n `\"use strict\";\\n${code}`,\n ];\n const fn = new Function(...allArgs);\n const shadowValues = SHADOW_KEYS.map(() => undefined);\n const result = fn(...shadowValues, TA, dataList, parsedParams);\n\n if (!Array.isArray(result)) {\n throw new Error(\"Script must return an Array.\");\n }\n\n const sample = result.find((v: unknown) => v !== null && v !== undefined);\n const seriesKeys: string[] = sample ? Object.keys(sample) : [\"value\"];\n if (seriesKeys.length === 0) {\n throw new Error(\"Returned objects have no keys.\");\n }\n\n scriptCounter++;\n const indicatorName = `_custom_script_${scriptCounter}`;\n\n const figures = seriesKeys.map((key, i) => ({\n key,\n title: `${key}: `,\n type: \"line\" as const,\n styles: () => ({ color: SERIES_COLORS[i % SERIES_COLORS.length] }),\n }));\n\n registerIndicator({\n name: indicatorName,\n shortName:\n (scriptName.trim() || `Script #${scriptCounter}`) +\n (placement === \"main\" ? \" (Main)\" : \" (Sub)\"),\n calcParams: parsedParams,\n figures: figures as any,\n calc: () => result,\n extendData: {\n isCustomScript: true,\n code,\n placement,\n },\n });\n\n // Remove previous custom script indicator if exists\n if (activeNameRef.current) {\n try {\n chart.removeIndicator({\n id:\n activeIdRef.current === \"candle_pane\"\n ? \"candle_pane\"\n : activeIdRef.current!,\n name: activeNameRef.current,\n } as any);\n } catch {\n // ignore\n }\n }\n\n // Add to chart\n let paneId: string | null = null;\n if (placement === \"main\") {\n paneId = chart.createIndicator(\n { name: indicatorName },\n { isStack: true, pane: { id: \"candle_pane\" } },\n );\n } else {\n paneId = chart.createIndicator({ name: indicatorName });\n }\n\n activeIdRef.current = typeof paneId === \"string\" ? paneId : null;\n activeNameRef.current = indicatorName;\n\n const title = scriptName.trim() || `Script #${scriptCounter}`;\n setStatus(\n `${title} applied to ${placement === \"main\" ? \"Main Chart\" : \"Sub Pane\"} — ${seriesKeys.length} series: ${seriesKeys.join(\", \")}`,\n );\n } catch (e: any) {\n setError(e?.message ?? String(e));\n } finally {\n setIsRunning(false);\n }\n }, [state.chart, code, scriptName, params, placement]);\n\n const removeScript = useCallback(() => {\n const chart = state.chart;\n if (chart && activeNameRef.current && activeIdRef.current) {\n try {\n chart.removeIndicator({\n id: activeIdRef.current,\n name: activeNameRef.current,\n } as any);\n } catch {\n // ignore\n }\n activeIdRef.current = null;\n activeNameRef.current = null;\n setStatus(\"Indicator removed.\");\n }\n }, [state.chart]);\n\n const resetCode = useCallback(() => {\n setCode(DEFAULT_SCRIPT);\n setError(\"\");\n setStatus(\"\");\n }, []);\n\n const exportScript = useCallback(() => {\n const blob = new Blob([code], {\n type: \"text/javascript;charset=utf-8\",\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${scriptName.trim() || \"custom_indicator\"}.js`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n setStatus(\"Script exported.\");\n }, [code, scriptName]);\n\n const importScript = useCallback(\n (file: File) => {\n const reader = new FileReader();\n reader.onload = (e) => {\n const content = e.target?.result as string;\n if (content) {\n setCode(content);\n if (!scriptName) {\n setScriptName(file.name.replace(/\\.(js|ts|txt)$/i, \"\"));\n }\n setError(\"\");\n setStatus(`Loaded ${file.name}`);\n }\n };\n reader.readAsText(file);\n },\n [scriptName],\n );\n\n return {\n code,\n setCode,\n scriptName,\n setScriptName,\n params,\n setParams,\n placement,\n setPlacement,\n error,\n status,\n isRunning,\n hasActiveScript,\n runScript,\n removeScript,\n resetCode,\n exportScript,\n importScript,\n defaultScript: DEFAULT_SCRIPT,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface CrosshairBarData {\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n timestamp: number;\n change: number;\n changePercent: number;\n}\n\nexport interface UseCrosshairReturn {\n /** OHLCV data of the bar under the crosshair. Null when cursor is off-chart. */\n barData: CrosshairBarData | null;\n}\n\nexport function useCrosshair(): UseCrosshairReturn {\n const { state } = useKlinechartsUI();\n const [barData, setBarData] = useState<CrosshairBarData | null>(null);\n const rafRef = useRef<number>(0);\n\n const handler = useCallback(\n (event: any) => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = 0;\n\n const klineData = event?.kLineData;\n if (!klineData) {\n setBarData(null);\n return;\n }\n\n const pricePrecision = state.symbol?.pricePrecision ?? 2;\n const open = klineData.open ?? 0;\n const close = klineData.close ?? 0;\n const change = parseFloat((close - open).toFixed(pricePrecision));\n const changePercent =\n open !== 0\n ? parseFloat(((change / open) * 100).toFixed(2))\n : 0;\n\n setBarData({\n open,\n high: klineData.high ?? 0,\n low: klineData.low ?? 0,\n close,\n volume: klineData.volume ?? 0,\n timestamp: klineData.timestamp ?? 0,\n change,\n changePercent,\n });\n });\n },\n [state.symbol?.pricePrecision],\n );\n\n useEffect(() => {\n const chart = state.chart;\n if (!chart) return;\n\n (chart as any).subscribeAction?.(\"onCrosshairChange\", handler);\n\n return () => {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = 0;\n }\n (chart as any).unsubscribeAction?.(\"onCrosshairChange\", handler);\n };\n }, [state.chart, handler]);\n\n return { barData };\n}\n","import { useCallback } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { Alert, AlertCondition } from \"../provider/featureTypes\";\nimport { ensureAlertLineRegistered } from \"../extensions\";\nimport type { AlertLineExtendData } from \"../extensions/overlays/alertLine\";\n\nexport type { Alert, AlertCondition } from \"../provider/featureTypes\";\nexport type { AlertLineExtendData } from \"../extensions/overlays/alertLine\";\n\nexport interface UseAlertsReturn {\n alerts: Alert[];\n addAlert: (\n price: number,\n condition: AlertCondition,\n message?: string,\n extendData?: AlertLineExtendData,\n ) => string;\n removeAlert: (id: string) => void;\n clearAlerts: () => void;\n onAlertTriggered: (callback: (alert: Alert) => void) => void;\n}\n\nlet alertCounter = 0;\n\n/**\n * Headless hook for price-crossing alerts.\n *\n * The alert list lives in the shared provider store, and the 1s crossing\n * poller + the `onAlertTriggered` listener are owned by the provider. This\n * means several `useAlerts()` instances (toolbar, list panel, sound trigger)\n * observe and mutate one synchronized list and share a single poller — they no\n * longer drift apart or each spawn their own interval.\n */\nexport function useAlerts(): UseAlertsReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { alertTriggeredListenerRef } = useKlinechartsUIDispatch();\n const alerts = state.alerts;\n\n const addAlert = useCallback(\n (\n price: number,\n condition: AlertCondition,\n message?: string,\n extendData?: AlertLineExtendData,\n ): string => {\n const id = `alert_${++alertCounter}`;\n\n // Default label: explicit text → message → formatted price (using the\n // symbol's precision when available).\n const precision = state.chart?.getSymbol()?.pricePrecision ?? 2;\n const resolvedExtendData: AlertLineExtendData = {\n ...extendData,\n text: extendData?.text ?? message ?? price.toFixed(precision),\n };\n\n const alert: Alert = {\n id,\n price,\n condition,\n message,\n triggered: false,\n extendData: resolvedExtendData,\n };\n\n dispatch({ type: \"SET_ALERTS\", alerts: [...state.alerts, alert] });\n\n if (state.chart) {\n // Make sure the alertLine template is registered even when the\n // provider skipped automatic extension registration.\n ensureAlertLineRegistered();\n state.chart.createOverlay({\n name: \"alertLine\",\n id,\n groupId: \"price_alerts\",\n points: [{ value: price }],\n extendData: resolvedExtendData,\n lock: true,\n });\n }\n\n return id;\n },\n [state.chart, state.alerts, dispatch],\n );\n\n const removeAlert = useCallback(\n (id: string) => {\n dispatch({\n type: \"SET_ALERTS\",\n alerts: state.alerts.filter((a) => a.id !== id),\n });\n state.chart?.removeOverlay({ id });\n },\n [state.chart, state.alerts, dispatch],\n );\n\n const clearAlerts = useCallback(() => {\n for (const alert of state.alerts) {\n state.chart?.removeOverlay({ id: alert.id });\n }\n dispatch({ type: \"SET_ALERTS\", alerts: [] });\n }, [state.chart, state.alerts, dispatch]);\n\n const onAlertTriggered = useCallback(\n (callback: (alert: Alert) => void) => {\n alertTriggeredListenerRef.current = callback;\n },\n [alertTriggeredListenerRef],\n );\n\n return {\n alerts,\n addAlert,\n removeAlert,\n clearAlerts,\n onAlertTriggered,\n };\n}\n","import { useCallback } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport type ExportFormat = \"csv\" | \"json\";\n\nexport interface UseDataExportReturn {\n /** Export all chart data */\n exportAll: (format: ExportFormat) => void;\n /** Export only the visible range */\n exportVisible: (format: ExportFormat) => void;\n}\n\nexport function useDataExport(): UseDataExportReturn {\n const { state } = useKlinechartsUI();\n\n const exportAll = useCallback(\n (format: ExportFormat) => {\n if (!state.chart) return;\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n downloadData(dataList, format, state.symbol?.ticker);\n },\n [state.chart, state.symbol?.ticker]\n );\n\n const exportVisible = useCallback(\n (format: ExportFormat) => {\n if (!state.chart) return;\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const visibleRange = (state.chart as any).getVisibleRange?.();\n if (!visibleRange) {\n downloadData(dataList, format, state.symbol?.ticker);\n return;\n }\n\n const { from, to } = visibleRange as { from: number; to: number };\n const visibleData = dataList.slice(from, to);\n downloadData(visibleData, format, state.symbol?.ticker);\n },\n [state.chart, state.symbol?.ticker]\n );\n\n return { exportAll, exportVisible };\n}\n\nfunction formatRow(bar: any): {\n date: string;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n} {\n return {\n date: new Date(bar.timestamp).toISOString(),\n open: bar.open,\n high: bar.high,\n low: bar.low,\n close: bar.close,\n volume: bar.volume ?? 0,\n };\n}\n\nfunction buildCsv(dataList: any[]): string {\n const header = \"Date,Open,High,Low,Close,Volume\\n\";\n const rows = dataList.map((bar) => {\n const r = formatRow(bar);\n return `${r.date},${r.open},${r.high},${r.low},${r.close},${r.volume}`;\n });\n return header + rows.join(\"\\n\");\n}\n\nfunction buildJson(dataList: any[]): string {\n return JSON.stringify(dataList.map(formatRow), null, 2);\n}\n\nfunction downloadData(\n dataList: any[],\n format: ExportFormat,\n ticker?: string\n): void {\n const content = format === \"csv\" ? buildCsv(dataList) : buildJson(dataList);\n const mimeType = format === \"csv\" ? \"text/csv\" : \"application/json\";\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n\n const date = new Date().toISOString().slice(0, 10);\n const prefix = ticker ?? \"chart\";\n const filename = `${prefix}_${date}.${format}`;\n\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n URL.revokeObjectURL(url);\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { SymbolInfo, KLineData } from \"react-klinecharts\";\nimport type { TerminalPeriod } from \"../data/periods\";\n\nexport interface WatchlistItem {\n ticker: string;\n lastPrice: number | null;\n change: number | null;\n changePercent: number | null;\n}\n\nexport interface UseWatchlistReturn {\n items: WatchlistItem[];\n addSymbol: (ticker: string) => void;\n removeSymbol: (ticker: string) => void;\n switchSymbol: (ticker: string) => void;\n activeSymbol: string | null;\n}\n\nexport function useWatchlist(): UseWatchlistReturn {\n const { state } = useKlinechartsUI();\n const { dispatch, datafeed } = useKlinechartsUIDispatch();\n\n const [items, setItems] = useState<WatchlistItem[]>([]);\n\n // Track active subscriptions so we can clean them up.\n const subscriptionsRef = useRef<\n Map<string, { symbolInfo: SymbolInfo; period: TerminalPeriod }>\n >(new Map());\n\n const activeSymbol = state.symbol?.ticker ?? null;\n\n const addSymbol = useCallback(\n (ticker: string) => {\n // Prevent duplicates.\n setItems((prev) => {\n if (prev.some((item) => item.ticker === ticker)) return prev;\n return [\n ...prev,\n { ticker, lastPrice: null, change: null, changePercent: null },\n ];\n });\n\n if (subscriptionsRef.current.has(ticker)) return;\n\n const symbolInfo = { ticker } as SymbolInfo;\n const period = state.period;\n\n subscriptionsRef.current.set(ticker, { symbolInfo, period });\n\n datafeed.subscribe(symbolInfo, period, (bar: KLineData) => {\n setItems((prev) =>\n prev.map((item) => {\n if (item.ticker !== ticker) return item;\n const change = bar.close - bar.open;\n const changePercent =\n bar.open !== 0 ? (change / bar.open) * 100 : null;\n return {\n ...item,\n lastPrice: bar.close,\n change,\n changePercent,\n };\n }),\n );\n });\n },\n [datafeed, state.period],\n );\n\n const removeSymbol = useCallback(\n (ticker: string) => {\n const sub = subscriptionsRef.current.get(ticker);\n if (sub) {\n datafeed.unsubscribe(sub.symbolInfo, sub.period);\n subscriptionsRef.current.delete(ticker);\n }\n setItems((prev) => prev.filter((item) => item.ticker !== ticker));\n },\n [datafeed],\n );\n\n const switchSymbol = useCallback(\n (ticker: string) => {\n dispatch({ type: \"SET_SYMBOL\", symbol: { ticker } });\n },\n [dispatch],\n );\n\n // Clean up all subscriptions on unmount.\n useEffect(() => {\n return () => {\n subscriptionsRef.current.forEach((sub) => {\n datafeed.unsubscribe(sub.symbolInfo, sub.period);\n });\n subscriptionsRef.current.clear();\n };\n }, [datafeed]);\n\n return {\n items,\n addSymbol,\n removeSymbol,\n switchSymbol,\n activeSymbol,\n };\n}\n","import { useCallback } from \"react\";\nimport {\n useKlinechartsUI,\n useKlinechartsUIDispatch,\n} from \"../provider/ChartTerminalContext\";\nimport type { ReplaySpeed } from \"../provider/featureTypes\";\n\nexport type { ReplaySpeed } from \"../provider/featureTypes\";\n\nexport interface UseReplayReturn {\n /** Whether a replay session is active */\n isReplaying: boolean;\n /** Whether the replay is currently paused */\n isPaused: boolean;\n /** Current playback speed multiplier */\n speed: ReplaySpeed;\n /** Current bar index in the replay */\n barIndex: number;\n /** Total number of bars in the saved data */\n totalBars: number;\n /** Start replaying from the beginning */\n startReplay: () => void;\n /** Stop replay and restore original data */\n stopReplay: () => void;\n /** Toggle play/pause */\n togglePause: () => void;\n /** Advance one bar while paused */\n stepForward: () => void;\n /** Go back one bar while paused */\n stepBackward: () => void;\n /** Seek to a specific bar index (0-based). Pauses playback. */\n seekTo: (index: number) => void;\n /** Change the playback speed */\n setSpeed: (speed: ReplaySpeed) => void;\n}\n\n/**\n * Headless hook for historical data replay (bar-by-bar playback).\n *\n * Loads the current chart data, clears the chart, then progressively adds\n * bars back one at a time at the configured speed.\n *\n * Replay control state lives in the shared provider store and the playback\n * interval + data buffers are owned by the provider (accessed through stable\n * refs). This guarantees a single playback session even when `useReplay()` is\n * mounted in several components (e.g. toolbar + bottom controls + status bar):\n * starting in one and stepping in another drives the same timer and buffer.\n */\nexport function useReplay(): UseReplayReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { replayIntervalRef, replaySavedDataRef, replayIndexRef } =\n useKlinechartsUIDispatch();\n\n const { isReplaying, isPaused, speed, barIndex, totalBars } = state.replay;\n\n const clearInterval_ = useCallback(() => {\n if (replayIntervalRef.current !== null) {\n clearInterval(replayIntervalRef.current);\n replayIntervalRef.current = null;\n }\n }, [replayIntervalRef]);\n\n const addNextBar = useCallback(() => {\n if (!state.chart) return;\n\n const data = replaySavedDataRef.current;\n const idx = replayIndexRef.current;\n\n if (idx >= data.length) {\n // Replay finished — stop the interval but keep replay state\n clearInterval_();\n dispatch({ type: \"SET_REPLAY\", replay: { isPaused: true } });\n return;\n }\n\n const bar = data[idx];\n (state.chart as any).updateData?.(bar);\n replayIndexRef.current = idx + 1;\n dispatch({ type: \"SET_REPLAY\", replay: { barIndex: idx + 1 } });\n }, [state.chart, clearInterval_, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const startInterval = useCallback(\n (currentSpeed: ReplaySpeed) => {\n clearInterval_();\n replayIntervalRef.current = setInterval(addNextBar, 1000 / currentSpeed);\n },\n [addNextBar, clearInterval_, replayIntervalRef],\n );\n\n const startReplay = useCallback(() => {\n if (!state.chart) return;\n\n const dataList = state.chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n // Save a copy of the original data\n replaySavedDataRef.current = [...dataList];\n replayIndexRef.current = 0;\n\n dispatch({\n type: \"SET_REPLAY\",\n replay: {\n totalBars: dataList.length,\n barIndex: 0,\n isReplaying: true,\n isPaused: false,\n },\n });\n\n // Clear chart data\n (state.chart as any).clearData?.();\n\n // Start the playback interval\n startInterval(speed);\n }, [state.chart, speed, startInterval, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const stopReplay = useCallback(() => {\n if (!state.chart) return;\n\n clearInterval_();\n\n // Restore original data\n const data = replaySavedDataRef.current;\n if (data.length > 0) {\n (state.chart as any).clearData?.();\n for (const bar of data) {\n (state.chart as any).updateData?.(bar);\n }\n }\n\n replaySavedDataRef.current = [];\n replayIndexRef.current = 0;\n\n dispatch({\n type: \"SET_REPLAY\",\n replay: { isReplaying: false, isPaused: false, barIndex: 0, totalBars: 0 },\n });\n }, [state.chart, clearInterval_, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const togglePause = useCallback(() => {\n if (!isReplaying) return;\n\n if (isPaused) {\n // Resume\n startInterval(speed);\n dispatch({ type: \"SET_REPLAY\", replay: { isPaused: false } });\n } else {\n // Pause\n clearInterval_();\n dispatch({ type: \"SET_REPLAY\", replay: { isPaused: true } });\n }\n }, [isReplaying, isPaused, speed, startInterval, clearInterval_, dispatch]);\n\n const stepForward = useCallback(() => {\n if (!isReplaying || !isPaused) return;\n addNextBar();\n }, [isReplaying, isPaused, addNextBar]);\n\n const stepBackward = useCallback(() => {\n if (!isReplaying || !isPaused || !state.chart) return;\n const idx = replayIndexRef.current;\n if (idx <= 1) return;\n\n // Remove the last bar by rebuilding data up to idx-1\n const data = replaySavedDataRef.current;\n (state.chart as any).clearData?.();\n for (let i = 0; i < idx - 1; i++) {\n (state.chart as any).updateData?.(data[i]);\n }\n replayIndexRef.current = idx - 1;\n dispatch({ type: \"SET_REPLAY\", replay: { barIndex: idx - 1 } });\n }, [isReplaying, isPaused, state.chart, replaySavedDataRef, replayIndexRef, dispatch]);\n\n const seekTo = useCallback(\n (targetIndex: number) => {\n if (!isReplaying || !state.chart) return;\n const data = replaySavedDataRef.current;\n const clamped = Math.max(0, Math.min(targetIndex, data.length));\n\n // Pause if playing\n clearInterval_();\n\n // Rebuild chart data up to the target index\n (state.chart as any).clearData?.();\n for (let i = 0; i < clamped; i++) {\n (state.chart as any).updateData?.(data[i]);\n }\n replayIndexRef.current = clamped;\n dispatch({\n type: \"SET_REPLAY\",\n replay: { isPaused: true, barIndex: clamped },\n });\n },\n [isReplaying, state.chart, clearInterval_, replaySavedDataRef, replayIndexRef, dispatch],\n );\n\n const setSpeed = useCallback(\n (newSpeed: ReplaySpeed) => {\n dispatch({ type: \"SET_REPLAY\", replay: { speed: newSpeed } });\n\n // If currently playing, restart the interval with the new speed\n if (isReplaying && !isPaused) {\n startInterval(newSpeed);\n }\n },\n [isReplaying, isPaused, startInterval, dispatch],\n );\n\n return {\n isReplaying,\n isPaused,\n speed,\n barIndex,\n totalBars,\n startReplay,\n stopReplay,\n togglePause,\n stepForward,\n stepBackward,\n seekTo,\n setSpeed,\n };\n}\n","import { useState, useCallback, useEffect, useRef } from \"react\";\nimport { registerIndicator } from \"react-klinecharts\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface CompareSymbol {\n ticker: string;\n /** Base price (first bar close) used for percentage normalization */\n basePrice: number | null;\n color: string;\n visible: boolean;\n}\n\nexport interface UseCompareReturn {\n /** Currently compared symbols */\n symbols: CompareSymbol[];\n /** Add a symbol — fetches data, normalizes to %, renders as indicator line */\n addSymbol: (ticker: string, color?: string) => Promise<void>;\n /** Remove a symbol overlay */\n removeSymbol: (ticker: string) => void;\n /** Toggle visibility of a compared symbol */\n toggleSymbol: (ticker: string) => void;\n /** Clear all comparisons */\n clearAll: () => void;\n}\n\nconst DEFAULT_COLORS = [\n \"#2196f3\",\n \"#ff9800\",\n \"#4caf50\",\n \"#e91e63\",\n \"#9c27b0\",\n \"#00bcd4\",\n \"#ff5722\",\n \"#8bc34a\",\n];\n\nlet colorIndex = 0;\nlet compareCounter = 0;\n\n/**\n * Headless hook for comparing multiple symbols on the same chart.\n *\n * Fetches historical data for each added symbol via the datafeed,\n * normalizes prices to percentage change from the first bar,\n * and renders each as a custom indicator line on the main pane.\n */\nexport function useCompare(): UseCompareReturn {\n const { state, datafeed } = useKlinechartsUI();\n const [symbols, setSymbols] = useState<CompareSymbol[]>([]);\n const indicatorsRef = useRef<\n Map<string, { name: string; paneId: string }>\n >(new Map());\n\n const addSymbol = useCallback(\n async (ticker: string, color?: string) => {\n if (!state.chart || !datafeed) return;\n if (indicatorsRef.current.has(ticker)) return;\n\n const assignedColor =\n color ?? DEFAULT_COLORS[colorIndex++ % DEFAULT_COLORS.length];\n\n const mainDataList = state.chart.getDataList();\n if (!mainDataList || mainDataList.length === 0) return;\n\n const from = mainDataList[0].timestamp;\n const to = mainDataList[mainDataList.length - 1].timestamp;\n\n // Fetch compare symbol data\n const compareData = await datafeed.getHistoryKLineData(\n { ticker } as any,\n { ...state.period!, label: \"\" },\n from,\n to,\n );\n\n if (!compareData || compareData.length === 0) return;\n\n // Build timestamp → close lookup\n const compareMap = new Map<number, number>();\n for (const bar of compareData) {\n compareMap.set(bar.timestamp, bar.close);\n }\n\n // Find the base price (first aligned bar)\n let basePrice: number | null = null;\n for (const bar of mainDataList) {\n const close = compareMap.get(bar.timestamp);\n if (close != null) {\n basePrice = close;\n break;\n }\n }\n if (basePrice === null || basePrice === 0) return;\n const bp = basePrice;\n\n // Build %-change array aligned to main chart timeline\n const normalizedData = mainDataList.map((mainBar) => {\n const close = compareMap.get(mainBar.timestamp);\n return {\n pct: close != null ? ((close - bp) / bp) * 100 : NaN,\n };\n });\n\n // Register custom indicator\n const indicatorName = `__cmp_${++compareCounter}_${ticker}`;\n\n registerIndicator({\n name: indicatorName,\n shortName: ticker,\n figures: [\n {\n key: \"pct\",\n title: `${ticker} %: `,\n type: \"line\",\n styles: () => ({ color: assignedColor }),\n },\n ] as any,\n calc: () => normalizedData,\n });\n\n // Place on main pane\n const paneId = state.chart.createIndicator(\n { name: indicatorName },\n { isStack: true, pane: { id: \"candle_pane\" } },\n );\n\n indicatorsRef.current.set(ticker, {\n name: indicatorName,\n paneId: typeof paneId === \"string\" ? paneId : \"candle_pane\",\n });\n\n setSymbols((prev) => {\n if (prev.some((s) => s.ticker === ticker)) return prev;\n return [\n ...prev,\n { ticker, basePrice: bp, color: assignedColor, visible: true },\n ];\n });\n },\n [state.chart, state.period, datafeed],\n );\n\n const removeSymbol = useCallback(\n (ticker: string) => {\n const info = indicatorsRef.current.get(ticker);\n if (info && state.chart) {\n try {\n state.chart.removeIndicator({ name: info.name } as any);\n } catch {\n // indicator may already be removed\n }\n indicatorsRef.current.delete(ticker);\n }\n setSymbols((prev) => prev.filter((s) => s.ticker !== ticker));\n },\n [state.chart],\n );\n\n const toggleSymbol = useCallback(\n (ticker: string) => {\n const info = indicatorsRef.current.get(ticker);\n if (!info || !state.chart) return;\n\n setSymbols((prev) => {\n const sym = prev.find((s) => s.ticker === ticker);\n if (!sym) return prev;\n\n const newVisible = !sym.visible;\n state.chart?.overrideIndicator({\n name: info.name,\n visible: newVisible,\n } as any);\n\n return prev.map((s) =>\n s.ticker === ticker ? { ...s, visible: newVisible } : s,\n );\n });\n },\n [state.chart],\n );\n\n const clearAll = useCallback(() => {\n indicatorsRef.current.forEach((info) => {\n try {\n state.chart?.removeIndicator({ name: info.name } as any);\n } catch {\n // ignore\n }\n });\n indicatorsRef.current.clear();\n setSymbols([]);\n }, [state.chart]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n indicatorsRef.current.forEach((info) => {\n try {\n state.chart?.removeIndicator({ name: info.name } as any);\n } catch {\n // ignore\n }\n });\n indicatorsRef.current.clear();\n };\n }, [state.chart]);\n\n return { symbols, addSymbol, removeSymbol, toggleSymbol, clearAll };\n}\n","import { useCallback, useEffect } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\nimport type { MeasurePoint, MeasureResult } from \"../provider/featureTypes\";\n\nexport type { MeasurePoint, MeasureResult } from \"../provider/featureTypes\";\n\nexport interface UseMeasureReturn {\n /** Whether measure mode is active (waiting for clicks) */\n isActive: boolean;\n /** Start measure mode — next two clicks on chart set from/to */\n startMeasure: () => void;\n /** Cancel measure mode */\n cancelMeasure: () => void;\n /** Current measurement result (null until both points are set) */\n result: MeasureResult | null;\n /** Clear the current measurement */\n clearResult: () => void;\n /** First point (set after first click) */\n fromPoint: MeasurePoint | null;\n}\n\nconst MEASURE_OVERLAY_ID = \"__measure_line__\";\n\nfunction computeResult(from: MeasurePoint, to: MeasurePoint): MeasureResult {\n const priceDiff = to.price - from.price;\n const pricePercent = from.price !== 0 ? (priceDiff / from.price) * 100 : 0;\n const bars = Math.abs(to.barIndex - from.barIndex);\n const timeDiff = Math.abs(to.timestamp - from.timestamp);\n return { from, to, priceDiff, pricePercent, bars, timeDiff };\n}\n\n/**\n * Headless hook for measuring distance/time/percentage between two points.\n *\n * Activates measure mode, captures two clicks on the chart via overlay\n * interaction, then computes price diff, %, bar count, and time diff. The\n * measure state (active/from/result) lives in the shared provider store, so a\n * toolbar toggle and a separate result-readout panel stay in sync no matter\n * where each is mounted.\n */\nexport function useMeasure(): UseMeasureReturn {\n const { state, dispatch } = useKlinechartsUI();\n const { isActive, fromPoint, result } = state.measure;\n\n const cleanup = useCallback(() => {\n state.chart?.removeOverlay({ id: MEASURE_OVERLAY_ID });\n }, [state.chart]);\n\n const startMeasure = useCallback(() => {\n cleanup();\n dispatch({\n type: \"SET_MEASURE\",\n measure: { isActive: true, fromPoint: null, result: null },\n });\n\n if (!state.chart) return;\n\n // Create a segment overlay that the user draws by clicking two points.\n // The onDrawEnd callback fires when the user finishes placing both points.\n state.chart.createOverlay({\n name: \"segment\",\n id: MEASURE_OVERLAY_ID,\n groupId: \"measure\",\n styles: {\n line: {\n style: \"dashed\" as any,\n color: \"#FFD600\",\n size: 1,\n },\n },\n lock: true,\n onDrawEnd: (event: any) => {\n const overlay = event?.overlay;\n const points = overlay?.points;\n if (!points || points.length < 2) return;\n\n const chart = state.chart;\n if (!chart) return;\n\n const dataList = chart.getDataList();\n if (!dataList || dataList.length === 0) return;\n\n const makePoint = (p: any): MeasurePoint => {\n const idx = Math.max(\n 0,\n Math.min(p.dataIndex ?? 0, dataList.length - 1),\n );\n const bar = dataList[idx];\n return {\n price: p.value ?? bar?.close ?? 0,\n timestamp: bar?.timestamp ?? 0,\n barIndex: idx,\n };\n };\n\n const from = makePoint(points[0]);\n const to = makePoint(points[1]);\n\n dispatch({\n type: \"SET_MEASURE\",\n measure: {\n isActive: false,\n fromPoint: from,\n result: computeResult(from, to),\n },\n });\n },\n });\n }, [state.chart, cleanup, dispatch]);\n\n const cancelMeasure = useCallback(() => {\n cleanup();\n dispatch({ type: \"SET_MEASURE\", measure: { isActive: false, fromPoint: null } });\n }, [cleanup, dispatch]);\n\n const clearResult = useCallback(() => {\n cleanup();\n dispatch({ type: \"SET_MEASURE\", measure: { result: null, fromPoint: null } });\n }, [cleanup, dispatch]);\n\n // Clean up the overlay on unmount.\n useEffect(() => {\n return () => {\n state.chart?.removeOverlay({ id: MEASURE_OVERLAY_ID });\n };\n }, [state.chart]);\n\n return {\n isActive,\n startMeasure,\n cancelMeasure,\n result,\n clearResult,\n fromPoint,\n };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useKlinechartsUI } from \"../provider/ChartTerminalContext\";\n\nexport interface Annotation {\n id: string;\n text: string;\n price: number;\n timestamp: number;\n color?: string;\n}\n\nexport interface UseAnnotationsReturn {\n annotations: Annotation[];\n addAnnotation: (\n text: string,\n price: number,\n timestamp: number,\n color?: string,\n ) => string;\n removeAnnotation: (id: string) => void;\n updateAnnotation: (\n id: string,\n updates: Partial<Pick<Annotation, \"text\" | \"color\">>,\n ) => void;\n clearAnnotations: () => void;\n}\n\nlet annotationCounter = 0;\n\nexport function useAnnotations(): UseAnnotationsReturn {\n const { state } = useKlinechartsUI();\n const [annotations, setAnnotations] = useState<Annotation[]>([]);\n\n const addAnnotation = useCallback(\n (text: string, price: number, timestamp: number, color?: string): string => {\n const id = `annotation_${++annotationCounter}`;\n\n const annotation: Annotation = {\n id,\n text,\n price,\n timestamp,\n color,\n };\n\n setAnnotations((prev) => [...prev, annotation]);\n\n if (state.chart) {\n state.chart.createOverlay({\n name: \"simpleAnnotation\",\n id,\n groupId: \"annotations\",\n points: [{ timestamp, value: price }],\n extendData: text,\n styles: color\n ? {\n text: {\n color,\n },\n }\n : undefined,\n lock: true,\n });\n }\n\n return id;\n },\n [state.chart],\n );\n\n const removeAnnotation = useCallback(\n (id: string) => {\n setAnnotations((prev) => prev.filter((a) => a.id !== id));\n state.chart?.removeOverlay({ id });\n },\n [state.chart],\n );\n\n const updateAnnotation = useCallback(\n (id: string, updates: Partial<Pick<Annotation, \"text\" | \"color\">>) => {\n setAnnotations((prev) =>\n prev.map((a) => (a.id === id ? { ...a, ...updates } : a)),\n );\n\n if (state.chart) {\n const overrideData: Record<string, any> = { id };\n\n if (updates.text !== undefined) {\n overrideData.extendData = updates.text;\n }\n\n if (updates.color !== undefined) {\n overrideData.styles = {\n text: {\n color: updates.color,\n },\n };\n }\n\n state.chart.overrideOverlay(overrideData as any);\n }\n },\n [state.chart],\n );\n\n const clearAnnotations = useCallback(() => {\n setAnnotations((prev) => {\n for (const annotation of prev) {\n state.chart?.removeOverlay({ id: annotation.id });\n }\n return [];\n });\n }, [state.chart]);\n\n // Clean up on unmount\n useEffect(() => {\n return () => {\n state.chart?.removeOverlay({ groupId: \"annotations\" });\n };\n }, [state.chart]);\n\n return {\n annotations,\n addAnnotation,\n removeAnnotation,\n updateAnnotation,\n clearAnnotations,\n };\n}\n","import type { Dispatch } from \"react\";\nimport type { DataLoader, KLineData } from \"react-klinecharts\";\nimport type { Datafeed, KlinechartsUIAction } from \"../provider/types\";\n\n/**\n * Creates a klinecharts DataLoader from a Datafeed instance.\n * This bridges the react-klinecharts-ui Datafeed interface to the\n * klinecharts native DataLoader format used by KLineChart component.\n *\n * In klinecharts terminology:\n * - \"init\" = initial data load\n * - \"forward\" = load older data (user scrolled left into history)\n * - \"backward\" = load newer data (user scrolled right)\n */\nexport function createDataLoader(\n datafeed: Datafeed,\n dispatch: Dispatch<KlinechartsUIAction>,\n): DataLoader {\n let oldestTimestamp: number | null = null;\n // Incremented on every \"init\" request. Forward requests capture the value at\n // their start and bail out if a newer init has begun while they were in-flight.\n let currentGen = 0;\n\n return {\n getBars: async (params) => {\n try {\n dispatch({ type: \"SET_LOADING\", isLoading: true });\n\n if (params.type === \"init\") {\n oldestTimestamp = null;\n const gen = ++currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n Date.now(),\n );\n if (gen !== currentGen) return; // newer init started — discard stale result\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"forward\" && oldestTimestamp !== null) {\n const gen = currentGen;\n const data = await datafeed.getHistoryKLineData(\n params.symbol,\n { ...params.period, label: \"\" },\n 0,\n oldestTimestamp - 1,\n );\n if (gen !== currentGen) return; // init for new period started — discard\n if (data.length > 0) {\n oldestTimestamp = data[0].timestamp;\n }\n params.callback(data as KLineData[], {\n forward: data.length > 0,\n backward: false,\n });\n } else if (params.type === \"backward\") {\n // Backward pagination (loading data newer than what we have) is generally\n // not needed in typical terminal usage because we subscribe via ws for real-time.\n params.callback([], { forward: false, backward: false });\n }\n } catch (error) {\n console.error(\"Failed to load chart data:\", error);\n params.callback([], { forward: false, backward: false });\n } finally {\n dispatch({ type: \"SET_LOADING\", isLoading: false });\n }\n },\n subscribeBar: (params) => {\n datafeed.subscribe(\n params.symbol,\n { ...params.period, label: \"\" },\n (klineData) => params.callback(klineData as KLineData),\n );\n },\n unsubscribeBar: (params) => {\n datafeed.unsubscribe(params.symbol, { ...params.period, label: \"\" });\n },\n };\n}\n"]}