@@ -142,8 +112,6 @@ export function DocumentListSkeleton({
let body;
if (viewMode === 'list') {
body =
;
- } else if (viewMode === 'columns') {
- body =
;
} else if (viewMode === 'gallery') {
body =
;
} else {
diff --git a/src/components/doclist/views/ColumnsView.tsx b/src/components/doclist/views/ColumnsView.tsx
deleted file mode 100644
index 922c07a..0000000
--- a/src/components/doclist/views/ColumnsView.tsx
+++ /dev/null
@@ -1,179 +0,0 @@
-'use client';
-
-import Link from 'next/link';
-import { useEffect, useState } from 'react';
-import { useDrag, useDrop } from 'react-dnd';
-import type { DocumentListDocument } from '@/types/documents';
-import { PDFIcon, EPUBIcon, FileIcon } from '@/components/icons/Icons';
-import { DocumentPreview } from '@/components/doclist/DocumentPreview';
-import { formatDocumentSize } from '@/components/doclist/formatSize';
-import { useDocumentSelection } from '../dnd/DocumentSelectionContext';
-import { DND_DOCUMENT, type DocumentDragItem } from '../dnd/dndTypes';
-
-interface ColumnsViewProps {
- documents: DocumentListDocument[];
- onDeleteDoc: (doc: DocumentListDocument) => void;
- onMergeIntoFolder: (sources: DocumentListDocument[], target: DocumentListDocument) => void;
-}
-
-function KindIcon({ doc }: { doc: DocumentListDocument }) {
- if (doc.type === 'pdf') return
;
- if (doc.type === 'epub') return
;
- return
;
-}
-
-function ColumnDocRow({
- doc,
- active,
- onClick,
- onMergeIntoFolder,
-}: {
- doc: DocumentListDocument;
- active: boolean;
- onClick: () => void;
- onMergeIntoFolder: (sources: DocumentListDocument[], target: DocumentListDocument) => void;
-}) {
- const selection = useDocumentSelection();
- const isSelected = selection.isSelected(doc);
- const isInFolder = Boolean(doc.folderId);
-
- const [{ isDragging }, dragRef] = useDrag
(() => ({
- type: DND_DOCUMENT,
- item: () => {
- const sel = selection.getSelectedDocs();
- const dragging = isSelected && sel.length > 1 ? sel : [doc];
- if (!isSelected) selection.replace([doc]);
- return { ids: dragging.map((d) => d.id), docs: dragging, fromFolderId: doc.folderId };
- },
- collect: (m) => ({ isDragging: m.isDragging() }),
- }), [doc, isSelected]);
-
- const [{ isOver, canDrop }, dropRef] = useDrop(() => ({
- accept: DND_DOCUMENT,
- canDrop: (item) => !isInFolder && !item.ids.includes(doc.id),
- drop: (item) => onMergeIntoFolder(item.docs, doc),
- collect: (m) => ({ isOver: m.isOver({ shallow: true }), canDrop: m.canDrop() }),
- }), [doc, isInFolder, onMergeIntoFolder]);
-
- const setRefs = (node: HTMLDivElement | null) => {
- dragRef(node);
- dropRef(node);
- };
-
- return (
-
-
-
-
- {doc.name}
-
- );
-}
-
-function Column({ children, title }: { children: React.ReactNode; title?: string }) {
- return (
-
- {title && (
-
- {title}
-
- )}
-
{children}
-
- );
-}
-
-export function ColumnsView({
- documents,
- onDeleteDoc,
- onMergeIntoFolder,
-}: ColumnsViewProps) {
- const { setVisibleOrder } = useDocumentSelection();
- const [selectedDoc, setSelectedDoc] = useState(null);
- const openHref = selectedDoc
- ? `/${selectedDoc.type}/${encodeURIComponent(selectedDoc.id)}`
- : null;
-
- useEffect(() => {
- setVisibleOrder(documents);
- }, [documents, setVisibleOrder]);
-
- useEffect(() => {
- if (documents.length === 0) {
- if (selectedDoc !== null) setSelectedDoc(null);
- return;
- }
-
- if (!selectedDoc) {
- setSelectedDoc(documents[0]);
- return;
- }
-
- const selectedStillExists = documents.some(
- (d) => d.id === selectedDoc.id && d.type === selectedDoc.type,
- );
- if (!selectedStillExists) {
- setSelectedDoc(documents[0]);
- }
- }, [documents, selectedDoc]);
-
- return (
-
-
- {documents.map((doc) => (
- setSelectedDoc(doc)}
- onMergeIntoFolder={onMergeIntoFolder}
- />
- ))}
-
-
- {selectedDoc && (
-
-
-
-
-
-
- {selectedDoc.name}
-
-
- {selectedDoc.type.toUpperCase()} • {formatDocumentSize(selectedDoc.size)}
-
-
-
- Open
-
-
-
-
-
- )}
-
- );
-}
diff --git a/src/components/doclist/window/FinderSidebar.tsx b/src/components/doclist/window/FinderSidebar.tsx
index d754336..c8e4c82 100644
--- a/src/components/doclist/window/FinderSidebar.tsx
+++ b/src/components/doclist/window/FinderSidebar.tsx
@@ -246,7 +246,7 @@ export function FinderSidebar({
active={filter === 'html'}
onClick={() => onFilterChange('html')}
icon={}
- label="HTML / Text"
+ label="Text"
count={counts.html}
/>
diff --git a/src/components/doclist/window/FinderToolbar.tsx b/src/components/doclist/window/FinderToolbar.tsx
index 92798ee..9c32dab 100644
--- a/src/components/doclist/window/FinderToolbar.tsx
+++ b/src/components/doclist/window/FinderToolbar.tsx
@@ -5,7 +5,6 @@ import type { IconSize, SortBy, SortDirection, ViewMode } from '@/types/document
import {
IconsViewIcon,
ListViewIcon,
- ColumnsViewIcon,
GalleryViewIcon,
SearchIcon,
HamburgerIcon,
@@ -26,8 +25,6 @@ interface FinderToolbarProps {
onQueryChange: (q: string) => void;
onToggleSidebar: () => void;
isSidebarOpen: boolean;
- /** True when the columns view should be disabled (mobile viewport). */
- isNarrow: boolean;
/** App-level content rendered at the far left (brand/logo). */
leftSlot?: ReactNode;
/** App-level content rendered at the far right (settings, user menu). */
@@ -37,7 +34,6 @@ interface FinderToolbarProps {
const VIEW_BUTTONS: Array<{ value: ViewMode; label: string; Icon: typeof IconsViewIcon }> = [
{ value: 'icons', label: 'Icons', Icon: IconsViewIcon },
{ value: 'list', label: 'List', Icon: ListViewIcon },
- { value: 'columns', label: 'Columns', Icon: ColumnsViewIcon },
{ value: 'gallery', label: 'Gallery', Icon: GalleryViewIcon },
];
@@ -84,7 +80,6 @@ export function FinderToolbar({
onQueryChange,
onToggleSidebar,
isSidebarOpen,
- isNarrow,
leftSlot,
rightSlot,
}: FinderToolbarProps) {
@@ -113,7 +108,6 @@ export function FinderToolbar({
{VIEW_BUTTONS.map(({ value, label, Icon }) => {
- const disabled = value === 'columns' && isNarrow;
const active = viewMode === value;
const isIconsToggle = value === 'icons';
return (
@@ -123,16 +117,14 @@ export function FinderToolbar({
>