+ {/* Search shares one row with the tag chips on desktop — it wraps to
+ its own line only on phone widths where a chip scroller plus an
+ input can't share a row. The chip scroller flexes to fill the
+ rest; the clear button pins to the trailing edge. */}
+
);
}
diff --git a/src/components/documents/upload-zone.tsx b/src/components/documents/upload-zone.tsx
index 91c4ba1e8..c94863234 100644
--- a/src/components/documents/upload-zone.tsx
+++ b/src/components/documents/upload-zone.tsx
@@ -1,23 +1,23 @@
"use client";
/**
- * The vault's upload entry: a dashed drop-target card with a file button.
+ * The vault's upload plumbing: the hidden file input the page header's
+ * Upload button opens, plus a quota bar that appears only above 80 %
+ * usage. There is no standing drop-target card — it took a full band of
+ * vertical space on every visit for an affordance the header button and
+ * the page-wide drag-and-drop overlay already cover. Dropping a file
+ * anywhere on the page is caught by that overlay; the header button opens
+ * this input.
+ *
* The `accept` list comes verbatim from the usage endpoint (HEIC is
* deliberately absent so the iOS picker transcodes camera photos to JPEG),
* `multiple` is on, and there is NO `capture` attribute — mobile Safari
- * then offers camera AND library. Dropping files onto the card feeds the
- * same queue as the picker.
- *
- * The quota bar renders only above 80 % usage — a calm surface until
- * storage actually becomes a topic.
+ * then offers camera AND library.
*/
-import { UploadCloud } from "lucide-react";
-import { useRef, useState, type RefObject } from "react";
+import { type RefObject } from "react";
-import { Button } from "@/components/ui/button";
import { Progress } from "@/components/ui/progress";
import { useTranslations } from "@/lib/i18n/context";
-import { cn } from "@/lib/utils";
import type { DocumentUsageDto } from "@/lib/validations/inbound-documents";
import { formatBytes } from "./vault-utils";
@@ -36,8 +36,6 @@ export function UploadZone({
inputRef: RefObject;
}) {
const { t, locale } = useTranslations();
- const [dragOver, setDragOver] = useState(false);
- const dragDepth = useRef(0);
const accept = usage?.acceptedExtensions.join(",");
const usedFraction =
@@ -49,71 +47,20 @@ export function UploadZone({
};
return (
-
diff --git a/src/components/layout/auth-shell.tsx b/src/components/layout/auth-shell.tsx
index c2db1f0bd..23fb7b3a7 100644
--- a/src/components/layout/auth-shell.tsx
+++ b/src/components/layout/auth-shell.tsx
@@ -36,13 +36,6 @@ const PUBLIC_PATHS = [
"/c/",
];
-// Routes that opt into the wide content container (`max-w-screen-2xl`
-// instead of the standard `max-w-screen-xl`). The shell stays the single
-// owner of the page frame — a wide page never re-implements paddings or
-// margins; it is listed here instead. Currently: the Dokumente vault,
-// whose multi-column document timeline earns the extra width.
-const WIDE_CONTENT_PATHS = ["/documents"];
-
export function AuthShell({
children,
demoMode = false,
@@ -76,9 +69,6 @@ export function AuthShell({
pathname.startsWith("/about") ||
pathname.startsWith("/c/");
const isAdminPage = pathname.startsWith("/admin");
- const isWidePage = WIDE_CONTENT_PATHS.some(
- (p) => pathname === p || pathname.startsWith(`${p}/`),
- );
const isOnboardingPage = pathname === "/onboarding";
const showUnlockNotifier = isAuthenticated && !isPublicPage && !!user?.id;
@@ -343,13 +333,7 @@ export function AuthShell({
the desktop bottom-6 anchor), so the last line of content
can always scroll out from under the floating button.
*/}
-