diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 2cf40f1ce..8083f37fd 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { RainbowThemeProvider } from './components/RainbowThemeProvider'; +import { RainbowThemeProvider } from './components/shared/RainbowThemeProvider'; import HomePage from './pages/HomePage'; // Import global styles diff --git a/frontend/src/components/DeepLinks.tsx b/frontend/src/components/DeepLinks.tsx deleted file mode 100644 index e0222d2b9..000000000 --- a/frontend/src/components/DeepLinks.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; -import { Button, Stack, Text, Group } from '@mantine/core'; - -const DeepLinks = () => { - const commonLinks = [ - { - name: "Split PDF Pages 1-5", - url: "/?t=split&mode=byPages&p=1-5&v=viewer", - description: "Split a PDF and extract pages 1-5" - }, - { - name: "Compress PDF (High)", - url: "/?t=compress&level=9&gray=true&v=viewer", - description: "Compress a PDF with high compression level" - }, - { - name: "Merge PDFs", - url: "/?t=merge&v=fileManager", - description: "Combine multiple PDF files into one" - } - ]; - - return ( - - Common PDF Operations - {commonLinks.map((link, index) => ( - - - {link.description} - - ))} - - ); -}; - -export default DeepLinks; diff --git a/frontend/src/components/PageEditor.tsx b/frontend/src/components/editor/PageEditor.tsx similarity index 98% rename from frontend/src/components/PageEditor.tsx rename to frontend/src/components/editor/PageEditor.tsx index 19debef0d..b324c08af 100644 --- a/frontend/src/components/PageEditor.tsx +++ b/frontend/src/components/editor/PageEditor.tsx @@ -23,19 +23,19 @@ import SelectAllIcon from "@mui/icons-material/SelectAll"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; import CloseIcon from "@mui/icons-material/Close"; -import { usePDFProcessor } from "../hooks/usePDFProcessor"; -import { PDFDocument, PDFPage } from "../types/pageEditor"; -import { fileStorage } from "../services/fileStorage"; -import { generateThumbnailForFile } from "../utils/thumbnailUtils"; -import { useUndoRedo } from "../hooks/useUndoRedo"; +import { usePDFProcessor } from "../../hooks/usePDFProcessor"; +import { PDFDocument, PDFPage } from "../../types/pageEditor"; +import { fileStorage } from "../../services/fileStorage"; +import { generateThumbnailForFile } from "../../utils/thumbnailUtils"; +import { useUndoRedo } from "../../hooks/useUndoRedo"; import { RotatePagesCommand, DeletePagesCommand, ReorderPageCommand, MovePagesCommand, ToggleSplitCommand -} from "../commands/pageCommands"; -import { pdfExportService } from "../services/pdfExportService"; +} from "../../commands/pageCommands"; +import { pdfExportService } from "../../services/pdfExportService"; export interface PageEditorProps { file: { file: File; url: string } | null; diff --git a/frontend/src/components/PageEditorControls.tsx b/frontend/src/components/editor/PageEditorControls.tsx similarity index 100% rename from frontend/src/components/PageEditorControls.tsx rename to frontend/src/components/editor/PageEditorControls.tsx diff --git a/frontend/src/components/FileCard.standalone.tsx b/frontend/src/components/fileManagement/FileCard.tsx similarity index 95% rename from frontend/src/components/FileCard.standalone.tsx rename to frontend/src/components/fileManagement/FileCard.tsx index 6f2a10f04..795e838a3 100644 --- a/frontend/src/components/FileCard.standalone.tsx +++ b/frontend/src/components/fileManagement/FileCard.tsx @@ -4,9 +4,9 @@ import { useTranslation } from "react-i18next"; import PictureAsPdfIcon from "@mui/icons-material/PictureAsPdf"; import StorageIcon from "@mui/icons-material/Storage"; -import { FileWithUrl } from "../types/file"; -import { getFileSize, getFileDate } from "../utils/fileUtils"; -import { useIndexedDBThumbnail } from "../hooks/useIndexedDBThumbnail"; +import { FileWithUrl } from "../../types/file"; +import { getFileSize, getFileDate } from "../../utils/fileUtils"; +import { useIndexedDBThumbnail } from "../../hooks/useIndexedDBThumbnail"; interface FileCardProps { file: FileWithUrl; diff --git a/frontend/src/components/FileManager.tsx b/frontend/src/components/fileManagement/FileManager.tsx similarity index 96% rename from frontend/src/components/FileManager.tsx rename to frontend/src/components/fileManagement/FileManager.tsx index c975274f4..f6eb2c653 100644 --- a/frontend/src/components/FileManager.tsx +++ b/frontend/src/components/fileManagement/FileManager.tsx @@ -4,14 +4,14 @@ import { Dropzone, MIME_TYPES } from "@mantine/dropzone"; import { useTranslation } from "react-i18next"; import { GlobalWorkerOptions } from "pdfjs-dist"; -import { StorageStats } from "../services/fileStorage"; -import { FileWithUrl, defaultStorageConfig } from "../types/file"; +import { StorageStats } from "../../services/fileStorage"; +import { FileWithUrl, defaultStorageConfig } from "../../types/file"; // Refactored imports -import { fileOperationsService } from "../services/fileOperationsService"; -import { checkStorageWarnings } from "../utils/storageUtils"; +import { fileOperationsService } from "../../services/fileOperationsService"; +import { checkStorageWarnings } from "../../utils/storageUtils"; import StorageStatsCard from "./StorageStatsCard"; -import FileCard from "./FileCard.standalone"; +import FileCard from "./FileCard"; GlobalWorkerOptions.workerSrc = "/pdf.worker.js"; diff --git a/frontend/src/components/StorageStatsCard.tsx b/frontend/src/components/fileManagement/StorageStatsCard.tsx similarity index 92% rename from frontend/src/components/StorageStatsCard.tsx rename to frontend/src/components/fileManagement/StorageStatsCard.tsx index d3ea98fd4..3fd85f255 100644 --- a/frontend/src/components/StorageStatsCard.tsx +++ b/frontend/src/components/fileManagement/StorageStatsCard.tsx @@ -3,9 +3,9 @@ import { Card, Group, Text, Button, Progress } from "@mantine/core"; import { useTranslation } from "react-i18next"; import StorageIcon from "@mui/icons-material/Storage"; import DeleteIcon from "@mui/icons-material/Delete"; -import { StorageStats } from "../services/fileStorage"; -import { formatFileSize } from "../utils/fileUtils"; -import { getStorageUsagePercent } from "../utils/storageUtils"; +import { StorageStats } from "../../services/fileStorage"; +import { formatFileSize } from "../../utils/fileUtils"; +import { getStorageUsagePercent } from "../../utils/storageUtils"; interface StorageStatsCardProps { storageStats: StorageStats | null; diff --git a/frontend/src/components/LanguageSelector.module.css b/frontend/src/components/shared/LanguageSelector.module.css similarity index 100% rename from frontend/src/components/LanguageSelector.module.css rename to frontend/src/components/shared/LanguageSelector.module.css diff --git a/frontend/src/components/LanguageSelector.tsx b/frontend/src/components/shared/LanguageSelector.tsx similarity index 99% rename from frontend/src/components/LanguageSelector.tsx rename to frontend/src/components/shared/LanguageSelector.tsx index 16fe55faa..83cecc6b0 100644 --- a/frontend/src/components/LanguageSelector.tsx +++ b/frontend/src/components/shared/LanguageSelector.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react'; import { Menu, Button, ScrollArea, useMantineTheme, useMantineColorScheme } from '@mantine/core'; import { useTranslation } from 'react-i18next'; -import { supportedLanguages } from '../i18n'; +import { supportedLanguages } from '../../i18n'; import LanguageIcon from '@mui/icons-material/Language'; import styles from './LanguageSelector.module.css'; diff --git a/frontend/src/components/QuickAccessBar.tsx b/frontend/src/components/shared/QuickAccessBar.tsx similarity index 97% rename from frontend/src/components/QuickAccessBar.tsx rename to frontend/src/components/shared/QuickAccessBar.tsx index 1ebcb7661..9c904cb66 100644 --- a/frontend/src/components/QuickAccessBar.tsx +++ b/frontend/src/components/shared/QuickAccessBar.tsx @@ -6,7 +6,7 @@ import ZoomInMapIcon from "@mui/icons-material/ZoomInMap"; import MenuBookIcon from "@mui/icons-material/MenuBook"; import AppsIcon from "@mui/icons-material/Apps"; import { useRainbowThemeContext } from "./RainbowThemeProvider"; -import rainbowStyles from '../styles/rainbow.module.css'; +import rainbowStyles from '../../styles/rainbow.module.css'; interface QuickAccessBarProps { onToolsClick: () => void; diff --git a/frontend/src/components/RainbowThemeProvider.tsx b/frontend/src/components/shared/RainbowThemeProvider.tsx similarity index 89% rename from frontend/src/components/RainbowThemeProvider.tsx rename to frontend/src/components/shared/RainbowThemeProvider.tsx index 90261381e..27cf5101f 100644 --- a/frontend/src/components/RainbowThemeProvider.tsx +++ b/frontend/src/components/shared/RainbowThemeProvider.tsx @@ -1,8 +1,8 @@ import React, { createContext, useContext, ReactNode } from 'react'; import { MantineProvider, ColorSchemeScript } from '@mantine/core'; -import { useRainbowTheme } from '../hooks/useRainbowTheme'; -import { mantineTheme } from '../theme/mantineTheme'; -import rainbowStyles from '../styles/rainbow.module.css'; +import { useRainbowTheme } from '../../hooks/useRainbowTheme'; +import { mantineTheme } from '../../theme/mantineTheme'; +import rainbowStyles from '../../styles/rainbow.module.css'; interface RainbowThemeContextType { themeMode: 'light' | 'dark' | 'rainbow'; diff --git a/frontend/src/components/TopControls.tsx b/frontend/src/components/shared/TopControls.tsx similarity index 97% rename from frontend/src/components/TopControls.tsx rename to frontend/src/components/shared/TopControls.tsx index a51b50729..3abfc83af 100644 --- a/frontend/src/components/TopControls.tsx +++ b/frontend/src/components/shared/TopControls.tsx @@ -2,7 +2,7 @@ import React from "react"; import { Button, SegmentedControl } from "@mantine/core"; import { useRainbowThemeContext } from "./RainbowThemeProvider"; import LanguageSelector from "./LanguageSelector"; -import rainbowStyles from '../styles/rainbow.module.css'; +import rainbowStyles from '../../styles/rainbow.module.css'; import DarkModeIcon from '@mui/icons-material/DarkMode'; import LightModeIcon from '@mui/icons-material/LightMode'; import AutoAwesomeIcon from '@mui/icons-material/AutoAwesome'; diff --git a/frontend/src/components/ToolPicker.tsx b/frontend/src/components/tools/ToolPicker.tsx similarity index 100% rename from frontend/src/components/ToolPicker.tsx rename to frontend/src/components/tools/ToolPicker.tsx diff --git a/frontend/src/components/ToolRenderer.tsx b/frontend/src/components/tools/ToolRenderer.tsx similarity index 97% rename from frontend/src/components/ToolRenderer.tsx rename to frontend/src/components/tools/ToolRenderer.tsx index d17aa2cd5..5ce167864 100644 --- a/frontend/src/components/ToolRenderer.tsx +++ b/frontend/src/components/tools/ToolRenderer.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { FileWithUrl } from "../types/file"; +import { FileWithUrl } from "../../types/file"; interface ToolRendererProps { selectedToolKey: string; diff --git a/frontend/src/components/Viewer.tsx b/frontend/src/components/viewer/Viewer.tsx similarity index 99% rename from frontend/src/components/Viewer.tsx rename to frontend/src/components/viewer/Viewer.tsx index 8f14f5814..aa10e160a 100644 --- a/frontend/src/components/Viewer.tsx +++ b/frontend/src/components/viewer/Viewer.tsx @@ -10,7 +10,7 @@ import ViewSidebarIcon from "@mui/icons-material/ViewSidebar"; import ViewWeekIcon from "@mui/icons-material/ViewWeek"; // for dual page (book) import DescriptionIcon from "@mui/icons-material/Description"; // for single page import { useLocalStorage } from "@mantine/hooks"; -import { fileStorage } from "../services/fileStorage"; +import { fileStorage } from "../../services/fileStorage"; GlobalWorkerOptions.workerSrc = "/pdf.worker.js"; diff --git a/frontend/src/pages/HomePage.tsx b/frontend/src/pages/HomePage.tsx index 54d6fb35e..605b7a68a 100644 --- a/frontend/src/pages/HomePage.tsx +++ b/frontend/src/pages/HomePage.tsx @@ -6,20 +6,20 @@ import AddToPhotosIcon from "@mui/icons-material/AddToPhotos"; import ContentCutIcon from "@mui/icons-material/ContentCut"; import ZoomInMapIcon from "@mui/icons-material/ZoomInMap"; import { Group, Paper, Box, Button, useMantineTheme } from "@mantine/core"; -import { useRainbowThemeContext } from "../components/RainbowThemeProvider"; +import { useRainbowThemeContext } from "../components/shared/RainbowThemeProvider"; import rainbowStyles from '../styles/rainbow.module.css'; -import ToolPicker from "../components/ToolPicker"; -import FileManager from "../components/FileManager"; +import ToolPicker from "../components/tools/ToolPicker"; +import FileManager from "../components/fileManagement/FileManager"; import SplitPdfPanel from "../tools/Split"; import CompressPdfPanel from "../tools/Compress"; import MergePdfPanel from "../tools/Merge"; -import PageEditor from "../components/PageEditor"; -import PageEditorControls from "../components/PageEditorControls"; -import Viewer from "../components/Viewer"; -import TopControls from "../components/TopControls"; -import ToolRenderer from "../components/ToolRenderer"; -import QuickAccessBar from "../components/QuickAccessBar"; +import PageEditor from "../components/editor/PageEditor"; +import PageEditorControls from "../components/editor/PageEditorControls"; +import Viewer from "../components/viewer/Viewer"; +import TopControls from "../components/shared/TopControls"; +import ToolRenderer from "../components/tools/ToolRenderer"; +import QuickAccessBar from "../components/shared/QuickAccessBar"; type ToolRegistryEntry = { icon: React.ReactNode;