Initial commit

This commit is contained in:
admin
2026-05-26 22:46:00 +02:00
commit 7e2c2ff89c
256 changed files with 51523 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
"use client";
import { useRouter, useSearchParams } from "next/navigation";
import { useTransition } from "react";
import { RectangleVertical, RectangleHorizontal } from "lucide-react";
import { cn } from "@/lib/utils";
export type LibraryView = "portrait" | "landscape";
export function ViewToggle({ current }: { current: LibraryView }) {
const router = useRouter();
const params = useSearchParams();
const [, start] = useTransition();
function set(view: LibraryView) {
if (view === current) return;
const sp = new URLSearchParams(params.toString());
if (view === "portrait") sp.set("view", "portrait");
else sp.delete("view");
const y = typeof window !== "undefined" ? window.scrollY : 0;
start(() => {
const qs = sp.toString();
router.push(qs ? `?${qs}` : `?`, { scroll: false });
requestAnimationFrame(() => window.scrollTo({ top: y, left: 0, behavior: "instant" as ScrollBehavior }));
});
}
return (
<div className="flex items-center rounded-lg glass overflow-hidden text-xs">
<button
type="button"
onClick={() => set("landscape")}
className={cn(
"flex items-center gap-1 px-2.5 py-1.5",
current === "landscape"
? "bg-[var(--color-cyan)] text-black font-medium"
: "text-[var(--color-fg-dim)] hover:text-[var(--color-fg)] hover:bg-[var(--color-glass)]",
)}
title="Full cover (landscape)"
>
<RectangleHorizontal className="w-3.5 h-3.5" /> L
</button>
<button
type="button"
onClick={() => set("portrait")}
className={cn(
"flex items-center gap-1 px-2.5 py-1.5",
current === "portrait"
? "bg-[var(--color-cyan)] text-black font-medium"
: "text-[var(--color-fg-dim)] hover:text-[var(--color-fg)] hover:bg-[var(--color-glass)]",
)}
title="Front cover only (portrait)"
>
<RectangleVertical className="w-3.5 h-3.5" /> P
</button>
</div>
);
}