/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { useEffect, useRef, useState } from 'react' import { useTheme } from '@/context/theme-provider' /** * Lazy-load VChart's `ThemeManager` and switch its theme to follow the * resolved app theme (light / dark). Returns flags consumers can use to * defer chart rendering until the theme is ready. */ let themeManagerPromise: Promise< (typeof import('@visactor/vchart'))['ThemeManager'] > | null = null export function useChartTheme() { const { resolvedTheme } = useTheme() const [themeReady, setThemeReady] = useState(false) const themeRef = useRef< (typeof import('@visactor/vchart'))['ThemeManager'] | null >(null) useEffect(() => { let cancelled = false const updateTheme = async () => { setThemeReady(false) if (!themeManagerPromise) { themeManagerPromise = import('@visactor/vchart').then( (m) => m.ThemeManager ) } const ThemeManager = await themeManagerPromise if (cancelled) return themeRef.current = ThemeManager ThemeManager.setCurrentTheme(resolvedTheme === 'dark' ? 'dark' : 'light') setThemeReady(true) } updateTheme() return () => { cancelled = true } }, [resolvedTheme]) return { resolvedTheme, themeReady } }