"use client"; import { useState, useEffect } from "react"; import Link from "next/link"; import { getReadingList, removeFromReadingList, type ReadingListEntry } from "@/lib/reading-list-store"; const COVER_GRADIENT: Record = { amber: "from-amber-950 via-amber-900 to-amber-800", cyan: "from-cyan-950 via-cyan-900 to-cyan-800", emerald: "from-emerald-950 via-emerald-900 to-emerald-800", rose: "from-rose-950 via-rose-900 to-rose-800", violet: "from-violet-950 via-violet-900 to-violet-800", slate: "from-slate-900 via-slate-800 to-slate-700", }; const ACCENT_TEXT: Record = { amber: "text-amber-400", cyan: "text-cyan-400", emerald: "text-emerald-400", rose: "text-rose-400", violet: "text-violet-400", slate: "text-slate-400", }; function MiniCover({ entry }: { entry: ReadingListEntry }) { const grad = COVER_GRADIENT[entry.coverAccent] ?? COVER_GRADIENT.amber; return (
{entry.coverImageUrl ? ( // eslint-disable-next-line @next/next/no-img-element {entry.title} ) : ( <>

{entry.title}

)}
); } export default function MyListPanel() { const [list, setList] = useState([]); const [open, setOpen] = useState(false); useEffect(() => { setList(getReadingList()); }, [open]); // refresh when panel opens function handleRemove(slug: string) { removeFromReadingList(slug); setList(getReadingList()); } if (list.length === 0 && !open) return null; return (
{/* Header row */} {open && (
{list.length === 0 ? (

Your list is empty

Open any book and tap “Save to List” to add it here.

) : (
{list.map((entry) => { const accentT = ACCENT_TEXT[entry.coverAccent] ?? ACCENT_TEXT.amber; return (

{entry.authorName}

{entry.title}

{entry.subtitle && (

{entry.subtitle}

)}

{new Date(entry.addedAt).toLocaleDateString(undefined, { month: "short", day: "numeric" })}

{/* Remove button */}
); })}
)}
)}
); }