// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates // SPDX-License-Identifier: MIT import { Settings } from "lucide-react"; import { useCallback, useEffect, useMemo, useState } from "react"; import { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "~/components/ui/dialog"; import { Tabs, TabsContent } from "~/components/ui/tabs"; import { useReplay } from "~/core/replay"; import { type SettingsState, changeSettings, saveSettings, useSettingsStore, } from "~/core/store"; import { cn } from "~/lib/utils"; import { Tooltip } from "../../_components/tooltip"; import { SETTINGS_TABS } from "../tabs"; export function SettingsDialog() { const { isReplay } = useReplay(); const [activeTabId, setActiveTabId] = useState(SETTINGS_TABS[0]!.id); const [open, setOpen] = useState(false); const [settings, setSettings] = useState(useSettingsStore.getState()); const [changes, setChanges] = useState>({}); const handleTabChange = useCallback( (newChanges: Partial) => { setTimeout(() => { if (open) { setChanges((prev) => ({ ...prev, ...newChanges, })); } }, 0); }, [open], ); const handleSave = useCallback(() => { if (Object.keys(changes).length > 0) { const newSettings: SettingsState = { ...settings, ...changes, }; setSettings(newSettings); setChanges({}); changeSettings(newSettings); saveSettings(); } setOpen(false); }, [settings, changes]); const handleOpen = useCallback(() => { setSettings(useSettingsStore.getState()); }, []); const handleClose = useCallback(() => { setChanges({}); }, []); useEffect(() => { if (open) { handleOpen(); } else { handleClose(); } }, [open, handleOpen, handleClose]); const mergedSettings = useMemo(() => { return { ...settings, ...changes, }; }, [settings, changes]); if (isReplay) { return null; } return ( DeerFlow Settings Manage your DeerFlow settings here.
    {SETTINGS_TABS.map((tab) => (
  • setActiveTabId(tab.id)} > {tab.label} {tab.badge && ( {tab.badge} )}
  • ))}
{SETTINGS_TABS.map((tab) => ( ))}
); }