Structured components help you display organized information like feature lists, speaker bios, and team members.
SlideStatementList & SlideStatement
Title + description pairs with automatic border separators. Perfect for feature lists, definitions, or structured content.
SlideStatementList Props
Should contain SlideStatement components
Additional CSS classes for custom styling
SlideStatement Props
Bold heading text for the statement
Optional muted description below the title
Additional CSS classes for custom styling
Usage
import {
Slide,
SlideTitle,
SlideStatementList,
SlideStatement
} from 'nextjs-slides';
<Slide align="left">
<SlideTitle>Core Principles</SlideTitle>
<SlideStatementList>
<SlideStatement
title="Performance First"
description="Optimized for speed with automatic code splitting"
/>
<SlideStatement
title="Developer Experience"
description="Intuitive API with TypeScript support"
/>
<SlideStatement
title="Production Ready"
description="Battle-tested in high-traffic applications"
/>
</SlideStatementList>
</Slide>
Without descriptions
<SlideStatementList>
<SlideStatement title="Server Components" />
<SlideStatement title="Client Components" />
<SlideStatement title="Server Actions" />
</SlideStatementList>
SlideStatementList automatically adds top borders to each statement and a bottom border to the last one, creating a clean separated list.
SlideSpeaker
Speaker card with an avatar circle, name, and role/title. When avatar is omitted, a placeholder circle is shown.
Props
Speaker’s name (displayed in uppercase)
Speaker’s role or title (displayed in uppercase)
Image URL or path for the speaker avatar. Falls back to placeholder when omitted.
Additional CSS classes for custom styling
Usage
import { Slide, SlideTitle, SlideSpeaker } from 'nextjs-slides';
<Slide>
<SlideTitle>Today's Speaker</SlideTitle>
<SlideSpeaker
name="Jane Smith"
title="Senior Engineer"
avatar="/images/jane.jpg"
/>
</Slide>
Without avatar
<SlideSpeaker
name="John Doe"
title="Tech Lead"
/>
Speaker names and titles are rendered in uppercase with letter spacing (tracking-widest and tracking-wider) for a clean, professional look.
SlideSpeakerGrid
Two-column responsive grid for laying out multiple SlideSpeaker cards side by side (stacks to one column on small screens).
Props
Should contain SlideSpeaker components
Additional CSS classes for custom styling
Usage
import {
Slide,
SlideTitle,
SlideSpeakerGrid,
SlideSpeaker
} from 'nextjs-slides';
<Slide>
<SlideTitle>Our Team</SlideTitle>
<SlideSpeakerGrid>
<SlideSpeaker
name="Alice Johnson"
title="Product Manager"
avatar="/images/alice.jpg"
/>
<SlideSpeaker
name="Bob Williams"
title="Lead Designer"
avatar="/images/bob.jpg"
/>
<SlideSpeaker
name="Carol Davis"
title="Frontend Engineer"
avatar="/images/carol.jpg"
/>
<SlideSpeaker
name="David Chen"
title="Backend Engineer"
avatar="/images/david.jpg"
/>
</SlideSpeakerGrid>
</Slide>
SlideSpeakerList
Vertical stack layout for SlideSpeaker cards. Use when you want speakers in a single column.
Props
Should contain SlideSpeaker components
Additional CSS classes for custom styling
Usage
import {
Slide,
SlideTitle,
SlideSpeakerList,
SlideSpeaker
} from 'nextjs-slides';
<Slide align="left">
<SlideTitle>Panelists</SlideTitle>
<SlideSpeakerList>
<SlideSpeaker
name="Emma Wilson"
title="CTO at TechCorp"
avatar="/images/emma.jpg"
/>
<SlideSpeaker
name="Michael Brown"
title="VP Engineering at StartupXYZ"
avatar="/images/michael.jpg"
/>
<SlideSpeaker
name="Sarah Martinez"
title="Principal Architect at BigCo"
avatar="/images/sarah.jpg"
/>
</SlideSpeakerList>
</Slide>
Complete Examples
Feature showcase with statements
import {
SlideSplitLayout,
SlideTitle,
SlideSubtitle,
SlideStatementList,
SlideStatement
} from 'nextjs-slides';
<SlideSplitLayout
left={
<>
<SlideTitle>Why Choose Us</SlideTitle>
<SlideSubtitle>Built for modern workflows</SlideSubtitle>
</>
}
right={
<SlideStatementList>
<SlideStatement
title="Lightning Fast"
description="Sub-second page loads with edge caching"
/>
<SlideStatement
title="Type Safe"
description="End-to-end TypeScript for fewer bugs"
/>
<SlideStatement
title="Scalable"
description="Handles millions of requests per day"
/>
</SlideStatementList>
}
/>
Team introduction
import {
Slide,
SlideBadge,
SlideTitle,
SlideSpeakerGrid,
SlideSpeaker
} from 'nextjs-slides';
<Slide>
<SlideBadge>Meet the Team</SlideBadge>
<SlideTitle>Core Contributors</SlideTitle>
<SlideSpeakerGrid>
<SlideSpeaker
name="Taylor Swift"
title="Engineering Lead"
avatar="/team/taylor.jpg"
/>
<SlideSpeaker
name="Morgan Freeman"
title="Design Lead"
avatar="/team/morgan.jpg"
/>
</SlideSpeakerGrid>
</Slide>
Mixed content slide
import {
Slide,
SlideTitle,
SlideSubtitle,
SlideStatementList,
SlideStatement,
SlideNote
} from 'nextjs-slides';
<Slide align="left">
<SlideTitle>API Endpoints</SlideTitle>
<SlideSubtitle>Available resources</SlideSubtitle>
<SlideStatementList>
<SlideStatement
title="GET /api/users"
description="Fetch all users with pagination"
/>
<SlideStatement
title="POST /api/users"
description="Create a new user account"
/>
<SlideStatement
title="DELETE /api/users/:id"
description="Remove a user by ID"
/>
</SlideStatementList>
<SlideNote>All endpoints require authentication</SlideNote>
</Slide>
Responsive Behavior
- SlideStatement: Uses responsive padding
px-8 sm:px-12 md:px-16 and text sizing text-lg sm:text-xl md:text-2xl for titles
- SlideSpeaker: Avatar size is fixed at
h-12 w-12, text uses text-sm for consistency
- SlideSpeakerGrid: Uses
grid-cols-1 sm:grid-cols-2 to stack on mobile and display side-by-side on larger screens
- SlideSpeakerList: Always uses vertical layout with
gap-6
Styling Tips
Custom statement colors
<SlideStatement
title="Important Feature"
description="This is highlighted"
className="bg-blue-50 border-blue-200"
/>
Compact speaker cards
<SlideSpeakerList className="gap-3">
<SlideSpeaker name="Alex" title="Developer" />
<SlideSpeaker name="Blake" title="Designer" />
</SlideSpeakerList>
Statement list without borders
<SlideStatementList className="[&>*]:border-0">
<SlideStatement title="Item 1" />
<SlideStatement title="Item 2" />
</SlideStatementList>