From bd80e950044f54f40a60e710f22868f9dd93fafa Mon Sep 17 00:00:00 2001 From: Jan-Henrik Bruhn Date: Sat, 20 Dec 2025 15:44:51 +0100 Subject: [PATCH] feature: Migrate SkeletonLoader and PatternSummaryCard to shadcn/ui MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace SkeletonLoader with shadcn Skeleton component - Simplify gradient animation to use shadcn's built-in pulse - Migrate PatternSummaryCard to shadcn Card and Button - Replace custom delete button with shadcn Button (outline variant) - Use Loader2 from lucide-react for loading spinner Code reduction: - SkeletonLoader: Removed 8 lines of custom gradient classes - Delete button: ~70% reduction (200+ char className → cleaner Button) - Card wrapper: Semantic Card structure vs verbose div classes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- src/components/PatternSummaryCard.tsx | 94 ++++++++++++--------------- src/components/SkeletonLoader.tsx | 8 +-- 2 files changed, 45 insertions(+), 57 deletions(-) diff --git a/src/components/PatternSummaryCard.tsx b/src/components/PatternSummaryCard.tsx index d06cf5e..d80773f 100644 --- a/src/components/PatternSummaryCard.tsx +++ b/src/components/PatternSummaryCard.tsx @@ -4,6 +4,9 @@ import { usePatternStore } from "../stores/usePatternStore"; import { canDeletePattern } from "../utils/machineStateHelpers"; import { PatternInfo } from "./PatternInfo"; import { DocumentTextIcon, TrashIcon } from "@heroicons/react/24/solid"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Loader2 } from "lucide-react"; export function PatternSummaryCard() { // Machine store @@ -27,61 +30,46 @@ export function PatternSummaryCard() { const canDelete = canDeletePattern(machineStatus); return ( -
-
- -
-

- Active Pattern -

-

- {currentFileName} -

+ + +
+ +
+

+ Active Pattern +

+

+ {currentFileName} +

+
-
- + - {canDelete && ( - - )} -
+ {canDelete && ( + + )} + + ); } diff --git a/src/components/SkeletonLoader.tsx b/src/components/SkeletonLoader.tsx index a7447c9..a69a655 100644 --- a/src/components/SkeletonLoader.tsx +++ b/src/components/SkeletonLoader.tsx @@ -1,3 +1,6 @@ +import { Skeleton } from "@/components/ui/skeleton"; +import { cn } from "@/lib/utils"; + interface SkeletonLoaderProps { className?: string; variant?: "text" | "rect" | "circle"; @@ -7,9 +10,6 @@ export function SkeletonLoader({ className = "", variant = "rect", }: SkeletonLoaderProps) { - const baseClasses = - "animate-pulse bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700 bg-[length:200%_100%]"; - const variantClasses = { text: "h-4 rounded", rect: "rounded-lg", @@ -17,7 +17,7 @@ export function SkeletonLoader({ }; return ( -
+ ); }