"use client"; import { useState } from "react"; import { useAppStore } from "@/store/app-store"; import { useSetupStore } from "@/store/setup-store"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { Settings, Key, Keyboard, Trash2, Folder, Terminal, Atom, Palette, LayoutGrid, Settings2, FlaskConical, } from "lucide-react"; import { getElectronAPI } from "@/lib/electron"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { KeyboardMap, ShortcutReferencePanel } from "@/components/ui/keyboard-map"; // Import custom hooks import { useCliStatus } from "./settings-view/hooks/use-cli-status"; import { useScrollTracking } from "./settings-view/hooks/use-scroll-tracking"; // Import extracted sections import { ApiKeysSection } from "./settings-view/api-keys/api-keys-section"; import { ClaudeCliStatus } from "./settings-view/cli-status/claude-cli-status"; import { CodexCliStatus } from "./settings-view/cli-status/codex-cli-status"; import { AppearanceSection } from "./settings-view/appearance/appearance-section"; import { KanbanDisplaySection } from "./settings-view/kanban-display/kanban-display-section"; import { KeyboardShortcutsSection } from "./settings-view/keyboard-shortcuts/keyboard-shortcuts-section"; import { FeatureDefaultsSection } from "./settings-view/feature-defaults/feature-defaults-section"; import { DangerZoneSection } from "./settings-view/danger-zone/danger-zone-section"; // Navigation items for the side panel const NAV_ITEMS = [ { id: "api-keys", label: "API Keys", icon: Key }, { id: "claude", label: "Claude", icon: Terminal }, { id: "codex", label: "Codex", icon: Atom }, { id: "appearance", label: "Appearance", icon: Palette }, { id: "kanban", label: "Kanban Display", icon: LayoutGrid }, { id: "keyboard", label: "Keyboard Shortcuts", icon: Settings2 }, { id: "defaults", label: "Feature Defaults", icon: FlaskConical }, { id: "danger", label: "Danger Zone", icon: Trash2 }, ]; export function SettingsView() { const { setCurrentView, theme, setTheme, setProjectTheme, kanbanCardDetailLevel, setKanbanCardDetailLevel, defaultSkipTests, setDefaultSkipTests, useWorktrees, setUseWorktrees, showProfilesOnly, setShowProfilesOnly, currentProject, moveProjectToTrash, } = useAppStore(); const { claudeAuthStatus, codexAuthStatus, setClaudeAuthStatus, setCodexAuthStatus } = useSetupStore(); // Compute the effective theme for the current project const effectiveTheme = currentProject?.theme || theme; // Handler to set theme - saves to project if one is selected, otherwise to global const handleSetTheme = (newTheme: typeof theme) => { if (currentProject) { setProjectTheme(currentProject.id, newTheme); } else { setTheme(newTheme); } }; // Use CLI status hook const { claudeCliStatus, codexCliStatus, isCheckingClaudeCli, isCheckingCodexCli, handleRefreshClaudeCli, handleRefreshCodexCli, } = useCliStatus(); // Use scroll tracking hook const { activeSection, scrollToSection, scrollContainerRef } = useScrollTracking(NAV_ITEMS, currentProject); const [showDeleteDialog, setShowDeleteDialog] = useState(false); const [showKeyboardMapDialog, setShowKeyboardMapDialog] = useState(false); return (
Configure your API keys and preferences