react-klinecharts-ui 0.1.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.
@@ -0,0 +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/utils/createDataLoader.ts"],"names":["createContext","useContext","useReducer","useRef","useCallback","useEffect","registerExtensions","registerOverlay","useMemo","jsx","useState","overlays"],"mappings":"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","file":"index.cjs","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_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 styles: opts.styles,\n screenshotUrl: null,\n }),\n );\n\n const fullscreenContainerRef = useRef<HTMLElement | 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 // 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 }),\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];\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];\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};\n","import { useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } 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\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) => void;\n removeMainIndicator: (name: string) => void;\n addSubIndicator: (name: string) => 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 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}\n\nexport function useIndicators(): UseIndicatorsReturn {\n const { state, dispatch } = useKlinechartsUI();\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) => ({ name, isActive: true })),\n ...inactive.map((name) => ({ name, isActive: false })),\n ];\n }, [state.mainIndicators]);\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) => ({ name, isActive: true })),\n ...inactive.map((name) => ({ name, isActive: false })),\n ];\n }, [state.subIndicators]);\n\n const addMainIndicator = useCallback(\n (name: string) => {\n if (state.mainIndicators.includes(name)) return;\n state.chart?.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { id: \"candle_pane\" },\n );\n const newIndicators = [...state.mainIndicators, name];\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.mainIndicators, dispatch],\n );\n\n const removeMainIndicator = useCallback(\n (name: string) => {\n state.chart?.removeIndicator({ id: `main_${name}` });\n const newIndicators = state.mainIndicators.filter((n) => n !== name);\n dispatch({ type: \"SET_MAIN_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.mainIndicators, dispatch],\n );\n\n const addSubIndicator = useCallback(\n (name: string) => {\n if (name in state.subIndicators) return;\n const id = `sub_${name}`;\n state.chart?.createIndicator({ name, id });\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 },\n [state.chart, state.subIndicators, dispatch],\n );\n\n const removeSubIndicator = useCallback(\n (name: string) => {\n state.chart?.removeIndicator({ id: `sub_${name}` });\n const newIndicators = { ...state.subIndicators };\n delete newIndicators[name];\n dispatch({ type: \"SET_SUB_INDICATORS\", indicators: newIndicators });\n },\n [state.chart, state.subIndicators, dispatch],\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 },\n [state.chart],\n );\n\n const updateIndicatorParams = useCallback(\n (name: string, paneId: string, params: number[]) => {\n state.chart?.overrideIndicator({ name, paneId, 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 state.chart.removeIndicator({ id: `sub_${name}` });\n state.chart.createIndicator(\n { name, id: `main_${name}`, paneId: \"candle_pane\" },\n true,\n { 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 state.chart.removeIndicator({ id: `main_${name}` });\n const subId = `sub_${name}`;\n state.chart.createIndicator({ name, id: subId });\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 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 updateIndicatorParams,\n getIndicatorParams,\n isMainIndicatorActive,\n isSubIndicatorActive,\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 ],\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: \"gannBox\", localeKey: \"gann_box\" },\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 ],\n },\n];\n\nexport type MagnetMode = \"normal\" | \"weak\" | \"strong\";\n","import { useState, useCallback, useMemo } from \"react\";\nimport { useKlinechartsUI } 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 selectTool: (name: string) => void;\n clearActiveTool: () => void;\n setMagnetMode: (mode: MagnetMode) => void;\n toggleLock: () => void;\n toggleVisibility: () => void;\n removeAllDrawings: () => void;\n}\n\nexport function useDrawingTools(): UseDrawingToolsReturn {\n const { state } = useKlinechartsUI();\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\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 selectTool = useCallback(\n (name: string) => {\n setActiveTool(name);\n state.chart?.createOverlay({\n name,\n groupId: DRAWING_GROUP_ID,\n lock: isLocked,\n visible: isVisible,\n mode:\n magnetMode === \"strong\"\n ? \"strong_magnet\"\n : magnetMode === \"weak\"\n ? \"weak_magnet\"\n : \"normal\" as any,\n });\n },\n [state.chart, isLocked, isVisible, magnetMode]\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 state.chart?.removeOverlay({ groupId: DRAWING_GROUP_ID });\n setActiveTool(null);\n }, [state.chart]);\n\n return {\n categories,\n activeTool,\n magnetMode,\n isLocked,\n isVisible,\n selectTool,\n clearActiveTool,\n setMagnetMode,\n toggleLock,\n toggleVisibility,\n removeAllDrawings,\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 // 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 setPaneOptions (not styles)\n const needsPaneOptions =\n settings.reverseCoordinate ||\n settings.priceAxisType !== \"normal\" ||\n settings.yAxisPosition !== \"right\" ||\n settings.yAxisInside;\n if (needsPaneOptions) {\n state.chart.setPaneOptions({\n id: \"candle_pane\",\n axis: {\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\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 const applyPaneAxis = useCallback(\n (axis: Record<string, unknown>) => {\n state.chart?.setPaneOptions({ id: \"candle_pane\", axis });\n },\n [state.chart]\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 state.chart?.setPaneOptions({\n id: \"candle_pane\",\n axis: { name: \"normal\", reverse: false, position: \"right\", inside: false },\n });\n }, [state.chart, state.theme]);\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 // klinecharts needs at least a dataIndex to anchor the point so that\n // needDefaultYAxisFigure can compute the Y coordinate and render the\n // price label on the right axis. We use the last bar's index.\n const dataCount = state.chart.getDataList().length;\n const anchorIndex = dataCount > 0 ? dataCount - 1 : 0;\n\n state.chart.createOverlay({\n name: \"orderLine\",\n id,\n points: [{ dataIndex: anchorIndex, 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 dataCount = state.chart.getDataList().length;\n const anchorIndex = dataCount > 0 ? dataCount - 1 : 0;\n state.chart.overrideOverlay({\n id,\n ...(price != null\n ? { points: [{ dataIndex: anchorIndex, 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 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"]}