diff --git a/frontend/src/components/shared/ToolChain.tsx b/frontend/src/components/shared/ToolChain.tsx index b87b891a2..4d9a4bd51 100644 --- a/frontend/src/components/shared/ToolChain.tsx +++ b/frontend/src/components/shared/ToolChain.tsx @@ -32,7 +32,7 @@ const ToolChain: React.FC = ({ const getToolName = (toolId: ToolId) => { return t(`home.${toolId}.title`, toolId); - } + }; // Create full tool chain for tooltip const fullChainDisplay = displayStyle === 'badges' ? ( diff --git a/frontend/src/components/shared/TopControls.tsx b/frontend/src/components/shared/TopControls.tsx index 03eacc801..8edae6e72 100644 --- a/frontend/src/components/shared/TopControls.tsx +++ b/frontend/src/components/shared/TopControls.tsx @@ -15,7 +15,7 @@ const viewOptionStyle = { gap: 6, whiteSpace: 'nowrap', paddingTop: '0.3rem', -} +}; // Build view options showing text always diff --git a/frontend/src/components/shared/quickAccessBar/ActiveToolButton.tsx b/frontend/src/components/shared/quickAccessBar/ActiveToolButton.tsx index 5d58cf08c..9a08414b1 100644 --- a/frontend/src/components/shared/quickAccessBar/ActiveToolButton.tsx +++ b/frontend/src/components/shared/quickAccessBar/ActiveToolButton.tsx @@ -50,7 +50,7 @@ const ActiveToolButton: React.FC = ({ setActiveButton }) const animTimeoutRef = useRef(null); const replayRafRef = useRef(null); - const isSwitchingToNewTool = () => { return prevKeyRef.current && prevKeyRef.current !== selectedToolKey }; + const isSwitchingToNewTool = () => { return prevKeyRef.current && prevKeyRef.current !== selectedToolKey; }; const clearTimers = () => { if (collapseTimeoutRef.current) { @@ -81,7 +81,7 @@ const ActiveToolButton: React.FC = ({ setActiveButton }) setReplayAnim(false); animTimeoutRef.current = null; }, 500); - } + }; const firstShow = () => { clearTimers(); @@ -91,7 +91,7 @@ const ActiveToolButton: React.FC = ({ setActiveButton }) animTimeoutRef.current = window.setTimeout(() => { animTimeoutRef.current = null; }, 500); - } + }; const triggerCollapse = () => { clearTimers(); @@ -101,7 +101,7 @@ const ActiveToolButton: React.FC = ({ setActiveButton }) prevKeyRef.current = null; collapseTimeoutRef.current = null; }, 500); // match CSS transition duration - } + }; useEffect(() => { if (indicatorShouldShow) { diff --git a/frontend/src/components/tools/ToolLoadingFallback.tsx b/frontend/src/components/tools/ToolLoadingFallback.tsx index 8e41db433..9a2a4de14 100644 --- a/frontend/src/components/tools/ToolLoadingFallback.tsx +++ b/frontend/src/components/tools/ToolLoadingFallback.tsx @@ -10,5 +10,5 @@ export default function ToolLoadingFallback({ toolName }: { toolName?: string }) - ) + ); } diff --git a/frontend/src/components/tools/shared/ErrorNotification.tsx b/frontend/src/components/tools/shared/ErrorNotification.tsx index a1740a1f6..5b51ab11e 100644 --- a/frontend/src/components/tools/shared/ErrorNotification.tsx +++ b/frontend/src/components/tools/shared/ErrorNotification.tsx @@ -30,6 +30,6 @@ const ErrorNotification = ({ {error} ); -} +}; export default ErrorNotification; diff --git a/frontend/src/components/tools/shared/OperationButton.tsx b/frontend/src/components/tools/shared/OperationButton.tsx index 4733942a8..ec4a81e34 100644 --- a/frontend/src/components/tools/shared/OperationButton.tsx +++ b/frontend/src/components/tools/shared/OperationButton.tsx @@ -52,6 +52,6 @@ const OperationButton = ({ } ); -} +}; export default OperationButton; diff --git a/frontend/src/components/tools/shared/ToolStep.tsx b/frontend/src/components/tools/shared/ToolStep.tsx index b2140eb3f..e20af455c 100644 --- a/frontend/src/components/tools/shared/ToolStep.tsx +++ b/frontend/src/components/tools/shared/ToolStep.tsx @@ -149,7 +149,7 @@ const ToolStep = ({ ); -} +}; // ToolStepFactory for creating numbered steps export function createToolSteps() { diff --git a/frontend/src/components/tools/split/SplitSettings.tsx b/frontend/src/components/tools/split/SplitSettings.tsx index dc7c02480..ca20c24cc 100644 --- a/frontend/src/components/tools/split/SplitSettings.tsx +++ b/frontend/src/components/tools/split/SplitSettings.tsx @@ -158,6 +158,6 @@ const SplitSettings = ({ {parameters.method === SPLIT_METHODS.BY_PAGE_DIVIDER && renderByPageDividerForm()} ); -} +}; export default SplitSettings; diff --git a/frontend/src/constants/splitConstants.ts b/frontend/src/constants/splitConstants.ts index 890f94b3c..9f849203e 100644 --- a/frontend/src/constants/splitConstants.ts +++ b/frontend/src/constants/splitConstants.ts @@ -22,7 +22,7 @@ export const ENDPOINTS = { export type SplitMethod = typeof SPLIT_METHODS[keyof typeof SPLIT_METHODS]; export const isSplitMethod = (value: string | null): value is SplitMethod => { return Object.values(SPLIT_METHODS).includes(value as SplitMethod); -} +}; import { CardOption } from '../components/shared/CardSelector'; diff --git a/frontend/src/contexts/FileContext.tsx b/frontend/src/contexts/FileContext.tsx index 921c88333..62f458eaf 100644 --- a/frontend/src/contexts/FileContext.tsx +++ b/frontend/src/contexts/FileContext.tsx @@ -76,7 +76,7 @@ function FileContextInner({ const currentSelection = stateRef.current.ui.selectedFileIds; const newFileIds = stirlingFiles.map(stirlingFile => stirlingFile.fileId); dispatch({ type: 'SET_SELECTED_FILES', payload: { fileIds: [...currentSelection, ...newFileIds] } }); - } + }; // File operations using unified addFiles helper with persistence const addRawFiles = useCallback(async (files: File[], options?: { insertAfterPageId?: string; selectFiles?: boolean }): Promise => { diff --git a/frontend/src/data/useTranslatedToolRegistry.tsx b/frontend/src/data/useTranslatedToolRegistry.tsx index 6d5810055..920c654ee 100644 --- a/frontend/src/data/useTranslatedToolRegistry.tsx +++ b/frontend/src/data/useTranslatedToolRegistry.tsx @@ -92,7 +92,7 @@ import SignSettings from "../components/tools/sign/SignSettings"; import CropSettings from "../components/tools/crop/CropSettings"; import RemoveAnnotations from "../tools/RemoveAnnotations"; import RemoveAnnotationsSettings from "../components/tools/removeAnnotations/RemoveAnnotationsSettings"; -import PageLayoutSettings from "../components/tools/pageLayout/PageLayoutSettings" +import PageLayoutSettings from "../components/tools/pageLayout/PageLayoutSettings"; import ExtractImages from "../tools/ExtractImages"; import ExtractImagesSettings from "../components/tools/extractImages/ExtractImagesSettings"; import ReplaceColorSettings from "../components/tools/replaceColor/ReplaceColorSettings"; diff --git a/frontend/src/services/zipFileService.ts b/frontend/src/services/zipFileService.ts index daca80e51..36321ffa0 100644 --- a/frontend/src/services/zipFileService.ts +++ b/frontend/src/services/zipFileService.ts @@ -11,7 +11,7 @@ interface CompressedObject { const getData = (zipEntry: JSZipObject): CompressedObject | undefined => { return (zipEntry as any)._data as CompressedObject; -} +}; export interface ZipExtractionResult { success: boolean; diff --git a/frontend/src/setupTests.ts b/frontend/src/setupTests.ts index b640be3b6..38456157a 100644 --- a/frontend/src/setupTests.ts +++ b/frontend/src/setupTests.ts @@ -1,5 +1,5 @@ -import '@testing-library/jest-dom' -import { vi } from 'vitest' +import '@testing-library/jest-dom'; +import { vi } from 'vitest'; // Mock i18next for tests vi.mock('react-i18next', () => ({ @@ -27,8 +27,8 @@ vi.mock('i18next-http-backend', () => ({ })); // Mock window.URL.createObjectURL and revokeObjectURL for tests -global.URL.createObjectURL = vi.fn(() => 'mocked-url') -global.URL.revokeObjectURL = vi.fn() +global.URL.createObjectURL = vi.fn(() => 'mocked-url'); +global.URL.revokeObjectURL = vi.fn(); // Mock File and Blob API methods that aren't available in jsdom if (!globalThis.File.prototype.arrayBuffer) { @@ -88,21 +88,21 @@ global.Worker = vi.fn().mockImplementation(() => ({ removeEventListener: vi.fn(), onmessage: null, onerror: null, -})) +})); // Mock ResizeObserver for Mantine components global.ResizeObserver = vi.fn().mockImplementation(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn(), -})) +})); // Mock IntersectionObserver for components that might use it global.IntersectionObserver = vi.fn().mockImplementation(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn(), -})) +})); // Mock matchMedia for responsive components Object.defineProperty(window, 'matchMedia', { @@ -117,7 +117,7 @@ Object.defineProperty(window, 'matchMedia', { removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), -}) +}); // Set global test timeout to prevent hangs -vi.setConfig({ testTimeout: 5000, hookTimeout: 5000 }) +vi.setConfig({ testTimeout: 5000, hookTimeout: 5000 }); diff --git a/frontend/src/tests/convert/ConvertIntegration.test.tsx b/frontend/src/tests/convert/ConvertIntegration.test.tsx index c2398dab7..a7a6cda06 100644 --- a/frontend/src/tests/convert/ConvertIntegration.test.tsx +++ b/frontend/src/tests/convert/ConvertIntegration.test.tsx @@ -452,7 +452,7 @@ describe('Convert Tool Integration Tests', () => { const files = [ createPDFFile(), createTestStirlingFile('test2.pdf', '%PDF-1.4...', 'application/pdf') - ] + ]; const parameters: ConvertParameters = { fromExtension: 'pdf', toExtension: 'png', diff --git a/frontend/src/utils/scarfTracking.ts b/frontend/src/utils/scarfTracking.ts index 1d88da97c..1c6688b00 100644 --- a/frontend/src/utils/scarfTracking.ts +++ b/frontend/src/utils/scarfTracking.ts @@ -17,7 +17,7 @@ export function firePixel(pathname: string): void { lastFiredTime = now; const url = 'https://static.scarf.sh/a.png?x-pxid=3c1d68de-8945-4e9f-873f-65320b6fabf7' - + '&path=' + encodeURIComponent(pathname) + + '&path=' + encodeURIComponent(pathname); const img = new Image(); img.referrerPolicy = "no-referrer-when-downgrade"; diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index 405c2bbc1..327bb64a0 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -63,11 +63,11 @@ module.exports = { background: 'rgb(var(--background) / )', border: 'rgb(var(--border) / )', }, - + // Z-index scale zIndex: { 'dropdown': '1000', - 'sticky': '1020', + 'sticky': '1020', 'fixed': '1030', 'modal-backdrop': '1040', 'modal': '1050', @@ -81,4 +81,4 @@ module.exports = { corePlugins: { preflight: true, }, -} \ No newline at end of file +}; diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts index c31c17675..dd393c6be 100644 --- a/frontend/vitest.config.ts +++ b/frontend/vitest.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vitest/config' +import { defineConfig } from 'vitest/config'; import react from '@vitejs/plugin-react-swc'; export default defineConfig({ @@ -37,4 +37,4 @@ export default defineConfig({ '@': '/src' } } -}) +}); diff --git a/frontend/vitest.minimal.config.ts b/frontend/vitest.minimal.config.ts index 335af4e9c..c6c9b5672 100644 --- a/frontend/vitest.minimal.config.ts +++ b/frontend/vitest.minimal.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vitest/config' +import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { @@ -6,4 +6,4 @@ export default defineConfig({ testTimeout: 5000, include: ['src/utils/convertUtils.test.ts'] }, -}) \ No newline at end of file +});