diff --git a/apps/www/components/examples/button/as-child.tsx b/apps/www/components/examples/button/as-child.tsx
new file mode 100644
index 0000000000..928d4d1c08
--- /dev/null
+++ b/apps/www/components/examples/button/as-child.tsx
@@ -0,0 +1,11 @@
+import Link from "next/link"
+
+import { Button } from "@/components/ui/button"
+
+export function ButtonAsChild() {
+ return (
+
+ )
+}
diff --git a/apps/www/components/examples/index.tsx b/apps/www/components/examples/index.tsx
index 6ff43188ac..df457426ff 100644
--- a/apps/www/components/examples/index.tsx
+++ b/apps/www/components/examples/index.tsx
@@ -8,6 +8,7 @@ import { BadgeDemo } from "@/components/examples/badge/demo"
import { BadgeDestructive } from "@/components/examples/badge/destructive"
import { BadgeOutline } from "@/components/examples/badge/outline"
import { BadgeSecondary } from "@/components/examples/badge/secondary"
+import { ButtonAsChild } from "@/components/examples/button/as-child"
import { ButtonDemo } from "@/components/examples/button/demo"
import { ButtonDestructive } from "@/components/examples/button/destructive"
import { ButtonGhost } from "@/components/examples/button/ghost"
@@ -110,6 +111,7 @@ export const examples = {
ButtonOutline,
ButtonSecondary,
ButtonWithIcon,
+ ButtonAsChild,
CalendarDemo,
CalendarDatePicker,
CalendarDateRangePicker,
diff --git a/apps/www/components/ui/button.tsx b/apps/www/components/ui/button.tsx
index 89f2d3c069..0c9ca98671 100644
--- a/apps/www/components/ui/button.tsx
+++ b/apps/www/components/ui/button.tsx
@@ -1,4 +1,5 @@
import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
import { VariantProps, cva } from "class-variance-authority"
import { cn } from "@/lib/utils"
@@ -33,12 +34,15 @@ const buttonVariants = cva(
export interface ButtonProps
extends React.ButtonHTMLAttributes,
- VariantProps {}
+ VariantProps {
+ asChild?: boolean
+}
const Button = React.forwardRef(
- ({ className, variant, size, ...props }, ref) => {
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
+ const Comp = asChild ? Slot : "button"
return (
-