@josephomills/esign 0.7.0 → 0.7.1
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/ui/index.cjs +6 -5
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.js +6 -5
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
package/dist/ui/index.cjs
CHANGED
|
@@ -245,9 +245,10 @@ function PdfViewer({ url, placements, workerSrc, primaryColor = "#4f46e5" }) {
|
|
|
245
245
|
fontSize: 13,
|
|
246
246
|
padding: "4px 12px",
|
|
247
247
|
borderRadius: 6,
|
|
248
|
-
border: "1px solid
|
|
249
|
-
background: "
|
|
250
|
-
color:
|
|
248
|
+
border: "1px solid rgba(128,128,128,0.4)",
|
|
249
|
+
background: "transparent",
|
|
250
|
+
color: "inherit",
|
|
251
|
+
opacity: disabled ? 0.4 : 1,
|
|
251
252
|
cursor: disabled ? "default" : "pointer"
|
|
252
253
|
},
|
|
253
254
|
children: label
|
|
@@ -264,11 +265,11 @@ function PdfViewer({ url, placements, workerSrc, primaryColor = "#4f46e5" }) {
|
|
|
264
265
|
gap: 12,
|
|
265
266
|
marginBottom: 8,
|
|
266
267
|
fontSize: 13,
|
|
267
|
-
color: "
|
|
268
|
+
color: "inherit"
|
|
268
269
|
},
|
|
269
270
|
children: [
|
|
270
271
|
navBtn("\u2190 Prev", page <= 1, () => setPage((p) => Math.max(1, p - 1))),
|
|
271
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
272
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { opacity: 0.7 }, children: [
|
|
272
273
|
"Page ",
|
|
273
274
|
page,
|
|
274
275
|
" of ",
|
package/dist/ui/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/SignaturePad.tsx","../../src/ui/ConsentBlock.tsx","../../src/ui/PdfViewer.tsx","../../src/ui/FieldDesigner.tsx","../../src/ui/SigningExperience.tsx"],"names":["useState","useRef","useEffect","SignaturePadLib","jsx","jsxs","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["import SignaturePadLib from \"signature_pad\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface SignaturePadProps {\n primaryColor?: string;\n /** Emits a PNG data URL of the current signature, or null when empty. */\n onChange: (pngDataUrl: string | null) => void;\n}\n\n/**\n * Capture a signature by drawing (signature_pad, touch + mouse, DPI-aware) or by\n * typing a name rendered in a script font. Both yield the same PNG data URL that\n * the seal step stamps onto the document.\n */\nexport function SignaturePad({ primaryColor = \"#4f46e5\", onChange }: SignaturePadProps) {\n const [mode, setMode] = useState<\"draw\" | \"type\">(\"draw\");\n const [typed, setTyped] = useState(\"\");\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const padRef = useRef<SignaturePadLib | null>(null);\n\n useEffect(() => {\n if (mode !== \"draw\") return;\n const canvas = canvasRef.current;\n if (!canvas) return;\n const pad = new SignaturePadLib(canvas, { penColor: \"#111827\", minWidth: 0.8, maxWidth: 2.2 });\n padRef.current = pad;\n const resize = () => {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const rect = canvas.getBoundingClientRect();\n canvas.width = Math.floor(rect.width * ratio);\n canvas.height = Math.floor(rect.height * ratio);\n canvas.getContext(\"2d\")?.scale(ratio, ratio);\n pad.clear();\n onChange(null);\n };\n pad.addEventListener(\"endStroke\", () =>\n onChange(pad.isEmpty() ? null : pad.toDataURL(\"image/png\")),\n );\n resize();\n window.addEventListener(\"resize\", resize);\n return () => {\n window.removeEventListener(\"resize\", resize);\n pad.off();\n padRef.current = null;\n };\n }, [mode, onChange]);\n\n useEffect(() => {\n if (mode !== \"type\") return;\n const name = typed.trim();\n if (!name) {\n onChange(null);\n return;\n }\n const c = document.createElement(\"canvas\");\n c.width = 720;\n c.height = 200;\n const ctx = c.getContext(\"2d\");\n if (!ctx) return;\n ctx.fillStyle = \"#111827\";\n ctx.font = \"72px 'Segoe Script', 'Brush Script MT', cursive\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(name, 24, 110);\n onChange(c.toDataURL(\"image/png\"));\n }, [mode, typed, onChange]);\n\n const tab = (m: \"draw\" | \"type\", label: string) => (\n <button\n type=\"button\"\n onClick={() => {\n setMode(m);\n onChange(null);\n }}\n style={{\n flex: 1,\n padding: \"8px 12px\",\n border: \"none\",\n borderBottom: mode === m ? `2px solid ${primaryColor}` : \"2px solid transparent\",\n background: \"transparent\",\n fontWeight: mode === m ? 600 : 400,\n color: mode === m ? primaryColor : \"#6b7280\",\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ border: \"1px solid #e5e7eb\", borderRadius: 12, overflow: \"hidden\" }}>\n <div style={{ display: \"flex\", borderBottom: \"1px solid #f3f4f6\" }}>\n {tab(\"draw\", \"Draw\")}\n {tab(\"type\", \"Type\")}\n </div>\n <div style={{ position: \"relative\", background: \"#fff\" }}>\n {mode === \"draw\" ? (\n <canvas\n ref={canvasRef}\n style={{ width: \"100%\", height: 180, touchAction: \"none\", display: \"block\" }}\n />\n ) : (\n <div style={{ padding: 16 }}>\n <input\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n placeholder=\"Type your name\"\n style={{\n width: \"100%\",\n fontSize: 40,\n fontFamily: \"'Segoe Script', 'Brush Script MT', cursive\",\n border: \"none\",\n borderBottom: \"1px solid #e5e7eb\",\n outline: \"none\",\n padding: \"8px 0\",\n }}\n />\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => {\n padRef.current?.clear();\n setTyped(\"\");\n onChange(null);\n }}\n style={{\n position: \"absolute\",\n top: 8,\n right: 8,\n fontSize: 12,\n color: \"#6b7280\",\n background: \"rgba(255,255,255,0.8)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n padding: \"2px 8px\",\n cursor: \"pointer\",\n }}\n >\n Clear\n </button>\n </div>\n </div>\n );\n}\n","export interface ConsentValue {\n signerName: string;\n consent: boolean;\n}\n\nexport interface ConsentBlockProps {\n value: ConsentValue;\n onChange: (value: ConsentValue) => void;\n primaryColor?: string;\n}\n\n/**\n * The electronic-signature intent record: a typed full legal name + an explicit\n * consent checkbox. Together with the audit trail this is what makes the simple\n * e-signature legally valid.\n */\nexport function ConsentBlock({ value, onChange, primaryColor = \"#4f46e5\" }: ConsentBlockProps) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <label style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Full legal name</span>\n <input\n value={value.signerName}\n onChange={(e) => onChange({ ...value, signerName: e.target.value })}\n placeholder=\"e.g. Ada Lovelace\"\n style={{\n padding: \"10px 12px\",\n border: \"1px solid #d1d5db\",\n borderRadius: 8,\n fontSize: 15,\n outline: \"none\",\n }}\n />\n </label>\n <label style={{ display: \"flex\", gap: 10, alignItems: \"flex-start\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n checked={value.consent}\n onChange={(e) => onChange({ ...value, consent: e.target.checked })}\n style={{ marginTop: 3, accentColor: primaryColor, width: 16, height: 16 }}\n />\n <span style={{ fontSize: 13, color: \"#4b5563\", lineHeight: 1.5 }}>\n I agree to sign this document electronically. I understand my electronic\n signature is legally binding and that an audit record (time, IP, and a\n tamper-evident hash) is kept with the signed document.\n </span>\n </label>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface ViewerPlacement {\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface PdfViewerProps {\n /** Token-gated source PDF URL. */\n url: string;\n /** Signature-box hints, each drawn on its page at normalized coords. */\n placements?: ViewerPlacement[];\n /** Override the pdf.js worker (defaults to the unpkg .mjs for the bundled version). */\n workerSrc?: string;\n primaryColor?: string;\n}\n\n/**\n * Render the PDF to a canvas (pdf.js, responsive, DPI-aware) one page at a time\n * — same single-page sizing as the FieldDesigner — with prev/next paging and the\n * signature boxes overlaid where the manager placed them. Showing one page keeps\n * the height bounded (so it sits in a dialog without stretching). Falls back to\n * an <iframe> + download link if pdf.js fails to load.\n */\nexport function PdfViewer({ url, placements, workerSrc, primaryColor = \"#4f46e5\" }: PdfViewerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(1);\n const [failed, setFailed] = useState(false);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ url }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [url, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 640;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n if (failed) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <iframe\n src={`${url}#toolbar=0`}\n title=\"Document\"\n style={{ width: \"100%\", height: 520, border: \"1px solid #e5e7eb\", borderRadius: 8 }}\n />\n <a href={url} target=\"_blank\" rel=\"noreferrer\" style={{ fontSize: 13, color: primaryColor }}>\n Download to read\n </a>\n </div>\n );\n }\n\n const navBtn = (label: string, disabled: boolean, onClick: () => void) => (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n style={{\n fontSize: 13,\n padding: \"4px 12px\",\n borderRadius: 6,\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n color: disabled ? \"#9ca3af\" : \"#374151\",\n cursor: disabled ? \"default\" : \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n {numPages > 1 ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n marginBottom: 8,\n fontSize: 13,\n color: \"#374151\",\n }}\n >\n {navBtn(\"← Prev\", page <= 1, () => setPage((p) => Math.max(1, p - 1)))}\n <span>\n Page {page} of {numPages}\n </span>\n {navBtn(\"Next →\", page >= numPages, () => setPage((p) => Math.min(numPages, p + 1)))}\n </div>\n ) : null}\n <div\n ref={stageRef}\n style={{\n position: \"relative\",\n borderRadius: 4,\n overflow: \"hidden\",\n boxShadow: \"0 1px 4px rgba(0,0,0,0.12)\",\n }}\n >\n <canvas ref={canvasRef} />\n {(placements ?? [])\n .filter((pl) => pl.page === page)\n .map((pl, i) => (\n <div\n key={i}\n style={{\n position: \"absolute\",\n left: `${pl.x * 100}%`,\n top: `${pl.y * 100}%`,\n width: `${pl.w * 100}%`,\n height: `${pl.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}1a`,\n borderRadius: 4,\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <span\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n }}\n >\n ✍ Sign here\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface DesignerPlacement {\n id: string;\n label: string;\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface FieldDesignerProps {\n /** The chosen PDF's bytes (read client-side before upload). */\n pdfData: Uint8Array;\n value: DesignerPlacement[];\n onChange: (fields: DesignerPlacement[]) => void;\n workerSrc?: string;\n primaryColor?: string;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\ntype Corner = \"nw\" | \"ne\" | \"sw\" | \"se\";\ntype Drag =\n | { mode: \"new\"; start: { x: number; y: number } }\n | { mode: \"move\"; id: string; start: { x: number; y: number }; orig: Box }\n | { mode: \"resize\"; id: string; handle: Corner; orig: Box };\n\nconst clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), max);\nconst MIN_W = 0.04;\nconst MIN_H = 0.02;\nconst newId = () =>\n typeof crypto !== \"undefined\" && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).slice(2);\n\n/**\n * Place + edit one or more named signature fields on a pdf.js-rendered page.\n * Touch + mouse (Pointer Events): drag empty space to add a field, drag a field\n * to move, drag a corner to resize, × to remove. Fields are listed and renameable\n * on the side (and wrap below on narrow screens). Each box shows its name.\n */\nexport function FieldDesigner({\n pdfData,\n value,\n onChange,\n workerSrc,\n primaryColor = \"#4f46e5\",\n}: FieldDesignerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(value[0]?.page ?? 1);\n const [failed, setFailed] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(value[0]?.id ?? null);\n // Touch drawing must be opt-in so the page can still scroll over the designer.\n const [drawMode, setDrawMode] = useState(false);\n const [drag, setDrag] = useState<Drag | null>(null);\n const [live, setLive] = useState<Box | null>(null);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ data: pdfData.slice() }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [pdfData, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 480;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n function rel(e: { clientX: number; clientY: number }): { x: number; y: number } {\n const r = stageRef.current!.getBoundingClientRect();\n return {\n x: clamp((e.clientX - r.left) / r.width, 0, 1),\n y: clamp((e.clientY - r.top) / r.height, 0, 1),\n };\n }\n\n function onPointerMove(e: React.PointerEvent) {\n if (!drag) return;\n const p = rel(e);\n let b: Box;\n if (drag.mode === \"new\") {\n b = {\n x: Math.min(drag.start.x, p.x),\n y: Math.min(drag.start.y, p.y),\n w: Math.abs(p.x - drag.start.x),\n h: Math.abs(p.y - drag.start.y),\n };\n } else if (drag.mode === \"move\") {\n const dx = p.x - drag.start.x;\n const dy = p.y - drag.start.y;\n b = {\n x: clamp(drag.orig.x + dx, 0, 1 - drag.orig.w),\n y: clamp(drag.orig.y + dy, 0, 1 - drag.orig.h),\n w: drag.orig.w,\n h: drag.orig.h,\n };\n } else {\n let x1 = drag.orig.x;\n let y1 = drag.orig.y;\n let x2 = drag.orig.x + drag.orig.w;\n let y2 = drag.orig.y + drag.orig.h;\n if (drag.handle[0] === \"n\") y1 = p.y;\n else y2 = p.y;\n if (drag.handle[1] === \"w\") x1 = p.x;\n else x2 = p.x;\n b = { x: Math.min(x1, x2), y: Math.min(y1, y2), w: Math.abs(x2 - x1), h: Math.abs(y2 - y1) };\n }\n setLive(b);\n }\n\n function onPointerUp() {\n if (drag && live && live.w >= MIN_W && live.h >= MIN_H) {\n if (drag.mode === \"new\") {\n const f: DesignerPlacement = {\n id: newId(),\n label: value.length === 0 ? \"Signature\" : `Signature ${value.length + 1}`,\n page,\n ...live,\n };\n onChange([...value, f]);\n setSelectedId(f.id);\n setDrawMode(false);\n } else {\n onChange(value.map((x) => (x.id === drag.id ? { ...x, ...live } : x)));\n }\n }\n setDrag(null);\n setLive(null);\n }\n\n function removeField(id: string) {\n onChange(value.filter((f) => f.id !== id));\n if (selectedId === id) setSelectedId(null);\n }\n function rename(id: string, label: string) {\n onChange(value.map((f) => (f.id === id ? { ...f, label } : f)));\n }\n\n const handle = (id: string, geom: Box, c: Corner) => {\n const cx = c[1] === \"w\" ? geom.x : geom.x + geom.w;\n const cy = c[0] === \"n\" ? geom.y : geom.y + geom.h;\n const cursor = c === \"nw\" || c === \"se\" ? \"nwse-resize\" : \"nesw-resize\";\n return (\n <div\n key={c}\n onPointerDown={(e) => {\n e.stopPropagation();\n setDrag({ mode: \"resize\", id, handle: c, orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${cx * 100}%`,\n top: `${cy * 100}%`,\n width: 13,\n height: 13,\n marginLeft: -7,\n marginTop: -7,\n background: \"#fff\",\n border: `2px solid ${primaryColor}`,\n borderRadius: 2,\n cursor,\n touchAction: \"none\",\n }}\n />\n );\n };\n\n if (failed) {\n return (\n <div style={{ color: \"#b91c1c\", fontSize: 14 }}>\n Could not render this PDF for placement. Please check the file is a valid, unencrypted PDF.\n </div>\n );\n }\n\n return (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 16, alignItems: \"flex-start\" }}>\n <div style={{ flex: \"1 1 340px\", minWidth: 260 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginBottom: 8,\n flexWrap: \"wrap\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => setDrawMode((d) => !d)}\n style={{\n fontSize: 13,\n fontWeight: 600,\n padding: \"5px 12px\",\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n background: drawMode ? primaryColor : \"#fff\",\n color: drawMode ? \"#fff\" : primaryColor,\n cursor: \"pointer\",\n }}\n >\n {drawMode ? \"Now drag on the page…\" : \"+ Add field\"}\n </button>\n <span style={{ fontSize: 12, color: \"#6b7280\" }}>or drag on the page (desktop).</span>\n {numPages > 1 ? (\n <label style={{ marginLeft: \"auto\", fontSize: 13, color: \"#374151\" }}>\n Page{\" \"}\n <select value={page} onChange={(e) => setPage(Number(e.target.value))}>\n {Array.from({ length: numPages }, (_, i) => (\n <option key={i} value={i + 1}>\n {i + 1}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n </div>\n <div\n ref={stageRef}\n onPointerDown={(e) => {\n // Mouse can always draw; touch only in draw mode (so the page scrolls otherwise).\n if (drawMode || e.pointerType === \"mouse\") setDrag({ mode: \"new\", start: rel(e) });\n }}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerLeave={onPointerUp}\n style={{\n position: \"relative\",\n cursor: drawMode ? \"crosshair\" : \"default\",\n userSelect: \"none\",\n touchAction: drawMode ? \"none\" : \"auto\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n overflow: \"hidden\",\n }}\n >\n <canvas ref={canvasRef} />\n {value\n .filter((f) => f.page === page)\n .map((f) => {\n const dragging = drag && drag.mode !== \"new\" && drag.id === f.id;\n const geom: Box = dragging && live ? live : f;\n const isSel = f.id === selectedId;\n return (\n <div key={f.id}>\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n setSelectedId(f.id);\n setDrag({ mode: \"move\", id: f.id, start: rel(e), orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${geom.x * 100}%`,\n top: `${geom.y * 100}%`,\n width: `${geom.w * 100}%`,\n height: `${geom.h * 100}%`,\n border: `2px ${isSel ? \"solid\" : \"dashed\"} ${primaryColor}`,\n background: `${primaryColor}${isSel ? \"22\" : \"14\"}`,\n borderRadius: 3,\n cursor: \"move\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n touchAction: \"none\",\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n padding: \"0 4px\",\n }}\n >\n ✍ {f.label || \"Signature\"}\n </span>\n </div>\n {isSel ? (\n <>\n {([\"nw\", \"ne\", \"sw\", \"se\"] as Corner[]).map((c) => handle(f.id, geom, c))}\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n position: \"absolute\",\n left: `${(geom.x + geom.w) * 100}%`,\n top: `${geom.y * 100}%`,\n transform: \"translate(-50%, -50%)\",\n marginTop: -18,\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n background: primaryColor,\n color: \"#fff\",\n border: \"2px solid #fff\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.3)\",\n fontSize: 14,\n lineHeight: \"16px\",\n cursor: \"pointer\",\n padding: 0,\n touchAction: \"none\",\n }}\n >\n ×\n </button>\n </>\n ) : null}\n </div>\n );\n })}\n {drag?.mode === \"new\" && live ? (\n <div\n style={{\n position: \"absolute\",\n left: `${live.x * 100}%`,\n top: `${live.y * 100}%`,\n width: `${live.w * 100}%`,\n height: `${live.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}22`,\n borderRadius: 3,\n pointerEvents: \"none\",\n }}\n />\n ) : null}\n </div>\n </div>\n\n <div style={{ flex: \"1 1 200px\", minWidth: 180, maxWidth: 300 }}>\n <p style={{ fontSize: 13, fontWeight: 600, color: \"#374151\", margin: \"0 0 8px\" }}>\n Signature fields ({value.length})\n </p>\n {value.length === 0 ? (\n <p style={{ fontSize: 13, color: \"#6b7280\" }}>\n Draw a box on the page to add a field. Add as many as you need.\n </p>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {value.map((f) => (\n <div\n key={f.id}\n onClick={() => {\n setSelectedId(f.id);\n setPage(f.page);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"6px 8px\",\n borderRadius: 8,\n border: `1px solid ${f.id === selectedId ? primaryColor : \"#e5e7eb\"}`,\n background: f.id === selectedId ? `${primaryColor}0f` : \"#fff\",\n cursor: \"pointer\",\n }}\n >\n <input\n value={f.label}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => rename(f.id, e.target.value)}\n placeholder=\"Field name\"\n style={{\n flex: 1,\n minWidth: 0,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontSize: 13,\n }}\n />\n <span style={{ fontSize: 11, color: \"#9ca3af\" }}>p{f.page}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#9ca3af\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: 0,\n }}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\n\nimport { ConsentBlock, type ConsentValue } from \"./ConsentBlock\";\nimport { PdfViewer, type ViewerPlacement } from \"./PdfViewer\";\nimport { SignaturePad } from \"./SignaturePad\";\n\nexport interface SigningBranding {\n appName?: string;\n logoUrl?: string;\n primaryColor?: string;\n}\n\nexport interface SigningExperienceProps {\n /** Token-gated source PDF URL (GET /api/esign/source/<token>). */\n sourceUrl: string;\n /** Submit endpoint (POST /sign/<token>/submit). */\n submitUrl: string;\n documentTitle: string;\n placements?: ViewerPlacement[];\n branding?: SigningBranding;\n /** Called after a successful signature submit (host navigates to /done). */\n onSigned?: () => void;\n workerSrc?: string;\n}\n\n/**\n * The full host-branded signer page body: read the PDF (placement highlighted),\n * draw/type a signature, consent, and submit. Self-contained styling so it sits\n * cleanly inside any host shell.\n */\nexport function SigningExperience(props: SigningExperienceProps) {\n const primary = props.branding?.primaryColor ?? \"#4f46e5\";\n const [signaturePng, setSignaturePng] = useState<string | null>(null);\n const [consent, setConsent] = useState<ConsentValue>({ signerName: \"\", consent: false });\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const canSubmit =\n !!signaturePng && consent.consent && consent.signerName.trim().length > 0 && !submitting;\n\n async function submit() {\n if (!canSubmit) return;\n setSubmitting(true);\n setError(null);\n try {\n const res = await fetch(props.submitUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n signaturePng,\n signerName: consent.signerName.trim(),\n consent: true,\n }),\n });\n if (!res.ok) {\n const body = (await res.json().catch(() => null)) as {\n error?: { message?: string };\n } | null;\n throw new Error(body?.error?.message ?? \"Could not submit your signature.\");\n }\n props.onSigned?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Something went wrong.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <div\n style={{\n maxWidth: 760,\n margin: \"0 auto\",\n padding: \"24px 16px 64px\",\n fontFamily:\n \"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif\",\n color: \"#111827\",\n }}\n >\n <header style={{ display: \"flex\", alignItems: \"center\", gap: 12, marginBottom: 8 }}>\n {props.branding?.logoUrl ? (\n <img src={props.branding.logoUrl} alt=\"\" style={{ height: 32 }} />\n ) : null}\n {props.branding?.appName ? (\n <span style={{ fontWeight: 600, color: \"#374151\" }}>{props.branding.appName}</span>\n ) : null}\n </header>\n\n <h1 style={{ fontSize: 22, margin: \"8px 0 4px\" }}>{props.documentTitle}</h1>\n <p style={{ color: \"#6b7280\", fontSize: 14, marginTop: 0 }}>\n Review the document below, then sign — no account or login needed.\n </p>\n\n <section style={{ margin: \"16px 0\" }}>\n <PdfViewer\n url={props.sourceUrl}\n placements={props.placements}\n workerSrc={props.workerSrc}\n primaryColor={primary}\n />\n </section>\n\n <section style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <label style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Your signature</label>\n <div style={{ marginTop: 6 }}>\n <SignaturePad primaryColor={primary} onChange={setSignaturePng} />\n </div>\n </div>\n\n <ConsentBlock value={consent} onChange={setConsent} primaryColor={primary} />\n\n {error ? (\n <div\n style={{\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n color: \"#b91c1c\",\n borderRadius: 8,\n padding: \"10px 12px\",\n fontSize: 14,\n }}\n >\n {error}\n </div>\n ) : null}\n\n <button\n type=\"button\"\n onClick={submit}\n disabled={!canSubmit}\n style={{\n padding: \"14px 16px\",\n borderRadius: 10,\n border: \"none\",\n background: canSubmit ? primary : \"#c7c9d1\",\n color: \"#fff\",\n fontSize: 16,\n fontWeight: 600,\n cursor: canSubmit ? \"pointer\" : \"not-allowed\",\n }}\n >\n {submitting ? \"Signing…\" : \"Sign document\"}\n </button>\n </section>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/SignaturePad.tsx","../../src/ui/ConsentBlock.tsx","../../src/ui/PdfViewer.tsx","../../src/ui/FieldDesigner.tsx","../../src/ui/SigningExperience.tsx"],"names":["useState","useRef","useEffect","SignaturePadLib","jsx","jsxs","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["import SignaturePadLib from \"signature_pad\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface SignaturePadProps {\n primaryColor?: string;\n /** Emits a PNG data URL of the current signature, or null when empty. */\n onChange: (pngDataUrl: string | null) => void;\n}\n\n/**\n * Capture a signature by drawing (signature_pad, touch + mouse, DPI-aware) or by\n * typing a name rendered in a script font. Both yield the same PNG data URL that\n * the seal step stamps onto the document.\n */\nexport function SignaturePad({ primaryColor = \"#4f46e5\", onChange }: SignaturePadProps) {\n const [mode, setMode] = useState<\"draw\" | \"type\">(\"draw\");\n const [typed, setTyped] = useState(\"\");\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const padRef = useRef<SignaturePadLib | null>(null);\n\n useEffect(() => {\n if (mode !== \"draw\") return;\n const canvas = canvasRef.current;\n if (!canvas) return;\n const pad = new SignaturePadLib(canvas, { penColor: \"#111827\", minWidth: 0.8, maxWidth: 2.2 });\n padRef.current = pad;\n const resize = () => {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const rect = canvas.getBoundingClientRect();\n canvas.width = Math.floor(rect.width * ratio);\n canvas.height = Math.floor(rect.height * ratio);\n canvas.getContext(\"2d\")?.scale(ratio, ratio);\n pad.clear();\n onChange(null);\n };\n pad.addEventListener(\"endStroke\", () =>\n onChange(pad.isEmpty() ? null : pad.toDataURL(\"image/png\")),\n );\n resize();\n window.addEventListener(\"resize\", resize);\n return () => {\n window.removeEventListener(\"resize\", resize);\n pad.off();\n padRef.current = null;\n };\n }, [mode, onChange]);\n\n useEffect(() => {\n if (mode !== \"type\") return;\n const name = typed.trim();\n if (!name) {\n onChange(null);\n return;\n }\n const c = document.createElement(\"canvas\");\n c.width = 720;\n c.height = 200;\n const ctx = c.getContext(\"2d\");\n if (!ctx) return;\n ctx.fillStyle = \"#111827\";\n ctx.font = \"72px 'Segoe Script', 'Brush Script MT', cursive\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(name, 24, 110);\n onChange(c.toDataURL(\"image/png\"));\n }, [mode, typed, onChange]);\n\n const tab = (m: \"draw\" | \"type\", label: string) => (\n <button\n type=\"button\"\n onClick={() => {\n setMode(m);\n onChange(null);\n }}\n style={{\n flex: 1,\n padding: \"8px 12px\",\n border: \"none\",\n borderBottom: mode === m ? `2px solid ${primaryColor}` : \"2px solid transparent\",\n background: \"transparent\",\n fontWeight: mode === m ? 600 : 400,\n color: mode === m ? primaryColor : \"#6b7280\",\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ border: \"1px solid #e5e7eb\", borderRadius: 12, overflow: \"hidden\" }}>\n <div style={{ display: \"flex\", borderBottom: \"1px solid #f3f4f6\" }}>\n {tab(\"draw\", \"Draw\")}\n {tab(\"type\", \"Type\")}\n </div>\n <div style={{ position: \"relative\", background: \"#fff\" }}>\n {mode === \"draw\" ? (\n <canvas\n ref={canvasRef}\n style={{ width: \"100%\", height: 180, touchAction: \"none\", display: \"block\" }}\n />\n ) : (\n <div style={{ padding: 16 }}>\n <input\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n placeholder=\"Type your name\"\n style={{\n width: \"100%\",\n fontSize: 40,\n fontFamily: \"'Segoe Script', 'Brush Script MT', cursive\",\n border: \"none\",\n borderBottom: \"1px solid #e5e7eb\",\n outline: \"none\",\n padding: \"8px 0\",\n }}\n />\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => {\n padRef.current?.clear();\n setTyped(\"\");\n onChange(null);\n }}\n style={{\n position: \"absolute\",\n top: 8,\n right: 8,\n fontSize: 12,\n color: \"#6b7280\",\n background: \"rgba(255,255,255,0.8)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n padding: \"2px 8px\",\n cursor: \"pointer\",\n }}\n >\n Clear\n </button>\n </div>\n </div>\n );\n}\n","export interface ConsentValue {\n signerName: string;\n consent: boolean;\n}\n\nexport interface ConsentBlockProps {\n value: ConsentValue;\n onChange: (value: ConsentValue) => void;\n primaryColor?: string;\n}\n\n/**\n * The electronic-signature intent record: a typed full legal name + an explicit\n * consent checkbox. Together with the audit trail this is what makes the simple\n * e-signature legally valid.\n */\nexport function ConsentBlock({ value, onChange, primaryColor = \"#4f46e5\" }: ConsentBlockProps) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <label style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Full legal name</span>\n <input\n value={value.signerName}\n onChange={(e) => onChange({ ...value, signerName: e.target.value })}\n placeholder=\"e.g. Ada Lovelace\"\n style={{\n padding: \"10px 12px\",\n border: \"1px solid #d1d5db\",\n borderRadius: 8,\n fontSize: 15,\n outline: \"none\",\n }}\n />\n </label>\n <label style={{ display: \"flex\", gap: 10, alignItems: \"flex-start\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n checked={value.consent}\n onChange={(e) => onChange({ ...value, consent: e.target.checked })}\n style={{ marginTop: 3, accentColor: primaryColor, width: 16, height: 16 }}\n />\n <span style={{ fontSize: 13, color: \"#4b5563\", lineHeight: 1.5 }}>\n I agree to sign this document electronically. I understand my electronic\n signature is legally binding and that an audit record (time, IP, and a\n tamper-evident hash) is kept with the signed document.\n </span>\n </label>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface ViewerPlacement {\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface PdfViewerProps {\n /** Token-gated source PDF URL. */\n url: string;\n /** Signature-box hints, each drawn on its page at normalized coords. */\n placements?: ViewerPlacement[];\n /** Override the pdf.js worker (defaults to the unpkg .mjs for the bundled version). */\n workerSrc?: string;\n primaryColor?: string;\n}\n\n/**\n * Render the PDF to a canvas (pdf.js, responsive, DPI-aware) one page at a time\n * — same single-page sizing as the FieldDesigner — with prev/next paging and the\n * signature boxes overlaid where the manager placed them. Showing one page keeps\n * the height bounded (so it sits in a dialog without stretching). Falls back to\n * an <iframe> + download link if pdf.js fails to load.\n */\nexport function PdfViewer({ url, placements, workerSrc, primaryColor = \"#4f46e5\" }: PdfViewerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(1);\n const [failed, setFailed] = useState(false);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ url }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [url, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 640;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n if (failed) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <iframe\n src={`${url}#toolbar=0`}\n title=\"Document\"\n style={{ width: \"100%\", height: 520, border: \"1px solid #e5e7eb\", borderRadius: 8 }}\n />\n <a href={url} target=\"_blank\" rel=\"noreferrer\" style={{ fontSize: 13, color: primaryColor }}>\n Download to read\n </a>\n </div>\n );\n }\n\n // Theme-neutral so the controls read in both light and dark mode: text colour\n // is inherited from the host, and the border is a mid-grey that shows on either\n // background. (Inline styles can't see the host's dark-mode class.)\n const navBtn = (label: string, disabled: boolean, onClick: () => void) => (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n style={{\n fontSize: 13,\n padding: \"4px 12px\",\n borderRadius: 6,\n border: \"1px solid rgba(128,128,128,0.4)\",\n background: \"transparent\",\n color: \"inherit\",\n opacity: disabled ? 0.4 : 1,\n cursor: disabled ? \"default\" : \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n {numPages > 1 ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n marginBottom: 8,\n fontSize: 13,\n color: \"inherit\",\n }}\n >\n {navBtn(\"← Prev\", page <= 1, () => setPage((p) => Math.max(1, p - 1)))}\n <span style={{ opacity: 0.7 }}>\n Page {page} of {numPages}\n </span>\n {navBtn(\"Next →\", page >= numPages, () => setPage((p) => Math.min(numPages, p + 1)))}\n </div>\n ) : null}\n <div\n ref={stageRef}\n style={{\n position: \"relative\",\n borderRadius: 4,\n overflow: \"hidden\",\n boxShadow: \"0 1px 4px rgba(0,0,0,0.12)\",\n }}\n >\n <canvas ref={canvasRef} />\n {(placements ?? [])\n .filter((pl) => pl.page === page)\n .map((pl, i) => (\n <div\n key={i}\n style={{\n position: \"absolute\",\n left: `${pl.x * 100}%`,\n top: `${pl.y * 100}%`,\n width: `${pl.w * 100}%`,\n height: `${pl.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}1a`,\n borderRadius: 4,\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <span\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n }}\n >\n ✍ Sign here\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface DesignerPlacement {\n id: string;\n label: string;\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface FieldDesignerProps {\n /** The chosen PDF's bytes (read client-side before upload). */\n pdfData: Uint8Array;\n value: DesignerPlacement[];\n onChange: (fields: DesignerPlacement[]) => void;\n workerSrc?: string;\n primaryColor?: string;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\ntype Corner = \"nw\" | \"ne\" | \"sw\" | \"se\";\ntype Drag =\n | { mode: \"new\"; start: { x: number; y: number } }\n | { mode: \"move\"; id: string; start: { x: number; y: number }; orig: Box }\n | { mode: \"resize\"; id: string; handle: Corner; orig: Box };\n\nconst clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), max);\nconst MIN_W = 0.04;\nconst MIN_H = 0.02;\nconst newId = () =>\n typeof crypto !== \"undefined\" && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).slice(2);\n\n/**\n * Place + edit one or more named signature fields on a pdf.js-rendered page.\n * Touch + mouse (Pointer Events): drag empty space to add a field, drag a field\n * to move, drag a corner to resize, × to remove. Fields are listed and renameable\n * on the side (and wrap below on narrow screens). Each box shows its name.\n */\nexport function FieldDesigner({\n pdfData,\n value,\n onChange,\n workerSrc,\n primaryColor = \"#4f46e5\",\n}: FieldDesignerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(value[0]?.page ?? 1);\n const [failed, setFailed] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(value[0]?.id ?? null);\n // Touch drawing must be opt-in so the page can still scroll over the designer.\n const [drawMode, setDrawMode] = useState(false);\n const [drag, setDrag] = useState<Drag | null>(null);\n const [live, setLive] = useState<Box | null>(null);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ data: pdfData.slice() }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [pdfData, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 480;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n function rel(e: { clientX: number; clientY: number }): { x: number; y: number } {\n const r = stageRef.current!.getBoundingClientRect();\n return {\n x: clamp((e.clientX - r.left) / r.width, 0, 1),\n y: clamp((e.clientY - r.top) / r.height, 0, 1),\n };\n }\n\n function onPointerMove(e: React.PointerEvent) {\n if (!drag) return;\n const p = rel(e);\n let b: Box;\n if (drag.mode === \"new\") {\n b = {\n x: Math.min(drag.start.x, p.x),\n y: Math.min(drag.start.y, p.y),\n w: Math.abs(p.x - drag.start.x),\n h: Math.abs(p.y - drag.start.y),\n };\n } else if (drag.mode === \"move\") {\n const dx = p.x - drag.start.x;\n const dy = p.y - drag.start.y;\n b = {\n x: clamp(drag.orig.x + dx, 0, 1 - drag.orig.w),\n y: clamp(drag.orig.y + dy, 0, 1 - drag.orig.h),\n w: drag.orig.w,\n h: drag.orig.h,\n };\n } else {\n let x1 = drag.orig.x;\n let y1 = drag.orig.y;\n let x2 = drag.orig.x + drag.orig.w;\n let y2 = drag.orig.y + drag.orig.h;\n if (drag.handle[0] === \"n\") y1 = p.y;\n else y2 = p.y;\n if (drag.handle[1] === \"w\") x1 = p.x;\n else x2 = p.x;\n b = { x: Math.min(x1, x2), y: Math.min(y1, y2), w: Math.abs(x2 - x1), h: Math.abs(y2 - y1) };\n }\n setLive(b);\n }\n\n function onPointerUp() {\n if (drag && live && live.w >= MIN_W && live.h >= MIN_H) {\n if (drag.mode === \"new\") {\n const f: DesignerPlacement = {\n id: newId(),\n label: value.length === 0 ? \"Signature\" : `Signature ${value.length + 1}`,\n page,\n ...live,\n };\n onChange([...value, f]);\n setSelectedId(f.id);\n setDrawMode(false);\n } else {\n onChange(value.map((x) => (x.id === drag.id ? { ...x, ...live } : x)));\n }\n }\n setDrag(null);\n setLive(null);\n }\n\n function removeField(id: string) {\n onChange(value.filter((f) => f.id !== id));\n if (selectedId === id) setSelectedId(null);\n }\n function rename(id: string, label: string) {\n onChange(value.map((f) => (f.id === id ? { ...f, label } : f)));\n }\n\n const handle = (id: string, geom: Box, c: Corner) => {\n const cx = c[1] === \"w\" ? geom.x : geom.x + geom.w;\n const cy = c[0] === \"n\" ? geom.y : geom.y + geom.h;\n const cursor = c === \"nw\" || c === \"se\" ? \"nwse-resize\" : \"nesw-resize\";\n return (\n <div\n key={c}\n onPointerDown={(e) => {\n e.stopPropagation();\n setDrag({ mode: \"resize\", id, handle: c, orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${cx * 100}%`,\n top: `${cy * 100}%`,\n width: 13,\n height: 13,\n marginLeft: -7,\n marginTop: -7,\n background: \"#fff\",\n border: `2px solid ${primaryColor}`,\n borderRadius: 2,\n cursor,\n touchAction: \"none\",\n }}\n />\n );\n };\n\n if (failed) {\n return (\n <div style={{ color: \"#b91c1c\", fontSize: 14 }}>\n Could not render this PDF for placement. Please check the file is a valid, unencrypted PDF.\n </div>\n );\n }\n\n return (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 16, alignItems: \"flex-start\" }}>\n <div style={{ flex: \"1 1 340px\", minWidth: 260 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginBottom: 8,\n flexWrap: \"wrap\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => setDrawMode((d) => !d)}\n style={{\n fontSize: 13,\n fontWeight: 600,\n padding: \"5px 12px\",\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n background: drawMode ? primaryColor : \"#fff\",\n color: drawMode ? \"#fff\" : primaryColor,\n cursor: \"pointer\",\n }}\n >\n {drawMode ? \"Now drag on the page…\" : \"+ Add field\"}\n </button>\n <span style={{ fontSize: 12, color: \"#6b7280\" }}>or drag on the page (desktop).</span>\n {numPages > 1 ? (\n <label style={{ marginLeft: \"auto\", fontSize: 13, color: \"#374151\" }}>\n Page{\" \"}\n <select value={page} onChange={(e) => setPage(Number(e.target.value))}>\n {Array.from({ length: numPages }, (_, i) => (\n <option key={i} value={i + 1}>\n {i + 1}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n </div>\n <div\n ref={stageRef}\n onPointerDown={(e) => {\n // Mouse can always draw; touch only in draw mode (so the page scrolls otherwise).\n if (drawMode || e.pointerType === \"mouse\") setDrag({ mode: \"new\", start: rel(e) });\n }}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerLeave={onPointerUp}\n style={{\n position: \"relative\",\n cursor: drawMode ? \"crosshair\" : \"default\",\n userSelect: \"none\",\n touchAction: drawMode ? \"none\" : \"auto\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n overflow: \"hidden\",\n }}\n >\n <canvas ref={canvasRef} />\n {value\n .filter((f) => f.page === page)\n .map((f) => {\n const dragging = drag && drag.mode !== \"new\" && drag.id === f.id;\n const geom: Box = dragging && live ? live : f;\n const isSel = f.id === selectedId;\n return (\n <div key={f.id}>\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n setSelectedId(f.id);\n setDrag({ mode: \"move\", id: f.id, start: rel(e), orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${geom.x * 100}%`,\n top: `${geom.y * 100}%`,\n width: `${geom.w * 100}%`,\n height: `${geom.h * 100}%`,\n border: `2px ${isSel ? \"solid\" : \"dashed\"} ${primaryColor}`,\n background: `${primaryColor}${isSel ? \"22\" : \"14\"}`,\n borderRadius: 3,\n cursor: \"move\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n touchAction: \"none\",\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n padding: \"0 4px\",\n }}\n >\n ✍ {f.label || \"Signature\"}\n </span>\n </div>\n {isSel ? (\n <>\n {([\"nw\", \"ne\", \"sw\", \"se\"] as Corner[]).map((c) => handle(f.id, geom, c))}\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n position: \"absolute\",\n left: `${(geom.x + geom.w) * 100}%`,\n top: `${geom.y * 100}%`,\n transform: \"translate(-50%, -50%)\",\n marginTop: -18,\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n background: primaryColor,\n color: \"#fff\",\n border: \"2px solid #fff\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.3)\",\n fontSize: 14,\n lineHeight: \"16px\",\n cursor: \"pointer\",\n padding: 0,\n touchAction: \"none\",\n }}\n >\n ×\n </button>\n </>\n ) : null}\n </div>\n );\n })}\n {drag?.mode === \"new\" && live ? (\n <div\n style={{\n position: \"absolute\",\n left: `${live.x * 100}%`,\n top: `${live.y * 100}%`,\n width: `${live.w * 100}%`,\n height: `${live.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}22`,\n borderRadius: 3,\n pointerEvents: \"none\",\n }}\n />\n ) : null}\n </div>\n </div>\n\n <div style={{ flex: \"1 1 200px\", minWidth: 180, maxWidth: 300 }}>\n <p style={{ fontSize: 13, fontWeight: 600, color: \"#374151\", margin: \"0 0 8px\" }}>\n Signature fields ({value.length})\n </p>\n {value.length === 0 ? (\n <p style={{ fontSize: 13, color: \"#6b7280\" }}>\n Draw a box on the page to add a field. Add as many as you need.\n </p>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {value.map((f) => (\n <div\n key={f.id}\n onClick={() => {\n setSelectedId(f.id);\n setPage(f.page);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"6px 8px\",\n borderRadius: 8,\n border: `1px solid ${f.id === selectedId ? primaryColor : \"#e5e7eb\"}`,\n background: f.id === selectedId ? `${primaryColor}0f` : \"#fff\",\n cursor: \"pointer\",\n }}\n >\n <input\n value={f.label}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => rename(f.id, e.target.value)}\n placeholder=\"Field name\"\n style={{\n flex: 1,\n minWidth: 0,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontSize: 13,\n }}\n />\n <span style={{ fontSize: 11, color: \"#9ca3af\" }}>p{f.page}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#9ca3af\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: 0,\n }}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\n\nimport { ConsentBlock, type ConsentValue } from \"./ConsentBlock\";\nimport { PdfViewer, type ViewerPlacement } from \"./PdfViewer\";\nimport { SignaturePad } from \"./SignaturePad\";\n\nexport interface SigningBranding {\n appName?: string;\n logoUrl?: string;\n primaryColor?: string;\n}\n\nexport interface SigningExperienceProps {\n /** Token-gated source PDF URL (GET /api/esign/source/<token>). */\n sourceUrl: string;\n /** Submit endpoint (POST /sign/<token>/submit). */\n submitUrl: string;\n documentTitle: string;\n placements?: ViewerPlacement[];\n branding?: SigningBranding;\n /** Called after a successful signature submit (host navigates to /done). */\n onSigned?: () => void;\n workerSrc?: string;\n}\n\n/**\n * The full host-branded signer page body: read the PDF (placement highlighted),\n * draw/type a signature, consent, and submit. Self-contained styling so it sits\n * cleanly inside any host shell.\n */\nexport function SigningExperience(props: SigningExperienceProps) {\n const primary = props.branding?.primaryColor ?? \"#4f46e5\";\n const [signaturePng, setSignaturePng] = useState<string | null>(null);\n const [consent, setConsent] = useState<ConsentValue>({ signerName: \"\", consent: false });\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const canSubmit =\n !!signaturePng && consent.consent && consent.signerName.trim().length > 0 && !submitting;\n\n async function submit() {\n if (!canSubmit) return;\n setSubmitting(true);\n setError(null);\n try {\n const res = await fetch(props.submitUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n signaturePng,\n signerName: consent.signerName.trim(),\n consent: true,\n }),\n });\n if (!res.ok) {\n const body = (await res.json().catch(() => null)) as {\n error?: { message?: string };\n } | null;\n throw new Error(body?.error?.message ?? \"Could not submit your signature.\");\n }\n props.onSigned?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Something went wrong.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <div\n style={{\n maxWidth: 760,\n margin: \"0 auto\",\n padding: \"24px 16px 64px\",\n fontFamily:\n \"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif\",\n color: \"#111827\",\n }}\n >\n <header style={{ display: \"flex\", alignItems: \"center\", gap: 12, marginBottom: 8 }}>\n {props.branding?.logoUrl ? (\n <img src={props.branding.logoUrl} alt=\"\" style={{ height: 32 }} />\n ) : null}\n {props.branding?.appName ? (\n <span style={{ fontWeight: 600, color: \"#374151\" }}>{props.branding.appName}</span>\n ) : null}\n </header>\n\n <h1 style={{ fontSize: 22, margin: \"8px 0 4px\" }}>{props.documentTitle}</h1>\n <p style={{ color: \"#6b7280\", fontSize: 14, marginTop: 0 }}>\n Review the document below, then sign — no account or login needed.\n </p>\n\n <section style={{ margin: \"16px 0\" }}>\n <PdfViewer\n url={props.sourceUrl}\n placements={props.placements}\n workerSrc={props.workerSrc}\n primaryColor={primary}\n />\n </section>\n\n <section style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <label style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Your signature</label>\n <div style={{ marginTop: 6 }}>\n <SignaturePad primaryColor={primary} onChange={setSignaturePng} />\n </div>\n </div>\n\n <ConsentBlock value={consent} onChange={setConsent} primaryColor={primary} />\n\n {error ? (\n <div\n style={{\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n color: \"#b91c1c\",\n borderRadius: 8,\n padding: \"10px 12px\",\n fontSize: 14,\n }}\n >\n {error}\n </div>\n ) : null}\n\n <button\n type=\"button\"\n onClick={submit}\n disabled={!canSubmit}\n style={{\n padding: \"14px 16px\",\n borderRadius: 10,\n border: \"none\",\n background: canSubmit ? primary : \"#c7c9d1\",\n color: \"#fff\",\n fontSize: 16,\n fontWeight: 600,\n cursor: canSubmit ? \"pointer\" : \"not-allowed\",\n }}\n >\n {submitting ? \"Signing…\" : \"Sign document\"}\n </button>\n </section>\n </div>\n );\n}\n"]}
|
package/dist/ui/index.js
CHANGED
|
@@ -239,9 +239,10 @@ function PdfViewer({ url, placements, workerSrc, primaryColor = "#4f46e5" }) {
|
|
|
239
239
|
fontSize: 13,
|
|
240
240
|
padding: "4px 12px",
|
|
241
241
|
borderRadius: 6,
|
|
242
|
-
border: "1px solid
|
|
243
|
-
background: "
|
|
244
|
-
color:
|
|
242
|
+
border: "1px solid rgba(128,128,128,0.4)",
|
|
243
|
+
background: "transparent",
|
|
244
|
+
color: "inherit",
|
|
245
|
+
opacity: disabled ? 0.4 : 1,
|
|
245
246
|
cursor: disabled ? "default" : "pointer"
|
|
246
247
|
},
|
|
247
248
|
children: label
|
|
@@ -258,11 +259,11 @@ function PdfViewer({ url, placements, workerSrc, primaryColor = "#4f46e5" }) {
|
|
|
258
259
|
gap: 12,
|
|
259
260
|
marginBottom: 8,
|
|
260
261
|
fontSize: 13,
|
|
261
|
-
color: "
|
|
262
|
+
color: "inherit"
|
|
262
263
|
},
|
|
263
264
|
children: [
|
|
264
265
|
navBtn("\u2190 Prev", page <= 1, () => setPage((p) => Math.max(1, p - 1))),
|
|
265
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
|
266
|
+
/* @__PURE__ */ jsxs("span", { style: { opacity: 0.7 }, children: [
|
|
266
267
|
"Page ",
|
|
267
268
|
page,
|
|
268
269
|
" of ",
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/SignaturePad.tsx","../../src/ui/ConsentBlock.tsx","../../src/ui/PdfViewer.tsx","../../src/ui/FieldDesigner.tsx","../../src/ui/SigningExperience.tsx"],"names":["jsxs","jsx","useState","useRef","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import SignaturePadLib from \"signature_pad\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface SignaturePadProps {\n primaryColor?: string;\n /** Emits a PNG data URL of the current signature, or null when empty. */\n onChange: (pngDataUrl: string | null) => void;\n}\n\n/**\n * Capture a signature by drawing (signature_pad, touch + mouse, DPI-aware) or by\n * typing a name rendered in a script font. Both yield the same PNG data URL that\n * the seal step stamps onto the document.\n */\nexport function SignaturePad({ primaryColor = \"#4f46e5\", onChange }: SignaturePadProps) {\n const [mode, setMode] = useState<\"draw\" | \"type\">(\"draw\");\n const [typed, setTyped] = useState(\"\");\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const padRef = useRef<SignaturePadLib | null>(null);\n\n useEffect(() => {\n if (mode !== \"draw\") return;\n const canvas = canvasRef.current;\n if (!canvas) return;\n const pad = new SignaturePadLib(canvas, { penColor: \"#111827\", minWidth: 0.8, maxWidth: 2.2 });\n padRef.current = pad;\n const resize = () => {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const rect = canvas.getBoundingClientRect();\n canvas.width = Math.floor(rect.width * ratio);\n canvas.height = Math.floor(rect.height * ratio);\n canvas.getContext(\"2d\")?.scale(ratio, ratio);\n pad.clear();\n onChange(null);\n };\n pad.addEventListener(\"endStroke\", () =>\n onChange(pad.isEmpty() ? null : pad.toDataURL(\"image/png\")),\n );\n resize();\n window.addEventListener(\"resize\", resize);\n return () => {\n window.removeEventListener(\"resize\", resize);\n pad.off();\n padRef.current = null;\n };\n }, [mode, onChange]);\n\n useEffect(() => {\n if (mode !== \"type\") return;\n const name = typed.trim();\n if (!name) {\n onChange(null);\n return;\n }\n const c = document.createElement(\"canvas\");\n c.width = 720;\n c.height = 200;\n const ctx = c.getContext(\"2d\");\n if (!ctx) return;\n ctx.fillStyle = \"#111827\";\n ctx.font = \"72px 'Segoe Script', 'Brush Script MT', cursive\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(name, 24, 110);\n onChange(c.toDataURL(\"image/png\"));\n }, [mode, typed, onChange]);\n\n const tab = (m: \"draw\" | \"type\", label: string) => (\n <button\n type=\"button\"\n onClick={() => {\n setMode(m);\n onChange(null);\n }}\n style={{\n flex: 1,\n padding: \"8px 12px\",\n border: \"none\",\n borderBottom: mode === m ? `2px solid ${primaryColor}` : \"2px solid transparent\",\n background: \"transparent\",\n fontWeight: mode === m ? 600 : 400,\n color: mode === m ? primaryColor : \"#6b7280\",\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ border: \"1px solid #e5e7eb\", borderRadius: 12, overflow: \"hidden\" }}>\n <div style={{ display: \"flex\", borderBottom: \"1px solid #f3f4f6\" }}>\n {tab(\"draw\", \"Draw\")}\n {tab(\"type\", \"Type\")}\n </div>\n <div style={{ position: \"relative\", background: \"#fff\" }}>\n {mode === \"draw\" ? (\n <canvas\n ref={canvasRef}\n style={{ width: \"100%\", height: 180, touchAction: \"none\", display: \"block\" }}\n />\n ) : (\n <div style={{ padding: 16 }}>\n <input\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n placeholder=\"Type your name\"\n style={{\n width: \"100%\",\n fontSize: 40,\n fontFamily: \"'Segoe Script', 'Brush Script MT', cursive\",\n border: \"none\",\n borderBottom: \"1px solid #e5e7eb\",\n outline: \"none\",\n padding: \"8px 0\",\n }}\n />\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => {\n padRef.current?.clear();\n setTyped(\"\");\n onChange(null);\n }}\n style={{\n position: \"absolute\",\n top: 8,\n right: 8,\n fontSize: 12,\n color: \"#6b7280\",\n background: \"rgba(255,255,255,0.8)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n padding: \"2px 8px\",\n cursor: \"pointer\",\n }}\n >\n Clear\n </button>\n </div>\n </div>\n );\n}\n","export interface ConsentValue {\n signerName: string;\n consent: boolean;\n}\n\nexport interface ConsentBlockProps {\n value: ConsentValue;\n onChange: (value: ConsentValue) => void;\n primaryColor?: string;\n}\n\n/**\n * The electronic-signature intent record: a typed full legal name + an explicit\n * consent checkbox. Together with the audit trail this is what makes the simple\n * e-signature legally valid.\n */\nexport function ConsentBlock({ value, onChange, primaryColor = \"#4f46e5\" }: ConsentBlockProps) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <label style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Full legal name</span>\n <input\n value={value.signerName}\n onChange={(e) => onChange({ ...value, signerName: e.target.value })}\n placeholder=\"e.g. Ada Lovelace\"\n style={{\n padding: \"10px 12px\",\n border: \"1px solid #d1d5db\",\n borderRadius: 8,\n fontSize: 15,\n outline: \"none\",\n }}\n />\n </label>\n <label style={{ display: \"flex\", gap: 10, alignItems: \"flex-start\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n checked={value.consent}\n onChange={(e) => onChange({ ...value, consent: e.target.checked })}\n style={{ marginTop: 3, accentColor: primaryColor, width: 16, height: 16 }}\n />\n <span style={{ fontSize: 13, color: \"#4b5563\", lineHeight: 1.5 }}>\n I agree to sign this document electronically. I understand my electronic\n signature is legally binding and that an audit record (time, IP, and a\n tamper-evident hash) is kept with the signed document.\n </span>\n </label>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface ViewerPlacement {\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface PdfViewerProps {\n /** Token-gated source PDF URL. */\n url: string;\n /** Signature-box hints, each drawn on its page at normalized coords. */\n placements?: ViewerPlacement[];\n /** Override the pdf.js worker (defaults to the unpkg .mjs for the bundled version). */\n workerSrc?: string;\n primaryColor?: string;\n}\n\n/**\n * Render the PDF to a canvas (pdf.js, responsive, DPI-aware) one page at a time\n * — same single-page sizing as the FieldDesigner — with prev/next paging and the\n * signature boxes overlaid where the manager placed them. Showing one page keeps\n * the height bounded (so it sits in a dialog without stretching). Falls back to\n * an <iframe> + download link if pdf.js fails to load.\n */\nexport function PdfViewer({ url, placements, workerSrc, primaryColor = \"#4f46e5\" }: PdfViewerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(1);\n const [failed, setFailed] = useState(false);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ url }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [url, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 640;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n if (failed) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <iframe\n src={`${url}#toolbar=0`}\n title=\"Document\"\n style={{ width: \"100%\", height: 520, border: \"1px solid #e5e7eb\", borderRadius: 8 }}\n />\n <a href={url} target=\"_blank\" rel=\"noreferrer\" style={{ fontSize: 13, color: primaryColor }}>\n Download to read\n </a>\n </div>\n );\n }\n\n const navBtn = (label: string, disabled: boolean, onClick: () => void) => (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n style={{\n fontSize: 13,\n padding: \"4px 12px\",\n borderRadius: 6,\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n color: disabled ? \"#9ca3af\" : \"#374151\",\n cursor: disabled ? \"default\" : \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n {numPages > 1 ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n marginBottom: 8,\n fontSize: 13,\n color: \"#374151\",\n }}\n >\n {navBtn(\"← Prev\", page <= 1, () => setPage((p) => Math.max(1, p - 1)))}\n <span>\n Page {page} of {numPages}\n </span>\n {navBtn(\"Next →\", page >= numPages, () => setPage((p) => Math.min(numPages, p + 1)))}\n </div>\n ) : null}\n <div\n ref={stageRef}\n style={{\n position: \"relative\",\n borderRadius: 4,\n overflow: \"hidden\",\n boxShadow: \"0 1px 4px rgba(0,0,0,0.12)\",\n }}\n >\n <canvas ref={canvasRef} />\n {(placements ?? [])\n .filter((pl) => pl.page === page)\n .map((pl, i) => (\n <div\n key={i}\n style={{\n position: \"absolute\",\n left: `${pl.x * 100}%`,\n top: `${pl.y * 100}%`,\n width: `${pl.w * 100}%`,\n height: `${pl.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}1a`,\n borderRadius: 4,\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <span\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n }}\n >\n ✍ Sign here\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface DesignerPlacement {\n id: string;\n label: string;\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface FieldDesignerProps {\n /** The chosen PDF's bytes (read client-side before upload). */\n pdfData: Uint8Array;\n value: DesignerPlacement[];\n onChange: (fields: DesignerPlacement[]) => void;\n workerSrc?: string;\n primaryColor?: string;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\ntype Corner = \"nw\" | \"ne\" | \"sw\" | \"se\";\ntype Drag =\n | { mode: \"new\"; start: { x: number; y: number } }\n | { mode: \"move\"; id: string; start: { x: number; y: number }; orig: Box }\n | { mode: \"resize\"; id: string; handle: Corner; orig: Box };\n\nconst clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), max);\nconst MIN_W = 0.04;\nconst MIN_H = 0.02;\nconst newId = () =>\n typeof crypto !== \"undefined\" && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).slice(2);\n\n/**\n * Place + edit one or more named signature fields on a pdf.js-rendered page.\n * Touch + mouse (Pointer Events): drag empty space to add a field, drag a field\n * to move, drag a corner to resize, × to remove. Fields are listed and renameable\n * on the side (and wrap below on narrow screens). Each box shows its name.\n */\nexport function FieldDesigner({\n pdfData,\n value,\n onChange,\n workerSrc,\n primaryColor = \"#4f46e5\",\n}: FieldDesignerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(value[0]?.page ?? 1);\n const [failed, setFailed] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(value[0]?.id ?? null);\n // Touch drawing must be opt-in so the page can still scroll over the designer.\n const [drawMode, setDrawMode] = useState(false);\n const [drag, setDrag] = useState<Drag | null>(null);\n const [live, setLive] = useState<Box | null>(null);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ data: pdfData.slice() }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [pdfData, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 480;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n function rel(e: { clientX: number; clientY: number }): { x: number; y: number } {\n const r = stageRef.current!.getBoundingClientRect();\n return {\n x: clamp((e.clientX - r.left) / r.width, 0, 1),\n y: clamp((e.clientY - r.top) / r.height, 0, 1),\n };\n }\n\n function onPointerMove(e: React.PointerEvent) {\n if (!drag) return;\n const p = rel(e);\n let b: Box;\n if (drag.mode === \"new\") {\n b = {\n x: Math.min(drag.start.x, p.x),\n y: Math.min(drag.start.y, p.y),\n w: Math.abs(p.x - drag.start.x),\n h: Math.abs(p.y - drag.start.y),\n };\n } else if (drag.mode === \"move\") {\n const dx = p.x - drag.start.x;\n const dy = p.y - drag.start.y;\n b = {\n x: clamp(drag.orig.x + dx, 0, 1 - drag.orig.w),\n y: clamp(drag.orig.y + dy, 0, 1 - drag.orig.h),\n w: drag.orig.w,\n h: drag.orig.h,\n };\n } else {\n let x1 = drag.orig.x;\n let y1 = drag.orig.y;\n let x2 = drag.orig.x + drag.orig.w;\n let y2 = drag.orig.y + drag.orig.h;\n if (drag.handle[0] === \"n\") y1 = p.y;\n else y2 = p.y;\n if (drag.handle[1] === \"w\") x1 = p.x;\n else x2 = p.x;\n b = { x: Math.min(x1, x2), y: Math.min(y1, y2), w: Math.abs(x2 - x1), h: Math.abs(y2 - y1) };\n }\n setLive(b);\n }\n\n function onPointerUp() {\n if (drag && live && live.w >= MIN_W && live.h >= MIN_H) {\n if (drag.mode === \"new\") {\n const f: DesignerPlacement = {\n id: newId(),\n label: value.length === 0 ? \"Signature\" : `Signature ${value.length + 1}`,\n page,\n ...live,\n };\n onChange([...value, f]);\n setSelectedId(f.id);\n setDrawMode(false);\n } else {\n onChange(value.map((x) => (x.id === drag.id ? { ...x, ...live } : x)));\n }\n }\n setDrag(null);\n setLive(null);\n }\n\n function removeField(id: string) {\n onChange(value.filter((f) => f.id !== id));\n if (selectedId === id) setSelectedId(null);\n }\n function rename(id: string, label: string) {\n onChange(value.map((f) => (f.id === id ? { ...f, label } : f)));\n }\n\n const handle = (id: string, geom: Box, c: Corner) => {\n const cx = c[1] === \"w\" ? geom.x : geom.x + geom.w;\n const cy = c[0] === \"n\" ? geom.y : geom.y + geom.h;\n const cursor = c === \"nw\" || c === \"se\" ? \"nwse-resize\" : \"nesw-resize\";\n return (\n <div\n key={c}\n onPointerDown={(e) => {\n e.stopPropagation();\n setDrag({ mode: \"resize\", id, handle: c, orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${cx * 100}%`,\n top: `${cy * 100}%`,\n width: 13,\n height: 13,\n marginLeft: -7,\n marginTop: -7,\n background: \"#fff\",\n border: `2px solid ${primaryColor}`,\n borderRadius: 2,\n cursor,\n touchAction: \"none\",\n }}\n />\n );\n };\n\n if (failed) {\n return (\n <div style={{ color: \"#b91c1c\", fontSize: 14 }}>\n Could not render this PDF for placement. Please check the file is a valid, unencrypted PDF.\n </div>\n );\n }\n\n return (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 16, alignItems: \"flex-start\" }}>\n <div style={{ flex: \"1 1 340px\", minWidth: 260 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginBottom: 8,\n flexWrap: \"wrap\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => setDrawMode((d) => !d)}\n style={{\n fontSize: 13,\n fontWeight: 600,\n padding: \"5px 12px\",\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n background: drawMode ? primaryColor : \"#fff\",\n color: drawMode ? \"#fff\" : primaryColor,\n cursor: \"pointer\",\n }}\n >\n {drawMode ? \"Now drag on the page…\" : \"+ Add field\"}\n </button>\n <span style={{ fontSize: 12, color: \"#6b7280\" }}>or drag on the page (desktop).</span>\n {numPages > 1 ? (\n <label style={{ marginLeft: \"auto\", fontSize: 13, color: \"#374151\" }}>\n Page{\" \"}\n <select value={page} onChange={(e) => setPage(Number(e.target.value))}>\n {Array.from({ length: numPages }, (_, i) => (\n <option key={i} value={i + 1}>\n {i + 1}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n </div>\n <div\n ref={stageRef}\n onPointerDown={(e) => {\n // Mouse can always draw; touch only in draw mode (so the page scrolls otherwise).\n if (drawMode || e.pointerType === \"mouse\") setDrag({ mode: \"new\", start: rel(e) });\n }}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerLeave={onPointerUp}\n style={{\n position: \"relative\",\n cursor: drawMode ? \"crosshair\" : \"default\",\n userSelect: \"none\",\n touchAction: drawMode ? \"none\" : \"auto\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n overflow: \"hidden\",\n }}\n >\n <canvas ref={canvasRef} />\n {value\n .filter((f) => f.page === page)\n .map((f) => {\n const dragging = drag && drag.mode !== \"new\" && drag.id === f.id;\n const geom: Box = dragging && live ? live : f;\n const isSel = f.id === selectedId;\n return (\n <div key={f.id}>\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n setSelectedId(f.id);\n setDrag({ mode: \"move\", id: f.id, start: rel(e), orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${geom.x * 100}%`,\n top: `${geom.y * 100}%`,\n width: `${geom.w * 100}%`,\n height: `${geom.h * 100}%`,\n border: `2px ${isSel ? \"solid\" : \"dashed\"} ${primaryColor}`,\n background: `${primaryColor}${isSel ? \"22\" : \"14\"}`,\n borderRadius: 3,\n cursor: \"move\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n touchAction: \"none\",\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n padding: \"0 4px\",\n }}\n >\n ✍ {f.label || \"Signature\"}\n </span>\n </div>\n {isSel ? (\n <>\n {([\"nw\", \"ne\", \"sw\", \"se\"] as Corner[]).map((c) => handle(f.id, geom, c))}\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n position: \"absolute\",\n left: `${(geom.x + geom.w) * 100}%`,\n top: `${geom.y * 100}%`,\n transform: \"translate(-50%, -50%)\",\n marginTop: -18,\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n background: primaryColor,\n color: \"#fff\",\n border: \"2px solid #fff\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.3)\",\n fontSize: 14,\n lineHeight: \"16px\",\n cursor: \"pointer\",\n padding: 0,\n touchAction: \"none\",\n }}\n >\n ×\n </button>\n </>\n ) : null}\n </div>\n );\n })}\n {drag?.mode === \"new\" && live ? (\n <div\n style={{\n position: \"absolute\",\n left: `${live.x * 100}%`,\n top: `${live.y * 100}%`,\n width: `${live.w * 100}%`,\n height: `${live.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}22`,\n borderRadius: 3,\n pointerEvents: \"none\",\n }}\n />\n ) : null}\n </div>\n </div>\n\n <div style={{ flex: \"1 1 200px\", minWidth: 180, maxWidth: 300 }}>\n <p style={{ fontSize: 13, fontWeight: 600, color: \"#374151\", margin: \"0 0 8px\" }}>\n Signature fields ({value.length})\n </p>\n {value.length === 0 ? (\n <p style={{ fontSize: 13, color: \"#6b7280\" }}>\n Draw a box on the page to add a field. Add as many as you need.\n </p>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {value.map((f) => (\n <div\n key={f.id}\n onClick={() => {\n setSelectedId(f.id);\n setPage(f.page);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"6px 8px\",\n borderRadius: 8,\n border: `1px solid ${f.id === selectedId ? primaryColor : \"#e5e7eb\"}`,\n background: f.id === selectedId ? `${primaryColor}0f` : \"#fff\",\n cursor: \"pointer\",\n }}\n >\n <input\n value={f.label}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => rename(f.id, e.target.value)}\n placeholder=\"Field name\"\n style={{\n flex: 1,\n minWidth: 0,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontSize: 13,\n }}\n />\n <span style={{ fontSize: 11, color: \"#9ca3af\" }}>p{f.page}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#9ca3af\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: 0,\n }}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\n\nimport { ConsentBlock, type ConsentValue } from \"./ConsentBlock\";\nimport { PdfViewer, type ViewerPlacement } from \"./PdfViewer\";\nimport { SignaturePad } from \"./SignaturePad\";\n\nexport interface SigningBranding {\n appName?: string;\n logoUrl?: string;\n primaryColor?: string;\n}\n\nexport interface SigningExperienceProps {\n /** Token-gated source PDF URL (GET /api/esign/source/<token>). */\n sourceUrl: string;\n /** Submit endpoint (POST /sign/<token>/submit). */\n submitUrl: string;\n documentTitle: string;\n placements?: ViewerPlacement[];\n branding?: SigningBranding;\n /** Called after a successful signature submit (host navigates to /done). */\n onSigned?: () => void;\n workerSrc?: string;\n}\n\n/**\n * The full host-branded signer page body: read the PDF (placement highlighted),\n * draw/type a signature, consent, and submit. Self-contained styling so it sits\n * cleanly inside any host shell.\n */\nexport function SigningExperience(props: SigningExperienceProps) {\n const primary = props.branding?.primaryColor ?? \"#4f46e5\";\n const [signaturePng, setSignaturePng] = useState<string | null>(null);\n const [consent, setConsent] = useState<ConsentValue>({ signerName: \"\", consent: false });\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const canSubmit =\n !!signaturePng && consent.consent && consent.signerName.trim().length > 0 && !submitting;\n\n async function submit() {\n if (!canSubmit) return;\n setSubmitting(true);\n setError(null);\n try {\n const res = await fetch(props.submitUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n signaturePng,\n signerName: consent.signerName.trim(),\n consent: true,\n }),\n });\n if (!res.ok) {\n const body = (await res.json().catch(() => null)) as {\n error?: { message?: string };\n } | null;\n throw new Error(body?.error?.message ?? \"Could not submit your signature.\");\n }\n props.onSigned?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Something went wrong.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <div\n style={{\n maxWidth: 760,\n margin: \"0 auto\",\n padding: \"24px 16px 64px\",\n fontFamily:\n \"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif\",\n color: \"#111827\",\n }}\n >\n <header style={{ display: \"flex\", alignItems: \"center\", gap: 12, marginBottom: 8 }}>\n {props.branding?.logoUrl ? (\n <img src={props.branding.logoUrl} alt=\"\" style={{ height: 32 }} />\n ) : null}\n {props.branding?.appName ? (\n <span style={{ fontWeight: 600, color: \"#374151\" }}>{props.branding.appName}</span>\n ) : null}\n </header>\n\n <h1 style={{ fontSize: 22, margin: \"8px 0 4px\" }}>{props.documentTitle}</h1>\n <p style={{ color: \"#6b7280\", fontSize: 14, marginTop: 0 }}>\n Review the document below, then sign — no account or login needed.\n </p>\n\n <section style={{ margin: \"16px 0\" }}>\n <PdfViewer\n url={props.sourceUrl}\n placements={props.placements}\n workerSrc={props.workerSrc}\n primaryColor={primary}\n />\n </section>\n\n <section style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <label style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Your signature</label>\n <div style={{ marginTop: 6 }}>\n <SignaturePad primaryColor={primary} onChange={setSignaturePng} />\n </div>\n </div>\n\n <ConsentBlock value={consent} onChange={setConsent} primaryColor={primary} />\n\n {error ? (\n <div\n style={{\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n color: \"#b91c1c\",\n borderRadius: 8,\n padding: \"10px 12px\",\n fontSize: 14,\n }}\n >\n {error}\n </div>\n ) : null}\n\n <button\n type=\"button\"\n onClick={submit}\n disabled={!canSubmit}\n style={{\n padding: \"14px 16px\",\n borderRadius: 10,\n border: \"none\",\n background: canSubmit ? primary : \"#c7c9d1\",\n color: \"#fff\",\n fontSize: 16,\n fontWeight: 600,\n cursor: canSubmit ? \"pointer\" : \"not-allowed\",\n }}\n >\n {submitting ? \"Signing…\" : \"Sign document\"}\n </button>\n </section>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/SignaturePad.tsx","../../src/ui/ConsentBlock.tsx","../../src/ui/PdfViewer.tsx","../../src/ui/FieldDesigner.tsx","../../src/ui/SigningExperience.tsx"],"names":["jsxs","jsx","useState","useRef","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import SignaturePadLib from \"signature_pad\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface SignaturePadProps {\n primaryColor?: string;\n /** Emits a PNG data URL of the current signature, or null when empty. */\n onChange: (pngDataUrl: string | null) => void;\n}\n\n/**\n * Capture a signature by drawing (signature_pad, touch + mouse, DPI-aware) or by\n * typing a name rendered in a script font. Both yield the same PNG data URL that\n * the seal step stamps onto the document.\n */\nexport function SignaturePad({ primaryColor = \"#4f46e5\", onChange }: SignaturePadProps) {\n const [mode, setMode] = useState<\"draw\" | \"type\">(\"draw\");\n const [typed, setTyped] = useState(\"\");\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const padRef = useRef<SignaturePadLib | null>(null);\n\n useEffect(() => {\n if (mode !== \"draw\") return;\n const canvas = canvasRef.current;\n if (!canvas) return;\n const pad = new SignaturePadLib(canvas, { penColor: \"#111827\", minWidth: 0.8, maxWidth: 2.2 });\n padRef.current = pad;\n const resize = () => {\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n const rect = canvas.getBoundingClientRect();\n canvas.width = Math.floor(rect.width * ratio);\n canvas.height = Math.floor(rect.height * ratio);\n canvas.getContext(\"2d\")?.scale(ratio, ratio);\n pad.clear();\n onChange(null);\n };\n pad.addEventListener(\"endStroke\", () =>\n onChange(pad.isEmpty() ? null : pad.toDataURL(\"image/png\")),\n );\n resize();\n window.addEventListener(\"resize\", resize);\n return () => {\n window.removeEventListener(\"resize\", resize);\n pad.off();\n padRef.current = null;\n };\n }, [mode, onChange]);\n\n useEffect(() => {\n if (mode !== \"type\") return;\n const name = typed.trim();\n if (!name) {\n onChange(null);\n return;\n }\n const c = document.createElement(\"canvas\");\n c.width = 720;\n c.height = 200;\n const ctx = c.getContext(\"2d\");\n if (!ctx) return;\n ctx.fillStyle = \"#111827\";\n ctx.font = \"72px 'Segoe Script', 'Brush Script MT', cursive\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(name, 24, 110);\n onChange(c.toDataURL(\"image/png\"));\n }, [mode, typed, onChange]);\n\n const tab = (m: \"draw\" | \"type\", label: string) => (\n <button\n type=\"button\"\n onClick={() => {\n setMode(m);\n onChange(null);\n }}\n style={{\n flex: 1,\n padding: \"8px 12px\",\n border: \"none\",\n borderBottom: mode === m ? `2px solid ${primaryColor}` : \"2px solid transparent\",\n background: \"transparent\",\n fontWeight: mode === m ? 600 : 400,\n color: mode === m ? primaryColor : \"#6b7280\",\n cursor: \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ border: \"1px solid #e5e7eb\", borderRadius: 12, overflow: \"hidden\" }}>\n <div style={{ display: \"flex\", borderBottom: \"1px solid #f3f4f6\" }}>\n {tab(\"draw\", \"Draw\")}\n {tab(\"type\", \"Type\")}\n </div>\n <div style={{ position: \"relative\", background: \"#fff\" }}>\n {mode === \"draw\" ? (\n <canvas\n ref={canvasRef}\n style={{ width: \"100%\", height: 180, touchAction: \"none\", display: \"block\" }}\n />\n ) : (\n <div style={{ padding: 16 }}>\n <input\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n placeholder=\"Type your name\"\n style={{\n width: \"100%\",\n fontSize: 40,\n fontFamily: \"'Segoe Script', 'Brush Script MT', cursive\",\n border: \"none\",\n borderBottom: \"1px solid #e5e7eb\",\n outline: \"none\",\n padding: \"8px 0\",\n }}\n />\n </div>\n )}\n <button\n type=\"button\"\n onClick={() => {\n padRef.current?.clear();\n setTyped(\"\");\n onChange(null);\n }}\n style={{\n position: \"absolute\",\n top: 8,\n right: 8,\n fontSize: 12,\n color: \"#6b7280\",\n background: \"rgba(255,255,255,0.8)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n padding: \"2px 8px\",\n cursor: \"pointer\",\n }}\n >\n Clear\n </button>\n </div>\n </div>\n );\n}\n","export interface ConsentValue {\n signerName: string;\n consent: boolean;\n}\n\nexport interface ConsentBlockProps {\n value: ConsentValue;\n onChange: (value: ConsentValue) => void;\n primaryColor?: string;\n}\n\n/**\n * The electronic-signature intent record: a typed full legal name + an explicit\n * consent checkbox. Together with the audit trail this is what makes the simple\n * e-signature legally valid.\n */\nexport function ConsentBlock({ value, onChange, primaryColor = \"#4f46e5\" }: ConsentBlockProps) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n <label style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Full legal name</span>\n <input\n value={value.signerName}\n onChange={(e) => onChange({ ...value, signerName: e.target.value })}\n placeholder=\"e.g. Ada Lovelace\"\n style={{\n padding: \"10px 12px\",\n border: \"1px solid #d1d5db\",\n borderRadius: 8,\n fontSize: 15,\n outline: \"none\",\n }}\n />\n </label>\n <label style={{ display: \"flex\", gap: 10, alignItems: \"flex-start\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n checked={value.consent}\n onChange={(e) => onChange({ ...value, consent: e.target.checked })}\n style={{ marginTop: 3, accentColor: primaryColor, width: 16, height: 16 }}\n />\n <span style={{ fontSize: 13, color: \"#4b5563\", lineHeight: 1.5 }}>\n I agree to sign this document electronically. I understand my electronic\n signature is legally binding and that an audit record (time, IP, and a\n tamper-evident hash) is kept with the signed document.\n </span>\n </label>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface ViewerPlacement {\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface PdfViewerProps {\n /** Token-gated source PDF URL. */\n url: string;\n /** Signature-box hints, each drawn on its page at normalized coords. */\n placements?: ViewerPlacement[];\n /** Override the pdf.js worker (defaults to the unpkg .mjs for the bundled version). */\n workerSrc?: string;\n primaryColor?: string;\n}\n\n/**\n * Render the PDF to a canvas (pdf.js, responsive, DPI-aware) one page at a time\n * — same single-page sizing as the FieldDesigner — with prev/next paging and the\n * signature boxes overlaid where the manager placed them. Showing one page keeps\n * the height bounded (so it sits in a dialog without stretching). Falls back to\n * an <iframe> + download link if pdf.js fails to load.\n */\nexport function PdfViewer({ url, placements, workerSrc, primaryColor = \"#4f46e5\" }: PdfViewerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(1);\n const [failed, setFailed] = useState(false);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ url }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [url, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 640;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n if (failed) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <iframe\n src={`${url}#toolbar=0`}\n title=\"Document\"\n style={{ width: \"100%\", height: 520, border: \"1px solid #e5e7eb\", borderRadius: 8 }}\n />\n <a href={url} target=\"_blank\" rel=\"noreferrer\" style={{ fontSize: 13, color: primaryColor }}>\n Download to read\n </a>\n </div>\n );\n }\n\n // Theme-neutral so the controls read in both light and dark mode: text colour\n // is inherited from the host, and the border is a mid-grey that shows on either\n // background. (Inline styles can't see the host's dark-mode class.)\n const navBtn = (label: string, disabled: boolean, onClick: () => void) => (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n style={{\n fontSize: 13,\n padding: \"4px 12px\",\n borderRadius: 6,\n border: \"1px solid rgba(128,128,128,0.4)\",\n background: \"transparent\",\n color: \"inherit\",\n opacity: disabled ? 0.4 : 1,\n cursor: disabled ? \"default\" : \"pointer\",\n }}\n >\n {label}\n </button>\n );\n\n return (\n <div style={{ width: \"100%\" }}>\n {numPages > 1 ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n marginBottom: 8,\n fontSize: 13,\n color: \"inherit\",\n }}\n >\n {navBtn(\"← Prev\", page <= 1, () => setPage((p) => Math.max(1, p - 1)))}\n <span style={{ opacity: 0.7 }}>\n Page {page} of {numPages}\n </span>\n {navBtn(\"Next →\", page >= numPages, () => setPage((p) => Math.min(numPages, p + 1)))}\n </div>\n ) : null}\n <div\n ref={stageRef}\n style={{\n position: \"relative\",\n borderRadius: 4,\n overflow: \"hidden\",\n boxShadow: \"0 1px 4px rgba(0,0,0,0.12)\",\n }}\n >\n <canvas ref={canvasRef} />\n {(placements ?? [])\n .filter((pl) => pl.page === page)\n .map((pl, i) => (\n <div\n key={i}\n style={{\n position: \"absolute\",\n left: `${pl.x * 100}%`,\n top: `${pl.y * 100}%`,\n width: `${pl.w * 100}%`,\n height: `${pl.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}1a`,\n borderRadius: 4,\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <span\n style={{\n fontSize: 11,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n }}\n >\n ✍ Sign here\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface DesignerPlacement {\n id: string;\n label: string;\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface FieldDesignerProps {\n /** The chosen PDF's bytes (read client-side before upload). */\n pdfData: Uint8Array;\n value: DesignerPlacement[];\n onChange: (fields: DesignerPlacement[]) => void;\n workerSrc?: string;\n primaryColor?: string;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\ntype Corner = \"nw\" | \"ne\" | \"sw\" | \"se\";\ntype Drag =\n | { mode: \"new\"; start: { x: number; y: number } }\n | { mode: \"move\"; id: string; start: { x: number; y: number }; orig: Box }\n | { mode: \"resize\"; id: string; handle: Corner; orig: Box };\n\nconst clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), max);\nconst MIN_W = 0.04;\nconst MIN_H = 0.02;\nconst newId = () =>\n typeof crypto !== \"undefined\" && crypto.randomUUID\n ? crypto.randomUUID()\n : Math.random().toString(36).slice(2);\n\n/**\n * Place + edit one or more named signature fields on a pdf.js-rendered page.\n * Touch + mouse (Pointer Events): drag empty space to add a field, drag a field\n * to move, drag a corner to resize, × to remove. Fields are listed and renameable\n * on the side (and wrap below on narrow screens). Each box shows its name.\n */\nexport function FieldDesigner({\n pdfData,\n value,\n onChange,\n workerSrc,\n primaryColor = \"#4f46e5\",\n}: FieldDesignerProps) {\n const [numPages, setNumPages] = useState(0);\n const [page, setPage] = useState(value[0]?.page ?? 1);\n const [failed, setFailed] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(value[0]?.id ?? null);\n // Touch drawing must be opt-in so the page can still scroll over the designer.\n const [drawMode, setDrawMode] = useState(false);\n const [drag, setDrag] = useState<Drag | null>(null);\n const [live, setLive] = useState<Box | null>(null);\n const stageRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const docRef = useRef<any>(null);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n try {\n const pdfjs = await import(\"pdfjs-dist\");\n pdfjs.GlobalWorkerOptions.workerSrc =\n workerSrc ?? `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n const doc = await pdfjs.getDocument({ data: pdfData.slice() }).promise;\n if (cancelled) return;\n docRef.current = doc;\n setNumPages(doc.numPages);\n setPage((p) => Math.min(p, doc.numPages));\n } catch {\n if (!cancelled) setFailed(true);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [pdfData, workerSrc]);\n\n useEffect(() => {\n let cancelled = false;\n void (async () => {\n const doc = docRef.current;\n const canvas = canvasRef.current;\n if (!doc || !canvas) return;\n const pageObj = await doc.getPage(page);\n if (cancelled) return;\n const width = stageRef.current?.clientWidth || 480;\n const base = pageObj.getViewport({ scale: 1 });\n const viewport = pageObj.getViewport({ scale: width / base.width });\n const ratio = Math.max(window.devicePixelRatio || 1, 1);\n canvas.width = Math.floor(viewport.width * ratio);\n canvas.height = Math.floor(viewport.height * ratio);\n canvas.style.width = \"100%\";\n canvas.style.display = \"block\";\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return;\n ctx.scale(ratio, ratio);\n await pageObj.render({ canvasContext: ctx, viewport, canvas }).promise;\n })();\n return () => {\n cancelled = true;\n };\n }, [page, numPages]);\n\n function rel(e: { clientX: number; clientY: number }): { x: number; y: number } {\n const r = stageRef.current!.getBoundingClientRect();\n return {\n x: clamp((e.clientX - r.left) / r.width, 0, 1),\n y: clamp((e.clientY - r.top) / r.height, 0, 1),\n };\n }\n\n function onPointerMove(e: React.PointerEvent) {\n if (!drag) return;\n const p = rel(e);\n let b: Box;\n if (drag.mode === \"new\") {\n b = {\n x: Math.min(drag.start.x, p.x),\n y: Math.min(drag.start.y, p.y),\n w: Math.abs(p.x - drag.start.x),\n h: Math.abs(p.y - drag.start.y),\n };\n } else if (drag.mode === \"move\") {\n const dx = p.x - drag.start.x;\n const dy = p.y - drag.start.y;\n b = {\n x: clamp(drag.orig.x + dx, 0, 1 - drag.orig.w),\n y: clamp(drag.orig.y + dy, 0, 1 - drag.orig.h),\n w: drag.orig.w,\n h: drag.orig.h,\n };\n } else {\n let x1 = drag.orig.x;\n let y1 = drag.orig.y;\n let x2 = drag.orig.x + drag.orig.w;\n let y2 = drag.orig.y + drag.orig.h;\n if (drag.handle[0] === \"n\") y1 = p.y;\n else y2 = p.y;\n if (drag.handle[1] === \"w\") x1 = p.x;\n else x2 = p.x;\n b = { x: Math.min(x1, x2), y: Math.min(y1, y2), w: Math.abs(x2 - x1), h: Math.abs(y2 - y1) };\n }\n setLive(b);\n }\n\n function onPointerUp() {\n if (drag && live && live.w >= MIN_W && live.h >= MIN_H) {\n if (drag.mode === \"new\") {\n const f: DesignerPlacement = {\n id: newId(),\n label: value.length === 0 ? \"Signature\" : `Signature ${value.length + 1}`,\n page,\n ...live,\n };\n onChange([...value, f]);\n setSelectedId(f.id);\n setDrawMode(false);\n } else {\n onChange(value.map((x) => (x.id === drag.id ? { ...x, ...live } : x)));\n }\n }\n setDrag(null);\n setLive(null);\n }\n\n function removeField(id: string) {\n onChange(value.filter((f) => f.id !== id));\n if (selectedId === id) setSelectedId(null);\n }\n function rename(id: string, label: string) {\n onChange(value.map((f) => (f.id === id ? { ...f, label } : f)));\n }\n\n const handle = (id: string, geom: Box, c: Corner) => {\n const cx = c[1] === \"w\" ? geom.x : geom.x + geom.w;\n const cy = c[0] === \"n\" ? geom.y : geom.y + geom.h;\n const cursor = c === \"nw\" || c === \"se\" ? \"nwse-resize\" : \"nesw-resize\";\n return (\n <div\n key={c}\n onPointerDown={(e) => {\n e.stopPropagation();\n setDrag({ mode: \"resize\", id, handle: c, orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${cx * 100}%`,\n top: `${cy * 100}%`,\n width: 13,\n height: 13,\n marginLeft: -7,\n marginTop: -7,\n background: \"#fff\",\n border: `2px solid ${primaryColor}`,\n borderRadius: 2,\n cursor,\n touchAction: \"none\",\n }}\n />\n );\n };\n\n if (failed) {\n return (\n <div style={{ color: \"#b91c1c\", fontSize: 14 }}>\n Could not render this PDF for placement. Please check the file is a valid, unencrypted PDF.\n </div>\n );\n }\n\n return (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 16, alignItems: \"flex-start\" }}>\n <div style={{ flex: \"1 1 340px\", minWidth: 260 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n marginBottom: 8,\n flexWrap: \"wrap\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => setDrawMode((d) => !d)}\n style={{\n fontSize: 13,\n fontWeight: 600,\n padding: \"5px 12px\",\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n background: drawMode ? primaryColor : \"#fff\",\n color: drawMode ? \"#fff\" : primaryColor,\n cursor: \"pointer\",\n }}\n >\n {drawMode ? \"Now drag on the page…\" : \"+ Add field\"}\n </button>\n <span style={{ fontSize: 12, color: \"#6b7280\" }}>or drag on the page (desktop).</span>\n {numPages > 1 ? (\n <label style={{ marginLeft: \"auto\", fontSize: 13, color: \"#374151\" }}>\n Page{\" \"}\n <select value={page} onChange={(e) => setPage(Number(e.target.value))}>\n {Array.from({ length: numPages }, (_, i) => (\n <option key={i} value={i + 1}>\n {i + 1}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n </div>\n <div\n ref={stageRef}\n onPointerDown={(e) => {\n // Mouse can always draw; touch only in draw mode (so the page scrolls otherwise).\n if (drawMode || e.pointerType === \"mouse\") setDrag({ mode: \"new\", start: rel(e) });\n }}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerLeave={onPointerUp}\n style={{\n position: \"relative\",\n cursor: drawMode ? \"crosshair\" : \"default\",\n userSelect: \"none\",\n touchAction: drawMode ? \"none\" : \"auto\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 6,\n overflow: \"hidden\",\n }}\n >\n <canvas ref={canvasRef} />\n {value\n .filter((f) => f.page === page)\n .map((f) => {\n const dragging = drag && drag.mode !== \"new\" && drag.id === f.id;\n const geom: Box = dragging && live ? live : f;\n const isSel = f.id === selectedId;\n return (\n <div key={f.id}>\n <div\n onPointerDown={(e) => {\n e.stopPropagation();\n setSelectedId(f.id);\n setDrag({ mode: \"move\", id: f.id, start: rel(e), orig: geom });\n }}\n style={{\n position: \"absolute\",\n left: `${geom.x * 100}%`,\n top: `${geom.y * 100}%`,\n width: `${geom.w * 100}%`,\n height: `${geom.h * 100}%`,\n border: `2px ${isSel ? \"solid\" : \"dashed\"} ${primaryColor}`,\n background: `${primaryColor}${isSel ? \"22\" : \"14\"}`,\n borderRadius: 3,\n cursor: \"move\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n touchAction: \"none\",\n }}\n >\n <span\n style={{\n fontSize: 12,\n fontWeight: 600,\n color: primaryColor,\n opacity: 0.85,\n whiteSpace: \"nowrap\",\n padding: \"0 4px\",\n }}\n >\n ✍ {f.label || \"Signature\"}\n </span>\n </div>\n {isSel ? (\n <>\n {([\"nw\", \"ne\", \"sw\", \"se\"] as Corner[]).map((c) => handle(f.id, geom, c))}\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n position: \"absolute\",\n left: `${(geom.x + geom.w) * 100}%`,\n top: `${geom.y * 100}%`,\n transform: \"translate(-50%, -50%)\",\n marginTop: -18,\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n background: primaryColor,\n color: \"#fff\",\n border: \"2px solid #fff\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.3)\",\n fontSize: 14,\n lineHeight: \"16px\",\n cursor: \"pointer\",\n padding: 0,\n touchAction: \"none\",\n }}\n >\n ×\n </button>\n </>\n ) : null}\n </div>\n );\n })}\n {drag?.mode === \"new\" && live ? (\n <div\n style={{\n position: \"absolute\",\n left: `${live.x * 100}%`,\n top: `${live.y * 100}%`,\n width: `${live.w * 100}%`,\n height: `${live.h * 100}%`,\n border: `2px dashed ${primaryColor}`,\n background: `${primaryColor}22`,\n borderRadius: 3,\n pointerEvents: \"none\",\n }}\n />\n ) : null}\n </div>\n </div>\n\n <div style={{ flex: \"1 1 200px\", minWidth: 180, maxWidth: 300 }}>\n <p style={{ fontSize: 13, fontWeight: 600, color: \"#374151\", margin: \"0 0 8px\" }}>\n Signature fields ({value.length})\n </p>\n {value.length === 0 ? (\n <p style={{ fontSize: 13, color: \"#6b7280\" }}>\n Draw a box on the page to add a field. Add as many as you need.\n </p>\n ) : (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {value.map((f) => (\n <div\n key={f.id}\n onClick={() => {\n setSelectedId(f.id);\n setPage(f.page);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"6px 8px\",\n borderRadius: 8,\n border: `1px solid ${f.id === selectedId ? primaryColor : \"#e5e7eb\"}`,\n background: f.id === selectedId ? `${primaryColor}0f` : \"#fff\",\n cursor: \"pointer\",\n }}\n >\n <input\n value={f.label}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => rename(f.id, e.target.value)}\n placeholder=\"Field name\"\n style={{\n flex: 1,\n minWidth: 0,\n border: \"none\",\n outline: \"none\",\n background: \"transparent\",\n fontSize: 13,\n }}\n />\n <span style={{ fontSize: 11, color: \"#9ca3af\" }}>p{f.page}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${f.label}`}\n onClick={(e) => {\n e.stopPropagation();\n removeField(f.id);\n }}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#9ca3af\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: 0,\n }}\n >\n ×\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\n\nimport { ConsentBlock, type ConsentValue } from \"./ConsentBlock\";\nimport { PdfViewer, type ViewerPlacement } from \"./PdfViewer\";\nimport { SignaturePad } from \"./SignaturePad\";\n\nexport interface SigningBranding {\n appName?: string;\n logoUrl?: string;\n primaryColor?: string;\n}\n\nexport interface SigningExperienceProps {\n /** Token-gated source PDF URL (GET /api/esign/source/<token>). */\n sourceUrl: string;\n /** Submit endpoint (POST /sign/<token>/submit). */\n submitUrl: string;\n documentTitle: string;\n placements?: ViewerPlacement[];\n branding?: SigningBranding;\n /** Called after a successful signature submit (host navigates to /done). */\n onSigned?: () => void;\n workerSrc?: string;\n}\n\n/**\n * The full host-branded signer page body: read the PDF (placement highlighted),\n * draw/type a signature, consent, and submit. Self-contained styling so it sits\n * cleanly inside any host shell.\n */\nexport function SigningExperience(props: SigningExperienceProps) {\n const primary = props.branding?.primaryColor ?? \"#4f46e5\";\n const [signaturePng, setSignaturePng] = useState<string | null>(null);\n const [consent, setConsent] = useState<ConsentValue>({ signerName: \"\", consent: false });\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const canSubmit =\n !!signaturePng && consent.consent && consent.signerName.trim().length > 0 && !submitting;\n\n async function submit() {\n if (!canSubmit) return;\n setSubmitting(true);\n setError(null);\n try {\n const res = await fetch(props.submitUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n signaturePng,\n signerName: consent.signerName.trim(),\n consent: true,\n }),\n });\n if (!res.ok) {\n const body = (await res.json().catch(() => null)) as {\n error?: { message?: string };\n } | null;\n throw new Error(body?.error?.message ?? \"Could not submit your signature.\");\n }\n props.onSigned?.();\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Something went wrong.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <div\n style={{\n maxWidth: 760,\n margin: \"0 auto\",\n padding: \"24px 16px 64px\",\n fontFamily:\n \"system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif\",\n color: \"#111827\",\n }}\n >\n <header style={{ display: \"flex\", alignItems: \"center\", gap: 12, marginBottom: 8 }}>\n {props.branding?.logoUrl ? (\n <img src={props.branding.logoUrl} alt=\"\" style={{ height: 32 }} />\n ) : null}\n {props.branding?.appName ? (\n <span style={{ fontWeight: 600, color: \"#374151\" }}>{props.branding.appName}</span>\n ) : null}\n </header>\n\n <h1 style={{ fontSize: 22, margin: \"8px 0 4px\" }}>{props.documentTitle}</h1>\n <p style={{ color: \"#6b7280\", fontSize: 14, marginTop: 0 }}>\n Review the document below, then sign — no account or login needed.\n </p>\n\n <section style={{ margin: \"16px 0\" }}>\n <PdfViewer\n url={props.sourceUrl}\n placements={props.placements}\n workerSrc={props.workerSrc}\n primaryColor={primary}\n />\n </section>\n\n <section style={{ display: \"flex\", flexDirection: \"column\", gap: 16 }}>\n <div>\n <label style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>Your signature</label>\n <div style={{ marginTop: 6 }}>\n <SignaturePad primaryColor={primary} onChange={setSignaturePng} />\n </div>\n </div>\n\n <ConsentBlock value={consent} onChange={setConsent} primaryColor={primary} />\n\n {error ? (\n <div\n style={{\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n color: \"#b91c1c\",\n borderRadius: 8,\n padding: \"10px 12px\",\n fontSize: 14,\n }}\n >\n {error}\n </div>\n ) : null}\n\n <button\n type=\"button\"\n onClick={submit}\n disabled={!canSubmit}\n style={{\n padding: \"14px 16px\",\n borderRadius: 10,\n border: \"none\",\n background: canSubmit ? primary : \"#c7c9d1\",\n color: \"#fff\",\n fontSize: 16,\n fontWeight: 600,\n cursor: canSubmit ? \"pointer\" : \"not-allowed\",\n }}\n >\n {submitting ? \"Signing…\" : \"Sign document\"}\n </button>\n </section>\n </div>\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@josephomills/esign",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Reusable, host-agnostic document e-signing: no-login signer links, drag-placed signatures, Level-1 cryptographically-sealed PDFs with a hash-chained audit trail, document versioning, group targeting via a SubjectsPort, coverage detection, and stats. Host injects storage, persistence, notifications, auth, and subject listing via configureEsign().",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Joseph Mills",
|