Some checks failed
Deploy to Cloudflare Workers (OpenNext) / deploy (push) Has been cancelled
Centralize primary, secondary, tertiary, and neutral tokens and apply them across theme variables and UI components. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
"use client";
|
|
|
|
import { CalendarPlus, Download } from "lucide-react";
|
|
import { buildGoogleCalendarUrl, buildOutlookCalendarUrl } from "@/lib/calendar";
|
|
import { Button } from "@/components/ui/button";
|
|
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuItem,
|
|
DropdownMenuTrigger,
|
|
} from "@/components/ui/dropdown-menu";
|
|
|
|
type Props = {
|
|
className?: string;
|
|
variant?: "default" | "outline" | "inverse";
|
|
};
|
|
|
|
export function AddToCalendar({ className, variant = "outline" }: Props) {
|
|
const googleUrl = buildGoogleCalendarUrl();
|
|
const outlookUrl = buildOutlookCalendarUrl();
|
|
|
|
const buttonClass =
|
|
variant === "inverse"
|
|
? "rounded-full border-white/30 bg-transparent text-white hover:bg-white/10"
|
|
: variant === "default"
|
|
? "rounded-full bg-[#37a47a] text-[#ffffff] hover:bg-[#37a47a]/90"
|
|
: "rounded-full";
|
|
|
|
return (
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger asChild>
|
|
<Button variant={variant === "default" ? "default" : "outline"} className={`${buttonClass} ${className ?? ""}`}>
|
|
<CalendarPlus className="size-4" />
|
|
Add to calendar
|
|
</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent align="center" className="w-56">
|
|
<DropdownMenuItem asChild>
|
|
<a href={googleUrl} target="_blank" rel="noopener noreferrer">
|
|
Google Calendar
|
|
</a>
|
|
</DropdownMenuItem>
|
|
<DropdownMenuItem asChild>
|
|
<a href={outlookUrl} target="_blank" rel="noopener noreferrer">
|
|
Outlook
|
|
</a>
|
|
</DropdownMenuItem>
|
|
<DropdownMenuItem asChild>
|
|
<a href="/calendar" download="grv-summit.ics">
|
|
<Download className="mr-2 size-4 inline" />
|
|
Apple / iCal (.ics)
|
|
</a>
|
|
</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
);
|
|
}
|