"use client"; import { useState, useEffect, useCallback, type ReactNode } from "react"; import ConfettiExplosion from "react-confetti-explosion"; import { JSONUIProvider, Renderer } from "@json-render/react"; import type { Spec } from "@json-render/core"; import { registry, actionHandlers, computedFunctions, onConfetti, } from "@/lib/render/registry"; import { examples } from "@/lib/examples"; function SpecRenderer({ spec }: { spec: Spec }): ReactNode { return ( ); } export default function Page() { const [selectedIndex, setSelectedIndex] = useState(0); const selected = examples[selectedIndex]!; const [confettiKey, setConfettiKey] = useState(0); const [confettiActive, setConfettiActive] = useState(false); const fireConfetti = useCallback(() => { setConfettiKey((k) => k + 1); setConfettiActive(true); }, []); useEffect(() => onConfetti(fireConfetti), [fireConfetti]); return (
{/* Example selector */} {/* Render area */}
{confettiActive && (
setConfettiActive(false)} />
)}

{selected.description}

); }