@arbidocs/blocks 0.4.166 → 0.4.167

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/{ConnectedNativeDocxComparison-MSX6OCMN.js → ConnectedNativeDocxComparison-B4OBRJ3O.js} +6 -6
  2. package/dist/{ConnectedNativeDocxComparison-MSX6OCMN.js.map → ConnectedNativeDocxComparison-B4OBRJ3O.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-S4XHG3XN.cjs → ConnectedNativeDocxComparison-HNLBNUI2.cjs} +7 -7
  4. package/dist/{ConnectedNativeDocxComparison-S4XHG3XN.cjs.map → ConnectedNativeDocxComparison-HNLBNUI2.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-4G7LNREO.cjs → ConnectedNativeDocxEditor-4GVGXSDX.cjs} +7 -7
  6. package/dist/{ConnectedNativeDocxEditor-4G7LNREO.cjs.map → ConnectedNativeDocxEditor-4GVGXSDX.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-CTWKXXQQ.js → ConnectedNativeDocxEditor-HC2QTTML.js} +5 -5
  8. package/dist/{ConnectedNativeDocxEditor-CTWKXXQQ.js.map → ConnectedNativeDocxEditor-HC2QTTML.js.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-HIILV2RB.js → ConnectedStreamedWordArtifact-CIBNQO54.js} +6 -6
  10. package/dist/{ConnectedStreamedWordArtifact-HIILV2RB.js.map → ConnectedStreamedWordArtifact-CIBNQO54.js.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-DQGOIULU.cjs → ConnectedStreamedWordArtifact-YEC4HS5C.cjs} +7 -7
  12. package/dist/ConnectedStreamedWordArtifact-YEC4HS5C.cjs.map +1 -0
  13. package/dist/{WorkspaceTableView-CJ3QPV2X.js → WorkspaceTableView-7FYS7LE7.js} +6 -6
  14. package/dist/{WorkspaceTableView-CJ3QPV2X.js.map → WorkspaceTableView-7FYS7LE7.js.map} +1 -1
  15. package/dist/{WorkspaceTableView-VEW6SMZ6.cjs → WorkspaceTableView-GZHE6S24.cjs} +8 -8
  16. package/dist/{WorkspaceTableView-VEW6SMZ6.cjs.map → WorkspaceTableView-GZHE6S24.cjs.map} +1 -1
  17. package/dist/agents/index.cjs +261 -261
  18. package/dist/agents/index.js +4 -4
  19. package/dist/{chunk-DIPB7UR2.js → chunk-3ZMCQJUK.js} +5 -5
  20. package/dist/{chunk-DIPB7UR2.js.map → chunk-3ZMCQJUK.js.map} +1 -1
  21. package/dist/{chunk-MXD2R4HR.js → chunk-4AZ4KKCI.js} +3 -3
  22. package/dist/{chunk-MXD2R4HR.js.map → chunk-4AZ4KKCI.js.map} +1 -1
  23. package/dist/{chunk-4MFSGPEH.js → chunk-4CF65G36.js} +3 -3
  24. package/dist/{chunk-4MFSGPEH.js.map → chunk-4CF65G36.js.map} +1 -1
  25. package/dist/{chunk-SG3OH7ZM.cjs → chunk-FQPGVDYC.cjs} +4 -4
  26. package/dist/{chunk-SG3OH7ZM.cjs.map → chunk-FQPGVDYC.cjs.map} +1 -1
  27. package/dist/{chunk-ZV4DNZ5N.cjs → chunk-HPI4M5YZ.cjs} +3 -3
  28. package/dist/{chunk-ZV4DNZ5N.cjs.map → chunk-HPI4M5YZ.cjs.map} +1 -1
  29. package/dist/{chunk-RMJ6DH7F.js → chunk-I65X6CGT.js} +3 -3
  30. package/dist/{chunk-RMJ6DH7F.js.map → chunk-I65X6CGT.js.map} +1 -1
  31. package/dist/{chunk-APNFKXQ5.cjs → chunk-IGKX5GIL.cjs} +52 -52
  32. package/dist/{chunk-APNFKXQ5.cjs.map → chunk-IGKX5GIL.cjs.map} +1 -1
  33. package/dist/{chunk-PTSTVYQD.cjs → chunk-LSZFVBKG.cjs} +8 -8
  34. package/dist/{chunk-PTSTVYQD.cjs.map → chunk-LSZFVBKG.cjs.map} +1 -1
  35. package/dist/{chunk-KBOA5UFJ.js → chunk-LTMFZQ3A.js} +4 -4
  36. package/dist/{chunk-KBOA5UFJ.js.map → chunk-LTMFZQ3A.js.map} +1 -1
  37. package/dist/{chunk-6E5XJC6L.js → chunk-NCT5EAKD.js} +3 -3
  38. package/dist/{chunk-6E5XJC6L.js.map → chunk-NCT5EAKD.js.map} +1 -1
  39. package/dist/{chunk-ZPE7334Z.js → chunk-NGYCJDR6.js} +3 -3
  40. package/dist/{chunk-ZPE7334Z.js.map → chunk-NGYCJDR6.js.map} +1 -1
  41. package/dist/{chunk-TWVXDRLH.js → chunk-O5V6XKSS.js} +3 -3
  42. package/dist/{chunk-TWVXDRLH.js.map → chunk-O5V6XKSS.js.map} +1 -1
  43. package/dist/{chunk-KS5VQKI2.js → chunk-OCLUNWJ4.js} +3 -3
  44. package/dist/{chunk-KS5VQKI2.js.map → chunk-OCLUNWJ4.js.map} +1 -1
  45. package/dist/{chunk-SYTZ3UAU.cjs → chunk-P7MWWCB3.cjs} +5 -5
  46. package/dist/{chunk-SYTZ3UAU.cjs.map → chunk-P7MWWCB3.cjs.map} +1 -1
  47. package/dist/{chunk-AODZXDEE.cjs → chunk-QMEG2BPQ.cjs} +7 -7
  48. package/dist/{chunk-AODZXDEE.cjs.map → chunk-QMEG2BPQ.cjs.map} +1 -1
  49. package/dist/{chunk-YNSSIULM.cjs → chunk-VBNPS5AK.cjs} +5 -5
  50. package/dist/{chunk-YNSSIULM.cjs.map → chunk-VBNPS5AK.cjs.map} +1 -1
  51. package/dist/{chunk-ECQR3VPP.cjs → chunk-VNUQTUYT.cjs} +4 -4
  52. package/dist/{chunk-ECQR3VPP.cjs.map → chunk-VNUQTUYT.cjs.map} +1 -1
  53. package/dist/{chunk-XGFNZTPO.cjs → chunk-WYOPRJID.cjs} +3 -3
  54. package/dist/{chunk-XGFNZTPO.cjs.map → chunk-WYOPRJID.cjs.map} +1 -1
  55. package/dist/connect/docx.cjs +9 -9
  56. package/dist/connect/docx.js +5 -5
  57. package/dist/connect/index.cjs +412 -412
  58. package/dist/connect/index.js +14 -14
  59. package/dist/connect/viewer.cjs +6 -6
  60. package/dist/connect/viewer.js +6 -6
  61. package/dist/document-tools/viewer/index.cjs +14 -7
  62. package/dist/document-tools/viewer/index.cjs.map +1 -1
  63. package/dist/document-tools/viewer/index.js +15 -8
  64. package/dist/document-tools/viewer/index.js.map +1 -1
  65. package/dist/facts/index.cjs +1 -1
  66. package/dist/facts/index.js +1 -1
  67. package/dist/index.cjs +603 -603
  68. package/dist/index.js +10 -10
  69. package/dist/settings/index.cjs +155 -155
  70. package/dist/settings/index.js +2 -2
  71. package/dist/shell/index.cjs +9 -9
  72. package/dist/shell/index.js +1 -1
  73. package/dist/workflow-canvas/index.cjs +17 -17
  74. package/dist/workflow-canvas/index.js +4 -4
  75. package/node_modules/@arbidocs/coedit/package.json +1 -1
  76. package/package.json +5 -5
  77. package/dist/ConnectedStreamedWordArtifact-DQGOIULU.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/document-tools/viewer/AnnotatedPdfViewer.tsx","../../../src/document-tools/viewer/SignaturePlacementViewer.tsx","../../../src/document-tools/viewer/SignatureFieldsOverlay.tsx","../../../src/document-tools/viewer/GuidedSigningViewer.tsx","../../../src/document-tools/viewer/SignatureRequestEditor.tsx"],"names":["KitPdfViewer","useDocumentTools","useIsOnline","useRef","useMemo","createMarkupStore","useAnnotationLayer","useEffect","useState","useCallback","fetchMarkupPdf","redactionLogCsv","freezePdfInBrowser","uploadFrozenCopy","redactionLogName","AnnotationPageOverlay","jsxs","jsx","AnnotationToolbar","SIGNED_LOCKED_REASON","Download","FreezeDialog","createMemoryStore","isLegibleSignatureBox","Button","toAppearance","FIELD_TYPE_LABELS","DEFAULT_FIELD_SIZE","cn","Fragment","X","useSignSignatureRequest","useSavedSignature","useStoreSavedSignature","useDeclineSignatureRequest","fieldsInSigningOrder","MARK_FIELD_TYPES","TYPED_SIGNATURE_STYLE","SigningError","ArrowRight","ArrowLeft","Check","Progress","AdoptSignatureDialog","ModalScaffold","Label","Input","intentText","useSignerCandidates","useSaveSignatureRequest","useInviteSigners","isEmailSigner","sendBlocker","suggestSignatureFields","splitSuggestions","fieldsFromSuggestions","groups","newFieldId","UserPlus","MailPlus","SIGNATURE_FIELD_TYPES","ScanSearch","Send","PenLine","Checkbox"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The PDF viewer with the document's MARKUP on it: toolbar, per-page overlay and the freeze dialog.\n *\n * The original is never touched. The marks are the version's markup on the server (native PDF\n * annotations in its `{doc}-markup.pdf`, see `createMarkupStore` in `@arbidocs/react/document-tools`),\n * with the document's own privacy:\n * a shared document has one markup that owners and collaborators edit and guests read; a private\n * one is its owner's. Edits autosave a few seconds after the last change and when the viewer\n * closes; colleagues' changes are merged in. \"Freeze\" renders a new PDF with the marks built in and\n * saves it as a separate document derived from the original (see `uploadFrozenCopy`). Load it\n * lazily: it brings in pdf-lib, which nothing else needs.\n *\n * Needs a `<DocumentToolsProvider>` (API client, user, notify, open, refresh) inside a React Query\n * `QueryClientProvider`. `viewer` is the PDF viewer to draw on (default: the kit `PdfViewer`); a host\n * passes its own binding of it, e.g. one that reports the visible page.\n *\n * `editing` off is the default reading view: the marks show and comments open, read-only, with no\n * toolbar. Unsaved edits still go out when switching from editing to reading.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type ComponentType } from 'react'\nimport {\n AnnotationPageOverlay,\n AnnotationToolbar,\n FreezeDialog,\n redactionLogCsv,\n useAnnotationLayer,\n type AnnotationController,\n type AnnotationStore,\n type FreezeChoices,\n} from '@arbidocs/react/annotations'\nimport { freezePdfInBrowser } from '@arbidocs/react/annotations/freeze'\nimport {\n createMarkupStore,\n fetchMarkupPdf,\n SIGNED_LOCKED_REASON,\n redactionLogName,\n uploadFrozenCopy,\n useDocumentTools,\n useIsOnline,\n type MarkupSnapshot,\n} from '@arbidocs/react/document-tools'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport { Download } from 'lucide-react'\n\n/** Autosave this long after the last change (the design's \"a few seconds\"). */\nexport const MARKUP_AUTOSAVE_MS = 2500\n/** Look for colleagues' changes this often while idle. */\nexport const MARKUP_PULL_MS = 20_000\n\n/** The PDF viewer the marks are drawn on: the kit viewer's props, with a page-overlay slot. */\nexport type DocumentPdfViewer = ComponentType<PdfViewerProps>\n\nexport interface AnnotatedPdfViewerProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay'\n> {\n file: Blob\n documentId: string\n /** The version on screen when it is not the current one (its markup is shown, read-only). */\n version?: number\n fileName: string | null | undefined\n /** The original's workspace sharing and folder, which the frozen copy takes. */\n shared?: boolean\n folder?: string | null\n /** Annotate mode (toolbar, tools). Off: the marks are shown read-only. Default on. */\n editing?: boolean\n /** After each save: the markup's revision and how many marks it holds. */\n onMarkupChange?: (snapshot: MarkupSnapshot) => void\n /** Where the layer lives; defaults to the version's markup on the server. */\n store?: AnnotationStore\n /** The PDF viewer to draw on. Default: the kit `PdfViewer` from `@arbidocs/react/viewers`. */\n viewer?: DocumentPdfViewer\n /**\n * The version is signed, so locked: marks still go in the markup layer, but there is no\n * \"Download with markup\" (they are never written into its PDF).\n */\n signed?: boolean\n /**\n * One's saved signature or initials to place (PDF tab › My signature): arms the stamp tool with\n * the picture; the next click on a page places it. A new `key` arms it again.\n */\n placeStamp?: { image: string; label: string; key: number } | null\n}\n\nconst FALLBACK_AUTHOR = 'You'\n\n/** The same controller, view only: what the overlay gets outside annotate mode. */\nfunction viewOnly(controller: AnnotationController): AnnotationController {\n return { ...controller, readOnly: true, tool: 'select', setTool: () => {} }\n}\n\nexport function AnnotatedPdfViewer({\n file,\n documentId,\n version,\n fileName,\n shared = false,\n folder,\n editing = true,\n onMarkupChange,\n store: storeOverride,\n viewer: PdfViewer = KitPdfViewer,\n signed = false,\n placeStamp = null,\n ...viewerProps\n}: AnnotatedPdfViewerProps) {\n const { client, user, notify, saveFile, uploadDocument, openDocument, onDocumentsChanged } =\n useDocumentTools()\n const online = useIsOnline()\n const onChangeRef = useRef(onMarkupChange)\n onChangeRef.current = onMarkupChange\n const store = useMemo(\n () =>\n storeOverride ??\n createMarkupStore({\n version,\n client,\n onSaved: (snapshot) => onChangeRef.current?.(snapshot),\n }),\n // A new store per document version: its revision and tombstones belong to that markup.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [storeOverride, client, documentId, version]\n )\n const author = user?.name || FALLBACK_AUTHOR\n const controller = useAnnotationLayer({\n documentId,\n store,\n author,\n autosaveMs: MARKUP_AUTOSAVE_MS,\n online,\n pullMs: MARKUP_PULL_MS,\n // An older version is read-only; the hook also asks the store (a guest cannot write).\n readOnly: version !== undefined,\n })\n const shown = useMemo(\n () => (editing && !controller.readOnly ? controller : viewOnly(controller)),\n [editing, controller]\n )\n\n // Place my signature: the stamp tool, armed with the picture.\n const { setSettings, setTool } = controller\n useEffect(() => {\n if (!placeStamp) return\n setSettings({ stampImage: { image: placeStamp.image, label: placeStamp.label } })\n setTool('stamp')\n // eslint-disable-next-line react-hooks/exhaustive-deps -- once per request (its key)\n }, [placeStamp?.key])\n\n // Leaving annotate mode: write what is still waiting on the autosave timer.\n const { flush } = controller\n useEffect(() => {\n if (!editing) void flush()\n }, [editing, flush])\n\n // Edits that cannot be saved right now (offline, or the server refused): warn before leaving.\n const atRisk = controller.dirty && (controller.offline || !!controller.error)\n useEffect(() => {\n if (!atRisk) return\n const warn = (e: BeforeUnloadEvent) => {\n e.preventDefault()\n e.returnValue = ''\n }\n window.addEventListener('beforeunload', warn)\n return () => window.removeEventListener('beforeunload', warn)\n }, [atRisk])\n\n const [freezeOpen, setFreezeOpen] = useState(false)\n const [busy, setBusy] = useState(false)\n const [progress, setProgress] = useState<{ done: number; total: number } | null>(null)\n const [error, setError] = useState<string | null>(null)\n\n const openFreeze = useCallback(() => {\n setError(null)\n setFreezeOpen(true)\n }, [])\n\n const downloadWithMarkup = useCallback(async () => {\n try {\n await controller.flush()\n const { blob, fileName: name } = await fetchMarkupPdf(client, documentId, version)\n saveFile(blob, name)\n } catch (e) {\n notify(e instanceof Error ? e.message : 'The markup could not be downloaded', 'error')\n }\n }, [controller, client, documentId, version, saveFile, notify])\n\n const handleFreeze = useCallback(\n async (choices: FreezeChoices) => {\n setBusy(true)\n setError(null)\n try {\n await controller.flush()\n // The log is taken from the layer as it is frozen; it never holds the redacted text.\n const log = choices.redactionLog ? redactionLogCsv(controller.layer) : null\n const bytes = new Uint8Array(await file.arrayBuffer())\n const result = await freezePdfInBrowser(bytes, controller.layer, {\n ...choices,\n author,\n onProgress: (done, total) => setProgress({ done, total }),\n })\n const redacted = result.provenance.redactions.count > 0\n const newDocId = await uploadFrozenCopy(\n uploadDocument,\n result.bytes,\n { documentId, fileName, shared, folder },\n redacted\n )\n if (log) saveFile(new Blob([log], { type: 'text/csv' }), redactionLogName(fileName))\n if (newDocId) {\n // The copy joins the list beside the original, which stays where it was.\n await onDocumentsChanged?.([newDocId], 'copy')\n openDocument?.(newDocId)\n }\n notify(\n redacted\n ? 'Redacted copy saved as a new document'\n : 'Annotated copy saved as a new document',\n 'success',\n { description: 'The original is unchanged and still in your files.' }\n )\n for (const warning of result.warnings) notify(warning, 'warning')\n setFreezeOpen(false)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The copy could not be created')\n } finally {\n setBusy(false)\n setProgress(null)\n }\n },\n [\n controller,\n author,\n file,\n fileName,\n documentId,\n shared,\n folder,\n uploadDocument,\n saveFile,\n notify,\n onDocumentsChanged,\n openDocument,\n ]\n )\n\n const renderPageOverlay = useCallback(\n ({ pageNumber, pageWidthPt }: { pageNumber: number; pageWidthPt: number | undefined }) => (\n <AnnotationPageOverlay controller={shown} pageNumber={pageNumber} pageWidthPt={pageWidthPt} />\n ),\n [shown]\n )\n\n const hasMarks = controller.layer.annotations.length > 0\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col\"\n data-testid=\"annotated-pdf-viewer\"\n data-mode={editing ? 'edit' : 'view'}\n data-markup-status={controller.status}\n >\n {editing && (\n <AnnotationToolbar\n controller={controller}\n onFreeze={controller.readOnly ? undefined : openFreeze}\n actions={\n hasMarks && !controller.dirty && version === undefined ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:cursor-not-allowed disabled:text-muted-foreground disabled:no-underline pointer-coarse:min-h-11\"\n data-testid=\"annotation-download-markup\"\n title={\n signed\n ? SIGNED_LOCKED_REASON\n : 'Download the PDF with these annotations (opens in Acrobat or Preview)'\n }\n disabled={signed}\n onClick={() => void downloadWithMarkup()}\n >\n <Download size={14} />\n Download with markup\n </button>\n ) : null\n }\n />\n )}\n {!editing && controller.status === 'error' && (\n <div className=\"border-b px-3 py-1.5 text-xs text-destructive\" data-testid=\"markup-error\">\n The markup could not be loaded: {controller.error}\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n <PdfViewer {...viewerProps} file={file} renderPageOverlay={renderPageOverlay} />\n </div>\n {editing && (\n <FreezeDialog\n open={freezeOpen}\n onOpenChange={setFreezeOpen}\n controller={controller}\n onConfirm={handleFreeze}\n busy={busy}\n progress={progress}\n error={error}\n />\n )}\n </div>\n )\n}\n\nexport default AnnotatedPdfViewer\n","/**\n * Choose where a signature goes: the PDF with the annotation overlay's box tool, kept in memory\n * only. The box is not an annotation; it is handed to the Sign dialog, and the backend draws the\n * signature there. Needs no `<DocumentToolsProvider>`.\n */\n\nimport { useCallback, useEffect, useMemo, type ReactElement } from 'react'\nimport {\n AnnotationPageOverlay,\n createMemoryStore,\n useAnnotationLayer,\n type BoxAnnotation,\n} from '@arbidocs/react/annotations'\nimport {\n isLegibleSignatureBox,\n toAppearance,\n type SignatureAppearance,\n} from '@arbidocs/react/document-tools'\nimport { Button } from '@arbidocs/react/ui'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport type { DocumentPdfViewer } from './AnnotatedPdfViewer'\n\nconst SIGNATURE_BOX_COLOR = '#1c7ed6'\n\nexport interface SignaturePlacementViewerProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay'\n> {\n file: Blob\n documentId: string\n onCancel: () => void\n /** The chosen box, or undefined for the default spot (bottom of the last page). */\n onContinue: (appearance: SignatureAppearance | undefined) => void\n /** The PDF viewer to draw on. Default: the kit `PdfViewer` from `@arbidocs/react/viewers`. */\n viewer?: DocumentPdfViewer\n}\n\nexport function SignaturePlacementViewer({\n file,\n documentId,\n onCancel,\n onContinue,\n viewer: PdfViewer = KitPdfViewer,\n ...viewerProps\n}: SignaturePlacementViewerProps): ReactElement {\n const store = useMemo(() => createMemoryStore(), [])\n const controller = useAnnotationLayer({ documentId, store, author: 'signature' })\n const boxes = controller.layer.annotations.filter((a): a is BoxAnnotation => a.kind === 'box')\n const box = boxes.at(-1)\n const isTooSmall = box !== undefined && !isLegibleSignatureBox(box.rect)\n\n // Draw with the box tool; once there is a box, select it so it can be moved or resized.\n useEffect(() => {\n if (controller.status !== 'ready') return\n controller.setSettings({ colors: { ...controller.settings.colors, box: SIGNATURE_BOX_COLOR } })\n // eslint-disable-next-line react-hooks/exhaustive-deps -- once, when the layer is ready\n }, [controller.status])\n useEffect(() => {\n if (controller.status !== 'ready') return\n // One signature box: drawing another replaces it.\n for (const old of boxes.slice(0, -1)) controller.remove(old.id)\n if (box) {\n controller.select(box.id)\n controller.setTool('select')\n } else {\n controller.setTool('box')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- react to the boxes only\n }, [controller.status, boxes.length, box?.id])\n\n const redraw = useCallback(() => {\n if (box) controller.remove(box.id)\n controller.setTool('box')\n }, [box, controller])\n\n const renderPageOverlay = useCallback(\n ({ pageNumber, pageWidthPt }: { pageNumber: number; pageWidthPt: number | undefined }) => (\n <AnnotationPageOverlay\n controller={controller}\n pageNumber={pageNumber}\n pageWidthPt={pageWidthPt}\n />\n ),\n [controller]\n )\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"signature-placement-viewer\">\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2 text-sm\">\n <span className=\"mr-auto text-muted-foreground\" data-testid=\"signature-placement-hint\">\n {isTooSmall\n ? 'This box is small: the signature will print small. Make it larger to keep it legible.'\n : box\n ? 'Move or resize the box, then continue.'\n : 'Drag a box where your signature goes, or continue to sign at the end.'}\n </span>\n {box && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={redraw}>\n Redraw\n </Button>\n )}\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => onContinue(box ? toAppearance(box) : undefined)}\n data-testid=\"signature-placement-continue\"\n >\n Continue\n </Button>\n </div>\n <div className=\"min-h-0 flex-1\">\n <PdfViewer {...viewerProps} file={file} renderPageOverlay={renderPageOverlay} />\n </div>\n </div>\n )\n}\n\nexport default SignaturePlacementViewer\n","/**\n * The signature fields of one PDF page, drawn over it. Coordinates are fractions of the page as\n * shown (origin top-left), pages 0-based like the API; the kit viewer's overlay fills the page box.\n *\n * - `editable`: the author's view. With a field type chosen, a click drops a field of the default\n * size and a drag draws one; a field is selected by a click, moved by dragging it and resized by\n * its corner handle; the selected one has a remove button.\n * - otherwise the signer's view: fields are buttons; `renderContent` shows what was applied.\n */\n\nimport { useRef, useState, type PointerEvent, type ReactElement, type ReactNode } from 'react'\nimport { X } from 'lucide-react'\nimport {\n DEFAULT_FIELD_SIZE,\n FIELD_TYPE_LABELS,\n type SignatureField,\n type SignatureFieldType,\n} from '@arbidocs/react/document-tools'\nimport { cn } from '@arbidocs/react/ui'\n\n/** One colour per signer, in the order they were added. */\nexport const SIGNER_COLORS = ['#1c7ed6', '#e8590c', '#2f9e44', '#9c36b5', '#c2255c', '#0c8599']\n\nconst MIN_DRAG = 0.01\n\ntype Box = { x: number; y: number; width: number; height: number }\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v))\nconst round = (v: number) => Math.round(v * 10000) / 10000\n\nfunction fit(box: Box): Box {\n const width = clamp(box.width, 0.02, 1)\n const height = clamp(box.height, 0.015, 1)\n return {\n x: round(clamp(box.x, 0, 1 - width)),\n y: round(clamp(box.y, 0, 1 - height)),\n width: round(width),\n height: round(height),\n }\n}\n\ntype Drag =\n | { kind: 'create'; startX: number; startY: number; box: Box }\n | { kind: 'move' | 'resize'; id: string; startX: number; startY: number; origin: Box }\n\nexport interface SignatureFieldsOverlayProps {\n /** 0-based page index this overlay covers. */\n page: number\n fields: SignatureField[]\n colorOf: (signer: string) => string\n labelOf?: (field: SignatureField) => string\n editable?: boolean\n /** Editing: the type a click or drag on the page creates (null: none, selection only). */\n placing?: SignatureFieldType | null\n selectedId?: string | null\n onSelect?: (id: string | null) => void\n onCreate?: (box: Box) => void\n onChange?: (id: string, box: Box) => void\n onRemove?: (id: string) => void\n /** Signing: the field the signer is on. */\n activeId?: string | null\n onActivate?: (id: string) => void\n /** Signing: what a completed field shows (the adopted signature, the date…). */\n renderContent?: (field: SignatureField) => ReactNode\n}\n\nexport function SignatureFieldsOverlay({\n page,\n fields,\n colorOf,\n labelOf = (f) => FIELD_TYPE_LABELS[f.type],\n editable = false,\n placing = null,\n selectedId = null,\n onSelect,\n onCreate,\n onChange,\n onRemove,\n activeId = null,\n onActivate,\n renderContent,\n}: SignatureFieldsOverlayProps): ReactElement {\n const ref = useRef<HTMLDivElement>(null)\n const [drag, setDrag] = useState<Drag | null>(null)\n const [preview, setPreview] = useState<Box | null>(null)\n const onPage = fields.filter((f) => f.page === page)\n\n const point = (e: PointerEvent) => {\n const r = ref.current!.getBoundingClientRect()\n return { x: (e.clientX - r.left) / r.width, y: (e.clientY - r.top) / r.height }\n }\n\n const startCreate = (e: PointerEvent<HTMLDivElement>) => {\n if (!editable || e.target !== e.currentTarget || e.button !== 0) return\n if (!placing) {\n onSelect?.(null)\n return\n }\n const p = point(e)\n e.currentTarget.setPointerCapture?.(e.pointerId)\n setDrag({ kind: 'create', startX: p.x, startY: p.y, box: { ...p, width: 0, height: 0 } })\n }\n\n const startField = (e: PointerEvent, field: SignatureField, kind: 'move' | 'resize') => {\n if (!editable || e.button !== 0) return\n e.stopPropagation()\n onSelect?.(field.id)\n const p = point(e)\n ref.current?.setPointerCapture?.(e.pointerId)\n setDrag({\n kind,\n id: field.id,\n startX: p.x,\n startY: p.y,\n origin: { x: field.x, y: field.y, width: field.width, height: field.height },\n })\n }\n\n const onMove = (e: PointerEvent) => {\n if (!drag) return\n const p = point(e)\n const dx = p.x - drag.startX\n const dy = p.y - drag.startY\n if (drag.kind === 'create') {\n setPreview({\n x: Math.min(p.x, drag.startX),\n y: Math.min(p.y, drag.startY),\n width: Math.abs(dx),\n height: Math.abs(dy),\n })\n } else if (drag.kind === 'move') {\n setPreview(fit({ ...drag.origin, x: drag.origin.x + dx, y: drag.origin.y + dy }))\n } else {\n setPreview(\n fit({ ...drag.origin, width: drag.origin.width + dx, height: drag.origin.height + dy })\n )\n }\n }\n\n const onUp = (e: PointerEvent) => {\n if (!drag) return\n const p = point(e)\n if (drag.kind === 'create' && placing) {\n const drawn = Math.abs(p.x - drag.startX) > MIN_DRAG && Math.abs(p.y - drag.startY) > MIN_DRAG\n const size = DEFAULT_FIELD_SIZE[placing]\n onCreate?.(\n fit(\n drawn && preview\n ? preview\n : { x: drag.startX - size.width / 2, y: drag.startY - size.height / 2, ...size }\n )\n )\n } else if (drag.kind !== 'create' && preview) {\n onChange?.(drag.id, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'absolute inset-0',\n editable && placing && 'cursor-crosshair',\n !editable && 'pointer-events-none'\n )}\n onPointerDown={startCreate}\n onPointerMove={onMove}\n onPointerUp={onUp}\n onPointerCancel={() => {\n setDrag(null)\n setPreview(null)\n }}\n data-testid={`signature-fields-page-${page}`}\n >\n {onPage.map((field) => {\n const dragging = drag && drag.kind !== 'create' && drag.id === field.id && preview\n const box = dragging ? preview! : field\n const color = colorOf(field.signer)\n const selected = editable && selectedId === field.id\n const active = !editable && activeId === field.id\n const content = renderContent?.(field)\n return (\n <div\n key={field.id}\n role={editable ? undefined : 'button'}\n tabIndex={editable ? undefined : 0}\n aria-label={editable ? undefined : `${labelOf(field)}${content ? ' (done)' : ''}`}\n className={cn(\n 'pointer-events-auto absolute flex items-center justify-center overflow-visible rounded-sm border-2 text-[11px] font-medium select-none',\n editable ? 'cursor-move' : 'cursor-pointer',\n active && 'ring-4 ring-offset-1 motion-safe:animate-pulse',\n selected && 'ring-2 ring-offset-1'\n )}\n style={{\n left: `${box.x * 100}%`,\n top: `${box.y * 100}%`,\n width: `${box.width * 100}%`,\n height: `${box.height * 100}%`,\n borderColor: color,\n borderStyle: content ? 'solid' : 'dashed',\n backgroundColor: content ? 'transparent' : `${color}22`,\n color,\n ['--tw-ring-color' as string]: color,\n }}\n onPointerDown={(e) => startField(e, field, 'move')}\n onClick={() => !editable && onActivate?.(field.id)}\n onKeyDown={(e) => {\n if (!editable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n onActivate?.(field.id)\n }\n if (editable && selected && (e.key === 'Delete' || e.key === 'Backspace')) {\n onRemove?.(field.id)\n }\n }}\n data-testid={`signature-field-${field.id}`}\n data-field-type={field.type}\n data-field-done={content ? 'true' : undefined}\n >\n {content ?? (\n <span className=\"truncate px-1\">\n {labelOf(field)}\n {field.required ? '' : ' (optional)'}\n </span>\n )}\n {selected && (\n <>\n <button\n type=\"button\"\n aria-label=\"Remove field\"\n className=\"absolute -top-2.5 -right-2.5 flex size-5 items-center justify-center rounded-full border bg-background text-foreground shadow\"\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => onRemove?.(field.id)}\n data-testid=\"signature-field-remove\"\n >\n <X className=\"size-3\" />\n </button>\n <span\n aria-hidden\n className=\"absolute -right-1.5 -bottom-1.5 size-3 cursor-nwse-resize rounded-sm border bg-background\"\n style={{ borderColor: color }}\n onPointerDown={(e) => startField(e, field, 'resize')}\n data-testid=\"signature-field-resize\"\n />\n </>\n )}\n </div>\n )\n })}\n {drag?.kind === 'create' && preview && (\n <div\n className=\"pointer-events-none absolute rounded-sm border-2 border-dashed\"\n style={{\n left: `${preview.x * 100}%`,\n top: `${preview.y * 100}%`,\n width: `${preview.width * 100}%`,\n height: `${preview.height * 100}%`,\n borderColor: '#868e96',\n }}\n />\n )}\n </div>\n )\n}\n","/**\n * Sign a document you were asked to sign, field by field. The viewer takes the signer to each of\n * their fields in turn (page by page, scrolled into view, \"Field 3 of 7\"); they adopt a signature\n * once and click each field to apply it (the date signed and their printed name fill in on\n * adoption). Finishing re-enters the password and signs every field at once; the last signer's\n * signature completes the request and the signed copy becomes the document's next version.\n * Needs a `<DocumentToolsProvider>` with a `user` inside a React Query `QueryClientProvider`.\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type FormEvent,\n type ReactElement,\n} from 'react'\nimport { ArrowLeft, ArrowRight, Check } from 'lucide-react'\nimport {\n FIELD_TYPE_LABELS,\n MARK_FIELD_TYPES,\n SigningError,\n fieldsInSigningOrder,\n intentText,\n useDeclineSignatureRequest,\n useDocumentTools,\n useSavedSignature,\n useSignSignatureRequest,\n useStoreSavedSignature,\n type SignRequestSignResponse,\n type SignatureField,\n type SignatureRequest,\n} from '@arbidocs/react/document-tools'\nimport { Button, Input, Label, Progress } from '@arbidocs/react/ui'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport { ModalScaffold } from '../../settings/ModalScaffold'\nimport {\n AdoptSignatureDialog,\n TYPED_SIGNATURE_STYLE,\n type AdoptedMark,\n} from '../AdoptSignatureDialog'\nimport type { DocumentPdfViewer } from './AnnotatedPdfViewer'\nimport { SignatureFieldsOverlay } from './SignatureFieldsOverlay'\n\nexport interface GuidedSigningViewerProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay' | 'currentPage' | 'scrollTrigger'\n> {\n /** The PDF of the request's version (`GET /view?version=`): what is signed. */\n file: Blob\n request: SignatureRequest\n /** The signer (usr-*): their fields are the ones walked through. */\n signer: string\n onClose: () => void\n onSigned?: (result: SignRequestSignResponse) => void\n viewer?: DocumentPdfViewer\n}\n\nconst INK = '#1c7ed6'\n\n/** \"19 October 2026\", as the signed PDF writes the date. */\nexport function signingDate(date = new Date()): string {\n return `${date.getDate()} ${date.toLocaleString('en-GB', { month: 'long' })} ${date.getFullYear()}`\n}\n\nexport function GuidedSigningViewer({\n file,\n request,\n signer,\n onClose,\n onSigned,\n viewer: PdfViewer = KitPdfViewer,\n ...viewerProps\n}: GuidedSigningViewerProps): ReactElement {\n const { user, notify } = useDocumentTools()\n const sign = useSignSignatureRequest()\n const savedSignature = useSavedSignature()\n const storeSignature = useStoreSavedSignature()\n const decline = useDeclineSignatureRequest()\n const mine = useMemo(() => fieldsInSigningOrder(request.fields, signer), [request.fields, signer])\n const [mark, setMark] = useState<AdoptedMark | null>(null)\n const [applied, setApplied] = useState<Set<string>>(new Set())\n const [index, setIndex] = useState(-1)\n const [page, setPage] = useState(1)\n const [trigger, setTrigger] = useState(0)\n const [adoptFor, setAdoptFor] = useState<SignatureField | null>(null)\n const [finishing, setFinishing] = useState(false)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [declining, setDeclining] = useState(false)\n const [declineReason, setDeclineReason] = useState('')\n const scrollTimer = useRef<number | undefined>(undefined)\n\n const required = mine.filter((f) => f.required)\n const done = mine.filter((f) => applied.has(f.id)).length\n const ready = required.every((f) => applied.has(f.id))\n const current = index >= 0 ? mine[index] : undefined\n\n useEffect(() => () => window.clearTimeout(scrollTimer.current), [])\n\n const goTo = useCallback(\n (i: number) => {\n const field = mine[i]\n if (!field) return\n setIndex(i)\n setPage(field.page + 1)\n setTrigger((t) => t + 1)\n // Once the page is in view, bring the field itself to the middle of the screen.\n window.clearTimeout(scrollTimer.current)\n scrollTimer.current = window.setTimeout(() => {\n document\n .querySelector(`[data-testid=\"signature-field-${field.id}\"]`)\n ?.scrollIntoView({ block: 'center', behavior: 'smooth' })\n }, 300)\n },\n [mine]\n )\n\n /** The next field still to do after `from` (wrapping), or -1 when every field is done. */\n const nextOpen = (from: number, filled: Set<string>) => {\n for (let k = 1; k <= mine.length; k++) {\n const i = (from + k) % mine.length\n if (!filled.has(mine[i]!.id)) return i\n }\n return -1\n }\n\n const apply = (field: SignatureField, base: Set<string> = applied) => {\n const next = new Set(base)\n next.add(field.id)\n setApplied(next)\n const i = nextOpen(mine.indexOf(field), next)\n if (i >= 0) goTo(i)\n else setIndex(mine.indexOf(field))\n }\n\n const activate = (id: string) => {\n const field = mine.find((f) => f.id === id)\n if (!field) return\n setIndex(mine.indexOf(field))\n if (applied.has(id)) {\n // A second click takes it back off.\n setApplied((a) => {\n const next = new Set(a)\n next.delete(id)\n return next\n })\n return\n }\n if (!mark) {\n setAdoptFor(field)\n return\n }\n apply(field)\n }\n\n const onAdopt = (adopted: AdoptedMark) => {\n setMark(adopted)\n const field = adoptFor\n setAdoptFor(null)\n // The date signed and the printed name need no click: they fill in from what was adopted.\n const filled = new Set(applied)\n for (const f of mine)\n if (f.required && (f.type === 'date' || f.type === 'name')) filled.add(f.id)\n if (field) apply(field, filled)\n else setApplied(filled)\n }\n\n const renderContent = useCallback(\n (field: SignatureField) => {\n if (!applied.has(field.id) || !mark) return null\n const { adopted, signatureUrl, initialsUrl } = mark\n const image =\n field.type === 'signature' ? signatureUrl : field.type === 'initials' ? initialsUrl : null\n if (image) {\n return (\n <img\n src={image}\n alt={field.type === 'signature' ? 'Your signature' : 'Your initials'}\n className=\"h-full w-full object-contain\"\n />\n )\n }\n const text =\n field.type === 'signature'\n ? adopted.name\n : field.type === 'initials'\n ? adopted.initials\n : field.type === 'date'\n ? signingDate()\n : adopted.name\n const typed = MARK_FIELD_TYPES.includes(field.type)\n return (\n <span\n className=\"flex h-full w-full items-center px-1 whitespace-nowrap [container-type:size]\"\n style={typed ? TYPED_SIGNATURE_STYLE : { color: '#1a1a26' }}\n >\n <span style={{ fontSize: typed ? '70cqh' : '62cqh', lineHeight: 1 }}>{text}</span>\n </span>\n )\n },\n [applied, mark]\n )\n\n const renderPageOverlay = useCallback(\n ({ pageNumber }: { pageNumber: number }) => (\n <SignatureFieldsOverlay\n page={pageNumber - 1}\n fields={mine}\n colorOf={() => INK}\n labelOf={(f) =>\n MARK_FIELD_TYPES.includes(f.type)\n ? `Sign: ${FIELD_TYPE_LABELS[f.type]}`\n : FIELD_TYPE_LABELS[f.type]\n }\n activeId={current?.id ?? null}\n onActivate={activate}\n renderContent={renderContent}\n />\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activate reads the latest state\n [mine, current?.id, renderContent, mark, applied]\n )\n\n const submit = async (e: FormEvent) => {\n e.preventDefault()\n if (!mark || !user?.email) return\n setError(null)\n try {\n const result = await sign.mutateAsync({\n request,\n pdfBlob: file,\n email: user.email,\n password,\n adopted: mark.adopted,\n fields: mine.filter((f) => applied.has(f.id)).map((f) => f.id),\n })\n setPassword('')\n setFinishing(false)\n notify(\n result.completed\n ? `Signed. Everyone has signed: the signed copy is version ${result.signed_version}.`\n : 'Signed. The others are still to sign; you will see the signed copy when they have.',\n 'success'\n )\n onSigned?.(result)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Signing failed')\n if (err instanceof SigningError && err.reason === 'stale') setFinishing(false)\n }\n }\n\n const onDecline = async (e: FormEvent) => {\n e.preventDefault()\n try {\n await decline.mutateAsync({ requestId: request.external_id, reason: declineReason.trim() })\n setDeclining(false)\n notify('You declined to sign. The sender has been told.', 'info')\n onClose()\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not decline', 'error')\n }\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"guided-signing-viewer\">\n <div className=\"space-y-2 border-b border-border px-3 py-2 text-sm\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {index < 0 ? (\n <span className=\"mr-auto\" data-testid=\"guided-signing-intro\">\n You are asked to complete {mine.length} field{mine.length === 1 ? '' : 's'}.\n {request.message ? (\n <span className=\"text-muted-foreground\"> “{request.message}”</span>\n ) : null}\n </span>\n ) : (\n <span className=\"mr-auto font-medium\" data-testid=\"guided-signing-position\">\n Field {index + 1} of {mine.length}: {current ? FIELD_TYPE_LABELS[current.type] : ''}\n {current && !current.required ? ' (optional)' : ''}\n <span className=\"ml-2 font-normal text-muted-foreground\">\n Page {current ? current.page + 1 : ''}\n </span>\n </span>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setDeclining(true)}\n data-testid=\"guided-signing-decline\"\n >\n Decline\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onClose}>\n Close\n </Button>\n {index < 0 ? (\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => goTo(0)}\n data-testid=\"guided-signing-start\"\n >\n Start\n <ArrowRight className=\"ml-1 size-4\" aria-hidden />\n </Button>\n ) : (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => goTo(Math.max(0, index - 1))}\n disabled={index === 0}\n aria-label=\"Previous field\"\n >\n <ArrowLeft className=\"size-4\" aria-hidden />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => goTo(Math.min(mine.length - 1, index + 1))}\n disabled={index >= mine.length - 1}\n aria-label=\"Next field\"\n data-testid=\"guided-signing-next\"\n >\n <ArrowRight className=\"size-4\" aria-hidden />\n </Button>\n {current && !applied.has(current.id) && (\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => activate(current.id)}\n data-testid=\"guided-signing-apply\"\n >\n {MARK_FIELD_TYPES.includes(current.type) ? 'Sign here' : 'Fill in'}\n </Button>\n )}\n </>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant={ready ? 'default' : 'outline'}\n disabled={!ready || !mark}\n onClick={() => setFinishing(true)}\n data-testid=\"guided-signing-finish\"\n >\n <Check className=\"mr-1 size-4\" aria-hidden />\n Finish\n </Button>\n </div>\n <div className=\"flex items-center gap-3\">\n <Progress\n value={mine.length ? (done / mine.length) * 100 : 0}\n className=\"h-1.5 max-w-xs\"\n />\n <span className=\"text-muted-foreground\" data-testid=\"guided-signing-progress\">\n {done} of {mine.length} done\n </span>\n </div>\n </div>\n <div className=\"min-h-0 flex-1\">\n <PdfViewer\n {...viewerProps}\n file={file}\n currentPage={page}\n scrollTrigger={trigger}\n renderPageOverlay={renderPageOverlay}\n />\n </div>\n <AdoptSignatureDialog\n open={!!adoptFor}\n onOpenChange={(open) => !open && setAdoptFor(null)}\n defaultName={user?.name ?? ''}\n onAdopt={onAdopt}\n saved={savedSignature.data ?? null}\n onSave={async (signature) => void (await storeSignature.mutateAsync(signature))}\n />\n <ModalScaffold\n open={declining}\n onOpenChange={(open) => !decline.isPending && setDeclining(open)}\n title=\"Decline to sign\"\n description=\"The request ends for everyone and the sender is told. The document is unchanged.\"\n showDescription\n testId=\"guided-signing-decline-dialog\"\n >\n <form onSubmit={onDecline}>\n <ModalScaffold.Body>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"guided-decline-reason\">Reason (optional)</Label>\n <Input\n id=\"guided-decline-reason\"\n value={declineReason}\n maxLength={1000}\n onChange={(e) => setDeclineReason(e.target.value)}\n />\n </div>\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button type=\"button\" variant=\"outline\" onClick={() => setDeclining(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"destructive\" disabled={decline.isPending}>\n Decline\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n <ModalScaffold\n open={finishing}\n onOpenChange={(open) => !sign.isPending && setFinishing(open)}\n title=\"Sign the document\"\n description=\"Confirm with your password. Your signature is applied to every field you completed.\"\n showDescription\n testId=\"guided-signing-confirm\"\n >\n <form onSubmit={submit}>\n <ModalScaffold.Body>\n {mark && (\n <blockquote className=\"border-l-2 border-border pl-3 text-sm text-muted-foreground\">\n {intentText({ name: mark.adopted.name })}\n </blockquote>\n )}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"guided-sign-password\">Password</Label>\n <Input\n id=\"guided-sign-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n data-testid=\"guided-signing-password\"\n required\n />\n </div>\n {error && (\n <p className=\"text-sm text-red-text\" role=\"alert\" data-testid=\"guided-signing-error\">\n {error}\n </p>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setFinishing(false)}\n disabled={sign.isPending}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={sign.isPending || !password}\n data-testid=\"guided-signing-submit\"\n >\n {sign.isPending ? 'Signing…' : 'Sign'}\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n </div>\n )\n}\n\nexport default GuidedSigningViewer\n","/**\n * Prepare a document for signature: add the signers, then place each field (signature, initials,\n * date signed, name) where it goes on the PDF of the version shown, for the signer it is for.\n * A Word document's own signature fields (Insert › Signature field) are placed on opening, each\n * for the signer it names. \"Find signature blocks\" proposes fields from the document's execution\n * blocks (\"Director\", \"Witness name\", \"[Signature]\", \"Date:\"); the author assigns a signer per\n * block. A signer is a workspace member or anyone by email: someone not in the workspace is\n * invited (as a guest) when it is sent, and signs once they join. Save it as a draft or send it:\n * each signer is notified and walked through their fields. Needs a `<DocumentToolsProvider>`\n * inside a React Query `QueryClientProvider`.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactElement } from 'react'\nimport { MailPlus, PenLine, ScanSearch, Send, UserPlus, X } from 'lucide-react'\nimport {\n FIELD_TYPE_LABELS,\n SIGNATURE_FIELD_TYPES,\n fieldsFromSuggestions,\n isEmailSigner,\n newFieldId,\n sendBlocker,\n splitSuggestions,\n suggestSignatureFields,\n useDocumentTools,\n useInviteSigners,\n useSaveSignatureRequest,\n useSignerCandidates,\n type SignatureField,\n type SignatureFieldType,\n type SignatureRequest,\n type SuggestedSignatureField,\n} from '@arbidocs/react/document-tools'\nimport { Button, Checkbox, Input, Label, cn } from '@arbidocs/react/ui'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport type { DocumentPdfViewer } from './AnnotatedPdfViewer'\nimport { SIGNER_COLORS, SignatureFieldsOverlay } from './SignatureFieldsOverlay'\n\nexport interface SignatureRequestEditorProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay'\n> {\n /** The PDF of the version shown (`GET /view?version=`): the fields are placed on it. */\n file: Blob\n documentId: string\n /** The version `file` is of; omitted = the current version. */\n version?: number\n /** A draft to go on editing. */\n draft?: SignatureRequest | null\n onCancel: () => void\n onSaved: (request: SignatureRequest) => void\n viewer?: DocumentPdfViewer\n}\n\nconst selectClass =\n 'h-8 rounded-md border border-input bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n\nexport function SignatureRequestEditor({\n file,\n documentId,\n version,\n draft,\n onCancel,\n onSaved,\n viewer: PdfViewer = KitPdfViewer,\n ...viewerProps\n}: SignatureRequestEditorProps): ReactElement {\n const { client, notify, user } = useDocumentTools()\n const candidates = useSignerCandidates()\n const save = useSaveSignatureRequest()\n const invite = useInviteSigners()\n const [fields, setFields] = useState<SignatureField[]>(() => draft?.fields ?? [])\n const [signers, setSigners] = useState<string[]>(() => [\n ...new Set((draft?.fields ?? []).map((f) => f.signer)),\n ])\n const [current, setCurrent] = useState<string | null>(signers[0] ?? null)\n const [placing, setPlacing] = useState<SignatureFieldType | null>(null)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n const [message, setMessage] = useState(draft?.message ?? '')\n const [suggestions, setSuggestions] = useState<SuggestedSignatureField[] | null>(null)\n const [assign, setAssign] = useState<Record<number, string | undefined>>({})\n const [finding, setFinding] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [newEmail, setNewEmail] = useState('')\n /** Names the Word document's fields give their signers, by email. */\n const [givenNames, setGivenNames] = useState<Record<string, string>>({})\n /** Signers to invite before sending, waiting for the author to confirm. */\n const [confirmInvite, setConfirmInvite] = useState<string[] | null>(null)\n\n const people = useMemo(() => candidates.data ?? [], [candidates.data])\n const members = useMemo(\n () => new Map(people.map((p) => [p.email.toLowerCase(), p.externalId])),\n [people]\n )\n const me = people.find((p) => p.email.toLowerCase() === user?.email?.toLowerCase())\n const nameOf = useCallback(\n (token: string) => {\n const person = people.find((p) => p.externalId === token)\n if (person) return person.name\n const invited = draft?.signers.find((s) => s.external_id === token)\n if (invited) return invited.name || invited.email || token\n const email = token.toLowerCase()\n const member = people.find((p) => p.email.toLowerCase() === email)\n return member?.name ?? givenNames[email] ?? token\n },\n [people, draft, givenNames]\n )\n /** Not in the workspace yet: an email that is no member's (they are invited when it is sent). */\n const isInvitee = useCallback(\n (token: string) =>\n (isEmailSigner(token) && !members.has(token.toLowerCase())) ||\n draft?.signers.find((s) => s.external_id === token)?.progress === 'invited',\n [members, draft]\n )\n const colorOf = useCallback(\n (ext: string) => {\n const i = signers.indexOf(ext)\n return SIGNER_COLORS[(i < 0 ? 0 : i) % SIGNER_COLORS.length]!\n },\n [signers]\n )\n const selected = fields.find((f) => f.id === selectedId) ?? null\n const blocker = signers.length === 0 ? 'Add a signer.' : sendBlocker(fields)\n\n const addSigner = (token: string) => {\n if (!token) return\n // A member's email is the member.\n const ext = isEmailSigner(token)\n ? (members.get(token.trim().toLowerCase()) ?? token.trim().toLowerCase())\n : token\n if (signers.includes(ext)) return\n setSigners((s) => [...s, ext])\n setCurrent(ext)\n setPlacing((p) => p ?? 'signature')\n }\n const removeSigner = (ext: string) => {\n setSigners((s) => s.filter((x) => x !== ext))\n setFields((fs) => fs.filter((f) => f.signer !== ext))\n if (current === ext) setCurrent(signers.find((x) => x !== ext) ?? null)\n }\n\n const updateField = (id: string, patch: Partial<SignatureField>) =>\n setFields((fs) => fs.map((f) => (f.id === id ? { ...f, ...patch } : f)))\n\n /** The Word document's own fields, placed on opening a new request (each for the signer it names). */\n const placedOnce = useRef(false)\n useEffect(() => {\n if (draft || placedOnce.current || candidates.isLoading) return\n placedOnce.current = true\n let live = true\n void suggestSignatureFields(client, documentId, version)\n .then((found) => {\n if (!live) return\n const { placed, extras } = splitSuggestions(found ?? [])\n if (!placed.length) return\n const named = Object.fromEntries(\n placed.flatMap((s) =>\n s.signer_email && s.signer_name ? [[s.signer_email.toLowerCase(), s.signer_name]] : []\n )\n )\n setGivenNames((n) => ({ ...n, ...named }))\n const added = fieldsFromSuggestions(placed, {}, members)\n setFields((fs) => [...fs, ...added])\n const assigned = [...new Set(added.map((f) => f.signer))]\n setSigners((s) => [...s, ...assigned.filter((t) => !s.includes(t))])\n setCurrent((c) => c ?? assigned[0] ?? null)\n // Fields placed with no signer, and the signature lines found besides: offered, not added.\n const open = placed.filter((s) => !s.signer_email)\n if (open.length || extras.length) {\n setSuggestions([...open, ...extras])\n setAssign({})\n }\n notify(\n `${added.length} field${added.length === 1 ? '' : 's'} placed from the document.`,\n 'success'\n )\n })\n .catch(() => {\n /* no fields to place: the author places them */\n })\n return () => {\n live = false\n }\n }, [draft, candidates.isLoading, client, documentId, version, members, notify])\n\n const findBlocks = async () => {\n setFinding(true)\n setError(null)\n try {\n const found = await suggestSignatureFields(client, documentId, version)\n setSuggestions(found)\n // Block n goes to the n-th signer when there are enough; otherwise left for the author.\n const groups = [...new Set(found.map((s) => s.group))]\n setAssign(Object.fromEntries(groups.map((g, i) => [g, signers[i]])))\n if (found.length === 0) notify('No signature blocks were found in this document.', 'info')\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Signature blocks could not be read')\n } finally {\n setFinding(false)\n }\n }\n\n const applySuggestions = () => {\n if (!suggestions) return\n const added = fieldsFromSuggestions(suggestions, assign, members)\n setFields((fs) => [...fs, ...added])\n const assigned = [...new Set(added.map((f) => f.signer))]\n setSigners((s) => [...s, ...assigned.filter((ext) => !s.includes(ext))])\n if (!current && assigned[0]) setCurrent(assigned[0])\n setSuggestions(null)\n notify(`${added.length} field${added.length === 1 ? '' : 's'} added.`, 'success')\n }\n\n const submit = async (send: boolean, invited = false) => {\n setError(null)\n const invitees = signers.filter((t) => isEmailSigner(t) && !members.has(t.toLowerCase()))\n if (send && invitees.length && !invited) {\n setConfirmInvite(invitees)\n return\n }\n try {\n if (send && invitees.length && me?.role === 'owner') {\n await invite.mutateAsync({ documentId, emails: invitees })\n }\n const request = await save.mutateAsync({\n documentId,\n version,\n fields,\n message: message.trim() || undefined,\n requestId: draft?.status === 'draft' ? draft.external_id : undefined,\n send,\n })\n const waiting = request.signers.filter((s) => s.progress === 'invited').length\n notify(\n send\n ? `Sent for signature to ${request.signers.length} signer${request.signers.length === 1 ? '' : 's'}.` +\n (waiting\n ? ` ${waiting} ${waiting === 1 ? 'is' : 'are'} asked once they join the workspace.`\n : '')\n : 'Draft saved.',\n 'success'\n )\n setConfirmInvite(null)\n onSaved(request)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'The request could not be saved')\n }\n }\n\n const renderPageOverlay = useCallback(\n ({ pageNumber }: { pageNumber: number }) => (\n <SignatureFieldsOverlay\n page={pageNumber - 1}\n fields={fields}\n colorOf={colorOf}\n labelOf={(f) => `${FIELD_TYPE_LABELS[f.type]} · ${nameOf(f.signer).split(' ')[0]}`}\n editable\n placing={current ? placing : null}\n selectedId={selectedId}\n onSelect={setSelectedId}\n onCreate={(box) => {\n if (!current || !placing) return\n const field: SignatureField = {\n id: newFieldId(),\n type: placing,\n page: pageNumber - 1,\n signer: current,\n required: true,\n ...box,\n }\n setFields((fs) => [...fs, field])\n setSelectedId(field.id)\n }}\n onChange={(id, box) => updateField(id, box)}\n onRemove={(id) => {\n setFields((fs) => fs.filter((f) => f.id !== id))\n setSelectedId(null)\n }}\n />\n ),\n [fields, colorOf, nameOf, current, placing, selectedId]\n )\n\n const groups = suggestions ? [...new Set(suggestions.map((s) => s.group))] : []\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"signature-request-editor\">\n <div className=\"space-y-2 border-b border-border px-3 py-2 text-sm\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium\">Signers</span>\n {signers.map((ext) => (\n <span\n key={ext}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border py-0.5 pr-1 pl-2',\n current === ext && 'bg-muted'\n )}\n style={{ borderColor: colorOf(ext) }}\n >\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1.5\"\n onClick={() => setCurrent(ext)}\n aria-pressed={current === ext}\n data-testid={`signer-chip-${ext}`}\n >\n <span className=\"size-2.5 rounded-full\" style={{ background: colorOf(ext) }} />\n {nameOf(ext)}\n {isInvitee(ext) && (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"signer-invited\">\n (to invite)\n </span>\n )}\n </button>\n <button\n type=\"button\"\n aria-label={`Remove ${nameOf(ext)}`}\n className=\"rounded-full p-0.5 hover:bg-accent\"\n onClick={() => removeSigner(ext)}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n <label className=\"inline-flex items-center gap-1 text-muted-foreground\">\n <UserPlus className=\"size-4\" aria-hidden />\n <span className=\"sr-only\">Add a signer</span>\n <select\n className={selectClass}\n value=\"\"\n onChange={(e) => addSigner(e.target.value)}\n disabled={candidates.isLoading}\n data-testid=\"signature-add-signer\"\n >\n <option value=\"\">\n {candidates.isLoading ? 'Loading members…' : 'Add a signer…'}\n </option>\n {people\n .filter((p) => !signers.includes(p.externalId))\n .map((p) => (\n <option key={p.externalId} value={p.externalId}>\n {p.name} ({p.email})\n </option>\n ))}\n </select>\n </label>\n <form\n className=\"inline-flex items-center gap-1\"\n onSubmit={(e) => {\n e.preventDefault()\n if (!isEmailSigner(newEmail)) return\n addSigner(newEmail)\n setNewEmail('')\n }}\n >\n <Input\n type=\"email\"\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n placeholder=\"Or anyone, by email\"\n aria-label=\"Signer's email\"\n className=\"h-8 w-52\"\n data-testid=\"signature-add-email\"\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={!isEmailSigner(newEmail)}\n aria-label=\"Add this signer\"\n data-testid=\"signature-add-email-submit\"\n >\n <MailPlus className=\"size-4\" aria-hidden />\n </Button>\n </form>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground\">\n {current ? `Place for ${nameOf(current)}:` : 'Add a signer, then place their fields.'}\n </span>\n {SIGNATURE_FIELD_TYPES.map((type) => (\n <Button\n key={type}\n type=\"button\"\n size=\"sm\"\n variant={placing === type && current ? 'default' : 'outline'}\n disabled={!current}\n onClick={() => setPlacing(placing === type ? null : type)}\n data-testid={`signature-place-${type}`}\n >\n {FIELD_TYPE_LABELS[type]}\n </Button>\n ))}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={findBlocks}\n disabled={finding}\n data-testid=\"signature-find-blocks\"\n >\n <ScanSearch className=\"mr-1 size-4\" aria-hidden />\n {finding ? 'Looking…' : 'Find signature blocks'}\n </Button>\n <span className=\"ml-auto flex items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => submit(false)}\n disabled={save.isPending || fields.length === 0}\n data-testid=\"signature-save-draft\"\n >\n Save draft\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => submit(true)}\n disabled={save.isPending || !!blocker}\n title={blocker ?? undefined}\n data-testid=\"signature-send\"\n >\n <Send className=\"mr-1 size-4\" aria-hidden />\n {save.isPending ? 'Sending…' : 'Send for signature'}\n </Button>\n </span>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n maxLength={2000}\n placeholder=\"Message to the signers (optional)\"\n className=\"h-8 max-w-md\"\n data-testid=\"signature-message\"\n />\n <span className=\"text-muted-foreground\" data-testid=\"signature-editor-summary\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n {blocker ? ` · ${blocker}` : ' · ready to send'}\n </span>\n </div>\n {selected && (\n <div\n className=\"flex flex-wrap items-center gap-3 rounded-md bg-muted px-2 py-1.5\"\n data-testid=\"signature-field-details\"\n >\n <PenLine className=\"size-4\" aria-hidden />\n <select\n className={selectClass}\n value={selected.type}\n aria-label=\"Field type\"\n onChange={(e) =>\n updateField(selected.id, { type: e.target.value as SignatureFieldType })\n }\n >\n {SIGNATURE_FIELD_TYPES.map((t) => (\n <option key={t} value={t}>\n {FIELD_TYPE_LABELS[t]}\n </option>\n ))}\n </select>\n <select\n className={selectClass}\n value={selected.signer}\n aria-label=\"Signer\"\n onChange={(e) => updateField(selected.id, { signer: e.target.value })}\n data-testid=\"signature-field-signer\"\n >\n {signers.map((ext) => (\n <option key={ext} value={ext}>\n {nameOf(ext)}\n </option>\n ))}\n </select>\n <span className=\"flex items-center gap-1.5\">\n <Checkbox\n id=\"signature-field-required\"\n checked={selected.required}\n onCheckedChange={(c) => updateField(selected.id, { required: c === true })}\n />\n <Label htmlFor=\"signature-field-required\" className=\"font-normal\">\n Required\n </Label>\n </span>\n </div>\n )}\n {suggestions && suggestions.length > 0 && (\n <div className=\"space-y-1.5 rounded-md border p-2\" data-testid=\"signature-suggestions\">\n <div className=\"font-medium\">\n Found {groups.length} signature block{groups.length === 1 ? '' : 's'}. Choose who\n signs each.\n </div>\n {groups.map((g) => {\n const inBlock = suggestions.filter((s) => s.group === g)\n const role = inBlock.find((s) => s.role)?.role\n return (\n <div key={g} className=\"flex flex-wrap items-center gap-2\">\n <span className=\"min-w-40\">\n {role ?? `Block ${g + 1}`}{' '}\n <span className=\"text-muted-foreground\">\n (p. {inBlock[0]!.page + 1}:{' '}\n {inBlock.map((s) => FIELD_TYPE_LABELS[s.type]).join(', ')})\n </span>\n </span>\n <select\n className={selectClass}\n value={assign[g] ?? ''}\n onChange={(e) => setAssign((a) => ({ ...a, [g]: e.target.value || undefined }))}\n data-testid={`signature-suggestion-signer-${g}`}\n >\n <option value=\"\">Skip</option>\n {people.map((p) => (\n <option key={p.externalId} value={p.externalId}>\n {p.name}\n </option>\n ))}\n {signers\n .filter((t) => !people.some((p) => p.externalId === t))\n .map((t) => (\n <option key={t} value={t}>\n {nameOf(t)}\n </option>\n ))}\n </select>\n </div>\n )\n })}\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={applySuggestions}\n disabled={!Object.values(assign).some(Boolean)}\n data-testid=\"signature-suggestions-apply\"\n >\n Add fields\n </Button>\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => setSuggestions(null)}>\n Dismiss\n </Button>\n </div>\n </div>\n )}\n {confirmInvite && (\n <div\n className=\"space-y-1.5 rounded-md border border-amber-300 bg-amber-50 p-2 text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100\"\n data-testid=\"signature-invite-confirm\"\n >\n <p>\n Not in this workspace yet: <strong>{confirmInvite.map(nameOf).join(', ')}</strong>.{' '}\n {me?.role === 'owner'\n ? 'They are invited as guests and asked to sign when they join.'\n : 'Ask a workspace owner to invite them: they are asked to sign when they join.'}\n </p>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => submit(true, true)}\n disabled={save.isPending || invite.isPending}\n data-testid=\"signature-invite-send\"\n >\n {me?.role === 'owner' ? 'Invite and send' : 'Send'}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setConfirmInvite(null)}\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n {error && (\n <p className=\"text-sm text-red-text\" role=\"alert\" data-testid=\"signature-editor-error\">\n {error}\n </p>\n )}\n </div>\n <div className=\"min-h-0 flex-1\">\n <PdfViewer {...viewerProps} file={file} renderPageOverlay={renderPageOverlay} />\n </div>\n </div>\n )\n}\n\nexport default SignatureRequestEditor\n"]}
1
+ {"version":3,"sources":["../../../src/document-tools/viewer/AnnotatedPdfViewer.tsx","../../../src/document-tools/viewer/SignaturePlacementViewer.tsx","../../../src/document-tools/viewer/SignatureFieldsOverlay.tsx","../../../src/document-tools/viewer/GuidedSigningViewer.tsx","../../../src/document-tools/viewer/SignatureRequestEditor.tsx"],"names":["KitPdfViewer","useDocumentTools","useIsOnline","useRef","useMemo","createMarkupStore","useAnnotationLayer","useEffect","useState","useCallback","fetchMarkupPdf","redactionLogCsv","freezePdfInBrowser","uploadFrozenCopy","redactionLogName","AnnotationPageOverlay","jsxs","jsx","AnnotationToolbar","SIGNED_LOCKED_REASON","Download","FreezeDialog","createMemoryStore","isLegibleSignatureBox","Button","toAppearance","FIELD_TYPE_LABELS","DEFAULT_FIELD_SIZE","cn","Fragment","X","useSignSignatureRequest","useSavedSignature","useStoreSavedSignature","useDeclineSignatureRequest","fieldsInSigningOrder","MARK_FIELD_TYPES","TYPED_SIGNATURE_STYLE","SigningError","ArrowRight","ArrowLeft","Check","Progress","AdoptSignatureDialog","ModalScaffold","Label","Input","intentText","useSignerCandidates","useSaveSignatureRequest","useInviteSigners","isEmailSigner","sendBlocker","signatureFieldSuggestions","splitSuggestions","fieldsFromSuggestions","suggestSignatureFields","groups","newFieldId","UserPlus","MailPlus","SIGNATURE_FIELD_TYPES","ScanSearch","Send","PenLine","Checkbox"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The PDF viewer with the document's MARKUP on it: toolbar, per-page overlay and the freeze dialog.\n *\n * The original is never touched. The marks are the version's markup on the server (native PDF\n * annotations in its `{doc}-markup.pdf`, see `createMarkupStore` in `@arbidocs/react/document-tools`),\n * with the document's own privacy:\n * a shared document has one markup that owners and collaborators edit and guests read; a private\n * one is its owner's. Edits autosave a few seconds after the last change and when the viewer\n * closes; colleagues' changes are merged in. \"Freeze\" renders a new PDF with the marks built in and\n * saves it as a separate document derived from the original (see `uploadFrozenCopy`). Load it\n * lazily: it brings in pdf-lib, which nothing else needs.\n *\n * Needs a `<DocumentToolsProvider>` (API client, user, notify, open, refresh) inside a React Query\n * `QueryClientProvider`. `viewer` is the PDF viewer to draw on (default: the kit `PdfViewer`); a host\n * passes its own binding of it, e.g. one that reports the visible page.\n *\n * `editing` off is the default reading view: the marks show and comments open, read-only, with no\n * toolbar. Unsaved edits still go out when switching from editing to reading.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type ComponentType } from 'react'\nimport {\n AnnotationPageOverlay,\n AnnotationToolbar,\n FreezeDialog,\n redactionLogCsv,\n useAnnotationLayer,\n type AnnotationController,\n type AnnotationStore,\n type FreezeChoices,\n} from '@arbidocs/react/annotations'\nimport { freezePdfInBrowser } from '@arbidocs/react/annotations/freeze'\nimport {\n createMarkupStore,\n fetchMarkupPdf,\n SIGNED_LOCKED_REASON,\n redactionLogName,\n uploadFrozenCopy,\n useDocumentTools,\n useIsOnline,\n type MarkupSnapshot,\n} from '@arbidocs/react/document-tools'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport { Download } from 'lucide-react'\n\n/** Autosave this long after the last change (the design's \"a few seconds\"). */\nexport const MARKUP_AUTOSAVE_MS = 2500\n/** Look for colleagues' changes this often while idle. */\nexport const MARKUP_PULL_MS = 20_000\n\n/** The PDF viewer the marks are drawn on: the kit viewer's props, with a page-overlay slot. */\nexport type DocumentPdfViewer = ComponentType<PdfViewerProps>\n\nexport interface AnnotatedPdfViewerProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay'\n> {\n file: Blob\n documentId: string\n /** The version on screen when it is not the current one (its markup is shown, read-only). */\n version?: number\n fileName: string | null | undefined\n /** The original's workspace sharing and folder, which the frozen copy takes. */\n shared?: boolean\n folder?: string | null\n /** Annotate mode (toolbar, tools). Off: the marks are shown read-only. Default on. */\n editing?: boolean\n /** After each save: the markup's revision and how many marks it holds. */\n onMarkupChange?: (snapshot: MarkupSnapshot) => void\n /** Where the layer lives; defaults to the version's markup on the server. */\n store?: AnnotationStore\n /** The PDF viewer to draw on. Default: the kit `PdfViewer` from `@arbidocs/react/viewers`. */\n viewer?: DocumentPdfViewer\n /**\n * The version is signed, so locked: marks still go in the markup layer, but there is no\n * \"Download with markup\" (they are never written into its PDF).\n */\n signed?: boolean\n /**\n * One's saved signature or initials to place (PDF tab › My signature): arms the stamp tool with\n * the picture; the next click on a page places it. A new `key` arms it again.\n */\n placeStamp?: { image: string; label: string; key: number } | null\n}\n\nconst FALLBACK_AUTHOR = 'You'\n\n/** The same controller, view only: what the overlay gets outside annotate mode. */\nfunction viewOnly(controller: AnnotationController): AnnotationController {\n return { ...controller, readOnly: true, tool: 'select', setTool: () => {} }\n}\n\nexport function AnnotatedPdfViewer({\n file,\n documentId,\n version,\n fileName,\n shared = false,\n folder,\n editing = true,\n onMarkupChange,\n store: storeOverride,\n viewer: PdfViewer = KitPdfViewer,\n signed = false,\n placeStamp = null,\n ...viewerProps\n}: AnnotatedPdfViewerProps) {\n const { client, user, notify, saveFile, uploadDocument, openDocument, onDocumentsChanged } =\n useDocumentTools()\n const online = useIsOnline()\n const onChangeRef = useRef(onMarkupChange)\n onChangeRef.current = onMarkupChange\n const store = useMemo(\n () =>\n storeOverride ??\n createMarkupStore({\n version,\n client,\n onSaved: (snapshot) => onChangeRef.current?.(snapshot),\n }),\n // A new store per document version: its revision and tombstones belong to that markup.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [storeOverride, client, documentId, version]\n )\n const author = user?.name || FALLBACK_AUTHOR\n const controller = useAnnotationLayer({\n documentId,\n store,\n author,\n autosaveMs: MARKUP_AUTOSAVE_MS,\n online,\n pullMs: MARKUP_PULL_MS,\n // An older version is read-only; the hook also asks the store (a guest cannot write).\n readOnly: version !== undefined,\n })\n const shown = useMemo(\n () => (editing && !controller.readOnly ? controller : viewOnly(controller)),\n [editing, controller]\n )\n\n // Place my signature: the stamp tool, armed with the picture.\n const { setSettings, setTool } = controller\n useEffect(() => {\n if (!placeStamp) return\n setSettings({ stampImage: { image: placeStamp.image, label: placeStamp.label } })\n setTool('stamp')\n // eslint-disable-next-line react-hooks/exhaustive-deps -- once per request (its key)\n }, [placeStamp?.key])\n\n // Leaving annotate mode: write what is still waiting on the autosave timer.\n const { flush } = controller\n useEffect(() => {\n if (!editing) void flush()\n }, [editing, flush])\n\n // Edits that cannot be saved right now (offline, or the server refused): warn before leaving.\n const atRisk = controller.dirty && (controller.offline || !!controller.error)\n useEffect(() => {\n if (!atRisk) return\n const warn = (e: BeforeUnloadEvent) => {\n e.preventDefault()\n e.returnValue = ''\n }\n window.addEventListener('beforeunload', warn)\n return () => window.removeEventListener('beforeunload', warn)\n }, [atRisk])\n\n const [freezeOpen, setFreezeOpen] = useState(false)\n const [busy, setBusy] = useState(false)\n const [progress, setProgress] = useState<{ done: number; total: number } | null>(null)\n const [error, setError] = useState<string | null>(null)\n\n const openFreeze = useCallback(() => {\n setError(null)\n setFreezeOpen(true)\n }, [])\n\n const downloadWithMarkup = useCallback(async () => {\n try {\n await controller.flush()\n const { blob, fileName: name } = await fetchMarkupPdf(client, documentId, version)\n saveFile(blob, name)\n } catch (e) {\n notify(e instanceof Error ? e.message : 'The markup could not be downloaded', 'error')\n }\n }, [controller, client, documentId, version, saveFile, notify])\n\n const handleFreeze = useCallback(\n async (choices: FreezeChoices) => {\n setBusy(true)\n setError(null)\n try {\n await controller.flush()\n // The log is taken from the layer as it is frozen; it never holds the redacted text.\n const log = choices.redactionLog ? redactionLogCsv(controller.layer) : null\n const bytes = new Uint8Array(await file.arrayBuffer())\n const result = await freezePdfInBrowser(bytes, controller.layer, {\n ...choices,\n author,\n onProgress: (done, total) => setProgress({ done, total }),\n })\n const redacted = result.provenance.redactions.count > 0\n const newDocId = await uploadFrozenCopy(\n uploadDocument,\n result.bytes,\n { documentId, fileName, shared, folder },\n redacted\n )\n if (log) saveFile(new Blob([log], { type: 'text/csv' }), redactionLogName(fileName))\n if (newDocId) {\n // The copy joins the list beside the original, which stays where it was.\n await onDocumentsChanged?.([newDocId], 'copy')\n openDocument?.(newDocId)\n }\n notify(\n redacted\n ? 'Redacted copy saved as a new document'\n : 'Annotated copy saved as a new document',\n 'success',\n { description: 'The original is unchanged and still in your files.' }\n )\n for (const warning of result.warnings) notify(warning, 'warning')\n setFreezeOpen(false)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The copy could not be created')\n } finally {\n setBusy(false)\n setProgress(null)\n }\n },\n [\n controller,\n author,\n file,\n fileName,\n documentId,\n shared,\n folder,\n uploadDocument,\n saveFile,\n notify,\n onDocumentsChanged,\n openDocument,\n ]\n )\n\n const renderPageOverlay = useCallback(\n ({ pageNumber, pageWidthPt }: { pageNumber: number; pageWidthPt: number | undefined }) => (\n <AnnotationPageOverlay controller={shown} pageNumber={pageNumber} pageWidthPt={pageWidthPt} />\n ),\n [shown]\n )\n\n const hasMarks = controller.layer.annotations.length > 0\n\n return (\n <div\n className=\"flex h-full min-h-0 flex-col\"\n data-testid=\"annotated-pdf-viewer\"\n data-mode={editing ? 'edit' : 'view'}\n data-markup-status={controller.status}\n >\n {editing && (\n <AnnotationToolbar\n controller={controller}\n onFreeze={controller.readOnly ? undefined : openFreeze}\n actions={\n hasMarks && !controller.dirty && version === undefined ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:cursor-not-allowed disabled:text-muted-foreground disabled:no-underline pointer-coarse:min-h-11\"\n data-testid=\"annotation-download-markup\"\n title={\n signed\n ? SIGNED_LOCKED_REASON\n : 'Download the PDF with these annotations (opens in Acrobat or Preview)'\n }\n disabled={signed}\n onClick={() => void downloadWithMarkup()}\n >\n <Download size={14} />\n Download with markup\n </button>\n ) : null\n }\n />\n )}\n {!editing && controller.status === 'error' && (\n <div className=\"border-b px-3 py-1.5 text-xs text-destructive\" data-testid=\"markup-error\">\n The markup could not be loaded: {controller.error}\n </div>\n )}\n <div className=\"min-h-0 flex-1\">\n <PdfViewer {...viewerProps} file={file} renderPageOverlay={renderPageOverlay} />\n </div>\n {editing && (\n <FreezeDialog\n open={freezeOpen}\n onOpenChange={setFreezeOpen}\n controller={controller}\n onConfirm={handleFreeze}\n busy={busy}\n progress={progress}\n error={error}\n />\n )}\n </div>\n )\n}\n\nexport default AnnotatedPdfViewer\n","/**\n * Choose where a signature goes: the PDF with the annotation overlay's box tool, kept in memory\n * only. The box is not an annotation; it is handed to the Sign dialog, and the backend draws the\n * signature there. Needs no `<DocumentToolsProvider>`.\n */\n\nimport { useCallback, useEffect, useMemo, type ReactElement } from 'react'\nimport {\n AnnotationPageOverlay,\n createMemoryStore,\n useAnnotationLayer,\n type BoxAnnotation,\n} from '@arbidocs/react/annotations'\nimport {\n isLegibleSignatureBox,\n toAppearance,\n type SignatureAppearance,\n} from '@arbidocs/react/document-tools'\nimport { Button } from '@arbidocs/react/ui'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport type { DocumentPdfViewer } from './AnnotatedPdfViewer'\n\nconst SIGNATURE_BOX_COLOR = '#1c7ed6'\n\nexport interface SignaturePlacementViewerProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay'\n> {\n file: Blob\n documentId: string\n onCancel: () => void\n /** The chosen box, or undefined for the default spot (bottom of the last page). */\n onContinue: (appearance: SignatureAppearance | undefined) => void\n /** The PDF viewer to draw on. Default: the kit `PdfViewer` from `@arbidocs/react/viewers`. */\n viewer?: DocumentPdfViewer\n}\n\nexport function SignaturePlacementViewer({\n file,\n documentId,\n onCancel,\n onContinue,\n viewer: PdfViewer = KitPdfViewer,\n ...viewerProps\n}: SignaturePlacementViewerProps): ReactElement {\n const store = useMemo(() => createMemoryStore(), [])\n const controller = useAnnotationLayer({ documentId, store, author: 'signature' })\n const boxes = controller.layer.annotations.filter((a): a is BoxAnnotation => a.kind === 'box')\n const box = boxes.at(-1)\n const isTooSmall = box !== undefined && !isLegibleSignatureBox(box.rect)\n\n // Draw with the box tool; once there is a box, select it so it can be moved or resized.\n useEffect(() => {\n if (controller.status !== 'ready') return\n controller.setSettings({ colors: { ...controller.settings.colors, box: SIGNATURE_BOX_COLOR } })\n // eslint-disable-next-line react-hooks/exhaustive-deps -- once, when the layer is ready\n }, [controller.status])\n useEffect(() => {\n if (controller.status !== 'ready') return\n // One signature box: drawing another replaces it.\n for (const old of boxes.slice(0, -1)) controller.remove(old.id)\n if (box) {\n controller.select(box.id)\n controller.setTool('select')\n } else {\n controller.setTool('box')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- react to the boxes only\n }, [controller.status, boxes.length, box?.id])\n\n const redraw = useCallback(() => {\n if (box) controller.remove(box.id)\n controller.setTool('box')\n }, [box, controller])\n\n const renderPageOverlay = useCallback(\n ({ pageNumber, pageWidthPt }: { pageNumber: number; pageWidthPt: number | undefined }) => (\n <AnnotationPageOverlay\n controller={controller}\n pageNumber={pageNumber}\n pageWidthPt={pageWidthPt}\n />\n ),\n [controller]\n )\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"signature-placement-viewer\">\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2 text-sm\">\n <span className=\"mr-auto text-muted-foreground\" data-testid=\"signature-placement-hint\">\n {isTooSmall\n ? 'This box is small: the signature will print small. Make it larger to keep it legible.'\n : box\n ? 'Move or resize the box, then continue.'\n : 'Drag a box where your signature goes, or continue to sign at the end.'}\n </span>\n {box && (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={redraw}>\n Redraw\n </Button>\n )}\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => onContinue(box ? toAppearance(box) : undefined)}\n data-testid=\"signature-placement-continue\"\n >\n Continue\n </Button>\n </div>\n <div className=\"min-h-0 flex-1\">\n <PdfViewer {...viewerProps} file={file} renderPageOverlay={renderPageOverlay} />\n </div>\n </div>\n )\n}\n\nexport default SignaturePlacementViewer\n","/**\n * The signature fields of one PDF page, drawn over it. Coordinates are fractions of the page as\n * shown (origin top-left), pages 0-based like the API; the kit viewer's overlay fills the page box.\n *\n * - `editable`: the author's view. With a field type chosen, a click drops a field of the default\n * size and a drag draws one; a field is selected by a click, moved by dragging it and resized by\n * its corner handle; the selected one has a remove button.\n * - otherwise the signer's view: fields are buttons; `renderContent` shows what was applied.\n */\n\nimport { useRef, useState, type PointerEvent, type ReactElement, type ReactNode } from 'react'\nimport { X } from 'lucide-react'\nimport {\n DEFAULT_FIELD_SIZE,\n FIELD_TYPE_LABELS,\n type SignatureField,\n type SignatureFieldType,\n} from '@arbidocs/react/document-tools'\nimport { cn } from '@arbidocs/react/ui'\n\n/** One colour per signer, in the order they were added. */\nexport const SIGNER_COLORS = ['#1c7ed6', '#e8590c', '#2f9e44', '#9c36b5', '#c2255c', '#0c8599']\n\nconst MIN_DRAG = 0.01\n\ntype Box = { x: number; y: number; width: number; height: number }\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v))\nconst round = (v: number) => Math.round(v * 10000) / 10000\n\nfunction fit(box: Box): Box {\n const width = clamp(box.width, 0.02, 1)\n const height = clamp(box.height, 0.015, 1)\n return {\n x: round(clamp(box.x, 0, 1 - width)),\n y: round(clamp(box.y, 0, 1 - height)),\n width: round(width),\n height: round(height),\n }\n}\n\ntype Drag =\n | { kind: 'create'; startX: number; startY: number; box: Box }\n | { kind: 'move' | 'resize'; id: string; startX: number; startY: number; origin: Box }\n\nexport interface SignatureFieldsOverlayProps {\n /** 0-based page index this overlay covers. */\n page: number\n fields: SignatureField[]\n colorOf: (signer: string) => string\n labelOf?: (field: SignatureField) => string\n editable?: boolean\n /** Editing: the type a click or drag on the page creates (null: none, selection only). */\n placing?: SignatureFieldType | null\n selectedId?: string | null\n onSelect?: (id: string | null) => void\n onCreate?: (box: Box) => void\n onChange?: (id: string, box: Box) => void\n onRemove?: (id: string) => void\n /** Signing: the field the signer is on. */\n activeId?: string | null\n onActivate?: (id: string) => void\n /** Signing: what a completed field shows (the adopted signature, the date…). */\n renderContent?: (field: SignatureField) => ReactNode\n}\n\nexport function SignatureFieldsOverlay({\n page,\n fields,\n colorOf,\n labelOf = (f) => FIELD_TYPE_LABELS[f.type],\n editable = false,\n placing = null,\n selectedId = null,\n onSelect,\n onCreate,\n onChange,\n onRemove,\n activeId = null,\n onActivate,\n renderContent,\n}: SignatureFieldsOverlayProps): ReactElement {\n const ref = useRef<HTMLDivElement>(null)\n const [drag, setDrag] = useState<Drag | null>(null)\n const [preview, setPreview] = useState<Box | null>(null)\n const onPage = fields.filter((f) => f.page === page)\n\n const point = (e: PointerEvent) => {\n const r = ref.current!.getBoundingClientRect()\n return { x: (e.clientX - r.left) / r.width, y: (e.clientY - r.top) / r.height }\n }\n\n const startCreate = (e: PointerEvent<HTMLDivElement>) => {\n if (!editable || e.target !== e.currentTarget || e.button !== 0) return\n if (!placing) {\n onSelect?.(null)\n return\n }\n const p = point(e)\n e.currentTarget.setPointerCapture?.(e.pointerId)\n setDrag({ kind: 'create', startX: p.x, startY: p.y, box: { ...p, width: 0, height: 0 } })\n }\n\n const startField = (e: PointerEvent, field: SignatureField, kind: 'move' | 'resize') => {\n if (!editable || e.button !== 0) return\n e.stopPropagation()\n onSelect?.(field.id)\n const p = point(e)\n ref.current?.setPointerCapture?.(e.pointerId)\n setDrag({\n kind,\n id: field.id,\n startX: p.x,\n startY: p.y,\n origin: { x: field.x, y: field.y, width: field.width, height: field.height },\n })\n }\n\n const onMove = (e: PointerEvent) => {\n if (!drag) return\n const p = point(e)\n const dx = p.x - drag.startX\n const dy = p.y - drag.startY\n if (drag.kind === 'create') {\n setPreview({\n x: Math.min(p.x, drag.startX),\n y: Math.min(p.y, drag.startY),\n width: Math.abs(dx),\n height: Math.abs(dy),\n })\n } else if (drag.kind === 'move') {\n setPreview(fit({ ...drag.origin, x: drag.origin.x + dx, y: drag.origin.y + dy }))\n } else {\n setPreview(\n fit({ ...drag.origin, width: drag.origin.width + dx, height: drag.origin.height + dy })\n )\n }\n }\n\n const onUp = (e: PointerEvent) => {\n if (!drag) return\n const p = point(e)\n if (drag.kind === 'create' && placing) {\n const drawn = Math.abs(p.x - drag.startX) > MIN_DRAG && Math.abs(p.y - drag.startY) > MIN_DRAG\n const size = DEFAULT_FIELD_SIZE[placing]\n onCreate?.(\n fit(\n drawn && preview\n ? preview\n : { x: drag.startX - size.width / 2, y: drag.startY - size.height / 2, ...size }\n )\n )\n } else if (drag.kind !== 'create' && preview) {\n onChange?.(drag.id, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'absolute inset-0',\n editable && placing && 'cursor-crosshair',\n !editable && 'pointer-events-none'\n )}\n onPointerDown={startCreate}\n onPointerMove={onMove}\n onPointerUp={onUp}\n onPointerCancel={() => {\n setDrag(null)\n setPreview(null)\n }}\n data-testid={`signature-fields-page-${page}`}\n >\n {onPage.map((field) => {\n const dragging = drag && drag.kind !== 'create' && drag.id === field.id && preview\n const box = dragging ? preview! : field\n const color = colorOf(field.signer)\n const selected = editable && selectedId === field.id\n const active = !editable && activeId === field.id\n const content = renderContent?.(field)\n return (\n <div\n key={field.id}\n role={editable ? undefined : 'button'}\n tabIndex={editable ? undefined : 0}\n aria-label={editable ? undefined : `${labelOf(field)}${content ? ' (done)' : ''}`}\n className={cn(\n 'pointer-events-auto absolute flex items-center justify-center overflow-visible rounded-sm border-2 text-[11px] font-medium select-none',\n editable ? 'cursor-move' : 'cursor-pointer',\n active && 'ring-4 ring-offset-1 motion-safe:animate-pulse',\n selected && 'ring-2 ring-offset-1'\n )}\n style={{\n left: `${box.x * 100}%`,\n top: `${box.y * 100}%`,\n width: `${box.width * 100}%`,\n height: `${box.height * 100}%`,\n borderColor: color,\n borderStyle: content ? 'solid' : 'dashed',\n backgroundColor: content ? 'transparent' : `${color}22`,\n color,\n ['--tw-ring-color' as string]: color,\n }}\n onPointerDown={(e) => startField(e, field, 'move')}\n onClick={() => !editable && onActivate?.(field.id)}\n onKeyDown={(e) => {\n if (!editable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n onActivate?.(field.id)\n }\n if (editable && selected && (e.key === 'Delete' || e.key === 'Backspace')) {\n onRemove?.(field.id)\n }\n }}\n data-testid={`signature-field-${field.id}`}\n data-field-type={field.type}\n data-field-done={content ? 'true' : undefined}\n >\n {content ?? (\n <span className=\"truncate px-1\">\n {labelOf(field)}\n {field.required ? '' : ' (optional)'}\n </span>\n )}\n {selected && (\n <>\n <button\n type=\"button\"\n aria-label=\"Remove field\"\n className=\"absolute -top-2.5 -right-2.5 flex size-5 items-center justify-center rounded-full border bg-background text-foreground shadow\"\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => onRemove?.(field.id)}\n data-testid=\"signature-field-remove\"\n >\n <X className=\"size-3\" />\n </button>\n <span\n aria-hidden\n className=\"absolute -right-1.5 -bottom-1.5 size-3 cursor-nwse-resize rounded-sm border bg-background\"\n style={{ borderColor: color }}\n onPointerDown={(e) => startField(e, field, 'resize')}\n data-testid=\"signature-field-resize\"\n />\n </>\n )}\n </div>\n )\n })}\n {drag?.kind === 'create' && preview && (\n <div\n className=\"pointer-events-none absolute rounded-sm border-2 border-dashed\"\n style={{\n left: `${preview.x * 100}%`,\n top: `${preview.y * 100}%`,\n width: `${preview.width * 100}%`,\n height: `${preview.height * 100}%`,\n borderColor: '#868e96',\n }}\n />\n )}\n </div>\n )\n}\n","/**\n * Sign a document you were asked to sign, field by field. The viewer takes the signer to each of\n * their fields in turn (page by page, scrolled into view, \"Field 3 of 7\"); they adopt a signature\n * once and click each field to apply it (the date signed and their printed name fill in on\n * adoption). Finishing re-enters the password and signs every field at once; the last signer's\n * signature completes the request and the signed copy becomes the document's next version.\n * Needs a `<DocumentToolsProvider>` with a `user` inside a React Query `QueryClientProvider`.\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type FormEvent,\n type ReactElement,\n} from 'react'\nimport { ArrowLeft, ArrowRight, Check } from 'lucide-react'\nimport {\n FIELD_TYPE_LABELS,\n MARK_FIELD_TYPES,\n SigningError,\n fieldsInSigningOrder,\n intentText,\n useDeclineSignatureRequest,\n useDocumentTools,\n useSavedSignature,\n useSignSignatureRequest,\n useStoreSavedSignature,\n type SignRequestSignResponse,\n type SignatureField,\n type SignatureRequest,\n} from '@arbidocs/react/document-tools'\nimport { Button, Input, Label, Progress } from '@arbidocs/react/ui'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport { ModalScaffold } from '../../settings/ModalScaffold'\nimport {\n AdoptSignatureDialog,\n TYPED_SIGNATURE_STYLE,\n type AdoptedMark,\n} from '../AdoptSignatureDialog'\nimport type { DocumentPdfViewer } from './AnnotatedPdfViewer'\nimport { SignatureFieldsOverlay } from './SignatureFieldsOverlay'\n\nexport interface GuidedSigningViewerProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay' | 'currentPage' | 'scrollTrigger'\n> {\n /** The PDF of the request's version (`GET /view?version=`): what is signed. */\n file: Blob\n request: SignatureRequest\n /** The signer (usr-*): their fields are the ones walked through. */\n signer: string\n onClose: () => void\n onSigned?: (result: SignRequestSignResponse) => void\n viewer?: DocumentPdfViewer\n}\n\nconst INK = '#1c7ed6'\n\n/** \"19 October 2026\", as the signed PDF writes the date. */\nexport function signingDate(date = new Date()): string {\n return `${date.getDate()} ${date.toLocaleString('en-GB', { month: 'long' })} ${date.getFullYear()}`\n}\n\nexport function GuidedSigningViewer({\n file,\n request,\n signer,\n onClose,\n onSigned,\n viewer: PdfViewer = KitPdfViewer,\n ...viewerProps\n}: GuidedSigningViewerProps): ReactElement {\n const { user, notify } = useDocumentTools()\n const sign = useSignSignatureRequest()\n const savedSignature = useSavedSignature()\n const storeSignature = useStoreSavedSignature()\n const decline = useDeclineSignatureRequest()\n const mine = useMemo(() => fieldsInSigningOrder(request.fields, signer), [request.fields, signer])\n const [mark, setMark] = useState<AdoptedMark | null>(null)\n const [applied, setApplied] = useState<Set<string>>(new Set())\n const [index, setIndex] = useState(-1)\n const [page, setPage] = useState(1)\n const [trigger, setTrigger] = useState(0)\n const [adoptFor, setAdoptFor] = useState<SignatureField | null>(null)\n const [finishing, setFinishing] = useState(false)\n const [password, setPassword] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [declining, setDeclining] = useState(false)\n const [declineReason, setDeclineReason] = useState('')\n const scrollTimer = useRef<number | undefined>(undefined)\n\n const required = mine.filter((f) => f.required)\n const done = mine.filter((f) => applied.has(f.id)).length\n const ready = required.every((f) => applied.has(f.id))\n const current = index >= 0 ? mine[index] : undefined\n\n useEffect(() => () => window.clearTimeout(scrollTimer.current), [])\n\n const goTo = useCallback(\n (i: number) => {\n const field = mine[i]\n if (!field) return\n setIndex(i)\n setPage(field.page + 1)\n setTrigger((t) => t + 1)\n // Once the page is in view, bring the field itself to the middle of the screen.\n window.clearTimeout(scrollTimer.current)\n scrollTimer.current = window.setTimeout(() => {\n document\n .querySelector(`[data-testid=\"signature-field-${field.id}\"]`)\n ?.scrollIntoView({ block: 'center', behavior: 'smooth' })\n }, 300)\n },\n [mine]\n )\n\n /** The next field still to do after `from` (wrapping), or -1 when every field is done. */\n const nextOpen = (from: number, filled: Set<string>) => {\n for (let k = 1; k <= mine.length; k++) {\n const i = (from + k) % mine.length\n if (!filled.has(mine[i]!.id)) return i\n }\n return -1\n }\n\n const apply = (field: SignatureField, base: Set<string> = applied) => {\n const next = new Set(base)\n next.add(field.id)\n setApplied(next)\n const i = nextOpen(mine.indexOf(field), next)\n if (i >= 0) goTo(i)\n else setIndex(mine.indexOf(field))\n }\n\n const activate = (id: string) => {\n const field = mine.find((f) => f.id === id)\n if (!field) return\n setIndex(mine.indexOf(field))\n if (applied.has(id)) {\n // A second click takes it back off.\n setApplied((a) => {\n const next = new Set(a)\n next.delete(id)\n return next\n })\n return\n }\n if (!mark) {\n setAdoptFor(field)\n return\n }\n apply(field)\n }\n\n const onAdopt = (adopted: AdoptedMark) => {\n setMark(adopted)\n const field = adoptFor\n setAdoptFor(null)\n // The date signed and the printed name need no click: they fill in from what was adopted.\n const filled = new Set(applied)\n for (const f of mine)\n if (f.required && (f.type === 'date' || f.type === 'name')) filled.add(f.id)\n if (field) apply(field, filled)\n else setApplied(filled)\n }\n\n const renderContent = useCallback(\n (field: SignatureField) => {\n if (!applied.has(field.id) || !mark) return null\n const { adopted, signatureUrl, initialsUrl } = mark\n const image =\n field.type === 'signature' ? signatureUrl : field.type === 'initials' ? initialsUrl : null\n if (image) {\n return (\n <img\n src={image}\n alt={field.type === 'signature' ? 'Your signature' : 'Your initials'}\n className=\"h-full w-full object-contain\"\n />\n )\n }\n const text =\n field.type === 'signature'\n ? adopted.name\n : field.type === 'initials'\n ? adopted.initials\n : field.type === 'date'\n ? signingDate()\n : adopted.name\n const typed = MARK_FIELD_TYPES.includes(field.type)\n return (\n <span\n className=\"flex h-full w-full items-center px-1 whitespace-nowrap [container-type:size]\"\n style={typed ? TYPED_SIGNATURE_STYLE : { color: '#1a1a26' }}\n >\n <span style={{ fontSize: typed ? '70cqh' : '62cqh', lineHeight: 1 }}>{text}</span>\n </span>\n )\n },\n [applied, mark]\n )\n\n const renderPageOverlay = useCallback(\n ({ pageNumber }: { pageNumber: number }) => (\n <SignatureFieldsOverlay\n page={pageNumber - 1}\n fields={mine}\n colorOf={() => INK}\n labelOf={(f) =>\n MARK_FIELD_TYPES.includes(f.type)\n ? `Sign: ${FIELD_TYPE_LABELS[f.type]}`\n : FIELD_TYPE_LABELS[f.type]\n }\n activeId={current?.id ?? null}\n onActivate={activate}\n renderContent={renderContent}\n />\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activate reads the latest state\n [mine, current?.id, renderContent, mark, applied]\n )\n\n const submit = async (e: FormEvent) => {\n e.preventDefault()\n if (!mark || !user?.email) return\n setError(null)\n try {\n const result = await sign.mutateAsync({\n request,\n pdfBlob: file,\n email: user.email,\n password,\n adopted: mark.adopted,\n fields: mine.filter((f) => applied.has(f.id)).map((f) => f.id),\n })\n setPassword('')\n setFinishing(false)\n notify(\n result.completed\n ? `Signed. Everyone has signed: the signed copy is version ${result.signed_version}.`\n : 'Signed. The others are still to sign; you will see the signed copy when they have.',\n 'success'\n )\n onSigned?.(result)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Signing failed')\n if (err instanceof SigningError && err.reason === 'stale') setFinishing(false)\n }\n }\n\n const onDecline = async (e: FormEvent) => {\n e.preventDefault()\n try {\n await decline.mutateAsync({ requestId: request.external_id, reason: declineReason.trim() })\n setDeclining(false)\n notify('You declined to sign. The sender has been told.', 'info')\n onClose()\n } catch (err) {\n notify(err instanceof Error ? err.message : 'Could not decline', 'error')\n }\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"guided-signing-viewer\">\n <div className=\"space-y-2 border-b border-border px-3 py-2 text-sm\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {index < 0 ? (\n <span className=\"mr-auto\" data-testid=\"guided-signing-intro\">\n You are asked to complete {mine.length} field{mine.length === 1 ? '' : 's'}.\n {request.message ? (\n <span className=\"text-muted-foreground\"> “{request.message}”</span>\n ) : null}\n </span>\n ) : (\n <span className=\"mr-auto font-medium\" data-testid=\"guided-signing-position\">\n Field {index + 1} of {mine.length}: {current ? FIELD_TYPE_LABELS[current.type] : ''}\n {current && !current.required ? ' (optional)' : ''}\n <span className=\"ml-2 font-normal text-muted-foreground\">\n Page {current ? current.page + 1 : ''}\n </span>\n </span>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setDeclining(true)}\n data-testid=\"guided-signing-decline\"\n >\n Decline\n </Button>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onClose}>\n Close\n </Button>\n {index < 0 ? (\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => goTo(0)}\n data-testid=\"guided-signing-start\"\n >\n Start\n <ArrowRight className=\"ml-1 size-4\" aria-hidden />\n </Button>\n ) : (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => goTo(Math.max(0, index - 1))}\n disabled={index === 0}\n aria-label=\"Previous field\"\n >\n <ArrowLeft className=\"size-4\" aria-hidden />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => goTo(Math.min(mine.length - 1, index + 1))}\n disabled={index >= mine.length - 1}\n aria-label=\"Next field\"\n data-testid=\"guided-signing-next\"\n >\n <ArrowRight className=\"size-4\" aria-hidden />\n </Button>\n {current && !applied.has(current.id) && (\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => activate(current.id)}\n data-testid=\"guided-signing-apply\"\n >\n {MARK_FIELD_TYPES.includes(current.type) ? 'Sign here' : 'Fill in'}\n </Button>\n )}\n </>\n )}\n <Button\n type=\"button\"\n size=\"sm\"\n variant={ready ? 'default' : 'outline'}\n disabled={!ready || !mark}\n onClick={() => setFinishing(true)}\n data-testid=\"guided-signing-finish\"\n >\n <Check className=\"mr-1 size-4\" aria-hidden />\n Finish\n </Button>\n </div>\n <div className=\"flex items-center gap-3\">\n <Progress\n value={mine.length ? (done / mine.length) * 100 : 0}\n className=\"h-1.5 max-w-xs\"\n />\n <span className=\"text-muted-foreground\" data-testid=\"guided-signing-progress\">\n {done} of {mine.length} done\n </span>\n </div>\n </div>\n <div className=\"min-h-0 flex-1\">\n <PdfViewer\n {...viewerProps}\n file={file}\n currentPage={page}\n scrollTrigger={trigger}\n renderPageOverlay={renderPageOverlay}\n />\n </div>\n <AdoptSignatureDialog\n open={!!adoptFor}\n onOpenChange={(open) => !open && setAdoptFor(null)}\n defaultName={user?.name ?? ''}\n onAdopt={onAdopt}\n saved={savedSignature.data ?? null}\n onSave={async (signature) => void (await storeSignature.mutateAsync(signature))}\n />\n <ModalScaffold\n open={declining}\n onOpenChange={(open) => !decline.isPending && setDeclining(open)}\n title=\"Decline to sign\"\n description=\"The request ends for everyone and the sender is told. The document is unchanged.\"\n showDescription\n testId=\"guided-signing-decline-dialog\"\n >\n <form onSubmit={onDecline}>\n <ModalScaffold.Body>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"guided-decline-reason\">Reason (optional)</Label>\n <Input\n id=\"guided-decline-reason\"\n value={declineReason}\n maxLength={1000}\n onChange={(e) => setDeclineReason(e.target.value)}\n />\n </div>\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button type=\"button\" variant=\"outline\" onClick={() => setDeclining(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"destructive\" disabled={decline.isPending}>\n Decline\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n <ModalScaffold\n open={finishing}\n onOpenChange={(open) => !sign.isPending && setFinishing(open)}\n title=\"Sign the document\"\n description=\"Confirm with your password. Your signature is applied to every field you completed.\"\n showDescription\n testId=\"guided-signing-confirm\"\n >\n <form onSubmit={submit}>\n <ModalScaffold.Body>\n {mark && (\n <blockquote className=\"border-l-2 border-border pl-3 text-sm text-muted-foreground\">\n {intentText({ name: mark.adopted.name })}\n </blockquote>\n )}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"guided-sign-password\">Password</Label>\n <Input\n id=\"guided-sign-password\"\n type=\"password\"\n autoComplete=\"current-password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n data-testid=\"guided-signing-password\"\n required\n />\n </div>\n {error && (\n <p className=\"text-sm text-red-text\" role=\"alert\" data-testid=\"guided-signing-error\">\n {error}\n </p>\n )}\n </ModalScaffold.Body>\n <ModalScaffold.Footer>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setFinishing(false)}\n disabled={sign.isPending}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={sign.isPending || !password}\n data-testid=\"guided-signing-submit\"\n >\n {sign.isPending ? 'Signing…' : 'Sign'}\n </Button>\n </ModalScaffold.Footer>\n </form>\n </ModalScaffold>\n </div>\n )\n}\n\nexport default GuidedSigningViewer\n","/**\n * Prepare a document for signature: add the signers, then place each field (signature, initials,\n * date signed, name) where it goes on the PDF of the version shown, for the signer it is for.\n * A Word document's own signature fields (Insert › Signature field) are placed on opening, each\n * for the signer it names. \"Find signature blocks\" proposes fields from the document's execution\n * blocks (\"Director\", \"Witness name\", \"[Signature]\", \"Date:\"); the author assigns a signer per\n * block. A signer is a workspace member or anyone by email: someone not in the workspace is\n * invited (as a guest) when it is sent, and signs once they join. Save it as a draft or send it:\n * each signer is notified and walked through their fields. Needs a `<DocumentToolsProvider>`\n * inside a React Query `QueryClientProvider`.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactElement } from 'react'\nimport { MailPlus, PenLine, ScanSearch, Send, UserPlus, X } from 'lucide-react'\nimport {\n FIELD_TYPE_LABELS,\n SIGNATURE_FIELD_TYPES,\n fieldsFromSuggestions,\n isEmailSigner,\n newFieldId,\n sendBlocker,\n signatureFieldSuggestions,\n splitSuggestions,\n suggestSignatureFields,\n useDocumentTools,\n useInviteSigners,\n useSaveSignatureRequest,\n useSignerCandidates,\n type SignatureField,\n type SignatureFieldType,\n type SignatureRequest,\n type SuggestedSignatureField,\n} from '@arbidocs/react/document-tools'\nimport { Button, Checkbox, Input, Label, cn } from '@arbidocs/react/ui'\nimport { PdfViewer as KitPdfViewer, type PdfViewerProps } from '@arbidocs/react/viewers'\nimport type { DocumentPdfViewer } from './AnnotatedPdfViewer'\nimport { SIGNER_COLORS, SignatureFieldsOverlay } from './SignatureFieldsOverlay'\n\nexport interface SignatureRequestEditorProps extends Omit<\n PdfViewerProps,\n 'file' | 'renderPageOverlay'\n> {\n /** The PDF of the version shown (`GET /view?version=`): the fields are placed on it. */\n file: Blob\n documentId: string\n /** The version `file` is of; omitted = the current version. */\n version?: number\n /** A draft to go on editing. */\n draft?: SignatureRequest | null\n onCancel: () => void\n onSaved: (request: SignatureRequest) => void\n viewer?: DocumentPdfViewer\n}\n\nconst selectClass =\n 'h-8 rounded-md border border-input bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n\nexport function SignatureRequestEditor({\n file,\n documentId,\n version,\n draft,\n onCancel,\n onSaved,\n viewer: PdfViewer = KitPdfViewer,\n ...viewerProps\n}: SignatureRequestEditorProps): ReactElement {\n const { client, notify, user } = useDocumentTools()\n const candidates = useSignerCandidates()\n const save = useSaveSignatureRequest()\n const invite = useInviteSigners()\n const [fields, setFields] = useState<SignatureField[]>(() => draft?.fields ?? [])\n const [signers, setSigners] = useState<string[]>(() => [\n ...new Set((draft?.fields ?? []).map((f) => f.signer)),\n ])\n const [current, setCurrent] = useState<string | null>(signers[0] ?? null)\n const [placing, setPlacing] = useState<SignatureFieldType | null>(null)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n const [message, setMessage] = useState(draft?.message ?? '')\n const [suggestions, setSuggestions] = useState<SuggestedSignatureField[] | null>(null)\n const [assign, setAssign] = useState<Record<number, string | undefined>>({})\n const [finding, setFinding] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [newEmail, setNewEmail] = useState('')\n /** Names the Word document's fields give their signers, by email. */\n const [givenNames, setGivenNames] = useState<Record<string, string>>({})\n /** Signers to invite before sending, waiting for the author to confirm. */\n const [confirmInvite, setConfirmInvite] = useState<string[] | null>(null)\n\n const people = useMemo(() => candidates.data ?? [], [candidates.data])\n const members = useMemo(\n () => new Map(people.map((p) => [p.email.toLowerCase(), p.externalId])),\n [people]\n )\n const me = people.find((p) => p.email.toLowerCase() === user?.email?.toLowerCase())\n const nameOf = useCallback(\n (token: string) => {\n const person = people.find((p) => p.externalId === token)\n if (person) return person.name\n const invited = draft?.signers.find((s) => s.external_id === token)\n if (invited) return invited.name || invited.email || token\n const email = token.toLowerCase()\n const member = people.find((p) => p.email.toLowerCase() === email)\n return member?.name ?? givenNames[email] ?? token\n },\n [people, draft, givenNames]\n )\n /** A signer by name and email (\"Dana Day (dana@example.com)\"), or the email alone when unnamed. */\n const nameAndEmailOf = (token: string) => {\n const name = nameOf(token)\n return isEmailSigner(token) && name !== token ? `${name} (${token})` : name\n }\n /** Not in the workspace yet: an email that is no member's (they are invited when it is sent). */\n const isInvitee = useCallback(\n (token: string) =>\n (isEmailSigner(token) && !members.has(token.toLowerCase())) ||\n draft?.signers.find((s) => s.external_id === token)?.progress === 'invited',\n [members, draft]\n )\n const colorOf = useCallback(\n (ext: string) => {\n const i = signers.indexOf(ext)\n return SIGNER_COLORS[(i < 0 ? 0 : i) % SIGNER_COLORS.length]!\n },\n [signers]\n )\n const selected = fields.find((f) => f.id === selectedId) ?? null\n const blocker = signers.length === 0 ? 'Add a signer.' : sendBlocker(fields)\n\n const addSigner = (token: string) => {\n if (!token) return\n // A member's email is the member.\n const ext = isEmailSigner(token)\n ? (members.get(token.trim().toLowerCase()) ?? token.trim().toLowerCase())\n : token\n if (signers.includes(ext)) return\n setSigners((s) => [...s, ext])\n setCurrent(ext)\n setPlacing((p) => p ?? 'signature')\n }\n const removeSigner = (ext: string) => {\n setSigners((s) => s.filter((x) => x !== ext))\n setFields((fs) => fs.filter((f) => f.signer !== ext))\n if (current === ext) setCurrent(signers.find((x) => x !== ext) ?? null)\n }\n\n const updateField = (id: string, patch: Partial<SignatureField>) =>\n setFields((fs) => fs.map((f) => (f.id === id ? { ...f, ...patch } : f)))\n\n /** The Word document's own fields, placed on opening a new request (each for the signer it names). */\n const placedOnce = useRef(false)\n useEffect(() => {\n if (draft || placedOnce.current || candidates.isLoading) return\n placedOnce.current = true\n let live = true\n void signatureFieldSuggestions(client, documentId, version)\n .then(({ fields: found, signers: namedSigners }) => {\n if (!live) return\n const { placed, extras } = splitSuggestions(found ?? [])\n // Who the Word fields name, even when none of them is found on the PDF (placed by hand).\n const named = Object.fromEntries([\n ...namedSigners.map((s) => [s.email.toLowerCase(), s.name]),\n ...placed.flatMap((s) =>\n s.signer_email && s.signer_name ? [[s.signer_email.toLowerCase(), s.signer_name]] : []\n ),\n ])\n setGivenNames((n) => ({ ...n, ...named }))\n if (!placed.length) return\n const added = fieldsFromSuggestions(placed, {}, members)\n setFields((fs) => [...fs, ...added])\n const assigned = [...new Set(added.map((f) => f.signer))]\n setSigners((s) => [...s, ...assigned.filter((t) => !s.includes(t))])\n setCurrent((c) => c ?? assigned[0] ?? null)\n // Fields placed with no signer, and the signature lines found besides: offered, not added.\n const open = placed.filter((s) => !s.signer_email)\n if (open.length || extras.length) {\n setSuggestions([...open, ...extras])\n setAssign({})\n }\n notify(\n `${added.length} field${added.length === 1 ? '' : 's'} placed from the document.`,\n 'success'\n )\n })\n .catch(() => {\n /* no fields to place: the author places them */\n })\n return () => {\n live = false\n }\n }, [draft, candidates.isLoading, client, documentId, version, members, notify])\n\n const findBlocks = async () => {\n setFinding(true)\n setError(null)\n try {\n const found = await suggestSignatureFields(client, documentId, version)\n setSuggestions(found)\n // Block n goes to the n-th signer when there are enough; otherwise left for the author.\n const groups = [...new Set(found.map((s) => s.group))]\n setAssign(Object.fromEntries(groups.map((g, i) => [g, signers[i]])))\n if (found.length === 0) notify('No signature blocks were found in this document.', 'info')\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Signature blocks could not be read')\n } finally {\n setFinding(false)\n }\n }\n\n const applySuggestions = () => {\n if (!suggestions) return\n const added = fieldsFromSuggestions(suggestions, assign, members)\n setFields((fs) => [...fs, ...added])\n const assigned = [...new Set(added.map((f) => f.signer))]\n setSigners((s) => [...s, ...assigned.filter((ext) => !s.includes(ext))])\n if (!current && assigned[0]) setCurrent(assigned[0])\n setSuggestions(null)\n notify(`${added.length} field${added.length === 1 ? '' : 's'} added.`, 'success')\n }\n\n const submit = async (send: boolean, invited = false) => {\n setError(null)\n const invitees = signers.filter((t) => isEmailSigner(t) && !members.has(t.toLowerCase()))\n if (send && invitees.length && !invited) {\n setConfirmInvite(invitees)\n return\n }\n try {\n if (send && invitees.length && me?.role === 'owner') {\n await invite.mutateAsync({ documentId, emails: invitees })\n }\n const request = await save.mutateAsync({\n documentId,\n version,\n fields,\n message: message.trim() || undefined,\n requestId: draft?.status === 'draft' ? draft.external_id : undefined,\n send,\n })\n const waiting = request.signers.filter((s) => s.progress === 'invited').length\n notify(\n send\n ? `Sent for signature to ${request.signers.length} signer${request.signers.length === 1 ? '' : 's'}.` +\n (waiting\n ? ` ${waiting} ${waiting === 1 ? 'is' : 'are'} asked once they join the workspace.`\n : '')\n : 'Draft saved.',\n 'success'\n )\n setConfirmInvite(null)\n onSaved(request)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'The request could not be saved')\n }\n }\n\n const renderPageOverlay = useCallback(\n ({ pageNumber }: { pageNumber: number }) => (\n <SignatureFieldsOverlay\n page={pageNumber - 1}\n fields={fields}\n colorOf={colorOf}\n labelOf={(f) => `${FIELD_TYPE_LABELS[f.type]} · ${nameOf(f.signer).split(' ')[0]}`}\n editable\n placing={current ? placing : null}\n selectedId={selectedId}\n onSelect={setSelectedId}\n onCreate={(box) => {\n if (!current || !placing) return\n const field: SignatureField = {\n id: newFieldId(),\n type: placing,\n page: pageNumber - 1,\n signer: current,\n required: true,\n ...box,\n }\n setFields((fs) => [...fs, field])\n setSelectedId(field.id)\n }}\n onChange={(id, box) => updateField(id, box)}\n onRemove={(id) => {\n setFields((fs) => fs.filter((f) => f.id !== id))\n setSelectedId(null)\n }}\n />\n ),\n [fields, colorOf, nameOf, current, placing, selectedId]\n )\n\n const groups = suggestions ? [...new Set(suggestions.map((s) => s.group))] : []\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-testid=\"signature-request-editor\">\n <div className=\"space-y-2 border-b border-border px-3 py-2 text-sm\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium\">Signers</span>\n {signers.map((ext) => (\n <span\n key={ext}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border py-0.5 pr-1 pl-2',\n current === ext && 'bg-muted'\n )}\n style={{ borderColor: colorOf(ext) }}\n >\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1.5\"\n onClick={() => setCurrent(ext)}\n aria-pressed={current === ext}\n data-testid={`signer-chip-${ext}`}\n >\n <span className=\"size-2.5 rounded-full\" style={{ background: colorOf(ext) }} />\n {nameOf(ext)}\n {isInvitee(ext) && (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"signer-invited\">\n (to invite)\n </span>\n )}\n </button>\n <button\n type=\"button\"\n aria-label={`Remove ${nameOf(ext)}`}\n className=\"rounded-full p-0.5 hover:bg-accent\"\n onClick={() => removeSigner(ext)}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n <label className=\"inline-flex items-center gap-1 text-muted-foreground\">\n <UserPlus className=\"size-4\" aria-hidden />\n <span className=\"sr-only\">Add a signer</span>\n <select\n className={selectClass}\n value=\"\"\n onChange={(e) => addSigner(e.target.value)}\n disabled={candidates.isLoading}\n data-testid=\"signature-add-signer\"\n >\n <option value=\"\">\n {candidates.isLoading ? 'Loading members…' : 'Add a signer…'}\n </option>\n {people\n .filter((p) => !signers.includes(p.externalId))\n .map((p) => (\n <option key={p.externalId} value={p.externalId}>\n {p.name} ({p.email})\n </option>\n ))}\n </select>\n </label>\n <form\n className=\"inline-flex items-center gap-1\"\n onSubmit={(e) => {\n e.preventDefault()\n if (!isEmailSigner(newEmail)) return\n addSigner(newEmail)\n setNewEmail('')\n }}\n >\n <Input\n type=\"email\"\n value={newEmail}\n onChange={(e) => setNewEmail(e.target.value)}\n placeholder=\"Or anyone, by email\"\n aria-label=\"Signer's email\"\n className=\"h-8 w-52\"\n data-testid=\"signature-add-email\"\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"ghost\"\n disabled={!isEmailSigner(newEmail)}\n aria-label=\"Add this signer\"\n data-testid=\"signature-add-email-submit\"\n >\n <MailPlus className=\"size-4\" aria-hidden />\n </Button>\n </form>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground\">\n {current ? `Place for ${nameOf(current)}:` : 'Add a signer, then place their fields.'}\n </span>\n {SIGNATURE_FIELD_TYPES.map((type) => (\n <Button\n key={type}\n type=\"button\"\n size=\"sm\"\n variant={placing === type && current ? 'default' : 'outline'}\n disabled={!current}\n aria-pressed={placing === type && !!current}\n onClick={() => setPlacing(placing === type ? null : type)}\n data-testid={`signature-place-${type}`}\n >\n {FIELD_TYPE_LABELS[type]}\n </Button>\n ))}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={findBlocks}\n disabled={finding}\n data-testid=\"signature-find-blocks\"\n >\n <ScanSearch className=\"mr-1 size-4\" aria-hidden />\n {finding ? 'Looking…' : 'Find signature blocks'}\n </Button>\n <span className=\"ml-auto flex items-center gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => submit(false)}\n disabled={save.isPending || fields.length === 0}\n data-testid=\"signature-save-draft\"\n >\n Save draft\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => submit(true)}\n disabled={save.isPending || !!blocker}\n title={blocker ?? undefined}\n data-testid=\"signature-send\"\n >\n <Send className=\"mr-1 size-4\" aria-hidden />\n {save.isPending ? 'Sending…' : 'Send for signature'}\n </Button>\n </span>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n maxLength={2000}\n placeholder=\"Message to the signers (optional)\"\n className=\"h-8 max-w-md\"\n data-testid=\"signature-message\"\n />\n <span className=\"text-muted-foreground\" data-testid=\"signature-editor-summary\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n {blocker ? ` · ${blocker}` : ' · ready to send'}\n </span>\n </div>\n {selected && (\n <div\n className=\"flex flex-wrap items-center gap-3 rounded-md bg-muted px-2 py-1.5\"\n data-testid=\"signature-field-details\"\n >\n <PenLine className=\"size-4\" aria-hidden />\n <select\n className={selectClass}\n value={selected.type}\n aria-label=\"Field type\"\n onChange={(e) =>\n updateField(selected.id, { type: e.target.value as SignatureFieldType })\n }\n >\n {SIGNATURE_FIELD_TYPES.map((t) => (\n <option key={t} value={t}>\n {FIELD_TYPE_LABELS[t]}\n </option>\n ))}\n </select>\n <select\n className={selectClass}\n value={selected.signer}\n aria-label=\"Signer\"\n onChange={(e) => updateField(selected.id, { signer: e.target.value })}\n data-testid=\"signature-field-signer\"\n >\n {signers.map((ext) => (\n <option key={ext} value={ext}>\n {nameOf(ext)}\n </option>\n ))}\n </select>\n <span className=\"flex items-center gap-1.5\">\n <Checkbox\n id=\"signature-field-required\"\n checked={selected.required}\n onCheckedChange={(c) => updateField(selected.id, { required: c === true })}\n />\n <Label htmlFor=\"signature-field-required\" className=\"font-normal\">\n Required\n </Label>\n </span>\n </div>\n )}\n {suggestions && suggestions.length > 0 && (\n <div className=\"space-y-1.5 rounded-md border p-2\" data-testid=\"signature-suggestions\">\n <div className=\"font-medium\">\n Found {groups.length} signature block{groups.length === 1 ? '' : 's'}. Choose who\n signs each.\n </div>\n {groups.map((g) => {\n const inBlock = suggestions.filter((s) => s.group === g)\n const role = inBlock.find((s) => s.role)?.role\n return (\n <div key={g} className=\"flex flex-wrap items-center gap-2\">\n <span className=\"min-w-40\">\n {role ?? `Block ${g + 1}`}{' '}\n <span className=\"text-muted-foreground\">\n (p. {inBlock[0]!.page + 1}:{' '}\n {inBlock.map((s) => FIELD_TYPE_LABELS[s.type]).join(', ')})\n </span>\n </span>\n <select\n className={selectClass}\n value={assign[g] ?? ''}\n onChange={(e) => setAssign((a) => ({ ...a, [g]: e.target.value || undefined }))}\n data-testid={`signature-suggestion-signer-${g}`}\n >\n <option value=\"\">Skip</option>\n {people.map((p) => (\n <option key={p.externalId} value={p.externalId}>\n {p.name}\n </option>\n ))}\n {signers\n .filter((t) => !people.some((p) => p.externalId === t))\n .map((t) => (\n <option key={t} value={t}>\n {nameOf(t)}\n </option>\n ))}\n </select>\n </div>\n )\n })}\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={applySuggestions}\n disabled={!Object.values(assign).some(Boolean)}\n data-testid=\"signature-suggestions-apply\"\n >\n Add fields\n </Button>\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => setSuggestions(null)}>\n Dismiss\n </Button>\n </div>\n </div>\n )}\n {confirmInvite && (\n <div\n className=\"space-y-1.5 rounded-md border border-amber-300 bg-amber-50 p-2 text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100\"\n data-testid=\"signature-invite-confirm\"\n >\n <p>\n Not in this workspace yet:{' '}\n <strong>{confirmInvite.map(nameAndEmailOf).join(', ')}</strong>.{' '}\n {me?.role === 'owner'\n ? 'They are invited as guests and asked to sign when they join.'\n : 'Ask a workspace owner to invite them: they are asked to sign when they join.'}\n </p>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => submit(true, true)}\n disabled={save.isPending || invite.isPending}\n data-testid=\"signature-invite-send\"\n >\n {me?.role === 'owner' ? 'Invite and send' : 'Send'}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setConfirmInvite(null)}\n >\n Cancel\n </Button>\n </div>\n </div>\n )}\n {error && (\n <p className=\"text-sm text-red-text\" role=\"alert\" data-testid=\"signature-editor-error\">\n {error}\n </p>\n )}\n </div>\n <div className=\"min-h-0 flex-1\">\n <PdfViewer {...viewerProps} file={file} renderPageOverlay={renderPageOverlay} />\n </div>\n </div>\n )\n}\n\nexport default SignatureRequestEditor\n"]}