@josephomills/esign 0.7.1 → 0.9.0
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/{ports-CkBaAepo.d.cts → ports--YsOnh8H.d.cts} +120 -15
- package/dist/{ports-CkBaAepo.d.ts → ports--YsOnh8H.d.ts} +120 -15
- package/dist/prisma/index.cjs +21 -4
- package/dist/prisma/index.cjs.map +1 -1
- package/dist/prisma/index.d.cts +1 -1
- package/dist/prisma/index.d.ts +1 -1
- package/dist/prisma/index.js +21 -4
- package/dist/prisma/index.js.map +1 -1
- package/dist/server/index.cjs +112 -12
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.cts +9 -5
- package/dist/server/index.d.ts +9 -5
- package/dist/server/index.js +108 -13
- package/dist/server/index.js.map +1 -1
- package/dist/ui/index.cjs +246 -29
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +23 -1
- package/dist/ui/index.d.ts +23 -1
- package/dist/ui/index.js +246 -29
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
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 // 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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/SignaturePad.tsx","../../src/ui/ConsentBlock.tsx","../../src/ui/PdfViewer.tsx","../../src/shared/fields.ts","../../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\nimport type { FieldType } from \"../shared/fields\";\n\nexport interface ViewerPlacement {\n page: number;\n x: number;\n y: number;\n w: number;\n h: number;\n /** \"signature\" (default) or \"date\" — changes the box hint. */\n type?: FieldType;\n label?: string;\n /** Field id — needed by the signer to key each date field's value. */\n id?: string;\n /** Date fields: earliest selectable date (ISO yyyy-mm-dd), already defaulted by the host. */\n minDate?: string | null;\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 {pl.type === \"date\" ? \"📅 Select a date\" : \"✍ Sign here\"}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","// Field-type + date-format primitives shared by the server (schema, seal) and\n// the UI (designer, signer, viewer). Pure — no deps — so importing it into the\n// browser `/ui` bundle pulls in nothing else.\n\n/** What a placed field captures: a drawn signature or a picked date. */\nexport type FieldType = \"signature\" | \"date\";\n\n/**\n * How a filled date renders into the sealed PDF — the creator picks one per date\n * field. Pure string formats (no locale/timezone surprises).\n */\nexport type DateFormat =\n | \"DD/MM/YYYY\" // 02/10/2026\n | \"MM/DD/YYYY\" // 10/02/2026\n | \"YYYY-MM-DD\" // 2026-10-02\n | \"D MMM YYYY\" // 2 Oct 2026\n | \"Do MMM YYYY\" // 2nd Oct 2026\n | \"Do MMMM YYYY\" // 2nd October 2026\n | \"MMMM D, YYYY\"; // October 2, 2026\n\nexport const DATE_FORMATS: readonly DateFormat[] = [\n \"DD/MM/YYYY\",\n \"MM/DD/YYYY\",\n \"YYYY-MM-DD\",\n \"D MMM YYYY\",\n \"Do MMM YYYY\",\n \"Do MMMM YYYY\",\n \"MMMM D, YYYY\",\n];\nexport const DEFAULT_DATE_FORMAT: DateFormat = \"Do MMMM YYYY\";\n\nconst MONTHS_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nconst MONTHS_LONG = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nfunction ordinal(n: number): string {\n const s = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = n % 100;\n return `${n}${s[(v - 20) % 10] ?? s[v] ?? s[0]}`;\n}\n\n/** Render an ISO `yyyy-mm-dd` date in the chosen format. Parses the parts directly. */\nexport function formatPickedDate(iso: string, format: DateFormat): string {\n const [y, m, d] = iso.split(\"-\").map(Number);\n if (!y || !m || !d) return iso;\n const dd = String(d).padStart(2, \"0\");\n const mm = String(m).padStart(2, \"0\");\n switch (format) {\n case \"DD/MM/YYYY\":\n return `${dd}/${mm}/${y}`;\n case \"MM/DD/YYYY\":\n return `${mm}/${dd}/${y}`;\n case \"YYYY-MM-DD\":\n return `${y}-${mm}-${dd}`;\n case \"D MMM YYYY\":\n return `${d} ${MONTHS_SHORT[m - 1]} ${y}`;\n case \"Do MMM YYYY\":\n return `${ordinal(d)} ${MONTHS_SHORT[m - 1]} ${y}`;\n case \"Do MMMM YYYY\":\n return `${ordinal(d)} ${MONTHS_LONG[m - 1]} ${y}`;\n case \"MMMM D, YYYY\":\n return `${MONTHS_LONG[m - 1]} ${d}, ${y}`;\n }\n}\n\n/** A human label for each format, for pickers. */\nexport const DATE_FORMAT_LABELS: Record<DateFormat, string> = {\n \"DD/MM/YYYY\": \"02/10/2026\",\n \"MM/DD/YYYY\": \"10/02/2026\",\n \"YYYY-MM-DD\": \"2026-10-02\",\n \"D MMM YYYY\": \"2 Oct 2026\",\n \"Do MMM YYYY\": \"2nd Oct 2026\",\n \"Do MMMM YYYY\": \"2nd October 2026\",\n \"MMMM D, YYYY\": \"October 2, 2026\",\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nimport {\n DATE_FORMATS,\n DATE_FORMAT_LABELS,\n DEFAULT_DATE_FORMAT,\n type DateFormat,\n type FieldType,\n} from \"../shared/fields\";\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 type: FieldType;\n /** Date fields: how the picked date renders. */\n dateFormat?: DateFormat;\n /** Date fields: earliest selectable date (ISO yyyy-mm-dd); null = the document's creation date. */\n minDate?: string | null;\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 /** Hide the built-in field list so the host can render its own (e.g. in another column). */\n hideFieldList?: boolean;\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 hideFieldList = false,\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 // Which kind of field the next drawn box creates.\n const [pendingType, setPendingType] = useState<FieldType>(\"signature\");\n // The date field whose format/min-date popover is open.\n const [configId, setConfigId] = useState<string | null>(null);\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 isDate = pendingType === \"date\";\n const n = value.filter((v) => v.type === pendingType).length + 1;\n const base = isDate ? \"Date\" : \"Signature\";\n const f: DesignerPlacement = {\n id: newId(),\n label: n === 1 ? base : `${base} ${n}`,\n type: pendingType,\n ...(isDate ? { dateFormat: DEFAULT_DATE_FORMAT, minDate: null } : {}),\n page,\n ...live,\n };\n onChange([...value, f]);\n setSelectedId(f.id);\n setDrawMode(false);\n if (isDate) setConfigId(f.id); // open the format/min-date popover for the new date field\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 if (configId === id) setConfigId(null);\n }\n function rename(id: string, label: string) {\n onChange(value.map((f) => (f.id === id ? { ...f, label } : f)));\n }\n function setConfig(id: string, patch: Partial<Pick<DesignerPlacement, \"dateFormat\" | \"minDate\">>) {\n onChange(value.map((f) => (f.id === id ? { ...f, ...patch } : f)));\n }\n\n const configField = value.find((f) => f.id === configId && f.type === \"date\") ?? null;\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 {([\"signature\", \"date\"] as FieldType[]).map((t) => {\n const active = drawMode && pendingType === t;\n return (\n <button\n key={t}\n type=\"button\"\n onClick={() => {\n if (active) setDrawMode(false);\n else {\n setPendingType(t);\n setDrawMode(true);\n }\n }}\n style={{\n fontSize: 13,\n fontWeight: 600,\n padding: \"5px 12px\",\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n background: active ? primaryColor : \"#fff\",\n color: active ? \"#fff\" : primaryColor,\n cursor: \"pointer\",\n }}\n >\n {t === \"date\" ? \"+ Date\" : \"+ Signature\"}\n </button>\n );\n })}\n <span style={{ fontSize: 12, color: \"#6b7280\" }}>\n {drawMode ? `Drag a ${pendingType} box on the page…` : \"or drag on the page.\"}\n </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.type === \"date\" ? \"📅\" : \"✍\"} {f.label || (f.type === \"date\" ? \"Date\" : \"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 {f.type === \"date\" ? (\n <button\n type=\"button\"\n aria-label={`Configure ${f.label}`}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation();\n setConfigId(f.id);\n }}\n style={{\n position: \"absolute\",\n left: `${geom.x * 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: \"#fff\",\n color: primaryColor,\n border: `2px solid ${primaryColor}`,\n boxShadow: \"0 1px 3px rgba(0,0,0,0.3)\",\n fontSize: 12,\n lineHeight: \"14px\",\n cursor: \"pointer\",\n padding: 0,\n touchAction: \"none\",\n }}\n >\n ⚙\n </button>\n ) : null}\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 {configField ? (\n <div\n style={{\n marginTop: 10,\n border: `1px solid ${primaryColor}66`,\n borderRadius: 8,\n padding: 12,\n background: \"#fff\",\n fontSize: 13,\n color: \"#374151\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: 8,\n }}\n >\n <strong>📅 {configField.label || \"Date\"}</strong>\n <button\n type=\"button\"\n onClick={() => setConfigId(null)}\n style={{\n fontSize: 12,\n padding: \"3px 10px\",\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n background: primaryColor,\n color: \"#fff\",\n cursor: \"pointer\",\n }}\n >\n Done\n </button>\n </div>\n <label style={{ display: \"block\", marginBottom: 8 }}>\n Display format\n <select\n value={configField.dateFormat ?? DEFAULT_DATE_FORMAT}\n onChange={(e) => setConfig(configField.id, { dateFormat: e.target.value as DateFormat })}\n style={{\n display: \"block\",\n marginTop: 4,\n width: \"100%\",\n padding: \"4px 6px\",\n borderRadius: 6,\n border: \"1px solid #d1d5db\",\n }}\n >\n {DATE_FORMATS.map((fmt) => (\n <option key={fmt} value={fmt}>\n {DATE_FORMAT_LABELS[fmt]}\n </option>\n ))}\n </select>\n </label>\n <label style={{ display: \"block\" }}>\n Earliest date\n <input\n type=\"date\"\n value={configField.minDate ?? \"\"}\n onChange={(e) => setConfig(configField.id, { minDate: e.target.value || null })}\n style={{\n display: \"block\",\n marginTop: 4,\n padding: \"4px 6px\",\n borderRadius: 6,\n border: \"1px solid #d1d5db\",\n }}\n />\n <span style={{ color: \"#9ca3af\", fontSize: 11 }}>\n Leave blank to use the document's creation date.\n </span>\n </label>\n </div>\n ) : null}\n </div>\n\n {hideFieldList ? null : (\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 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 <span style={{ fontSize: 13 }}>{f.type === \"date\" ? \"📅\" : \"✍\"}</span>\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 {f.type === \"date\" ? (\n <button\n type=\"button\"\n aria-label={`Configure ${f.label}`}\n onClick={(e) => {\n e.stopPropagation();\n setConfigId(f.id);\n }}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#6b7280\",\n cursor: \"pointer\",\n fontSize: 13,\n lineHeight: 1,\n padding: 0,\n }}\n >\n ⚙\n </button>\n ) : null}\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 )}\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 [dateValues, setDateValues] = useState<Record<string, string>>({});\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const dateFields = (props.placements ?? []).filter((p) => p.type === \"date\" && p.id);\n const allDatesFilled = dateFields.every((f) => dateValues[f.id!]);\n\n const canSubmit =\n !!signaturePng &&\n consent.consent &&\n consent.signerName.trim().length > 0 &&\n allDatesFilled &&\n !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 dateValues,\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 {dateFields.length > 0 ? (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {dateFields.map((f) => (\n <div key={f.id}>\n <label style={{ fontSize: 13, fontWeight: 600, color: \"#374151\" }}>\n 📅 {f.label || \"Date\"}\n </label>\n <input\n type=\"date\"\n value={dateValues[f.id!] ?? \"\"}\n min={f.minDate ?? undefined}\n onChange={(e) =>\n setDateValues((prev) => ({ ...prev, [f.id!]: e.target.value }))\n }\n style={{\n display: \"block\",\n marginTop: 6,\n padding: \"10px 12px\",\n borderRadius: 8,\n border: \"1px solid #d1d5db\",\n fontSize: 15,\n width: \"100%\",\n maxWidth: 280,\n }}\n />\n </div>\n ))}\n </div>\n ) : null}\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.
|
|
3
|
+
"version": "0.9.0",
|
|
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",
|