diff --git a/apps/web/src/app/projects/page.tsx b/apps/web/src/app/projects/page.tsx
index 4276ecc7..3d66a3c5 100644
--- a/apps/web/src/app/projects/page.tsx
+++ b/apps/web/src/app/projects/page.tsx
@@ -5,6 +5,7 @@ import {
ChevronLeft,
Loader2,
MoreHorizontal,
+ ArrowDown01,
Plus,
Search,
Trash2,
@@ -29,12 +30,11 @@ import {
} from "@/components/ui/dropdown-menu";
import { Input } from "@/components/ui/input";
import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "@/components/ui/select";
+ Tooltip,
+ TooltipContent,
+ TooltipProvider,
+ TooltipTrigger,
+} from "@/components/ui/tooltip";
import { Skeleton } from "@/components/ui/skeleton";
import { useProjectStore } from "@/stores/project-store";
import { useTimelineStore } from "@/stores/timeline-store";
@@ -228,17 +228,71 @@ export default function ProjectsPage() {
onChange={(e) => setSearchQuery(e.target.value)}
/>
-
+
+
+
+
+
+
+
+
+
+
+ {
+ if (sortOption.startsWith("createdAt")) {
+ setSortOption(
+ sortOption.endsWith("asc")
+ ? "createdAt-desc"
+ : "createdAt-asc"
+ );
+ } else {
+ setSortOption("createdAt-asc");
+ }
+ }}
+ >
+ Created{" "}
+ {sortOption.startsWith("createdAt") &&
+ (sortOption.endsWith("asc") ? "↑" : "↓")}
+
+ {
+ if (sortOption.startsWith("name")) {
+ setSortOption(
+ sortOption.endsWith("asc")
+ ? "name-desc"
+ : "name-asc"
+ );
+ } else {
+ setSortOption("name-asc");
+ }
+ }}
+ >
+ Name{" "}
+ {sortOption.startsWith("name") &&
+ (sortOption.endsWith("asc") ? "↑" : "↓")}
+
+
+
+
+
+ Sort by{" "}
+ {sortOption.startsWith("createdAt") ? "date" : "name"} (
+ {sortOption.endsWith("asc") ? "ascending" : "descending"})
+
+
+
+
+
{isSelectionMode && sortedProjects.length > 0 && (
diff --git a/apps/web/src/components/ui/button.tsx b/apps/web/src/components/ui/button.tsx
index 9096e415..0e07ccb8 100644
--- a/apps/web/src/components/ui/button.tsx
+++ b/apps/web/src/components/ui/button.tsx
@@ -20,7 +20,7 @@ const buttonVariants = cva(
outline:
"border border-input bg-background shadow-xs hover:opacity-75 transition-opacity hover:text-accent-foreground",
secondary:
- "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-foreground/15 border border-input",
text: "bg-transparent p-0 rounded-none opacity-100 hover:opacity-50 transition-opacity", // Instead of ghost (matches app better)
link: "text-primary underline-offset-4 hover:underline",
},