File size: 2,559 Bytes
f56a29b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import { ScanLine, Search, Bot, FileText, LayoutPanelLeft, Clapperboard } from 'lucide-react';
import { useSettingsStore } from '@/lib/store/settings';
import type {
SceneOutline,
UserRequirements,
PdfImage,
ImageMapping,
} from '@/lib/types/generation';
// Session state stored in sessionStorage
export interface GenerationSessionState {
sessionId: string;
requirements: UserRequirements;
pdfText: string;
pdfImages?: PdfImage[];
imageStorageIds?: string[];
imageMapping?: ImageMapping;
sceneOutlines?: SceneOutline[] | null;
currentStep: 'generating' | 'complete';
// PDF deferred parsing fields
pdfStorageKey?: string;
pdfFileName?: string;
pdfProviderId?: string;
pdfProviderConfig?: { apiKey?: string; baseUrl?: string };
// Web search context
researchContext?: string;
researchSources?: Array<{ title: string; url: string }>;
// Language directive inferred from outline generation
languageDirective?: string;
}
export type GenerationStep = {
id: string;
title: string;
description: string;
icon: React.ElementType;
type: 'analysis' | 'writing' | 'visual';
};
export const ALL_STEPS: GenerationStep[] = [
{
id: 'pdf-analysis',
title: 'generation.analyzingPdf',
description: 'generation.analyzingPdfDesc',
icon: ScanLine,
type: 'analysis',
},
{
id: 'web-search',
title: 'generation.webSearching',
description: 'generation.webSearchingDesc',
icon: Search,
type: 'analysis',
},
{
id: 'outline',
title: 'generation.generatingOutlines',
description: 'generation.generatingOutlinesDesc',
icon: FileText,
type: 'writing',
},
{
id: 'agent-generation',
title: 'generation.agentGeneration',
description: 'generation.agentGenerationDesc',
icon: Bot,
type: 'writing',
},
{
id: 'slide-content',
title: 'generation.generatingSlideContent',
description: 'generation.generatingSlideContentDesc',
icon: LayoutPanelLeft,
type: 'visual',
},
{
id: 'actions',
title: 'generation.generatingActions',
description: 'generation.generatingActionsDesc',
icon: Clapperboard,
type: 'visual',
},
];
export const getActiveSteps = (session: GenerationSessionState | null) => {
return ALL_STEPS.filter((step) => {
if (step.id === 'pdf-analysis') return !!session?.pdfStorageKey;
if (step.id === 'web-search') return !!session?.requirements?.webSearch;
if (step.id === 'agent-generation') return useSettingsStore.getState().agentMode === 'auto';
return true;
});
};
|