mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 01:35:39 -04:00
- Stack title-hero poster/metadata vertically on mobile (flex-col md:flex-row), switch backdrop tall breakpoint from sm to md - Extract bio expand/collapse logic into reusable ExpandableText component; use it in PersonHero and TitleHero - Fix ContinueWatchingCard image to use fill + sizes instead of fixed width/height to avoid layout shift - Add fade-out gradient on genre chip scrollbar edge on mobile - Show scaled-down ambient glow on mobile instead of hiding it entirely - Humanize knownForDepartment labels (Acting→Actor, Directing→Director, etc.) - Change cast member name from truncate to line-clamp-2 for wrapping - Hide tooltip arrow via [&>:last-child]:hidden instead of color-matching it - Apply safe-area-inset padding to HeroBanner content on notched devices
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
"use client";
|
|
|
|
import { IconLogout, IconUser } from "@tabler/icons-react";
|
|
import { useRouter } from "next/navigation";
|
|
import { Badge } from "@/components/ui/badge";
|
|
import { Button } from "@/components/ui/button";
|
|
import {
|
|
Card,
|
|
CardContent,
|
|
CardDescription,
|
|
CardTitle,
|
|
} from "@/components/ui/card";
|
|
import { signOut } from "@/lib/auth/client";
|
|
|
|
export function AccountSection({
|
|
user,
|
|
}: {
|
|
user: { name: string; email: string; createdAt: string; role?: string };
|
|
}) {
|
|
const router = useRouter();
|
|
|
|
const memberSince = new Date(user.createdAt).toLocaleDateString(undefined, {
|
|
year: "numeric",
|
|
month: "long",
|
|
});
|
|
const initial = user.name?.charAt(0).toUpperCase() ?? "?";
|
|
|
|
return (
|
|
<div>
|
|
<div className="mb-3 flex items-center gap-2">
|
|
<IconUser aria-hidden={true} className="size-4 text-muted-foreground" />
|
|
<h2 className="font-medium text-muted-foreground text-xs uppercase tracking-wider">
|
|
Account
|
|
</h2>
|
|
</div>
|
|
<Card>
|
|
<CardContent className="flex items-center gap-4">
|
|
<div className="flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-primary/10 font-display text-lg text-primary">
|
|
{initial}
|
|
</div>
|
|
<div className="min-w-0 flex-1">
|
|
<CardTitle>
|
|
{user.name}
|
|
{user.role === "admin" && (
|
|
<Badge className="ml-2 rounded-md border-0 bg-primary/10 align-middle text-primary">
|
|
Admin
|
|
</Badge>
|
|
)}
|
|
</CardTitle>
|
|
<CardDescription>{user.email}</CardDescription>
|
|
<p className="mt-0.5 text-muted-foreground/60 text-xs">
|
|
Member since {memberSince}
|
|
</p>
|
|
</div>
|
|
<Button
|
|
variant="destructive"
|
|
onClick={async () => {
|
|
await signOut();
|
|
router.push("/");
|
|
router.refresh();
|
|
}}
|
|
>
|
|
<IconLogout aria-hidden={true} />
|
|
Sign out
|
|
</Button>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
);
|
|
}
|