veza/apps/web/src/features/library/pages/library-page/LibraryPageEmpty.tsx
senke cd764d32cb feat(ui): premium empty states + focus ring consistency
Empty states enhanced:
- EmptyState component gains variant prop (default/centered/card)
- Soft entry animation (fade + scale) via new CSS keyframe
- Icon wrapped in muted background circle
- Library: "Your library is empty" + "Upload Track" action
- Search: "No results found" + improved description
- Wishlist: "Explore the marketplace" + Browse button
- Queue: "Nothing in your queue" with autoplay context
- Chat: improved no-conversation and no-messages states

Focus ring consistency (6 files fixed):
- input.tsx: ring-primary/30 → ring-ring + ring-offset
- checkbox.tsx: peer-focus → peer-focus-visible + ring-ring
- textarea.tsx: focus:ring-1 → focus-visible:ring-2 + ring-ring
- List.tsx: added ring-offset-background
- TrackListRow.tsx: full focus-visible on rows + action buttons
- PlaylistCard.tsx: focus-visible on checkbox button

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 23:23:09 +01:00

23 lines
623 B
TypeScript

import { EmptyState } from '@/components/ui/empty-state';
import { FileAudio } from 'lucide-react';
interface LibraryPageEmptyProps {
onUploadClick: () => void;
}
export function LibraryPageEmpty({ onUploadClick }: LibraryPageEmptyProps) {
return (
<EmptyState
variant="centered"
icon={<FileAudio className="w-full h-full" />}
title="Your library is empty"
description="Upload your first track or create a playlist to get started."
action={{
label: 'Upload Track',
onClick: onUploadClick,
}}
size="lg"
className="min-h-layout-page-sm"
/>
);
}