"use client"; import { useState } from "react"; import { useAppStore } from "@/store/app-store"; import { Button } from "@/components/ui/button"; import { Settings } from "lucide-react"; import { useCliStatus } from "./settings-view/hooks/use-cli-status"; import { useScrollTracking } from "./settings-view/hooks/use-scroll-tracking"; import { NAV_ITEMS } from "./settings-view/config/navigation"; import { KeyboardMapDialog } from "./settings-view/components/keyboard-map-dialog"; import { DeleteProjectDialog } from "./settings-view/components/delete-project-dialog"; import { SettingsNavigation } from "./settings-view/components/settings-navigation"; 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"; export function SettingsView() { const { setCurrentView, theme, setTheme, setProjectTheme, kanbanCardDetailLevel, setKanbanCardDetailLevel, defaultSkipTests, setDefaultSkipTests, useWorktrees, setUseWorktrees, showProfilesOnly, setShowProfilesOnly, currentProject, moveProjectToTrash, } = useAppStore(); // 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 (
{/* Header Section */}

Settings

Configure your API keys and preferences

{/* Content Area with Sidebar */}
{/* Sticky Side Navigation */} {/* Scrollable Content */}
{/* API Keys Section */} {/* Claude CLI Status Section */} {claudeCliStatus && ( )} {/* Codex CLI Status Section */} {codexCliStatus && ( )} {/* Appearance Section */} {/* Kanban Card Display Section */} {/* Keyboard Shortcuts Section */} setShowKeyboardMapDialog(true)} /> {/* Feature Defaults Section */} {/* Danger Zone Section - Only show when a project is selected */} setShowDeleteDialog(true)} /> {/* Save Button */}
{/* Keyboard Map Dialog */} {/* Delete Project Confirmation Dialog */}
); }