返回 presentation-ai
SaveStatus.tsx
根目录 / src / components / presentation / buttons / SaveStatus.tsx
1 "use client";
2 import { cn } from "@/lib/utils";
3 import { usePresentationState } from "@/states/presentation-state";
4 import { CheckCircle, Loader2 } from "lucide-react";
5
6 interface SaveStatusProps {
7 className?: string;
8 }
9
10 export function SaveStatus({ className }: SaveStatusProps) {
11 const savingStatus = usePresentationState((s) => s.savingStatus);
12
13 if (savingStatus === "idle") return null;
14
15 if (savingStatus === "saving") {
16 return (
17 <span
18 className={cn(
19 "flex animate-pulse items-center gap-1 text-sm text-muted-foreground",
20 className,
21 )}
22 >
23 <Loader2 className="h-3.5 w-3.5 animate-spin" />
24 </span>
25 );
26 }
27
28 if (savingStatus === "saved") {
29 return (
30 <span
31 className={cn("flex items-center gap-1 text-sm text-green-500", className)}
32 >
33 <CheckCircle className="h-3.5 w-3.5" />
34 </span>
35 );
36 }
37
38 return null;
39 }
40
40 lines Plain Text