@tawqi3i/pdf-viewer 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/lib/PdfViewer.jsx","../src/lib/constants.js","../src/lib/AnnotationLayer.jsx","../src/lib/icons.jsx","../src/lib/StampPicker.jsx","../src/lib/AnnotationToolbar.jsx","../src/lib/SignatureModal.jsx","../src/lib/Snackbar.jsx","../src/lib/EmptyState.jsx","../src/lib/useAnnotations.js","../src/lib/pdf-utils.js","../src/lib/PdfAnnotator.jsx"],"sourcesContent":["import { useState, useRef, useEffect, memo } from \"react\";\nimport { GemBoxPdfViewer } from \"@gembox/pdfviewer\";\nimport \"@gembox/pdfviewer/dist/es/pdfviewer.css\";\n\n// GemBox detects pdfjs through a window global that its UMD bundle may fail to\n// set depending on the surrounding module scope (see the companion Vite plugin\n// exported from \"@tawqi3i/pdf-viewer/vite\"). Bridge it from globalThis here.\nif (typeof window !== \"undefined\" && !window[\"pdfjs-dist/build/pdf\"]) {\n const embedded = globalThis[\"pdfjs-dist/build/pdf\"] ?? globalThis.pdfjsLib;\n if (embedded) window[\"pdfjs-dist/build/pdf\"] = embedded;\n}\n\nlet _licenseSet = false;\nfunction setLicenseOnce(key) {\n if (!_licenseSet) {\n GemBoxPdfViewer.setLicense(key);\n _licenseSet = true;\n }\n}\n\nfunction PdfViewerInner({\n fileUrl = null,\n fileBlob = null,\n height = \"600px\",\n width = \"100%\",\n className,\n licenseKey = \"FREE-LIMITED-KEY\",\n theme = null,\n readOnly = false,\n visibility = null,\n onLoad,\n onError,\n}) {\n const containerRef = useRef(null);\n const viewerRef = useRef(null);\n const onLoadRef = useRef(onLoad);\n const onErrorRef = useRef(onError);\n const pendingRef = useRef({ url: fileUrl, blob: fileBlob });\n const [loadError, setLoadError] = useState(null);\n\n useEffect(() => {\n onLoadRef.current = onLoad;\n }, [onLoad]);\n useEffect(() => {\n onErrorRef.current = onError;\n }, [onError]);\n\n useEffect(() => {\n pendingRef.current = { url: fileUrl, blob: fileBlob };\n setLoadError(null);\n const viewer = viewerRef.current;\n if (!viewer) return;\n let cancelled = false;\n (async () => {\n try {\n const src = fileBlob ? await fileBlob.arrayBuffer() : fileUrl;\n if (src && !cancelled) {\n await viewer.open(src);\n onLoadRef.current?.();\n }\n } catch (err) {\n if (!cancelled) {\n setLoadError(err);\n onErrorRef.current?.(err);\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [fileUrl, fileBlob]);\n\n useEffect(() => {\n const wrapper = containerRef.current;\n if (!wrapper) return;\n\n // Create a fresh child element each time so StrictMode's double-invocation\n // never gives GemBox a container it has already partially initialized.\n const el = document.createElement(\"div\");\n el.style.width = \"100%\";\n el.style.height = \"100%\";\n wrapper.appendChild(el);\n\n let cancelled = false;\n const vis = readOnly\n ? { open: false, download: false, print: false, ...visibility }\n : visibility;\n // GemBox (2026.x) nests these under `ui`, not at the top level: theme lives\n // at ui.theme and toolbar buttons are toggled via ui.toolbar.<btn>.isVisible.\n // Map our flat open/download/print flags onto that shape.\n const ui = {};\n if (theme) ui.theme = theme;\n if (vis) {\n const toolbar = {};\n if (vis.open !== undefined) toolbar.openButton = { isVisible: vis.open };\n if (vis.download !== undefined)\n toolbar.downloadButton = { isVisible: vis.download };\n if (vis.print !== undefined)\n toolbar.printButton = { isVisible: vis.print };\n if (Object.keys(toolbar).length) ui.toolbar = toolbar;\n }\n (async () => {\n try {\n setLicenseOnce(licenseKey);\n const viewer = await GemBoxPdfViewer.create({\n container: el,\n ...(Object.keys(ui).length ? { ui } : {}),\n });\n if (cancelled) return;\n viewerRef.current = viewer;\n const { url, blob } = pendingRef.current;\n const src = blob ? await blob.arrayBuffer() : url;\n if (src && !cancelled) {\n await viewer.open(src);\n onLoadRef.current?.();\n }\n } catch (err) {\n if (!cancelled) {\n setLoadError(err);\n onErrorRef.current?.(err);\n }\n }\n })();\n return () => {\n cancelled = true;\n viewerRef.current = null;\n wrapper.innerHTML = \"\";\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (loadError) {\n const msg = loadError?.message || String(loadError);\n return (\n <div\n className={`flex flex-col items-center justify-center gap-2 border border-danger/30 rounded-md bg-danger/10 text-danger-dark text-sm p-4 ${className ?? \"\"}`}\n style={{ width, height, boxSizing: \"border-box\" }}\n >\n <span className=\"font-medium\">Failed to load PDF</span>\n {msg && (\n <span className=\"text-xs text-danger text-center max-w-sm wrap-break-word\">\n {msg}\n </span>\n )}\n </div>\n );\n }\n return (\n <div ref={containerRef} className={className} style={{ width, height }} />\n );\n}\n\nexport const PdfViewer = memo(PdfViewerInner);\n","export const TOOL = { TEXT: \"text\", STAMP: \"stamp\", SIGNATURE: \"Esig\" };\n\nexport const DEFAULT_STAMPS = [\n { id: \"approved\", label: \"APPROVED\", color: \"#15803d\", bg: \"#f0fdf4\" },\n { id: \"rejected\", label: \"REJECTED\", color: \"#dc2626\", bg: \"#fef2f2\" },\n { id: \"reviewed\", label: \"REVIEWED\", color: \"#0369a1\", bg: \"#f0f9ff\" },\n { id: \"void\", label: \"VOID\", color: \"#9f1239\", bg: \"#fff1f2\" },\n];\n\nexport const DEFAULT_TEXT_W = 220;\nexport const DEFAULT_TEXT_H = 80;\nexport const DEFAULT_STAMP_TEXT_W = 160;\nexport const DEFAULT_STAMP_TEXT_H = 44;\nexport const DEFAULT_STAMP_IMG_W = 120;\nexport const DEFAULT_STAMP_IMG_H = 120;\n\nexport const STAMP_ROT_DEG = 8;\n\nexport const PLACE_CURSOR = `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"1.5\"><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\"/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"black\"/></svg>') 12 12, crosshair`;\n\nlet _uid = 0;\nexport const uid = () => `ann-${++_uid}`;\n\nexport const clampOrigin = (n, size) =>\n Math.min(Math.max(n, 0), Math.max(0, 1 - size));\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { TOOL, STAMP_ROT_DEG, PLACE_CURSOR, clampOrigin } from \"./constants.js\";\n\n// GemBox renders each page with a 1-based data-page-number attribute. The\n// annotation overlay relies on this contract to map screen coords to pages.\nexport function findPageElementAt(clientX, clientY) {\n const els = document.elementsFromPoint(clientX, clientY);\n return els.find((el) => el?.dataset?.pageNumber != null) ?? null;\n}\nexport function findPageElementByIndex(pageIndex) {\n return document.querySelector(`[data-page-number=\"${pageIndex + 1}\"]`);\n}\n\nexport function AnnotationItem({\n ann,\n pos,\n onDelete,\n onDragStart,\n onResizeStart,\n onTextChange,\n}) {\n const [editing, setEditing] = useState(\n ann.type === TOOL.TEXT && !ann.content,\n );\n const textareaRef = useRef(null);\n\n useEffect(() => {\n if (editing && textareaRef.current) textareaRef.current.focus();\n }, [editing]);\n\n if (!pos) return null;\n\n const startDrag = (e) => {\n if (editing) return;\n e.stopPropagation();\n onDragStart(e, ann.id);\n };\n\n const deleteBtn = (\n <button\n onMouseDown={(e) => {\n e.stopPropagation();\n onDelete(ann.id);\n }}\n className=\"absolute -top-2.5 -right-2.5 w-5 h-5 rounded-full bg-danger text-white text-xs leading-none flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity shadow-md z-10\"\n >\n ×\n </button>\n );\n\n const resizeHandle = (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n onResizeStart(e, ann.id);\n }}\n title=\"Drag to resize\"\n style={{ cursor: \"nwse-resize\" }}\n className=\"absolute -bottom-1 -right-1 w-3.5 h-3.5 rounded-sm bg-brand border-2 border-white opacity-0 group-hover:opacity-100 transition-opacity shadow-md z-10\"\n />\n );\n\n const baseStyle = {\n position: \"absolute\",\n left: pos.x,\n top: pos.y,\n width: pos.w,\n height: pos.h,\n userSelect: editing ? \"text\" : \"none\",\n cursor: editing ? \"text\" : \"grab\",\n zIndex: 10,\n pointerEvents: \"auto\",\n };\n\n if (ann.type === TOOL.TEXT) {\n return (\n <div\n style={baseStyle}\n onMouseDown={startDrag}\n onClick={(e) => e.stopPropagation()}\n className=\"group\"\n >\n {editing ? (\n <textarea\n ref={textareaRef}\n defaultValue={ann.content}\n onChange={(e) => onTextChange(ann.id, e.target.value)}\n onBlur={() => setEditing(false)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") e.target.blur();\n }}\n placeholder=\"Type here…\"\n className=\"w-full h-full rounded-md border-2 border-brand bg-yellow-50 text-ink shadow-lg outline-none resize-none\"\n style={{\n boxSizing: \"border-box\",\n fontSize: pos.h / 5,\n padding: `${pos.h * 0.125}px ${pos.w * 0.05}px`,\n }}\n />\n ) : (\n <div\n onDoubleClick={() => setEditing(true)}\n className=\"w-full h-full rounded-md border-2 border-yellow-400 bg-yellow-50 text-ink shadow-md whitespace-pre-wrap overflow-hidden\"\n style={{\n boxSizing: \"border-box\",\n fontSize: pos.h / 5,\n padding: `${pos.h * 0.125}px ${pos.w * 0.05}px`,\n }}\n >\n {ann.content || (\n <span className=\"text-ink-muted italic text-xs\">\n Double-click to edit\n </span>\n )}\n </div>\n )}\n {deleteBtn}\n {resizeHandle}\n </div>\n );\n }\n\n if (ann.type === TOOL.STAMP) {\n const rad = (STAMP_ROT_DEG * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const stampFit = Math.min(\n pos.w / (pos.w * cos + pos.h * sin),\n pos.h / (pos.w * sin + pos.h * cos),\n );\n const label = ann.stamp.label || \"\";\n const trackingEm = 0.18;\n const approxCharEm = 0.65;\n const widthCap =\n label.length * approxCharEm + Math.max(0, label.length - 1) * trackingEm;\n const widthBased = widthCap > 0 ? (pos.w * 0.82) / widthCap : pos.h * 0.42;\n const stampFontSize = Math.max(8, Math.min(widthBased, pos.h * 0.42));\n return (\n <div\n style={baseStyle}\n onMouseDown={startDrag}\n onClick={(e) => e.stopPropagation()}\n className=\"group\"\n >\n {ann.stamp.imageUrl ? (\n <img\n src={ann.stamp.imageUrl}\n alt=\"Stamp\"\n style={{ width: \"100%\", height: \"100%\", objectFit: \"contain\" }}\n className=\"select-none rounded shadow-md\"\n draggable={false}\n />\n ) : (\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n color: ann.stamp.color,\n borderColor: ann.stamp.color,\n backgroundColor: ann.stamp.bg,\n transform: `rotate(-${STAMP_ROT_DEG}deg) scale(${stampFit})`,\n transformOrigin: \"center\",\n boxSizing: \"border-box\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: stampFontSize,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n }}\n className=\"border-[3px] rounded-lg font-black tracking-[0.18em] uppercase shadow-md select-none\"\n >\n {label}\n </div>\n )}\n {deleteBtn}\n {resizeHandle}\n </div>\n );\n }\n\n if (ann.type === TOOL.SIGNATURE) {\n return (\n <div\n style={baseStyle}\n onMouseDown={startDrag}\n onClick={(e) => e.stopPropagation()}\n className=\"group\"\n >\n <img\n src={ann.imageData}\n alt=\"Signature\"\n style={{ width: \"100%\", height: \"100%\" }}\n className=\"select-none\"\n draggable={false}\n />\n {deleteBtn}\n {resizeHandle}\n </div>\n );\n }\n return null;\n}\n\nexport function AnnotationLayer({\n annotations,\n activeTool,\n pendingSignature,\n onPlace,\n onDelete,\n onMove,\n onResize,\n onTextChange,\n}) {\n const overlayRef = useRef(null);\n const draggingRef = useRef(null);\n const annotationsRef = useRef(annotations);\n const positionsRef = useRef({});\n const [, forceTick] = useState(0);\n const [previewPos, setPreviewPos] = useState(null);\n\n const signaturePreviewActive =\n activeTool === TOOL.SIGNATURE && !!pendingSignature;\n\n useEffect(() => {\n if (!signaturePreviewActive) setPreviewPos(null);\n }, [signaturePreviewActive]);\n\n const handleOverlayMouseMove = useCallback(\n (e) => {\n if (!signaturePreviewActive) return;\n const overlay = overlayRef.current;\n if (!overlay) return;\n const rect = overlay.getBoundingClientRect();\n setPreviewPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n },\n [signaturePreviewActive],\n );\n\n const handleOverlayMouseLeave = useCallback(() => setPreviewPos(null), []);\n\n useEffect(() => {\n annotationsRef.current = annotations;\n }, [annotations]);\n\n const hasAnnotations = annotations.length > 0;\n\n useEffect(() => {\n if (!hasAnnotations) {\n positionsRef.current = {};\n return;\n }\n let raf;\n let lastSig = \"\";\n const tick = () => {\n const overlay = overlayRef.current;\n if (overlay) {\n const overlayRect = overlay.getBoundingClientRect();\n const next = {};\n let sig = \"\";\n for (const ann of annotationsRef.current) {\n const pageEl = findPageElementByIndex(ann.pageIndex);\n if (!pageEl) {\n sig += `${ann.id}:none|`;\n continue;\n }\n const r = pageEl.getBoundingClientRect();\n const pos = {\n x: r.left - overlayRect.left + ann.normX * r.width,\n y: r.top - overlayRect.top + ann.normY * r.height,\n w: ann.normW * r.width,\n h: ann.normH * r.height,\n };\n next[ann.id] = pos;\n sig += `${ann.id}:${pos.x.toFixed(1)},${pos.y.toFixed(1)},${pos.w.toFixed(1)},${pos.h.toFixed(1)}|`;\n }\n if (sig !== lastSig) {\n lastSig = sig;\n positionsRef.current = next;\n forceTick((t) => t + 1);\n }\n }\n raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [hasAnnotations]);\n\n const positions = positionsRef.current;\n\n const handleClick = useCallback(\n (e) => {\n if (!activeTool || draggingRef.current) return;\n const pageEl = findPageElementAt(e.clientX, e.clientY);\n if (!pageEl) return;\n const pageRect = pageEl.getBoundingClientRect();\n const pageIndex = parseInt(pageEl.dataset.pageNumber, 10) - 1;\n const normX = (e.clientX - pageRect.left) / pageRect.width;\n const normY = (e.clientY - pageRect.top) / pageRect.height;\n onPlace(pageIndex, normX, normY, pageRect.width, pageRect.height);\n },\n [activeTool, onPlace],\n );\n\n const handleDragStart = useCallback(\n (e, id) => {\n const overlay = overlayRef.current;\n const pos = positionsRef.current[id];\n if (!overlay || !pos) return;\n const overlayRect = overlay.getBoundingClientRect();\n const annScreenX = pos.x + overlayRect.left;\n const annScreenY = pos.y + overlayRect.top;\n const offsetX = e.clientX - annScreenX;\n const offsetY = e.clientY - annScreenY;\n draggingRef.current = { id, offsetX, offsetY };\n\n const onMouseMove = (ev) => {\n const drag = draggingRef.current;\n if (!drag) return;\n const cur = positionsRef.current[drag.id];\n if (!cur) return;\n const ann = annotationsRef.current.find((a) => a.id === drag.id);\n if (!ann) return;\n const newAnnScreenX = ev.clientX - drag.offsetX;\n const newAnnScreenY = ev.clientY - drag.offsetY;\n const centerX = newAnnScreenX + cur.w / 2;\n const centerY = newAnnScreenY + cur.h / 2;\n const pageEl =\n findPageElementAt(centerX, centerY) ??\n findPageElementAt(ev.clientX, ev.clientY);\n if (!pageEl) return;\n const pageRect = pageEl.getBoundingClientRect();\n const pageIndex = parseInt(pageEl.dataset.pageNumber, 10) - 1;\n const normX = clampOrigin(\n (newAnnScreenX - pageRect.left) / pageRect.width,\n ann.normW,\n );\n const normY = clampOrigin(\n (newAnnScreenY - pageRect.top) / pageRect.height,\n ann.normH,\n );\n onMove(drag.id, pageIndex, normX, normY);\n };\n const onMouseUp = () => {\n draggingRef.current = null;\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n },\n [onMove],\n );\n\n const handleResizeStart = useCallback(\n (e, id) => {\n const ann = annotationsRef.current.find((a) => a.id === id);\n const pageEl = ann ? findPageElementByIndex(ann.pageIndex) : null;\n if (!ann || !pageEl) return;\n const pageRect = pageEl.getBoundingClientRect();\n const pageW = pageRect.width;\n const pageH = pageRect.height;\n const startX = e.clientX;\n const startY = e.clientY;\n const startW = ann.normW * pageW;\n const startH = ann.normH * pageH;\n const maxW = pageW - ann.normX * pageW;\n const maxH = pageH - ann.normY * pageH;\n const minW = 40;\n const minH = 28;\n\n const onMouseMove = (ev) => {\n const newW = Math.max(\n minW,\n Math.min(maxW, startW + ev.clientX - startX),\n );\n const newH = Math.max(\n minH,\n Math.min(maxH, startH + ev.clientY - startY),\n );\n onResize(id, newW / pageW, newH / pageH);\n };\n const onMouseUp = () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n },\n [onResize],\n );\n\n return (\n <div\n ref={overlayRef}\n onClick={handleClick}\n onMouseMove={handleOverlayMouseMove}\n onMouseLeave={handleOverlayMouseLeave}\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 5,\n pointerEvents: activeTool ? \"auto\" : \"none\",\n cursor: signaturePreviewActive\n ? \"none\"\n : activeTool\n ? PLACE_CURSOR\n : \"default\",\n }}\n >\n <div style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}>\n {annotations.map((ann) => (\n <AnnotationItem\n key={ann.id}\n ann={ann}\n pos={positions[ann.id]}\n onDelete={onDelete}\n onDragStart={handleDragStart}\n onResizeStart={handleResizeStart}\n onTextChange={onTextChange}\n />\n ))}\n </div>\n {signaturePreviewActive && previewPos && (\n <img\n src={pendingSignature.imageData}\n alt=\"\"\n draggable={false}\n style={{\n position: \"absolute\",\n left: previewPos.x - pendingSignature.w / 2,\n top: previewPos.y - pendingSignature.h / 2,\n width: pendingSignature.w,\n height: pendingSignature.h,\n opacity: 0.65,\n pointerEvents: \"none\",\n filter: \"drop-shadow(0 1px 2px rgba(0,0,0,0.25))\",\n }}\n />\n )}\n </div>\n );\n}\n","export function PdfIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"9\" y1=\"13\" x2=\"15\" y2=\"13\" />\n <line x1=\"9\" y1=\"17\" x2=\"15\" y2=\"17\" />\n <line x1=\"9\" y1=\"9\" x2=\"11\" y2=\"9\" />\n </svg>\n );\n}\nexport function UploadIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n );\n}\nexport function CloseIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\nexport function DropIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\" />\n <path d=\"M12 12v9\" />\n <path d=\"m8 17 4-4 4 4\" />\n </svg>\n );\n}\nexport function ErrorIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n );\n}\nexport function TextIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"4 7 4 4 20 4 20 7\" />\n <line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\" />\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\" />\n </svg>\n );\n}\nexport function StampIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M5 22h14\" />\n <path d=\"M19.27 13.73A2.5 2.5 0 0 0 17 13h-1a2 2 0 0 1-2-2v-1a4 4 0 0 0-8 0v1a2 2 0 0 1-2 2H3a2.5 2.5 0 0 0-1.77 4.26\" />\n <path d=\"M5 18h14a1 1 0 0 0 1-1v-1a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1z\" />\n </svg>\n );\n}\nexport function SignatureIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 17c3.333-4 6-6 7-6s1 2-1 4 0 4 2 2 4-4 5-4 2 1 1 3\" />\n <line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\" />\n </svg>\n );\n}\nexport function TrashIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\" />\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n <path d=\"M9 6V4h6v2\" />\n </svg>\n );\n}\nexport function UndoIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\" />\n </svg>\n );\n}\nexport function ImageIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n );\n}\nexport function SaveIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </svg>\n );\n}\nexport function WarningIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n );\n}\nexport function CheckIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\nexport function InfoIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n );\n}\nexport function SendIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\" />\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\" />\n </svg>\n );\n}\nexport function SpinnerIcon({ className }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n","import { useRef } from \"react\";\nimport { DEFAULT_STAMPS } from \"./constants.js\";\nimport { ImageIcon } from \"./icons.jsx\";\n\nexport function StampPicker({\n selected,\n onSelect,\n customStamps,\n onImageUpload,\n stamps = DEFAULT_STAMPS,\n}) {\n const imgInputRef = useRef(null);\n const isSelected = (stamp) => selected?.id === stamp.id;\n\n return (\n <div className=\"absolute right-11 top-0 z-30 w-64 bg-surface border border-stroke rounded-xl shadow-lg overflow-hidden\">\n <div className=\"px-5 pt-4 pb-3 border-b border-stroke\">\n <p className=\"text-xs font-semibold text-ink\">Stamp</p>\n <p className=\"text-[10px] text-ink-muted mt-1\">\n Choose a preset or upload your own\n </p>\n </div>\n\n <div className=\"p-4 flex flex-col gap-4\">\n <div>\n <p className=\"text-[9px] text-ink-muted uppercase tracking-widest font-semibold mb-3 px-0.5\">\n Presets\n </p>\n <div className=\"grid grid-cols-2 gap-2\">\n {stamps.map((stamp) => (\n <button\n key={stamp.id}\n onClick={() => onSelect(stamp)}\n style={{\n color: stamp.color,\n borderColor: stamp.color,\n backgroundColor: stamp.bg,\n }}\n className={[\n \"py-[2.5px] text-[11px] font-black tracking-widest uppercase border-2 rounded-md transition-all text-center leading-none\",\n isSelected(stamp)\n ? \"ring-2 ring-offset-1 ring-offset-surface ring-current scale-105 shadow-md\"\n : \"opacity-70 hover:opacity-100 hover:scale-[1.03]\",\n ].join(\" \")}\n >\n {stamp.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"h-px bg-stroke\" />\n\n <div>\n <p className=\"text-[9px] text-ink-muted uppercase tracking-widest font-semibold mb-3 p-4 text-center\">\n Custom image\n </p>\n\n {customStamps.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {customStamps.map((cs) => (\n <button\n key={cs.id}\n onClick={() => onSelect(cs)}\n title={cs.label}\n className={[\n \"w-16 h-16 rounded-md overflow-hidden border-2 transition-all bg-surface\",\n isSelected(cs)\n ? \"border-brand scale-105 shadow-md\"\n : \"border-stroke hover:border-ink-muted\",\n ].join(\" \")}\n >\n <img\n src={cs.imageUrl}\n alt={cs.label}\n className=\"w-full h-full object-contain p-1\"\n />\n </button>\n ))}\n </div>\n )}\n\n <button\n onClick={() => imgInputRef.current?.click()}\n className=\"w-full flex items-center justify-center gap-2 py-3 text-xs text-ink-muted border border-dashed border-stroke rounded-md hover:border-brand hover:text-brand hover:bg-brand-subtle transition-all\"\n >\n <ImageIcon className=\"w-4 h-4\" />\n Upload image…\n </button>\n\n <input\n ref={imgInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={onImageUpload}\n className=\"hidden\"\n />\n </div>\n </div>\n </div>\n );\n}\n","import { useState, useRef, useEffect } from \"react\";\nimport { TOOL, DEFAULT_STAMPS } from \"./constants.js\";\nimport { StampPicker } from \"./StampPicker.jsx\";\nimport {\n TextIcon,\n StampIcon,\n SignatureIcon,\n UndoIcon,\n TrashIcon,\n SaveIcon,\n} from \"./icons.jsx\";\n\nexport function ToolBtn({\n active,\n onClick,\n title,\n disabled = false,\n danger = false,\n primary = false,\n children,\n}) {\n return (\n <button\n onClick={onClick}\n title={title}\n disabled={disabled}\n className={[\n \"w-10 h-10 flex items-center justify-center rounded-md transition-all\",\n active\n ? \"bg-brand text-white shadow-md\"\n : primary\n ? \"text-success hover:text-success-dark hover:bg-success/10 disabled:opacity-25 disabled:cursor-not-allowed\"\n : danger\n ? \"text-ink-muted hover:text-danger hover:bg-danger/10 disabled:opacity-25 disabled:cursor-not-allowed\"\n : \"text-ink-muted hover:text-ink hover:bg-surface-muted disabled:opacity-25 disabled:cursor-not-allowed\",\n ].join(\" \")}\n >\n {children}\n </button>\n );\n}\n\nexport function AnnotationToolbar({\n activeTool,\n onToolSelect,\n selectedStamp,\n onStampSelect,\n onUndo,\n onClearAll,\n onSave,\n count,\n saveAlwaysEnabled = false,\n isSigned = false,\n stamps = DEFAULT_STAMPS,\n}) {\n const [showStampPicker, setShowStampPicker] = useState(false);\n const [customStamps, setCustomStamps] = useState([]);\n const toolbarRef = useRef(null);\n\n useEffect(() => {\n if (!showStampPicker) return;\n const timer = setTimeout(() => {\n const handler = (e) => {\n if (!toolbarRef.current?.contains(e.target)) setShowStampPicker(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, 0);\n return () => clearTimeout(timer);\n }, [showStampPicker]);\n\n const handleImageUpload = (e) => {\n const file = e.target.files[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = (ev) => {\n const stamp = {\n id: `custom-${Date.now()}`,\n label: file.name,\n imageUrl: ev.target.result,\n };\n setCustomStamps((prev) => [...prev, stamp]);\n onStampSelect(stamp);\n onToolSelect(TOOL.STAMP);\n setShowStampPicker(false);\n };\n reader.readAsDataURL(file);\n e.target.value = \"\";\n };\n\n const toggle = (tool) => {\n if (tool === TOOL.STAMP) {\n setShowStampPicker((v) => !v);\n onToolSelect(activeTool === tool ? null : tool);\n } else {\n setShowStampPicker(false);\n onToolSelect(activeTool === tool ? null : tool);\n }\n };\n\n return (\n <div\n ref={toolbarRef}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 z-20 flex flex-col items-center gap-1.5 bg-surface/95 backdrop-blur-md border border-stroke rounded-xl p-3 shadow-lg\"\n >\n <span className=\"text-[9px] text-ink-disabled uppercase tracking-widest mb-1 font-semibold select-none\">\n Tools\n </span>\n\n <ToolBtn\n active={activeTool === TOOL.TEXT}\n onClick={() => toggle(TOOL.TEXT)}\n title=\"Text field\"\n >\n <TextIcon className=\"w-4 h-4\" />\n </ToolBtn>\n\n <div className=\"relative\">\n <ToolBtn\n active={activeTool === TOOL.STAMP}\n onClick={() => toggle(TOOL.STAMP)}\n title=\"Stamp\"\n >\n <StampIcon className=\"w-4 h-4\" />\n </ToolBtn>\n {showStampPicker && (\n <StampPicker\n selected={selectedStamp}\n customStamps={customStamps}\n onImageUpload={handleImageUpload}\n stamps={stamps}\n onSelect={(stamp) => {\n onStampSelect(stamp);\n setShowStampPicker(false);\n onToolSelect(TOOL.STAMP);\n }}\n />\n )}\n </div>\n\n <ToolBtn\n active={activeTool === TOOL.SIGNATURE}\n onClick={() => toggle(TOOL.SIGNATURE)}\n title=\"Signature\"\n >\n <SignatureIcon className=\"w-4 h-4\" />\n </ToolBtn>\n\n <div className=\"w-6 h-px bg-stroke my-1.5\" />\n\n <ToolBtn\n active={false}\n onClick={onUndo}\n title=\"Undo last\"\n disabled={count === 0}\n >\n <UndoIcon className=\"w-4 h-4\" />\n </ToolBtn>\n\n <ToolBtn\n active={false}\n onClick={onClearAll}\n title=\"Clear all fields\"\n disabled={count === 0}\n danger\n >\n <TrashIcon className=\"w-4 h-4\" />\n </ToolBtn>\n\n <div className=\"w-6 h-px bg-stroke my-1.5\" />\n\n <ToolBtn\n active={false}\n onClick={onSave}\n title={\n isSigned\n ? \"Save the signed document\"\n : \"Save a copy with your fields (not yet signed)\"\n }\n primary\n >\n <SaveIcon className=\"w-4 h-4\" />\n </ToolBtn>\n </div>\n );\n}\n","import { useRef, useEffect } from \"react\";\nimport { CloseIcon } from \"./icons.jsx\";\n\nexport function SignatureModal({ onConfirm, onClose }) {\n const canvasRef = useRef(null);\n const drawing = useRef(false);\n const hasStroke = useRef(false);\n\n useEffect(() => {\n const ctx = canvasRef.current.getContext(\"2d\");\n ctx.strokeStyle = \"#111827\";\n ctx.lineWidth = 2.5;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n }, []);\n\n const pos = (e, canvas) => {\n const r = canvas.getBoundingClientRect();\n const s = e.touches ? e.touches[0] : e;\n return { x: s.clientX - r.left, y: s.clientY - r.top };\n };\n\n const onDown = (e) => {\n e.preventDefault();\n const canvas = canvasRef.current;\n const { x, y } = pos(e, canvas);\n canvas.getContext(\"2d\").beginPath();\n canvas.getContext(\"2d\").moveTo(x, y);\n drawing.current = true;\n hasStroke.current = true;\n };\n\n const onMove = (e) => {\n e.preventDefault();\n if (!drawing.current) return;\n const canvas = canvasRef.current;\n const { x, y } = pos(e, canvas);\n const ctx = canvas.getContext(\"2d\");\n ctx.lineTo(x, y);\n ctx.stroke();\n };\n\n const onUp = () => {\n drawing.current = false;\n };\n\n const clear = () => {\n const canvas = canvasRef.current;\n canvas.getContext(\"2d\").clearRect(0, 0, canvas.width, canvas.height);\n hasStroke.current = false;\n };\n\n const confirm = () => {\n if (!hasStroke.current) return;\n const canvas = canvasRef.current;\n onConfirm(\n canvas.toDataURL(\"image/png\"),\n canvas.width / 2,\n canvas.height / 2,\n );\n };\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-ink/40 backdrop-blur-sm\">\n <div className=\"bg-surface rounded-xl shadow-2xl p-8 w-130 max-w-[95vw] border border-stroke\">\n <div className=\"flex items-center justify-between mb-6\">\n <div>\n <h3 className=\"font-semibold text-ink text-base\">\n Draw your signature\n </h3>\n <p className=\"text-xs text-ink-muted mt-1\">\n Use your mouse or touch to sign below\n </p>\n </div>\n <button\n onClick={onClose}\n className=\"w-8 h-8 flex items-center justify-center rounded-md text-ink-muted hover:text-ink hover:bg-surface-muted transition-colors\"\n >\n <CloseIcon className=\"w-5 h-5\" />\n </button>\n </div>\n\n <div className=\"border-2 border-dashed border-stroke rounded-md overflow-hidden bg-surface-muted relative mb-3\">\n <canvas\n ref={canvasRef}\n width={464}\n height={200}\n onMouseDown={onDown}\n onMouseMove={onMove}\n onMouseUp={onUp}\n onMouseLeave={onUp}\n onTouchStart={onDown}\n onTouchMove={onMove}\n onTouchEnd={onUp}\n style={{\n display: \"block\",\n cursor: \"crosshair\",\n touchAction: \"none\",\n }}\n />\n <div className=\"absolute bottom-2 left-1/2 -translate-x-1/2 w-32 h-px bg-stroke\" />\n </div>\n <p className=\"text-xs text-ink-muted text-center mb-6\">\n Sign above the line\n </p>\n\n <div className=\"flex gap-3 justify-end\">\n <button\n onClick={clear}\n className=\"px-5 py-2.5 text-sm text-ink border border-stroke rounded-md hover:bg-surface-muted transition-colors\"\n >\n Clear\n </button>\n <button\n onClick={confirm}\n className=\"px-5 py-2.5 text-sm font-medium bg-brand hover:bg-brand-dark text-white rounded-md transition-colors\"\n >\n Place signature\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect } from \"react\";\nimport { CheckIcon, WarningIcon, ErrorIcon, InfoIcon, CloseIcon } from \"./icons.jsx\";\n\nexport const SNACKBAR_VARIANTS = {\n success: {\n accent: \"#43a047\",\n outline: \"#81c784\",\n icon: CheckIcon,\n title: \"Success\",\n },\n warning: {\n accent: \"#ffb300\",\n outline: \"#ffd54f\",\n icon: WarningIcon,\n title: \"Warning\",\n },\n error: {\n accent: \"#e53935\",\n outline: \"#e57373\",\n icon: ErrorIcon,\n title: \"Error\",\n },\n info: {\n accent: \"#1e88e5\",\n outline: \"#64b5f6\",\n icon: InfoIcon,\n title: \"Info\",\n },\n};\n\nexport function Snackbar({ snackbar, onDismiss }) {\n useEffect(() => {\n if (!snackbar) return;\n const t = setTimeout(onDismiss, snackbar.duration ?? 5000);\n return () => clearTimeout(t);\n }, [snackbar, onDismiss]);\n\n if (!snackbar) return null;\n\n const v = SNACKBAR_VARIANTS[snackbar.severity] ?? SNACKBAR_VARIANTS.info;\n const Icon = v.icon;\n const title = snackbar.title ?? v.title;\n\n return (\n <div\n key={snackbar.key}\n role=\"alert\"\n style={{\n border: `0.5px solid ${v.outline}`,\n borderLeft: `3px solid ${v.accent}`,\n boxShadow: \"0 0 10px rgba(0,0,0,0.25)\",\n }}\n className=\"fixed top-2 right-6 rtl:right-auto rtl:left-6 z-50 w-80 max-w-80 rounded bg-surface\"\n >\n <div className=\"flex flex-row items-start py-2.5 px-2 rounded bg-surface\">\n <div\n className=\"flex items-start justify-start h-full max-w-fit mr-2 rtl:mr-0 rtl:ml-2\"\n style={{ color: v.accent }}\n >\n <Icon className=\"w-7 h-7\" />\n </div>\n\n <div className=\"flex flex-col flex-auto w-full h-full min-w-0\">\n <div className=\"flex w-full py-1 mb-0.5 overflow-hidden max-h-8\">\n <span className=\"overflow-hidden font-semibold leading-normal tracking-normal text-sm text-[#424242] truncate\">\n {title}\n </span>\n </div>\n <div className=\"flex flex-1 w-full overflow-x-hidden overflow-y-auto max-h-40\">\n <span className=\"font-normal wrap-break-word text-[11px] text-ink-muted whitespace-pre-wrap\">\n {snackbar.message}\n </span>\n </div>\n </div>\n\n <div className=\"flex items-start justify-start h-full mx-1 mt-0.5 max-w-fit\">\n <button\n onClick={onDismiss}\n title=\"Dismiss\"\n className=\"p-0.5 rounded text-ink-muted opacity-60 hover:opacity-100 hover:bg-ink/10 transition-colors\"\n >\n <CloseIcon className=\"w-4.5 h-4.5\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import { DropIcon, ErrorIcon } from \"./icons.jsx\";\n\nexport function EmptyState({\n isDragging,\n error,\n onDrop,\n onDragOver,\n onDragLeave,\n onBrowse,\n}) {\n return (\n <div className=\"flex-1 flex flex-col items-center justify-center p-6 bg-page\">\n <div\n onDrop={onDrop}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onClick={onBrowse}\n className={[\n \"w-full max-w-md rounded-xl border-2 border-dashed transition-all duration-200 cursor-pointer\",\n \"flex flex-col items-center justify-center gap-4 p-12\",\n isDragging\n ? \"border-brand bg-brand-subtle scale-[1.02]\"\n : \"border-stroke bg-surface hover:border-brand hover:bg-surface-muted\",\n ].join(\" \")}\n >\n <div\n className={[\n \"w-16 h-16 rounded-xl flex items-center justify-center transition-colors\",\n isDragging ? \"bg-brand\" : \"bg-surface-muted\",\n ].join(\" \")}\n >\n <DropIcon\n className={[\n \"w-8 h-8 transition-colors\",\n isDragging ? \"text-white\" : \"text-ink-muted\",\n ].join(\" \")}\n />\n </div>\n <div className=\"text-center space-y-1\">\n <p className=\"font-semibold text-ink\">\n {isDragging ? \"Drop it here\" : \"Drop your PDF here\"}\n </p>\n <p className=\"text-sm text-ink-muted\">\n or{\" \"}\n <span className=\"text-brand hover:text-brand-dark underline underline-offset-2\">\n click to browse\n </span>\n </p>\n </div>\n <span className=\"text-xs text-ink-muted bg-surface-muted px-3 py-1 rounded-full\">\n PDF only\n </span>\n </div>\n {error && (\n <div className=\"mt-4 flex items-center gap-2 text-sm text-danger-dark bg-danger/10 border border-danger/30 px-4 py-2.5 rounded-md\">\n <ErrorIcon className=\"w-4 h-4 shrink-0\" />\n {error}\n </div>\n )}\n </div>\n );\n}\n","import { useState, useCallback, useEffect } from \"react\";\nimport {\n TOOL,\n DEFAULT_STAMPS,\n DEFAULT_TEXT_W,\n DEFAULT_TEXT_H,\n DEFAULT_STAMP_TEXT_W,\n DEFAULT_STAMP_TEXT_H,\n DEFAULT_STAMP_IMG_W,\n DEFAULT_STAMP_IMG_H,\n uid,\n clampOrigin,\n} from \"./constants.js\";\n\n// Owns the annotation state machine: tool selection, signature capture flow,\n// click-to-place, drag/resize/edit/undo/clear, and the ESC-to-cancel binding.\n// Wire the returned handlers into <AnnotationLayer>, <AnnotationToolbar>, and\n// <SignatureModal>.\nexport function useAnnotations({ stamps = DEFAULT_STAMPS } = {}) {\n const [annotations, setAnnotations] = useState([]);\n const [activeTool, setActiveTool] = useState(null);\n const [selectedStamp, setSelectedStamp] = useState(stamps[0] ?? null);\n const [showSignatureModal, setShowSignatureModal] = useState(false);\n const [pendingSignature, setPendingSignature] = useState(null);\n\n const handleToolSelect = useCallback(\n (tool) => {\n if (tool === TOOL.SIGNATURE) {\n if (activeTool === TOOL.SIGNATURE) {\n setActiveTool(null);\n setPendingSignature(null);\n } else {\n setActiveTool(null);\n setShowSignatureModal(true);\n }\n } else {\n setActiveTool(tool);\n }\n },\n [activeTool],\n );\n\n const handleSignatureConfirm = useCallback((imageData, w, h) => {\n setShowSignatureModal(false);\n setPendingSignature({ imageData, w, h });\n setActiveTool(TOOL.SIGNATURE);\n }, []);\n\n const handlePlace = useCallback(\n (pageIndex, normX, normY, pageW, pageH) => {\n if (activeTool === TOOL.TEXT) {\n const normW = DEFAULT_TEXT_W / pageW;\n const normH = DEFAULT_TEXT_H / pageH;\n setAnnotations((prev) => [\n ...prev,\n {\n id: uid(),\n type: TOOL.TEXT,\n pageIndex,\n normX: clampOrigin(normX - normW / 2, normW),\n normY: clampOrigin(normY - normH / 2, normH),\n normW,\n normH,\n content: \"\",\n },\n ]);\n setActiveTool(null);\n } else if (activeTool === TOOL.STAMP) {\n const isImg = !!selectedStamp.imageUrl;\n const normW =\n (isImg ? DEFAULT_STAMP_IMG_W : DEFAULT_STAMP_TEXT_W) / pageW;\n const normH =\n (isImg ? DEFAULT_STAMP_IMG_H : DEFAULT_STAMP_TEXT_H) / pageH;\n setAnnotations((prev) => [\n ...prev,\n {\n id: uid(),\n type: TOOL.STAMP,\n pageIndex,\n normX: clampOrigin(normX - normW / 2, normW),\n normY: clampOrigin(normY - normH / 2, normH),\n normW,\n normH,\n stamp: selectedStamp,\n },\n ]);\n setActiveTool(null);\n } else if (activeTool === TOOL.SIGNATURE && pendingSignature) {\n const normW = pendingSignature.w / pageW;\n const normH = pendingSignature.h / pageH;\n setAnnotations((prev) => [\n ...prev,\n {\n id: uid(),\n type: TOOL.SIGNATURE,\n pageIndex,\n normX: clampOrigin(normX - normW / 2, normW),\n normY: clampOrigin(normY - normH / 2, normH),\n normW,\n normH,\n imageData: pendingSignature.imageData,\n },\n ]);\n setActiveTool(null);\n setPendingSignature(null);\n }\n },\n [activeTool, selectedStamp, pendingSignature],\n );\n\n const handleDelete = useCallback(\n (id) => setAnnotations((p) => p.filter((a) => a.id !== id)),\n [],\n );\n const handleMove = useCallback(\n (id, pageIndex, normX, normY) =>\n setAnnotations((p) =>\n p.map((a) => (a.id === id ? { ...a, pageIndex, normX, normY } : a)),\n ),\n [],\n );\n const handleResize = useCallback(\n (id, normW, normH) =>\n setAnnotations((p) =>\n p.map((a) => (a.id === id ? { ...a, normW, normH } : a)),\n ),\n [],\n );\n const handleTextChange = useCallback(\n (id, content) =>\n setAnnotations((p) =>\n p.map((a) => (a.id === id ? { ...a, content } : a)),\n ),\n [],\n );\n const handleUndo = useCallback(\n () => setAnnotations((p) => p.slice(0, -1)),\n [],\n );\n const handleClearAll = useCallback(() => setAnnotations([]), []);\n\n const reset = useCallback(() => {\n setAnnotations([]);\n setActiveTool(null);\n setPendingSignature(null);\n setShowSignatureModal(false);\n }, []);\n\n useEffect(() => {\n const onKey = (e) => {\n if (e.key === \"Escape\") {\n setActiveTool(null);\n setPendingSignature(null);\n setShowSignatureModal(false);\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, []);\n\n const unsignedCount = annotations.filter(\n (a) => a.type === TOOL.TEXT && !a.content?.trim(),\n ).length;\n\n const hint =\n activeTool === TOOL.TEXT\n ? \"Click on a page to place a text box · ESC to cancel\"\n : activeTool === TOOL.STAMP\n ? selectedStamp?.imageUrl\n ? \"Click to place image stamp · ESC to cancel\"\n : `Click to stamp \"${selectedStamp?.label}\" · ESC to cancel`\n : activeTool === TOOL.SIGNATURE\n ? \"Click to place your signature · ESC to cancel\"\n : null;\n\n return {\n annotations,\n setAnnotations,\n activeTool,\n selectedStamp,\n setSelectedStamp,\n showSignatureModal,\n setShowSignatureModal,\n pendingSignature,\n handleToolSelect,\n handleSignatureConfirm,\n handlePlace,\n handleDelete,\n handleMove,\n handleResize,\n handleTextChange,\n handleUndo,\n handleClearAll,\n reset,\n unsignedCount,\n hint,\n };\n}\n","import { PDFDocument, rgb, degrees, StandardFonts } from \"pdf-lib\";\nimport { TOOL, STAMP_ROT_DEG } from \"./constants.js\";\n\nexport function hexToRgb01(hex) {\n const r = parseInt(hex.slice(1, 3), 16) / 255;\n const g = parseInt(hex.slice(3, 5), 16) / 255;\n const b = parseInt(hex.slice(5, 7), 16) / 255;\n return rgb(r, g, b);\n}\n\nexport function dataUrlToBytes(dataUrl) {\n const base64 = dataUrl.split(\",\")[1];\n const binary = atob(base64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n}\n\nexport function blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const dataUrl = String(reader.result);\n resolve(dataUrl.slice(dataUrl.indexOf(\",\") + 1));\n };\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n}\n\nexport function stripDataUrl(s) {\n if (!s) return null;\n return s.startsWith(\"data:\") ? s.slice(s.indexOf(\",\") + 1) : s;\n}\n\nexport function base64ToFile(base64, filename, mimeType = \"application/pdf\") {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return new File([bytes], filename, { type: mimeType });\n}\n\nexport function makeUuid() {\n if (typeof crypto !== \"undefined\") {\n if (crypto.randomUUID) return crypto.randomUUID();\n if (crypto.getRandomValues) {\n const b = crypto.getRandomValues(new Uint8Array(16));\n b[6] = (b[6] & 0x0f) | 0x40;\n b[8] = (b[8] & 0x3f) | 0x80;\n const h = Array.from(b, (x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;\n }\n }\n throw new Error(\"Cannot generate UUID: crypto API unavailable\");\n}\n\n// Flattens the annotations into the PDF with pdf-lib and returns the result\n// as a base64 string, ready to send to a signing/sealing API.\nexport async function bakeAnnotationsToBase64(pdfFile, annotations) {\n const bytes = await pdfFile.arrayBuffer();\n const pdfDoc = await PDFDocument.load(bytes);\n const pages = pdfDoc.getPages();\n const font = await pdfDoc.embedFont(StandardFonts.HelveticaBold);\n\n for (const ann of annotations) {\n const page = pages[ann.pageIndex];\n if (!page) continue;\n const pw = page.getWidth();\n const ph = page.getHeight();\n const x = ann.normX * pw;\n const w = ann.normW * pw;\n const h = ann.normH * ph;\n // PDF origin is bottom-left; convert from top-left screen coords\n const y = ph - ann.normY * ph - h;\n\n if (ann.type === TOOL.TEXT) {\n const content = ann.content ?? \"\";\n if (!content.trim()) continue;\n const fontSize = Math.max(6, h / 5);\n page.drawText(content, {\n x: x + w * 0.05,\n y: y + h * 0.35,\n size: fontSize,\n color: rgb(0.07, 0.09, 0.15),\n maxWidth: w * 0.9,\n });\n } else if (ann.type === TOOL.STAMP) {\n if (ann.stamp.imageUrl) {\n const imgBytes = dataUrlToBytes(ann.stamp.imageUrl);\n const embedded = ann.stamp.imageUrl.includes(\"image/png\")\n ? await pdfDoc.embedPng(imgBytes)\n : await pdfDoc.embedJpg(imgBytes);\n page.drawImage(embedded, { x, y, width: w, height: h });\n } else {\n const label = ann.stamp.label || \"\";\n const stampColor = hexToRgb01(ann.stamp.color);\n const fontSize = Math.max(\n 6,\n Math.min(h * 0.42, (w * 0.8) / Math.max(1, label.length * 0.6)),\n );\n const textW = label.length * fontSize * 0.6;\n page.drawText(label, {\n x: x + (w - textW) / 2,\n y: y + (h - fontSize) / 2,\n size: fontSize,\n font,\n color: stampColor,\n rotate: degrees(-STAMP_ROT_DEG),\n });\n }\n } else if (ann.type === TOOL.SIGNATURE) {\n const pngBytes = dataUrlToBytes(ann.imageData);\n const embedded = await pdfDoc.embedPng(pngBytes);\n page.drawImage(embedded, { x, y, width: w, height: h });\n }\n }\n\n const savedBytes = await pdfDoc.save();\n let binary = \"\";\n savedBytes.forEach((b) => {\n binary += String.fromCharCode(b);\n });\n return btoa(binary);\n}\n\n// Converts the annotations into coordinate field objects (points, top-left\n// origin) without modifying the PDF — for APIs that place fields server-side.\nexport async function annotationsToFields(pdfFile, annotations) {\n const bytes = await pdfFile.arrayBuffer();\n const pdfDoc = await PDFDocument.load(bytes);\n const pages = pdfDoc.getPages();\n const fields = [];\n for (const ann of annotations) {\n const page = pages[ann.pageIndex];\n if (!page) continue;\n const pw = page.getWidth();\n const ph = page.getHeight();\n let value = null;\n if (ann.type === TOOL.TEXT) {\n value = ann.content ?? \"\";\n } else if (ann.type === TOOL.STAMP) {\n value = ann.stamp.imageUrl\n ? stripDataUrl(ann.stamp.imageUrl)\n : ann.stamp.label;\n } else if (ann.type === TOOL.SIGNATURE) {\n value = stripDataUrl(ann.imageData);\n }\n fields.push({\n top: ann.normY * ph,\n left: ann.normX * pw,\n width: ann.normW * pw,\n height: ann.normH * ph,\n pageNumber: ann.pageIndex + 1,\n type: ann.type,\n value: value,\n });\n }\n return fields;\n}\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { PdfViewer } from \"./PdfViewer.jsx\";\nimport { AnnotationLayer } from \"./AnnotationLayer.jsx\";\nimport { AnnotationToolbar } from \"./AnnotationToolbar.jsx\";\nimport { SignatureModal } from \"./SignatureModal.jsx\";\nimport { Snackbar } from \"./Snackbar.jsx\";\nimport { EmptyState } from \"./EmptyState.jsx\";\nimport { useAnnotations } from \"./useAnnotations.js\";\nimport { DEFAULT_STAMPS } from \"./constants.js\";\nimport { bakeAnnotationsToBase64, base64ToFile } from \"./pdf-utils.js\";\nimport { UploadIcon, CloseIcon, SendIcon, SpinnerIcon } from \"./icons.jsx\";\n\nconst DEFAULT_LABELS = {\n completeButton: \"Complete\",\n completeSending: \"Sending…\",\n completeSuccess: \"Completed successfully.\",\n completeErrorPrefix: \"Failed to complete: \",\n noFileOpen: \"No file open\",\n loadingDocument: \"Loading document…\",\n openFile: \"Open PDF\",\n changeFile: \"Change file\",\n renderError: \"Failed to render this PDF.\",\n saveUnavailable: \"You can't download the document right now.\",\n};\n\n// Turn-key viewer + annotation workspace. The host app injects its own\n// behavior through onSave / onComplete / onFileChange and the header slot;\n// the component owns all annotation UI mechanics.\nexport function PdfAnnotator({\n fileBlob = null,\n fileUrl = null,\n allowFileUpload = true,\n header = null,\n loading = false,\n stamps = DEFAULT_STAMPS,\n licenseKey = \"FREE-LIMITED-KEY\",\n theme = null,\n visibility = { open: false, download: false, print: false },\n readOnly = false,\n isSigned = false,\n saveAlwaysEnabled = false,\n documentTitle = null,\n errorMessage = null,\n labels = {},\n onFileChange,\n onSave,\n onComplete,\n onError,\n className = \"\",\n}) {\n const L = { ...DEFAULT_LABELS, ...labels };\n\n const [file, setFile] = useState(fileBlob);\n const [isDragging, setIsDragging] = useState(false);\n const [error, setError] = useState(null);\n const [sending, setSending] = useState(false);\n const [snackbar, setSnackbar] = useState(null);\n const fileInputRef = useRef(null);\n\n const ann = useAnnotations({ stamps });\n\n useEffect(() => {\n setFile(fileBlob);\n }, [fileBlob]);\n\n const showSnackbar = useCallback(\n (message, severity = \"info\", duration = 5000) => {\n setSnackbar({ message, severity, duration, key: Date.now() });\n },\n [],\n );\n const dismissSnackbar = useCallback(() => setSnackbar(null), []);\n\n const loadFile = useCallback(\n (f) => {\n if (!f) return;\n if (f.type !== \"application/pdf\") {\n setError(\"Only PDF files are supported.\");\n return;\n }\n setError(null);\n setFile(f);\n ann.reset();\n onFileChange?.(f);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [ann.reset, onFileChange],\n );\n\n const clearFile = useCallback(() => {\n setFile(null);\n setError(null);\n ann.reset();\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n onFileChange?.(null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ann.reset, onFileChange]);\n\n const handleFileChange = useCallback(\n (e) => loadFile(e.target.files[0]),\n [loadFile],\n );\n const handleDrop = useCallback(\n (e) => {\n e.preventDefault();\n setIsDragging(false);\n loadFile(e.dataTransfer.files[0]);\n },\n [loadFile],\n );\n const handleDragOver = useCallback((e) => {\n e.preventDefault();\n setIsDragging(true);\n }, []);\n const handleDragLeave = useCallback(() => setIsDragging(false), []);\n\n const handleSave = useCallback(async () => {\n // Host apps own save behavior via onSave. When none is provided, fall back\n // to a built-in default: bake the placed fields into the PDF and download\n // it (or the original file when nothing has been placed yet).\n if (onSave) {\n onSave(file, ann.annotations);\n return;\n }\n if (!file) {\n showSnackbar(L.saveUnavailable, \"warning\", 5000);\n return;\n }\n try {\n let blob = file;\n if (ann.annotations.length > 0) {\n const base64 = await bakeAnnotationsToBase64(file, ann.annotations);\n blob = base64ToFile(base64, file.name);\n }\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = file.name || \"document.pdf\";\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch (err) {\n showSnackbar(L.saveUnavailable, \"error\", 5000);\n onError?.(err);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onSave, file, ann.annotations, showSnackbar, L.saveUnavailable, onError]);\n\n const handleComplete = useCallback(async () => {\n if (!file || ann.annotations.length === 0 || sending || !onComplete)\n return;\n setSending(true);\n try {\n await onComplete(file, ann.annotations);\n ann.reset();\n setError(null);\n showSnackbar(L.completeSuccess, \"success\");\n } catch (err) {\n showSnackbar(\n L.completeErrorPrefix + (err?.message ?? String(err)),\n \"error\",\n 8000,\n );\n } finally {\n setSending(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n file,\n ann.annotations,\n ann.reset,\n sending,\n onComplete,\n showSnackbar,\n L.completeSuccess,\n L.completeErrorPrefix,\n ]);\n\n const hasDoc = !!file || !!fileUrl;\n const hint = sending ? L.completeSending : ann.hint;\n\n return (\n <div className={`h-full bg-page text-ink flex flex-col ${className}`}>\n <header className=\"h-16 bg-surface border-b border-stroke flex items-center px-6 gap-4 shrink-0 shadow-sm\">\n {header && (\n <>\n <div className=\"flex items-center gap-2.5\">{header}</div>\n <div className=\"h-5 w-px bg-stroke mx-1\" />\n </>\n )}\n\n {file ? (\n <div className=\"flex items-center gap-2 min-w-0 flex-1\">\n <span\n className=\"text-xs text-ink-muted truncate\"\n title={documentTitle ?? undefined}\n >\n {file.name}\n </span>\n <span className=\"text-xs text-ink-disabled shrink-0\">\n ({(file.size / 1024).toFixed(0)} KB)\n </span>\n {ann.annotations.length > 0 && (\n <span className=\"text-xs text-brand bg-brand-subtle border border-brand-light/40 px-2.5 py-1 rounded-full shrink-0 font-medium\">\n {ann.annotations.length} field\n {ann.annotations.length !== 1 ? \"s\" : \"\"}\n </span>\n )}\n {ann.unsignedCount > 0 && (\n <span className=\"text-xs text-warning-dark bg-warning/15 border border-warning/40 px-2.5 py-1 rounded-full shrink-0 font-medium\">\n {ann.unsignedCount} unsigned\n </span>\n )}\n </div>\n ) : (\n <span className=\"text-xs text-ink-muted flex-1\">\n {loading ? L.loadingDocument : L.noFileOpen}\n </span>\n )}\n\n {file && onComplete && !readOnly && (\n <button\n onClick={handleComplete}\n disabled={\n ann.annotations.length === 0 || ann.unsignedCount > 0 || sending\n }\n title={\n sending\n ? L.completeSending\n : ann.annotations.length === 0\n ? \"Add at least one field to complete\"\n : ann.unsignedCount > 0\n ? `${ann.unsignedCount} unsigned field${ann.unsignedCount !== 1 ? \"s\" : \"\"} remaining`\n : \"Complete and send\"\n }\n className=\"ml-auto shrink-0 flex items-center gap-2 text-xs font-medium bg-success hover:bg-success-dark active:bg-success-dark disabled:bg-surface-muted disabled:text-ink-disabled disabled:cursor-not-allowed text-white px-4 py-2 rounded-md transition-colors cursor-pointer\"\n >\n {sending ? (\n <SpinnerIcon className=\"w-3.5 h-3.5 animate-spin\" />\n ) : (\n <SendIcon className=\"w-3.5 h-3.5\" />\n )}\n {sending ? L.completeSending : L.completeButton}\n </button>\n )}\n\n {allowFileUpload && (\n <button\n onClick={() => fileInputRef.current?.click()}\n disabled={loading}\n className={`${file && onComplete && !readOnly ? \"\" : \"ml-auto \"}shrink-0 flex items-center gap-2 text-xs font-medium bg-brand hover:bg-brand-dark active:bg-brand-dark disabled:bg-surface-muted disabled:text-ink-disabled disabled:cursor-not-allowed text-white px-4 py-2 rounded-md transition-colors cursor-pointer`}\n >\n <UploadIcon className=\"w-3.5 h-3.5\" />\n {file ? L.changeFile : L.openFile}\n </button>\n )}\n\n {allowFileUpload && file && (\n <button\n onClick={clearFile}\n title=\"Close file\"\n className=\"shrink-0 w-9 h-9 flex items-center justify-center rounded-md text-ink-muted hover:text-ink hover:bg-surface-muted transition-colors cursor-pointer\"\n >\n <CloseIcon className=\"w-4 h-4\" />\n </button>\n )}\n\n {allowFileUpload && (\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"application/pdf\"\n onChange={handleFileChange}\n className=\"hidden\"\n />\n )}\n </header>\n\n <main className=\"flex-1 flex flex-col overflow-hidden\">\n {hasDoc ? (\n <div className=\"relative flex-1 min-h-0\">\n <PdfViewer\n fileBlob={file}\n fileUrl={file ? null : fileUrl}\n height=\"100%\"\n width=\"100%\"\n licenseKey={licenseKey}\n theme={theme}\n visibility={visibility}\n readOnly={readOnly}\n onError={(err) => {\n showSnackbar(L.renderError, \"error\");\n onError?.(err);\n }}\n />\n\n {!readOnly && (\n <AnnotationLayer\n annotations={ann.annotations}\n activeTool={ann.activeTool}\n pendingSignature={ann.pendingSignature}\n onPlace={ann.handlePlace}\n onDelete={ann.handleDelete}\n onMove={ann.handleMove}\n onResize={ann.handleResize}\n onTextChange={ann.handleTextChange}\n />\n )}\n\n {!readOnly && (\n <AnnotationToolbar\n activeTool={ann.activeTool}\n onToolSelect={ann.handleToolSelect}\n selectedStamp={ann.selectedStamp}\n onStampSelect={ann.setSelectedStamp}\n onUndo={ann.handleUndo}\n onClearAll={ann.handleClearAll}\n onSave={handleSave}\n count={ann.annotations.length}\n saveAlwaysEnabled={saveAlwaysEnabled}\n isSigned={isSigned}\n stamps={stamps}\n />\n )}\n\n {hint && (\n <div className=\"absolute bottom-6 left-1/2 -translate-x-1/2 z-20 bg-surface/95 backdrop-blur border border-stroke text-ink text-xs px-5 py-2.5 rounded-full shadow-md pointer-events-none whitespace-nowrap\">\n {hint}\n </div>\n )}\n </div>\n ) : loading ? (\n <div className=\"flex-1 flex flex-col items-center justify-center gap-3 p-6 bg-page\">\n <SpinnerIcon className=\"w-8 h-8 text-brand animate-spin\" />\n <p className=\"text-sm text-ink-muted\">{L.loadingDocument}</p>\n </div>\n ) : allowFileUpload ? (\n <EmptyState\n isDragging={isDragging}\n error={error ?? errorMessage}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onBrowse={() => fileInputRef.current?.click()}\n />\n ) : (\n <div className=\"flex-1 flex items-center justify-center p-6 bg-page\">\n <p className=\"text-sm text-ink-muted\">{L.noFileOpen}</p>\n </div>\n )}\n </main>\n\n {ann.showSignatureModal && (\n <SignatureModal\n onConfirm={ann.handleSignatureConfirm}\n onClose={() => ann.setShowSignatureModal(false)}\n />\n )}\n\n <Snackbar snackbar={snackbar} onDismiss={dismissSnackbar} />\n </div>\n );\n}\n"],"names":["embedded","_licenseSet","setLicenseOnce","key","GemBoxPdfViewer","PdfViewerInner","fileUrl","fileBlob","height","width","className","licenseKey","theme","readOnly","visibility","onLoad","onError","containerRef","useRef","viewerRef","onLoadRef","onErrorRef","pendingRef","loadError","setLoadError","useState","useEffect","viewer","cancelled","src","err","wrapper","el","vis","ui","toolbar","url","blob","msg","jsxs","jsx","PdfViewer","memo","TOOL","DEFAULT_STAMPS","DEFAULT_TEXT_W","DEFAULT_TEXT_H","DEFAULT_STAMP_TEXT_W","DEFAULT_STAMP_TEXT_H","DEFAULT_STAMP_IMG_W","DEFAULT_STAMP_IMG_H","STAMP_ROT_DEG","PLACE_CURSOR","_uid","uid","clampOrigin","n","size","findPageElementAt","clientX","clientY","findPageElementByIndex","pageIndex","AnnotationItem","ann","pos","onDelete","onDragStart","onResizeStart","onTextChange","editing","setEditing","textareaRef","startDrag","e","deleteBtn","resizeHandle","baseStyle","rad","cos","sin","stampFit","label","widthCap","widthBased","stampFontSize","AnnotationLayer","annotations","activeTool","pendingSignature","onPlace","onMove","onResize","overlayRef","draggingRef","annotationsRef","positionsRef","forceTick","previewPos","setPreviewPos","signaturePreviewActive","handleOverlayMouseMove","useCallback","overlay","rect","handleOverlayMouseLeave","hasAnnotations","raf","lastSig","tick","overlayRect","next","sig","pageEl","r","t","positions","handleClick","pageRect","normX","normY","handleDragStart","id","annScreenX","annScreenY","offsetX","offsetY","onMouseMove","ev","drag","cur","a","newAnnScreenX","newAnnScreenY","centerX","centerY","onMouseUp","handleResizeStart","pageW","pageH","startX","startY","startW","startH","maxW","maxH","minW","minH","newW","newH","PdfIcon","UploadIcon","CloseIcon","DropIcon","ErrorIcon","TextIcon","StampIcon","SignatureIcon","TrashIcon","UndoIcon","ImageIcon","SaveIcon","WarningIcon","CheckIcon","InfoIcon","SendIcon","SpinnerIcon","StampPicker","selected","onSelect","customStamps","onImageUpload","stamps","imgInputRef","isSelected","stamp","cs","ToolBtn","active","onClick","title","disabled","danger","primary","children","AnnotationToolbar","onToolSelect","selectedStamp","onStampSelect","onUndo","onClearAll","onSave","count","saveAlwaysEnabled","isSigned","showStampPicker","setShowStampPicker","setCustomStamps","toolbarRef","timer","handler","handleImageUpload","file","reader","prev","toggle","tool","v","SignatureModal","onConfirm","onClose","canvasRef","drawing","hasStroke","ctx","canvas","s","onDown","x","y","onUp","SNACKBAR_VARIANTS","Snackbar","snackbar","onDismiss","Icon","EmptyState","isDragging","error","onDrop","onDragOver","onDragLeave","onBrowse","useAnnotations","setAnnotations","setActiveTool","setSelectedStamp","showSignatureModal","setShowSignatureModal","setPendingSignature","handleToolSelect","handleSignatureConfirm","imageData","w","handlePlace","normW","normH","isImg","handleDelete","p","handleMove","handleResize","handleTextChange","content","handleUndo","handleClearAll","reset","onKey","unsignedCount","hint","hexToRgb01","hex","g","b","rgb","dataUrlToBytes","dataUrl","base64","binary","out","i","blobToBase64","resolve","reject","stripDataUrl","base64ToFile","filename","mimeType","bytes","makeUuid","h","bakeAnnotationsToBase64","pdfFile","pdfDoc","PDFDocument","pages","font","StandardFonts","page","pw","ph","fontSize","imgBytes","stampColor","textW","degrees","pngBytes","savedBytes","annotationsToFields","fields","value","DEFAULT_LABELS","PdfAnnotator","allowFileUpload","header","loading","documentTitle","errorMessage","labels","onFileChange","onComplete","L","setFile","setIsDragging","setError","sending","setSending","setSnackbar","fileInputRef","showSnackbar","message","severity","duration","dismissSnackbar","loadFile","f","clearFile","handleFileChange","handleDrop","handleDragOver","handleDragLeave","handleSave","handleComplete","hasDoc","Fragment"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:"Readex Pro", "Inter var", "Noto Sans Arabic", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-400:oklch(85.2% .199 91.936);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-black:900;--tracking-normal:0em;--tracking-widest:.1em;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-brand:#0877d0;--color-brand-dark:#005a9e;--color-brand-light:#71afe5;--color-brand-subtle:#daebf8;--color-page:#edf0f6;--color-surface:#fff;--color-surface-muted:#f3f3f3;--color-stroke:#e2e8f0;--color-ink:#111827;--color-ink-muted:#6b7280;--color-ink-disabled:#959ca9;--color-danger:#f44336;--color-danger-dark:#b71c1c;--color-success:#4caf50;--color-success-dark:#388e3c;--color-warning:#ff9800;--color-warning-dark:#e65100}}@layer base,components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.-top-2\.5{top:calc(var(--spacing) * -2.5)}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.-right-1{right:calc(var(--spacing) * -1)}.-right-2\.5{right:calc(var(--spacing) * -2.5)}.right-3{right:calc(var(--spacing) * 3)}.right-6{right:calc(var(--spacing) * 6)}.right-11{right:calc(var(--spacing) * 11)}.-bottom-1{bottom:calc(var(--spacing) * -1)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-1\/2{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-8{max-height:calc(var(--spacing) * 8)}.max-h-40{max-height:calc(var(--spacing) * 40)}.min-h-0{min-height:0}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-4\.5{width:calc(var(--spacing) * 4.5)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-16{width:calc(var(--spacing) * 16)}.w-32{width:calc(var(--spacing) * 32)}.w-64{width:calc(var(--spacing) * 64)}.w-80{width:calc(var(--spacing) * 80)}.w-130{width:calc(var(--spacing) * 130)}.w-full{width:100%}.w-px{width:1px}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-\[95vw\]{max-width:95vw}.max-w-fit{max-width:fit-content}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.flex-1{flex:1}.flex-auto{flex:auto}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-105{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-\[1\.02\]{scale:1.02}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[3px\]{border-style:var(--tw-border-style);border-width:3px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-brand{border-color:var(--color-brand)}.border-brand-light\/40{border-color:#71afe566}@supports (color:color-mix(in lab,red,red)){.border-brand-light\/40{border-color:color-mix(in oklab,var(--color-brand-light) 40%,transparent)}}.border-danger\/30{border-color:#f443364d}@supports (color:color-mix(in lab,red,red)){.border-danger\/30{border-color:color-mix(in oklab,var(--color-danger) 30%,transparent)}}.border-stroke{border-color:var(--color-stroke)}.border-warning\/40{border-color:#ff980066}@supports (color:color-mix(in lab,red,red)){.border-warning\/40{border-color:color-mix(in oklab,var(--color-warning) 40%,transparent)}}.border-white{border-color:var(--color-white)}.border-yellow-400{border-color:var(--color-yellow-400)}.bg-brand{background-color:var(--color-brand)}.bg-brand-subtle{background-color:var(--color-brand-subtle)}.bg-danger{background-color:var(--color-danger)}.bg-danger\/10{background-color:#f443361a}@supports (color:color-mix(in lab,red,red)){.bg-danger\/10{background-color:color-mix(in oklab,var(--color-danger) 10%,transparent)}}.bg-ink\/40{background-color:#11182766}@supports (color:color-mix(in lab,red,red)){.bg-ink\/40{background-color:color-mix(in oklab,var(--color-ink) 40%,transparent)}}.bg-page{background-color:var(--color-page)}.bg-stroke{background-color:var(--color-stroke)}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-muted{background-color:var(--color-surface-muted)}.bg-surface\/95{background-color:#fffffff2}@supports (color:color-mix(in lab,red,red)){.bg-surface\/95{background-color:color-mix(in oklab,var(--color-surface) 95%,transparent)}}.bg-warning\/15{background-color:#ff980026}@supports (color:color-mix(in lab,red,red)){.bg-warning\/15{background-color:color-mix(in oklab,var(--color-warning) 15%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-12{padding:calc(var(--spacing) * 12)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-\[2\.5px\]{padding-block:2.5px}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.wrap-break-word{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#424242\]{color:#424242}.text-brand{color:var(--color-brand)}.text-danger{color:var(--color-danger)}.text-danger-dark{color:var(--color-danger-dark)}.text-ink{color:var(--color-ink)}.text-ink-disabled{color:var(--color-ink-disabled)}.text-ink-muted{color:var(--color-ink-muted)}.text-success{color:var(--color-success)}.text-warning-dark{color:var(--color-warning-dark)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-current{--tw-ring-color:currentcolor}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-surface{--tw-ring-offset-color:var(--color-surface)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:scale-\[1\.03\]:hover{scale:1.03}.hover\:border-brand:hover{border-color:var(--color-brand)}.hover\:border-ink-muted:hover{border-color:var(--color-ink-muted)}.hover\:bg-brand-dark:hover{background-color:var(--color-brand-dark)}.hover\:bg-brand-subtle:hover{background-color:var(--color-brand-subtle)}.hover\:bg-danger\/10:hover{background-color:#f443361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-danger\/10:hover{background-color:color-mix(in oklab,var(--color-danger) 10%,transparent)}}.hover\:bg-ink\/10:hover{background-color:#1118271a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-ink\/10:hover{background-color:color-mix(in oklab,var(--color-ink) 10%,transparent)}}.hover\:bg-success-dark:hover{background-color:var(--color-success-dark)}.hover\:bg-success\/10:hover{background-color:#4caf501a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-success\/10:hover{background-color:color-mix(in oklab,var(--color-success) 10%,transparent)}}.hover\:bg-surface-muted:hover{background-color:var(--color-surface-muted)}.hover\:text-brand:hover{color:var(--color-brand)}.hover\:text-brand-dark:hover{color:var(--color-brand-dark)}.hover\:text-danger:hover{color:var(--color-danger)}.hover\:text-ink:hover{color:var(--color-ink)}.hover\:text-success-dark:hover{color:var(--color-success-dark)}.hover\:opacity-100:hover{opacity:1}}.active\:bg-brand-dark:active{background-color:var(--color-brand-dark)}.active\:bg-success-dark:active{background-color:var(--color-success-dark)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-surface-muted:disabled{background-color:var(--color-surface-muted)}.disabled\:text-ink-disabled:disabled{color:var(--color-ink-disabled)}.disabled\:opacity-25:disabled{opacity:.25}.rtl\:right-auto:where(:dir(rtl),[dir=rtl],[dir=rtl] *){right:auto}.rtl\:left-6:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:calc(var(--spacing) * 6)}.rtl\:mr-0:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-right:0}.rtl\:ml-2:where(:dir(rtl),[dir=rtl],[dir=rtl] *){margin-left:calc(var(--spacing) * 2)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}