Custom Shadcn Frame for React and Tailwind CSS. Displays related content in a structured frame.
Browse 19 production-ready Shadcn Frame components for dashboards, forms, and product UI. These examples use Base UI primitives from @base-ui/react and stay fully compatible with Shadcn Create so radius, color, and typography match your configured theme.
Browse all 19 Shadcn Frame components for copy-ready layouts, dashboards, and forms built with Tailwind CSS in the ReUI library.
import {
Frame,
FrameDescription,
FrameFooter,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"<Frame>
<FramePanel>
<FrameHeader>
<FrameTitle>Frame Title</FrameTitle>
<FrameDescription>Frame Description</FrameDescription>
</FrameHeader>
<div className="p-5">Frame Content</div>
<FrameFooter>Frame Footer</FrameFooter>
</FramePanel>
</Frame>You can customize the border radius of the frame and its panels using the --frame-radius CSS variable.
<Frame className="[--frame-radius:var(--radius-lg)]">
<FramePanel>...</FramePanel>
</Frame>The root container for one or more frame panels.
A card-like container within the frame that holds header, content, and footer.
A container for the title and description, with default padding.
Heading for the frame panel.
Supporting text for the frame panel.
A container for actions or additional information at the bottom of the panel.
import {
Frame,
FrameDescription,
FrameFooter,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame className="w-full">
<FrameHeader>
<FrameTitle>Section header</FrameTitle>
<FrameDescription>Description for the section</FrameDescription>
</FrameHeader>
<FramePanel>
<h2 className="text-sm font-semibold">Section title 2</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
<FrameFooter>
<p className="text-muted-foreground text-sm">Section footer</p>
</FrameFooter>
</Frame>
)
}
import {
Frame,
FrameDescription,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame className="w-full">
<FrameHeader>
<FrameTitle>Section header</FrameTitle>
<FrameDescription>Description for the section</FrameDescription>
</FrameHeader>
<FramePanel>
<h2 className="text-sm font-semibold">Separated panel</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
<FramePanel>
<h2 className="text-sm font-semibold">Separated panel</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
</Frame>
)
}
import {
Frame,
FrameDescription,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame className="w-full" stacked>
<FrameHeader>
<FrameTitle>Section header</FrameTitle>
<FrameDescription>Description for the section</FrameDescription>
</FrameHeader>
<FramePanel>
<h2 className="text-sm font-semibold">Stacked panel</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
<FramePanel>
<h2 className="text-sm font-semibold">Stacked panel</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
</Frame>
)
}
import {
Frame,
FrameDescription,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame className="w-full" stacked dense>
<FrameHeader>
<FrameTitle>Section header</FrameTitle>
<FrameDescription>Description for the section</FrameDescription>
</FrameHeader>
<FramePanel>
<h2 className="text-sm font-semibold">Stacked panel</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
<FramePanel>
<h2 className="text-sm font-semibold">Stacked panel</h2>
<p className="text-muted-foreground text-sm">Section description</p>
</FramePanel>
</Frame>
)
}
import {
Frame,
FrameDescription,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame className="w-full" variant="ghost">
<FrameHeader>
<FrameTitle>No Outer Border</FrameTitle>
<FrameDescription>
This frame uses variant="ghost" to remove the outer border.
</FrameDescription>
</FrameHeader>
<FramePanel>
<p className="text-muted-foreground text-sm">
The outer container of this frame has no border, only the background
and panels are visible.
</p>
</FramePanel>
</Frame>
)
}
import {
Frame,
FrameDescription,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame dense className="w-full max-w-sm">
<FrameHeader>
<FrameTitle>Inventory Check</FrameTitle>
<FrameDescription>Real-time stock monitoring</FrameDescription>
</FrameHeader>
<FramePanel>
<h2 className="text-sm font-semibold">Warehouse A</h2>
<p className="text-muted-foreground text-sm">
Dense mode removes outer padding for a more compact appearance.
</p>
</FramePanel>
</Frame>
)
}
import {
Frame,
FrameDescription,
FrameHeader,
FramePanel,
FrameTitle,
} from "@/components/reui/frame"
export function Pattern() {
return (
<Frame stacked className="w-full max-w-sm">
<FrameHeader>
<FrameTitle>Server Logs</FrameTitle>
<FrameDescription>Recent activity and errors</FrameDescription>
</FrameHeader>
<FramePanel>
<h2 className="text-sm font-semibold">Auth Service</h2>
<p className="text-muted-foreground text-sm">
Successfully logged in user: admin
</p>
</FramePanel>
<FramePanel>
<h2 className="text-sm font-semibold">Database</h2>
<p className="text-muted-foreground text-sm">
Query execution time: 12ms
</p>
</FramePanel>
<FramePanel>
<h2 className="text-sm font-semibold">Storage</h2>
<p className="text-muted-foreground text-sm">
Upload complete: image.png
</p>
</FramePanel>
</Frame>
)
}