StyleLab Component Gallery
Browse every component by category below, or drill into a focused stage via the left navigation.
Button · Input · Card · Tabs · Alert · Grid Playground
1. Foundation
Button
import { Button } from "@raxrai/stylelab-ui";
<S.Button variant="primary">Primary</S.Button>
<S.Button variant="secondary">Secondary</S.Button>
<S.Button variant="ghost">Ghost</S.Button>
<S.Button loading>Loading</S.Button>Input
import { Input } from "@raxrai/stylelab-ui";
<S.Input placeholder="Text input" />
<S.Input type="password" placeholder="Password" />Toggle
import { Toggle } from "@raxrai/stylelab-ui";
<Toggle defaultChecked={false} aria-label="Toggle" />
<Toggle defaultChecked onCheckedChange={(checked) => console.log(checked)} />Badge
DefaultNewBeta
import { Badge } from "@raxrai/stylelab-ui";
<S.Badge>Default</Badge>
<S.Badge>New</Badge>Slider
import { Slider } from "@raxrai/stylelab-ui";
<Slider defaultValue={60} onValueChange={(v) => setValue(v)} />
<Slider min={0} max={100} step={10} value={value} />Skeleton
import { Skeleton } from "@raxrai/stylelab-ui";
<Skeleton variant="rectangle" className="h-12 w-32" />
<Skeleton variant="circle" className="size-12" />
<Skeleton variant="text" />Avatar & Group
+1
import { Avatar, AvatarGroup } from "@raxrai/stylelab-ui";
<S.Avatar fallback="JD" />
<S.AvatarGroup max={4}>
<S.Avatar fallback="A" />
<S.Avatar fallback="B" />
</AvatarGroup>Tabs
Content for tab one.
import { Tabs } from "@raxrai/stylelab-ui";
<Tabs items={[{ label: "Tab 1", value: "1", content: <p>Content</p> }, ...]} />Card
Card
Primary vessel for theme aesthetics.
import { Card } from "@raxrai/stylelab-ui";
<S.Card>
<p className="font-medium">Title</p>
<p className="mt-2 text-sm opacity-80">Card content here.</p>
</Card>Accordion
Content for the first section.
Content for the second section.
import { Accordion } from "@raxrai/stylelab-ui";
<S.Accordion
items={[
{ id: "1", title: "Section one", content: <p>Content here.</p> },
{ id: "2", title: "Section two", content: <p>More content.</p> },
]}
allowMultiple={false}
/>Alert
Info
An informational message.Success
Saved successfully.Warning
Please review before continuing.Error
Something went wrong.import { Alert } from "@raxrai/stylelab-ui";
<S.Alert intent="info" title="Info">Message.</Alert>
<S.Alert intent="danger">Error text.</Alert>Breadcrumbs
import { Breadcrumbs } from "@raxrai/stylelab-ui";
<Breadcrumbs items={[
{ label: "Home", href: "/" },
{ label: "Current" },
]} />Tooltip
Hover meimport { Tooltip } from "@raxrai/stylelab-ui";
<Tooltip content="Help text">
<button>Hover me</button>
</Tooltip>Dropdown
import { Dropdown, Button } from "@raxrai/stylelab-ui";
<S.Dropdown
trigger={<S.Button>Open</S.Button>}
items={[{ value: "1", label: "One" }, ...]}
onValueChange={setValue}
/>ProgressBar
import { ProgressBar } from "@raxrai/stylelab-ui";
<ProgressBar value={70} max={100} />
<ProgressBar value={40} segmented />2. Layout
BentoGrid
Bento 1
Bento 2
Bento 3
import { BentoGrid, Card } from "@raxrai/stylelab-ui";
<S.BentoGrid>
<S.Card>Bento 1</S.Card>
<S.Card>Bento 2</S.Card>
<S.Card>Bento 3</S.Card>
</BentoGrid>Navbar
import { Navbar } from "@raxrai/stylelab-ui";
<S.Navbar>
<span className="font-semibold">App name</span>
<nav className="flex gap-4">...</nav>
</Navbar>Sidebar
Main content area
import { Sidebar } from "@raxrai/stylelab-ui";
<S.Sidebar>
<a href="/">Nav item</a>
<a href="/settings">Settings</a>
</Sidebar>SectionHeader
Section title
Optional subtitle text.
import { SectionHeader } from "@raxrai/stylelab-ui";
<SectionHeader title="Section title" subtitle="Optional subtitle." />3. Study & Content Blocks
GraphicCard
Spaced repetition, made visual
Use this card for dashboards, hero callouts, or featured content.
import { GraphicCard } from "@raxrai/stylelab-ui";
<GraphicCard>
<p className="text-sm font-semibold">Title</p>
<p className="mt-1 text-xs text-zinc-600">
Supporting copy here.
</p>
</GraphicCard>Flashcard
Question
What is the time complexity of binary search?
Tap to reveal answerAnswerTap to flip back
O(log n), because the search space is halved on each step.
import { Flashcard } from "@raxrai/stylelab-ui";
<Flashcard
question="What is the capital of France?"
answer="Paris"
/>DocumentAccordion
Place long-form text, markdown, or rich content here. When a pdfUrl is provided, the accordion renders an inline PDF viewer instead.
import { DocumentAccordion } from "@raxrai/stylelab-ui";
<DocumentAccordion
title="Syllabus"
content="Paste long-form text here."
/>
<DocumentAccordion
title="Syllabus (PDF)"
pdfUrl="https://example.com/syllabus.pdf"
/>3. Feedback & Overlay
Modal
import { Modal, Button } from "@raxrai/stylelab-ui";
const [open, setOpen] = useState(false);
<S.Button onClick={() => setOpen(true)}>Open</S.Button>
<S.Modal open={open} onClose={() => setOpen(false)} title="Title">
<p>Modal content.</p>
</Modal>Toast
import { Toast } from "@raxrai/stylelab-ui";
<S.Toast message="Saved!" onDismiss={() => setVisible(false)} />Command Palette
import { CommandPalette } from "@raxrai/stylelab-ui";
const [open, setOpen] = useState(false);
<S.CommandPalette
open={open}
onClose={() => setOpen(false)}
commands={[
{ id: "1", label: "Go to Home", onSelect: () => {} },
{ id: "2", label: "Search", shortcut: "/", onSelect: () => {} },
]}
/>4. Data & Blocks
DataTable
| Name | Role | Status |
|---|---|---|
| Alice | Engineer | Active |
| Bob | Designer | Away |
import { DataTable } from "@raxrai/stylelab-ui";
<S.DataTable
columns={[
{ key: "name", header: "Name" },
{ key: "role", header: "Role", render: (row) => row.role },
]}
data={[{ name: "Alice", role: "Engineer" }]}
/>PricingCard
Starter
$9/mo
- Feature A
- Feature B
- Feature C
Pro
$29/mo
Most popular
- Everything in Starter
- Feature D
- Feature E
Enterprise
Custom
- Everything
- Support
- SLA
import { PricingCard } from "@raxrai/stylelab-ui";
<PricingCard
tier={{
name: "Pro",
price: "$29/mo",
features: ["Feature A", "Feature B"],
cta: "Get started",
highlighted: true,
}}
onSelect={() => {}}
/>Terminal
stylelab@dev
$ npm run dev
Ready on http://localhost:3000
import { Terminal } from "@raxrai/stylelab-ui";
<Terminal title="terminal">
<p>$ npm run dev</p>
<p>Ready on http://localhost:3000</p>
</Terminal>StatsCard
Revenue
$12,345
+12%
Users
2,431
-3%
Active
98%
import { StatsCard } from "@raxrai/stylelab-ui";
<StatsCard label="Revenue" value="$12,345" trend={{ direction: "up", value: "+12%" }} />
<StatsCard label="Users" value="2,431" />Calendar
March 2026
Sun
Mon
Tue
Wed
Thu
Fri
Sat
import { Calendar } from "@raxrai/stylelab-ui";
<Calendar value={date} onSelect={setDate} />
<Calendar min={new Date()} max={...} />Timeline
Started
10:00
Project kickoff
In progress
11:30
Done
Deployed to production
import { Timeline } from "@raxrai/stylelab-ui";
<Timeline items={[
{ title: "Event", time: "Now", description: "Details" },
]} />