import { useEffect, useRef, useState } from "react"; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import type { PaletteRole } from "./ThemePaletteGrid"; const ROLE_TO_TOKEN: Record = { background: "--background", surface: "--card", overlay: "--secondary", text: "--foreground", "accent-1": "--primary", "accent-2": "--accent", "accent-3": "--muted", }; interface ThemePreviewPanelProps { palette: PaletteRole[]; variant: "dark" | "light"; className?: string; } export function ThemePreviewPanel({ palette, variant, className, }: ThemePreviewPanelProps) { const containerRef = useRef(null); const [announcement, setAnnouncement] = useState(""); useEffect(() => { const container = containerRef.current; if (!container || palette.length === 0) return; palette.forEach((role) => { const tokenName = ROLE_TO_TOKEN[role.name]; if (!tokenName) return; const value = variant === "dark" ? role.dark.hex : role.light.hex; container.style.setProperty(tokenName, value); }); setAnnouncement("Palette updated"); }, [palette, variant]); return (
{/* Visually hidden aria-live announcer */}
{announcement}
{/* Mini Nexus UI mock */}
{/* Narrow sidebar strip */}
{/* Main content area */}
); }