mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-08-06 13:48:58 +02:00
Big refactor
This commit is contained in:
parent
868969192b
commit
9c410865f9
@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { RainbowThemeProvider } from './components/RainbowThemeProvider';
|
import { RainbowThemeProvider } from './components/shared/RainbowThemeProvider';
|
||||||
import HomePage from './pages/HomePage';
|
import HomePage from './pages/HomePage';
|
||||||
|
|
||||||
// Import global styles
|
// Import global styles
|
||||||
|
@ -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 (
|
|
||||||
<Stack>
|
|
||||||
<Text fw={500}>Common PDF Operations</Text>
|
|
||||||
{commonLinks.map((link, index) => (
|
|
||||||
<Group key={index}>
|
|
||||||
<Button
|
|
||||||
component={Link}
|
|
||||||
to={link.url}
|
|
||||||
variant="subtle"
|
|
||||||
size="sm"
|
|
||||||
>
|
|
||||||
{link.name}
|
|
||||||
</Button>
|
|
||||||
<Text size="sm" color="dimmed">{link.description}</Text>
|
|
||||||
</Group>
|
|
||||||
))}
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default DeepLinks;
|
|
@ -23,19 +23,19 @@ import SelectAllIcon from "@mui/icons-material/SelectAll";
|
|||||||
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
||||||
import ArrowForwardIcon from "@mui/icons-material/ArrowForward";
|
import ArrowForwardIcon from "@mui/icons-material/ArrowForward";
|
||||||
import CloseIcon from "@mui/icons-material/Close";
|
import CloseIcon from "@mui/icons-material/Close";
|
||||||
import { usePDFProcessor } from "../hooks/usePDFProcessor";
|
import { usePDFProcessor } from "../../hooks/usePDFProcessor";
|
||||||
import { PDFDocument, PDFPage } from "../types/pageEditor";
|
import { PDFDocument, PDFPage } from "../../types/pageEditor";
|
||||||
import { fileStorage } from "../services/fileStorage";
|
import { fileStorage } from "../../services/fileStorage";
|
||||||
import { generateThumbnailForFile } from "../utils/thumbnailUtils";
|
import { generateThumbnailForFile } from "../../utils/thumbnailUtils";
|
||||||
import { useUndoRedo } from "../hooks/useUndoRedo";
|
import { useUndoRedo } from "../../hooks/useUndoRedo";
|
||||||
import {
|
import {
|
||||||
RotatePagesCommand,
|
RotatePagesCommand,
|
||||||
DeletePagesCommand,
|
DeletePagesCommand,
|
||||||
ReorderPageCommand,
|
ReorderPageCommand,
|
||||||
MovePagesCommand,
|
MovePagesCommand,
|
||||||
ToggleSplitCommand
|
ToggleSplitCommand
|
||||||
} from "../commands/pageCommands";
|
} from "../../commands/pageCommands";
|
||||||
import { pdfExportService } from "../services/pdfExportService";
|
import { pdfExportService } from "../../services/pdfExportService";
|
||||||
|
|
||||||
export interface PageEditorProps {
|
export interface PageEditorProps {
|
||||||
file: { file: File; url: string } | null;
|
file: { file: File; url: string } | null;
|
@ -4,9 +4,9 @@ import { useTranslation } from "react-i18next";
|
|||||||
import PictureAsPdfIcon from "@mui/icons-material/PictureAsPdf";
|
import PictureAsPdfIcon from "@mui/icons-material/PictureAsPdf";
|
||||||
import StorageIcon from "@mui/icons-material/Storage";
|
import StorageIcon from "@mui/icons-material/Storage";
|
||||||
|
|
||||||
import { FileWithUrl } from "../types/file";
|
import { FileWithUrl } from "../../types/file";
|
||||||
import { getFileSize, getFileDate } from "../utils/fileUtils";
|
import { getFileSize, getFileDate } from "../../utils/fileUtils";
|
||||||
import { useIndexedDBThumbnail } from "../hooks/useIndexedDBThumbnail";
|
import { useIndexedDBThumbnail } from "../../hooks/useIndexedDBThumbnail";
|
||||||
|
|
||||||
interface FileCardProps {
|
interface FileCardProps {
|
||||||
file: FileWithUrl;
|
file: FileWithUrl;
|
@ -4,14 +4,14 @@ import { Dropzone, MIME_TYPES } from "@mantine/dropzone";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
import { GlobalWorkerOptions } from "pdfjs-dist";
|
import { GlobalWorkerOptions } from "pdfjs-dist";
|
||||||
import { StorageStats } from "../services/fileStorage";
|
import { StorageStats } from "../../services/fileStorage";
|
||||||
import { FileWithUrl, defaultStorageConfig } from "../types/file";
|
import { FileWithUrl, defaultStorageConfig } from "../../types/file";
|
||||||
|
|
||||||
// Refactored imports
|
// Refactored imports
|
||||||
import { fileOperationsService } from "../services/fileOperationsService";
|
import { fileOperationsService } from "../../services/fileOperationsService";
|
||||||
import { checkStorageWarnings } from "../utils/storageUtils";
|
import { checkStorageWarnings } from "../../utils/storageUtils";
|
||||||
import StorageStatsCard from "./StorageStatsCard";
|
import StorageStatsCard from "./StorageStatsCard";
|
||||||
import FileCard from "./FileCard.standalone";
|
import FileCard from "./FileCard";
|
||||||
|
|
||||||
GlobalWorkerOptions.workerSrc = "/pdf.worker.js";
|
GlobalWorkerOptions.workerSrc = "/pdf.worker.js";
|
||||||
|
|
@ -3,9 +3,9 @@ import { Card, Group, Text, Button, Progress } from "@mantine/core";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import StorageIcon from "@mui/icons-material/Storage";
|
import StorageIcon from "@mui/icons-material/Storage";
|
||||||
import DeleteIcon from "@mui/icons-material/Delete";
|
import DeleteIcon from "@mui/icons-material/Delete";
|
||||||
import { StorageStats } from "../services/fileStorage";
|
import { StorageStats } from "../../services/fileStorage";
|
||||||
import { formatFileSize } from "../utils/fileUtils";
|
import { formatFileSize } from "../../utils/fileUtils";
|
||||||
import { getStorageUsagePercent } from "../utils/storageUtils";
|
import { getStorageUsagePercent } from "../../utils/storageUtils";
|
||||||
|
|
||||||
interface StorageStatsCardProps {
|
interface StorageStatsCardProps {
|
||||||
storageStats: StorageStats | null;
|
storageStats: StorageStats | null;
|
@ -1,7 +1,7 @@
|
|||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { Menu, Button, ScrollArea, useMantineTheme, useMantineColorScheme } from '@mantine/core';
|
import { Menu, Button, ScrollArea, useMantineTheme, useMantineColorScheme } from '@mantine/core';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { supportedLanguages } from '../i18n';
|
import { supportedLanguages } from '../../i18n';
|
||||||
import LanguageIcon from '@mui/icons-material/Language';
|
import LanguageIcon from '@mui/icons-material/Language';
|
||||||
import styles from './LanguageSelector.module.css';
|
import styles from './LanguageSelector.module.css';
|
||||||
|
|
@ -6,7 +6,7 @@ import ZoomInMapIcon from "@mui/icons-material/ZoomInMap";
|
|||||||
import MenuBookIcon from "@mui/icons-material/MenuBook";
|
import MenuBookIcon from "@mui/icons-material/MenuBook";
|
||||||
import AppsIcon from "@mui/icons-material/Apps";
|
import AppsIcon from "@mui/icons-material/Apps";
|
||||||
import { useRainbowThemeContext } from "./RainbowThemeProvider";
|
import { useRainbowThemeContext } from "./RainbowThemeProvider";
|
||||||
import rainbowStyles from '../styles/rainbow.module.css';
|
import rainbowStyles from '../../styles/rainbow.module.css';
|
||||||
|
|
||||||
interface QuickAccessBarProps {
|
interface QuickAccessBarProps {
|
||||||
onToolsClick: () => void;
|
onToolsClick: () => void;
|
@ -1,8 +1,8 @@
|
|||||||
import React, { createContext, useContext, ReactNode } from 'react';
|
import React, { createContext, useContext, ReactNode } from 'react';
|
||||||
import { MantineProvider, ColorSchemeScript } from '@mantine/core';
|
import { MantineProvider, ColorSchemeScript } from '@mantine/core';
|
||||||
import { useRainbowTheme } from '../hooks/useRainbowTheme';
|
import { useRainbowTheme } from '../../hooks/useRainbowTheme';
|
||||||
import { mantineTheme } from '../theme/mantineTheme';
|
import { mantineTheme } from '../../theme/mantineTheme';
|
||||||
import rainbowStyles from '../styles/rainbow.module.css';
|
import rainbowStyles from '../../styles/rainbow.module.css';
|
||||||
|
|
||||||
interface RainbowThemeContextType {
|
interface RainbowThemeContextType {
|
||||||
themeMode: 'light' | 'dark' | 'rainbow';
|
themeMode: 'light' | 'dark' | 'rainbow';
|
@ -2,7 +2,7 @@ import React from "react";
|
|||||||
import { Button, SegmentedControl } from "@mantine/core";
|
import { Button, SegmentedControl } from "@mantine/core";
|
||||||
import { useRainbowThemeContext } from "./RainbowThemeProvider";
|
import { useRainbowThemeContext } from "./RainbowThemeProvider";
|
||||||
import LanguageSelector from "./LanguageSelector";
|
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 DarkModeIcon from '@mui/icons-material/DarkMode';
|
||||||
import LightModeIcon from '@mui/icons-material/LightMode';
|
import LightModeIcon from '@mui/icons-material/LightMode';
|
||||||
import AutoAwesomeIcon from '@mui/icons-material/AutoAwesome';
|
import AutoAwesomeIcon from '@mui/icons-material/AutoAwesome';
|
@ -1,5 +1,5 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { FileWithUrl } from "../types/file";
|
import { FileWithUrl } from "../../types/file";
|
||||||
|
|
||||||
interface ToolRendererProps {
|
interface ToolRendererProps {
|
||||||
selectedToolKey: string;
|
selectedToolKey: string;
|
@ -10,7 +10,7 @@ import ViewSidebarIcon from "@mui/icons-material/ViewSidebar";
|
|||||||
import ViewWeekIcon from "@mui/icons-material/ViewWeek"; // for dual page (book)
|
import ViewWeekIcon from "@mui/icons-material/ViewWeek"; // for dual page (book)
|
||||||
import DescriptionIcon from "@mui/icons-material/Description"; // for single page
|
import DescriptionIcon from "@mui/icons-material/Description"; // for single page
|
||||||
import { useLocalStorage } from "@mantine/hooks";
|
import { useLocalStorage } from "@mantine/hooks";
|
||||||
import { fileStorage } from "../services/fileStorage";
|
import { fileStorage } from "../../services/fileStorage";
|
||||||
|
|
||||||
GlobalWorkerOptions.workerSrc = "/pdf.worker.js";
|
GlobalWorkerOptions.workerSrc = "/pdf.worker.js";
|
||||||
|
|
@ -6,20 +6,20 @@ import AddToPhotosIcon from "@mui/icons-material/AddToPhotos";
|
|||||||
import ContentCutIcon from "@mui/icons-material/ContentCut";
|
import ContentCutIcon from "@mui/icons-material/ContentCut";
|
||||||
import ZoomInMapIcon from "@mui/icons-material/ZoomInMap";
|
import ZoomInMapIcon from "@mui/icons-material/ZoomInMap";
|
||||||
import { Group, Paper, Box, Button, useMantineTheme } from "@mantine/core";
|
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 rainbowStyles from '../styles/rainbow.module.css';
|
||||||
|
|
||||||
import ToolPicker from "../components/ToolPicker";
|
import ToolPicker from "../components/tools/ToolPicker";
|
||||||
import FileManager from "../components/FileManager";
|
import FileManager from "../components/fileManagement/FileManager";
|
||||||
import SplitPdfPanel from "../tools/Split";
|
import SplitPdfPanel from "../tools/Split";
|
||||||
import CompressPdfPanel from "../tools/Compress";
|
import CompressPdfPanel from "../tools/Compress";
|
||||||
import MergePdfPanel from "../tools/Merge";
|
import MergePdfPanel from "../tools/Merge";
|
||||||
import PageEditor from "../components/PageEditor";
|
import PageEditor from "../components/editor/PageEditor";
|
||||||
import PageEditorControls from "../components/PageEditorControls";
|
import PageEditorControls from "../components/editor/PageEditorControls";
|
||||||
import Viewer from "../components/Viewer";
|
import Viewer from "../components/viewer/Viewer";
|
||||||
import TopControls from "../components/TopControls";
|
import TopControls from "../components/shared/TopControls";
|
||||||
import ToolRenderer from "../components/ToolRenderer";
|
import ToolRenderer from "../components/tools/ToolRenderer";
|
||||||
import QuickAccessBar from "../components/QuickAccessBar";
|
import QuickAccessBar from "../components/shared/QuickAccessBar";
|
||||||
|
|
||||||
type ToolRegistryEntry = {
|
type ToolRegistryEntry = {
|
||||||
icon: React.ReactNode;
|
icon: React.ReactNode;
|
||||||
|
Loading…
Reference in New Issue
Block a user