apps/eclipse/content/design-system/components/button.mdx
import { Button } from "@prisma/eclipse";
Basic Button
import { Button } from "@prisma/eclipse";
export function MyComponent() {
return <Button variant="default">Click me</Button>;
}
Live Example:
<div className="flex flex-wrap gap-4 my-4"> <Button variant="default">Default Button</Button> </div>Button Variants
import { Button } from "@prisma/eclipse";
export function ButtonVariants() {
return (
<div className="flex flex-wrap gap-4">
<Button variant="default">Default</Button>
<Button variant="default-stronger">Default Stronger</Button>
<Button variant="default-weaker">Default Weaker</Button>
<Button variant="ppg">PPG</Button>
<Button variant="orm">ORM</Button>
<Button variant="error">Error</Button>
<Button variant="success">Success</Button>
<Button variant="link">Link</Button>
</div>
);
}
Live Example:
<div className="flex flex-wrap gap-4 my-4"> <Button variant="default">Default</Button> <Button variant="default-stronger">Default Stronger</Button> <Button variant="default-weaker">Default Weaker</Button> <Button variant="ppg">PPG</Button> <Button variant="orm">ORM</Button> <Button variant="error">Error</Button> <Button variant="success">Success</Button> <Button variant="link">Link</Button> </div>Button Sizes
import { Button } from "@prisma/eclipse";
export function ButtonSizes() {
return (
<div className="flex flex-wrap items-center gap-4">
<Button size="lg">Large</Button>
<Button size="xl">Extra Large</Button>
<Button size="2xl">2X Large</Button>
<Button size="4xl">4X Large</Button>
</div>
);
}
Live Example:
<div className="flex flex-wrap items-center gap-4 my-4"> <Button size="lg">Large (Default)</Button> <Button size="xl">Extra Large</Button> <Button size="2xl">2X Large</Button> <Button size="4xl">4X Large</Button> </div>With onClick Handler
import { Button } from "@prisma/eclipse";
export function InteractiveButton() {
const handleClick = () => {
alert("Button clicked!");
};
return (
<Button variant="ppg" onClick={handleClick}>
Click me
</Button>
);
}
As Link
Use the href prop to render the button as an anchor element:
import { Button } from "@prisma/eclipse";
export function LinkButton() {
return <Button variant="ppg" href="/docs">Go to Docs</Button>;
}
Disabled State
import { Button } from "@prisma/eclipse";
export function DisabledButton() {
return (
<div className="flex gap-4">
<Button variant="default" disabled>Disabled Default</Button>
<Button variant="ppg" disabled>Disabled PPG</Button>
<Button variant="error" disabled>Disabled Error</Button>
</div>
);
}
Live Example:
<div className="flex flex-wrap gap-4 my-4"> <Button variant="default" disabled>Disabled Default</Button> <Button variant="ppg" disabled>Disabled PPG</Button> <Button variant="error" disabled>Disabled Error</Button> </div>Full Width Button
import { Button } from "@prisma/eclipse";
export function FullWidthButton() {
return (
<Button variant="ppg" className="w-full">
Full Width Button
</Button>
);
}
variant - The visual style variant (default: "default")size - The button size (default: "lg")href - When provided, renders an anchor element instead of a buttondisabled - Whether the button is disabled (boolean, default: false)onClick - Click event handler (optional)className - Additional CSS classes (optional)children - Button content (required)Standard button style with neutral colors.
<Button variant="default">Default Button</Button>
Stronger emphasis version of the default variant.
<Button variant="default-stronger">Stronger Button</Button>
Weaker emphasis version of the default variant.
<Button variant="default-weaker">Weaker Button</Button>
Prisma Pulse & Accelerate brand colors for product-specific actions.
<Button variant="ppg">PPG Action</Button>
Prisma ORM brand colors for ORM-specific actions.
<Button variant="orm">ORM Action</Button>
Error or danger variant for destructive actions.
<Button variant="error">Delete</Button>
Success variant for positive actions and confirmations.
<Button variant="success">Saved</Button>
Link-styled button for navigation that looks like a text link.
<Button variant="link">Learn More</Button>
The Button component supports four sizes:
lg - Large button (default)xl - Extra large button2xl - 2X large button4xl - 4X large button<Button size="lg">Large</Button>
<Button size="xl">Extra Large</Button>
<Button size="2xl">2X Large</Button>
<Button size="4xl">4X Large</Button>
href prop<button> and <a> elementsdisabled state to indicate unavailable actionsPrimary and Secondary Actions
<div className="flex gap-4">
<Button variant="default-stronger">Save Changes</Button>
<Button variant="default-weaker">Cancel</Button>
</div>
Destructive Action with Confirmation
<div className="flex gap-4">
<Button variant="error">Delete Account</Button>
<Button variant="default-weaker">Cancel</Button>
</div>
Product-Specific CTAs
<div className="flex gap-4">
<Button variant="ppg">Try Prisma Accelerate</Button>
<Button variant="orm">Install Prisma ORM</Button>
</div>
Form Actions
<form>
<div className="flex gap-4 mt-4">
<Button variant="default" type="submit">Submit</Button>
<Button variant="link" type="button">Reset</Button>
</div>
</form>
<button> elements for actionshref prop when the action should navigateThe Button component works seamlessly with HTML forms:
<form onSubmit={handleSubmit}>
<input type="text" name="email" />
<Button type="submit" variant="default-stronger">
Subscribe
</Button>
</form>
You can combine buttons with icons for enhanced visual communication:
import { Button } from "@prisma/eclipse";
import { ChevronRight } from "lucide-react";
export function IconButton() {
return (
<Button variant="ppg">
Get Started
<ChevronRight className="ml-2 h-4 w-4" />
</Button>
);
}