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 ( - +``` + ## Examples ### Primary @@ -119,3 +127,11 @@ import { buttonVariants } from "@/components/ui/button" + +--- + +### As Child + + + +