From 8eda6c89e20a6b2d83c53bcb7c0286482c432b5c Mon Sep 17 00:00:00 2001 From: Dmytro Stanchiev Date: Wed, 8 Apr 2026 01:17:18 -0400 Subject: [PATCH] feat: replace all vanilla HTML elements with shadcn components MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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: 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 --- .../scripts/__pycache__/core.cpython-312.pyc | Bin 0 -> 11764 bytes .../__pycache__/design_system.cpython-312.pyc | Bin 0 -> 27859 bytes src/components/ai-toolbar.tsx | 10 +-- src/components/date-time-picker.tsx | 18 +++--- src/components/event-actions-toolbar.tsx | 5 +- src/components/event-card.tsx | 24 +++++--- src/components/event-dialog.tsx | 13 ++-- src/components/sign-in.tsx | 3 +- src/components/ui/skeleton.tsx | 13 ++++ src/components/ui/tooltip.tsx | 57 ++++++++++++++++++ 10 files changed, 114 insertions(+), 29 deletions(-) create mode 100644 .claude/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc create mode 100644 .claude/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc create mode 100644 src/components/ui/skeleton.tsx create mode 100644 src/components/ui/tooltip.tsx diff --git a/.claude/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc b/.claude/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f12ef779cddffaaa951b5fb53538c9c8027303e GIT binary patch literal 11764 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 AXaE2J literal 0 HcmV?d00001 diff --git a/.claude/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc b/.claude/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb645c3e48459ad307bacdd38c770a759d97fb14 GIT binary patch literal 27859 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 literal 0 HcmV?d00001 diff --git a/src/components/ai-toolbar.tsx b/src/components/ai-toolbar.tsx index 8aa2972..67c3671 100644 --- a/src/components/ai-toolbar.tsx +++ b/src/components/ai-toolbar.tsx @@ -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 ( -
-
+
+
); } @@ -192,9 +194,9 @@ export const AIToolbar = ({
{events.length > 0 && ( - + {events.length} event{events.length !== 1 ? "s" : ""} - + )} {isAuthenticated && ( +
{quickOptions.map(({ label, date }) => ( - + ))}
0 && ( - + {events.length} event{events.length !== 1 ? "s" : ""} - + )}
); diff --git a/src/components/event-card.tsx b/src/components/event-card.tsx index caf1a1a..102ce02 100644 --- a/src/components/event-card.tsx +++ b/src/components/event-card.tsx @@ -95,16 +95,22 @@ export const EventCard = ({ event, onEdit, onDelete }: EventCardProps) => { )} {event.url && ( -
e.stopPropagation()} + )}
diff --git a/src/components/event-dialog.tsx b/src/components/event-dialog.tsx index 64ea250..8923234 100644 --- a/src/components/event-dialog.tsx +++ b/src/components/event-dialog.tsx @@ -16,6 +16,7 @@ import { } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; interface EventDialogProps { open: boolean; @@ -111,10 +112,10 @@ export const EventDialog = ({ className="font-medium" /> -