import { getDocumentIcon } from "@/components/new/document-modal/document-icon" import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, } from "@repo/ui/components/drawer" import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@repo/ui/components/dialog" import type { DocumentsWithMemoriesResponseSchema } from "@repo/validation/api" import { Badge } from "@ui/components/badge" import { Brain, Calendar, ChevronDown, ChevronUp, CircleUserRound, ExternalLink, List, Sparkles, } from "lucide-react" import { memo, useState } from "react" import type { z } from "zod" import { formatDate, getSourceUrl } from "." import { Label1Regular } from "@ui/text/label/label-1-regular" import { HTMLContentRenderer } from "./html-content-renderer" import { Button } from "@ui/components/button" type DocumentsResponse = z.infer type DocumentWithMemories = DocumentsResponse["documents"][0] type MemoryEntry = DocumentWithMemories["memoryEntries"][0] const formatDocumentType = (type: string) => { if (type.toLowerCase() === "pdf") return "PDF" return type .split("_") .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) .join(" ") } const MemoryDetailItem = memo(({ memory }: { memory: MemoryEntry }) => { return (
{memory.memory}
{formatDate(memory.createdAt)} v{memory.version} {memory.sourceRelevanceScore && ( 70 ? "text-emerald-600 dark:text-emerald-400" : "text-muted-foreground" }`} > {memory.sourceRelevanceScore}% )}
{memory.isForgotten && ( Forgotten )} {memory.isLatest && ( Latest )} {memory.forgetAfter && ( Expires {formatDate(memory.forgetAfter)} Expires )}
) }) export const MemoryDetail = memo( ({ document, isOpen, onClose, isMobile, }: { document: DocumentWithMemories | null isOpen: boolean onClose: () => void isMobile: boolean }) => { if (!document) return null const [isSummaryOpen, setIsSummaryOpen] = useState(false) const activeMemories = document.memoryEntries.filter((m) => !m.isForgotten) const forgottenMemories = document.memoryEntries.filter( (m) => m.isForgotten, ) const HeaderContent = ({ TitleComponent, }: { TitleComponent: typeof DialogTitle | typeof DrawerTitle }) => (
{getDocumentIcon( document.type, "w-4 h-4 md:w-5 md:h-5 text-foreground", document.source ?? undefined, document.url ?? undefined, )}
{document.title || "Untitled Document"}
{formatDocumentType(document.type)} {formatDate(document.createdAt)}
{(document.url || document.metadata?.website_url) && (
)}
) const ContentDisplaySection = () => { const hasContent = document.content && document.content.trim().length > 0 if (!hasContent) { return (

No content available for this document

) } return (
) } const SummaryDisplaySection = () => { const hasSummary = document.summary && document.summary.trim().length > 0 if (!hasSummary) { return (

No summary available

) } return (

{document.summary}

) } const MemoryContent = () => (
{activeMemories.length > 0 && (
Active Memories ({activeMemories.length})
{activeMemories.map((memory) => (
))}
)} {forgottenMemories.length > 0 && (
Forgotten Memories ({forgottenMemories.length})
{forgottenMemories.map((memory) => ( ))}
)} {activeMemories.length === 0 && forgottenMemories.length === 0 && (

No memories found for this document

)}
) if (isMobile) { return (

Content

Summary

Memories

) } return (

Content

{isSummaryOpen && (
)}
) }, )