apps/eclipse/content/design-system/components/separator.mdx
import { Separator, Button } from "@prisma/eclipse";
Horizontal Separator
The default separator is horizontal:
import { Separator } from "@prisma/eclipse";
export function HorizontalSeparator() {
return (
<div className="space-y-4">
<div>Content above</div>
<Separator />
<div>Content below</div>
</div>
);
}
Live Example:
<div className="max-w-md my-4"> <div className="space-y-4"> <div className="text-sm">Content above separator</div> <Separator /> <div className="text-sm">Content below separator</div> </div> </div>Vertical Separator
Use vertical orientation to separate content side-by-side:
import { Separator } from "@prisma/eclipse";
export function VerticalSeparator() {
return (
<div className="flex items-center gap-4 h-12">
<span>Left</span>
<Separator orientation="vertical" />
<span>Right</span>
</div>
);
}
Live Example:
<div className="max-w-md my-4"> <div className="flex items-center gap-4 h-12"> <span className="text-sm">Left</span> <Separator orientation="vertical" /> <span className="text-sm">Right</span> </div> </div>In Navigation
Use separators to divide navigation items:
import { Separator } from "@prisma/eclipse";
export function NavSeparator() {
return (
<nav className="flex items-center gap-4">
<a href="#" className="text-sm hover:underline">Home</a>
<Separator orientation="vertical" className="h-4" />
<a href="#" className="text-sm hover:underline">About</a>
<Separator orientation="vertical" className="h-4" />
<a href="#" className="text-sm hover:underline">Contact</a>
</nav>
);
}
Live Example:
<div className="max-w-md my-4"> <nav className="flex items-center gap-4"> <a href="#" className="text-sm hover:underline">Home</a> <Separator orientation="vertical" className="h-4" /> <a href="#" className="text-sm hover:underline">About</a> <Separator orientation="vertical" className="h-4" /> <a href="#" className="text-sm hover:underline">Contact</a> </nav> </div>Section Divider
Use horizontal separators to divide page sections:
import { Separator } from "@prisma/eclipse";
export function SectionDivider() {
return (
<div className="space-y-6 max-w-2xl">
<div>
<h3 className="text-lg font-semibold mb-2">Section 1</h3>
<div className="text-sm text-muted-foreground">
This is the first section of content with some description text.
</div>
</div>
<Separator />
<div>
<h3 className="text-lg font-semibold mb-2">Section 2</h3>
<div className="text-sm text-muted-foreground">
This is the second section of content with some description text.
</div>
</div>
</div>
);
}
Live Example:
<div className="max-w-2xl my-4"> <div className="space-y-6"> <div> <h3 className="text-lg font-semibold mb-2">Section 1</h3> <div className="text-sm text-muted-foreground"> This is the first section of content with some description text. </div> </div><Separator />
<div>
<h3 className="text-lg font-semibold mb-2">Section 2</h3>
<div className="text-sm text-muted-foreground">
This is the second section of content with some description text.
</div>
</div>
Custom Styling
Customize the separator appearance:
import { Separator } from "@prisma/eclipse";
export function CustomSeparator() {
return (
<div className="space-y-6 max-w-md">
<div>
<div className="text-sm mb-4">Default separator</div>
<Separator />
</div>
<div>
<div className="text-sm mb-4">Thicker separator</div>
<Separator className="h-[2px]" />
</div>
<div>
<div className="text-sm mb-4">Colored separator</div>
<Separator className="bg-blue-500" />
</div>
<div>
<div className="text-sm mb-4">Dashed separator</div>
<Separator className="border-t border-dashed border-border bg-transparent" />
</div>
</div>
);
}
Live Example:
<div className="max-w-md my-4"> <div className="space-y-6"> <div> <div className="text-sm mb-4">Default separator</div> <Separator /> </div><div>
<div className="text-sm mb-4">Thicker separator</div>
<Separator className="h-[2px]" />
</div>
<div>
<div className="text-sm mb-4">Colored separator</div>
<Separator className="bg-blue-500" />
</div>
<div>
<div className="text-sm mb-4">Dashed separator</div>
<Separator className="border-t border-dashed border-border bg-transparent" />
</div>
In Cards
Use separators within card components:
import { Separator } from "@prisma/eclipse";
export function CardSeparator() {
return (
<div className="border rounded-lg p-6 max-w-md">
<div>
<h3 className="text-lg font-semibold">Card Title</h3>
<div className="text-sm text-muted-foreground mt-1">
Subtitle or description text
</div>
</div>
<Separator className="my-4 w-[calc(100%_+_48px)] -mx-6" />
<div className="space-y-2">
<div className="flex justify-between text-sm">
<span>Item 1</span>
<span className="font-medium">$10.00</span>
</div>
<div className="flex justify-between text-sm">
<span>Item 2</span>
<span className="font-medium">$15.00</span>
</div>
</div>
<Separator className="my-4 w-[calc(100%_+_48px)] -mx-6" />
<div className="flex justify-between font-semibold">
<span>Total</span>
<span>$25.00</span>
</div>
</div>
);
}
Live Example:
<div className="max-w-md my-4"> <div className="border rounded-lg p-6"> <div> <h3 className="text-lg font-semibold">Card Title</h3> <div className="text-sm text-muted-foreground mt-1"> Subtitle or description text </div> </div><Separator className="my-4 w-[calc(100%_+_48px)] -mx-6" />
<div className="space-y-2">
<div className="flex justify-between text-sm">
<span>Item 1</span>
<span className="font-medium">$10.00</span>
</div>
<div className="flex justify-between text-sm">
<span>Item 2</span>
<span className="font-medium">$15.00</span>
</div>
</div>
<Separator className="my-4 w-[calc(100%_+_48px)] -mx-6" />
<div className="flex justify-between font-semibold">
<span>Total</span>
<span>$25.00</span>
</div>
Toolbar Separator
Use vertical separators in toolbars:
import { Separator } from "@prisma/eclipse";
import { Button } from "@prisma/eclipse";
export function ToolbarSeparator() {
return (
<div className="flex items-center gap-2 p-2 border rounded-lg w-fit">
<Button size="lg" variant="default-weaker">Bold</Button>
<Button size="lg" variant="default-weaker">Italic</Button>
<Separator orientation="vertical" className="h-6" />
<Button size="lg" variant="default-weaker">Link</Button>
<Button size="lg" variant="default-weaker">Image</Button>
<Separator orientation="vertical" className="h-6" />
<Button size="lg" variant="default-weaker">Undo</Button>
<Button size="lg" variant="default-weaker">Redo</Button>
</div>
);
}
Live Example:
<div className="my-4"> <div className="flex items-center gap-2 p-2 border rounded-lg w-fit"> <Button size="lg" variant="default-weaker">Bold</Button> <Button size="lg" variant="default-weaker">Italic</Button><Separator orientation="vertical" className="h-6" />
<Button size="lg" variant="default-weaker">Link</Button>
<Button size="lg" variant="default-weaker">Image</Button>
<Separator orientation="vertical" className="h-6" />
<Button size="lg" variant="default-weaker">Undo</Button>
<Button size="lg" variant="default-weaker">Redo</Button>
List Separator
Separate list items:
import { Separator } from "@prisma/eclipse";
export function ListSeparator() {
return (
<div className="max-w-md">
<div className="py-3">
<h4 className="font-medium">Item 1</h4>
<div className="text-sm text-muted-foreground">Description for item 1</div>
</div>
<Separator />
<div className="py-3">
<h4 className="font-medium">Item 2</h4>
<div className="text-sm text-muted-foreground">Description for item 2</div>
</div>
<Separator />
<div className="py-3">
<h4 className="font-medium">Item 3</h4>
<div className="text-sm text-muted-foreground">Description for item 3</div>
</div>
</div>
);
}
Live Example:
<div className="max-w-md my-4 border rounded-lg p-4"> <div className="py-3"> <h4 className="font-medium">Item 1</h4> <div className="text-sm text-muted-foreground">Description for item 1</div> </div> <Separator /> <div className="py-3"> <h4 className="font-medium">Item 2</h4> <div className="text-sm text-muted-foreground">Description for item 2</div> </div> <Separator /> <div className="py-3"> <h4 className="font-medium">Item 3</h4> <div className="text-sm text-muted-foreground">Description for item 3</div> </div> </div>Separator
orientation - Separator direction ("horizontal" | "vertical", default: "horizontal")decorative - Whether separator is decorative or semantic (boolean, default: true)className - Additional CSS classes (string, optional)decorative={false} for semantic separators that convey meaningThe Separator component is perfect for:
The Separator component follows accessibility best practices:
separator or none if decorative)decorative={false}The Separator component uses design tokens:
bg-borderh-[1px]w-[1px]shrink-0Customize by passing className:
<Separator className="bg-blue-500 h-[2px]" />
<Separator orientation="vertical" className="bg-red-500 w-[2px] h-8" />
Separator works well with: