diff --git a/frontend/src/components/viewer/SignatureAPIBridge.tsx b/frontend/src/components/viewer/SignatureAPIBridge.tsx index 70e5ac684..3e01f30b7 100644 --- a/frontend/src/components/viewer/SignatureAPIBridge.tsx +++ b/frontend/src/components/viewer/SignatureAPIBridge.tsx @@ -1,19 +1,16 @@ 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'; +import { PdfAnnotationSubtype, uuidV4 } from '@embedpdf/models'; import { useSignature } from '../../contexts/SignatureContext'; export interface SignatureAPI { addImageSignature: (signatureData: string, x: number, y: number, width: number, height: number, pageIndex: number) => void; - addTextSignature: (text: string, x: number, y: number, pageIndex: number) => void; activateDrawMode: () => void; activateSignaturePlacementMode: () => void; activateDeleteMode: () => void; deleteAnnotation: (annotationId: string, pageIndex: number) => void; updateDrawSettings: (color: string, size: number) => void; deactivateTools: () => void; - applySignatureFromParameters: (params: SignParameters) => void; getPageAnnotations: (pageIndex: number) => Promise; } @@ -99,38 +96,6 @@ export const SignatureAPIBridge = forwardRef(function SignatureAPI }); }, - addTextSignature: (text: string, x: number, y: number, pageIndex: number) => { - if (!annotationApi) return; - - const textColor = signatureConfig?.textColor || '#000000'; - const fontSize = signatureConfig?.fontSize || 16; - const fontFamily = signatureConfig?.fontFamily || 'Helvetica'; - - // Create text annotation for signature - annotationApi.createAnnotation(pageIndex, { - type: PdfAnnotationSubtype.FREETEXT, - rect: { - origin: { x, y }, - size: { width: 200, height: 50 } - }, - contents: text, - author: 'Digital Signature', - fontSize: fontSize, - fontColor: textColor, - fontFamily: PdfStandardFont.Helvetica, - textAlign: PdfTextAlignment.Left, - verticalAlign: PdfVerticalAlignment.Top, - opacity: 1, - pageIndex: pageIndex, - id: uuidV4(), - created: new Date(), - customData: { - signatureText: text, - signatureType: 'text' - } - }); - }, - activateDrawMode: () => { if (!annotationApi) return; @@ -257,87 +222,6 @@ export const SignatureAPIBridge = forwardRef(function SignatureAPI annotationApi.setActiveTool(null); }, - applySignatureFromParameters: (params: SignParameters) => { - if (!annotationApi || !params.signaturePosition) return; - - const { x, y, width, height, page } = params.signaturePosition; - - switch (params.signatureType) { - case 'image': - if (params.signatureData) { - const annotationId = uuidV4(); - - // Store image data in our persistent store - storeImageData(annotationId, params.signatureData); - - annotationApi.createAnnotation(page, { - type: PdfAnnotationSubtype.STAMP, - rect: { - origin: { x, y }, - size: { width, height } - }, - author: 'Digital Signature', - subject: `Digital Signature - ${params.reason || 'Document signing'}`, - pageIndex: page, - id: annotationId, - created: new Date(), - // Store image data in multiple places to ensure history captures it - imageSrc: params.signatureData, - contents: params.signatureData, // Some annotation systems use contents - data: params.signatureData, // Try data field - imageData: params.signatureData, // Try imageData field - appearance: params.signatureData // Try appearance field - }); - - // Switch to select mode after placing signature so it can be easily deleted - setTimeout(() => { - annotationApi.setActiveTool('select'); - }, 100); - } - break; - - case 'text': - if (params.signerName) { - const textColor = params.textColor || '#000000'; - const fontSize = params.fontSize || 16; - - annotationApi.createAnnotation(page, { - type: PdfAnnotationSubtype.FREETEXT, - rect: { - origin: { x, y }, - size: { width, height } - }, - contents: params.signerName, - author: 'Digital Signature', - fontSize: fontSize, - fontColor: textColor, - fontFamily: PdfStandardFont.Helvetica, - textAlign: PdfTextAlignment.Left, - verticalAlign: PdfVerticalAlignment.Top, - opacity: 1, - pageIndex: page, - id: uuidV4(), - created: new Date(), - customData: { - signatureText: params.signerName, - signatureType: 'text' - } - }); - - // Switch to select mode after placing signature so it can be easily deleted - setTimeout(() => { - annotationApi.setActiveTool('select'); - }, 100); - } - break; - - case 'draw': - // For draw mode, we activate the tool and let user draw - annotationApi.setActiveTool('ink'); - break; - } - }, - getPageAnnotations: async (pageIndex: number): Promise => { if (!annotationApi || !annotationApi.getPageAnnotations) { console.warn('getPageAnnotations not available'); diff --git a/frontend/src/tools/Sign.tsx b/frontend/src/tools/Sign.tsx index 7ab57b906..f76621895 100644 --- a/frontend/src/tools/Sign.tsx +++ b/frontend/src/tools/Sign.tsx @@ -15,7 +15,7 @@ import { flattenSignatures } from "../utils/signatureFlattening"; const Sign = (props: BaseToolProps) => { const { t } = useTranslation(); const { setWorkbench } = useNavigation(); - const { setSignatureConfig, activateDrawMode, activateSignaturePlacementMode, deactivateDrawMode, updateDrawSettings, undo, redo, signatureApiRef, getImageData, setSignaturesApplied, historyApiRef } = useSignature(); + const { setSignatureConfig, activateDrawMode, activateSignaturePlacementMode, deactivateDrawMode, updateDrawSettings, undo, redo, signatureApiRef, getImageData, setSignaturesApplied } = useSignature(); const { consumeFiles, selectors } = useFileContext(); const { exportActions, getScrollState } = useViewer(); const { setHasUnsavedChanges, unregisterUnsavedChangesChecker } = useNavigation(); diff --git a/frontend/src/utils/signatureFlattening.ts b/frontend/src/utils/signatureFlattening.ts index 651765a81..1ff343155 100644 --- a/frontend/src/utils/signatureFlattening.ts +++ b/frontend/src/utils/signatureFlattening.ts @@ -1,7 +1,7 @@ import { PDFDocument, rgb } from 'pdf-lib'; import { generateThumbnailWithMetadata } from './thumbnailUtils'; import { createProcessedFile, createChildStub } from '../contexts/file/fileActions'; -import { createNewStirlingFileStub, createStirlingFile, StirlingFile, FileId, StirlingFileStub } from '../types/fileContext'; +import { createStirlingFile, StirlingFile, FileId, StirlingFileStub } from '../types/fileContext'; import type { SignatureAPI } from '../components/viewer/SignatureAPIBridge'; interface MinimalFileContextSelectors {