"use client"; import { useState, useEffect } from "react"; import Link from "next/link"; import { Cancel01Icon } from "@hugeicons/core-free-icons"; import { HugeiconsIcon } from "@hugeicons/react"; import { Button } from "@/components/ui/button"; import { getSortedReleases } from "../utils"; import type { Release } from "../utils"; const STORAGE_KEY = "last-seen-version"; export function ChangelogNotification() { const [release, setRelease] = useState(null); useEffect(() => { const releases = getSortedReleases(); const latest = releases[0]; if (!latest) return; let storedVersion: string | null = null; try { storedVersion = localStorage.getItem(STORAGE_KEY); } catch { // localStorage unavailable } const isOutdated = storedVersion === null || storedVersion.localeCompare(latest.version, undefined, { numeric: true, }) < 0; // TODO(v0.4): revert to the standard "null = first-time visitor, record silently" // path. The null case intentionally shows the card for this release so existing // users who never had the key get the 0.3.0 announcement. if (!isOutdated) return; try { localStorage.setItem(STORAGE_KEY, latest.version); } catch { // ignore } setRelease(latest); }, []); if (!release) return null; return (
{release.title} v{release.version}
{release.summary && (

{release.summary}

)}
); }