/* eslint-disable i18next/no-literal-string */ "use client"; import Link from "next/link"; import { cn } from "@turbostarter/ui"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@turbostarter/ui-web/card"; import { Icons } from "@turbostarter/ui-web/icons"; interface DemoItem { title: string; description: string; href: string; icon: keyof typeof Icons; status: "stable" | "experimental" | "new"; } const demos: DemoItem[] = [ { title: "Scroll Fade", description: "CSS mask-image based scroll indicators that fade content at edges when scrollable.", href: "/demo/scroll-test", icon: "ScrollText", status: "new", }, ]; const statusStyles = { stable: "bg-green-500/10 text-green-500 border-green-500/20", experimental: "bg-amber-500/10 text-amber-500 border-amber-500/20", new: "bg-blue-500/10 text-blue-500 border-blue-500/20", }; const statusLabels = { stable: "Stable", experimental: "Experimental", new: "New", }; export default function DemoHubPage() { return (
{/* Header */}

Component Demos

Interactive demonstrations of UI components and patterns

{/* Content */}
{demos.length === 0 ? (

No demos available yet

) : (
{demos.map((demo) => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const Icon = Icons[demo.icon] || Icons.Package; return (
{statusLabels[demo.status]}
{demo.title} {demo.description}
View demo
); })}
)} {/* Footer info */}

Adding new demos

Create a new folder in app/[locale]/(apps)/demo/ and add it to the demos array in this page.

); }