32 lines · 1.4 KB
import { featurePage } from "~/lib/marketing/features";
import { TextLink } from "~/ui/TextLink";
import { cn } from "~/utils/cn";
import { DisplayTitle } from "./DisplayTitle";
import { FeatureDemo } from "./FeatureDemo";

/** Landing-page section that previews one feature page: copy on one side, its live demo on the other. */
export function Spotlight({ slug, flip = false }: { slug: string; flip?: boolean }) {
  const page = featurePage(slug);
  if (!page) throw new Error(`Unknown feature page: ${slug}`);
  return (
    <div className="grid items-center gap-10 lg:grid-cols-2">
      <div className={cn("space-y-5", flip && "lg:order-2")}>
        <DisplayTitle title={page.title} />
        <p className="max-w-lg leading-7 text-kumo-subtle">{page.lede}</p>
        <ul className="grid gap-x-6 gap-y-3 sm:grid-cols-2">
          {page.highlights.slice(0, 2).map((item) => (
            <li key={item.title}>
              <p className="text-sm font-medium text-kumo-default">{item.title}</p>
              <p className="mt-1 text-sm leading-6 text-kumo-subtle">{item.body}</p>
            </li>
          ))}
        </ul>
        <TextLink to="/features/$slug" params={{ slug: page.slug }} className="inline-block text-sm">
          Read more about {page.nav.toLowerCase()}
        </TextLink>
      </div>
      <FeatureDemo demo={page.demo} className={cn(flip && "lg:order-1")} />
    </div>
  );
}