@arbidocs/blocks 0.4.101 → 0.4.103
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.
- package/dist/chunk-6MG62I5B.cjs +272 -0
- package/dist/chunk-6MG62I5B.cjs.map +1 -0
- package/dist/{chunk-MYALCKDR.js → chunk-CVYY4X5R.js} +306 -75
- package/dist/chunk-CVYY4X5R.js.map +1 -0
- package/dist/chunk-EQB3WELX.js +269 -0
- package/dist/chunk-EQB3WELX.js.map +1 -0
- package/dist/{chunk-G5JH2YMQ.js → chunk-GQTIAATM.js} +3 -3
- package/dist/{chunk-G5JH2YMQ.js.map → chunk-GQTIAATM.js.map} +1 -1
- package/dist/{chunk-YGREW5TZ.js → chunk-H6DFXG5N.js} +3 -3
- package/dist/{chunk-YGREW5TZ.js.map → chunk-H6DFXG5N.js.map} +1 -1
- package/dist/{chunk-ZT2EBBSC.cjs → chunk-N36PWG7A.cjs} +5 -5
- package/dist/{chunk-ZT2EBBSC.cjs.map → chunk-N36PWG7A.cjs.map} +1 -1
- package/dist/{chunk-FAGQTB3D.cjs → chunk-O33EBMIX.cjs} +305 -74
- package/dist/chunk-O33EBMIX.cjs.map +1 -0
- package/dist/{chunk-Y5XW57U4.cjs → chunk-TFDU2KGS.cjs} +5 -5
- package/dist/{chunk-Y5XW57U4.cjs.map → chunk-TFDU2KGS.cjs.map} +1 -1
- package/dist/connect/docx.cjs +6 -6
- package/dist/connect/docx.js +4 -4
- package/dist/connect/index.cjs +3 -3
- package/dist/connect/index.js +2 -2
- package/dist/document-tools/AdoptSignatureDialog.d.ts +25 -0
- package/dist/document-tools/DocumentToolButtons.d.ts +2 -0
- package/dist/document-tools/SignatureRequestBanner.d.ts +18 -0
- package/dist/document-tools/index.cjs +175 -0
- package/dist/document-tools/index.cjs.map +1 -1
- package/dist/document-tools/index.d.ts +3 -1
- package/dist/document-tools/index.js +168 -3
- package/dist/document-tools/index.js.map +1 -1
- package/dist/document-tools/viewer/GuidedSigningViewer.d.ts +26 -0
- package/dist/document-tools/viewer/SignatureFieldsOverlay.d.ts +41 -0
- package/dist/document-tools/viewer/SignatureRequestEditor.d.ts +26 -0
- package/dist/document-tools/viewer/index.cjs +983 -0
- package/dist/document-tools/viewer/index.cjs.map +1 -1
- package/dist/document-tools/viewer/index.d.ts +3 -0
- package/dist/document-tools/viewer/index.js +983 -5
- package/dist/document-tools/viewer/index.js.map +1 -1
- package/dist/docx/RibbonMenu.d.ts +4 -1
- package/dist/docx/RibbonOverflow.d.ts +27 -0
- package/dist/docx/WordReferences.d.ts +3 -2
- package/dist/docx/index.cjs +35 -35
- package/dist/docx/index.js +3 -3
- package/dist/docx/noteStyles.d.ts +46 -0
- package/dist/docx/overflowPlan.d.ts +15 -0
- package/dist/index.cjs +5 -5
- package/dist/index.js +1 -1
- package/node_modules/@arbidocs/coedit/LICENSE +21 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.cjs +751 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.d.cts +192 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.d.ts +192 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.js +716 -0
- package/node_modules/@arbidocs/coedit/dist/encoding.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs +1759 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.cts +39 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.d.ts +39 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.js +1736 -0
- package/node_modules/@arbidocs/coedit/dist/hocuspocus.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/index.cjs +1692 -0
- package/node_modules/@arbidocs/coedit/dist/index.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/index.d.cts +16 -0
- package/node_modules/@arbidocs/coedit/dist/index.d.ts +16 -0
- package/node_modules/@arbidocs/coedit/dist/index.js +1664 -0
- package/node_modules/@arbidocs/coedit/dist/index.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/server.cjs +1852 -0
- package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/server.d.cts +43 -0
- package/node_modules/@arbidocs/coedit/dist/server.d.ts +43 -0
- package/node_modules/@arbidocs/coedit/dist/server.js +1822 -0
- package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.cts +82 -0
- package/node_modules/@arbidocs/coedit/dist/session-Cf9iu1Vt.d.ts +82 -0
- package/node_modules/@arbidocs/coedit/dist/template.cjs +1627 -0
- package/node_modules/@arbidocs/coedit/dist/template.cjs.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/template.d.cts +125 -0
- package/node_modules/@arbidocs/coedit/dist/template.d.ts +125 -0
- package/node_modules/@arbidocs/coedit/dist/template.js +1612 -0
- package/node_modules/@arbidocs/coedit/dist/template.js.map +1 -0
- package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.cts +8 -0
- package/node_modules/@arbidocs/coedit/dist/versions-DXiFQMA6.d.ts +8 -0
- package/node_modules/@arbidocs/coedit/package.json +68 -0
- package/node_modules/@docx-editor.dev/core/LICENSE +201 -0
- package/node_modules/@docx-editor.dev/core/README.md +125 -0
- package/node_modules/@docx-editor.dev/core/THIRD_PARTY_NOTICES.md +56 -0
- package/node_modules/@docx-editor.dev/core/dist/automation.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/automation.d.ts +162 -0
- package/node_modules/@docx-editor.dev/core/dist/automation.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/binding.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/binding.d.ts +164 -0
- package/node_modules/@docx-editor.dev/core/dist/binding.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-2GO5T2JU.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-2RC2EPND.js +3 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-4GBTELJV.cjs +28 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-4R3TEXMN.js +18 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-5CSUYANV.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6APGXLBB.cjs +3 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6AWEKBLB.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6EYYL7FL.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-6JIJOZDW.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-BTQKU64Q.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-E7BQA6UP.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-EO4C5QJW.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-ETTO6GK3.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-FIJZIQXA.cjs +18 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-FRXAOVTB.js +28 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-J6BVWIDB.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-JGNVNT2A.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-K5U2PLDP.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-KKIJG3C6.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +27 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-NBCVVZOM.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-O2AL2HSJ.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-O5INAWZQ.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-QMLCVPCD.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +27 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-RIYSCEFQ.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-S6J4O5XP.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-SRPILEWV.cjs +5 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-TSLBZ26X.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-UKVVUHZL.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-VDNNLG6X.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-VHAVHCQY.js +7 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-VX43VBAX.cjs +7 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-Z6WBFXJU.js +5 -0
- package/node_modules/@docx-editor.dev/core/dist/chunk-ZUHOMK52.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.d.ts +270 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration.d.ts +269 -0
- package/node_modules/@docx-editor.dev/core/dist/collaboration.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.d.ts +290 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/document.js +0 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.d.ts +22 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/editor.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.d.ts +103 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.js +0 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.d.ts +143 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/modules.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.d.ts +11 -0
- package/node_modules/@docx-editor.dev/core/dist/contracts/types.js +0 -0
- package/node_modules/@docx-editor.dev/core/dist/custom-node-writes-cvL5rhcD.d.ts +323 -0
- package/node_modules/@docx-editor.dev/core/dist/dist-PKZR6RSH.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/document-protection-BAGVGqaP.d.ts +20 -0
- package/node_modules/@docx-editor.dev/core/dist/editor-Ci7IZGmG.d.ts +2448 -0
- package/node_modules/@docx-editor.dev/core/dist/editor-scope-OHPwVQ5l.d.ts +84 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.css +15 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.d.ts +1394 -0
- package/node_modules/@docx-editor.dev/core/dist/editor.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/export.cjs +2 -0
- package/node_modules/@docx-editor.dev/core/dist/export.d.ts +391 -0
- package/node_modules/@docx-editor.dev/core/dist/export.js +2 -0
- package/node_modules/@docx-editor.dev/core/dist/failure-NS2lsya4.d.ts +115 -0
- package/node_modules/@docx-editor.dev/core/dist/font-resolver-BVQB14qT.d.ts +256 -0
- package/node_modules/@docx-editor.dev/core/dist/harfbuzz.wasm +0 -0
- package/node_modules/@docx-editor.dev/core/dist/headless-document-view-qH331moE.d.ts +143 -0
- package/node_modules/@docx-editor.dev/core/dist/image-resources-BN-hUgCn.d.ts +211 -0
- package/node_modules/@docx-editor.dev/core/dist/index-Bsg7oIKP.d.ts +3869 -0
- package/node_modules/@docx-editor.dev/core/dist/index.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/index.d.ts +53 -0
- package/node_modules/@docx-editor.dev/core/dist/index.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/layout-shaping-BEyuiQOk.d.ts +246 -0
- package/node_modules/@docx-editor.dev/core/dist/layout.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/layout.d.ts +3151 -0
- package/node_modules/@docx-editor.dev/core/dist/layout.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/node-module-shim-TTKTT66I.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/note-properties-4Y9o6Gyk.d.ts +68 -0
- package/node_modules/@docx-editor.dev/core/dist/omml-equation-CuzBL5DD.d.ts +85 -0
- package/node_modules/@docx-editor.dev/core/dist/output.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/output.d.ts +97 -0
- package/node_modules/@docx-editor.dev/core/dist/output.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/protocol-Bqk4Izjc.d.ts +1651 -0
- package/node_modules/@docx-editor.dev/core/dist/review-pane-D9jm8DcY.d.ts +128 -0
- package/node_modules/@docx-editor.dev/core/dist/review-paragraph-order-DT-n6ouC.d.ts +85 -0
- package/node_modules/@docx-editor.dev/core/dist/revision-projection-DZ4kKVev.d.ts +242 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-cell-selection-D9D1KSXq.d.ts +464 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-interaction-CIC-PooQ.d.ts +135 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-paint-BME37OMv.d.ts +326 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-record-queries-CBlZqZNa.d.ts +177 -0
- package/node_modules/@docx-editor.dev/core/dist/semantic-records-4B3WwFAi.d.ts +3532 -0
- package/node_modules/@docx-editor.dev/core/dist/store.cjs +1 -0
- package/node_modules/@docx-editor.dev/core/dist/store.d.ts +2706 -0
- package/node_modules/@docx-editor.dev/core/dist/store.js +1 -0
- package/node_modules/@docx-editor.dev/core/dist/tree-package-fragment-BeeKxDw8.d.ts +1201 -0
- package/node_modules/@docx-editor.dev/core/dist/tree-session-contract-CVbmlMlq.d.ts +664 -0
- package/node_modules/@docx-editor.dev/core/dist/types-barrel-D3xCgQX6.d.ts +4269 -0
- package/node_modules/@docx-editor.dev/core/licenses/HarfBuzz-COPYING.txt +42 -0
- package/node_modules/@docx-editor.dev/core/package.json +140 -0
- package/node_modules/@docx-editor.dev/react/LICENSE +201 -0
- package/node_modules/@docx-editor.dev/react/README.md +141 -0
- package/node_modules/@docx-editor.dev/react/THIRD_PARTY_NOTICES.md +18 -0
- package/node_modules/@docx-editor.dev/react/dist/index.d.mts +4928 -0
- package/node_modules/@docx-editor.dev/react/dist/index.d.ts +4928 -0
- package/node_modules/@docx-editor.dev/react/dist/index.js +4 -0
- package/node_modules/@docx-editor.dev/react/dist/index.mjs +4 -0
- package/node_modules/@docx-editor.dev/react/package.json +74 -0
- package/node_modules/@docx-editor.dev/react/src/styles/editor.css +6 -0
- package/node_modules/@docx-editor.dev/react/src/styles/zIndex.ts +28 -0
- package/package.json +26 -15
- package/src/docx/README.md +10 -0
- package/src/docx/styles.css +73 -5
- package/dist/chunk-FAGQTB3D.cjs.map +0 -1
- package/dist/chunk-MYALCKDR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/document-tools/viewer/AnnotatedPdfViewer.tsx","../../../src/document-tools/viewer/SignaturePlacementViewer.tsx"],"names":["PdfViewer","KitPdfViewer","useMemo","useAnnotationLayer","useEffect","useCallback","jsx","AnnotationPageOverlay","jsxs"],"mappings":"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","file":"index.js","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\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 ...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 // 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"]}
|
|
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":["PdfViewer","KitPdfViewer","useMemo","useAnnotationLayer","useEffect","useCallback","jsx","AnnotationPageOverlay","jsxs","useRef","useState","useDocumentTools","FIELD_TYPE_LABELS","Button","Fragment","groups","cn","X","Input","Label"],"mappings":"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","file":"index.js","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\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 ...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 // 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 useSignSignatureRequest,\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 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 } = mark\n if (field.type === 'signature' && signatureUrl) {\n return (\n <img src={signatureUrl} alt=\"Your signature\" className=\"h-full w-full object-contain\" />\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 />\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 * \"Find signature blocks\" proposes fields from the document's execution blocks (\"Director\",\n * \"Witness name\", \"[Signature]\", \"Date:\"); the author assigns a signer per block. Save it as a draft\n * or send it: each signer is notified and walked through their fields. Needs a\n * `<DocumentToolsProvider>` inside a React Query `QueryClientProvider`.\n */\n\nimport { useCallback, useMemo, useState, type ReactElement } from 'react'\nimport { PenLine, ScanSearch, Send, UserPlus, X } from 'lucide-react'\nimport {\n FIELD_TYPE_LABELS,\n SIGNATURE_FIELD_TYPES,\n fieldsFromSuggestions,\n newFieldId,\n sendBlocker,\n suggestSignatureFields,\n useDocumentTools,\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 } = useDocumentTools()\n const candidates = useSignerCandidates()\n const save = useSaveSignatureRequest()\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\n const people = useMemo(() => candidates.data ?? [], [candidates.data])\n const nameOf = useCallback(\n (ext: string) => people.find((p) => p.externalId === ext)?.name ?? ext,\n [people]\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 = (ext: string) => {\n if (!ext || 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 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)\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) => {\n setError(null)\n try {\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 notify(\n send\n ? `Sent for signature to ${request.signers.length} signer${request.signers.length === 1 ? '' : 's'}.`\n : 'Draft saved.',\n 'success'\n )\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 </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 </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 </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 {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"]}
|
|
@@ -5,7 +5,7 @@ import React from 'react';
|
|
|
5
5
|
* press outside it. `children` may be a function that receives `close`, for panels that close
|
|
6
6
|
* themselves once the user has picked something.
|
|
7
7
|
*/
|
|
8
|
-
export declare function RibbonMenu({ label, icon, children, className, testId, title, }: {
|
|
8
|
+
export declare function RibbonMenu({ label, icon, children, className, testId, title, keepMounted, popoverClassName, }: {
|
|
9
9
|
label: string;
|
|
10
10
|
/** Tooltip; defaults to `label`. */
|
|
11
11
|
title?: string;
|
|
@@ -14,4 +14,7 @@ export declare function RibbonMenu({ label, icon, children, className, testId, t
|
|
|
14
14
|
children: React.ReactNode | ((close: () => void) => React.ReactNode);
|
|
15
15
|
className?: string;
|
|
16
16
|
testId?: string;
|
|
17
|
+
/** Keep the panel's content mounted (hidden) while closed, so its controls keep their state. */
|
|
18
|
+
keepMounted?: boolean;
|
|
19
|
+
popoverClassName?: string;
|
|
17
20
|
}): React.JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A ribbon tab's row of controls that never crowds: what does not fit collapses into a trailing
|
|
3
|
+
* "…" (More) menu, as Word's ribbon does. Each control is a `RibbonItem` with a label and a
|
|
4
|
+
* priority; the row measures the controls (ResizeObserver) and collapses the lowest priority
|
|
5
|
+
* first, the rightmost first among equals. A collapsed control is the same component, moved by a
|
|
6
|
+
* portal into its row of the More menu, beside its label, so it keeps working (and keeps its
|
|
7
|
+
* state while the menu is closed).
|
|
8
|
+
*/
|
|
9
|
+
import React from 'react';
|
|
10
|
+
/**
|
|
11
|
+
* The row of one ribbon tab. `tab` names the tab shown, so the More menu closes and the row is
|
|
12
|
+
* measured afresh when it changes.
|
|
13
|
+
*/
|
|
14
|
+
export declare function RibbonOverflow({ tab, children }: {
|
|
15
|
+
tab: string;
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}): React.JSX.Element;
|
|
18
|
+
/**
|
|
19
|
+
* One control of a ribbon row. `label` names it in the More menu; `priority` (default 0) decides
|
|
20
|
+
* what collapses first. Outside a `RibbonOverflow` it renders its children as they are.
|
|
21
|
+
*/
|
|
22
|
+
export declare function RibbonItem({ id, label, priority, children, }: {
|
|
23
|
+
id: string;
|
|
24
|
+
label: string;
|
|
25
|
+
priority?: number;
|
|
26
|
+
children: React.ReactNode;
|
|
27
|
+
}): React.JSX.Element;
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* and its note in `footnotes.xml` (creating the part on a document that has none), moves the caret
|
|
7
7
|
* into the note so the user types it straight away, numbers notes in document order, and lays
|
|
8
8
|
* them out at the foot of the page, where an existing note is edited in place. What it leaves out
|
|
9
|
-
* is Word
|
|
10
|
-
* "
|
|
9
|
+
* is what Word adds around a new note: the note styles in a document that has none (without
|
|
10
|
+
* "footnote reference" the reference and the number are painted at body size on the baseline),
|
|
11
|
+
* the note's "footnote text" (or "endnote text") paragraph style, and the space after its number.
|
|
11
12
|
*/
|
|
12
13
|
import React, { type RefObject } from 'react';
|
|
13
14
|
/** References tab: Insert footnote, Insert endnote. */
|
package/dist/docx/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkN36PWG7A_cjs = require('../chunk-N36PWG7A.cjs');
|
|
5
|
+
var chunkO33EBMIX_cjs = require('../chunk-O33EBMIX.cjs');
|
|
6
6
|
require('../chunk-AOFATOT3.cjs');
|
|
7
7
|
require('../chunk-RC25WMVB.cjs');
|
|
8
8
|
require('../chunk-7UTB4PHM.cjs');
|
|
@@ -60,7 +60,7 @@ function NativeDocxComparison({
|
|
|
60
60
|
if (!documentId)
|
|
61
61
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "native-docx-error", role: "status", children: "Comparing Word documents\u2026" });
|
|
62
62
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
63
|
-
|
|
63
|
+
chunkO33EBMIX_cjs.NativeDocxEditor,
|
|
64
64
|
{
|
|
65
65
|
adapter,
|
|
66
66
|
documentId,
|
|
@@ -72,131 +72,131 @@ function NativeDocxComparison({
|
|
|
72
72
|
|
|
73
73
|
Object.defineProperty(exports, "StreamedWordArtifact", {
|
|
74
74
|
enumerable: true,
|
|
75
|
-
get: function () { return
|
|
75
|
+
get: function () { return chunkN36PWG7A_cjs.StreamedWordArtifact; }
|
|
76
76
|
});
|
|
77
77
|
Object.defineProperty(exports, "BUILTIN_TEMPLATE_NAME", {
|
|
78
78
|
enumerable: true,
|
|
79
|
-
get: function () { return
|
|
79
|
+
get: function () { return chunkO33EBMIX_cjs.BUILTIN_TEMPLATE_NAME; }
|
|
80
80
|
});
|
|
81
81
|
Object.defineProperty(exports, "DEFAULT_DEFINED_TERMS_LABELS", {
|
|
82
82
|
enumerable: true,
|
|
83
|
-
get: function () { return
|
|
83
|
+
get: function () { return chunkO33EBMIX_cjs.DEFAULT_DEFINED_TERMS_LABELS; }
|
|
84
84
|
});
|
|
85
85
|
Object.defineProperty(exports, "DEFINED_TERM_TRIGGER", {
|
|
86
86
|
enumerable: true,
|
|
87
|
-
get: function () { return
|
|
87
|
+
get: function () { return chunkO33EBMIX_cjs.DEFINED_TERM_TRIGGER; }
|
|
88
88
|
});
|
|
89
89
|
Object.defineProperty(exports, "DefinedTermsProvider", {
|
|
90
90
|
enumerable: true,
|
|
91
|
-
get: function () { return
|
|
91
|
+
get: function () { return chunkO33EBMIX_cjs.DefinedTermsProvider; }
|
|
92
92
|
});
|
|
93
93
|
Object.defineProperty(exports, "DocxAuthorContext", {
|
|
94
94
|
enumerable: true,
|
|
95
|
-
get: function () { return
|
|
95
|
+
get: function () { return chunkO33EBMIX_cjs.DocxAuthorContext; }
|
|
96
96
|
});
|
|
97
97
|
Object.defineProperty(exports, "DocxCommentActivity", {
|
|
98
98
|
enumerable: true,
|
|
99
|
-
get: function () { return
|
|
99
|
+
get: function () { return chunkO33EBMIX_cjs.DocxCommentActivity; }
|
|
100
100
|
});
|
|
101
101
|
Object.defineProperty(exports, "DocxEditorReview", {
|
|
102
102
|
enumerable: true,
|
|
103
|
-
get: function () { return
|
|
103
|
+
get: function () { return chunkO33EBMIX_cjs.DocxEditorReview; }
|
|
104
104
|
});
|
|
105
105
|
Object.defineProperty(exports, "DocxMentions", {
|
|
106
106
|
enumerable: true,
|
|
107
|
-
get: function () { return
|
|
107
|
+
get: function () { return chunkO33EBMIX_cjs.DocxMentions; }
|
|
108
108
|
});
|
|
109
109
|
Object.defineProperty(exports, "DocxParticipants", {
|
|
110
110
|
enumerable: true,
|
|
111
|
-
get: function () { return
|
|
111
|
+
get: function () { return chunkO33EBMIX_cjs.DocxParticipants; }
|
|
112
112
|
});
|
|
113
113
|
Object.defineProperty(exports, "DocxRibbon", {
|
|
114
114
|
enumerable: true,
|
|
115
|
-
get: function () { return
|
|
115
|
+
get: function () { return chunkO33EBMIX_cjs.DocxRibbon; }
|
|
116
116
|
});
|
|
117
117
|
Object.defineProperty(exports, "GenerateImageButton", {
|
|
118
118
|
enumerable: true,
|
|
119
|
-
get: function () { return
|
|
119
|
+
get: function () { return chunkO33EBMIX_cjs.GenerateImageButton; }
|
|
120
120
|
});
|
|
121
121
|
Object.defineProperty(exports, "HouseTemplateProvider", {
|
|
122
122
|
enumerable: true,
|
|
123
|
-
get: function () { return
|
|
123
|
+
get: function () { return chunkO33EBMIX_cjs.HouseTemplateProvider; }
|
|
124
124
|
});
|
|
125
125
|
Object.defineProperty(exports, "NativeDocxEditor", {
|
|
126
126
|
enumerable: true,
|
|
127
|
-
get: function () { return
|
|
127
|
+
get: function () { return chunkO33EBMIX_cjs.NativeDocxEditor; }
|
|
128
128
|
});
|
|
129
129
|
Object.defineProperty(exports, "builtinHouseTemplate", {
|
|
130
130
|
enumerable: true,
|
|
131
|
-
get: function () { return
|
|
131
|
+
get: function () { return chunkO33EBMIX_cjs.builtinHouseTemplate; }
|
|
132
132
|
});
|
|
133
133
|
Object.defineProperty(exports, "contentPath", {
|
|
134
134
|
enumerable: true,
|
|
135
|
-
get: function () { return
|
|
135
|
+
get: function () { return chunkO33EBMIX_cjs.contentPath; }
|
|
136
136
|
});
|
|
137
137
|
Object.defineProperty(exports, "editorPort", {
|
|
138
138
|
enumerable: true,
|
|
139
|
-
get: function () { return
|
|
139
|
+
get: function () { return chunkO33EBMIX_cjs.editorPort; }
|
|
140
140
|
});
|
|
141
141
|
Object.defineProperty(exports, "findDefinitionsSection", {
|
|
142
142
|
enumerable: true,
|
|
143
|
-
get: function () { return
|
|
143
|
+
get: function () { return chunkO33EBMIX_cjs.findDefinitionsSection; }
|
|
144
144
|
});
|
|
145
145
|
Object.defineProperty(exports, "insertDefinedTerm", {
|
|
146
146
|
enumerable: true,
|
|
147
|
-
get: function () { return
|
|
147
|
+
get: function () { return chunkO33EBMIX_cjs.insertDefinedTerm; }
|
|
148
148
|
});
|
|
149
149
|
Object.defineProperty(exports, "loadDocxFonts", {
|
|
150
150
|
enumerable: true,
|
|
151
|
-
get: function () { return
|
|
151
|
+
get: function () { return chunkO33EBMIX_cjs.loadDocxFonts; }
|
|
152
152
|
});
|
|
153
153
|
Object.defineProperty(exports, "normalizeDocxExport", {
|
|
154
154
|
enumerable: true,
|
|
155
|
-
get: function () { return
|
|
155
|
+
get: function () { return chunkO33EBMIX_cjs.normalizeDocxExport; }
|
|
156
156
|
});
|
|
157
157
|
Object.defineProperty(exports, "resolveHouseTemplate", {
|
|
158
158
|
enumerable: true,
|
|
159
|
-
get: function () { return
|
|
159
|
+
get: function () { return chunkO33EBMIX_cjs.resolveHouseTemplate; }
|
|
160
160
|
});
|
|
161
161
|
Object.defineProperty(exports, "reviewModule", {
|
|
162
162
|
enumerable: true,
|
|
163
|
-
get: function () { return
|
|
163
|
+
get: function () { return chunkO33EBMIX_cjs.reviewModule; }
|
|
164
164
|
});
|
|
165
165
|
Object.defineProperty(exports, "structuralPort", {
|
|
166
166
|
enumerable: true,
|
|
167
|
-
get: function () { return
|
|
167
|
+
get: function () { return chunkO33EBMIX_cjs.structuralPort; }
|
|
168
168
|
});
|
|
169
169
|
Object.defineProperty(exports, "templateFileName", {
|
|
170
170
|
enumerable: true,
|
|
171
|
-
get: function () { return
|
|
171
|
+
get: function () { return chunkO33EBMIX_cjs.templateFileName; }
|
|
172
172
|
});
|
|
173
173
|
Object.defineProperty(exports, "trackedOrNoted", {
|
|
174
174
|
enumerable: true,
|
|
175
|
-
get: function () { return
|
|
175
|
+
get: function () { return chunkO33EBMIX_cjs.trackedOrNoted; }
|
|
176
176
|
});
|
|
177
177
|
Object.defineProperty(exports, "useDefinedTerms", {
|
|
178
178
|
enumerable: true,
|
|
179
|
-
get: function () { return
|
|
179
|
+
get: function () { return chunkO33EBMIX_cjs.useDefinedTerms; }
|
|
180
180
|
});
|
|
181
181
|
Object.defineProperty(exports, "useHouseTemplate", {
|
|
182
182
|
enumerable: true,
|
|
183
|
-
get: function () { return
|
|
183
|
+
get: function () { return chunkO33EBMIX_cjs.useHouseTemplate; }
|
|
184
184
|
});
|
|
185
185
|
Object.defineProperty(exports, "useReview", {
|
|
186
186
|
enumerable: true,
|
|
187
|
-
get: function () { return
|
|
187
|
+
get: function () { return chunkO33EBMIX_cjs.useReview; }
|
|
188
188
|
});
|
|
189
189
|
Object.defineProperty(exports, "useReviewItem", {
|
|
190
190
|
enumerable: true,
|
|
191
|
-
get: function () { return
|
|
191
|
+
get: function () { return chunkO33EBMIX_cjs.useReviewItem; }
|
|
192
192
|
});
|
|
193
193
|
Object.defineProperty(exports, "useTrackedOrNoted", {
|
|
194
194
|
enumerable: true,
|
|
195
|
-
get: function () { return
|
|
195
|
+
get: function () { return chunkO33EBMIX_cjs.useTrackedOrNoted; }
|
|
196
196
|
});
|
|
197
197
|
Object.defineProperty(exports, "withDirectEditing", {
|
|
198
198
|
enumerable: true,
|
|
199
|
-
get: function () { return
|
|
199
|
+
get: function () { return chunkO33EBMIX_cjs.withDirectEditing; }
|
|
200
200
|
});
|
|
201
201
|
Object.defineProperty(exports, "DocxEditor", {
|
|
202
202
|
enumerable: true,
|
package/dist/docx/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export { StreamedWordArtifact } from '../chunk-
|
|
3
|
-
import { NativeDocxEditor } from '../chunk-
|
|
4
|
-
export { BUILTIN_TEMPLATE_NAME, DEFAULT_DEFINED_TERMS_LABELS, DEFINED_TERM_TRIGGER, DefinedTermsProvider, DocxAuthorContext, DocxCommentActivity, DocxEditorReview, DocxMentions, DocxParticipants, DocxRibbon, GenerateImageButton, HouseTemplateProvider, NativeDocxEditor, builtinHouseTemplate, contentPath, editorPort, findDefinitionsSection, insertDefinedTerm, loadDocxFonts, normalizeDocxExport, resolveHouseTemplate, reviewModule, structuralPort, templateFileName, trackedOrNoted, useDefinedTerms, useHouseTemplate, useReview, useReviewItem, useTrackedOrNoted, withDirectEditing } from '../chunk-
|
|
2
|
+
export { StreamedWordArtifact } from '../chunk-H6DFXG5N.js';
|
|
3
|
+
import { NativeDocxEditor } from '../chunk-CVYY4X5R.js';
|
|
4
|
+
export { BUILTIN_TEMPLATE_NAME, DEFAULT_DEFINED_TERMS_LABELS, DEFINED_TERM_TRIGGER, DefinedTermsProvider, DocxAuthorContext, DocxCommentActivity, DocxEditorReview, DocxMentions, DocxParticipants, DocxRibbon, GenerateImageButton, HouseTemplateProvider, NativeDocxEditor, builtinHouseTemplate, contentPath, editorPort, findDefinitionsSection, insertDefinedTerm, loadDocxFonts, normalizeDocxExport, resolveHouseTemplate, reviewModule, structuralPort, templateFileName, trackedOrNoted, useDefinedTerms, useHouseTemplate, useReview, useReviewItem, useTrackedOrNoted, withDirectEditing } from '../chunk-CVYY4X5R.js';
|
|
5
5
|
import '../chunk-D3QPYKZG.js';
|
|
6
6
|
import '../chunk-AF6RDAJF.js';
|
|
7
7
|
import '../chunk-AA3PT6KR.js';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type NoteKind = 'footnote' | 'endnote';
|
|
2
|
+
/** A style the document defines, as the engine lists them (`getDocumentStyles`). */
|
|
3
|
+
export interface DocumentStyle {
|
|
4
|
+
readonly styleId: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly type: string;
|
|
7
|
+
}
|
|
8
|
+
/** The note text style among `styles`: by Word's built-in name, else by its standard id. */
|
|
9
|
+
export declare function noteTextStyle(styles: readonly DocumentStyle[], kind: NoteKind): string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* The definitions of the note styles `styles` lacks, in `styles.xml` form ([] when none). The
|
|
12
|
+
* reference style is matched by id, the id the engine writes on the reference; the text style by
|
|
13
|
+
* Word's built-in name too, which a document saved in another language keeps under its own id.
|
|
14
|
+
*/
|
|
15
|
+
export declare function missingNoteStyles(styles: readonly DocumentStyle[], kind: NoteKind): string[];
|
|
16
|
+
/**
|
|
17
|
+
* A fragment that carries only `styles`: one empty, open paragraph, so pasting it at the caret
|
|
18
|
+
* inserts nothing and the editor's paste merges the styles the document lacks (as it does for a
|
|
19
|
+
* Quick Part's).
|
|
20
|
+
*/
|
|
21
|
+
export declare function stylesOnlyClipboardHtml(styles: readonly string[]): string;
|
|
22
|
+
/** The editor surface `ensureNoteStyles` needs. */
|
|
23
|
+
interface NoteStyleEditor {
|
|
24
|
+
can(command: {
|
|
25
|
+
type: 'insertNote';
|
|
26
|
+
noteKind: NoteKind;
|
|
27
|
+
}): {
|
|
28
|
+
ok: boolean;
|
|
29
|
+
};
|
|
30
|
+
getDocumentStyles(): readonly DocumentStyle[];
|
|
31
|
+
exec(command: {
|
|
32
|
+
type: 'paste';
|
|
33
|
+
text: string;
|
|
34
|
+
html: string;
|
|
35
|
+
}): {
|
|
36
|
+
ok: boolean;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Before a note is inserted: add Word's note styles the document lacks, so the reference and the
|
|
41
|
+
* note number are superscript and the note text is Word's smaller footnote text. `direct` runs
|
|
42
|
+
* the write untracked, as Word adds styles. Returns the id of the document's note text style
|
|
43
|
+
* ("footnote text" / "endnote text"), for the new note's paragraph.
|
|
44
|
+
*/
|
|
45
|
+
export declare function ensureNoteStyles(editor: NoteStyleEditor, kind: NoteKind, direct?: <T>(fn: () => T) => T): string | undefined;
|
|
46
|
+
export {};
|