import { useEffect, useMemo, useState } from 'react'; import { Star, X } from 'lucide-react'; import type { PatternDefinition } from '@shared/domain/pattern'; import { isScratchpadProject, type ProjectRecord } from '@shared/domain/project'; interface NewSessionModalProps { projects: ProjectRecord[]; patterns: PatternDefinition[]; defaultProjectId?: string; onClose: () => void; onCreate: (projectId: string, patternId: string) => void; onTogglePatternFavorite?: (patternId: string, isFavorite: boolean) => void; } export function NewSessionModal({ projects, patterns, defaultProjectId, onClose, onCreate, onTogglePatternFavorite, }: NewSessionModalProps) { const [projectId, setProjectId] = useState(defaultProjectId ?? projects[0]?.id ?? ''); const availablePatterns = useMemo( () => patterns .filter( (pattern) => pattern.availability !== 'unavailable' && (!isScratchpadProject(projectId) || pattern.mode === 'single'), ) .sort((a, b) => { if (a.isFavorite && !b.isFavorite) return -1; if (!a.isFavorite && b.isFavorite) return 1; return 0; }), [patterns, projectId], ); const [patternId, setPatternId] = useState(availablePatterns[0]?.id ?? ''); useEffect(() => { if (!availablePatterns.some((pattern) => pattern.id === patternId)) { setPatternId(availablePatterns[0]?.id ?? ''); } }, [availablePatterns, patternId]); const canCreate = projectId && patternId; return (