shadimage
slidecn
uicontent-slidesource: ok · hit

Content Slide

A general purpose content slide with multiple layout options.

npx shadcn add "https://slidecn.vercel.app/r/content-slide.json"
free

No selection tags yet — empty means no evidence, not lack of support.

Dependencies

Bundle weight · light
@revealjs/reactreveal.js

Files1 · source cached 10/8/2026, 3:39:59 PM

registry/slidecn/ui/content-slide.tsx
"use client";

import { Slide } from "@revealjs/react";
import type { SlideProps } from "@revealjs/react";
import { cva } from "class-variance-authority";
import type { VariantProps } from "class-variance-authority";
import type { ReactNode } from "react";

import { cn } from "@/lib/utils";

const contentSlideVariants = cva("h-full", {
  defaultVariants: {
    layout: "default",
  },
  variants: {
    layout: {
      default: "flex flex-col gap-4",
      "full-bleed": "h-full w-full",
      split: "grid grid-cols-2 gap-8",
    },
  },
});

interface ContentSlideProps
  extends SlideProps, VariantProps<typeof contentSlideVariants> {
  title?: string;
  children: ReactNode;
  notes?: string;
}

const ContentSlide = ({
  title,
  layout,
  className,
  children,
  notes,
  ...slideProps
}: ContentSlideProps) => (
  <Slide className={cn(className)} {...slideProps}>
    <div className={cn(contentSlideVariants({ layout }))}>
      {title && layout !== "full-bleed" && (
        <h2 className="text-3xl font-bold tracking-tight">{title}</h2>
      )}
      {children}
    </div>
    {notes && <aside className="notes">{notes}</aside>}
  </Slide>
);

export { ContentSlide, contentSlideVariants };

More from slidecn

Browse all components in this library →