"use client"; import { FileText, MessageCircle } from "lucide-react"; import { EvidenceBadge } from "@/components/dashboard/EvidenceBadge"; import { studyIntentConfig, type StudyIntent } from "@/lib/study-intents"; import type { StudyCard } from "./types"; import { cleanLegacySourceSafetyText, isLegacySourceSafetyText, safeList } from "./utils"; import { BulletList, CitationBlock, FollowUpActions, Prose, RichStudyCard, Section, TrustFooter } from "./StudyCardPrimitives"; type CardAction = (intent: StudyIntent, prompt: string) => void; export function ExplanationCard({ card, onAction }: { card: Extract; onAction: CardAction }) { const isLegacySourceSafety = isLegacySourceSafetyText(card.data.answer) || safeList(card.data.sections).some((section) => isLegacySourceSafetyText(`${section.title} ${section.body}`)); const answer = cleanLegacySourceSafetyText(card.data.answer); const sections = isLegacySourceSafety ? [] : safeList(card.data.sections) .filter((section) => !isLegacySourceSafetyText(`${section.title} ${section.body}`)) .slice(0, 8); const citations = safeList(card.data.citations).slice(0, 3); return ( {card.meta?.evidenceLabel || card.data.evidence_label ? (
) : null}
{answer}
{sections.length > 0 ? (
{sections.map((section) => (
{section.body}
))}
) : null}
); } export function NotesCard({ card, onAction }: { card: Extract; onAction: CardAction }) { const data = card.data; const formulaAndDefinitionItems = [ ...safeList(data.important_definitions), ...safeList(data.formulas), ...safeList(data.diagrams_to_practice).map((item) => `Diagram: ${item}`), ]; const examFocusItems = [ ...safeList(data.exam_focus), ...safeList(data.possible_exam_questions).map((item) => `Question: ${item}`), ]; const quickRecallItems = [ ...safeList(data.quick_check), ...safeList(data.memory_tricks).map((item) => `Memory: ${item}`), ]; return ( {data.source_summary || data.summary || data.simple_explanation ? (
{data.source_summary || data.summary || data.simple_explanation}
) : null}
{data.next_study_action ?

{data.next_study_action}

: null}
); }