feat: replace all vanilla HTML elements with shadcn components

- Install skeleton and tooltip shadcn components
- event-dialog: textarea → Textarea, duration chips → Button ghost
- date-time-picker: raw button trigger → Button outline, quick-date chips → Button ghost
- event-card: <a> URL link → Button link asChild
- sign-in: animate-pulse div → Skeleton
- ai-toolbar: animate-pulse div → Skeleton, event count span → Badge secondary
- event-actions-toolbar: event count span → Badge secondary
This commit is contained in:
2026-04-08 01:17:18 -04:00
parent 1cee73702b
commit 8eda6c89e2
10 changed files with 114 additions and 29 deletions

View File

@@ -15,8 +15,10 @@ import {
import Image from "next/image";
import { IcsFilePicker } from "@/components/ics-file-picker";
import { ImagePicker } from "@/components/image-picker";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Separator } from "@/components/ui/separator";
import { Skeleton } from "@/components/ui/skeleton";
import { Textarea } from "@/components/ui/textarea";
import type { CalendarEvent } from "@/lib/types";
@@ -62,8 +64,8 @@ export const AIToolbar = ({
}: AIToolbarProps) => {
if (isPending) {
return (
<div className="glass-card p-4 mb-6 animate-pulse">
<div className="h-10 bg-muted/50 rounded-lg" />
<div className="glass-card p-4 mb-6">
<Skeleton className="h-10 w-full rounded-lg" />
</div>
);
}
@@ -192,9 +194,9 @@ export const AIToolbar = ({
<div className="ml-auto flex items-center gap-3">
{events.length > 0 && (
<span className="text-xs text-muted-foreground">
<Badge variant="secondary" className="text-xs">
{events.length} event{events.length !== 1 ? "s" : ""}
</span>
</Badge>
)}
{isAuthenticated && (
<Button