Unified dashboard redesign: Quicksand font, charcoal theme, merged upload
- Switch font from Geist to Google Quicksand
- Replace indigo/violet primary with charcoal gray (rgb 31,32,29)
- Update gradient-mesh to warm neutral tones (amber/sage)
- Remove sidebar, add fixed top header bar with profile dropdown
- Merge dashboard and upload pages into single table-centric view
- Stat cards now act as clickable table filters with active highlight
- Simplified filter toolbar: search + dropdowns left, export + upload right
- Upload modal with drag-drop, per-file XHR progress, background uploads
- Global drag-and-drop listener opens upload modal from anywhere
- Table rows are clickable (navigate to detail page)
- Right-click column headers for visibility context menu
- Mobile-responsive card layout below md breakpoint
- Uploading row placeholders with animated progress bars
- Floating selection toolbar slides in at bottom on multi-select
- Delete sidebar, dashboard-hero, quick-actions, upload page
Made-with: Cursor
2026-03-11 16:26:56 -04:00
|
|
|
"use client";
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
CheckCircle,
|
|
|
|
|
Download,
|
2026-04-07 18:22:33 -04:00
|
|
|
RefreshCw,
|
Unified dashboard redesign: Quicksand font, charcoal theme, merged upload
- Switch font from Geist to Google Quicksand
- Replace indigo/violet primary with charcoal gray (rgb 31,32,29)
- Update gradient-mesh to warm neutral tones (amber/sage)
- Remove sidebar, add fixed top header bar with profile dropdown
- Merge dashboard and upload pages into single table-centric view
- Stat cards now act as clickable table filters with active highlight
- Simplified filter toolbar: search + dropdowns left, export + upload right
- Upload modal with drag-drop, per-file XHR progress, background uploads
- Global drag-and-drop listener opens upload modal from anywhere
- Table rows are clickable (navigate to detail page)
- Right-click column headers for visibility context menu
- Mobile-responsive card layout below md breakpoint
- Uploading row placeholders with animated progress bars
- Floating selection toolbar slides in at bottom on multi-select
- Delete sidebar, dashboard-hero, quick-actions, upload page
Made-with: Cursor
2026-03-11 16:26:56 -04:00
|
|
|
Trash2,
|
|
|
|
|
X,
|
|
|
|
|
} from "lucide-react";
|
|
|
|
|
import { Button } from "@/components/ui/button";
|
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
|
|
|
|
|
|
interface SelectionToolbarProps {
|
|
|
|
|
selectedIds: string[];
|
|
|
|
|
onMarkReviewed?: (ids: string[]) => void;
|
|
|
|
|
onMarkExported?: (ids: string[]) => void;
|
2026-04-07 18:22:33 -04:00
|
|
|
onReprocess?: (ids: string[]) => void;
|
Unified dashboard redesign: Quicksand font, charcoal theme, merged upload
- Switch font from Geist to Google Quicksand
- Replace indigo/violet primary with charcoal gray (rgb 31,32,29)
- Update gradient-mesh to warm neutral tones (amber/sage)
- Remove sidebar, add fixed top header bar with profile dropdown
- Merge dashboard and upload pages into single table-centric view
- Stat cards now act as clickable table filters with active highlight
- Simplified filter toolbar: search + dropdowns left, export + upload right
- Upload modal with drag-drop, per-file XHR progress, background uploads
- Global drag-and-drop listener opens upload modal from anywhere
- Table rows are clickable (navigate to detail page)
- Right-click column headers for visibility context menu
- Mobile-responsive card layout below md breakpoint
- Uploading row placeholders with animated progress bars
- Floating selection toolbar slides in at bottom on multi-select
- Delete sidebar, dashboard-hero, quick-actions, upload page
Made-with: Cursor
2026-03-11 16:26:56 -04:00
|
|
|
onDelete?: (ids: string[]) => void;
|
|
|
|
|
onClear: () => void;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function SelectionToolbar({
|
|
|
|
|
selectedIds,
|
|
|
|
|
onMarkReviewed,
|
|
|
|
|
onMarkExported,
|
2026-04-07 18:22:33 -04:00
|
|
|
onReprocess,
|
Unified dashboard redesign: Quicksand font, charcoal theme, merged upload
- Switch font from Geist to Google Quicksand
- Replace indigo/violet primary with charcoal gray (rgb 31,32,29)
- Update gradient-mesh to warm neutral tones (amber/sage)
- Remove sidebar, add fixed top header bar with profile dropdown
- Merge dashboard and upload pages into single table-centric view
- Stat cards now act as clickable table filters with active highlight
- Simplified filter toolbar: search + dropdowns left, export + upload right
- Upload modal with drag-drop, per-file XHR progress, background uploads
- Global drag-and-drop listener opens upload modal from anywhere
- Table rows are clickable (navigate to detail page)
- Right-click column headers for visibility context menu
- Mobile-responsive card layout below md breakpoint
- Uploading row placeholders with animated progress bars
- Floating selection toolbar slides in at bottom on multi-select
- Delete sidebar, dashboard-hero, quick-actions, upload page
Made-with: Cursor
2026-03-11 16:26:56 -04:00
|
|
|
onDelete,
|
|
|
|
|
onClear,
|
|
|
|
|
}: SelectionToolbarProps) {
|
|
|
|
|
const count = selectedIds.length;
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|
className={cn(
|
|
|
|
|
"fixed bottom-6 left-1/2 z-50 -translate-x-1/2 transition-all duration-300 ease-out",
|
|
|
|
|
count > 0
|
|
|
|
|
? "translate-y-0 opacity-100"
|
|
|
|
|
: "pointer-events-none translate-y-4 opacity-0"
|
|
|
|
|
)}
|
|
|
|
|
>
|
|
|
|
|
<div className="glass-card flex items-center gap-2 rounded-2xl px-4 py-2.5 shadow-xl sm:gap-3 sm:px-5">
|
|
|
|
|
<span className="shrink-0 text-sm font-medium">
|
|
|
|
|
{count} selected
|
|
|
|
|
</span>
|
|
|
|
|
<div className="h-4 w-px bg-border/50" />
|
|
|
|
|
<div className="flex items-center gap-1.5">
|
|
|
|
|
{onMarkReviewed && (
|
|
|
|
|
<Button
|
|
|
|
|
variant="ghost"
|
|
|
|
|
size="sm"
|
|
|
|
|
className="rounded-xl"
|
|
|
|
|
onClick={() => onMarkReviewed(selectedIds)}
|
|
|
|
|
>
|
|
|
|
|
<CheckCircle className="size-4" />
|
|
|
|
|
<span className="hidden sm:inline ml-1">Reviewed</span>
|
|
|
|
|
</Button>
|
|
|
|
|
)}
|
|
|
|
|
{onMarkExported && (
|
|
|
|
|
<Button
|
|
|
|
|
variant="ghost"
|
|
|
|
|
size="sm"
|
|
|
|
|
className="rounded-xl"
|
|
|
|
|
onClick={() => onMarkExported(selectedIds)}
|
|
|
|
|
>
|
|
|
|
|
<Download className="size-4" />
|
|
|
|
|
<span className="hidden sm:inline ml-1">Export</span>
|
|
|
|
|
</Button>
|
|
|
|
|
)}
|
2026-04-07 18:22:33 -04:00
|
|
|
{onReprocess && (
|
|
|
|
|
<Button
|
|
|
|
|
variant="ghost"
|
|
|
|
|
size="sm"
|
|
|
|
|
className="rounded-xl"
|
|
|
|
|
onClick={() => onReprocess(selectedIds)}
|
|
|
|
|
>
|
|
|
|
|
<RefreshCw className="size-4" />
|
|
|
|
|
<span className="hidden sm:inline ml-1">Reprocess</span>
|
|
|
|
|
</Button>
|
|
|
|
|
)}
|
Unified dashboard redesign: Quicksand font, charcoal theme, merged upload
- Switch font from Geist to Google Quicksand
- Replace indigo/violet primary with charcoal gray (rgb 31,32,29)
- Update gradient-mesh to warm neutral tones (amber/sage)
- Remove sidebar, add fixed top header bar with profile dropdown
- Merge dashboard and upload pages into single table-centric view
- Stat cards now act as clickable table filters with active highlight
- Simplified filter toolbar: search + dropdowns left, export + upload right
- Upload modal with drag-drop, per-file XHR progress, background uploads
- Global drag-and-drop listener opens upload modal from anywhere
- Table rows are clickable (navigate to detail page)
- Right-click column headers for visibility context menu
- Mobile-responsive card layout below md breakpoint
- Uploading row placeholders with animated progress bars
- Floating selection toolbar slides in at bottom on multi-select
- Delete sidebar, dashboard-hero, quick-actions, upload page
Made-with: Cursor
2026-03-11 16:26:56 -04:00
|
|
|
{onDelete && (
|
|
|
|
|
<Button
|
|
|
|
|
variant="ghost"
|
|
|
|
|
size="sm"
|
|
|
|
|
className="rounded-xl text-destructive hover:bg-destructive/10 hover:text-destructive"
|
|
|
|
|
onClick={() => onDelete(selectedIds)}
|
|
|
|
|
>
|
|
|
|
|
<Trash2 className="size-4" />
|
|
|
|
|
<span className="hidden sm:inline ml-1">Delete</span>
|
|
|
|
|
</Button>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
<div className="h-4 w-px bg-border/50" />
|
|
|
|
|
<Button
|
|
|
|
|
variant="ghost"
|
|
|
|
|
size="sm"
|
|
|
|
|
className="rounded-xl"
|
|
|
|
|
onClick={onClear}
|
|
|
|
|
>
|
|
|
|
|
<X className="size-4" />
|
|
|
|
|
<span className="hidden sm:inline ml-1">Clear</span>
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|