"use client"; import type * as React from "react"; import { cn } from "../lib/utils"; import { Avatar, AvatarFallback, AvatarImage } from "../primitives/avatar"; import { Button, type ButtonProps } from "../primitives/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "../primitives/dropdown-menu"; // GitHub icon SVG function GitHubIcon({ className }: { className?: string }) { return ( ); } export interface SessionUser { customer_id: string; email: string; name?: string; tier?: string; github?: { login: string; connected: boolean; } | null; session_expires_at: string; } export interface GitHubLoginButtonProps extends Omit { /** API base URL (defaults to /auth/github) */ authUrl?: string; /** Product variant for styling */ variant?: "sandbox" | "default" | "outline"; } export function GitHubLoginButton({ authUrl = "/auth/github", variant = "default", className, children, ...props }: GitHubLoginButtonProps) { return ( ); } export interface UserMenuProps { user: SessionUser; /** API base URL for logout */ logoutUrl?: string; /** Links to show in menu */ links?: Array<{ href: string; label: string; icon?: React.ReactNode; }>; /** Product variant for styling */ variant?: "sandbox"; /** Callback when logout is clicked */ onLogout?: () => void; } export function UserMenu({ user, logoutUrl = "/auth/logout", links = [], variant = "sandbox", onLogout, }: UserMenuProps) { const initials = user.name ? user.name .split(" ") .map((n) => n[0]) .join("") .toUpperCase() .slice(0, 2) : user.email.slice(0, 2).toUpperCase(); const avatarGradient = { sandbox: "bg-[image:var(--accent-gradient-strong)]", }[variant]; const handleLogout = () => { if (onLogout) { onLogout(); } window.location.href = logoutUrl; }; return (

{user.name ?? "Account"}

{user.email}

{links.map((link) => ( {link.icon} {link.label} ))} {links.length > 0 && } Sign out
); } export interface AuthHeaderProps { /** Current session user (null if not logged in) */ user: SessionUser | null; /** Whether session is loading */ loading?: boolean; /** Product variant */ variant?: "sandbox"; /** API base URL */ apiBaseUrl?: string; /** Links for user menu */ menuLinks?: UserMenuProps["links"]; /** Custom className */ className?: string; } export function AuthHeader({ user, loading = false, variant = "sandbox", apiBaseUrl = "", menuLinks, className, }: AuthHeaderProps) { if (loading) { return (
); } if (!user) { return (
); } return ( ); }