branch:
DemoWrapper.tsx
1349 bytesRaw
import type { ReactNode } from "react";
import { Link } from "react-router-dom";
import { Text } from "@cloudflare/kumo";
import { ArrowLeftIcon } from "@phosphor-icons/react";
interface DemoWrapperProps {
title: string;
description: ReactNode;
statusIndicator?: ReactNode;
children: ReactNode;
}
export function DemoWrapper({
title,
description,
statusIndicator,
children
}: DemoWrapperProps) {
return (
<div className="h-full flex flex-col">
<div className="px-4 md:px-6 pt-3">
<Link
to="/"
className="inline-flex items-center gap-1.5 text-sm text-kumo-subtle hover:text-kumo-default transition-colors"
>
<ArrowLeftIcon size={14} />
All demos
</Link>
</div>
<header className="flex items-start justify-between gap-4 px-4 md:px-6 pb-3 pt-2 border-b border-kumo-line">
<div className="min-w-0">
<Text variant="heading2">{title}</Text>
</div>
{statusIndicator && <div className="shrink-0">{statusIndicator}</div>}
</header>
<div className="flex-1 min-h-0 overflow-y-auto p-4 md:p-6">
<div className="mb-6 max-w-2xl [&_*]:!leading-6">
<Text variant="secondary" size="sm">
{description}
</Text>
</div>
{children}
</div>
</div>
);
}