import { useEffect, useMemo, useState } from 'react'; import { MoonStar, SunMedium, X } from 'lucide-react'; import { useAppStore, } from './store/appStore'; import { useBotsSync } from './hooks/useBotsSync'; import { ImageFactoryModule } from './modules/images/ImageFactoryModule'; import { BotWizardModule } from './modules/onboarding/BotWizardModule'; import { BotDashboardModule } from './modules/dashboard/BotDashboardModule'; import { pickLocale } from './i18n'; import { appZhCn } from './i18n/app.zh-cn'; import { appEn } from './i18n/app.en'; import './App.css'; function App() { const { theme, setTheme, locale, setLocale, activeBots } = useAppStore(); const [showImageFactory, setShowImageFactory] = useState(false); const [showCreateWizard, setShowCreateWizard] = useState(false); useBotsSync(); const t = pickLocale(locale, { 'zh-cn': appZhCn, en: appEn }); const urlView = useMemo(() => { const params = new URLSearchParams(window.location.search); const forcedBotId = (params.get('botId') || params.get('bot_id') || params.get('id') || '').trim(); const compactRaw = (params.get('compact') || params.get('h5') || params.get('mobile') || '').trim().toLowerCase(); const compactByFlag = ['1', 'true', 'yes', 'on'].includes(compactRaw); const compactMode = compactByFlag || forcedBotId.length > 0; return { forcedBotId, compactMode }; }, []); useEffect(() => { const forced = urlView.forcedBotId; if (!forced) { document.title = t.title; return; } const bot = activeBots[forced]; const botName = String(bot?.name || '').trim(); document.title = botName ? `${t.title} - ${botName}` : `${t.title} - ${forced}`; }, [activeBots, t.title, urlView.forcedBotId]); return (