diff --git a/components/ui/EmptyState.tsx b/components/ui/EmptyState.tsx index 8eb2e82..7efbd3f 100644 --- a/components/ui/EmptyState.tsx +++ b/components/ui/EmptyState.tsx @@ -1,5 +1,6 @@ import React from "react"; -import { View, Text } from "react-native"; +import { View } from "react-native"; +import Animated, { FadeInDown, ZoomIn } from "react-native-reanimated"; import type { LucideIcon } from "lucide-react-native"; import { Button } from "~/components/ui/Button"; @@ -19,7 +20,10 @@ export interface EmptyStateProps { /** * A centred icon-badge + title + body used for empty, error, and idle states - * across the app. Keeps every "nothing here" screen visually consistent. + * across the app. The badge sits inside a soft concentric halo for depth, and + * the whole group eases in — the badge springs, the copy rises with a short + * stagger — so "nothing here" feels considered rather than blank. Keeps every + * empty/error screen visually consistent. */ export function EmptyState({ icon: Icon, @@ -33,31 +37,61 @@ export function EmptyState({ }: EmptyStateProps) { const isError = variant === "error"; return ( - - + {/* Layered badge: a faint outer halo behind a solid inner tile gives the + icon depth instead of floating on a flat square. */} + - - - {title} + + + + + + + + {title} + + {description ? ( - + {description} - + ) : null} + {actionLabel && onAction ? ( - + + + ) : null} );