8
Switch language to العربية

OAuth Button

PreviousNext

A single OAuth button with provider icon for authentication flows.

import * as React from "react"
import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Icons } from "@/components/atom/icons"

const providerIcons = {
  github: Icons.gitHub,
  google: Icons.google,
  apple: Icons.apple,
  paypal: Icons.paypal,
} as const

export type OAuthProvider = keyof typeof providerIcons

export interface OAuthButtonProps
  extends Omit<React.ComponentProps<typeof Button>, "children"> {
  provider: OAuthProvider
  label?: string
}

export function OAuthButton({
  provider,
  label,
  variant = "outline",
  className,
  ...props
}: OAuthButtonProps) {
  const Icon = providerIcons[provider]
  const defaultLabel = provider.charAt(0).toUpperCase() + provider.slice(1)

  return (
    <Button
      data-slot="oauth-button"
      variant={variant}
      className={cn("gap-2", className)}
      {...props}
    >
      <Icon className="size-4" />
      {label ?? defaultLabel}
    </Button>
  )
}

Installation

pnpm dlx codebase add oauth-button

Usage

import { OAuthButton } from "@/components/atom/oauth-button"
<OAuthButton provider="github" />

Examples

All Providers

<OAuthButton provider="github" />
<OAuthButton provider="google" />
<OAuthButton provider="apple" />
<OAuthButton provider="paypal" />