import { RefreshCw } from 'lucide-react'; import { useAppStore } from '@/store/app-store'; // Extracted hooks import { useSpecLoading, useSpecSave, useSpecGeneration } from './spec-view/hooks'; // Extracted components import { SpecHeader, SpecEditor, SpecEmptyState } from './spec-view/components'; // Extracted dialogs import { CreateSpecDialog, RegenerateSpecDialog } from './spec-view/dialogs'; export function SpecView() { const { currentProject, appSpec } = useAppStore(); // Loading state const { isLoading, specExists, loadSpec } = useSpecLoading(); // Save state const { isSaving, hasChanges, saveSpec, handleChange, setHasChanges } = useSpecSave(); // Generation state and handlers const { // Dialog visibility showCreateDialog, setShowCreateDialog, showRegenerateDialog, setShowRegenerateDialog, // Create state projectOverview, setProjectOverview, isCreating, generateFeatures, setGenerateFeatures, analyzeProjectOnCreate, setAnalyzeProjectOnCreate, featureCountOnCreate, setFeatureCountOnCreate, // Regenerate state projectDefinition, setProjectDefinition, isRegenerating, generateFeaturesOnRegenerate, setGenerateFeaturesOnRegenerate, analyzeProjectOnRegenerate, setAnalyzeProjectOnRegenerate, featureCountOnRegenerate, setFeatureCountOnRegenerate, // Feature generation isGeneratingFeatures, // Status currentPhase, errorMessage, // Handlers handleCreateSpec, handleRegenerate, } = useSpecGeneration({ loadSpec }); // Reset hasChanges when spec is reloaded // (This is needed because loadSpec updates appSpec in the store) // No project selected if (!currentProject) { return (

No project selected

); } // Loading state if (isLoading) { return (
); } // Empty state - no spec exists if (!specExists) { return ( <> setShowCreateDialog(true)} /> ); } // Main view - spec exists return (
setShowRegenerateDialog(true)} onSaveClick={saveSpec} />
); }