diff --git a/frontend/src/components/annotation/shared/BaseAnnotationTool.tsx b/frontend/src/components/annotation/shared/BaseAnnotationTool.tsx index 6e203413c..cf30f2e7e 100644 --- a/frontend/src/components/annotation/shared/BaseAnnotationTool.tsx +++ b/frontend/src/components/annotation/shared/BaseAnnotationTool.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { Stack, Tabs, Alert, Text } from '@mantine/core'; +import { Stack, Alert, Text } from '@mantine/core'; import { useTranslation } from 'react-i18next'; import { DrawingControls } from './DrawingControls'; import { ColorPicker } from './ColorPicker'; @@ -29,10 +29,8 @@ export const BaseAnnotationTool: React.FC = ({ const { t } = useTranslation(); const { activateSignaturePlacementMode, - deactivateDrawMode, undo, - redo, - isPlacementMode + redo } = usePDFAnnotation(); const [selectedColor, setSelectedColor] = useState('#000000'); diff --git a/frontend/src/components/annotation/shared/DrawingCanvas.tsx b/frontend/src/components/annotation/shared/DrawingCanvas.tsx index 35b8eb70c..e67c73e04 100644 --- a/frontend/src/components/annotation/shared/DrawingCanvas.tsx +++ b/frontend/src/components/annotation/shared/DrawingCanvas.tsx @@ -41,7 +41,7 @@ export const DrawingCanvas: React.FC = ({ const [isDrawing, setIsDrawing] = useState(false); const [isModalDrawing, setIsModalDrawing] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false); - const [signatureData, setSignatureData] = useState(null); + const [, setSignatureData] = useState(null); // Drawing functions for main canvas const startDrawing = useCallback((e: React.MouseEvent) => { diff --git a/frontend/src/components/annotation/tools/DrawingTool.tsx b/frontend/src/components/annotation/tools/DrawingTool.tsx index 159e24716..80b950a33 100644 --- a/frontend/src/components/annotation/tools/DrawingTool.tsx +++ b/frontend/src/components/annotation/tools/DrawingTool.tsx @@ -1,9 +1,7 @@ import React, { useState } from 'react'; -import { Stack, Paper, Text, Group } from '@mantine/core'; +import { Stack } from '@mantine/core'; import { BaseAnnotationTool } from '../shared/BaseAnnotationTool'; import { DrawingCanvas } from '../shared/DrawingCanvas'; -import { ColorSwatchButton } from '../shared/ColorPicker'; -import PenSizeSelector from '../../tools/sign/PenSizeSelector'; interface DrawingToolProps { onDrawingChange?: (data: string | null) => void; @@ -14,7 +12,7 @@ export const DrawingTool: React.FC = ({ onDrawingChange, disabled = false }) => { - const [selectedColor, setSelectedColor] = useState('#000000'); + const [selectedColor] = useState('#000000'); const [penSize, setPenSize] = useState(2); const [penSizeInput, setPenSizeInput] = useState('2'); diff --git a/frontend/src/components/annotation/tools/ImageTool.tsx b/frontend/src/components/annotation/tools/ImageTool.tsx index 6bef672a9..744882b43 100644 --- a/frontend/src/components/annotation/tools/ImageTool.tsx +++ b/frontend/src/components/annotation/tools/ImageTool.tsx @@ -12,7 +12,7 @@ export const ImageTool: React.FC = ({ onImageChange, disabled = false }) => { - const [imageData, setImageData] = useState(null); + const [, setImageData] = useState(null); const handleImageUpload = async (file: File | null) => { if (file && !disabled) { diff --git a/frontend/src/components/shared/RightRail.tsx b/frontend/src/components/shared/RightRail.tsx index 41f289106..9a485ccf5 100644 --- a/frontend/src/components/shared/RightRail.tsx +++ b/frontend/src/components/shared/RightRail.tsx @@ -17,11 +17,6 @@ import { ViewerContext } from '../../contexts/ViewerContext'; import { useSignature } from '../../contexts/SignatureContext'; import { parseSelection } from '../../utils/bulkselection/parseSelection'; -import { flattenSignatures } from '../../utils/signatureFlattening'; -import { PDFDocument, rgb } from 'pdf-lib'; -import { generateThumbnailWithMetadata } from '../../utils/thumbnailUtils'; -import { createProcessedFile } from '../../contexts/file/fileActions'; -import { createNewStirlingFileStub, createStirlingFile } from '../../types/fileContext'; export default function RightRail() { diff --git a/frontend/src/components/tools/sign/SignSettings.tsx b/frontend/src/components/tools/sign/SignSettings.tsx index 1085075a6..3b6c71d46 100644 --- a/frontend/src/components/tools/sign/SignSettings.tsx +++ b/frontend/src/components/tools/sign/SignSettings.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import { useTranslation } from "react-i18next"; -import { Stack, Button, Text, Alert, Tabs, Group, Paper } from '@mantine/core'; +import { Stack, Button, Text, Alert, Tabs } from '@mantine/core'; import { SignParameters } from "../../../hooks/tools/sign/useSignParameters"; import { SuggestedToolsSection } from "../shared/SuggestedToolsSection"; @@ -28,10 +28,8 @@ const SignSettings = ({ parameters, onParameterChange, disabled = false, - onActivateDrawMode, onActivateSignaturePlacement, onDeactivateSignature, - onUpdateDrawSettings, onUndo, onRedo, onSave diff --git a/frontend/src/components/viewer/EmbedPdfViewer.tsx b/frontend/src/components/viewer/EmbedPdfViewer.tsx index 027704701..986ac406f 100644 --- a/frontend/src/components/viewer/EmbedPdfViewer.tsx +++ b/frontend/src/components/viewer/EmbedPdfViewer.tsx @@ -189,7 +189,7 @@ const EmbedPdfViewerContent = ({ enableSignature={isSignatureMode} signatureApiRef={signatureApiRef as React.RefObject} historyApiRef={historyApiRef as React.RefObject} - onSignatureAdded={(annotation) => { + onSignatureAdded={() => { // Handle signature added - for debugging, enable console logs as needed // Future: Handle signature completion }} diff --git a/frontend/src/components/viewer/HistoryAPIBridge.tsx b/frontend/src/components/viewer/HistoryAPIBridge.tsx index b73706232..2aed098f5 100644 --- a/frontend/src/components/viewer/HistoryAPIBridge.tsx +++ b/frontend/src/components/viewer/HistoryAPIBridge.tsx @@ -1,4 +1,4 @@ -import React, { useImperativeHandle, forwardRef, useEffect } from 'react'; +import { useImperativeHandle, forwardRef, useEffect } from 'react'; import { useHistoryCapability } from '@embedpdf/plugin-history/react'; import { useAnnotationCapability } from '@embedpdf/plugin-annotation/react'; import { useSignature } from '../../contexts/SignatureContext'; @@ -11,9 +11,10 @@ export interface HistoryAPI { canRedo: () => boolean; } +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface HistoryAPIBridgeProps {} -export const HistoryAPIBridge = forwardRef((props, ref) => { +export const HistoryAPIBridge = forwardRef(function HistoryAPIBridge(_props, ref) { const { provides: historyApi } = useHistoryCapability(); const { provides: annotationApi } = useAnnotationCapability(); const { getImageData, storeImageData } = useSignature(); @@ -38,7 +39,7 @@ export const HistoryAPIBridge = forwardRef((p if (event.type === 'create' && event.committed) { // Check if this is a STAMP annotation (signature) that might need image data restoration if (annotation && annotation.type === 13 && annotation.id) { - const storedImageData = getImageData(annotation.id); + getImageData(annotation.id); // Delay the check to allow the annotation to be fully created setTimeout(() => { diff --git a/frontend/src/components/viewer/LocalEmbedPDF.tsx b/frontend/src/components/viewer/LocalEmbedPDF.tsx index 5300724d1..2985bae84 100644 --- a/frontend/src/components/viewer/LocalEmbedPDF.tsx +++ b/frontend/src/components/viewer/LocalEmbedPDF.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState, useRef } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { createPluginRegistration } from '@embedpdf/core'; import { EmbedPDF } from '@embedpdf/core/react'; import { usePdfiumEngine } from '@embedpdf/engines/react'; @@ -22,7 +22,7 @@ import { Rotation } from '@embedpdf/models'; // Import annotation plugins import { HistoryPluginPackage } from '@embedpdf/plugin-history/react'; -import { AnnotationLayer, AnnotationPluginPackage, useAnnotationCapability } from '@embedpdf/plugin-annotation/react'; +import { AnnotationLayer, AnnotationPluginPackage } from '@embedpdf/plugin-annotation/react'; import { PdfAnnotationSubtype } from '@embedpdf/models'; import { CustomSearchLayer } from './CustomSearchLayer'; import { ZoomAPIBridge } from './ZoomAPIBridge'; @@ -50,7 +50,7 @@ interface LocalEmbedPDFProps { export function LocalEmbedPDF({ file, url, enableSignature = false, onSignatureAdded, signatureApiRef, historyApiRef }: LocalEmbedPDFProps) { const [pdfUrl, setPdfUrl] = useState(null); - const [annotations, setAnnotations] = useState>([]); + const [, setAnnotations] = useState>([]); // Convert File to URL if needed useEffect(() => { diff --git a/frontend/src/components/viewer/LocalEmbedPDFWithAnnotations.tsx b/frontend/src/components/viewer/LocalEmbedPDFWithAnnotations.tsx index ee3de7282..af60d8fa8 100644 --- a/frontend/src/components/viewer/LocalEmbedPDFWithAnnotations.tsx +++ b/frontend/src/components/viewer/LocalEmbedPDFWithAnnotations.tsx @@ -21,7 +21,7 @@ import { Rotation } from '@embedpdf/models'; // Import annotation plugins import { HistoryPluginPackage } from '@embedpdf/plugin-history/react'; -import { AnnotationLayer, AnnotationPluginPackage, useAnnotationCapability } from '@embedpdf/plugin-annotation/react'; +import { AnnotationLayer, AnnotationPluginPackage } from '@embedpdf/plugin-annotation/react'; import { PdfAnnotationSubtype } from '@embedpdf/models'; import { CustomSearchLayer } from './CustomSearchLayer'; diff --git a/frontend/src/components/viewer/SignatureAPIBridge.tsx b/frontend/src/components/viewer/SignatureAPIBridge.tsx index 60884d09f..07dd974fe 100644 --- a/frontend/src/components/viewer/SignatureAPIBridge.tsx +++ b/frontend/src/components/viewer/SignatureAPIBridge.tsx @@ -1,4 +1,4 @@ -import React, { useImperativeHandle, forwardRef, useEffect } from 'react'; +import { useImperativeHandle, forwardRef, useEffect } from 'react'; import { useAnnotationCapability } from '@embedpdf/plugin-annotation/react'; import { PdfAnnotationSubtype, PdfStandardFont, PdfTextAlignment, PdfVerticalAlignment, uuidV4 } from '@embedpdf/models'; import { SignParameters } from '../../hooks/tools/sign/useSignParameters'; @@ -17,9 +17,10 @@ export interface SignatureAPI { getPageAnnotations: (pageIndex: number) => Promise; } +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface SignatureAPIBridgeProps {} -export const SignatureAPIBridge = forwardRef((props, ref) => { +export const SignatureAPIBridge = forwardRef((_props, ref) => { const { provides: annotationApi } = useAnnotationCapability(); const { signatureConfig, storeImageData } = useSignature(); diff --git a/frontend/src/contexts/SignatureContext.tsx b/frontend/src/contexts/SignatureContext.tsx index b047d3bb4..839e8a9df 100644 --- a/frontend/src/contexts/SignatureContext.tsx +++ b/frontend/src/contexts/SignatureContext.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useContext, useState, ReactNode, useCallback, useRef, useEffect } from 'react'; +import React, { createContext, useContext, useState, ReactNode, useCallback, useRef } from 'react'; import { SignParameters } from '../hooks/tools/sign/useSignParameters'; import { SignatureAPI } from '../components/viewer/SignatureAPIBridge'; import { HistoryAPI } from '../components/viewer/HistoryAPIBridge'; diff --git a/frontend/src/contexts/ViewerContext.tsx b/frontend/src/contexts/ViewerContext.tsx index 648b16d44..11df4b027 100644 --- a/frontend/src/contexts/ViewerContext.tsx +++ b/frontend/src/contexts/ViewerContext.tsx @@ -210,7 +210,7 @@ export const ViewerProvider: React.FC = ({ children }) => { const [isThumbnailSidebarVisible, setIsThumbnailSidebarVisible] = useState(false); // Get current navigation state to check if we're in sign mode - const { workbench } = useNavigation(); + useNavigation(); // Bridge registry - bridges register their state and APIs here const bridgeRefs = useRef({ diff --git a/frontend/src/tools/Sign.tsx b/frontend/src/tools/Sign.tsx index cd9b4b44f..a767eddbf 100644 --- a/frontend/src/tools/Sign.tsx +++ b/frontend/src/tools/Sign.tsx @@ -8,19 +8,14 @@ import { BaseToolProps, ToolComponent } from "../types/tool"; import SignSettings from "../components/tools/sign/SignSettings"; import { useNavigation } from "../contexts/NavigationContext"; import { useSignature } from "../contexts/SignatureContext"; -import { useFileActions, useFileContext } from "../contexts/FileContext"; +import { useFileContext } from "../contexts/FileContext"; import { useViewer } from "../contexts/ViewerContext"; -import { generateThumbnailWithMetadata } from "../utils/thumbnailUtils"; -import { createNewStirlingFileStub, createStirlingFile, StirlingFileStub, StirlingFile, FileId, extractFiles } from "../types/fileContext"; -import { createProcessedFile } from "../contexts/file/fileActions"; -import { PDFDocument, PDFName, PDFDict, PDFArray, rgb } from 'pdf-lib'; import { flattenSignatures } from "../utils/signatureFlattening"; const Sign = (props: BaseToolProps) => { const { t } = useTranslation(); const { setWorkbench } = useNavigation(); - const { setSignatureConfig, activateDrawMode, activateSignaturePlacementMode, deactivateDrawMode, updateDrawSettings, undo, redo, isPlacementMode, signatureApiRef, getImageData, setSignaturesApplied } = useSignature(); - const { actions } = useFileActions(); + const { setSignatureConfig, activateDrawMode, activateSignaturePlacementMode, deactivateDrawMode, updateDrawSettings, undo, redo, signatureApiRef, getImageData, setSignaturesApplied } = useSignature(); const { consumeFiles, selectors } = useFileContext(); const { exportActions } = useViewer(); diff --git a/frontend/src/utils/signatureFlattening.ts b/frontend/src/utils/signatureFlattening.ts index 5943046e0..8de13cd88 100644 --- a/frontend/src/utils/signatureFlattening.ts +++ b/frontend/src/utils/signatureFlattening.ts @@ -55,7 +55,7 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr console.log(`Found ${sessionAnnotations.length} session annotations on page ${pageIndex + 1} (out of ${pageAnnotations.length} total)`); } } - } catch (e) { + } catch { if (pageIndex > 2) break; // Stop after checking first few pages } } @@ -93,7 +93,7 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr console.log('Attempting to load PDF with PDF-lib...'); // Convert ArrayBuffer to File - let blob = new Blob([pdfArrayBuffer], { type: 'application/pdf' }); + const blob = new Blob([pdfArrayBuffer], { type: 'application/pdf' }); // Get the current file - try from originalFile first, then from all files let currentFile = originalFile; @@ -130,7 +130,7 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr throwOnInvalidObject: false }); console.log('✓ PDF loaded successfully with standard options'); - } catch (loadError) { + } catch { console.warn('Failed to load with standard options, trying createProxy...'); try { // Create a fresh PDF and copy pages instead of modifying