react-web-pdf-editor 0.1.3 → 0.1.5
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/README.md +21 -5
- package/dist/index.cjs +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/drawPaths.ts","../src/lib/geometry.ts","../src/lib/textLayout.ts","../src/lib/exportPdf.ts","../src/configureWorker.ts","../src/components/HighlightToolbar.tsx","../src/lib/imageUpload.ts","../src/components/icons.tsx","../src/components/ImageModal.tsx","../src/components/ImageToolbar.tsx","../src/components/InkToolbar.tsx","../src/components/DrawLayer.tsx","../src/components/HighlightLayer.tsx","../src/lib/highlightRects.ts","../src/components/ImageBox.tsx","../src/components/SignatureBox.tsx","../src/lib/contentEditableText.ts","../src/components/TextBox.tsx","../src/components/PdfPage.tsx","../src/components/ThumbnailOverlay.tsx","../src/components/PageThumbnail.tsx","../src/components/PagesSidebar.tsx","../src/components/PropertiesPanel.tsx","../src/lib/signatureImage.ts","../src/components/SignaturePad.tsx","../src/components/SignatureTypePreview.tsx","../src/components/SignatureModal.tsx","../src/components/SignatureToolbar.tsx","../src/components/Toolbar.tsx","../src/hooks/useCompactLayout.ts","../src/hooks/useDrawStrokes.ts","../src/hooks/useEditorHistory.ts","../src/lib/rasterizeTextAnnotation.ts","../src/lib/runExportPdf.ts","../src/hooks/useExportPdf.ts","../src/hooks/useHighlights.ts","../src/hooks/useImages.ts","../src/hooks/usePdfDocument.ts","../src/lib/findTextMatches.ts","../src/hooks/usePdfTextSearch.ts","../src/hooks/useSignatures.ts","../src/hooks/useTextAnnotations.ts","../src/lib/deletePage.ts","../src/lib/historyShortcuts.ts","../src/lib/insertBlankPage.ts","../src/lib/movePage.ts","../src/lib/pageOrder.ts","../src/PdfEditor.tsx"],"names":["rgb","StandardFonts","drawStroke","LineCapStyle","degrees","PDFDocument","version","GlobalWorkerOptions","jsx","jsxs","useRef","useState","useEffect","SWATCHES","handlePointerMove","clamp01","MIN_MOVE_PX","pointFromEvent","selected","deltaX","deltaY","Fragment","HANDLES","MIN_BOX_PX","clamp","setLayerDimensions","TextLayer","memo","deletePage","useMemo","distance","useCallback","MAX_UPLOAD_BYTES","MAX_IMAGE_EDGE","fitWithin","measureDataUrl","forwardRef","SignaturePad","useImperativeHandle","Icon","useLayoutEffect","createId","last","exportPdfBytes","getDocument","prev","nextPage","page","name"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DrawPoint } from \"../types\";\r\n\r\nconst MIN_POINT_GAP = 0.002;\r\nconst SIMPLIFY_EPSILON = 0.003;\r\n\r\nfunction distance(a: DrawPoint, b: DrawPoint) {\r\n return Math.hypot(b.x - a.x, b.y - a.y);\r\n}\r\n\r\nexport function pathLength(points: DrawPoint[]) {\r\n let length = 0;\r\n for (let index = 1; index < points.length; index += 1) {\r\n length += distance(points[index - 1], points[index]);\r\n }\r\n return length;\r\n}\r\n\r\nexport function appendPoint(points: DrawPoint[], next: DrawPoint): DrawPoint[] {\r\n const last = points[points.length - 1];\r\n if (last && distance(last, next) < MIN_POINT_GAP) {\r\n return points;\r\n }\r\n return [...points, next];\r\n}\r\n\r\nfunction pointToSegmentDistance(point: DrawPoint, start: DrawPoint, end: DrawPoint) {\r\n const dx = end.x - start.x;\r\n const dy = end.y - start.y;\r\n const lengthSq = dx * dx + dy * dy;\r\n\r\n if (lengthSq === 0) {\r\n return distance(point, start);\r\n }\r\n\r\n const t = Math.max(\r\n 0,\r\n Math.min(1, ((point.x - start.x) * dx + (point.y - start.y) * dy) / lengthSq),\r\n );\r\n\r\n return Math.hypot(point.x - (start.x + t * dx), point.y - (start.y + t * dy));\r\n}\r\n\r\nexport function simplifyPoints(points: DrawPoint[], epsilon = SIMPLIFY_EPSILON): DrawPoint[] {\r\n if (points.length <= 2) {\r\n return points;\r\n }\r\n\r\n let maxDistance = 0;\r\n let maxIndex = 0;\r\n const first = points[0];\r\n const last = points[points.length - 1];\r\n\r\n for (let index = 1; index < points.length - 1; index += 1) {\r\n const current = pointToSegmentDistance(points[index], first, last);\r\n if (current > maxDistance) {\r\n maxDistance = current;\r\n maxIndex = index;\r\n }\r\n }\r\n\r\n if (maxDistance <= epsilon) {\r\n return [first, last];\r\n }\r\n\r\n const left = simplifyPoints(points.slice(0, maxIndex + 1), epsilon);\r\n const right = simplifyPoints(points.slice(maxIndex), epsilon);\r\n return [...left.slice(0, -1), ...right];\r\n}\r\n\r\nfunction formatCoord(value: number) {\r\n return value.toFixed(4);\r\n}\r\n\r\nexport function pointsToSvgPath(points: DrawPoint[]): string {\r\n if (points.length === 0) {\r\n return \"\";\r\n }\r\n\r\n const first = points[0];\r\n if (points.length === 1) {\r\n const x = formatCoord(first.x);\r\n const y = formatCoord(first.y);\r\n return `M ${x} ${y} L ${x} ${y}`;\r\n }\r\n\r\n if (points.length === 2) {\r\n const second = points[1];\r\n return `M ${formatCoord(first.x)} ${formatCoord(first.y)} L ${formatCoord(second.x)} ${formatCoord(second.y)}`;\r\n }\r\n\r\n let path = `M ${formatCoord(first.x)} ${formatCoord(first.y)}`;\r\n\r\n for (let index = 1; index < points.length - 1; index += 1) {\r\n const current = points[index];\r\n const next = points[index + 1];\r\n const midX = (current.x + next.x) / 2;\r\n const midY = (current.y + next.y) / 2;\r\n path += ` Q ${formatCoord(current.x)} ${formatCoord(current.y)} ${formatCoord(midX)} ${formatCoord(midY)}`;\r\n }\r\n\r\n const last = points[points.length - 1];\r\n path += ` T ${formatCoord(last.x)} ${formatCoord(last.y)}`;\r\n return path;\r\n}\r\n\r\nexport function translatePoints(points: DrawPoint[], dx: number, dy: number): DrawPoint[] {\r\n if (dx === 0 && dy === 0) {\r\n return points;\r\n }\r\n\r\n return points.map((point) => ({\r\n x: point.x + dx,\r\n y: point.y + dy,\r\n }));\r\n}\r\n\r\nexport function strokeBounds(points: DrawPoint[], pad = 0) {\r\n let minX = 1;\r\n let minY = 1;\r\n let maxX = 0;\r\n let maxY = 0;\r\n\r\n for (const point of points) {\r\n minX = Math.min(minX, point.x);\r\n minY = Math.min(minY, point.y);\r\n maxX = Math.max(maxX, point.x);\r\n maxY = Math.max(maxY, point.y);\r\n }\r\n\r\n return {\r\n left: Math.max(0, minX - pad),\r\n top: Math.max(0, minY - pad),\r\n width: Math.min(1, maxX + pad) - Math.max(0, minX - pad),\r\n height: Math.min(1, maxY + pad) - Math.max(0, minY - pad),\r\n };\r\n}\r\n\r\nexport function hitTestStroke(points: DrawPoint[], point: DrawPoint, threshold: number) {\r\n if (points.length === 0) {\r\n return false;\r\n }\r\n\r\n if (points.length === 1) {\r\n return distance(points[0], point) <= threshold;\r\n }\r\n\r\n for (let index = 1; index < points.length; index += 1) {\r\n if (pointToSegmentDistance(point, points[index - 1], points[index]) <= threshold) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n","export function normalizeDegrees(angle: number): number {\r\n return ((angle % 360) + 360) % 360;\r\n}\r\n\r\nexport function snapDegrees(angle: number, increment: number): number {\r\n return Math.round(angle / increment) * increment;\r\n}\r\n\r\nexport function pointerDeltaToLocal(\r\n deltaX: number,\r\n deltaY: number,\r\n rotationDeg: number,\r\n): { x: number; y: number } {\r\n const rad = (rotationDeg * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n return {\r\n x: deltaX * cos + deltaY * sin,\r\n y: -deltaX * sin + deltaY * cos,\r\n };\r\n}\r\n\r\nexport function angleDeltaDegrees(\r\n centerX: number,\r\n centerY: number,\r\n fromX: number,\r\n fromY: number,\r\n toX: number,\r\n toY: number,\r\n): number {\r\n const from = Math.atan2(fromY - centerY, fromX - centerX);\r\n const to = Math.atan2(toY - centerY, toX - centerX);\r\n return ((to - from) * 180) / Math.PI;\r\n}\r\n\r\nexport function rotatePoint(\r\n x: number,\r\n y: number,\r\n cx: number,\r\n cy: number,\r\n angleDeg: number,\r\n): { x: number; y: number } {\r\n const rad = (angleDeg * Math.PI) / 180;\r\n const dx = x - cx;\r\n const dy = y - cy;\r\n return {\r\n x: cx + dx * Math.cos(rad) - dy * Math.sin(rad),\r\n y: cy + dx * Math.sin(rad) + dy * Math.cos(rad),\r\n };\r\n}\r\n\r\nexport function clampBoxTranslation(\r\n bounds: { left: number; top: number; width: number; height: number },\r\n dx: number,\r\n dy: number,\r\n) {\r\n return {\r\n dx: Math.min(Math.max(dx, -bounds.left), 1 - (bounds.left + bounds.width)),\r\n dy: Math.min(Math.max(dy, -bounds.top), 1 - (bounds.top + bounds.height)),\r\n };\r\n}\r\n\r\n/** CSS clockwise rotation around center → PDF draw origin (y-up) and PDF angle. */\r\nexport function cssBoxToPdfDrawOrigin(\r\n left: number,\r\n top: number,\r\n width: number,\r\n height: number,\r\n visualHeight: number,\r\n cssRotation: number,\r\n): { x: number; y: number; angle: number } {\r\n const angle = -cssRotation;\r\n const rad = (angle * Math.PI) / 180;\r\n const centerX = left + width / 2;\r\n const centerY = visualHeight - top - height / 2;\r\n const hx = width / 2;\r\n const hy = height / 2;\r\n\r\n return {\r\n x: centerX - (hx * Math.cos(rad) - hy * Math.sin(rad)),\r\n y: centerY - (hx * Math.sin(rad) + hy * Math.cos(rad)),\r\n angle,\r\n };\r\n}\r\n","export const TEXT_PADDING_X = 8;\r\nexport const TEXT_PADDING_Y = 4;\r\nexport const TEXT_LINE_HEIGHT = 1.25;\r\n\r\nexport function normalizeTextNewlines(text: string): string {\r\n return text.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\r\n}\r\n\r\nexport function wrapMeasuredLines(\r\n text: string,\r\n measure: (value: string) => number,\r\n maxWidth?: number,\r\n): string[] {\r\n const paragraphs = normalizeTextNewlines(text).split(\"\\n\");\r\n\r\n if (maxWidth === undefined || maxWidth <= 0) {\r\n return paragraphs;\r\n }\r\n\r\n const lines: string[] = [];\r\n\r\n for (const paragraph of paragraphs) {\r\n if (paragraph === \"\") {\r\n lines.push(\"\");\r\n continue;\r\n }\r\n\r\n const tokens = paragraph.split(/(\\s+)/);\r\n let current = \"\";\r\n\r\n const pushCurrent = () => {\r\n if (current !== \"\") {\r\n lines.push(current);\r\n current = \"\";\r\n }\r\n };\r\n\r\n const appendBroken = (token: string) => {\r\n let chunk = \"\";\r\n for (const char of token) {\r\n const trial = chunk + char;\r\n if (chunk && measure(trial) > maxWidth) {\r\n lines.push(chunk);\r\n chunk = char;\r\n } else {\r\n chunk = trial;\r\n }\r\n }\r\n current = chunk;\r\n };\r\n\r\n for (const token of tokens) {\r\n if (!token) {\r\n continue;\r\n }\r\n\r\n const next = current + token;\r\n if (measure(next) <= maxWidth || current === \"\") {\r\n if (current === \"\" && measure(token) > maxWidth) {\r\n appendBroken(token);\r\n continue;\r\n }\r\n current = next;\r\n continue;\r\n }\r\n\r\n pushCurrent();\r\n if (measure(token) > maxWidth) {\r\n appendBroken(token);\r\n } else {\r\n current = /^\\s+$/.test(token) ? \"\" : token;\r\n }\r\n }\r\n\r\n pushCurrent();\r\n }\r\n\r\n return lines;\r\n}\r\n\r\nexport function textBoxFontCss(annotation: {\r\n fontStyle: string;\r\n fontWeight: string;\r\n fontSize: number;\r\n fontFamily: string;\r\n}): string {\r\n return `${annotation.fontStyle} ${annotation.fontWeight} ${annotation.fontSize}px \"${annotation.fontFamily}\", sans-serif`;\r\n}\r\n","import {\r\n degrees,\r\n LineCapStyle,\r\n PDFDocument,\r\n rgb,\r\n StandardFonts,\r\n type PDFFont,\r\n type PDFImage,\r\n type PDFPage,\r\n} from \"pdf-lib\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\nimport { pointsToSvgPath } from \"./drawPaths\";\r\nimport { cssBoxToPdfDrawOrigin, rotatePoint } from \"./geometry\";\r\nimport {\r\n TEXT_LINE_HEIGHT,\r\n TEXT_PADDING_X,\r\n TEXT_PADDING_Y,\r\n wrapMeasuredLines,\r\n} from \"./textLayout\";\r\n\r\nconst WINANSI_REPLACEMENTS: Record<string, string> = {\r\n \"\\u2018\": \"'\",\r\n \"\\u2019\": \"'\",\r\n \"\\u201C\": '\"',\r\n \"\\u201D\": '\"',\r\n \"\\u2013\": \"-\",\r\n \"\\u2014\": \"-\",\r\n \"\\u2026\": \"...\",\r\n \"\\u00A0\": \" \",\r\n};\r\n\r\nexport type ExportWorkerRequest = {\r\n type: \"export\";\r\n pdfBytes: ArrayBuffer;\r\n annotations: TextAnnotation[];\r\n drawings?: DrawStroke[];\r\n highlights?: HighlightAnnotation[];\r\n signatures?: SignatureAnnotation[];\r\n images?: ImageAnnotation[];\r\n};\r\n\r\nexport type ExportWorkerResponse =\r\n | { type: \"success\"; pdfBytes: ArrayBuffer }\r\n | { type: \"error\"; message: string };\r\n\r\nfunction parseColor(value: string) {\r\n const hex = value.trim().replace(\"#\", \"\");\r\n const normalized =\r\n hex.length === 3\r\n ? hex\r\n .split(\"\")\r\n .map((part) => part + part)\r\n .join(\"\")\r\n : hex.padEnd(6, \"0\").slice(0, 6);\r\n const red = Number.parseInt(normalized.slice(0, 2), 16);\r\n const green = Number.parseInt(normalized.slice(2, 4), 16);\r\n const blue = Number.parseInt(normalized.slice(4, 6), 16);\r\n\r\n return rgb(\r\n (Number.isFinite(red) ? red : 0) / 255,\r\n (Number.isFinite(green) ? green : 0) / 255,\r\n (Number.isFinite(blue) ? blue : 0) / 255,\r\n );\r\n}\r\n\r\nfunction resolveStandardFont(\r\n family: string,\r\n weight: TextAnnotation[\"fontWeight\"],\r\n style: TextAnnotation[\"fontStyle\"],\r\n): StandardFonts {\r\n const isBold = weight === \"bold\";\r\n const isItalic = style === \"italic\";\r\n const lower = family.toLowerCase();\r\n const isTimes = lower.includes(\"times\") || lower.includes(\"georgia\");\r\n const isCourier = lower.includes(\"courier\");\r\n\r\n if (isTimes) {\r\n if (isBold && isItalic) return StandardFonts.TimesRomanBoldItalic;\r\n if (isBold) return StandardFonts.TimesRomanBold;\r\n if (isItalic) return StandardFonts.TimesRomanItalic;\r\n return StandardFonts.TimesRoman;\r\n }\r\n\r\n if (isCourier) {\r\n if (isBold && isItalic) return StandardFonts.CourierBoldOblique;\r\n if (isBold) return StandardFonts.CourierBold;\r\n if (isItalic) return StandardFonts.CourierOblique;\r\n return StandardFonts.Courier;\r\n }\r\n\r\n if (isBold && isItalic) return StandardFonts.HelveticaBoldOblique;\r\n if (isBold) return StandardFonts.HelveticaBold;\r\n if (isItalic) return StandardFonts.HelveticaOblique;\r\n return StandardFonts.Helvetica;\r\n}\r\n\r\nfunction toWinAnsi(text: string): string {\r\n let result = \"\";\r\n\r\n for (const char of text) {\r\n if (char === \"\\t\") {\r\n result += \" \";\r\n continue;\r\n }\r\n\r\n if (char === \"\\n\") {\r\n result += \"\\n\";\r\n continue;\r\n }\r\n\r\n if (char === \"\\r\") {\r\n continue;\r\n }\r\n\r\n const replacement = WINANSI_REPLACEMENTS[char];\r\n if (replacement) {\r\n result += replacement;\r\n continue;\r\n }\r\n\r\n const code = char.charCodeAt(0);\r\n if (code < 32) {\r\n continue;\r\n }\r\n\r\n result += code <= 255 ? char : \"?\";\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction wrapText(\r\n text: string,\r\n font: PDFFont,\r\n fontSize: number,\r\n maxWidth?: number,\r\n): string[] {\r\n return wrapMeasuredLines(\r\n toWinAnsi(text),\r\n (value) => font.widthOfTextAtSize(value, fontSize),\r\n maxWidth,\r\n );\r\n}\r\n\r\nfunction normalizeRotation(angle: number): number {\r\n return ((angle % 360) + 360) % 360;\r\n}\r\n\r\nfunction getVisualSize(page: PDFPage): { width: number; height: number } {\r\n const { width, height } = page.getSize();\r\n const rotation = normalizeRotation(page.getRotation().angle);\r\n if (rotation === 90 || rotation === 270) {\r\n return { width: height, height: width };\r\n }\r\n return { width, height };\r\n}\r\n\r\nfunction visualToPdf(\r\n page: PDFPage,\r\n visualX: number,\r\n visualYFromBottom: number,\r\n): { x: number; y: number } {\r\n const { width, height } = page.getSize();\r\n const rotation = normalizeRotation(page.getRotation().angle);\r\n\r\n switch (rotation) {\r\n case 90:\r\n return { x: width - visualYFromBottom, y: visualX };\r\n case 180:\r\n return { x: width - visualX, y: height - visualYFromBottom };\r\n case 270:\r\n return { x: visualYFromBottom, y: height - visualX };\r\n default:\r\n return { x: visualX, y: visualYFromBottom };\r\n }\r\n}\r\n\r\nconst HIGHLIGHT_OPACITY = 0.38;\r\n\r\nfunction drawHighlight(page: PDFPage, highlight: HighlightAnnotation) {\r\n const visual = getVisualSize(page);\r\n const color = parseColor(highlight.color);\r\n\r\n for (const rect of highlight.rects) {\r\n const left = rect.left * visual.width;\r\n const top = rect.top * visual.height;\r\n const width = rect.width * visual.width;\r\n const height = rect.height * visual.height;\r\n const corners = [\r\n visualToPdf(page, left, visual.height - top),\r\n visualToPdf(page, left + width, visual.height - top),\r\n visualToPdf(page, left, visual.height - top - height),\r\n visualToPdf(page, left + width, visual.height - top - height),\r\n ];\r\n const xs = corners.map((corner) => corner.x);\r\n const ys = corners.map((corner) => corner.y);\r\n const x = Math.min(...xs);\r\n const y = Math.min(...ys);\r\n\r\n page.drawRectangle({\r\n x,\r\n y,\r\n width: Math.max(0, Math.max(...xs) - x),\r\n height: Math.max(0, Math.max(...ys) - y),\r\n color,\r\n opacity: HIGHLIGHT_OPACITY,\r\n borderWidth: 0,\r\n });\r\n }\r\n}\r\n\r\nfunction drawStroke(page: PDFPage, stroke: DrawStroke) {\r\n if (stroke.points.length === 0) {\r\n return;\r\n }\r\n\r\n const visual = getVisualSize(page);\r\n const pdfPoints = stroke.points.map((point) => {\r\n const visualX = point.x * visual.width;\r\n const visualYFromTop = point.y * visual.height;\r\n const pdfPoint = visualToPdf(page, visualX, visual.height - visualYFromTop);\r\n return { x: pdfPoint.x, y: -pdfPoint.y };\r\n });\r\n\r\n const path = pointsToSvgPath(pdfPoints);\r\n if (!path) {\r\n return;\r\n }\r\n\r\n page.drawSvgPath(path, {\r\n x: 0,\r\n y: 0,\r\n borderColor: parseColor(stroke.color),\r\n borderWidth: stroke.width,\r\n borderLineCap: LineCapStyle.Round,\r\n });\r\n}\r\n\r\nfunction dataUrlToBytes(dataUrl: string): Uint8Array {\r\n const comma = dataUrl.indexOf(\",\");\r\n const base64 = comma >= 0 ? dataUrl.slice(comma + 1) : dataUrl;\r\n const binary = atob(base64);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let index = 0; index < binary.length; index += 1) {\r\n bytes[index] = binary.charCodeAt(index);\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction dataUrlKind(src: string): \"png\" | \"jpg\" {\r\n if (src.startsWith(\"data:image/jpeg\") || src.startsWith(\"data:image/jpg\")) {\r\n return \"jpg\";\r\n }\r\n return \"png\";\r\n}\r\n\r\nfunction drawPlacedImage(\r\n page: PDFPage,\r\n box: {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n rotation?: number;\r\n opacity?: number;\r\n },\r\n image: PDFImage,\r\n) {\r\n const visual = getVisualSize(page);\r\n const left = box.x * visual.width;\r\n const top = box.y * visual.height;\r\n const width = box.width * visual.width;\r\n const height = box.height * visual.height;\r\n const pageRotation = normalizeRotation(page.getRotation().angle);\r\n const origin = cssBoxToPdfDrawOrigin(\r\n left,\r\n top,\r\n width,\r\n height,\r\n visual.height,\r\n box.rotation ?? 0,\r\n );\r\n const point = visualToPdf(page, origin.x, origin.y);\r\n\r\n page.drawImage(image, {\r\n x: point.x,\r\n y: point.y,\r\n width,\r\n height,\r\n rotate: degrees(normalizeRotation(pageRotation + origin.angle)),\r\n opacity: box.opacity ?? 1,\r\n });\r\n}\r\n\r\nfunction drawAnnotation(\r\n page: PDFPage,\r\n annotation: TextAnnotation,\r\n font: PDFFont,\r\n) {\r\n if (!annotation.text) {\r\n return;\r\n }\r\n\r\n const visual = getVisualSize(page);\r\n const boxLeft = annotation.x * visual.width;\r\n const boxTop = annotation.y * visual.height;\r\n const boxWidth =\r\n annotation.width !== undefined ? annotation.width * visual.width : undefined;\r\n const maxTextWidth =\r\n boxWidth !== undefined ? Math.max(0, boxWidth - TEXT_PADDING_X * 2) : undefined;\r\n const lines = wrapText(\r\n annotation.text,\r\n font,\r\n annotation.fontSize,\r\n maxTextWidth,\r\n );\r\n const color = parseColor(annotation.color);\r\n const pageRotation = normalizeRotation(page.getRotation().angle);\r\n const cssRotation = annotation.rotation ?? 0;\r\n const pdfAngle = -cssRotation;\r\n const resolvedWidth =\r\n boxWidth ??\r\n Math.max(\r\n ...lines.map((line) => (line ? font.widthOfTextAtSize(line, annotation.fontSize) : 0)),\r\n 0,\r\n ) +\r\n TEXT_PADDING_X * 2;\r\n const lineBox = annotation.fontSize * TEXT_LINE_HEIGHT;\r\n const resolvedHeight =\r\n annotation.height !== undefined\r\n ? annotation.height * visual.height\r\n : TEXT_PADDING_Y * 2 + Math.max(lines.length, 1) * lineBox;\r\n const ascent = font.heightAtSize(annotation.fontSize, { descender: false });\r\n const fontHeight = font.heightAtSize(annotation.fontSize);\r\n const halfLeading = (lineBox - fontHeight) / 2;\r\n const centerX = boxLeft + resolvedWidth / 2;\r\n const centerY = visual.height - boxTop - resolvedHeight / 2;\r\n\r\n lines.forEach((line, index) => {\r\n const lineWidth = line ? font.widthOfTextAtSize(line, annotation.fontSize) : 0;\r\n let textX = boxLeft + TEXT_PADDING_X;\r\n\r\n if (boxWidth !== undefined) {\r\n if (annotation.textAlign === \"center\") {\r\n textX = boxLeft + (boxWidth - lineWidth) / 2;\r\n } else if (annotation.textAlign === \"right\") {\r\n textX = boxLeft + boxWidth - TEXT_PADDING_X - lineWidth;\r\n }\r\n }\r\n\r\n const lineTop = TEXT_PADDING_Y + index * lineBox;\r\n if (lineTop + lineBox > resolvedHeight + 0.5) {\r\n return;\r\n }\r\n\r\n const textTop = boxTop + lineTop + halfLeading + ascent;\r\n const origin = rotatePoint(\r\n textX,\r\n visual.height - textTop,\r\n centerX,\r\n centerY,\r\n pdfAngle,\r\n );\r\n const point = visualToPdf(page, origin.x, origin.y);\r\n\r\n if (!line) {\r\n return;\r\n }\r\n\r\n page.drawText(line, {\r\n x: point.x,\r\n y: point.y,\r\n size: annotation.fontSize,\r\n font,\r\n color,\r\n rotate: degrees(normalizeRotation(pageRotation + pdfAngle)),\r\n });\r\n });\r\n}\r\n\r\nexport async function exportPdfBytes(\r\n pdfBytes: Uint8Array,\r\n annotations: TextAnnotation[],\r\n drawings: DrawStroke[] = [],\r\n highlights: HighlightAnnotation[] = [],\r\n signatures: SignatureAnnotation[] = [],\r\n images: ImageAnnotation[] = [],\r\n): Promise<Uint8Array> {\r\n if (\r\n annotations.length === 0 &&\r\n drawings.length === 0 &&\r\n highlights.length === 0 &&\r\n signatures.length === 0 &&\r\n images.length === 0\r\n ) {\r\n return pdfBytes.slice();\r\n }\r\n\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const fontCache = new Map<StandardFonts, PDFFont>();\r\n\r\n const embedFont = async (key: StandardFonts) => {\r\n const cached = fontCache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const font = await pdf.embedFont(key);\r\n fontCache.set(key, font);\r\n return font;\r\n };\r\n\r\n const pageCount = pdf.getPageCount();\r\n\r\n for (const highlight of highlights) {\r\n if (highlight.pageNumber < 1 || highlight.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n drawHighlight(pdf.getPage(highlight.pageNumber - 1), highlight);\r\n }\r\n\r\n for (const annotation of annotations) {\r\n if (annotation.pageNumber < 1 || annotation.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const page = pdf.getPage(annotation.pageNumber - 1);\r\n const fontKey = resolveStandardFont(\r\n annotation.fontFamily,\r\n annotation.fontWeight,\r\n annotation.fontStyle,\r\n );\r\n const font = await embedFont(fontKey);\r\n drawAnnotation(page, annotation, font);\r\n }\r\n\r\n for (const stroke of drawings) {\r\n if (stroke.pageNumber < 1 || stroke.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const page = pdf.getPage(stroke.pageNumber - 1);\r\n drawStroke(page, stroke);\r\n }\r\n\r\n const imageCache = new Map<string, PDFImage>();\r\n\r\n const embedPlacedImage = async (src: string) => {\r\n const cached = imageCache.get(src);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const bytes = dataUrlToBytes(src);\r\n const image =\r\n dataUrlKind(src) === \"jpg\" ? await pdf.embedJpg(bytes) : await pdf.embedPng(bytes);\r\n imageCache.set(src, image);\r\n return image;\r\n };\r\n\r\n for (const signature of signatures) {\r\n if (signature.pageNumber < 1 || signature.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const image = await embedPlacedImage(signature.src);\r\n drawPlacedImage(pdf.getPage(signature.pageNumber - 1), signature, image);\r\n }\r\n\r\n for (const placed of images) {\r\n if (placed.pageNumber < 1 || placed.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const image = await embedPlacedImage(placed.src);\r\n drawPlacedImage(pdf.getPage(placed.pageNumber - 1), placed, image);\r\n }\r\n\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","import { GlobalWorkerOptions, version } from \"pdfjs-dist\";\r\n\r\nconst DEFAULT_WORKER_SRC = `https://unpkg.com/pdfjs-dist@${version}/build/pdf.worker.min.mjs`;\r\n\r\nexport function configurePdfWorker(workerSrc?: string): void {\r\n GlobalWorkerOptions.workerSrc = workerSrc ?? DEFAULT_WORKER_SRC;\r\n}\r\n","const SWATCHES = [\"#facc15\", \"#4ade80\", \"#38bdf8\", \"#f472b6\", \"#fb923c\"] as const;\r\n\r\ntype HighlightToolbarProps = {\r\n color: string;\r\n onColorChange: (color: string) => void;\r\n};\r\n\r\nfunction sameColor(a: string, b: string) {\r\n return a.toLowerCase() === b.toLowerCase();\r\n}\r\n\r\nexport function HighlightToolbar({ color, onColorChange }: HighlightToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar rpe-highlight-toolbar\" role=\"toolbar\" aria-label=\"Highlight tools\">\r\n <div className=\"rpe-ink-swatches\">\r\n {SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${sameColor(color, swatch) ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={sameColor(color, swatch)}\r\n onClick={() => onColorChange(swatch)}\r\n />\r\n ))}\r\n <label className=\"rpe-ink-picker\" title=\"Custom color\">\r\n <span className=\"rpe-ink-picker-chip\" style={{ background: color }} />\r\n <input\r\n type=\"color\"\r\n value={color}\r\n aria-label=\"Custom highlight color\"\r\n onChange={(event) => onColorChange(event.target.value)}\r\n />\r\n </label>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { PendingImage } from \"../types\";\r\n\r\nconst MAX_UPLOAD_BYTES = 8 * 1024 * 1024;\r\nconst MAX_IMAGE_EDGE = 2400;\r\nconst JPEG_QUALITY = 0.88;\r\nconst ACCEPTED_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/webp\"]);\r\n\r\nfunction fitWithin(width: number, height: number, maxEdge: number) {\r\n const edge = Math.max(width, height);\r\n if (edge <= maxEdge) {\r\n return { width, height };\r\n }\r\n\r\n const scale = maxEdge / edge;\r\n return {\r\n width: Math.max(1, Math.round(width * scale)),\r\n height: Math.max(1, Math.round(height * scale)),\r\n };\r\n}\r\n\r\nfunction canvasHasAlpha(canvas: HTMLCanvasElement) {\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return false;\r\n }\r\n\r\n const { data } = context.getImageData(0, 0, canvas.width, canvas.height);\r\n for (let index = 3; index < data.length; index += 4) {\r\n if (data[index] < 250) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function measureDataUrl(src: string): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve({\r\n width: image.naturalWidth,\r\n height: image.naturalHeight,\r\n });\r\n };\r\n image.onerror = () => reject(new Error(\"Could not read that image.\"));\r\n image.src = src;\r\n });\r\n}\r\n\r\nexport async function toPendingImage(src: string, name?: string): Promise<PendingImage> {\r\n const size = await measureDataUrl(src);\r\n return {\r\n src,\r\n aspect: size.width / Math.max(1, size.height),\r\n name,\r\n };\r\n}\r\n\r\nexport async function fileToImageDataUrl(file: File): Promise<string> {\r\n if (file.size > MAX_UPLOAD_BYTES) {\r\n throw new Error(\"Image is too large (max 8 MB).\");\r\n }\r\n\r\n if (!ACCEPTED_TYPES.has(file.type) && !file.type.startsWith(\"image/\")) {\r\n throw new Error(\"Choose a PNG, JPG, or WebP image.\");\r\n }\r\n\r\n if (file.type && !ACCEPTED_TYPES.has(file.type) && file.type.startsWith(\"image/\")) {\r\n throw new Error(\"Choose a PNG, JPG, or WebP image.\");\r\n }\r\n\r\n const bitmap = await createImageBitmap(file);\r\n const size = fitWithin(bitmap.width, bitmap.height, MAX_IMAGE_EDGE);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = size.width;\r\n canvas.height = size.height;\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n bitmap.close();\r\n throw new Error(\"Could not read that image.\");\r\n }\r\n\r\n context.drawImage(bitmap, 0, 0, size.width, size.height);\r\n bitmap.close();\r\n\r\n if (canvasHasAlpha(canvas)) {\r\n return canvas.toDataURL(\"image/png\");\r\n }\r\n\r\n return canvas.toDataURL(\"image/jpeg\", JPEG_QUALITY);\r\n}\r\n","import type { ReactNode, SVGProps } from \"react\";\r\n\r\ntype IconProps = SVGProps<SVGSVGElement> & {\r\n size?: number;\r\n};\r\n\r\nfunction Icon({ size = 16, children, ...props }: IconProps & { children: ReactNode }) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n aria-hidden=\"true\"\r\n {...props}\r\n >\r\n {children}\r\n </svg>\r\n );\r\n}\r\n\r\nexport function FileTextIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\" />\r\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\r\n <path d=\"M10 9H8\" />\r\n <path d=\"M16 13H8\" />\r\n <path d=\"M16 17H8\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function Undo2Icon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M9 14 4 9l5-5\" />\r\n <path d=\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function Redo2Icon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m15 14 5-5-5-5\" />\r\n <path d=\"M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function MousePointer2Icon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function TypeIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M12 4v16\" />\r\n <path d=\"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2\" />\r\n <path d=\"M9 20h6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PencilIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\r\n <path d=\"m15 5 4 4\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function HighlighterIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m9 11-6 6v3h9l3-3\" />\r\n <path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PenToolIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z\" />\r\n <path d=\"m18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18\" />\r\n <path d=\"m2.3 2.3 7.286 7.286\" />\r\n <circle cx=\"11\" cy=\"11\" r=\"2\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ImageIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\r\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\r\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function SearchIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m21 21-4.34-4.34\" />\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ZoomOutIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\r\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ZoomInIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\r\n <line x1=\"11\" x2=\"11\" y1=\"8\" y2=\"14\" />\r\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ChevronLeftIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m15 18-6-6 6-6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ChevronRightIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ChevronDownIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m6 9 6 6 6-6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function CheckIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M20 6 9 17l-5-5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function XIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function DownloadIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M12 15V3\" />\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\r\n <path d=\"m7 10 5 5 5-5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PlusIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M5 12h14\" />\r\n <path d=\"M12 5v14\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function MinusIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M5 12h14\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function TrashIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M3 6h18\" />\r\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\r\n <path d=\"M10 11v6\" />\r\n <path d=\"M14 11v6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function GripVerticalIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <circle cx=\"9\" cy=\"6\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"15\" cy=\"6\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"9\" cy=\"12\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"15\" cy=\"12\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"9\" cy=\"18\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"15\" cy=\"18\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function RotateCcwIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\r\n <path d=\"M3 3v5h5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function RotateCwIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\r\n <path d=\"M21 3v5h-5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function UploadIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M12 3v12\" />\r\n <path d=\"m8 7 4-4 4 4\" />\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PanelLeftIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\r\n <path d=\"M9 3v18\" />\r\n </Icon>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type DragEvent, type KeyboardEvent } from \"react\";\r\nimport { fileToImageDataUrl, measureDataUrl } from \"../lib/imageUpload\";\r\nimport { ImageIcon, UploadIcon, XIcon } from \"./icons\";\r\n\r\ntype ImageModalProps = {\r\n onApply: (src: string, name?: string) => void;\r\n onClose: () => void;\r\n};\r\n\r\nfunction formatBytes(bytes: number) {\r\n if (bytes < 1024) {\r\n return `${bytes} B`;\r\n }\r\n if (bytes < 1024 * 1024) {\r\n return `${Math.round(bytes / 1024)} KB`;\r\n }\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function ImageModal({ onApply, onClose }: ImageModalProps) {\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const [uploadSrc, setUploadSrc] = useState<string | null>(null);\r\n const [fileName, setFileName] = useState<string | null>(null);\r\n const [fileSize, setFileSize] = useState<number | null>(null);\r\n const [dimensions, setDimensions] = useState<{ width: number; height: number } | null>(null);\r\n const [uploadError, setUploadError] = useState<string | null>(null);\r\n const [dragOver, setDragOver] = useState(false);\r\n const [busy, setBusy] = useState(false);\r\n\r\n const canApply = !busy && Boolean(uploadSrc);\r\n\r\n useEffect(() => {\r\n dialogRef.current?.focus();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onClose();\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKeyDown);\r\n return () => window.removeEventListener(\"keydown\", onKeyDown);\r\n }, [onClose]);\r\n\r\n const handleApply = () => {\r\n if (!uploadSrc || busy) {\r\n return;\r\n }\r\n onApply(uploadSrc, fileName ?? undefined);\r\n };\r\n\r\n const handleDialogKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"Enter\" && (event.ctrlKey || event.metaKey) && canApply) {\r\n event.preventDefault();\r\n handleApply();\r\n }\r\n };\r\n\r\n const readUpload = async (file: File | undefined) => {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n setUploadError(null);\r\n setBusy(true);\r\n try {\r\n const src = await fileToImageDataUrl(file);\r\n const size = await measureDataUrl(src);\r\n setUploadSrc(src);\r\n setFileName(file.name);\r\n setFileSize(file.size);\r\n setDimensions(size);\r\n } catch (caught) {\r\n setUploadSrc(null);\r\n setFileName(null);\r\n setFileSize(null);\r\n setDimensions(null);\r\n setUploadError(caught instanceof Error ? caught.message : \"Could not read that image.\");\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const handleDrop = (event: DragEvent<HTMLLabelElement>) => {\r\n event.preventDefault();\r\n setDragOver(false);\r\n void readUpload(event.dataTransfer.files[0]);\r\n };\r\n\r\n const clearUpload = () => {\r\n setUploadSrc(null);\r\n setFileName(null);\r\n setFileSize(null);\r\n setDimensions(null);\r\n setUploadError(null);\r\n };\r\n\r\n return (\r\n <div className=\"rpe-modal-backdrop\" onMouseDown={onClose}>\r\n <div\r\n ref={dialogRef}\r\n className=\"rpe-modal rpe-image-modal\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"rpe-image-title\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n onKeyDown={handleDialogKeyDown}\r\n >\r\n <div className=\"rpe-modal-header\">\r\n <div>\r\n <h2 id=\"rpe-image-title\" className=\"rpe-modal-title\">\r\n Add image\r\n </h2>\r\n <p className=\"rpe-modal-subtitle\">\r\n Upload a photo or graphic, then click a page to place it.\r\n </p>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-close\"\r\n aria-label=\"Close\"\r\n onClick={onClose}\r\n >\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n <div className=\"rpe-image-modal-body\">\r\n <input\r\n ref={fileInputRef}\r\n id=\"rpe-image-upload\"\r\n type=\"file\"\r\n accept=\"image/png,image/jpeg,image/webp\"\r\n className=\"rpe-signature-file\"\r\n onChange={(event) => {\r\n void readUpload(event.target.files?.[0]);\r\n event.currentTarget.value = \"\";\r\n }}\r\n />\r\n <label\r\n htmlFor=\"rpe-image-upload\"\r\n className={`rpe-image-dropzone${dragOver ? \" rpe-image-dropzone-active\" : \"\"}${uploadSrc ? \" rpe-image-dropzone-filled\" : \"\"}`}\r\n onDragEnter={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragOver={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragLeave={() => setDragOver(false)}\r\n onDrop={handleDrop}\r\n >\r\n {uploadSrc ? (\r\n <span className=\"rpe-image-preview-frame\">\r\n <img src={uploadSrc} alt={fileName ?? \"Uploaded image preview\"} />\r\n </span>\r\n ) : (\r\n <span className=\"rpe-image-dropzone-copy\">\r\n <span className=\"rpe-image-dropzone-icon\">\r\n <ImageIcon size={22} />\r\n </span>\r\n <strong>{busy ? \"Preparing image…\" : \"Drop an image here\"}</strong>\r\n <span>or click to browse PNG, JPG, or WebP · max 8 MB</span>\r\n </span>\r\n )}\r\n </label>\r\n\r\n {uploadSrc && dimensions ? (\r\n <div className=\"rpe-image-meta\">\r\n <div className=\"rpe-image-meta-copy\">\r\n <strong>{fileName ?? \"Untitled image\"}</strong>\r\n <span>\r\n {dimensions.width} × {dimensions.height} px\r\n {fileSize != null ? ` · ${formatBytes(fileSize)}` : \"\"}\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n onClick={() => {\r\n clearUpload();\r\n fileInputRef.current?.click();\r\n }}\r\n >\r\n <UploadIcon size={14} />\r\n Replace\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n {uploadError ? (\r\n <div className=\"rpe-signature-error\" role=\"alert\">\r\n {uploadError}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"rpe-modal-footer\">\r\n <button type=\"button\" className=\"rpe-modal-secondary\" onClick={onClose}>\r\n Cancel\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-primary\"\r\n disabled={!canApply}\r\n onClick={handleApply}\r\n >\r\n {busy ? \"Preparing…\" : \"Use image\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","type ImageToolbarProps = {\r\n onChange: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\nexport function ImageToolbar({ onChange, onCancel }: ImageToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar rpe-signature-place-toolbar\" role=\"toolbar\" aria-label=\"Place image\">\r\n <span className=\"rpe-signature-place-hint\">Click a page to place your image</span>\r\n <span className=\"rpe-ink-divider\" />\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onChange}>\r\n Change\r\n </button>\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onCancel}>\r\n Cancel\r\n </button>\r\n </div>\r\n );\r\n}\r\n","const SWATCHES = [\"#111827\", \"#dc2626\", \"#2563eb\", \"#16a34a\"] as const;\r\nconst WIDTHS = [\r\n { value: 1, label: \"Thin\" },\r\n { value: 2.5, label: \"Pen\" },\r\n { value: 5, label: \"Marker\" },\r\n { value: 8, label: \"Bold\" },\r\n] as const;\r\n\r\ntype InkToolbarProps = {\r\n color: string;\r\n width: number;\r\n onColorChange: (color: string) => void;\r\n onWidthChange: (width: number) => void;\r\n};\r\n\r\nexport function InkToolbar({\r\n color,\r\n width,\r\n onColorChange,\r\n onWidthChange,\r\n}: InkToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar\" role=\"toolbar\" aria-label=\"Draw tools\">\r\n <div className=\"rpe-ink-swatches\">\r\n {SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Ink color ${swatch}`}\r\n aria-pressed={color.toLowerCase() === swatch}\r\n onClick={() => onColorChange(swatch)}\r\n />\r\n ))}\r\n <label className=\"rpe-ink-picker\" title=\"Custom color\">\r\n <span className=\"rpe-ink-picker-chip\" style={{ background: color }} />\r\n <input\r\n type=\"color\"\r\n value={color}\r\n aria-label=\"Custom ink color\"\r\n onChange={(event) => onColorChange(event.target.value)}\r\n />\r\n </label>\r\n </div>\r\n\r\n <span className=\"rpe-ink-divider\" />\r\n\r\n <div className=\"rpe-ink-widths\">\r\n {WIDTHS.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n className={`rpe-ink-width${width === option.value ? \" rpe-ink-width-active\" : \"\"}`}\r\n aria-label={`${option.label} stroke`}\r\n aria-pressed={width === option.value}\r\n title={option.label}\r\n onClick={() => onWidthChange(option.value)}\r\n >\r\n <span\r\n className=\"rpe-ink-width-dot\"\r\n style={{ width: option.value + 4, height: option.value + 4 }}\r\n />\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type PointerEvent as ReactPointerEvent } from \"react\";\r\nimport {\r\n appendPoint,\r\n hitTestStroke,\r\n pathLength,\r\n pointsToSvgPath,\r\n simplifyPoints,\r\n strokeBounds,\r\n translatePoints,\r\n} from \"../lib/drawPaths\";\r\nimport { clampBoxTranslation } from \"../lib/geometry\";\r\nimport type { DrawPoint, DrawStroke, Tool } from \"../types\";\r\nimport { TrashIcon } from \"./icons\";\r\n\r\nconst MIN_STROKE_LENGTH = 0.008;\r\nconst MIN_MOVE_PX = 3;\r\n\r\ntype MoveDrag = {\r\n id: string;\r\n startX: number;\r\n startY: number;\r\n originPoints: DrawPoint[];\r\n};\r\n\r\ntype DrawLayerProps = {\r\n pageNumber: number;\r\n scale: number;\r\n strokes: DrawStroke[];\r\n selectedId: string | null;\r\n activeTool: Tool;\r\n color: string;\r\n width: number;\r\n onAdd: (stroke: Omit<DrawStroke, \"id\">) => void;\r\n onSelect: (id: string | null) => void;\r\n onUpdate: (id: string, changes: Partial<DrawStroke>) => void;\r\n onRemove: (id: string) => void;\r\n};\r\n\r\nfunction clamp01(value: number) {\r\n return Math.min(1, Math.max(0, value));\r\n}\r\n\r\nfunction pointFromEvent(event: { clientX: number; clientY: number }, node: HTMLElement): DrawPoint {\r\n const rect = node.getBoundingClientRect();\r\n return {\r\n x: clamp01((event.clientX - rect.left) / rect.width),\r\n y: clamp01((event.clientY - rect.top) / rect.height),\r\n };\r\n}\r\n\r\nexport function DrawLayer({\r\n pageNumber,\r\n scale,\r\n strokes,\r\n selectedId,\r\n activeTool,\r\n color,\r\n width,\r\n onAdd,\r\n onSelect,\r\n onUpdate,\r\n onRemove,\r\n}: DrawLayerProps) {\r\n const layerRef = useRef<HTMLDivElement>(null);\r\n const [draftPoints, setDraftPoints] = useState<DrawPoint[] | null>(null);\r\n const [drag, setDrag] = useState<MoveDrag | null>(null);\r\n const draftRef = useRef<DrawPoint[] | null>(null);\r\n const drawingRef = useRef(false);\r\n const suppressClickRef = useRef(false);\r\n\r\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (activeTool !== \"draw\" || event.button !== 0) {\r\n return;\r\n }\r\n\r\n const layer = layerRef.current;\r\n if (!layer) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n drawingRef.current = true;\r\n const start = [pointFromEvent(event, layer)];\r\n draftRef.current = start;\r\n layer.setPointerCapture(event.pointerId);\r\n setDraftPoints(start);\r\n onSelect(null);\r\n };\r\n\r\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (!drawingRef.current || !layerRef.current || !draftRef.current) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const next = appendPoint(draftRef.current, pointFromEvent(event, layerRef.current));\r\n draftRef.current = next;\r\n setDraftPoints(next);\r\n };\r\n\r\n const finishStroke = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (!drawingRef.current) {\r\n return;\r\n }\r\n\r\n drawingRef.current = false;\r\n if (layerRef.current?.hasPointerCapture(event.pointerId)) {\r\n layerRef.current.releasePointerCapture(event.pointerId);\r\n }\r\n\r\n const points = draftRef.current;\r\n draftRef.current = null;\r\n setDraftPoints(null);\r\n\r\n if (!points || pathLength(points) < MIN_STROKE_LENGTH) {\r\n return;\r\n }\r\n\r\n onAdd({\r\n pageNumber,\r\n points: simplifyPoints(points),\r\n color,\r\n width,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = layerRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < MIN_MOVE_PX) {\r\n return;\r\n }\r\n\r\n suppressClickRef.current = true;\r\n const rect = page.getBoundingClientRect();\r\n if (rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const { dx, dy } = clampBoxTranslation(\r\n strokeBounds(drag.originPoints),\r\n (event.clientX - drag.startX) / rect.width,\r\n (event.clientY - drag.startY) / rect.height,\r\n );\r\n onUpdate(drag.id, { points: translatePoints(drag.originPoints, dx, dy) });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent, stroke: DrawStroke) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onSelect(stroke.id);\r\n setDrag({\r\n id: stroke.id,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originPoints: stroke.points.map((point) => ({ ...point })),\r\n });\r\n };\r\n\r\n const handleSelectPointerDown = (\r\n event: ReactPointerEvent<SVGPathElement>,\r\n stroke: DrawStroke,\r\n ) => {\r\n if (activeTool === \"draw\" || event.button !== 0) {\r\n return;\r\n }\r\n\r\n beginMove(event, stroke);\r\n };\r\n\r\n const handleLayerClick = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (suppressClickRef.current) {\r\n suppressClickRef.current = false;\r\n event.stopPropagation();\r\n return;\r\n }\r\n\r\n if (activeTool === \"draw\" || !layerRef.current) {\r\n return;\r\n }\r\n\r\n const point = pointFromEvent(event, layerRef.current);\r\n const rect = layerRef.current.getBoundingClientRect();\r\n let hitId: string | null = null;\r\n\r\n for (let index = strokes.length - 1; index >= 0; index -= 1) {\r\n const stroke = strokes[index];\r\n const threshold = (stroke.width * scale) / 2 / rect.width + 0.012;\r\n if (hitTestStroke(stroke.points, point, threshold)) {\r\n hitId = stroke.id;\r\n break;\r\n }\r\n }\r\n\r\n if (hitId) {\r\n event.stopPropagation();\r\n onSelect(hitId);\r\n return;\r\n }\r\n\r\n onSelect(null);\r\n };\r\n\r\n const selectedStroke = strokes.find((stroke) => stroke.id === selectedId) ?? null;\r\n const selectedBounds = selectedStroke\r\n ? strokeBounds(selectedStroke.points, (selectedStroke.width * scale) / 2 / 800 + 0.012)\r\n : null;\r\n\r\n return (\r\n <div\r\n ref={layerRef}\r\n className={`rpe-draw-layer${activeTool === \"draw\" ? \" rpe-draw-layer-active\" : \"\"}`}\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={finishStroke}\r\n onPointerCancel={finishStroke}\r\n onClick={handleLayerClick}\r\n >\r\n <svg className=\"rpe-draw-svg\" viewBox=\"0 0 1 1\" preserveAspectRatio=\"none\">\r\n {strokes.map((stroke) => {\r\n const path = pointsToSvgPath(stroke.points);\r\n if (!path) {\r\n return null;\r\n }\r\n\r\n return (\r\n <g key={stroke.id}>\r\n <path\r\n className=\"rpe-draw-hit\"\r\n d={path}\r\n fill=\"none\"\r\n stroke=\"rgba(0,0,0,0.01)\"\r\n strokeWidth={Math.max(stroke.width * scale + 14, 24)}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n onPointerDown={(event) => handleSelectPointerDown(event, stroke)}\r\n />\r\n <path\r\n className={`rpe-draw-stroke${stroke.id === selectedId ? \" rpe-draw-stroke-selected\" : \"\"}`}\r\n d={path}\r\n fill=\"none\"\r\n stroke={stroke.color}\r\n strokeWidth={stroke.width * scale}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n pointerEvents=\"none\"\r\n />\r\n </g>\r\n );\r\n })}\r\n {draftPoints && draftPoints.length > 0 ? (\r\n <path\r\n className=\"rpe-draw-stroke rpe-draw-stroke-live\"\r\n d={pointsToSvgPath(draftPoints)}\r\n fill=\"none\"\r\n stroke={color}\r\n strokeWidth={width * scale}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n pointerEvents=\"none\"\r\n />\r\n ) : null}\r\n </svg>\r\n\r\n {selectedStroke && selectedBounds ? (\r\n <div\r\n className={`rpe-draw-frame${drag ? \" rpe-text-frame-dragging\" : \"\"}`}\r\n style={{\r\n left: `${selectedBounds.left * 100}%`,\r\n top: `${selectedBounds.top * 100}%`,\r\n width: `${selectedBounds.width * 100}%`,\r\n height: `${selectedBounds.height * 100}%`,\r\n }}\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n beginMove(event, selectedStroke);\r\n }}\r\n >\r\n <div\r\n className={`rpe-text-toolbar rpe-draw-toolbar${selectedBounds.top < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete drawing\"\r\n onClick={() => onRemove(selectedStroke.id)}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type CSSProperties, type PointerEvent as ReactPointerEvent } from \"react\";\r\nimport { clampBoxTranslation } from \"../lib/geometry\";\r\nimport {\r\n clamp01,\r\n hitTestRects,\r\n isMeaningfulRect,\r\n normalizedRectFromPoints,\r\n rectsFromSelection,\r\n translateRects,\r\n unionBounds,\r\n} from \"../lib/highlightRects\";\r\nimport type { HighlightAnnotation, HighlightRect, Tool } from \"../types\";\r\nimport { TrashIcon } from \"./icons\";\r\n\r\nconst MIN_DRAG_PX = 4;\r\nconst MIN_MOVE_PX = 3;\r\nconst FLOATING_SWATCHES = [\"#facc15\", \"#4ade80\", \"#38bdf8\", \"#f472b6\", \"#fb923c\"] as const;\r\n\r\ntype HighlightLayerProps = {\r\n pageNumber: number;\r\n highlights: HighlightAnnotation[];\r\n selectedId: string | null;\r\n activeTool: Tool;\r\n color: string;\r\n onAdd: (highlight: Omit<HighlightAnnotation, \"id\">) => void;\r\n onSelect: (id: string | null) => void;\r\n onUpdate: (id: string, changes: Partial<HighlightAnnotation>) => void;\r\n onRemove: (id: string) => void;\r\n onColorChange: (color: string) => void;\r\n};\r\n\r\ntype MoveDrag = {\r\n id: string;\r\n startX: number;\r\n startY: number;\r\n originRects: HighlightRect[];\r\n};\r\n\r\ntype Point = { x: number; y: number };\r\n\r\nfunction pointFromEvent(event: { clientX: number; clientY: number }, node: HTMLElement): Point {\r\n const rect = node.getBoundingClientRect();\r\n return {\r\n x: clamp01((event.clientX - rect.left) / rect.width),\r\n y: clamp01((event.clientY - rect.top) / rect.height),\r\n };\r\n}\r\n\r\nfunction isTextTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) {\r\n return false;\r\n }\r\n\r\n return Boolean(target.closest(\".textLayer span, .textLayer br\"));\r\n}\r\n\r\nfunction isChromeTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) {\r\n return false;\r\n }\r\n\r\n return Boolean(\r\n target.closest(\r\n \".rpe-highlight-frame, .rpe-highlight-hit, .rpe-highlight-toolbar, .rpe-highlight-item-toolbar, .rpe-text-frame, .rpe-text-toolbar, .rpe-draw-frame, .rpe-draw-toolbar, .rpe-ink-toolbar\",\r\n ),\r\n );\r\n}\r\n\r\nfunction rectStyle(rect: HighlightRect): CSSProperties {\r\n return {\r\n left: `${rect.left * 100}%`,\r\n top: `${rect.top * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n };\r\n}\r\n\r\nexport function HighlightLayer({\r\n pageNumber,\r\n highlights,\r\n selectedId,\r\n activeTool,\r\n color,\r\n onAdd,\r\n onSelect,\r\n onUpdate,\r\n onRemove,\r\n onColorChange,\r\n}: HighlightLayerProps) {\r\n const layerRef = useRef<HTMLDivElement>(null);\r\n const [draftRect, setDraftRect] = useState<HighlightRect | null>(null);\r\n const [moveDrag, setMoveDrag] = useState<MoveDrag | null>(null);\r\n const dragRef = useRef<{\r\n pointerId: number;\r\n start: Point;\r\n startClient: { x: number; y: number };\r\n mode: \"text\" | \"rect\";\r\n current: HighlightRect | null;\r\n } | null>(null);\r\n const highlightsRef = useRef(highlights);\r\n const colorRef = useRef(color);\r\n const onAddRef = useRef(onAdd);\r\n const onSelectRef = useRef(onSelect);\r\n\r\n highlightsRef.current = highlights;\r\n colorRef.current = color;\r\n onAddRef.current = onAdd;\r\n onSelectRef.current = onSelect;\r\n\r\n useEffect(() => {\r\n const layer = layerRef.current;\r\n const page = layer?.closest<HTMLElement>(\".rpe-page\");\r\n if (!layer || !page || activeTool !== \"highlight\") {\r\n return;\r\n }\r\n\r\n const finish = (event: PointerEvent) => {\r\n const drag = dragRef.current;\r\n if (!drag || drag.pointerId !== event.pointerId) {\r\n return;\r\n }\r\n\r\n dragRef.current = null;\r\n setDraftRect(null);\r\n page.querySelector(\".textLayer\")?.classList.remove(\"selecting\");\r\n\r\n const moved =\r\n Math.abs(event.clientX - drag.startClient.x) >= MIN_DRAG_PX ||\r\n Math.abs(event.clientY - drag.startClient.y) >= MIN_DRAG_PX;\r\n\r\n if (drag.mode === \"rect\" && drag.current && isMeaningfulRect(drag.current)) {\r\n onAddRef.current({\r\n pageNumber,\r\n rects: [drag.current],\r\n color: colorRef.current,\r\n });\r\n window.getSelection()?.removeAllRanges();\r\n return;\r\n }\r\n\r\n if (drag.mode === \"text\" || moved) {\r\n const selected = rectsFromSelection(page);\r\n if (selected.rects.length > 0) {\r\n onAddRef.current({\r\n pageNumber,\r\n rects: selected.rects,\r\n color: colorRef.current,\r\n text: selected.text.trim() || undefined,\r\n });\r\n window.getSelection()?.removeAllRanges();\r\n return;\r\n }\r\n }\r\n\r\n if (!moved) {\r\n const point = pointFromEvent(event, page);\r\n let hitId: string | null = null;\r\n const items = highlightsRef.current;\r\n for (let index = items.length - 1; index >= 0; index -= 1) {\r\n const highlight = items[index];\r\n if (hitTestRects(highlight.rects, point.x, point.y)) {\r\n hitId = highlight.id;\r\n break;\r\n }\r\n }\r\n onSelectRef.current(hitId);\r\n }\r\n };\r\n\r\n const onPointerDown = (event: PointerEvent) => {\r\n if (event.button !== 0 || isChromeTarget(event.target)) {\r\n return;\r\n }\r\n\r\n const start = pointFromEvent(event, page);\r\n dragRef.current = {\r\n pointerId: event.pointerId,\r\n start,\r\n startClient: { x: event.clientX, y: event.clientY },\r\n mode: isTextTarget(event.target) ? \"text\" : \"rect\",\r\n current: null,\r\n };\r\n onSelectRef.current(null);\r\n\r\n const textLayer = page.querySelector(\".textLayer\");\r\n if (dragRef.current.mode === \"text\") {\r\n textLayer?.classList.add(\"selecting\");\r\n } else {\r\n event.preventDefault();\r\n textLayer?.classList.remove(\"selecting\");\r\n }\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent) => {\r\n const drag = dragRef.current;\r\n if (!drag || drag.pointerId !== event.pointerId || drag.mode !== \"rect\") {\r\n return;\r\n }\r\n\r\n const next = normalizedRectFromPoints(drag.start, pointFromEvent(event, page));\r\n drag.current = next;\r\n setDraftRect(isMeaningfulRect(next) ? next : null);\r\n };\r\n\r\n const onPointerUp = (event: PointerEvent) => {\r\n finish(event);\r\n };\r\n\r\n page.addEventListener(\"pointerdown\", onPointerDown);\r\n window.addEventListener(\"pointermove\", onPointerMove);\r\n window.addEventListener(\"pointerup\", onPointerUp);\r\n window.addEventListener(\"pointercancel\", onPointerUp);\r\n\r\n return () => {\r\n page.removeEventListener(\"pointerdown\", onPointerDown);\r\n window.removeEventListener(\"pointermove\", onPointerMove);\r\n window.removeEventListener(\"pointerup\", onPointerUp);\r\n window.removeEventListener(\"pointercancel\", onPointerUp);\r\n dragRef.current = null;\r\n };\r\n }, [activeTool, pageNumber]);\r\n\r\n useEffect(() => {\r\n if (!moveDrag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = layerRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n if (Math.hypot(event.clientX - moveDrag.startX, event.clientY - moveDrag.startY) < MIN_MOVE_PX) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n if (rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const bounds = unionBounds(moveDrag.originRects);\r\n if (!bounds) {\r\n return;\r\n }\r\n\r\n const { dx, dy } = clampBoxTranslation(\r\n bounds,\r\n (event.clientX - moveDrag.startX) / rect.width,\r\n (event.clientY - moveDrag.startY) / rect.height,\r\n );\r\n onUpdate(moveDrag.id, { rects: translateRects(moveDrag.originRects, dx, dy) });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setMoveDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [moveDrag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent, highlight: HighlightAnnotation) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onSelect(highlight.id);\r\n setMoveDrag({\r\n id: highlight.id,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originRects: highlight.rects.map((rect) => ({ ...rect })),\r\n });\r\n };\r\n\r\n const selected = highlights.find((item) => item.id === selectedId) ?? null;\r\n const selectedBounds = selected ? unionBounds(selected.rects) : null;\r\n\r\n return (\r\n <div\r\n ref={layerRef}\r\n className={`rpe-highlight-layer${activeTool === \"highlight\" ? \" rpe-highlight-layer-active\" : \"\"}`}\r\n >\r\n <div className=\"rpe-highlight-marks\">\r\n {highlights.map((highlight) =>\r\n highlight.rects.map((rect, index) => (\r\n <div\r\n key={`${highlight.id}-${index}`}\r\n className={`rpe-highlight-mark${highlight.id === selectedId ? \" rpe-highlight-mark-selected\" : \"\"}`}\r\n style={{\r\n ...rectStyle(rect),\r\n background: highlight.color,\r\n }}\r\n />\r\n )),\r\n )}\r\n {draftRect ? (\r\n <div\r\n className=\"rpe-highlight-mark rpe-highlight-mark-live\"\r\n style={{\r\n ...rectStyle(draftRect),\r\n background: color,\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"rpe-highlight-chrome\">\r\n {activeTool !== \"highlight\"\r\n ? highlights.map((highlight) =>\r\n highlight.rects.map((rect, index) => (\r\n <button\r\n key={`${highlight.id}-hit-${index}`}\r\n type=\"button\"\r\n className=\"rpe-highlight-hit\"\r\n style={rectStyle(rect)}\r\n aria-label=\"Select highlight\"\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n beginMove(event, highlight);\r\n }}\r\n />\r\n )),\r\n )\r\n : null}\r\n\r\n {selected && selectedBounds ? (\r\n <div\r\n className={`rpe-highlight-frame${moveDrag ? \" rpe-text-frame-dragging\" : \"\"}`}\r\n style={rectStyle(selectedBounds)}\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n beginMove(event, selected);\r\n }}\r\n >\r\n <div\r\n className={`rpe-text-toolbar rpe-highlight-item-toolbar${selectedBounds.top < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n {FLOATING_SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${selected.color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={selected.color.toLowerCase() === swatch}\r\n onClick={() => onColorChange(swatch)}\r\n />\r\n ))}\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete highlight\"\r\n onClick={() => onRemove(selected.id)}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { HighlightRect } from \"../types\";\r\n\r\nconst MIN_CLIENT_SIZE = 1;\r\nconst MIN_NORMALIZED = 0.002;\r\nconst LINE_TOP_TOLERANCE = 0.004;\r\nconst LINE_HEIGHT_TOLERANCE = 0.006;\r\nconst LINE_GAP_TOLERANCE = 0.008;\r\nconst MIN_RECT_AREA = 0.00008;\r\n\r\nexport function clamp01(value: number) {\r\n return Math.min(1, Math.max(0, value));\r\n}\r\n\r\nexport function mergeLineRects(rects: HighlightRect[]): HighlightRect[] {\r\n if (rects.length <= 1) {\r\n return rects.map((rect) => ({ ...rect }));\r\n }\r\n\r\n const sorted = [...rects].sort((a, b) => a.top - b.top || a.left - b.left);\r\n const merged: HighlightRect[] = [];\r\n\r\n for (const rect of sorted) {\r\n const last = merged[merged.length - 1];\r\n if (!last) {\r\n merged.push({ ...rect });\r\n continue;\r\n }\r\n\r\n const sameLine =\r\n Math.abs(last.top - rect.top) < LINE_TOP_TOLERANCE &&\r\n Math.abs(last.height - rect.height) < LINE_HEIGHT_TOLERANCE;\r\n const adjacent = rect.left <= last.left + last.width + LINE_GAP_TOLERANCE;\r\n\r\n if (sameLine && adjacent) {\r\n const right = Math.max(last.left + last.width, rect.left + rect.width);\r\n last.left = Math.min(last.left, rect.left);\r\n last.width = right - last.left;\r\n last.top = Math.min(last.top, rect.top);\r\n last.height = Math.max(last.height, rect.height);\r\n } else {\r\n merged.push({ ...rect });\r\n }\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nexport function normalizeClientRects(\r\n clientRects: ArrayLike<DOMRect>,\r\n pageRect: DOMRect,\r\n): HighlightRect[] {\r\n const rects: HighlightRect[] = [];\r\n\r\n for (let index = 0; index < clientRects.length; index += 1) {\r\n const rect = clientRects[index];\r\n if (rect.width < MIN_CLIENT_SIZE || rect.height < MIN_CLIENT_SIZE) {\r\n continue;\r\n }\r\n\r\n const next = {\r\n left: clamp01((rect.left - pageRect.left) / pageRect.width),\r\n top: clamp01((rect.top - pageRect.top) / pageRect.height),\r\n width: clamp01(rect.width / pageRect.width),\r\n height: clamp01(rect.height / pageRect.height),\r\n };\r\n\r\n if (next.width > MIN_NORMALIZED && next.height > MIN_NORMALIZED) {\r\n rects.push(next);\r\n }\r\n }\r\n\r\n return mergeLineRects(rects);\r\n}\r\n\r\nexport function rectsFromSelection(pageEl: HTMLElement): {\r\n rects: HighlightRect[];\r\n text: string;\r\n} {\r\n const selection = window.getSelection();\r\n if (!selection || selection.isCollapsed || selection.rangeCount === 0) {\r\n return { rects: [], text: \"\" };\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n if (!pageEl.contains(range.commonAncestorContainer)) {\r\n return { rects: [], text: \"\" };\r\n }\r\n\r\n return {\r\n rects: normalizeClientRects(range.getClientRects(), pageEl.getBoundingClientRect()),\r\n text: selection.toString(),\r\n };\r\n}\r\n\r\nexport function translateRects(rects: HighlightRect[], dx: number, dy: number): HighlightRect[] {\r\n if (dx === 0 && dy === 0) {\r\n return rects;\r\n }\r\n\r\n return rects.map((rect) => ({\r\n ...rect,\r\n left: rect.left + dx,\r\n top: rect.top + dy,\r\n }));\r\n}\r\n\r\nexport function unionBounds(rects: HighlightRect[]): HighlightRect | null {\r\n if (rects.length === 0) {\r\n return null;\r\n }\r\n\r\n let left = 1;\r\n let top = 1;\r\n let right = 0;\r\n let bottom = 0;\r\n\r\n for (const rect of rects) {\r\n left = Math.min(left, rect.left);\r\n top = Math.min(top, rect.top);\r\n right = Math.max(right, rect.left + rect.width);\r\n bottom = Math.max(bottom, rect.top + rect.height);\r\n }\r\n\r\n return {\r\n left,\r\n top,\r\n width: Math.max(0, right - left),\r\n height: Math.max(0, bottom - top),\r\n };\r\n}\r\n\r\nexport function hitTestRects(rects: HighlightRect[], x: number, y: number): boolean {\r\n return rects.some(\r\n (rect) =>\r\n x >= rect.left &&\r\n x <= rect.left + rect.width &&\r\n y >= rect.top &&\r\n y <= rect.top + rect.height,\r\n );\r\n}\r\n\r\nexport function isMeaningfulRect(rect: HighlightRect): boolean {\r\n return rect.width * rect.height >= MIN_RECT_AREA && rect.width > MIN_NORMALIZED && rect.height > MIN_NORMALIZED;\r\n}\r\n\r\nexport function normalizedRectFromPoints(\r\n start: { x: number; y: number },\r\n end: { x: number; y: number },\r\n): HighlightRect {\r\n const left = Math.min(start.x, end.x);\r\n const top = Math.min(start.y, end.y);\r\n return {\r\n left,\r\n top,\r\n width: Math.abs(end.x - start.x),\r\n height: Math.abs(end.y - start.y),\r\n };\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport {\r\n angleDeltaDegrees,\r\n normalizeDegrees,\r\n pointerDeltaToLocal,\r\n snapDegrees,\r\n} from \"../lib/geometry\";\r\nimport type { ImageAnnotation } from \"../types\";\r\nimport { RotateCcwIcon, RotateCwIcon, TrashIcon } from \"./icons\";\r\n\r\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\r\n\r\nconst HANDLES: Handle[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\r\nconst MIN_BOX_PX = 36;\r\n\r\ntype DragState =\r\n | {\r\n type: \"move\";\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n }\r\n | {\r\n type: \"resize\";\r\n handle: Handle;\r\n startX: number;\r\n startY: number;\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n rotation: number;\r\n }\r\n | {\r\n type: \"rotate\";\r\n startX: number;\r\n startY: number;\r\n centerX: number;\r\n centerY: number;\r\n originRotation: number;\r\n };\r\n\r\ntype ImageBoxProps = {\r\n annotation: ImageAnnotation;\r\n isSelected: boolean;\r\n onUpdate: (changes: Partial<ImageAnnotation>) => void;\r\n onSelect: () => void;\r\n onRemove: () => void;\r\n};\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nexport function ImageBox({\r\n annotation,\r\n isSelected,\r\n onUpdate,\r\n onSelect,\r\n onRemove,\r\n}: ImageBoxProps) {\r\n const frameRef = useRef<HTMLDivElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = frameRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n\r\n if (drag.type === \"move\") {\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 3) {\r\n return;\r\n }\r\n\r\n const width = annotation.width;\r\n const height = annotation.height;\r\n const deltaX = (event.clientX - drag.startX) / rect.width;\r\n const deltaY = (event.clientY - drag.startY) / rect.height;\r\n onUpdate({\r\n x: clamp(drag.originX + deltaX, 0, Math.max(0, 1 - width)),\r\n y: clamp(drag.originY + deltaY, 0, Math.max(0, 1 - height)),\r\n });\r\n return;\r\n }\r\n\r\n if (drag.type === \"rotate\") {\r\n const delta = angleDeltaDegrees(\r\n drag.centerX,\r\n drag.centerY,\r\n drag.startX,\r\n drag.startY,\r\n event.clientX,\r\n event.clientY,\r\n );\r\n let next = drag.originRotation + delta;\r\n if (event.shiftKey) {\r\n next = snapDegrees(next, 15);\r\n }\r\n onUpdate({ rotation: normalizeDegrees(next) });\r\n return;\r\n }\r\n\r\n const aspect = drag.width / Math.max(1, drag.height);\r\n const minWidth = MIN_BOX_PX;\r\n const minHeight = MIN_BOX_PX;\r\n let nextWidth = drag.width;\r\n let nextHeight = drag.height;\r\n\r\n const rawDeltaX = event.clientX - drag.startX;\r\n const rawDeltaY = event.clientY - drag.startY;\r\n const { x: deltaX, y: deltaY } = pointerDeltaToLocal(\r\n rawDeltaX,\r\n rawDeltaY,\r\n drag.rotation,\r\n );\r\n const { handle } = drag;\r\n\r\n if (handle === \"e\" || handle === \"w\") {\r\n const signed = handle === \"e\" ? deltaX : -deltaX;\r\n nextWidth = Math.max(minWidth, drag.width + signed);\r\n nextHeight = nextWidth / aspect;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n const signed = handle === \"s\" ? deltaY : -deltaY;\r\n nextHeight = Math.max(minHeight, drag.height + signed);\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n const signedX = handle.includes(\"e\") ? deltaX : -deltaX;\r\n const signedY = handle.includes(\"s\") ? deltaY : -deltaY;\r\n const scaleW = (drag.width + signedX) / drag.width;\r\n const scaleH = (drag.height + signedY) / drag.height;\r\n const scale = Math.max(minWidth / drag.width, Math.max(scaleW, scaleH));\r\n nextWidth = drag.width * scale;\r\n nextHeight = drag.height * scale;\r\n }\r\n\r\n nextWidth = Math.min(nextWidth, drag.pageWidth);\r\n nextHeight = Math.min(nextHeight, drag.pageHeight);\r\n if (nextWidth / nextHeight > aspect) {\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n nextHeight = nextWidth / aspect;\r\n }\r\n\r\n let left = drag.left;\r\n let top = drag.top;\r\n\r\n if (handle.includes(\"w\")) {\r\n left = drag.left + drag.width - nextWidth;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n left = drag.left + (drag.width - nextWidth) / 2;\r\n }\r\n\r\n if (handle.includes(\"n\")) {\r\n top = drag.top + drag.height - nextHeight;\r\n } else if (handle === \"e\" || handle === \"w\") {\r\n top = drag.top + (drag.height - nextHeight) / 2;\r\n }\r\n\r\n left = clamp(left, 0, drag.pageWidth - nextWidth);\r\n top = clamp(top, 0, drag.pageHeight - nextHeight);\r\n\r\n onUpdate({\r\n x: left / drag.pageWidth,\r\n y: top / drag.pageHeight,\r\n width: nextWidth / drag.pageWidth,\r\n height: nextHeight / drag.pageHeight,\r\n });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [annotation.height, annotation.width, drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent) => {\r\n onSelect();\r\n setDrag({\r\n type: \"move\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: annotation.x,\r\n originY: annotation.y,\r\n });\r\n };\r\n\r\n const beginResize = (event: ReactPointerEvent, handle: Handle) => {\r\n const frame = frameRef.current;\r\n const page = frame?.closest(\".rpe-page\");\r\n if (!frame || !page) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const pageRect = page.getBoundingClientRect();\r\n\r\n setDrag({\r\n type: \"resize\",\r\n handle,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n left: annotation.x * pageRect.width,\r\n top: annotation.y * pageRect.height,\r\n width: annotation.width * pageRect.width,\r\n height: annotation.height * pageRect.height,\r\n pageWidth: pageRect.width,\r\n pageHeight: pageRect.height,\r\n rotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const beginRotate = (event: ReactPointerEvent) => {\r\n const frame = frameRef.current;\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const rect = frame.getBoundingClientRect();\r\n setDrag({\r\n type: \"rotate\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n centerX: rect.left + rect.width / 2,\r\n centerY: rect.top + rect.height / 2,\r\n originRotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const nudgeRotation = (delta: number) => {\r\n onUpdate({ rotation: normalizeDegrees((annotation.rotation ?? 0) + delta) });\r\n };\r\n\r\n const handleFramePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (\r\n target.closest(\".rpe-text-toolbar\") ||\r\n target.closest(\".rpe-text-handle\") ||\r\n target.closest(\".rpe-rotate-handle\")\r\n ) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n beginMove(event);\r\n };\r\n\r\n const className = [\r\n \"rpe-text-frame\",\r\n \"rpe-signature-frame\",\r\n \"rpe-image-frame\",\r\n isSelected ? \"rpe-text-frame-selected\" : \"\",\r\n hovered && !isSelected ? \"rpe-text-frame-hover\" : \"\",\r\n drag?.type === \"move\" ? \"rpe-text-frame-dragging\" : \"\",\r\n drag?.type === \"resize\" ? \"rpe-text-frame-resizing\" : \"\",\r\n drag?.type === \"rotate\" ? \"rpe-text-frame-rotating\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n ref={frameRef}\r\n className={className}\r\n style={\r\n {\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n cursor: drag?.type === \"move\" ? \"grabbing\" : \"move\",\r\n \"--rpe-rotation\": `${annotation.rotation ?? 0}deg`,\r\n } as CSSProperties\r\n }\r\n onPointerDown={handleFramePointerDown}\r\n onPointerEnter={() => setHovered(true)}\r\n onPointerLeave={() => setHovered(false)}\r\n >\r\n {isSelected ? (\r\n <div\r\n className={`rpe-text-toolbar${annotation.y < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n onSelect();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate left 90 degrees\"\r\n onClick={() => nudgeRotation(-90)}\r\n >\r\n <RotateCcwIcon size={12} />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate right 90 degrees\"\r\n onClick={() => nudgeRotation(90)}\r\n >\r\n <RotateCwIcon size={12} />\r\n </button>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete image\"\r\n onClick={onRemove}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n <img\r\n className=\"rpe-signature-image rpe-placed-image\"\r\n src={annotation.src}\r\n alt=\"Placed image\"\r\n draggable={false}\r\n style={{ opacity: annotation.opacity ?? 1 }}\r\n />\r\n\r\n {isSelected ? (\r\n <>\r\n <span\r\n className=\"rpe-rotate-handle\"\r\n role=\"slider\"\r\n aria-label=\"Rotate image\"\r\n aria-valuemin={0}\r\n aria-valuemax={359}\r\n aria-valuenow={Math.round(normalizeDegrees(annotation.rotation ?? 0))}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginRotate(event);\r\n }}\r\n onDoubleClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onUpdate({ rotation: 0 });\r\n }}\r\n />\r\n {drag?.type === \"rotate\" ? (\r\n <span className=\"rpe-rotate-badge\">\r\n {Math.round(normalizeDegrees(annotation.rotation ?? 0))}°\r\n </span>\r\n ) : null}\r\n {HANDLES.map((handle) => (\r\n <span\r\n key={handle}\r\n className={`rpe-text-handle rpe-text-handle-${handle}`}\r\n data-handle={handle}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginResize(event, handle);\r\n }}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport {\r\n angleDeltaDegrees,\r\n normalizeDegrees,\r\n pointerDeltaToLocal,\r\n snapDegrees,\r\n} from \"../lib/geometry\";\r\nimport type { SignatureAnnotation } from \"../types\";\r\nimport { RotateCcwIcon, RotateCwIcon, TrashIcon } from \"./icons\";\r\n\r\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\r\n\r\nconst HANDLES: Handle[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\r\nconst MIN_BOX_PX = 36;\r\n\r\ntype DragState =\r\n | {\r\n type: \"move\";\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n }\r\n | {\r\n type: \"resize\";\r\n handle: Handle;\r\n startX: number;\r\n startY: number;\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n rotation: number;\r\n }\r\n | {\r\n type: \"rotate\";\r\n startX: number;\r\n startY: number;\r\n centerX: number;\r\n centerY: number;\r\n originRotation: number;\r\n };\r\n\r\ntype SignatureBoxProps = {\r\n annotation: SignatureAnnotation;\r\n isSelected: boolean;\r\n onUpdate: (changes: Partial<SignatureAnnotation>) => void;\r\n onSelect: () => void;\r\n onRemove: () => void;\r\n};\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nexport function SignatureBox({\r\n annotation,\r\n isSelected,\r\n onUpdate,\r\n onSelect,\r\n onRemove,\r\n}: SignatureBoxProps) {\r\n const frameRef = useRef<HTMLDivElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = frameRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n\r\n if (drag.type === \"move\") {\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 3) {\r\n return;\r\n }\r\n\r\n const width = annotation.width;\r\n const height = annotation.height;\r\n const deltaX = (event.clientX - drag.startX) / rect.width;\r\n const deltaY = (event.clientY - drag.startY) / rect.height;\r\n onUpdate({\r\n x: clamp(drag.originX + deltaX, 0, Math.max(0, 1 - width)),\r\n y: clamp(drag.originY + deltaY, 0, Math.max(0, 1 - height)),\r\n });\r\n return;\r\n }\r\n\r\n if (drag.type === \"rotate\") {\r\n const delta = angleDeltaDegrees(\r\n drag.centerX,\r\n drag.centerY,\r\n drag.startX,\r\n drag.startY,\r\n event.clientX,\r\n event.clientY,\r\n );\r\n let next = drag.originRotation + delta;\r\n if (event.shiftKey) {\r\n next = snapDegrees(next, 15);\r\n }\r\n onUpdate({ rotation: normalizeDegrees(next) });\r\n return;\r\n }\r\n\r\n const aspect = drag.width / Math.max(1, drag.height);\r\n const minWidth = MIN_BOX_PX;\r\n const minHeight = MIN_BOX_PX;\r\n let nextWidth = drag.width;\r\n let nextHeight = drag.height;\r\n\r\n const rawDeltaX = event.clientX - drag.startX;\r\n const rawDeltaY = event.clientY - drag.startY;\r\n const { x: deltaX, y: deltaY } = pointerDeltaToLocal(\r\n rawDeltaX,\r\n rawDeltaY,\r\n drag.rotation,\r\n );\r\n const { handle } = drag;\r\n\r\n if (handle === \"e\" || handle === \"w\") {\r\n const signed = handle === \"e\" ? deltaX : -deltaX;\r\n nextWidth = Math.max(minWidth, drag.width + signed);\r\n nextHeight = nextWidth / aspect;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n const signed = handle === \"s\" ? deltaY : -deltaY;\r\n nextHeight = Math.max(minHeight, drag.height + signed);\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n const signedX = handle.includes(\"e\") ? deltaX : -deltaX;\r\n const signedY = handle.includes(\"s\") ? deltaY : -deltaY;\r\n const scaleW = (drag.width + signedX) / drag.width;\r\n const scaleH = (drag.height + signedY) / drag.height;\r\n const scale = Math.max(minWidth / drag.width, Math.max(scaleW, scaleH));\r\n nextWidth = drag.width * scale;\r\n nextHeight = drag.height * scale;\r\n }\r\n\r\n nextWidth = Math.min(nextWidth, drag.pageWidth);\r\n nextHeight = Math.min(nextHeight, drag.pageHeight);\r\n if (nextWidth / nextHeight > aspect) {\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n nextHeight = nextWidth / aspect;\r\n }\r\n\r\n let left = drag.left;\r\n let top = drag.top;\r\n\r\n if (handle.includes(\"w\")) {\r\n left = drag.left + drag.width - nextWidth;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n left = drag.left + (drag.width - nextWidth) / 2;\r\n }\r\n\r\n if (handle.includes(\"n\")) {\r\n top = drag.top + drag.height - nextHeight;\r\n } else if (handle === \"e\" || handle === \"w\") {\r\n top = drag.top + (drag.height - nextHeight) / 2;\r\n }\r\n\r\n left = clamp(left, 0, drag.pageWidth - nextWidth);\r\n top = clamp(top, 0, drag.pageHeight - nextHeight);\r\n\r\n onUpdate({\r\n x: left / drag.pageWidth,\r\n y: top / drag.pageHeight,\r\n width: nextWidth / drag.pageWidth,\r\n height: nextHeight / drag.pageHeight,\r\n });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [annotation.height, annotation.width, drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent) => {\r\n onSelect();\r\n setDrag({\r\n type: \"move\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: annotation.x,\r\n originY: annotation.y,\r\n });\r\n };\r\n\r\n const beginResize = (event: ReactPointerEvent, handle: Handle) => {\r\n const frame = frameRef.current;\r\n const page = frame?.closest(\".rpe-page\");\r\n if (!frame || !page) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const pageRect = page.getBoundingClientRect();\r\n\r\n setDrag({\r\n type: \"resize\",\r\n handle,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n left: annotation.x * pageRect.width,\r\n top: annotation.y * pageRect.height,\r\n width: annotation.width * pageRect.width,\r\n height: annotation.height * pageRect.height,\r\n pageWidth: pageRect.width,\r\n pageHeight: pageRect.height,\r\n rotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const beginRotate = (event: ReactPointerEvent) => {\r\n const frame = frameRef.current;\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const rect = frame.getBoundingClientRect();\r\n setDrag({\r\n type: \"rotate\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n centerX: rect.left + rect.width / 2,\r\n centerY: rect.top + rect.height / 2,\r\n originRotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const nudgeRotation = (delta: number) => {\r\n onUpdate({ rotation: normalizeDegrees((annotation.rotation ?? 0) + delta) });\r\n };\r\n\r\n const handleFramePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (\r\n target.closest(\".rpe-text-toolbar\") ||\r\n target.closest(\".rpe-text-handle\") ||\r\n target.closest(\".rpe-rotate-handle\")\r\n ) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n beginMove(event);\r\n };\r\n\r\n const className = [\r\n \"rpe-text-frame\",\r\n \"rpe-signature-frame\",\r\n isSelected ? \"rpe-text-frame-selected\" : \"\",\r\n hovered && !isSelected ? \"rpe-text-frame-hover\" : \"\",\r\n drag?.type === \"move\" ? \"rpe-text-frame-dragging\" : \"\",\r\n drag?.type === \"resize\" ? \"rpe-text-frame-resizing\" : \"\",\r\n drag?.type === \"rotate\" ? \"rpe-text-frame-rotating\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n ref={frameRef}\r\n className={className}\r\n style={\r\n {\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n cursor: drag?.type === \"move\" ? \"grabbing\" : \"move\",\r\n \"--rpe-rotation\": `${annotation.rotation ?? 0}deg`,\r\n } as CSSProperties\r\n }\r\n onPointerDown={handleFramePointerDown}\r\n onPointerEnter={() => setHovered(true)}\r\n onPointerLeave={() => setHovered(false)}\r\n >\r\n {isSelected ? (\r\n <div\r\n className={`rpe-text-toolbar${annotation.y < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n onSelect();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate left 90 degrees\"\r\n onClick={() => nudgeRotation(-90)}\r\n >\r\n <RotateCcwIcon size={12} />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate right 90 degrees\"\r\n onClick={() => nudgeRotation(90)}\r\n >\r\n <RotateCwIcon size={12} />\r\n </button>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete signature\"\r\n onClick={onRemove}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n <img\r\n className=\"rpe-signature-image\"\r\n src={annotation.src}\r\n alt=\"Signature\"\r\n draggable={false}\r\n />\r\n\r\n {isSelected ? (\r\n <>\r\n <span\r\n className=\"rpe-rotate-handle\"\r\n role=\"slider\"\r\n aria-label=\"Rotate signature\"\r\n aria-valuemin={0}\r\n aria-valuemax={359}\r\n aria-valuenow={Math.round(normalizeDegrees(annotation.rotation ?? 0))}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginRotate(event);\r\n }}\r\n onDoubleClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onUpdate({ rotation: 0 });\r\n }}\r\n />\r\n {drag?.type === \"rotate\" ? (\r\n <span className=\"rpe-rotate-badge\">\r\n {Math.round(normalizeDegrees(annotation.rotation ?? 0))}°\r\n </span>\r\n ) : null}\r\n {HANDLES.map((handle) => (\r\n <span\r\n key={handle}\r\n className={`rpe-text-handle rpe-text-handle-${handle}`}\r\n data-handle={handle}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginResize(event, handle);\r\n }}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","const BLOCK_TAGS = new Set([\r\n \"DIV\",\r\n \"P\",\r\n \"LI\",\r\n \"UL\",\r\n \"OL\",\r\n \"H1\",\r\n \"H2\",\r\n \"H3\",\r\n \"H4\",\r\n \"H5\",\r\n \"H6\",\r\n \"TR\",\r\n \"BLOCKQUOTE\",\r\n \"SECTION\",\r\n \"ARTICLE\",\r\n \"HEADER\",\r\n \"FOOTER\",\r\n]);\r\n\r\nconst PARAGRAPH_TAGS = new Set([\r\n \"P\",\r\n \"LI\",\r\n \"H1\",\r\n \"H2\",\r\n \"H3\",\r\n \"H4\",\r\n \"H5\",\r\n \"H6\",\r\n \"BLOCKQUOTE\",\r\n]);\r\n\r\nfunction collectText(node: Node): string {\r\n let result = \"\";\r\n\r\n for (const child of node.childNodes) {\r\n if (child.nodeType === Node.TEXT_NODE) {\r\n result += child.textContent ?? \"\";\r\n continue;\r\n }\r\n\r\n if (child.nodeType !== Node.ELEMENT_NODE) {\r\n continue;\r\n }\r\n\r\n const element = child as HTMLElement;\r\n const tag = element.tagName;\r\n\r\n if (tag === \"BR\") {\r\n result += \"\\n\";\r\n continue;\r\n }\r\n\r\n const inner = collectText(element);\r\n if (!BLOCK_TAGS.has(tag)) {\r\n result += inner;\r\n continue;\r\n }\r\n\r\n if (result.length > 0 && !result.endsWith(\"\\n\")) {\r\n result += \"\\n\";\r\n }\r\n result += inner;\r\n if (!result.endsWith(\"\\n\")) {\r\n result += \"\\n\";\r\n }\r\n if (PARAGRAPH_TAGS.has(tag) && !result.endsWith(\"\\n\\n\")) {\r\n result += \"\\n\";\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getContentEditableText(root: HTMLElement): string {\r\n return collectText(root).replace(/\\n+$/, \"\");\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n type KeyboardEvent,\r\n type MouseEvent,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport { getContentEditableText } from \"../lib/contentEditableText\";\r\nimport {\r\n angleDeltaDegrees,\r\n normalizeDegrees,\r\n pointerDeltaToLocal,\r\n snapDegrees,\r\n} from \"../lib/geometry\";\r\nimport type { TextAnnotation } from \"../types\";\r\nimport { MinusIcon, PlusIcon, TrashIcon } from \"./icons\";\r\n\r\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\r\n\r\nconst HANDLES: Handle[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\r\nconst MIN_FONT = 8;\r\nconst MAX_FONT = 200;\r\nconst MIN_BOX_PX = 28;\r\n\r\ntype DragState =\r\n | {\r\n type: \"move\";\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n }\r\n | {\r\n type: \"resize\";\r\n handle: Handle;\r\n startX: number;\r\n startY: number;\r\n left: number;\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n rotation: number;\r\n }\r\n | {\r\n type: \"rotate\";\r\n startX: number;\r\n startY: number;\r\n centerX: number;\r\n centerY: number;\r\n originRotation: number;\r\n };\r\n\r\ntype TextBoxProps = {\r\n annotation: TextAnnotation;\r\n scale: number;\r\n isSelected: boolean;\r\n isEditing: boolean;\r\n onUpdate: (changes: Partial<TextAnnotation>) => void;\r\n onSelect: () => void;\r\n onStartEdit: () => void;\r\n onStopEdit: () => void;\r\n onRemove: () => void;\r\n};\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nfunction parseFontSize(value: string): number | null {\r\n const next = Number(value);\r\n if (!Number.isFinite(next)) {\r\n return null;\r\n }\r\n\r\n return clamp(Math.round(next), MIN_FONT, MAX_FONT);\r\n}\r\n\r\nexport function TextBox({\r\n annotation,\r\n scale,\r\n isSelected,\r\n isEditing,\r\n onUpdate,\r\n onSelect,\r\n onStartEdit,\r\n onStopEdit,\r\n onRemove,\r\n}: TextBoxProps) {\r\n const frameRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const keepEditingRef = useRef(false);\r\n const [hovered, setHovered] = useState(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n const [fontSizeDraft, setFontSizeDraft] = useState(String(annotation.fontSize));\r\n\r\n useEffect(() => {\r\n setFontSizeDraft(String(annotation.fontSize));\r\n }, [annotation.fontSize]);\r\n\r\n useEffect(() => {\r\n const node = contentRef.current;\r\n if (!node) {\r\n return;\r\n }\r\n\r\n const canSync = !isEditing || document.activeElement !== node;\r\n if (!canSync) {\r\n return;\r\n }\r\n\r\n if (getContentEditableText(node) !== annotation.text || node.childElementCount > 0) {\r\n node.textContent = annotation.text;\r\n }\r\n }, [annotation.text, isEditing]);\r\n\r\n useEffect(() => {\r\n const node = contentRef.current;\r\n if (!isEditing || !node) {\r\n return;\r\n }\r\n\r\n node.focus();\r\n const selection = window.getSelection();\r\n const range = document.createRange();\r\n range.selectNodeContents(node);\r\n selection?.removeAllRanges();\r\n selection?.addRange(range);\r\n }, [isEditing]);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = frameRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n\r\n if (drag.type === \"move\") {\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 3) {\r\n return;\r\n }\r\n const deltaX = (event.clientX - drag.startX) / rect.width;\r\n const deltaY = (event.clientY - drag.startY) / rect.height;\r\n onUpdate({\r\n x: clamp(drag.originX + deltaX, 0, 0.98),\r\n y: clamp(drag.originY + deltaY, 0, 0.98),\r\n });\r\n return;\r\n }\r\n\r\n if (drag.type === \"rotate\") {\r\n const delta = angleDeltaDegrees(\r\n drag.centerX,\r\n drag.centerY,\r\n drag.startX,\r\n drag.startY,\r\n event.clientX,\r\n event.clientY,\r\n );\r\n let next = drag.originRotation + delta;\r\n if (event.shiftKey) {\r\n next = snapDegrees(next, 15);\r\n }\r\n onUpdate({ rotation: normalizeDegrees(next) });\r\n return;\r\n }\r\n\r\n const rawDeltaX = event.clientX - drag.startX;\r\n const rawDeltaY = event.clientY - drag.startY;\r\n const { x: deltaX, y: deltaY } = pointerDeltaToLocal(\r\n rawDeltaX,\r\n rawDeltaY,\r\n drag.rotation,\r\n );\r\n const { handle } = drag;\r\n\r\n let left = drag.left;\r\n let top = drag.top;\r\n let right = drag.right;\r\n let bottom = drag.bottom;\r\n\r\n if (handle.includes(\"e\")) {\r\n right = drag.right + deltaX;\r\n }\r\n if (handle.includes(\"w\")) {\r\n left = drag.left + deltaX;\r\n }\r\n if (handle.includes(\"s\")) {\r\n bottom = drag.bottom + deltaY;\r\n }\r\n if (handle.includes(\"n\")) {\r\n top = drag.top + deltaY;\r\n }\r\n\r\n if (right - left < MIN_BOX_PX) {\r\n if (handle.includes(\"w\")) {\r\n left = right - MIN_BOX_PX;\r\n } else {\r\n right = left + MIN_BOX_PX;\r\n }\r\n }\r\n\r\n if (bottom - top < MIN_BOX_PX) {\r\n if (handle.includes(\"n\")) {\r\n top = bottom - MIN_BOX_PX;\r\n } else {\r\n bottom = top + MIN_BOX_PX;\r\n }\r\n }\r\n\r\n left = clamp(left, 0, drag.pageWidth - MIN_BOX_PX);\r\n top = clamp(top, 0, drag.pageHeight - MIN_BOX_PX);\r\n right = clamp(right, left + MIN_BOX_PX, drag.pageWidth);\r\n bottom = clamp(bottom, top + MIN_BOX_PX, drag.pageHeight);\r\n\r\n onUpdate({\r\n x: left / drag.pageWidth,\r\n y: top / drag.pageHeight,\r\n width: (right - left) / drag.pageWidth,\r\n height: (bottom - top) / drag.pageHeight,\r\n });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent) => {\r\n onSelect();\r\n setDrag({\r\n type: \"move\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: annotation.x,\r\n originY: annotation.y,\r\n });\r\n };\r\n\r\n const beginResize = (event: ReactPointerEvent, handle: Handle) => {\r\n const frame = frameRef.current;\r\n const page = frame?.closest(\".rpe-page\");\r\n if (!frame || !page) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const pageRect = page.getBoundingClientRect();\r\n const width =\r\n annotation.width != null ? annotation.width * pageRect.width : frame.offsetWidth;\r\n const height =\r\n annotation.height != null ? annotation.height * pageRect.height : frame.offsetHeight;\r\n const left = annotation.x * pageRect.width;\r\n const top = annotation.y * pageRect.height;\r\n\r\n setDrag({\r\n type: \"resize\",\r\n handle,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n left,\r\n top,\r\n right: left + width,\r\n bottom: top + height,\r\n pageWidth: pageRect.width,\r\n pageHeight: pageRect.height,\r\n rotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const beginRotate = (event: ReactPointerEvent) => {\r\n const frame = frameRef.current;\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n if (isEditing) {\r\n onStopEdit();\r\n }\r\n\r\n const rect = frame.getBoundingClientRect();\r\n setDrag({\r\n type: \"rotate\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n centerX: rect.left + rect.width / 2,\r\n centerY: rect.top + rect.height / 2,\r\n originRotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const handleFramePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (\r\n target.closest(\".rpe-text-toolbar\") ||\r\n target.closest(\".rpe-text-handle\") ||\r\n target.closest(\".rpe-rotate-handle\")\r\n ) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n\r\n if (isEditing) {\r\n if (target.closest(\".rpe-text-content\")) {\r\n return;\r\n }\r\n onStopEdit();\r\n }\r\n\r\n beginMove(event);\r\n };\r\n\r\n const handleHandlePointerDown = (event: ReactPointerEvent<HTMLSpanElement>, handle: Handle) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (isEditing) {\r\n onStopEdit();\r\n }\r\n beginResize(event, handle);\r\n };\r\n\r\n const handleDoubleClick = (event: MouseEvent<HTMLDivElement>) => {\r\n event.stopPropagation();\r\n onStartEdit();\r\n };\r\n\r\n const handleInput = () => {\r\n onUpdate({ text: contentRef.current ? getContentEditableText(contentRef.current) : \"\" });\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onStopEdit();\r\n contentRef.current?.blur();\r\n }\r\n\r\n if (isEditing) {\r\n event.stopPropagation();\r\n }\r\n };\r\n\r\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\r\n if (!isEditing) {\r\n return;\r\n }\r\n\r\n if (\r\n keepEditingRef.current ||\r\n frameRef.current?.contains(event.relatedTarget as Node)\r\n ) {\r\n keepEditingRef.current = false;\r\n return;\r\n }\r\n\r\n onStopEdit();\r\n };\r\n\r\n const handleToolbarPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n event.stopPropagation();\r\n keepEditingRef.current = true;\r\n onSelect();\r\n\r\n const target = event.target as HTMLElement;\r\n if (!target.closest(\"input, textarea, select\")) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const commitFontSize = (raw: string) => {\r\n const next = parseFontSize(raw);\r\n if (next === null) {\r\n setFontSizeDraft(String(annotation.fontSize));\r\n return;\r\n }\r\n\r\n setFontSizeDraft(String(next));\r\n if (next !== annotation.fontSize) {\r\n onUpdate({ fontSize: next });\r\n }\r\n };\r\n\r\n const nudgeFont = (delta: number) => {\r\n const next = clamp(annotation.fontSize + delta, MIN_FONT, MAX_FONT);\r\n setFontSizeDraft(String(next));\r\n onUpdate({ fontSize: next });\r\n };\r\n\r\n const fontSizeDraftNumber = Number(fontSizeDraft);\r\n const fontSizeDraftValid =\r\n fontSizeDraft !== \"\" &&\r\n Number.isFinite(fontSizeDraftNumber) &&\r\n fontSizeDraftNumber >= MIN_FONT &&\r\n fontSizeDraftNumber <= MAX_FONT;\r\n\r\n const className = [\r\n \"rpe-text-frame\",\r\n isSelected ? \"rpe-text-frame-selected\" : \"\",\r\n isEditing ? \"rpe-text-frame-editing\" : \"\",\r\n hovered && !isSelected ? \"rpe-text-frame-hover\" : \"\",\r\n drag?.type === \"move\" ? \"rpe-text-frame-dragging\" : \"\",\r\n drag?.type === \"resize\" ? \"rpe-text-frame-resizing\" : \"\",\r\n drag?.type === \"rotate\" ? \"rpe-text-frame-rotating\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n ref={frameRef}\r\n className={className}\r\n style={\r\n {\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: annotation.width ? `${annotation.width * 100}%` : undefined,\r\n height: annotation.height ? `${annotation.height * 100}%` : undefined,\r\n cursor: isEditing ? \"text\" : drag?.type === \"move\" ? \"grabbing\" : \"move\",\r\n \"--rpe-rotation\": `${annotation.rotation ?? 0}deg`,\r\n } as CSSProperties\r\n }\r\n onPointerDown={handleFramePointerDown}\r\n onDoubleClick={handleDoubleClick}\r\n onPointerEnter={() => setHovered(true)}\r\n onPointerLeave={() => setHovered(false)}\r\n >\r\n {isSelected || isEditing ? (\r\n <div\r\n className={`rpe-text-toolbar${annotation.y < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={handleToolbarPointerDown}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className={`rpe-text-toolbar-button${annotation.fontWeight === \"bold\" ? \" rpe-text-toolbar-button-active\" : \"\"}`}\r\n aria-label=\"Bold\"\r\n onClick={() =>\r\n onUpdate({\r\n fontWeight: annotation.fontWeight === \"bold\" ? \"normal\" : \"bold\",\r\n })\r\n }\r\n >\r\n B\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`rpe-text-toolbar-button${annotation.fontStyle === \"italic\" ? \" rpe-text-toolbar-button-active\" : \"\"}`}\r\n aria-label=\"Italic\"\r\n onClick={() =>\r\n onUpdate({\r\n fontStyle: annotation.fontStyle === \"italic\" ? \"normal\" : \"italic\",\r\n })\r\n }\r\n >\r\n <span style={{ fontStyle: \"italic\" }}>I</span>\r\n </button>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Decrease font size\"\r\n disabled={annotation.fontSize <= MIN_FONT}\r\n onClick={() => nudgeFont(-1)}\r\n >\r\n <MinusIcon size={12} />\r\n </button>\r\n <input\r\n className={`rpe-text-toolbar-size${!fontSizeDraftValid ? \" rpe-text-toolbar-size-invalid\" : \"\"}`}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n aria-label={`Font size (${MIN_FONT}–${MAX_FONT})`}\r\n title={`Font size (${MIN_FONT}–${MAX_FONT})`}\r\n value={fontSizeDraft}\r\n onChange={(event) => {\r\n const value = event.target.value;\r\n if (value === \"\" || /^\\d{1,3}$/.test(value)) {\r\n setFontSizeDraft(value);\r\n }\r\n }}\r\n onBlur={() => commitFontSize(fontSizeDraft)}\r\n onKeyDown={(event) => {\r\n event.stopPropagation();\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n commitFontSize(fontSizeDraft);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n setFontSizeDraft(String(annotation.fontSize));\r\n event.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Increase font size\"\r\n disabled={annotation.fontSize >= MAX_FONT}\r\n onClick={() => nudgeFont(1)}\r\n >\r\n <PlusIcon size={12} />\r\n </button>\r\n <label className=\"rpe-text-toolbar-color\" title=\"Color\">\r\n <input\r\n type=\"color\"\r\n value={annotation.color}\r\n onChange={(event) => onUpdate({ color: event.target.value })}\r\n aria-label=\"Text color\"\r\n />\r\n </label>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete text\"\r\n onClick={onRemove}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n ref={contentRef}\r\n className=\"rpe-text-content\"\r\n data-placeholder=\"Type here\"\r\n contentEditable={isEditing}\r\n suppressContentEditableWarning\r\n onInput={handleInput}\r\n onKeyDown={handleKeyDown}\r\n onBlur={handleBlur}\r\n style={{\r\n fontFamily: annotation.fontFamily,\r\n fontSize: `${annotation.fontSize * scale}px`,\r\n color: annotation.color,\r\n fontWeight: annotation.fontWeight,\r\n fontStyle: annotation.fontStyle,\r\n textAlign: annotation.textAlign,\r\n }}\r\n />\r\n\r\n {isSelected ? (\r\n <>\r\n <span\r\n className=\"rpe-rotate-handle\"\r\n role=\"slider\"\r\n aria-label=\"Rotate text\"\r\n aria-valuemin={0}\r\n aria-valuemax={359}\r\n aria-valuenow={Math.round(normalizeDegrees(annotation.rotation ?? 0))}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (isEditing) {\r\n onStopEdit();\r\n }\r\n beginRotate(event);\r\n }}\r\n onDoubleClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onUpdate({ rotation: 0 });\r\n }}\r\n />\r\n {drag?.type === \"rotate\" ? (\r\n <span className=\"rpe-rotate-badge\">\r\n {Math.round(normalizeDegrees(annotation.rotation ?? 0))}°\r\n </span>\r\n ) : null}\r\n {HANDLES.map((handle) => (\r\n <span\r\n key={handle}\r\n className={`rpe-text-handle rpe-text-handle-${handle}`}\r\n data-handle={handle}\r\n onPointerDown={(event) => handleHandlePointerDown(event, handle)}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import type { PDFDocumentProxy, RenderTask } from \"pdfjs-dist\";\r\nimport { setLayerDimensions, TextLayer } from \"pdfjs-dist\";\r\nimport { useEffect, useRef, useState, type CSSProperties, type DragEvent } from \"react\";\r\nimport type { TextMatch } from \"../lib/findTextMatches\";\r\nimport { fileToImageDataUrl, toPendingImage } from \"../lib/imageUpload\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n PendingImage,\r\n PendingSignature,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n Tool,\r\n} from \"../types\";\r\nimport { DrawLayer } from \"./DrawLayer\";\r\nimport { HighlightLayer } from \"./HighlightLayer\";\r\nimport { ImageBox } from \"./ImageBox\";\r\nimport { SignatureBox } from \"./SignatureBox\";\r\nimport { TextBox } from \"./TextBox\";\r\n\r\nfunction placedImageSize(rect: DOMRect, aspect: number, defaultWidth = 0.4) {\r\n const safeAspect = Number.isFinite(aspect) && aspect > 0.05 ? aspect : 1.5;\r\n let width = defaultWidth;\r\n let height = (width * rect.width) / safeAspect / rect.height;\r\n if (height > 0.45) {\r\n height = 0.45;\r\n width = (height * rect.height * safeAspect) / rect.width;\r\n }\r\n return {\r\n width: Math.min(0.72, Math.max(0.1, width)),\r\n height: Math.min(0.7, Math.max(0.06, height)),\r\n };\r\n}\r\n\r\nconst LETTER_WIDTH = 612;\r\nconst LETTER_HEIGHT = 792;\r\n\r\nfunction estimatedPageSize(scale: number) {\r\n return {\r\n width: Math.floor(LETTER_WIDTH * scale),\r\n height: Math.floor(LETTER_HEIGHT * scale),\r\n };\r\n}\r\n\r\ntype PdfPageProps = {\r\n pdf: PDFDocumentProxy;\r\n pageNumber: number;\r\n scale: number;\r\n justAdded?: boolean;\r\n estimatedSize?: { width: number; height: number };\r\n searchMatches?: TextMatch[];\r\n currentSearchMatchIndex?: number;\r\n activeTool?: Tool;\r\n textAnnotations?: TextAnnotation[];\r\n selectedTextId?: string | null;\r\n editingTextId?: string | null;\r\n onAddTextAnnotation?: (annotation: Omit<TextAnnotation, \"id\">) => void;\r\n onUpdateTextAnnotation?: (id: string, changes: Partial<TextAnnotation>) => void;\r\n onSelectTextAnnotation?: (id: string | null) => void;\r\n onStartEditText?: (id: string) => void;\r\n onStopEditText?: () => void;\r\n onRemoveTextAnnotation?: (id: string) => void;\r\n drawStrokes?: DrawStroke[];\r\n selectedDrawId?: string | null;\r\n drawColor?: string;\r\n drawWidth?: number;\r\n onAddDrawStroke?: (stroke: Omit<DrawStroke, \"id\">) => void;\r\n onUpdateDrawStroke?: (id: string, changes: Partial<DrawStroke>) => void;\r\n onSelectDrawStroke?: (id: string | null) => void;\r\n onRemoveDrawStroke?: (id: string) => void;\r\n highlights?: HighlightAnnotation[];\r\n selectedHighlightId?: string | null;\r\n highlightColor?: string;\r\n onAddHighlight?: (highlight: Omit<HighlightAnnotation, \"id\">) => void;\r\n onUpdateHighlight?: (id: string, changes: Partial<HighlightAnnotation>) => void;\r\n onSelectHighlight?: (id: string | null) => void;\r\n onRemoveHighlight?: (id: string) => void;\r\n onHighlightColorChange?: (color: string) => void;\r\n signatures?: SignatureAnnotation[];\r\n selectedSignatureId?: string | null;\r\n pendingSignature?: PendingSignature | null;\r\n onAddSignature?: (annotation: Omit<SignatureAnnotation, \"id\">) => void;\r\n onUpdateSignature?: (id: string, changes: Partial<SignatureAnnotation>) => void;\r\n onSelectSignature?: (id: string | null) => void;\r\n onRemoveSignature?: (id: string) => void;\r\n images?: ImageAnnotation[];\r\n selectedImageId?: string | null;\r\n pendingImage?: PendingImage | null;\r\n onAddImage?: (annotation: Omit<ImageAnnotation, \"id\">) => void;\r\n onUpdateImage?: (id: string, changes: Partial<ImageAnnotation>) => void;\r\n onSelectImage?: (id: string | null) => void;\r\n onRemoveImage?: (id: string) => void;\r\n};\r\n\r\nexport function PdfPage({\r\n pdf,\r\n pageNumber,\r\n scale,\r\n justAdded = false,\r\n estimatedSize,\r\n searchMatches = [],\r\n currentSearchMatchIndex = -1,\r\n activeTool = \"select\",\r\n textAnnotations = [],\r\n selectedTextId = null,\r\n editingTextId = null,\r\n onAddTextAnnotation,\r\n onUpdateTextAnnotation,\r\n onSelectTextAnnotation,\r\n onStartEditText,\r\n onStopEditText,\r\n onRemoveTextAnnotation,\r\n drawStrokes = [],\r\n selectedDrawId = null,\r\n drawColor = \"#111827\",\r\n drawWidth = 2.5,\r\n onAddDrawStroke,\r\n onUpdateDrawStroke,\r\n onSelectDrawStroke,\r\n onRemoveDrawStroke,\r\n highlights = [],\r\n selectedHighlightId = null,\r\n highlightColor = \"#facc15\",\r\n onAddHighlight,\r\n onUpdateHighlight,\r\n onSelectHighlight,\r\n onRemoveHighlight,\r\n onHighlightColorChange,\r\n signatures = [],\r\n selectedSignatureId = null,\r\n pendingSignature = null,\r\n onAddSignature,\r\n onUpdateSignature,\r\n onSelectSignature,\r\n onRemoveSignature,\r\n images = [],\r\n selectedImageId = null,\r\n pendingImage = null,\r\n onAddImage,\r\n onUpdateImage,\r\n onSelectImage,\r\n onRemoveImage,\r\n}: PdfPageProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const textLayerRef = useRef<HTMLDivElement>(null);\r\n const [isVisible, setIsVisible] = useState(pageNumber <= 2 || justAdded);\r\n const [size, setSize] = useState(\r\n () => estimatedSize ?? estimatedPageSize(scale),\r\n );\r\n const [ghostPoint, setGhostPoint] = useState<{ x: number; y: number } | null>(null);\r\n\r\n useEffect(() => {\r\n const container = containerRef.current;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const root = container.closest(\".rpe-stage\");\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n setIsVisible(Boolean(entry?.isIntersecting));\r\n },\r\n { root, rootMargin: \"800px 0px\" },\r\n );\r\n\r\n observer.observe(container);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (justAdded) {\r\n setIsVisible(true);\r\n }\r\n }, [justAdded]);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n\r\n void pdf.getPage(pageNumber).then((page) => {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const viewport = page.getViewport({ scale });\r\n const width = Math.floor(viewport.width);\r\n const height = Math.floor(viewport.height);\r\n setSize((current) =>\r\n current.width === width && current.height === height\r\n ? current\r\n : { width, height },\r\n );\r\n });\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [pdf, pageNumber, scale]);\r\n\r\n const placeSignatureAt = (clientX: number, clientY: number) => {\r\n if (!pendingSignature || !onAddSignature) {\r\n return;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const aspect =\r\n Number.isFinite(pendingSignature.aspect) && pendingSignature.aspect > 0.05\r\n ? pendingSignature.aspect\r\n : 2.5;\r\n let width = 0.28;\r\n let height = (width * rect.width) / aspect / rect.height;\r\n if (height > 0.22) {\r\n height = 0.22;\r\n width = (height * rect.height * aspect) / rect.width;\r\n }\r\n width = Math.min(0.6, Math.max(0.08, width));\r\n height = Math.min(0.4, Math.max(0.03, height));\r\n\r\n const clickX = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\r\n const clickY = Math.max(0, Math.min(1, (clientY - rect.top) / rect.height));\r\n const x = Math.max(0, Math.min(1 - width, clickX - width / 2));\r\n const y = Math.max(0, Math.min(1 - height, clickY - height / 2));\r\n\r\n onAddSignature({\r\n pageNumber,\r\n x,\r\n y,\r\n width,\r\n height,\r\n src: pendingSignature.src,\r\n });\r\n };\r\n\r\n const placeImageAt = (clientX: number, clientY: number, source: PendingImage) => {\r\n if (!onAddImage) {\r\n return;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const { width, height } = placedImageSize(rect, source.aspect);\r\n const clickX = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\r\n const clickY = Math.max(0, Math.min(1, (clientY - rect.top) / rect.height));\r\n const x = Math.max(0, Math.min(1 - width, clickX - width / 2));\r\n const y = Math.max(0, Math.min(1 - height, clickY - height / 2));\r\n\r\n onAddImage({\r\n pageNumber,\r\n x,\r\n y,\r\n width,\r\n height,\r\n src: source.src,\r\n opacity: 1,\r\n });\r\n };\r\n\r\n const placingText = activeTool === \"text\";\r\n\r\n const placeTextAt = (clientX: number, clientY: number) => {\r\n if (!placingText || !onAddTextAnnotation) {\r\n return;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const x = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\r\n const y = Math.max(0, Math.min(1, (clientY - rect.top) / rect.height));\r\n\r\n onAddTextAnnotation({\r\n pageNumber,\r\n x,\r\n y,\r\n text: \"Text\",\r\n fontFamily: \"Arial\",\r\n fontSize: 16,\r\n color: \"#111827\",\r\n fontWeight: \"normal\",\r\n fontStyle: \"normal\",\r\n textAlign: \"left\",\r\n });\r\n };\r\n\r\n const pageAnnotations = textAnnotations.filter((a) => a.pageNumber === pageNumber);\r\n const pageSignatures = signatures.filter((item) => item.pageNumber === pageNumber);\r\n const pageImages = images.filter((item) => item.pageNumber === pageNumber);\r\n const placingSignature = activeTool === \"signature\" && Boolean(pendingSignature);\r\n const placingImage = activeTool === \"image\" && Boolean(pendingImage);\r\n\r\n useEffect(() => {\r\n if (!placingImage) {\r\n setGhostPoint(null);\r\n }\r\n }, [placingImage]);\r\n\r\n const acceptImageDrop = (event: DragEvent<HTMLDivElement>) => {\r\n if (![...event.dataTransfer.types].includes(\"Files\")) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.dataTransfer.dropEffect = \"copy\";\r\n };\r\n\r\n const handleImageDrop = (event: DragEvent<HTMLDivElement>) => {\r\n const file = event.dataTransfer.files[0];\r\n if (!file || !file.type.startsWith(\"image/\")) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const { clientX, clientY } = event;\r\n void fileToImageDataUrl(file)\r\n .then((src) => toPendingImage(src, file.name))\r\n .then((pending) => {\r\n placeImageAt(clientX, clientY, pending);\r\n })\r\n .catch(() => {\r\n // Invalid drops are ignored; the modal remains the primary path.\r\n });\r\n };\r\n\r\n const ghostBox = (() => {\r\n if (!placingImage || !pendingImage || !ghostPoint) {\r\n return null;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return null;\r\n }\r\n\r\n const { width, height } = placedImageSize(rect, pendingImage.aspect);\r\n return {\r\n width,\r\n height,\r\n x: Math.max(0, Math.min(1 - width, ghostPoint.x - width / 2)),\r\n y: Math.max(0, Math.min(1 - height, ghostPoint.y - height / 2)),\r\n };\r\n })();\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n const textLayerDiv = textLayerRef.current;\r\n if (!canvas || !textLayerDiv || !isVisible || size.width === 0) {\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let renderTask: RenderTask | undefined;\r\n let textLayer: TextLayer | undefined;\r\n\r\n void (async () => {\r\n const page = await pdf.getPage(pageNumber);\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const viewport = page.getViewport({ scale });\r\n const outputScale = window.devicePixelRatio || 1;\r\n const width = Math.floor(viewport.width * outputScale);\r\n const height = Math.floor(viewport.height * outputScale);\r\n const cssWidth = Math.floor(viewport.width);\r\n const cssHeight = Math.floor(viewport.height);\r\n const offscreen = document.createElement(\"canvas\");\r\n const offscreenContext = offscreen.getContext(\"2d\");\r\n\r\n if (!offscreenContext) {\r\n return;\r\n }\r\n\r\n offscreen.width = width;\r\n offscreen.height = height;\r\n offscreenContext.fillStyle = \"#ffffff\";\r\n offscreenContext.fillRect(0, 0, width, height);\r\n\r\n renderTask = page.render({\r\n canvas: offscreen,\r\n canvasContext: offscreenContext,\r\n viewport,\r\n transform:\r\n outputScale !== 1\r\n ? [outputScale, 0, 0, outputScale, 0, 0]\r\n : undefined,\r\n });\r\n\r\n try {\r\n await renderTask.promise;\r\n } catch (error) {\r\n if (!cancelled && error instanceof Error && error.name !== \"RenderingCancelledException\") {\r\n throw error;\r\n }\r\n }\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return;\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n canvas.style.width = `${cssWidth}px`;\r\n canvas.style.height = `${cssHeight}px`;\r\n context.drawImage(offscreen, 0, 0);\r\n\r\n // Render text layer\r\n textLayerDiv.replaceChildren();\r\n setLayerDimensions(textLayerDiv, viewport);\r\n textLayerDiv.style.setProperty(\"--scale-factor\", String(viewport.scale));\r\n textLayerDiv.style.setProperty(\"--total-scale-factor\", String(viewport.scale));\r\n\r\n textLayer = new TextLayer({\r\n textContentSource: page.streamTextContent(),\r\n container: textLayerDiv,\r\n viewport,\r\n });\r\n\r\n await textLayer.render();\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n renderTask?.cancel();\r\n textLayer?.cancel();\r\n };\r\n }, [isVisible, pdf, pageNumber, scale, size]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={`rpe-page${activeTool === \"highlight\" ? \" rpe-page-highlighting\" : \"\"}${placingText ? \" rpe-page-texting\" : \"\"}${placingSignature ? \" rpe-page-signing\" : \"\"}${placingImage ? \" rpe-page-imaging\" : \"\"}`}\r\n data-page-number={pageNumber}\r\n onDragEnter={acceptImageDrop}\r\n onDragOver={acceptImageDrop}\r\n onDrop={handleImageDrop}\r\n style={\r\n {\r\n ...(size.width > 0 ? { width: size.width, minHeight: size.height } : {}),\r\n \"--rpe-highlight-color\": highlightColor,\r\n } as CSSProperties\r\n }\r\n >\r\n {isVisible ? (\r\n <>\r\n <canvas ref={canvasRef} className=\"rpe-page-canvas\" />\r\n <HighlightLayer\r\n pageNumber={pageNumber}\r\n highlights={highlights.filter((item) => item.pageNumber === pageNumber)}\r\n selectedId={selectedHighlightId}\r\n activeTool={activeTool}\r\n color={highlightColor}\r\n onAdd={(highlight) => onAddHighlight?.(highlight)}\r\n onSelect={(id) => onSelectHighlight?.(id)}\r\n onUpdate={(id, changes) => onUpdateHighlight?.(id, changes)}\r\n onRemove={(id) => onRemoveHighlight?.(id)}\r\n onColorChange={(next) => onHighlightColorChange?.(next)}\r\n />\r\n <div ref={textLayerRef} className=\"textLayer\" />\r\n {searchMatches.length > 0 && (\r\n <div className=\"rpe-search-highlights\">\r\n {searchMatches.map((match, matchIndex) =>\r\n match.rects.map((rect, rectIndex) => (\r\n <div\r\n key={`${matchIndex}-${rectIndex}`}\r\n className={`rpe-search-highlight ${matchIndex === currentSearchMatchIndex ? \"rpe-search-highlight-current\" : \"\"}`}\r\n style={{\r\n left: `${rect.left * 100}%`,\r\n top: `${rect.top * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n }}\r\n />\r\n )),\r\n )}\r\n </div>\r\n )}\r\n {placingText ? (\r\n <div\r\n className=\"rpe-text-hit-layer\"\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n placeTextAt(event.clientX, event.clientY);\r\n }}\r\n />\r\n ) : null}\r\n {placingSignature ? (\r\n <div\r\n className=\"rpe-signature-hit-layer\"\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n placeSignatureAt(event.clientX, event.clientY);\r\n }}\r\n />\r\n ) : null}\r\n {placingImage && pendingImage ? (\r\n <div\r\n className=\"rpe-image-hit-layer\"\r\n onPointerMove={(event) => {\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n setGhostPoint({\r\n x: (event.clientX - rect.left) / rect.width,\r\n y: (event.clientY - rect.top) / rect.height,\r\n });\r\n }}\r\n onPointerLeave={() => setGhostPoint(null)}\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n placeImageAt(event.clientX, event.clientY, pendingImage);\r\n }}\r\n >\r\n {ghostBox ? (\r\n <div\r\n className=\"rpe-image-ghost\"\r\n style={{\r\n left: `${ghostBox.x * 100}%`,\r\n top: `${ghostBox.y * 100}%`,\r\n width: `${ghostBox.width * 100}%`,\r\n height: `${ghostBox.height * 100}%`,\r\n }}\r\n >\r\n <img src={pendingImage.src} alt=\"\" draggable={false} />\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n <DrawLayer\r\n pageNumber={pageNumber}\r\n scale={scale}\r\n strokes={drawStrokes.filter((stroke) => stroke.pageNumber === pageNumber)}\r\n selectedId={selectedDrawId}\r\n activeTool={activeTool}\r\n color={drawColor}\r\n width={drawWidth}\r\n onAdd={(stroke) => onAddDrawStroke?.(stroke)}\r\n onSelect={(id) => onSelectDrawStroke?.(id)}\r\n onUpdate={(id, changes) => onUpdateDrawStroke?.(id, changes)}\r\n onRemove={(id) => onRemoveDrawStroke?.(id)}\r\n />\r\n <div className=\"rpe-text-annotations\">\r\n {pageAnnotations.map((annotation) => (\r\n <TextBox\r\n key={annotation.id}\r\n annotation={annotation}\r\n scale={scale}\r\n isSelected={selectedTextId === annotation.id}\r\n isEditing={editingTextId === annotation.id}\r\n onUpdate={(changes) => onUpdateTextAnnotation?.(annotation.id, changes)}\r\n onSelect={() => onSelectTextAnnotation?.(annotation.id)}\r\n onStartEdit={() => onStartEditText?.(annotation.id)}\r\n onStopEdit={() => onStopEditText?.()}\r\n onRemove={() => onRemoveTextAnnotation?.(annotation.id)}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"rpe-signature-annotations\">\r\n {pageSignatures.map((annotation) => (\r\n <SignatureBox\r\n key={annotation.id}\r\n annotation={annotation}\r\n isSelected={selectedSignatureId === annotation.id}\r\n onUpdate={(changes) => onUpdateSignature?.(annotation.id, changes)}\r\n onSelect={() => onSelectSignature?.(annotation.id)}\r\n onRemove={() => onRemoveSignature?.(annotation.id)}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"rpe-image-annotations\">\r\n {pageImages.map((annotation) => (\r\n <ImageBox\r\n key={annotation.id}\r\n annotation={annotation}\r\n isSelected={selectedImageId === annotation.id}\r\n onUpdate={(changes) => onUpdateImage?.(annotation.id, changes)}\r\n onSelect={() => onSelectImage?.(annotation.id)}\r\n onRemove={() => onRemoveImage?.(annotation.id)}\r\n />\r\n ))}\r\n </div>\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { memo, useEffect, useRef, useState, type CSSProperties } from \"react\";\r\nimport { pointsToSvgPath } from \"../lib/drawPaths\";\r\nimport { TEXT_LINE_HEIGHT, TEXT_PADDING_X, TEXT_PADDING_Y } from \"../lib/textLayout\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\n\r\nconst THUMBNAIL_INK_SCALE = 0.32;\r\nconst MIN_THUMBNAIL_STROKE = 1.2;\r\n\r\nexport type ThumbnailOverlayProps = {\r\n strokes?: DrawStroke[];\r\n highlights?: HighlightAnnotation[];\r\n texts?: TextAnnotation[];\r\n signatures?: SignatureAnnotation[];\r\n images?: ImageAnnotation[];\r\n pageWidth?: number;\r\n pageHeight?: number;\r\n};\r\n\r\nfunction ThumbnailOverlayInner({\r\n strokes = [],\r\n highlights = [],\r\n texts = [],\r\n signatures = [],\r\n images = [],\r\n pageWidth = 612,\r\n}: ThumbnailOverlayProps) {\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n const [scale, setScale] = useState(160 / pageWidth);\r\n\r\n useEffect(() => {\r\n const node = overlayRef.current;\r\n if (!node || pageWidth <= 0) {\r\n return;\r\n }\r\n\r\n const update = () => {\r\n setScale(node.clientWidth / pageWidth);\r\n };\r\n update();\r\n\r\n const observer = new ResizeObserver(update);\r\n observer.observe(node);\r\n return () => observer.disconnect();\r\n }, [pageWidth]);\r\n\r\n if (\r\n strokes.length === 0 &&\r\n highlights.length === 0 &&\r\n texts.length === 0 &&\r\n signatures.length === 0 &&\r\n images.length === 0\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n ref={overlayRef}\r\n className=\"rpe-page-thumbnail-overlay\"\r\n style={{ \"--rpe-thumb-scale\": String(scale) } as CSSProperties}\r\n aria-hidden\r\n >\r\n {highlights.map((highlight) =>\r\n highlight.rects.map((rect, index) => (\r\n <div\r\n key={`${highlight.id}-${index}`}\r\n className=\"rpe-page-thumbnail-highlight\"\r\n style={{\r\n left: `${rect.left * 100}%`,\r\n top: `${rect.top * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n background: highlight.color,\r\n }}\r\n />\r\n )),\r\n )}\r\n\r\n {strokes.length > 0 ? (\r\n <svg\r\n className=\"rpe-page-thumbnail-draw\"\r\n viewBox=\"0 0 1 1\"\r\n preserveAspectRatio=\"none\"\r\n >\r\n {strokes.map((stroke) => {\r\n const path = pointsToSvgPath(stroke.points);\r\n if (!path) {\r\n return null;\r\n }\r\n\r\n return (\r\n <path\r\n key={stroke.id}\r\n d={path}\r\n fill=\"none\"\r\n stroke={stroke.color}\r\n strokeWidth={Math.max(\r\n MIN_THUMBNAIL_STROKE,\r\n stroke.width * THUMBNAIL_INK_SCALE,\r\n )}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n />\r\n );\r\n })}\r\n </svg>\r\n ) : null}\r\n\r\n {texts.map((annotation) => (\r\n <div\r\n key={annotation.id}\r\n className=\"rpe-page-thumbnail-text-item\"\r\n style={{\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: annotation.width ? `${annotation.width * 100}%` : undefined,\r\n height: annotation.height ? `${annotation.height * 100}%` : undefined,\r\n transform: annotation.rotation\r\n ? `rotate(${annotation.rotation}deg)`\r\n : undefined,\r\n }}\r\n >\r\n <div\r\n className=\"rpe-page-thumbnail-text-content\"\r\n style={{\r\n color: annotation.color,\r\n fontFamily: annotation.fontFamily,\r\n fontSize: annotation.fontSize,\r\n fontWeight: annotation.fontWeight,\r\n fontStyle: annotation.fontStyle,\r\n textAlign: annotation.textAlign,\r\n padding: `${TEXT_PADDING_Y}px ${TEXT_PADDING_X}px`,\r\n lineHeight: TEXT_LINE_HEIGHT,\r\n }}\r\n >\r\n {annotation.text}\r\n </div>\r\n </div>\r\n ))}\r\n\r\n {signatures.map((annotation) => (\r\n <img\r\n key={annotation.id}\r\n src={annotation.src}\r\n alt=\"\"\r\n className=\"rpe-page-thumbnail-media\"\r\n draggable={false}\r\n style={{\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n transform: annotation.rotation\r\n ? `rotate(${annotation.rotation}deg)`\r\n : undefined,\r\n }}\r\n />\r\n ))}\r\n\r\n {images.map((annotation) => (\r\n <img\r\n key={annotation.id}\r\n src={annotation.src}\r\n alt=\"\"\r\n className=\"rpe-page-thumbnail-media\"\r\n draggable={false}\r\n style={{\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n opacity: annotation.opacity ?? 1,\r\n transform: annotation.rotation\r\n ? `rotate(${annotation.rotation}deg)`\r\n : undefined,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport const ThumbnailOverlay = memo(ThumbnailOverlayInner);\r\n","import type { PDFDocumentProxy, RenderTask } from \"pdfjs-dist\";\r\nimport { memo, useEffect, useRef, useState } from \"react\";\r\nimport { ThumbnailOverlay, type ThumbnailOverlayProps } from \"./ThumbnailOverlay\";\r\n\r\nconst THUMBNAIL_WIDTH = 160;\r\nconst DEFAULT_ASPECT = 160 / 207;\r\n\r\ntype PageThumbnailProps = ThumbnailOverlayProps & {\r\n pdf: PDFDocumentProxy;\r\n pageNumber: number;\r\n};\r\n\r\nfunction PageThumbnailInner({\r\n pdf,\r\n pageNumber,\r\n strokes,\r\n highlights,\r\n texts,\r\n signatures,\r\n images,\r\n}: PageThumbnailProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const srcRef = useRef<string | null>(null);\r\n const [src, setSrc] = useState<string | null>(null);\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [fresh, setFresh] = useState(false);\r\n const [aspect, setAspect] = useState(DEFAULT_ASPECT);\r\n const [pageSize, setPageSize] = useState({ width: 612, height: 792 });\r\n\r\n useEffect(() => {\r\n const container = containerRef.current;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const root = container.closest(\".rpe-pages-list\");\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry?.isIntersecting) {\r\n setIsVisible(true);\r\n }\r\n },\r\n { root, rootMargin: \"120px 0px\" },\r\n );\r\n\r\n observer.observe(container);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isVisible) {\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let renderTask: RenderTask | undefined;\r\n\r\n void (async () => {\r\n const page = await pdf.getPage(pageNumber);\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const unscaled = page.getViewport({ scale: 1 });\r\n if (unscaled.width > 0 && unscaled.height > 0) {\r\n setAspect(unscaled.width / unscaled.height);\r\n setPageSize({ width: unscaled.width, height: unscaled.height });\r\n }\r\n const scale = THUMBNAIL_WIDTH / unscaled.width;\r\n const viewport = page.getViewport({ scale });\r\n const outputScale = window.devicePixelRatio || 1;\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n canvas.width = Math.floor(viewport.width * outputScale);\r\n canvas.height = Math.floor(viewport.height * outputScale);\r\n context.fillStyle = \"#ffffff\";\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n renderTask = page.render({\r\n canvas,\r\n canvasContext: context,\r\n viewport,\r\n intent: \"print\",\r\n transform:\r\n outputScale !== 1\r\n ? [outputScale, 0, 0, outputScale, 0, 0]\r\n : undefined,\r\n });\r\n\r\n try {\r\n await renderTask.promise;\r\n } catch (error) {\r\n if (\r\n cancelled ||\r\n (error instanceof Error && error.name === \"RenderingCancelledException\")\r\n ) {\r\n return;\r\n }\r\n throw error;\r\n }\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const blob = await new Promise<Blob | null>((resolve) => {\r\n canvas.toBlob(resolve, \"image/png\");\r\n });\r\n\r\n if (!blob || cancelled) {\r\n return;\r\n }\r\n\r\n const objectUrl = URL.createObjectURL(blob);\r\n if (cancelled) {\r\n URL.revokeObjectURL(objectUrl);\r\n return;\r\n }\r\n\r\n const previous = srcRef.current;\r\n srcRef.current = objectUrl;\r\n setFresh(!previous);\r\n setSrc(objectUrl);\r\n if (previous) {\r\n URL.revokeObjectURL(previous);\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n renderTask?.cancel();\r\n };\r\n }, [isVisible, pdf, pageNumber]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (srcRef.current) {\r\n URL.revokeObjectURL(srcRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className=\"rpe-page-thumbnail\"\r\n style={{ aspectRatio: `${aspect}` }}\r\n >\r\n {src ? (\r\n <div className=\"rpe-page-thumbnail-stack\">\r\n <img\r\n src={src}\r\n alt=\"\"\r\n className={\r\n fresh\r\n ? \"rpe-page-thumbnail-image rpe-page-thumbnail-image-in\"\r\n : \"rpe-page-thumbnail-image\"\r\n }\r\n draggable={false}\r\n />\r\n <ThumbnailOverlay\r\n strokes={strokes}\r\n highlights={highlights}\r\n texts={texts}\r\n signatures={signatures}\r\n images={images}\r\n pageWidth={pageSize.width}\r\n pageHeight={pageSize.height}\r\n />\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport const PageThumbnail = memo(PageThumbnailInner);\r\n","import {\r\n Fragment,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type KeyboardEvent,\r\n type PointerEvent,\r\n} from \"react\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SidebarApi,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\nimport { GripVerticalIcon, PlusIcon, TrashIcon } from \"./icons\";\r\nimport { PageThumbnail } from \"./PageThumbnail\";\r\n\r\nconst SIDEBAR_SCROLL_PADDING = 8;\r\nconst DRAG_THRESHOLD_PX = 6;\r\nconst AUTO_SCROLL_EDGE_PX = 48;\r\nconst REMOVE_ANIMATION_MS = 180;\r\nconst EMPTY_STROKES: DrawStroke[] = [];\r\nconst EMPTY_HIGHLIGHTS: HighlightAnnotation[] = [];\r\nconst EMPTY_TEXTS: TextAnnotation[] = [];\r\nconst EMPTY_SIGNATURES: SignatureAnnotation[] = [];\r\nconst EMPTY_IMAGES: ImageAnnotation[] = [];\r\n\r\ntype DragState = {\r\n pointerId: number;\r\n fromIndex: number;\r\n pageNumber: number;\r\n startX: number;\r\n startY: number;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n offsetX: number;\r\n offsetY: number;\r\n dropIndex: number;\r\n active: boolean;\r\n};\r\n\r\nfunction indexByPage<T extends { pageNumber: number }>(items: T[]) {\r\n const map = new Map<number, T[]>();\r\n for (const item of items) {\r\n const list = map.get(item.pageNumber);\r\n if (list) {\r\n list.push(item);\r\n } else {\r\n map.set(item.pageNumber, [item]);\r\n }\r\n }\r\n return map;\r\n}\r\n\r\nfunction computeDropIndex(\r\n clientY: number,\r\n fromIndex: number,\r\n cardEls: Array<HTMLElement | null>,\r\n) {\r\n let insertAmongOthers = 0;\r\n for (let index = 0; index < cardEls.length; index += 1) {\r\n if (index === fromIndex) {\r\n continue;\r\n }\r\n const rect = cardEls[index]?.getBoundingClientRect();\r\n if (rect && clientY > rect.top + rect.height / 2) {\r\n insertAmongOthers += 1;\r\n }\r\n }\r\n return insertAmongOthers;\r\n}\r\n\r\nfunction dropLineBeforeIndex(fromIndex: number, dropIndex: number) {\r\n if (fromIndex === dropIndex) {\r\n return -1;\r\n }\r\n return dropIndex > fromIndex ? dropIndex + 1 : dropIndex;\r\n}\r\n\r\nfunction InsertRail({\r\n afterPage,\r\n disabled,\r\n onInsert,\r\n}: {\r\n afterPage: number;\r\n disabled: boolean;\r\n onInsert: (afterPage: number) => void;\r\n}) {\r\n const label =\r\n afterPage === 0\r\n ? \"Insert blank page at the beginning\"\r\n : `Insert blank page after page ${afterPage}`;\r\n\r\n return (\r\n <div className=\"rpe-page-insert-rail\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-page-insert-rail-button\"\r\n disabled={disabled}\r\n aria-label={label}\r\n title={label}\r\n onClick={() => onInsert(afterPage)}\r\n >\r\n <PlusIcon size={12} />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport function PagesSidebar({\r\n pdf,\r\n page,\r\n pages,\r\n setPage,\r\n addBlankPage,\r\n deletePage,\r\n reorderPages,\r\n adding,\r\n mutating,\r\n canAdd,\r\n canDelete,\r\n canReorder,\r\n disabled,\r\n error,\r\n drawStrokes,\r\n highlights,\r\n textAnnotations,\r\n signatures,\r\n images,\r\n}: SidebarApi) {\r\n const listRef = useRef<HTMLDivElement>(null);\r\n const listInnerRef = useRef<HTMLDivElement>(null);\r\n const selectedCardRef = useRef<HTMLDivElement>(null);\r\n const cardRefs = useRef<Array<HTMLDivElement | null>>([]);\r\n const dragRef = useRef<DragState | null>(null);\r\n const suppressClickRef = useRef(false);\r\n const followSelectionRef = useRef(true);\r\n const programmaticListScrollRef = useRef(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n const [removingPage, setRemovingPage] = useState<number | null>(null);\r\n const insertDisabled = !canAdd;\r\n const addLabel = `Insert a blank page after page ${page}`;\r\n const strokesByPage = useMemo(() => indexByPage(drawStrokes), [drawStrokes]);\r\n const highlightsByPage = useMemo(() => indexByPage(highlights), [highlights]);\r\n const textsByPage = useMemo(() => indexByPage(textAnnotations), [textAnnotations]);\r\n const signaturesByPage = useMemo(() => indexByPage(signatures), [signatures]);\r\n const imagesByPage = useMemo(() => indexByPage(images), [images]);\r\n\r\n useEffect(() => {\r\n dragRef.current = drag;\r\n }, [drag]);\r\n\r\n useEffect(() => {\r\n cardRefs.current.length = pages.length;\r\n }, [pages.length]);\r\n\r\n useEffect(() => {\r\n followSelectionRef.current = true;\r\n }, [page]);\r\n\r\n useEffect(() => {\r\n const list = listRef.current;\r\n const listInner = listInnerRef.current;\r\n const card = selectedCardRef.current;\r\n if (!list || !listInner || !card || drag?.active) {\r\n return;\r\n }\r\n\r\n const keepSelectedVisible = () => {\r\n if (!followSelectionRef.current) {\r\n return;\r\n }\r\n\r\n const listRect = list.getBoundingClientRect();\r\n const cardRect = card.getBoundingClientRect();\r\n\r\n if (cardRect.top >= listRect.top && cardRect.bottom <= listRect.bottom) {\r\n return;\r\n }\r\n\r\n programmaticListScrollRef.current = true;\r\n list.scrollTop +=\r\n cardRect.top < listRect.top\r\n ? cardRect.top - listRect.top - SIDEBAR_SCROLL_PADDING\r\n : cardRect.bottom - listRect.bottom + SIDEBAR_SCROLL_PADDING;\r\n programmaticListScrollRef.current = false;\r\n };\r\n\r\n const onListScroll = () => {\r\n if (!programmaticListScrollRef.current) {\r\n followSelectionRef.current = false;\r\n }\r\n };\r\n\r\n keepSelectedVisible();\r\n\r\n list.addEventListener(\"scroll\", onListScroll, { passive: true });\r\n const observer = new ResizeObserver(keepSelectedVisible);\r\n observer.observe(listInner);\r\n return () => {\r\n list.removeEventListener(\"scroll\", onListScroll);\r\n observer.disconnect();\r\n };\r\n }, [page, drag?.active]);\r\n\r\n useEffect(() => {\r\n if (removingPage == null) {\r\n return;\r\n }\r\n\r\n const timeoutId = window.setTimeout(() => {\r\n deletePage(removingPage);\r\n setRemovingPage(null);\r\n }, REMOVE_ANIMATION_MS);\r\n\r\n return () => window.clearTimeout(timeoutId);\r\n }, [deletePage, removingPage]);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const applyPointer = (clientX: number, clientY: number) => {\r\n const current = dragRef.current;\r\n if (!current) {\r\n return;\r\n }\r\n\r\n const distance = Math.hypot(clientX - current.startX, clientY - current.startY);\r\n const active = current.active || distance >= DRAG_THRESHOLD_PX;\r\n const dropIndex = active\r\n ? computeDropIndex(clientY, current.fromIndex, cardRefs.current)\r\n : current.fromIndex;\r\n const next = {\r\n ...current,\r\n x: clientX,\r\n y: clientY,\r\n active,\r\n dropIndex,\r\n };\r\n dragRef.current = next;\r\n setDrag(next);\r\n };\r\n\r\n const finish = (commit: boolean) => {\r\n const current = dragRef.current;\r\n if (!current) {\r\n return;\r\n }\r\n\r\n dragRef.current = null;\r\n setDrag(null);\r\n\r\n if (!commit || !current.active) {\r\n return;\r\n }\r\n\r\n suppressClickRef.current = true;\r\n if (current.fromIndex !== current.dropIndex) {\r\n reorderPages(current.fromIndex + 1, current.dropIndex + 1);\r\n }\r\n };\r\n\r\n const onMove = (event: globalThis.PointerEvent) => {\r\n if (event.pointerId !== drag.pointerId) {\r\n return;\r\n }\r\n applyPointer(event.clientX, event.clientY);\r\n };\r\n\r\n const onUp = (event: globalThis.PointerEvent) => {\r\n if (event.pointerId !== drag.pointerId) {\r\n return;\r\n }\r\n finish(true);\r\n };\r\n\r\n const onCancel = (event: globalThis.PointerEvent) => {\r\n if (event.pointerId !== drag.pointerId) {\r\n return;\r\n }\r\n finish(false);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", onMove);\r\n window.addEventListener(\"pointerup\", onUp);\r\n window.addEventListener(\"pointercancel\", onCancel);\r\n\r\n let frame = 0;\r\n const tick = () => {\r\n const current = dragRef.current;\r\n const list = listRef.current;\r\n if (current?.active && list) {\r\n const rect = list.getBoundingClientRect();\r\n if (current.y < rect.top + AUTO_SCROLL_EDGE_PX) {\r\n list.scrollTop -= Math.max(4, (rect.top + AUTO_SCROLL_EDGE_PX - current.y) / 6);\r\n } else if (current.y > rect.bottom - AUTO_SCROLL_EDGE_PX) {\r\n list.scrollTop += Math.max(4, (current.y - (rect.bottom - AUTO_SCROLL_EDGE_PX)) / 6);\r\n }\r\n\r\n const dropIndex = computeDropIndex(current.y, current.fromIndex, cardRefs.current);\r\n if (dropIndex !== current.dropIndex) {\r\n const next = { ...current, dropIndex };\r\n dragRef.current = next;\r\n setDrag(next);\r\n }\r\n }\r\n frame = window.requestAnimationFrame(tick);\r\n };\r\n\r\n frame = window.requestAnimationFrame(tick);\r\n\r\n return () => {\r\n window.removeEventListener(\"pointermove\", onMove);\r\n window.removeEventListener(\"pointerup\", onUp);\r\n window.removeEventListener(\"pointercancel\", onCancel);\r\n window.cancelAnimationFrame(frame);\r\n };\r\n }, [drag?.pointerId, reorderPages]);\r\n\r\n const requestDelete = useCallback(\r\n (pageNumber: number) => {\r\n if (!canDelete || mutating || removingPage != null || disabled) {\r\n return;\r\n }\r\n setRemovingPage(pageNumber);\r\n },\r\n [canDelete, disabled, mutating, removingPage],\r\n );\r\n\r\n const updateDrag = (next: DragState) => {\r\n dragRef.current = next;\r\n setDrag(next);\r\n };\r\n\r\n const handleCardPointerDown = (\r\n event: PointerEvent<HTMLDivElement>,\r\n pageNumber: number,\r\n index: number,\r\n ) => {\r\n if (event.button !== 0 || !canReorder) {\r\n return;\r\n }\r\n if (event.target instanceof Element && event.target.closest(\".rpe-page-delete\")) {\r\n return;\r\n }\r\n\r\n const rect = event.currentTarget.getBoundingClientRect();\r\n updateDrag({\r\n pointerId: event.pointerId,\r\n fromIndex: index,\r\n pageNumber,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n x: event.clientX,\r\n y: event.clientY,\r\n width: rect.width,\r\n height: rect.height,\r\n offsetX: event.clientX - rect.left,\r\n offsetY: event.clientY - rect.top,\r\n dropIndex: index,\r\n active: false,\r\n });\r\n };\r\n\r\n const handleCardKeyDown = (\r\n event: KeyboardEvent<HTMLDivElement>,\r\n pageNumber: number,\r\n index: number,\r\n ) => {\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setPage(pageNumber);\r\n return;\r\n }\r\n\r\n if (!event.altKey || !canReorder) {\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowUp\" && index > 0) {\r\n event.preventDefault();\r\n reorderPages(index + 1, index);\r\n }\r\n\r\n if (event.key === \"ArrowDown\" && index < pages.length - 1) {\r\n event.preventDefault();\r\n reorderPages(index + 1, index + 2);\r\n }\r\n };\r\n\r\n const lineIndex =\r\n drag?.active ? dropLineBeforeIndex(drag.fromIndex, drag.dropIndex) : -1;\r\n\r\n return (\r\n <div\r\n className={\r\n drag?.active ? \"rpe-pages-sidebar rpe-pages-sidebar-dragging\" : \"rpe-pages-sidebar\"\r\n }\r\n >\r\n <div ref={listRef} className=\"rpe-pages-list\">\r\n <div ref={listInnerRef} className=\"rpe-pages-list-inner\">\r\n {pages.map((item) => {\r\n const pageNum = item.pageNumber;\r\n const index = item.index;\r\n const selected = item.selected;\r\n const added = item.justAdded;\r\n const dragging = Boolean(drag?.active && drag.pageNumber === pageNum);\r\n const removing = pageNum === removingPage;\r\n const displayLabel = item.label;\r\n const deleteLabel = canDelete\r\n ? `Delete page ${displayLabel}`\r\n : \"A PDF must have at least one page\";\r\n const className = [\r\n \"rpe-page-card\",\r\n selected ? \"rpe-page-card-selected\" : \"\",\r\n added ? \"rpe-page-card-added\" : \"\",\r\n dragging ? \"rpe-page-card-ghost\" : \"\",\r\n removing ? \"rpe-page-card-removing\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <Fragment key={pageNum}>\r\n <InsertRail\r\n afterPage={index === 0 ? 0 : (pages[index - 1]?.pageNumber ?? pageNum - 1)}\r\n disabled={insertDisabled || Boolean(drag?.active)}\r\n onInsert={addBlankPage}\r\n />\r\n {lineIndex === index ? <div className=\"rpe-page-drop-line\" /> : null}\r\n {dragging ? (\r\n <div\r\n className=\"rpe-page-card rpe-page-card-placeholder\"\r\n style={{ height: drag?.height }}\r\n aria-hidden=\"true\"\r\n />\r\n ) : null}\r\n <div\r\n ref={(node) => {\r\n cardRefs.current[index] = node;\r\n if (selected) {\r\n selectedCardRef.current = node;\r\n }\r\n }}\r\n role=\"button\"\r\n tabIndex={0}\r\n className={className}\r\n aria-current={selected ? \"page\" : undefined}\r\n aria-label={`Page ${displayLabel}`}\r\n aria-grabbed={dragging || undefined}\r\n aria-describedby=\"rpe-page-reorder-hint\"\r\n style={\r\n dragging\r\n ? {\r\n width: drag?.width,\r\n left: (drag?.x ?? 0) - (drag?.offsetX ?? 0),\r\n top: (drag?.y ?? 0) - (drag?.offsetY ?? 0),\r\n }\r\n : undefined\r\n }\r\n onPointerDown={(event) => handleCardPointerDown(event, pageNum, index)}\r\n onClick={() => {\r\n if (suppressClickRef.current) {\r\n suppressClickRef.current = false;\r\n return;\r\n }\r\n if (dragRef.current?.active) {\r\n return;\r\n }\r\n setPage(pageNum);\r\n }}\r\n onKeyDown={(event) => handleCardKeyDown(event, pageNum, index)}\r\n >\r\n <span className=\"rpe-page-grip\" aria-hidden=\"true\">\r\n <GripVerticalIcon size={12} />\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-page-delete\"\r\n disabled={!canDelete || mutating || !canAdd}\r\n aria-label={deleteLabel}\r\n title={deleteLabel}\r\n onPointerDown={(event) => event.stopPropagation()}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n requestDelete(pageNum);\r\n }}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n {pdf ? (\r\n <PageThumbnail\r\n pdf={pdf}\r\n pageNumber={pageNum}\r\n strokes={strokesByPage.get(pageNum) ?? EMPTY_STROKES}\r\n highlights={highlightsByPage.get(pageNum) ?? EMPTY_HIGHLIGHTS}\r\n texts={textsByPage.get(pageNum) ?? EMPTY_TEXTS}\r\n signatures={signaturesByPage.get(pageNum) ?? EMPTY_SIGNATURES}\r\n images={imagesByPage.get(pageNum) ?? EMPTY_IMAGES}\r\n />\r\n ) : (\r\n <div className=\"rpe-page-thumbnail\">\r\n <span className=\"rpe-page-thumbnail-text\">\r\n Page {displayLabel}\r\n </span>\r\n </div>\r\n )}\r\n <span className=\"rpe-page-label\">Page {displayLabel}</span>\r\n </div>\r\n </Fragment>\r\n );\r\n })}\r\n {lineIndex === pages.length ? (\r\n <div className=\"rpe-page-drop-line rpe-page-drop-line-end\" />\r\n ) : null}\r\n </div>\r\n </div>\r\n <p id=\"rpe-page-reorder-hint\" className=\"rpe-sr-only\">\r\n Drag to reorder. Use Alt plus arrow keys to move the focused page.\r\n </p>\r\n\r\n <div className=\"rpe-add-page\">\r\n <button\r\n type=\"button\"\r\n className={\r\n adding\r\n ? \"rpe-add-page-button rpe-add-page-button-busy\"\r\n : \"rpe-add-page-button\"\r\n }\r\n disabled={insertDisabled}\r\n aria-label={addLabel}\r\n title={addLabel}\r\n onClick={() => addBlankPage(page)}\r\n >\r\n {adding ? (\r\n <span className=\"rpe-add-page-spinner\" aria-hidden=\"true\" />\r\n ) : (\r\n <PlusIcon size={14} />\r\n )}\r\n {adding ? \"Adding page…\" : \"Add blank page\"}\r\n </button>\r\n {error ? (\r\n <p className=\"rpe-add-page-error\" role=\"alert\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { normalizeDegrees } from \"../lib/geometry\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n Tool,\r\n} from \"../types\";\r\nimport { RotateCcwIcon, RotateCwIcon, XIcon } from \"./icons\";\r\n\r\nconst HIGHLIGHT_SWATCHES = [\"#facc15\", \"#4ade80\", \"#38bdf8\", \"#f472b6\", \"#fb923c\"] as const;\r\n\r\nconst FONT_FAMILIES = [\r\n \"Arial\",\r\n \"Helvetica\",\r\n \"Times New Roman\",\r\n \"Georgia\",\r\n \"Courier New\",\r\n \"Verdana\",\r\n] as const;\r\n\r\nconst DRAW_WIDTHS = [\r\n { value: 1, label: \"Thin\" },\r\n { value: 2.5, label: \"Pen\" },\r\n { value: 5, label: \"Marker\" },\r\n { value: 8, label: \"Bold\" },\r\n] as const;\r\n\r\nfunction RotationField({\r\n value,\r\n onChange,\r\n}: {\r\n value?: number;\r\n onChange: (rotation: number) => void;\r\n}) {\r\n const rotation = Math.round(normalizeDegrees(value ?? 0));\r\n\r\n return (\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Rotation</span>\r\n <div className=\"rpe-properties-row\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-toggle\"\r\n aria-label=\"Rotate left 90 degrees\"\r\n onClick={() => onChange(normalizeDegrees(rotation - 90))}\r\n >\r\n <RotateCcwIcon size={14} />\r\n </button>\r\n <input\r\n className=\"rpe-properties-input\"\r\n type=\"number\"\r\n min={0}\r\n max={359}\r\n value={rotation}\r\n onChange={(event) => {\r\n const next = Number(event.target.value);\r\n if (!Number.isFinite(next)) {\r\n return;\r\n }\r\n onChange(normalizeDegrees(Math.round(next)));\r\n }}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-toggle\"\r\n aria-label=\"Rotate right 90 degrees\"\r\n onClick={() => onChange(normalizeDegrees(rotation + 90))}\r\n >\r\n <RotateCwIcon size={14} />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\ntype PropertiesPanelProps = {\r\n activeTool: Tool;\r\n selectedText: TextAnnotation | null;\r\n selectedStroke: DrawStroke | null;\r\n selectedHighlight: HighlightAnnotation | null;\r\n selectedSignature: SignatureAnnotation | null;\r\n selectedImage: ImageAnnotation | null;\r\n drawColor: string;\r\n drawWidth: number;\r\n highlightColor: string;\r\n onUpdateText: (id: string, changes: Partial<TextAnnotation>) => void;\r\n onUpdateSignature: (id: string, changes: Partial<SignatureAnnotation>) => void;\r\n onUpdateImage: (id: string, changes: Partial<ImageAnnotation>) => void;\r\n onReplaceImage: () => void;\r\n onUpdateStroke: (id: string, changes: Partial<DrawStroke>) => void;\r\n onDrawColorChange: (color: string) => void;\r\n onDrawWidthChange: (width: number) => void;\r\n onHighlightColorChange: (color: string) => void;\r\n onClose?: () => void;\r\n};\r\n\r\nexport function PropertiesPanel({\r\n activeTool,\r\n selectedText,\r\n selectedStroke,\r\n selectedHighlight,\r\n selectedSignature,\r\n selectedImage,\r\n drawColor,\r\n drawWidth,\r\n highlightColor,\r\n onUpdateText,\r\n onUpdateSignature,\r\n onUpdateImage,\r\n onReplaceImage,\r\n onUpdateStroke,\r\n onDrawColorChange,\r\n onDrawWidthChange,\r\n onHighlightColorChange,\r\n onClose,\r\n}: PropertiesPanelProps) {\r\n return (\r\n <div className=\"rpe-properties-panel\">\r\n <div className=\"rpe-properties-header\">\r\n <span>Properties</span>\r\n {onClose ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-close\"\r\n aria-label=\"Close properties\"\r\n onClick={onClose}\r\n >\r\n <XIcon />\r\n </button>\r\n ) : null}\r\n </div>\r\n {selectedText ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Content</span>\r\n <textarea\r\n className=\"rpe-properties-textarea\"\r\n rows={3}\r\n value={selectedText.text}\r\n onChange={(event) =>\r\n onUpdateText(selectedText.id, { text: event.target.value })\r\n }\r\n />\r\n </label>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Font</span>\r\n <select\r\n className=\"rpe-properties-select\"\r\n value={selectedText.fontFamily}\r\n onChange={(event) =>\r\n onUpdateText(selectedText.id, { fontFamily: event.target.value })\r\n }\r\n >\r\n {FONT_FAMILIES.map((family) => (\r\n <option key={family} value={family}>\r\n {family}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Size</span>\r\n <input\r\n className=\"rpe-properties-input\"\r\n type=\"number\"\r\n min={8}\r\n max={200}\r\n value={selectedText.fontSize}\r\n onChange={(event) => {\r\n const next = Number(event.target.value);\r\n if (!Number.isFinite(next)) {\r\n return;\r\n }\r\n onUpdateText(selectedText.id, {\r\n fontSize: Math.min(200, Math.max(8, Math.round(next))),\r\n });\r\n }}\r\n onBlur={(event) => {\r\n const next = Number(event.target.value);\r\n if (!Number.isFinite(next)) {\r\n onUpdateText(selectedText.id, { fontSize: 16 });\r\n return;\r\n }\r\n onUpdateText(selectedText.id, {\r\n fontSize: Math.min(200, Math.max(8, Math.round(next))),\r\n });\r\n }}\r\n />\r\n </label>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={selectedText.color}\r\n onChange={(event) =>\r\n onUpdateText(selectedText.id, { color: event.target.value })\r\n }\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Style</span>\r\n <div className=\"rpe-properties-row\">\r\n <button\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedText.fontWeight === \"bold\" ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedText.fontWeight === \"bold\"}\r\n aria-label=\"Bold\"\r\n onClick={() =>\r\n onUpdateText(selectedText.id, {\r\n fontWeight: selectedText.fontWeight === \"bold\" ? \"normal\" : \"bold\",\r\n })\r\n }\r\n >\r\n B\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedText.fontStyle === \"italic\" ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedText.fontStyle === \"italic\"}\r\n aria-label=\"Italic\"\r\n style={{ fontStyle: \"italic\" }}\r\n onClick={() =>\r\n onUpdateText(selectedText.id, {\r\n fontStyle: selectedText.fontStyle === \"italic\" ? \"normal\" : \"italic\",\r\n })\r\n }\r\n >\r\n I\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Alignment</span>\r\n <div className=\"rpe-properties-row\">\r\n {(\r\n [\r\n [\"left\", \"Left\"],\r\n [\"center\", \"Center\"],\r\n [\"right\", \"Right\"],\r\n ] as const\r\n ).map(([value, label]) => (\r\n <button\r\n key={value}\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedText.textAlign === value ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedText.textAlign === value}\r\n aria-label={label}\r\n onClick={() => onUpdateText(selectedText.id, { textAlign: value })}\r\n >\r\n {label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <RotationField\r\n value={selectedText.rotation}\r\n onChange={(rotation) => onUpdateText(selectedText.id, { rotation })}\r\n />\r\n </form>\r\n ) : selectedSignature ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Signature</span>\r\n <img\r\n className=\"rpe-properties-preview\"\r\n src={selectedSignature.src}\r\n alt=\"Selected signature\"\r\n />\r\n </div>\r\n <RotationField\r\n value={selectedSignature.rotation}\r\n onChange={(rotation) => onUpdateSignature(selectedSignature.id, { rotation })}\r\n />\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag to move, resize from the handles, or drag the top handle to rotate.\r\n </div>\r\n </form>\r\n ) : selectedImage ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Image</span>\r\n <div className=\"rpe-properties-image-preview\">\r\n <img\r\n className=\"rpe-properties-preview\"\r\n src={selectedImage.src}\r\n alt=\"Selected image\"\r\n style={{ opacity: selectedImage.opacity ?? 1 }}\r\n />\r\n </div>\r\n </div>\r\n <RotationField\r\n value={selectedImage.rotation}\r\n onChange={(rotation) => onUpdateImage(selectedImage.id, { rotation })}\r\n />\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">\r\n Opacity {Math.round((selectedImage.opacity ?? 1) * 100)}%\r\n </span>\r\n <input\r\n className=\"rpe-properties-range\"\r\n type=\"range\"\r\n min={20}\r\n max={100}\r\n step={5}\r\n value={Math.round((selectedImage.opacity ?? 1) * 100)}\r\n onChange={(event) =>\r\n onUpdateImage(selectedImage.id, {\r\n opacity: Number(event.target.value) / 100,\r\n })\r\n }\r\n />\r\n </label>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-replace\"\r\n onClick={onReplaceImage}\r\n >\r\n Replace image\r\n </button>\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag to move, resize from the handles, or drag the top handle to rotate.\r\n </div>\r\n </form>\r\n ) : selectedHighlight ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={selectedHighlight.color}\r\n onChange={(event) => onHighlightColorChange(event.target.value)}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Preset</span>\r\n <div className=\"rpe-properties-row\">\r\n {HIGHLIGHT_SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${selectedHighlight.color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={selectedHighlight.color.toLowerCase() === swatch}\r\n onClick={() => onHighlightColorChange(swatch)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag the highlight box to move it.\r\n </div>\r\n </form>\r\n ) : selectedStroke ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={selectedStroke.color}\r\n onChange={(event) => {\r\n onDrawColorChange(event.target.value);\r\n onUpdateStroke(selectedStroke.id, { color: event.target.value });\r\n }}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Thickness</span>\r\n <div className=\"rpe-properties-row\">\r\n {DRAW_WIDTHS.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedStroke.width === option.value ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedStroke.width === option.value}\r\n onClick={() => {\r\n onDrawWidthChange(option.value);\r\n onUpdateStroke(selectedStroke.id, { width: option.value });\r\n }}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag the drawing box to move it.\r\n </div>\r\n </form>\r\n ) : activeTool === \"draw\" ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Draw on the page. Choose color and thickness.\r\n </div>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={drawColor}\r\n onChange={(event) => onDrawColorChange(event.target.value)}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Thickness</span>\r\n <div className=\"rpe-properties-row\">\r\n {DRAW_WIDTHS.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n className={`rpe-properties-toggle${drawWidth === option.value ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={drawWidth === option.value}\r\n onClick={() => onDrawWidthChange(option.value)}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </form>\r\n ) : activeTool === \"highlight\" ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Select text to highlight.\r\n </div>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={highlightColor}\r\n onChange={(event) => onHighlightColorChange(event.target.value)}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Preset</span>\r\n <div className=\"rpe-properties-row\">\r\n {HIGHLIGHT_SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${highlightColor.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={highlightColor.toLowerCase() === swatch}\r\n onClick={() => onHighlightColorChange(swatch)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </form>\r\n ) : (\r\n <div className=\"rpe-properties-empty\">\r\n {activeTool === \"text\"\r\n ? \"Click on the page to add text.\"\r\n : activeTool === \"signature\"\r\n ? \"Choose a signature, then click a page to place it.\"\r\n : activeTool === \"image\"\r\n ? \"Choose an image, then click a page to place it.\"\r\n : \"Select a tool or annotation to edit properties.\"}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","export const SIGNATURE_INK_COLORS = [\"#111827\", \"#1e3a5f\", \"#1d4ed8\"] as const;\r\n\r\nexport const SIGNATURE_FONTS = [\r\n { id: \"great-vibes\", label: \"Elegant\", family: \"Great Vibes\", weight: 400 },\r\n { id: \"dancing-script\", label: \"Casual\", family: \"Dancing Script\", weight: 500 },\r\n { id: \"allura\", label: \"Formal\", family: \"Allura\", weight: 400 },\r\n { id: \"satisfy\", label: \"Friendly\", family: \"Satisfy\", weight: 400 },\r\n] as const;\r\n\r\nexport type SignatureFontId = (typeof SIGNATURE_FONTS)[number][\"id\"];\r\n\r\nexport type SavedSignature = {\r\n id: string;\r\n src: string;\r\n};\r\n\r\nconst FONT_STYLESHEET =\r\n \"https://fonts.googleapis.com/css2?family=Allura&family=Dancing+Script:wght@500&family=Great+Vibes&family=Satisfy&display=swap\";\r\nconst STORAGE_KEY = \"rpe-saved-signatures\";\r\nconst MAX_SAVED = 5;\r\nconst MAX_UPLOAD_BYTES = 4 * 1024 * 1024;\r\nconst MAX_IMAGE_EDGE = 1600;\r\n\r\nlet fontsPromise: Promise<void> | null = null;\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `sig-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function loadSignatureFonts(): Promise<void> {\r\n if (typeof document === \"undefined\") {\r\n return Promise.resolve();\r\n }\r\n\r\n if (fontsPromise) {\r\n return fontsPromise;\r\n }\r\n\r\n fontsPromise = (async () => {\r\n if (!document.querySelector(\"link[data-rpe-signature-fonts]\")) {\r\n const link = document.createElement(\"link\");\r\n link.rel = \"stylesheet\";\r\n link.href = FONT_STYLESHEET;\r\n link.dataset.rpeSignatureFonts = \"\";\r\n document.head.append(link);\r\n await new Promise<void>((resolve) => {\r\n link.onload = () => resolve();\r\n link.onerror = () => resolve();\r\n });\r\n }\r\n\r\n await Promise.all(\r\n SIGNATURE_FONTS.map((font) =>\r\n document.fonts.load(`${font.weight} 72px \"${font.family}\"`),\r\n ),\r\n );\r\n await document.fonts.ready;\r\n })();\r\n\r\n return fontsPromise;\r\n}\r\n\r\nexport function trimTransparentCanvas(\r\n source: HTMLCanvasElement,\r\n padding = 10,\r\n): HTMLCanvasElement | null {\r\n const context = source.getContext(\"2d\");\r\n if (!context) {\r\n return null;\r\n }\r\n\r\n const { width, height } = source;\r\n if (width === 0 || height === 0) {\r\n return null;\r\n }\r\n\r\n const { data } = context.getImageData(0, 0, width, height);\r\n let minX = width;\r\n let minY = height;\r\n let maxX = -1;\r\n let maxY = -1;\r\n\r\n for (let y = 0; y < height; y += 1) {\r\n for (let x = 0; x < width; x += 1) {\r\n if (data[(y * width + x) * 4 + 3] > 10) {\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n }\r\n }\r\n }\r\n\r\n if (maxX < 0) {\r\n return null;\r\n }\r\n\r\n minX = Math.max(0, minX - padding);\r\n minY = Math.max(0, minY - padding);\r\n maxX = Math.min(width - 1, maxX + padding);\r\n maxY = Math.min(height - 1, maxY + padding);\r\n\r\n const next = document.createElement(\"canvas\");\r\n next.width = maxX - minX + 1;\r\n next.height = maxY - minY + 1;\r\n const nextContext = next.getContext(\"2d\");\r\n if (!nextContext) {\r\n return null;\r\n }\r\n\r\n nextContext.drawImage(\r\n source,\r\n minX,\r\n minY,\r\n next.width,\r\n next.height,\r\n 0,\r\n 0,\r\n next.width,\r\n next.height,\r\n );\r\n return next;\r\n}\r\n\r\nexport function canvasToPngDataUrl(canvas: HTMLCanvasElement): string | null {\r\n const trimmed = trimTransparentCanvas(canvas);\r\n if (!trimmed) {\r\n return null;\r\n }\r\n\r\n return trimmed.toDataURL(\"image/png\");\r\n}\r\n\r\nfunction fitWithin(width: number, height: number, maxEdge: number) {\r\n const edge = Math.max(width, height);\r\n if (edge <= maxEdge) {\r\n return { width, height };\r\n }\r\n\r\n const scale = maxEdge / edge;\r\n return {\r\n width: Math.max(1, Math.round(width * scale)),\r\n height: Math.max(1, Math.round(height * scale)),\r\n };\r\n}\r\n\r\nexport async function fileToPngDataUrl(file: File): Promise<string> {\r\n if (file.size > MAX_UPLOAD_BYTES) {\r\n throw new Error(\"Image is too large (max 4 MB).\");\r\n }\r\n\r\n if (!file.type.startsWith(\"image/\")) {\r\n throw new Error(\"Choose a PNG, JPG, or WebP image.\");\r\n }\r\n\r\n const bitmap = await createImageBitmap(file);\r\n const size = fitWithin(bitmap.width, bitmap.height, MAX_IMAGE_EDGE);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = size.width;\r\n canvas.height = size.height;\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n bitmap.close();\r\n throw new Error(\"Could not read that image.\");\r\n }\r\n\r\n context.drawImage(bitmap, 0, 0, size.width, size.height);\r\n bitmap.close();\r\n return canvas.toDataURL(\"image/png\");\r\n}\r\n\r\nexport async function rasterizeTypedSignature(\r\n text: string,\r\n fontFamily: string,\r\n color: string,\r\n fontWeight = 400,\r\n): Promise<string | null> {\r\n const value = text.trim();\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n await loadSignatureFonts();\r\n const fontSize = 96;\r\n const font = `${fontWeight} ${fontSize}px \"${fontFamily}\", cursive`;\r\n\r\n try {\r\n await document.fonts.load(font);\r\n } catch {\r\n // Fall back to the generic cursive stack.\r\n }\r\n\r\n const measure = document.createElement(\"canvas\");\r\n const measureContext = measure.getContext(\"2d\");\r\n if (!measureContext) {\r\n return null;\r\n }\r\n\r\n measureContext.font = font;\r\n const metrics = measureContext.measureText(value);\r\n const ascent = metrics.actualBoundingBoxAscent || fontSize * 0.8;\r\n const descent = metrics.actualBoundingBoxDescent || fontSize * 0.3;\r\n const textWidth = Math.ceil(metrics.width);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(32, textWidth + Math.ceil(fontSize * 0.5));\r\n canvas.height = Math.max(32, Math.ceil(ascent + descent + fontSize * 0.4));\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return null;\r\n }\r\n\r\n context.font = font;\r\n context.fillStyle = color;\r\n context.textBaseline = \"alphabetic\";\r\n context.fillText(value, Math.ceil(fontSize * 0.2), Math.ceil(ascent + fontSize * 0.15));\r\n return canvasToPngDataUrl(canvas);\r\n}\r\n\r\nexport function measureDataUrl(src: string): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve({\r\n width: image.naturalWidth,\r\n height: image.naturalHeight,\r\n });\r\n };\r\n image.onerror = () => reject(new Error(\"Could not read that signature.\"));\r\n image.src = src;\r\n });\r\n}\r\n\r\nexport async function toPendingSignature(src: string) {\r\n const size = await measureDataUrl(src);\r\n return {\r\n src,\r\n aspect: size.width / Math.max(1, size.height),\r\n };\r\n}\r\n\r\nexport function readSavedSignatures(): SavedSignature[] {\r\n if (typeof localStorage === \"undefined\") {\r\n return [];\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n if (!raw) {\r\n return [];\r\n }\r\n\r\n const parsed: unknown = JSON.parse(raw);\r\n if (!Array.isArray(parsed)) {\r\n return [];\r\n }\r\n\r\n return parsed\r\n .filter(\r\n (item): item is SavedSignature =>\r\n Boolean(item) &&\r\n typeof item === \"object\" &&\r\n typeof (item as SavedSignature).id === \"string\" &&\r\n typeof (item as SavedSignature).src === \"string\",\r\n )\r\n .slice(0, MAX_SAVED);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function rememberSignature(src: string): SavedSignature[] {\r\n const items = readSavedSignatures().filter((item) => item.src !== src);\r\n items.unshift({ id: createId(), src });\r\n const next = items.slice(0, MAX_SAVED);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\r\n } catch {\r\n // Ignore quota errors; placement still works.\r\n }\r\n\r\n return next;\r\n}\r\n\r\nexport function forgetSignature(id: string): SavedSignature[] {\r\n const next = readSavedSignatures().filter((item) => item.id !== id);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\r\n } catch {\r\n // Ignore quota errors.\r\n }\r\n\r\n return next;\r\n}\r\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport { canvasToPngDataUrl } from \"../lib/signatureImage\";\r\n\r\ntype Point = { x: number; y: number };\r\ntype Stroke = { points: Point[]; color: string };\r\n\r\nexport type SignaturePadHandle = {\r\n hasInk: () => boolean;\r\n toPng: () => string | null;\r\n clear: () => void;\r\n undo: () => void;\r\n};\r\n\r\ntype SignaturePadProps = {\r\n color: string;\r\n onInkChange?: (hasInk: boolean) => void;\r\n};\r\n\r\nfunction pointFromEvent(event: { clientX: number; clientY: number }, node: HTMLElement): Point {\r\n const rect = node.getBoundingClientRect();\r\n return {\r\n x: event.clientX - rect.left,\r\n y: event.clientY - rect.top,\r\n };\r\n}\r\n\r\nfunction drawStroke(\r\n context: CanvasRenderingContext2D,\r\n stroke: Stroke,\r\n scale: number,\r\n) {\r\n if (stroke.points.length === 0) {\r\n return;\r\n }\r\n\r\n context.strokeStyle = stroke.color;\r\n context.lineWidth = 2.4 * scale;\r\n context.lineCap = \"round\";\r\n context.lineJoin = \"round\";\r\n context.beginPath();\r\n\r\n const first = stroke.points[0];\r\n context.moveTo(first.x * scale, first.y * scale);\r\n\r\n if (stroke.points.length === 1) {\r\n context.lineTo(first.x * scale + 0.01, first.y * scale);\r\n context.stroke();\r\n return;\r\n }\r\n\r\n for (let index = 1; index < stroke.points.length - 1; index += 1) {\r\n const current = stroke.points[index];\r\n const next = stroke.points[index + 1];\r\n const midX = ((current.x + next.x) / 2) * scale;\r\n const midY = ((current.y + next.y) / 2) * scale;\r\n context.quadraticCurveTo(current.x * scale, current.y * scale, midX, midY);\r\n }\r\n\r\n const last = stroke.points[stroke.points.length - 1];\r\n context.lineTo(last.x * scale, last.y * scale);\r\n context.stroke();\r\n}\r\n\r\nexport const SignaturePad = forwardRef<SignaturePadHandle, SignaturePadProps>(\r\n function SignaturePad({ color, onInkChange }, ref) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const strokesRef = useRef<Stroke[]>([]);\r\n const draftRef = useRef<Point[] | null>(null);\r\n const drawingRef = useRef(false);\r\n const colorRef = useRef(color);\r\n colorRef.current = color;\r\n const [hasInk, setHasInk] = useState(false);\r\n\r\n const notifyInk = (next: boolean) => {\r\n setHasInk(next);\r\n onInkChange?.(next);\r\n };\r\n\r\n const paint = () => {\r\n const canvas = canvasRef.current;\r\n const context = canvas?.getContext(\"2d\");\r\n if (!canvas || !context) {\r\n return;\r\n }\r\n\r\n const scale = window.devicePixelRatio || 1;\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (const stroke of strokesRef.current) {\r\n drawStroke(context, stroke, scale);\r\n }\r\n\r\n if (draftRef.current && draftRef.current.length > 0) {\r\n drawStroke(context, { points: draftRef.current, color: colorRef.current }, scale);\r\n }\r\n };\r\n\r\n const resizeCanvas = () => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n const rect = canvas.getBoundingClientRect();\r\n const scale = window.devicePixelRatio || 1;\r\n canvas.width = Math.max(1, Math.floor(rect.width * scale));\r\n canvas.height = Math.max(1, Math.floor(rect.height * scale));\r\n paint();\r\n };\r\n\r\n useEffect(() => {\r\n resizeCanvas();\r\n const observer = new ResizeObserver(resizeCanvas);\r\n if (canvasRef.current) {\r\n observer.observe(canvasRef.current);\r\n }\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n useImperativeHandle(ref, () => ({\r\n hasInk: () => strokesRef.current.length > 0,\r\n toPng: () => {\r\n const canvas = canvasRef.current;\r\n if (!canvas || strokesRef.current.length === 0) {\r\n return null;\r\n }\r\n\r\n draftRef.current = null;\r\n paint();\r\n return canvasToPngDataUrl(canvas);\r\n },\r\n clear: () => {\r\n strokesRef.current = [];\r\n draftRef.current = null;\r\n drawingRef.current = false;\r\n paint();\r\n notifyInk(false);\r\n },\r\n undo: () => {\r\n strokesRef.current = strokesRef.current.slice(0, -1);\r\n draftRef.current = null;\r\n paint();\r\n notifyInk(strokesRef.current.length > 0);\r\n },\r\n }));\r\n\r\n const handlePointerDown = (event: ReactPointerEvent<HTMLCanvasElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n drawingRef.current = true;\r\n draftRef.current = [pointFromEvent(event, canvas)];\r\n canvas.setPointerCapture(event.pointerId);\r\n paint();\r\n };\r\n\r\n const handlePointerMove = (event: ReactPointerEvent<HTMLCanvasElement>) => {\r\n if (!drawingRef.current || !canvasRef.current || !draftRef.current) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const next = pointFromEvent(event, canvasRef.current);\r\n const last = draftRef.current[draftRef.current.length - 1];\r\n if (!last || Math.hypot(next.x - last.x, next.y - last.y) >= 1.2) {\r\n draftRef.current = [...draftRef.current, next];\r\n paint();\r\n }\r\n };\r\n\r\n const finishStroke = (event: ReactPointerEvent<HTMLCanvasElement>) => {\r\n if (!drawingRef.current) {\r\n return;\r\n }\r\n\r\n drawingRef.current = false;\r\n if (canvasRef.current?.hasPointerCapture(event.pointerId)) {\r\n canvasRef.current.releasePointerCapture(event.pointerId);\r\n }\r\n\r\n const points = draftRef.current;\r\n draftRef.current = null;\r\n if (points && points.length > 0) {\r\n strokesRef.current = [\r\n ...strokesRef.current,\r\n { points, color: colorRef.current },\r\n ];\r\n notifyInk(true);\r\n }\r\n paint();\r\n };\r\n\r\n return (\r\n <canvas\r\n ref={canvasRef}\r\n className=\"rpe-signature-pad-canvas\"\r\n aria-label=\"Signature drawing pad\"\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={finishStroke}\r\n onPointerCancel={finishStroke}\r\n data-has-ink={hasInk ? \"true\" : \"false\"}\r\n />\r\n );\r\n },\r\n);\r\n","import { useEffect } from \"react\";\r\nimport { loadSignatureFonts } from \"../lib/signatureImage\";\r\n\r\ntype SignatureTypePreviewProps = {\r\n text: string;\r\n fontFamily: string;\r\n color: string;\r\n};\r\n\r\nexport function SignatureTypePreview({\r\n text,\r\n fontFamily,\r\n color,\r\n}: SignatureTypePreviewProps) {\r\n useEffect(() => {\r\n void loadSignatureFonts();\r\n }, []);\r\n\r\n const value = text.trim();\r\n\r\n return (\r\n <div className=\"rpe-signature-type-preview\" aria-hidden={!value}>\r\n <span\r\n className={`rpe-signature-type-text${value ? \"\" : \" rpe-signature-type-placeholder\"}`}\r\n style={{ fontFamily: `\"${fontFamily}\", cursive`, color }}\r\n >\r\n {value || \"Your name\"}\r\n </span>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type DragEvent, type KeyboardEvent } from \"react\";\r\nimport {\r\n fileToPngDataUrl,\r\n forgetSignature,\r\n loadSignatureFonts,\r\n rasterizeTypedSignature,\r\n readSavedSignatures,\r\n rememberSignature,\r\n SIGNATURE_FONTS,\r\n SIGNATURE_INK_COLORS,\r\n type SavedSignature,\r\n type SignatureFontId,\r\n} from \"../lib/signatureImage\";\r\nimport { SignaturePad, type SignaturePadHandle } from \"./SignaturePad\";\r\nimport { SignatureTypePreview } from \"./SignatureTypePreview\";\r\nimport { ImageIcon, PencilIcon, TypeIcon, Undo2Icon, UploadIcon, XIcon } from \"./icons\";\r\n\r\ntype Tab = \"draw\" | \"type\" | \"upload\";\r\n\r\ntype SignatureModalProps = {\r\n onApply: (src: string) => void;\r\n onClose: () => void;\r\n};\r\n\r\nexport function SignatureModal({ onApply, onClose }: SignatureModalProps) {\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const padRef = useRef<SignaturePadHandle>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const [tab, setTab] = useState<Tab>(\"draw\");\r\n const [color, setColor] = useState<string>(SIGNATURE_INK_COLORS[0]);\r\n const [typedName, setTypedName] = useState(\"\");\r\n const [fontId, setFontId] = useState<SignatureFontId>(SIGNATURE_FONTS[0].id);\r\n const [uploadSrc, setUploadSrc] = useState<string | null>(null);\r\n const [uploadError, setUploadError] = useState<string | null>(null);\r\n const [dragOver, setDragOver] = useState(false);\r\n const [hasInk, setHasInk] = useState(false);\r\n const [busy, setBusy] = useState(false);\r\n const [saved, setSaved] = useState<SavedSignature[]>(() => readSavedSignatures());\r\n\r\n const selectedFont =\r\n SIGNATURE_FONTS.find((font) => font.id === fontId) ?? SIGNATURE_FONTS[0];\r\n\r\n const canApply =\r\n !busy &&\r\n (tab === \"draw\"\r\n ? hasInk\r\n : tab === \"type\"\r\n ? typedName.trim().length > 0\r\n : Boolean(uploadSrc));\r\n\r\n useEffect(() => {\r\n void loadSignatureFonts();\r\n dialogRef.current?.focus();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onClose();\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKeyDown);\r\n return () => window.removeEventListener(\"keydown\", onKeyDown);\r\n }, [onClose]);\r\n\r\n const applySrc = (src: string) => {\r\n setSaved(rememberSignature(src));\r\n onApply(src);\r\n };\r\n\r\n const handleApply = async () => {\r\n if (busy) {\r\n return;\r\n }\r\n\r\n setBusy(true);\r\n setUploadError(null);\r\n\r\n try {\r\n if (tab === \"draw\") {\r\n const src = padRef.current?.toPng() ?? null;\r\n if (!src) {\r\n return;\r\n }\r\n applySrc(src);\r\n return;\r\n }\r\n\r\n if (tab === \"type\") {\r\n const src = await rasterizeTypedSignature(\r\n typedName,\r\n selectedFont.family,\r\n color,\r\n selectedFont.weight,\r\n );\r\n if (!src) {\r\n return;\r\n }\r\n applySrc(src);\r\n return;\r\n }\r\n\r\n if (uploadSrc) {\r\n applySrc(uploadSrc);\r\n }\r\n } catch (caught) {\r\n setUploadError(caught instanceof Error ? caught.message : \"Could not create signature.\");\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const handleDialogKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"Enter\" && (event.ctrlKey || event.metaKey) && canApply) {\r\n event.preventDefault();\r\n void handleApply();\r\n }\r\n };\r\n\r\n const readUpload = async (file: File | undefined) => {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n setUploadError(null);\r\n setBusy(true);\r\n try {\r\n const src = await fileToPngDataUrl(file);\r\n setUploadSrc(src);\r\n setTab(\"upload\");\r\n } catch (caught) {\r\n setUploadSrc(null);\r\n setUploadError(caught instanceof Error ? caught.message : \"Could not read that image.\");\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const handleDrop = (event: DragEvent<HTMLLabelElement>) => {\r\n event.preventDefault();\r\n setDragOver(false);\r\n void readUpload(event.dataTransfer.files[0]);\r\n };\r\n\r\n return (\r\n <div className=\"rpe-modal-backdrop\" onMouseDown={onClose}>\r\n <div\r\n ref={dialogRef}\r\n className=\"rpe-modal rpe-signature-modal\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"rpe-signature-title\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n onKeyDown={handleDialogKeyDown}\r\n >\r\n <div className=\"rpe-modal-header\">\r\n <div>\r\n <h2 id=\"rpe-signature-title\" className=\"rpe-modal-title\">\r\n Add signature\r\n </h2>\r\n <p className=\"rpe-modal-subtitle\">Draw, type, or upload a signature to place on the page.</p>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-close\"\r\n aria-label=\"Close\"\r\n onClick={onClose}\r\n >\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {saved.length > 0 ? (\r\n <div className=\"rpe-signature-saved\">\r\n <div className=\"rpe-signature-saved-label\">Saved</div>\r\n <div className=\"rpe-signature-saved-row\">\r\n {saved.map((item) => (\r\n <div key={item.id} className=\"rpe-signature-saved-item\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-signature-saved-button\"\r\n onClick={() => applySrc(item.src)}\r\n aria-label=\"Use saved signature\"\r\n >\r\n <img src={item.src} alt=\"\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-signature-saved-remove\"\r\n aria-label=\"Remove saved signature\"\r\n onClick={() => setSaved(forgetSignature(item.id))}\r\n >\r\n <XIcon size={12} />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"rpe-signature-tabs\" role=\"tablist\" aria-label=\"Signature method\">\r\n {(\r\n [\r\n [\"draw\", \"Draw\", PencilIcon],\r\n [\"type\", \"Type\", TypeIcon],\r\n [\"upload\", \"Upload\", ImageIcon],\r\n ] as const\r\n ).map(([id, label, Icon]) => (\r\n <button\r\n key={id}\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={tab === id}\r\n className={`rpe-signature-tab${tab === id ? \" rpe-signature-tab-active\" : \"\"}`}\r\n onClick={() => setTab(id)}\r\n >\r\n <Icon size={14} />\r\n {label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <div className=\"rpe-signature-body\" role=\"tabpanel\">\r\n {tab === \"draw\" ? (\r\n <div className=\"rpe-signature-draw\">\r\n <div className=\"rpe-signature-sheet\">\r\n <SignaturePad ref={padRef} color={color} onInkChange={setHasInk} />\r\n <div className=\"rpe-signature-baseline\" />\r\n {!hasInk ? (\r\n <div className=\"rpe-signature-sheet-hint\">Sign here</div>\r\n ) : null}\r\n </div>\r\n <div className=\"rpe-signature-controls\">\r\n <div className=\"rpe-ink-swatches\">\r\n {SIGNATURE_INK_COLORS.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Ink color ${swatch}`}\r\n aria-pressed={color.toLowerCase() === swatch}\r\n onClick={() => setColor(swatch)}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"rpe-signature-control-actions\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n disabled={!hasInk}\r\n onClick={() => padRef.current?.undo()}\r\n >\r\n <Undo2Icon size={14} />\r\n Undo\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n disabled={!hasInk}\r\n onClick={() => padRef.current?.clear()}\r\n >\r\n Clear\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {tab === \"type\" ? (\r\n <div className=\"rpe-signature-type\">\r\n <label className=\"rpe-signature-field\">\r\n <span className=\"rpe-signature-field-label\">Full name</span>\r\n <input\r\n className=\"rpe-signature-input\"\r\n type=\"text\"\r\n value={typedName}\r\n autoFocus\r\n placeholder=\"Jane Smith\"\r\n maxLength={80}\r\n onChange={(event) => setTypedName(event.target.value)}\r\n />\r\n </label>\r\n <div className=\"rpe-signature-sheet rpe-signature-sheet-type\">\r\n <SignatureTypePreview\r\n text={typedName}\r\n fontFamily={selectedFont.family}\r\n color={color}\r\n />\r\n <div className=\"rpe-signature-baseline\" />\r\n </div>\r\n <div className=\"rpe-signature-fonts\">\r\n {SIGNATURE_FONTS.map((font) => (\r\n <button\r\n key={font.id}\r\n type=\"button\"\r\n className={`rpe-signature-font${fontId === font.id ? \" rpe-signature-font-active\" : \"\"}`}\r\n aria-pressed={fontId === font.id}\r\n onClick={() => setFontId(font.id)}\r\n style={{ fontFamily: `\"${font.family}\", cursive` }}\r\n >\r\n {font.label}\r\n </button>\r\n ))}\r\n </div>\r\n <div className=\"rpe-ink-swatches\">\r\n {SIGNATURE_INK_COLORS.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Ink color ${swatch}`}\r\n aria-pressed={color.toLowerCase() === swatch}\r\n onClick={() => setColor(swatch)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {tab === \"upload\" ? (\r\n <div className=\"rpe-signature-upload\">\r\n <input\r\n ref={fileInputRef}\r\n id=\"rpe-signature-upload\"\r\n type=\"file\"\r\n accept=\"image/png,image/jpeg,image/webp\"\r\n className=\"rpe-signature-file\"\r\n onChange={(event) => {\r\n void readUpload(event.target.files?.[0]);\r\n event.currentTarget.value = \"\";\r\n }}\r\n />\r\n <label\r\n htmlFor=\"rpe-signature-upload\"\r\n className={`rpe-signature-dropzone${dragOver ? \" rpe-signature-dropzone-active\" : \"\"}${uploadSrc ? \" rpe-signature-dropzone-filled\" : \"\"}`}\r\n onDragEnter={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragOver={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragLeave={() => setDragOver(false)}\r\n onDrop={handleDrop}\r\n >\r\n {uploadSrc ? (\r\n <img src={uploadSrc} alt=\"Uploaded signature preview\" />\r\n ) : (\r\n <span className=\"rpe-signature-dropzone-copy\">\r\n <UploadIcon size={22} />\r\n <strong>Drop an image here</strong>\r\n <span>or click to browse PNG, JPG, or WebP</span>\r\n </span>\r\n )}\r\n </label>\r\n {uploadSrc ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n onClick={() => {\r\n setUploadSrc(null);\r\n fileInputRef.current?.click();\r\n }}\r\n >\r\n Replace image\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n {uploadError ? (\r\n <div className=\"rpe-signature-error\" role=\"alert\">\r\n {uploadError}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"rpe-modal-footer\">\r\n <button type=\"button\" className=\"rpe-modal-secondary\" onClick={onClose}>\r\n Cancel\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-primary\"\r\n disabled={!canApply}\r\n onClick={() => void handleApply()}\r\n >\r\n {busy ? \"Preparing…\" : \"Use signature\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","type SignatureToolbarProps = {\r\n onChange: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\nexport function SignatureToolbar({ onChange, onCancel }: SignatureToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar rpe-signature-place-toolbar\" role=\"toolbar\" aria-label=\"Place signature\">\r\n <span className=\"rpe-signature-place-hint\">Click a page to place your signature</span>\r\n <span className=\"rpe-ink-divider\" />\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onChange}>\r\n Change\r\n </button>\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onCancel}>\r\n Cancel\r\n </button>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent } from \"react\";\r\nimport type { ToolbarApi } from \"../types\";\r\nimport {\r\n CheckIcon,\r\n ChevronDownIcon,\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n DownloadIcon,\r\n FileTextIcon,\r\n HighlighterIcon,\r\n ImageIcon,\r\n MousePointer2Icon,\r\n PanelLeftIcon,\r\n PencilIcon,\r\n PenToolIcon,\r\n Redo2Icon,\r\n SearchIcon,\r\n TypeIcon,\r\n Undo2Icon,\r\n XIcon,\r\n ZoomInIcon,\r\n ZoomOutIcon,\r\n} from \"./icons\";\r\n\r\nconst ZOOM_PRESETS = [50, 75, 100, 125, 150, 200, 250, 300] as const;\r\n\r\nfunction parseZoomPercent(raw: string): number | null {\r\n const cleaned = raw.trim().replace(/%/g, \"\").replace(\",\", \".\");\r\n if (!cleaned) {\r\n return null;\r\n }\r\n\r\n const value = Number(cleaned);\r\n return Number.isFinite(value) ? value : null;\r\n}\r\n\r\nfunction parsePageNumber(raw: string): number | null {\r\n const cleaned = raw.trim();\r\n if (!cleaned || !/^\\d+$/.test(cleaned)) {\r\n return null;\r\n }\r\n\r\n const value = Number(cleaned);\r\n return Number.isInteger(value) && value > 0 ? value : null;\r\n}\r\n\r\nfunction zoomPresetPercents(minPercent: number, maxPercent: number): number[] {\r\n const values = new Set<number>([...ZOOM_PRESETS, minPercent, maxPercent]);\r\n return [...values]\r\n .filter((value) => value >= minPercent && value <= maxPercent)\r\n .sort((a, b) => a - b);\r\n}\r\n\r\nfunction sanitizeDocumentName(raw: string): string {\r\n return raw.replace(/[/\\\\?%*:|\"<>]/g, \"\").replace(/\\s+/g, \" \").trim();\r\n}\r\n\r\nfunction DocumentNameField({\r\n name,\r\n onNameChange,\r\n}: {\r\n name: string;\r\n onNameChange: (name: string) => void;\r\n}) {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const cancelRef = useRef(false);\r\n const [editing, setEditing] = useState(false);\r\n const [draft, setDraft] = useState(name);\r\n\r\n useEffect(() => {\r\n if (!editing) {\r\n setDraft(name);\r\n }\r\n }, [editing, name]);\r\n\r\n useLayoutEffect(() => {\r\n if (!editing) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n inputRef.current?.select();\r\n }, [editing]);\r\n\r\n const beginEdit = () => {\r\n cancelRef.current = false;\r\n setDraft(name);\r\n setEditing(true);\r\n };\r\n\r\n const commit = (raw: string) => {\r\n setEditing(false);\r\n const next = sanitizeDocumentName(raw);\r\n if (!next || next === name) {\r\n setDraft(name);\r\n return;\r\n }\r\n onNameChange(next);\r\n };\r\n\r\n const cancel = () => {\r\n cancelRef.current = true;\r\n setDraft(name);\r\n setEditing(false);\r\n };\r\n\r\n if (editing) {\r\n return (\r\n <div className=\"rpe-toolbar-brand rpe-toolbar-brand-editing\">\r\n <FileTextIcon />\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n className=\"rpe-toolbar-brand-input\"\r\n value={draft}\r\n aria-label=\"Document name\"\r\n autoComplete=\"off\"\r\n spellCheck={false}\r\n onChange={(event) => setDraft(event.target.value)}\r\n onBlur={(event) => {\r\n if (cancelRef.current) {\r\n cancelRef.current = false;\r\n setDraft(name);\r\n return;\r\n }\r\n commit(event.currentTarget.value);\r\n }}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n commit(event.currentTarget.value);\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cancel();\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-brand rpe-toolbar-brand-button\"\r\n title={`${name} — Click to rename`}\r\n aria-label={`Document name ${name}. Click to rename`}\r\n onClick={beginEdit}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\" || event.key === \"F2\") {\r\n event.preventDefault();\r\n beginEdit();\r\n }\r\n }}\r\n >\r\n <FileTextIcon />\r\n <span className=\"rpe-toolbar-brand-name\">{name}</span>\r\n </button>\r\n );\r\n}\r\n\r\nfunction toolClass(active: boolean) {\r\n return `rpe-tool-button${active ? \" rpe-tool-button-active\" : \"\"}`;\r\n}\r\n\r\nfunction ToolButtons({\r\n activeTool,\r\n disabled,\r\n setTool,\r\n}: {\r\n activeTool: ToolbarApi[\"activeTool\"];\r\n disabled: boolean;\r\n setTool: ToolbarApi[\"setTool\"];\r\n}) {\r\n return (\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"select\")}\r\n disabled={disabled}\r\n aria-label=\"Select\"\r\n title=\"Select\"\r\n onClick={() => setTool(\"select\")}\r\n >\r\n <MousePointer2Icon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"text\")}\r\n disabled={disabled}\r\n aria-label=\"Text\"\r\n title=\"Text\"\r\n onClick={() => setTool(activeTool === \"text\" ? \"select\" : \"text\")}\r\n >\r\n <TypeIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"draw\")}\r\n disabled={disabled}\r\n aria-label=\"Draw\"\r\n title=\"Draw\"\r\n onClick={() => setTool(activeTool === \"draw\" ? \"select\" : \"draw\")}\r\n >\r\n <PencilIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"highlight\")}\r\n disabled={disabled}\r\n aria-label=\"Highlight\"\r\n title=\"Highlight\"\r\n onClick={() => setTool(activeTool === \"highlight\" ? \"select\" : \"highlight\")}\r\n >\r\n <HighlighterIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"signature\")}\r\n disabled={disabled}\r\n aria-label=\"Signature\"\r\n title=\"Signature\"\r\n onClick={() => setTool(activeTool === \"signature\" ? \"select\" : \"signature\")}\r\n >\r\n <PenToolIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"image\")}\r\n disabled={disabled}\r\n aria-label=\"Image\"\r\n title=\"Image\"\r\n onClick={() => setTool(activeTool === \"image\" ? \"select\" : \"image\")}\r\n >\r\n <ImageIcon />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport type ToolbarProps = ToolbarApi & {\r\n compact?: boolean;\r\n showPagesButton?: boolean;\r\n pagesOpen?: boolean;\r\n onTogglePages?: () => void;\r\n};\r\n\r\nexport function Toolbar({\r\n page,\r\n numPages,\r\n scale,\r\n minScale,\r\n maxScale,\r\n disabled,\r\n activeTool,\r\n search,\r\n setPage,\r\n setScale,\r\n setTool,\r\n exportPdf,\r\n exporting,\r\n exportError,\r\n name,\r\n setName,\r\n canUndo,\r\n canRedo,\r\n undoLabel,\r\n redoLabel,\r\n undo,\r\n redo,\r\n shortcuts,\r\n zoomIn,\r\n zoomOut,\r\n prevPage,\r\n nextPage,\r\n compact = false,\r\n showPagesButton = false,\r\n pagesOpen = false,\r\n onTogglePages,\r\n}: ToolbarProps) {\r\n const findInputRef = useRef<HTMLInputElement>(null);\r\n const [searchOpen, setSearchOpen] = useState(false);\r\n\r\n const focusFind = () => {\r\n setSearchOpen(true);\r\n findInputRef.current?.focus();\r\n findInputRef.current?.select();\r\n };\r\n\r\n const closeFind = () => {\r\n search.clear();\r\n setSearchOpen(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (!compact) {\r\n setSearchOpen(false);\r\n }\r\n }, [compact]);\r\n\r\n const handleFindKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n if (event.shiftKey) {\r\n search.prev();\r\n } else {\r\n search.next();\r\n }\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeFind();\r\n event.currentTarget.blur();\r\n } else if (event.key === \"F3\") {\r\n event.preventDefault();\r\n if (event.shiftKey) {\r\n search.prev();\r\n } else {\r\n search.next();\r\n }\r\n }\r\n };\r\n\r\n const findControls = (\r\n <>\r\n <input\r\n ref={findInputRef}\r\n type=\"text\"\r\n className=\"rpe-find-input\"\r\n placeholder=\"Find in document\"\r\n value={search.query}\r\n disabled={disabled}\r\n onFocus={() => {\r\n if (compact) {\r\n setSearchOpen(true);\r\n }\r\n }}\r\n onChange={(e) => search.setQuery(e.target.value)}\r\n onKeyDown={handleFindKeyDown}\r\n aria-label=\"Find in document\"\r\n />\r\n {search.query ? (\r\n <>\r\n <span className=\"rpe-find-count\">\r\n {search.matchCount > 0\r\n ? `${search.currentIndex + 1} of ${search.matchCount}`\r\n : \"0\"}\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={search.matchCount === 0}\r\n onClick={search.prev}\r\n aria-label=\"Previous match\"\r\n title=\"Previous (Shift+Enter)\"\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={search.matchCount === 0}\r\n onClick={search.next}\r\n aria-label=\"Next match\"\r\n title=\"Next (Enter)\"\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n onClick={closeFind}\r\n aria-label=\"Clear search\"\r\n title=\"Clear (Escape)\"\r\n >\r\n <XIcon />\r\n </button>\r\n </>\r\n ) : compact ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n onClick={closeFind}\r\n aria-label=\"Close search\"\r\n title=\"Close search\"\r\n >\r\n <XIcon />\r\n </button>\r\n ) : null}\r\n </>\r\n );\r\n\r\n const toolbarClass = [\r\n \"rpe-toolbar\",\r\n compact ? \"rpe-toolbar-compact\" : \"\",\r\n compact && searchOpen ? \"rpe-toolbar-search-open\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <>\r\n <div className={toolbarClass} role=\"toolbar\" aria-label=\"PDF toolbar\">\r\n {compact && showPagesButton ? (\r\n <button\r\n type=\"button\"\r\n className={`rpe-toolbar-button${pagesOpen ? \" rpe-tool-button-active\" : \"\"}`}\r\n aria-label={pagesOpen ? \"Close pages\" : \"Open pages\"}\r\n aria-expanded={pagesOpen}\r\n aria-controls=\"rpe-pages-drawer\"\r\n title=\"Pages\"\r\n onClick={onTogglePages}\r\n >\r\n <PanelLeftIcon />\r\n </button>\r\n ) : null}\r\n\r\n <div className=\"rpe-toolbar-main\">\r\n <DocumentNameField name={name} onNameChange={setName} />\r\n\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={!canUndo}\r\n aria-label={canUndo && undoLabel ? `Undo ${undoLabel}` : \"Undo\"}\r\n aria-keyshortcuts={shortcuts.undoKeys}\r\n title={\r\n canUndo && undoLabel\r\n ? `Undo ${undoLabel} (${shortcuts.undo})`\r\n : `Undo (${shortcuts.undo})`\r\n }\r\n onClick={undo}\r\n >\r\n <Undo2Icon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={!canRedo}\r\n aria-label={canRedo && redoLabel ? `Redo ${redoLabel}` : \"Redo\"}\r\n aria-keyshortcuts={shortcuts.redoKeys}\r\n title={\r\n canRedo && redoLabel\r\n ? `Redo ${redoLabel} (${shortcuts.redo})`\r\n : `Redo (${shortcuts.redo})`\r\n }\r\n onClick={redo}\r\n >\r\n <Redo2Icon />\r\n </button>\r\n </div>\r\n\r\n {compact ? null : (\r\n <>\r\n <div className=\"rpe-toolbar-divider\" />\r\n <ToolButtons activeTool={activeTool} disabled={disabled} setTool={setTool} />\r\n <div className=\"rpe-toolbar-divider\" />\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled}\r\n aria-label=\"Find in document\"\r\n title=\"Find in document\"\r\n onClick={focusFind}\r\n >\r\n <SearchIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale <= minScale}\r\n onClick={zoomOut}\r\n aria-label=\"Zoom out\"\r\n title=\"Zoom out\"\r\n >\r\n <ZoomOutIcon />\r\n </button>\r\n <ZoomField\r\n scale={scale}\r\n minScale={minScale}\r\n maxScale={maxScale}\r\n disabled={disabled}\r\n onScaleChange={setScale}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale >= maxScale}\r\n onClick={zoomIn}\r\n aria-label=\"Zoom in\"\r\n title=\"Zoom in\"\r\n >\r\n <ZoomInIcon />\r\n </button>\r\n </div>\r\n <div className=\"rpe-toolbar-divider\" />\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page <= 1}\r\n onClick={prevPage}\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n <PageField page={page} numPages={numPages} disabled={disabled} onPageChange={setPage} />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page >= numPages}\r\n onClick={nextPage}\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n </div>\r\n <div className=\"rpe-toolbar-divider\" />\r\n </>\r\n )}\r\n\r\n {compact ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button rpe-toolbar-search-trigger\"\r\n disabled={disabled}\r\n aria-label=\"Find in document\"\r\n title=\"Find in document\"\r\n onClick={focusFind}\r\n >\r\n <SearchIcon />\r\n </button>\r\n ) : null}\r\n\r\n <div className=\"rpe-find-group\" inert={compact && !searchOpen ? true : undefined}>\r\n {findControls}\r\n </div>\r\n </div>\r\n\r\n <div className=\"rpe-export\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-export-button\"\r\n disabled={disabled || exporting}\r\n aria-label=\"Export PDF\"\r\n aria-busy={exporting}\r\n title={exportError?.message ?? \"Export PDF\"}\r\n onClick={exportPdf}\r\n >\r\n <DownloadIcon />\r\n <span className=\"rpe-export-label\">{exporting ? \"Exporting…\" : \"Export PDF\"}</span>\r\n </button>\r\n {exportError ? (\r\n <span className=\"rpe-export-error\" role=\"alert\">\r\n {exportError.message}\r\n </span>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n {compact ? (\r\n <div className=\"rpe-tool-dock\" role=\"toolbar\" aria-label=\"Editor tools\">\r\n <ToolButtons activeTool={activeTool} disabled={disabled} setTool={setTool} />\r\n <div className=\"rpe-toolbar-divider\" />\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page <= 1}\r\n onClick={prevPage}\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n <PageField\r\n page={page}\r\n numPages={numPages}\r\n disabled={disabled}\r\n onPageChange={setPage}\r\n compact\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page >= numPages}\r\n onClick={nextPage}\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n </div>\r\n <div className=\"rpe-toolbar-divider rpe-tool-dock-zoom-divider\" />\r\n <div className=\"rpe-toolbar-group rpe-tool-dock-zoom\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale <= minScale}\r\n onClick={zoomOut}\r\n aria-label=\"Zoom out\"\r\n title=\"Zoom out\"\r\n >\r\n <ZoomOutIcon />\r\n </button>\r\n <ZoomField\r\n scale={scale}\r\n minScale={minScale}\r\n maxScale={maxScale}\r\n disabled={disabled}\r\n onScaleChange={setScale}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale >= maxScale}\r\n onClick={zoomIn}\r\n aria-label=\"Zoom in\"\r\n title=\"Zoom in\"\r\n >\r\n <ZoomInIcon />\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n\r\nfunction PageField({\r\n page,\r\n numPages,\r\n disabled,\r\n onPageChange,\r\n compact = false,\r\n}: {\r\n page: number;\r\n numPages: number;\r\n disabled: boolean;\r\n onPageChange: (page: number) => void;\r\n compact?: boolean;\r\n}) {\r\n const [draft, setDraft] = useState<string | null>(null);\r\n const displayValue = draft ?? (numPages === 0 ? \"\" : String(page));\r\n const parsedDraft = draft === null ? page : parsePageNumber(draft);\r\n const pageInvalid =\r\n draft !== null && (parsedDraft === null || parsedDraft < 1 || parsedDraft > Math.max(numPages, 1));\r\n const inputWidth = `${Math.max(String(numPages || 1).length, 2) + 1}ch`;\r\n\r\n const applyPage = (nextPage: number) => {\r\n if (numPages === 0) {\r\n setDraft(null);\r\n return;\r\n }\r\n const next = Math.min(numPages, Math.max(1, nextPage));\r\n onPageChange(next);\r\n setDraft(null);\r\n };\r\n\r\n const commitDraft = (raw: string) => {\r\n const parsed = parsePageNumber(raw);\r\n setDraft(null);\r\n if (parsed === null) {\r\n return;\r\n }\r\n applyPage(parsed);\r\n };\r\n\r\n return (\r\n <div className=\"rpe-page-nav\" title={pageInvalid ? `Enter a page between 1 and ${numPages}` : \"Go to page\"}>\r\n {compact ? null : <span className=\"rpe-page-nav-label\">Page</span>}\r\n <div className={`rpe-page-field${pageInvalid ? \" rpe-page-field-invalid\" : \"\"}`}>\r\n <input\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n className=\"rpe-page-input\"\r\n style={{ width: inputWidth }}\r\n value={displayValue}\r\n disabled={disabled || numPages === 0}\r\n aria-label={`Page number, 1 to ${numPages || 1}`}\r\n aria-invalid={pageInvalid}\r\n autoComplete=\"off\"\r\n spellCheck={false}\r\n onFocus={(event) => event.currentTarget.select()}\r\n onChange={(event) => setDraft(event.target.value)}\r\n onBlur={(event) => commitDraft(event.currentTarget.value)}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n commitDraft(event.currentTarget.value);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n setDraft(null);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n applyPage(page + 1);\r\n } else if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n applyPage(page - 1);\r\n }\r\n }}\r\n />\r\n </div>\r\n <span className=\"rpe-page-nav-label\">of {numPages || \"—\"}</span>\r\n </div>\r\n );\r\n}\r\n\r\nfunction ZoomField({\r\n scale,\r\n minScale,\r\n maxScale,\r\n disabled,\r\n onScaleChange,\r\n}: {\r\n scale: number;\r\n minScale: number;\r\n maxScale: number;\r\n disabled: boolean;\r\n onScaleChange: (scale: number) => void;\r\n}) {\r\n const fieldRef = useRef<HTMLDivElement>(null);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const [draft, setDraft] = useState<string | null>(null);\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [menuPos, setMenuPos] = useState<{ top: number; left: number } | null>(null);\r\n const zoomPercent = Math.round(scale * 100);\r\n const minZoomPercent = Math.round(minScale * 100);\r\n const maxZoomPercent = Math.round(maxScale * 100);\r\n const displayValue = draft ?? String(zoomPercent);\r\n const parsedDraft = draft === null ? zoomPercent : parseZoomPercent(draft);\r\n const zoomInvalid =\r\n draft !== null &&\r\n (parsedDraft === null || parsedDraft < minZoomPercent || parsedDraft > maxZoomPercent);\r\n const presets = zoomPresetPercents(minZoomPercent, maxZoomPercent);\r\n const rangeLabel = `${minZoomPercent}–${maxZoomPercent}%`;\r\n\r\n const applyPercent = (percent: number) => {\r\n const next = Math.min(maxZoomPercent, Math.max(minZoomPercent, Math.round(percent)));\r\n onScaleChange(Number((next / 100).toFixed(2)));\r\n setDraft(null);\r\n setMenuOpen(false);\r\n };\r\n\r\n const commitDraft = (raw: string) => {\r\n const parsed = parseZoomPercent(raw);\r\n setDraft(null);\r\n if (parsed === null) {\r\n return;\r\n }\r\n applyPercent(parsed);\r\n };\r\n\r\n useLayoutEffect(() => {\r\n if (!menuOpen) {\r\n setMenuPos(null);\r\n return;\r\n }\r\n\r\n const field = fieldRef.current;\r\n const menu = menuRef.current;\r\n if (!field || !menu) {\r\n return;\r\n }\r\n\r\n const fieldRect = field.getBoundingClientRect();\r\n const { width, height } = menu.getBoundingClientRect();\r\n let top = fieldRect.bottom + 6;\r\n if (top + height > window.innerHeight - 8) {\r\n top = Math.max(8, fieldRect.top - height - 6);\r\n }\r\n\r\n let left = fieldRect.left;\r\n left = Math.max(8, Math.min(left, window.innerWidth - width - 8));\r\n setMenuPos({ top, left });\r\n }, [menuOpen, presets.length]);\r\n\r\n useEffect(() => {\r\n if (!menuOpen) {\r\n return;\r\n }\r\n\r\n const onPointerDown = (event: PointerEvent) => {\r\n const target = event.target as Node;\r\n if (fieldRef.current?.contains(target) || menuRef.current?.contains(target)) {\r\n return;\r\n }\r\n setMenuOpen(false);\r\n };\r\n\r\n const onViewportChange = () => setMenuOpen(false);\r\n\r\n document.addEventListener(\"pointerdown\", onPointerDown);\r\n window.addEventListener(\"resize\", onViewportChange);\r\n window.addEventListener(\"scroll\", onViewportChange, true);\r\n return () => {\r\n document.removeEventListener(\"pointerdown\", onPointerDown);\r\n window.removeEventListener(\"resize\", onViewportChange);\r\n window.removeEventListener(\"scroll\", onViewportChange, true);\r\n };\r\n }, [menuOpen]);\r\n\r\n return (\r\n <div\r\n ref={fieldRef}\r\n className={`rpe-zoom-field${zoomInvalid ? \" rpe-zoom-field-invalid\" : \"\"}${menuOpen ? \" rpe-zoom-field-open\" : \"\"}`}\r\n title={zoomInvalid ? `Enter a value between ${rangeLabel}` : `Zoom ${rangeLabel}`}\r\n >\r\n <input\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n className=\"rpe-zoom-input\"\r\n style={{ width: `${Math.max(String(maxZoomPercent).length, 3) + 1}ch` }}\r\n value={displayValue}\r\n disabled={disabled}\r\n aria-label={`Zoom percent, ${minZoomPercent} to ${maxZoomPercent}`}\r\n aria-invalid={zoomInvalid}\r\n autoComplete=\"off\"\r\n spellCheck={false}\r\n onFocus={(event) => {\r\n setDraft(String(zoomPercent));\r\n event.currentTarget.select();\r\n }}\r\n onChange={(event) => {\r\n setDraft(event.target.value);\r\n setMenuOpen(false);\r\n }}\r\n onBlur={(event) => commitDraft(event.currentTarget.value)}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n commitDraft(event.currentTarget.value);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n if (menuOpen) {\r\n setMenuOpen(false);\r\n return;\r\n }\r\n setDraft(null);\r\n } else if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n setMenuOpen(true);\r\n }\r\n }}\r\n />\r\n <span className=\"rpe-zoom-suffix\" aria-hidden=\"true\">\r\n %\r\n </span>\r\n <button\r\n type=\"button\"\r\n className={`rpe-zoom-chevron${menuOpen ? \" rpe-zoom-chevron-open\" : \"\"}`}\r\n disabled={disabled}\r\n aria-label=\"Zoom presets\"\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={menuOpen}\r\n onMouseDown={(event) => event.preventDefault()}\r\n onClick={() => setMenuOpen((open) => !open)}\r\n >\r\n <ChevronDownIcon size={14} />\r\n </button>\r\n {menuOpen ? (\r\n <div\r\n ref={menuRef}\r\n className=\"rpe-zoom-menu\"\r\n role=\"listbox\"\r\n aria-label=\"Zoom presets\"\r\n style={{\r\n top: menuPos?.top ?? 0,\r\n left: menuPos?.left ?? 0,\r\n visibility: menuPos ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n {presets.map((percent) => {\r\n const selected = percent === zoomPercent;\r\n return (\r\n <button\r\n key={percent}\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={selected}\r\n className={`rpe-zoom-option${selected ? \" rpe-zoom-option-active\" : \"\"}`}\r\n onMouseDown={(event) => event.preventDefault()}\r\n onClick={() => applyPercent(percent)}\r\n >\r\n <span>{percent}%</span>\r\n {selected ? <CheckIcon size={14} /> : null}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { useLayoutEffect, useState, type RefObject } from \"react\";\r\n\r\nexport const COMPACT_BREAKPOINT = 900;\r\n\r\nexport function useCompactLayout(rootRef: RefObject<HTMLElement | null>) {\r\n const [compact, setCompact] = useState(() =>\r\n typeof window !== \"undefined\" ? window.innerWidth < COMPACT_BREAKPOINT : false,\r\n );\r\n\r\n useLayoutEffect(() => {\r\n const root = rootRef.current;\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const update = () => {\r\n setCompact(root.getBoundingClientRect().width < COMPACT_BREAKPOINT);\r\n };\r\n\r\n update();\r\n\r\n const observer = new ResizeObserver(update);\r\n observer.observe(root);\r\n return () => observer.disconnect();\r\n }, [rootRef]);\r\n\r\n return compact;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { DrawStroke } from \"../types\";\r\n\r\nexport const DEFAULT_DRAW_COLOR = \"#111827\";\r\nexport const DEFAULT_DRAW_WIDTH = 2.5;\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `draw-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useDrawStrokes() {\r\n const [items, setItems] = useState<DrawStroke[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n const [color, setColorState] = useState(DEFAULT_DRAW_COLOR);\r\n const [width, setWidthState] = useState(DEFAULT_DRAW_WIDTH);\r\n\r\n const add = useCallback((stroke: Omit<DrawStroke, \"id\">) => {\r\n const item: DrawStroke = { ...stroke, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<DrawStroke>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const setColor = useCallback((next: string) => {\r\n setColorState(next);\r\n setSelectedId((currentId) => {\r\n if (currentId) {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === currentId ? { ...item, color: next } : item)),\r\n );\r\n }\r\n return currentId;\r\n });\r\n }, []);\r\n\r\n const setWidth = useCallback((next: number) => {\r\n setWidthState(next);\r\n setSelectedId((currentId) => {\r\n if (currentId) {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === currentId ? { ...item, width: next } : item)),\r\n );\r\n }\r\n return currentId;\r\n });\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: DrawStroke[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: DrawStroke[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n setColorState(DEFAULT_DRAW_COLOR);\r\n setWidthState(DEFAULT_DRAW_WIDTH);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n color,\r\n width,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n setColor,\r\n setWidth,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { useCallback, useRef, useState } from \"react\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\n\r\nexport const HISTORY_LIMIT = 100;\r\nconst COALESCE_MS = 500;\r\n\r\nexport type HistorySelection = {\r\n kind: \"text\" | \"draw\" | \"highlight\" | \"signature\" | \"image\";\r\n id: string;\r\n};\r\n\r\nexport type DocumentSnapshot = {\r\n texts: TextAnnotation[];\r\n drawings: DrawStroke[];\r\n highlights: HighlightAnnotation[];\r\n signatures: SignatureAnnotation[];\r\n images: ImageAnnotation[];\r\n documentName: string;\r\n workingBytes: Uint8Array | null;\r\n};\r\n\r\nexport type HistoryPush = {\r\n label: string;\r\n coalesceKey?: string;\r\n before: DocumentSnapshot;\r\n after: DocumentSnapshot;\r\n selection?: HistorySelection | null;\r\n page?: number;\r\n};\r\n\r\nexport type HistoryApply = {\r\n snapshot: DocumentSnapshot;\r\n selection?: HistorySelection | null;\r\n page?: number;\r\n};\r\n\r\ntype HistoryEntry = HistoryPush & {\r\n at: number;\r\n};\r\n\r\nexport function remapSnapshotItems<T extends { pageNumber: number }>(\r\n items: T[],\r\n fn: (pageNumber: number) => number | null,\r\n): T[] {\r\n const next: T[] = [];\r\n\r\n for (const item of items) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n next.push(pageNumber === item.pageNumber ? item : { ...item, pageNumber });\r\n }\r\n\r\n return next;\r\n}\r\n\r\nexport function remapSnapshot(\r\n snapshot: DocumentSnapshot,\r\n fn: (pageNumber: number) => number | null,\r\n): DocumentSnapshot {\r\n return {\r\n ...snapshot,\r\n texts: remapSnapshotItems(snapshot.texts, fn),\r\n drawings: remapSnapshotItems(snapshot.drawings, fn),\r\n highlights: remapSnapshotItems(snapshot.highlights, fn),\r\n signatures: remapSnapshotItems(snapshot.signatures, fn),\r\n images: remapSnapshotItems(snapshot.images, fn),\r\n };\r\n}\r\n\r\nexport function useEditorHistory(limit = HISTORY_LIMIT) {\r\n const pastRef = useRef<HistoryEntry[]>([]);\r\n const futureRef = useRef<HistoryEntry[]>([]);\r\n const applyingRef = useRef(false);\r\n const [revision, setRevision] = useState(0);\r\n\r\n const publish = useCallback(() => {\r\n setRevision((value) => value + 1);\r\n }, []);\r\n\r\n const push = useCallback(\r\n (entry: HistoryPush) => {\r\n if (applyingRef.current) {\r\n return;\r\n }\r\n\r\n const now = Date.now();\r\n const past = pastRef.current;\r\n const last = past[past.length - 1];\r\n\r\n if (\r\n last &&\r\n entry.coalesceKey &&\r\n last.coalesceKey === entry.coalesceKey &&\r\n now - last.at < COALESCE_MS\r\n ) {\r\n last.after = entry.after;\r\n last.at = now;\r\n if (entry.selection !== undefined) {\r\n last.selection = entry.selection;\r\n }\r\n if (entry.page !== undefined) {\r\n last.page = entry.page;\r\n }\r\n futureRef.current = [];\r\n publish();\r\n return;\r\n }\r\n\r\n past.push({ ...entry, at: now });\r\n if (past.length > limit) {\r\n past.splice(0, past.length - limit);\r\n }\r\n futureRef.current = [];\r\n publish();\r\n },\r\n [limit, publish],\r\n );\r\n\r\n const undo = useCallback((): HistoryApply | null => {\r\n const entry = pastRef.current.pop();\r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n futureRef.current.push(entry);\r\n publish();\r\n return {\r\n snapshot: entry.before,\r\n selection: entry.selection,\r\n page: entry.page,\r\n };\r\n }, [publish]);\r\n\r\n const redo = useCallback((): HistoryApply | null => {\r\n const entry = futureRef.current.pop();\r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n pastRef.current.push(entry);\r\n publish();\r\n return {\r\n snapshot: entry.after,\r\n selection: entry.selection,\r\n page: entry.page,\r\n };\r\n }, [publish]);\r\n\r\n const reset = useCallback(() => {\r\n pastRef.current = [];\r\n futureRef.current = [];\r\n applyingRef.current = false;\r\n publish();\r\n }, [publish]);\r\n\r\n const beginApply = useCallback(() => {\r\n applyingRef.current = true;\r\n }, []);\r\n\r\n const endApply = useCallback(() => {\r\n applyingRef.current = false;\r\n }, []);\r\n\r\n const last = pastRef.current[pastRef.current.length - 1];\r\n const next = futureRef.current[futureRef.current.length - 1];\r\n\r\n return {\r\n push,\r\n undo,\r\n redo,\r\n reset,\r\n beginApply,\r\n endApply,\r\n canUndo: pastRef.current.length > 0,\r\n canRedo: futureRef.current.length > 0,\r\n undoLabel: last?.label,\r\n redoLabel: next?.label,\r\n revision,\r\n };\r\n}\r\n","import type { ImageAnnotation, TextAnnotation } from \"../types\";\r\nimport {\r\n TEXT_LINE_HEIGHT,\r\n TEXT_PADDING_X,\r\n TEXT_PADDING_Y,\r\n textBoxFontCss,\r\n wrapMeasuredLines,\r\n} from \"./textLayout\";\r\n\r\nconst OUTPUT_SCALE = 2;\r\n\r\nfunction escapeXml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\");\r\n}\r\n\r\nfunction textToXhtml(text: string): string {\r\n return text.split(\"\\n\").map((line) => escapeXml(line)).join(\"<br />\");\r\n}\r\n\r\nfunction loadImage(src: string): Promise<HTMLImageElement> {\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => resolve(image);\r\n image.onerror = () => reject(new Error(\"Failed to rasterize text\"));\r\n image.src = src;\r\n });\r\n}\r\n\r\nfunction canvasToPng(canvas: HTMLCanvasElement): string {\r\n return canvas.toDataURL(\"image/png\");\r\n}\r\n\r\nfunction canvasHasInk(canvas: HTMLCanvasElement): boolean {\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return false;\r\n }\r\n\r\n const pixels = context.getImageData(0, 0, canvas.width, canvas.height).data;\r\n for (let index = 3; index < pixels.length; index += 4) {\r\n if (pixels[index] > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction drawWrappedText(\r\n context: CanvasRenderingContext2D,\r\n annotation: TextAnnotation,\r\n width: number,\r\n height: number,\r\n) {\r\n context.font = textBoxFontCss(annotation);\r\n context.fillStyle = annotation.color;\r\n context.textBaseline = \"alphabetic\";\r\n\r\n const maxTextWidth = Math.max(0, width - TEXT_PADDING_X * 2);\r\n const lines = wrapMeasuredLines(\r\n annotation.text,\r\n (value) => context.measureText(value).width,\r\n annotation.width !== undefined ? maxTextWidth : undefined,\r\n );\r\n const lineBox = annotation.fontSize * TEXT_LINE_HEIGHT;\r\n const sample = context.measureText(lines.find(Boolean) || \"M\");\r\n const ascent = sample.fontBoundingBoxAscent ?? sample.actualBoundingBoxAscent ?? annotation.fontSize * 0.8;\r\n const descent = sample.fontBoundingBoxDescent ?? sample.actualBoundingBoxDescent ?? annotation.fontSize * 0.2;\r\n const halfLeading = (lineBox - (ascent + descent)) / 2;\r\n\r\n context.beginPath();\r\n context.rect(0, 0, width, height);\r\n context.clip();\r\n\r\n lines.forEach((line, index) => {\r\n if (!line) {\r\n return;\r\n }\r\n\r\n const lineWidth = context.measureText(line).width;\r\n let x = TEXT_PADDING_X;\r\n if (annotation.textAlign === \"center\") {\r\n x = (width - lineWidth) / 2;\r\n } else if (annotation.textAlign === \"right\") {\r\n x = width - TEXT_PADDING_X - lineWidth;\r\n }\r\n\r\n const y = TEXT_PADDING_Y + halfLeading + ascent + index * lineBox;\r\n if (y - ascent > height) {\r\n return;\r\n }\r\n\r\n context.fillText(line, x, y);\r\n });\r\n}\r\n\r\nasync function rasterizeWithDom(\r\n annotation: TextAnnotation,\r\n width: number,\r\n height: number,\r\n): Promise<string> {\r\n const style = [\r\n `box-sizing:border-box`,\r\n `width:${width}px`,\r\n `height:${height}px`,\r\n `padding:${TEXT_PADDING_Y}px ${TEXT_PADDING_X}px`,\r\n `margin:0`,\r\n `font:${textBoxFontCss(annotation)}`,\r\n `line-height:${TEXT_LINE_HEIGHT}`,\r\n `color:${annotation.color}`,\r\n `text-align:${annotation.textAlign}`,\r\n `white-space:pre-wrap`,\r\n `overflow-wrap:break-word`,\r\n `word-break:break-word`,\r\n `overflow:hidden`,\r\n `background:transparent`,\r\n ].join(\";\");\r\n\r\n const svg =\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">` +\r\n `<foreignObject width=\"100%\" height=\"100%\">` +\r\n `<div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"${style}\">${textToXhtml(annotation.text)}</div>` +\r\n `</foreignObject></svg>`;\r\n\r\n const blob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\r\n const url = URL.createObjectURL(blob);\r\n\r\n try {\r\n const image = await loadImage(url);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(1, Math.round(width * OUTPUT_SCALE));\r\n canvas.height = Math.max(1, Math.round(height * OUTPUT_SCALE));\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n throw new Error(\"Failed to rasterize text\");\r\n }\r\n context.scale(OUTPUT_SCALE, OUTPUT_SCALE);\r\n context.drawImage(image, 0, 0, width, height);\r\n if (!canvasHasInk(canvas)) {\r\n throw new Error(\"Blank text raster\");\r\n }\r\n return canvasToPng(canvas);\r\n } finally {\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n\r\nfunction rasterizeWithCanvas(\r\n annotation: TextAnnotation,\r\n width: number,\r\n height: number,\r\n): string {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(1, Math.round(width * OUTPUT_SCALE));\r\n canvas.height = Math.max(1, Math.round(height * OUTPUT_SCALE));\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n throw new Error(\"Failed to rasterize text\");\r\n }\r\n context.scale(OUTPUT_SCALE, OUTPUT_SCALE);\r\n drawWrappedText(context, annotation, width, height);\r\n return canvasToPng(canvas);\r\n}\r\n\r\nfunction measureBox(\r\n annotation: TextAnnotation,\r\n pageWidth: number,\r\n pageHeight: number,\r\n): { width: number; height: number } {\r\n const width =\r\n annotation.width !== undefined\r\n ? annotation.width * pageWidth\r\n : (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return pageWidth;\r\n }\r\n context.font = textBoxFontCss(annotation);\r\n const lines = wrapMeasuredLines(annotation.text, (value) => context.measureText(value).width);\r\n const longest = Math.max(0, ...lines.map((line) => (line ? context.measureText(line).width : 0)));\r\n return longest + TEXT_PADDING_X * 2;\r\n })();\r\n\r\n const height =\r\n annotation.height !== undefined\r\n ? annotation.height * pageHeight\r\n : (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n const measure = context\r\n ? (value: string) => {\r\n context.font = textBoxFontCss(annotation);\r\n return context.measureText(value).width;\r\n }\r\n : () => 0;\r\n const lines = wrapMeasuredLines(\r\n annotation.text,\r\n measure,\r\n annotation.width !== undefined ? Math.max(0, width - TEXT_PADDING_X * 2) : undefined,\r\n );\r\n return TEXT_PADDING_Y * 2 + Math.max(lines.length, 1) * annotation.fontSize * TEXT_LINE_HEIGHT;\r\n })();\r\n\r\n return {\r\n width: Math.max(1, width),\r\n height: Math.max(1, height),\r\n };\r\n}\r\n\r\nexport async function rasterizeTextAnnotation(\r\n annotation: TextAnnotation,\r\n pageWidth: number,\r\n pageHeight: number,\r\n): Promise<ImageAnnotation | null> {\r\n if (!annotation.text) {\r\n return null;\r\n }\r\n\r\n const box = measureBox(annotation, pageWidth, pageHeight);\r\n\r\n if (typeof document !== \"undefined\" && document.fonts) {\r\n try {\r\n await document.fonts.load(textBoxFontCss(annotation));\r\n await document.fonts.ready;\r\n } catch {\r\n // Use fallback metrics if the browser font loader is unavailable.\r\n }\r\n }\r\n\r\n let src: string;\r\n try {\r\n src = await rasterizeWithDom(annotation, box.width, box.height);\r\n } catch {\r\n src = rasterizeWithCanvas(annotation, box.width, box.height);\r\n }\r\n\r\n return {\r\n id: `text-raster-${annotation.id}`,\r\n pageNumber: annotation.pageNumber,\r\n x: annotation.x,\r\n y: annotation.y,\r\n width: box.width / pageWidth,\r\n height: box.height / pageHeight,\r\n src,\r\n rotation: annotation.rotation,\r\n };\r\n}\r\n\r\nexport async function rasterizeTextAnnotations(\r\n annotations: TextAnnotation[],\r\n pageSizes: Array<{ width: number; height: number }>,\r\n): Promise<{ images: ImageAnnotation[]; leftover: TextAnnotation[] }> {\r\n const images: ImageAnnotation[] = [];\r\n const leftover: TextAnnotation[] = [];\r\n\r\n for (const annotation of annotations) {\r\n const size = pageSizes[annotation.pageNumber - 1];\r\n if (!size || size.width <= 0 || size.height <= 0) {\r\n leftover.push(annotation);\r\n continue;\r\n }\r\n\r\n try {\r\n const image = await rasterizeTextAnnotation(annotation, size.width, size.height);\r\n if (image) {\r\n images.push(image);\r\n }\r\n } catch {\r\n leftover.push(annotation);\r\n }\r\n }\r\n\r\n return { images, leftover };\r\n}\r\n\r\nexport async function getPdfPageSizes(\r\n pdf: { numPages: number; getPage: (pageNumber: number) => Promise<{ getViewport: (opts: { scale: number }) => { width: number; height: number } }> },\r\n): Promise<Array<{ width: number; height: number }>> {\r\n return Promise.all(\r\n Array.from({ length: pdf.numPages }, async (_, index) => {\r\n const page = await pdf.getPage(index + 1);\r\n const viewport = page.getViewport({ scale: 1 });\r\n return { width: viewport.width, height: viewport.height };\r\n }),\r\n );\r\n}\r\n","import type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\nimport type { ExportWorkerRequest, ExportWorkerResponse } from \"./exportPdf\";\r\n\r\nconst EXPORT_TIMEOUT_MS = 60_000;\r\n\r\nfunction createExportWorker(workerSrc?: string): Worker {\r\n if (workerSrc) {\r\n return new Worker(workerSrc, { type: \"module\" });\r\n }\r\n\r\n return new Worker(new URL(\"./exportPdf.worker.ts\", import.meta.url), {\r\n type: \"module\",\r\n });\r\n}\r\n\r\nasync function exportOnMainThread(\r\n pdfBytes: Uint8Array,\r\n annotations: TextAnnotation[],\r\n drawings: DrawStroke[],\r\n highlights: HighlightAnnotation[],\r\n signatures: SignatureAnnotation[],\r\n images: ImageAnnotation[],\r\n): Promise<Uint8Array> {\r\n const { exportPdfBytes } = await import(\"./exportPdf\");\r\n return exportPdfBytes(pdfBytes, annotations, drawings, highlights, signatures, images);\r\n}\r\n\r\nexport async function runExportPdf(\r\n pdfBytes: Uint8Array,\r\n annotations: TextAnnotation[],\r\n drawings: DrawStroke[] = [],\r\n highlights: HighlightAnnotation[] = [],\r\n signatures: SignatureAnnotation[] = [],\r\n images: ImageAnnotation[] = [],\r\n workerSrc?: string,\r\n): Promise<Uint8Array> {\r\n if (\r\n annotations.length === 0 &&\r\n drawings.length === 0 &&\r\n highlights.length === 0 &&\r\n signatures.length === 0 &&\r\n images.length === 0\r\n ) {\r\n return pdfBytes.slice();\r\n }\r\n\r\n let worker: Worker;\r\n try {\r\n worker = createExportWorker(workerSrc);\r\n } catch {\r\n return exportOnMainThread(pdfBytes, annotations, drawings, highlights, signatures, images);\r\n }\r\n\r\n return new Promise<Uint8Array>((resolve, reject) => {\r\n let settled = false;\r\n\r\n const finish = (callback: () => void) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n window.clearTimeout(timeoutId);\r\n worker.terminate();\r\n callback();\r\n };\r\n\r\n const timeoutId = window.setTimeout(() => {\r\n finish(() => reject(new Error(\"PDF export timed out\")));\r\n }, EXPORT_TIMEOUT_MS);\r\n\r\n worker.onmessage = (event: MessageEvent<ExportWorkerResponse>) => {\r\n const data = event.data;\r\n if (data?.type === \"success\") {\r\n finish(() => resolve(new Uint8Array(data.pdfBytes)));\r\n return;\r\n }\r\n\r\n finish(() =>\r\n reject(new Error(data?.message ?? \"Failed to export PDF\")),\r\n );\r\n };\r\n\r\n worker.onerror = () => {\r\n finish(() => {\r\n void exportOnMainThread(pdfBytes, annotations, drawings, highlights, signatures, images).then(resolve, reject);\r\n });\r\n };\r\n\r\n const transferable = pdfBytes.slice();\r\n const request: ExportWorkerRequest = {\r\n type: \"export\",\r\n pdfBytes: transferable.buffer,\r\n annotations,\r\n drawings,\r\n highlights,\r\n signatures,\r\n images,\r\n };\r\n worker.postMessage(request, [transferable.buffer]);\r\n });\r\n}\r\n","import { useCallback, useRef, useState } from \"react\";\r\nimport type { PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { getPdfPageSizes, rasterizeTextAnnotations } from \"../lib/rasterizeTextAnnotation\";\r\nimport { runExportPdf } from \"../lib/runExportPdf\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\n\r\ntype UseExportPdfOptions = {\r\n pdf: PDFDocumentProxy | null;\r\n annotations: TextAnnotation[];\r\n drawings?: DrawStroke[];\r\n highlights?: HighlightAnnotation[];\r\n signatures?: SignatureAnnotation[];\r\n images?: ImageAnnotation[];\r\n fileName: string;\r\n workerSrc?: string;\r\n onExport?: (blob: Blob) => void | Promise<void>;\r\n onExportError?: (error: Error) => void;\r\n};\r\n\r\nfunction downloadBlob(blob: Blob, fileName: string) {\r\n const url = URL.createObjectURL(blob);\r\n const anchor = document.createElement(\"a\");\r\n anchor.href = url;\r\n anchor.download = fileName;\r\n anchor.rel = \"noopener\";\r\n document.body.append(anchor);\r\n anchor.click();\r\n anchor.remove();\r\n window.setTimeout(() => URL.revokeObjectURL(url), 1_000);\r\n}\r\n\r\nexport function useExportPdf({\r\n pdf,\r\n annotations,\r\n drawings = [],\r\n highlights = [],\r\n signatures = [],\r\n images = [],\r\n fileName,\r\n workerSrc,\r\n onExport,\r\n onExportError,\r\n}: UseExportPdfOptions) {\r\n const [exporting, setExporting] = useState(false);\r\n const [exportError, setExportError] = useState<Error | null>(null);\r\n const exportingRef = useRef(false);\r\n\r\n const exportPdf = useCallback(async () => {\r\n if (!pdf || exportingRef.current) {\r\n return;\r\n }\r\n\r\n exportingRef.current = true;\r\n setExporting(true);\r\n setExportError(null);\r\n\r\n try {\r\n const data = await pdf.getData();\r\n const pageSizes = await getPdfPageSizes(pdf);\r\n const rasterized = await rasterizeTextAnnotations(annotations, pageSizes);\r\n const bytes = await runExportPdf(\r\n data,\r\n rasterized.leftover,\r\n drawings,\r\n highlights,\r\n signatures,\r\n [...images, ...rasterized.images],\r\n workerSrc,\r\n );\r\n const copy = new Uint8Array(bytes.byteLength);\r\n copy.set(bytes);\r\n const blob = new Blob([copy], { type: \"application/pdf\" });\r\n\r\n if (onExport) {\r\n await onExport(blob);\r\n } else {\r\n downloadBlob(blob, fileName);\r\n }\r\n } catch (caught) {\r\n const error =\r\n caught instanceof Error ? caught : new Error(\"Failed to export PDF\");\r\n setExportError(error);\r\n onExportError?.(error);\r\n } finally {\r\n exportingRef.current = false;\r\n setExporting(false);\r\n }\r\n }, [annotations, drawings, fileName, highlights, images, onExport, onExportError, pdf, signatures, workerSrc]);\r\n\r\n return { exportPdf, exporting, exportError };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { HighlightAnnotation } from \"../types\";\r\n\r\nexport const DEFAULT_HIGHLIGHT_COLOR = \"#facc15\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `highlight-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useHighlights() {\r\n const [items, setItems] = useState<HighlightAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n const [color, setColorState] = useState(DEFAULT_HIGHLIGHT_COLOR);\r\n\r\n const add = useCallback((highlight: Omit<HighlightAnnotation, \"id\">) => {\r\n const item: HighlightAnnotation = { ...highlight, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<HighlightAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const setColor = useCallback((next: string) => {\r\n setColorState(next);\r\n setSelectedId((currentId) => {\r\n if (currentId) {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === currentId ? { ...item, color: next } : item)),\r\n );\r\n }\r\n return currentId;\r\n });\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: HighlightAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: HighlightAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n setColorState(DEFAULT_HIGHLIGHT_COLOR);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n color,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n setColor,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { ImageAnnotation } from \"../types\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `image-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useImages() {\r\n const [items, setItems] = useState<ImageAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n\r\n const add = useCallback((annotation: Omit<ImageAnnotation, \"id\">) => {\r\n const item: ImageAnnotation = { ...annotation, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n setSelectedId(item.id);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<ImageAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: ImageAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: ImageAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { getDocument, type PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { configurePdfWorker } from \"../configureWorker\";\r\nimport type { PdfSource } from \"../types\";\r\n\r\nexport type PdfLoadPhase = \"downloading\" | \"loading\";\r\n\r\nfunction isNetworkSource(file: PdfSource): boolean {\r\n if (file instanceof URL) {\r\n return file.protocol === \"http:\" || file.protocol === \"https:\";\r\n }\r\n\r\n if (typeof file !== \"string\") {\r\n return false;\r\n }\r\n\r\n return !file.startsWith(\"data:\") && !file.startsWith(\"blob:\");\r\n}\r\n\r\nasync function downloadPdf(\r\n url: string,\r\n signal: AbortSignal,\r\n onProgress: (percent: number | null) => void,\r\n): Promise<Uint8Array> {\r\n const response = await fetch(url, { signal });\r\n if (!response.ok) {\r\n throw new Error(`Failed to download PDF (${response.status})`);\r\n }\r\n\r\n const body = response.body;\r\n if (!body) {\r\n return new Uint8Array(await response.arrayBuffer());\r\n }\r\n\r\n const encodedLength = Number(response.headers.get(\"content-length\"));\r\n const compressed = Boolean(response.headers.get(\"content-encoding\"));\r\n const total =\r\n !compressed && Number.isFinite(encodedLength) && encodedLength > 0 ? encodedLength : 0;\r\n const reader = body.getReader();\r\n const chunks: Uint8Array[] = [];\r\n let received = 0;\r\n let lastPercent: number | null | undefined;\r\n\r\n try {\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) {\r\n break;\r\n }\r\n if (!value) {\r\n continue;\r\n }\r\n\r\n chunks.push(value);\r\n received += value.byteLength;\r\n\r\n const percent =\r\n total > 0 && received <= total\r\n ? Math.min(100, Math.round((received / total) * 100))\r\n : null;\r\n if (percent !== lastPercent) {\r\n lastPercent = percent;\r\n onProgress(percent);\r\n }\r\n }\r\n } finally {\r\n try {\r\n reader.releaseLock();\r\n } catch {\r\n // The stream is already cancelled when the load is aborted.\r\n }\r\n }\r\n\r\n const data = new Uint8Array(received);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n data.set(chunk, offset);\r\n offset += chunk.byteLength;\r\n }\r\n return data;\r\n}\r\n\r\nasync function resolveSource(\r\n file: PdfSource,\r\n): Promise<{ url: string } | { data: ArrayBuffer | Uint8Array }> {\r\n if (typeof file === \"string\" || file instanceof URL) {\r\n return { url: String(file) };\r\n }\r\n\r\n if (file instanceof Blob) {\r\n return { data: new Uint8Array(await file.arrayBuffer()) };\r\n }\r\n\r\n if (file instanceof ArrayBuffer) {\r\n return { data: new Uint8Array(file.slice(0)) };\r\n }\r\n\r\n return { data: file.slice() };\r\n}\r\n\r\nexport function usePdfDocument(file?: PdfSource | null, workerSrc?: string) {\r\n const [pdf, setPdf] = useState<PDFDocumentProxy | null>(null);\r\n const [numPages, setNumPages] = useState(0);\r\n const [loading, setLoading] = useState(false);\r\n const [loadPhase, setLoadPhase] = useState<PdfLoadPhase>(\"loading\");\r\n const [downloadProgress, setDownloadProgress] = useState<number | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const displayedPdfRef = useRef<PDFDocumentProxy | null>(null);\r\n\r\n useEffect(() => {\r\n if (!file) {\r\n const previous = displayedPdfRef.current;\r\n displayedPdfRef.current = null;\r\n setPdf(null);\r\n setNumPages(0);\r\n setError(null);\r\n setLoading(false);\r\n setLoadPhase(\"loading\");\r\n setDownloadProgress(null);\r\n void previous?.destroy();\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let committed = false;\r\n let loadingTask: ReturnType<typeof getDocument> | undefined;\r\n const network = isNetworkSource(file);\r\n const abortController = new AbortController();\r\n\r\n setLoading(true);\r\n setError(null);\r\n setLoadPhase(network ? \"downloading\" : \"loading\");\r\n setDownloadProgress(null);\r\n configurePdfWorker(workerSrc);\r\n\r\n void (async () => {\r\n try {\r\n const source = network\r\n ? {\r\n data: await downloadPdf(String(file), abortController.signal, (percent) => {\r\n if (!cancelled) {\r\n setDownloadProgress(percent);\r\n }\r\n }),\r\n }\r\n : await resolveSource(file);\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n if (network) {\r\n setLoadPhase(\"loading\");\r\n setDownloadProgress(null);\r\n }\r\n\r\n loadingTask = getDocument(source);\r\n const incoming = await loadingTask.promise;\r\n\r\n if (cancelled) {\r\n await incoming.destroy();\r\n return;\r\n }\r\n\r\n committed = true;\r\n const previous = displayedPdfRef.current;\r\n displayedPdfRef.current = incoming;\r\n setPdf(incoming);\r\n setNumPages(incoming.numPages);\r\n if (previous && previous !== incoming) {\r\n void previous.destroy();\r\n }\r\n } catch (caught) {\r\n if (!cancelled) {\r\n setError(\r\n caught instanceof Error ? caught : new Error(\"Failed to load PDF\"),\r\n );\r\n }\r\n } finally {\r\n if (!cancelled) {\r\n setLoading(false);\r\n }\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n abortController.abort();\r\n if (!committed) {\r\n void loadingTask?.destroy();\r\n }\r\n };\r\n }, [file, workerSrc]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n const current = displayedPdfRef.current;\r\n displayedPdfRef.current = null;\r\n void current?.destroy();\r\n };\r\n }, []);\r\n\r\n return { pdf, numPages, loading, loadPhase, downloadProgress, error };\r\n}\r\n","import type { TextContent, TextItem } from \"pdfjs-dist/types/src/display/api\";\r\n\r\nexport type TextRect = {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n};\r\n\r\nexport type TextMatch = {\r\n pageNumber: number;\r\n rects: TextRect[];\r\n text: string;\r\n};\r\n\r\ntype PageTextData = {\r\n pageNumber: number;\r\n text: string;\r\n items: Array<{ str: string; transform: number[]; width: number; height: number }>;\r\n pageWidth: number;\r\n pageHeight: number;\r\n};\r\n\r\nfunction isTextItem(item: unknown): item is TextItem {\r\n return (\r\n typeof item === \"object\" &&\r\n item !== null &&\r\n \"str\" in item &&\r\n typeof (item as TextItem).str === \"string\"\r\n );\r\n}\r\n\r\nexport function extractPageTextData(\r\n pageNumber: number,\r\n textContent: TextContent,\r\n pageWidth: number,\r\n pageHeight: number,\r\n): PageTextData {\r\n const items = textContent.items\r\n .filter(isTextItem)\r\n .map((item) => ({\r\n str: item.str,\r\n transform: item.transform,\r\n width: item.width,\r\n height: item.height,\r\n }));\r\n\r\n const text = items.map((item) => item.str).join(\"\");\r\n\r\n return { pageNumber, text, items, pageWidth, pageHeight };\r\n}\r\n\r\nexport function findTextMatches(\r\n pagesData: PageTextData[],\r\n query: string,\r\n): TextMatch[] {\r\n if (!query.trim()) {\r\n return [];\r\n }\r\n\r\n const matches: TextMatch[] = [];\r\n const normalizedQuery = query.toLowerCase();\r\n\r\n for (const pageData of pagesData) {\r\n const normalizedText = pageData.text.toLowerCase();\r\n let searchIndex = 0;\r\n\r\n while (true) {\r\n const matchIndex = normalizedText.indexOf(normalizedQuery, searchIndex);\r\n if (matchIndex === -1) {\r\n break;\r\n }\r\n\r\n const matchEnd = matchIndex + query.length;\r\n const rects = computeRectsForRange(\r\n pageData,\r\n matchIndex,\r\n matchEnd,\r\n );\r\n\r\n if (rects.length > 0) {\r\n matches.push({\r\n pageNumber: pageData.pageNumber,\r\n rects,\r\n text: pageData.text.substring(matchIndex, matchEnd),\r\n });\r\n }\r\n\r\n searchIndex = matchIndex + 1;\r\n }\r\n }\r\n\r\n return matches;\r\n}\r\n\r\nfunction computeRectsForRange(\r\n pageData: PageTextData,\r\n startChar: number,\r\n endChar: number,\r\n): TextRect[] {\r\n const rects: TextRect[] = [];\r\n let charPos = 0;\r\n\r\n for (const item of pageData.items) {\r\n const itemStart = charPos;\r\n const itemEnd = charPos + item.str.length;\r\n\r\n // Check if this item overlaps with the match range\r\n if (itemEnd > startChar && itemStart < endChar) {\r\n const overlapStart = Math.max(0, startChar - itemStart);\r\n const overlapEnd = Math.min(item.str.length, endChar - itemStart);\r\n const overlapLength = overlapEnd - overlapStart;\r\n\r\n // Transform is [a, b, c, d, e, f] where e,f are position (baseline)\r\n const [, , , , x, y] = item.transform;\r\n const itemWidth = item.width;\r\n const itemHeight = item.height;\r\n\r\n // Compute character position within the text item\r\n // Note: This assumes uniform character spacing, which is an approximation\r\n // For better accuracy, we'd need per-character metrics which aren't available\r\n const totalChars = item.str.length || 1; // Avoid division by zero\r\n const startFraction = overlapStart / totalChars;\r\n const widthFraction = overlapLength / totalChars;\r\n\r\n // PDF coordinates: origin at bottom-left, y is baseline\r\n // CSS coordinates: origin at top-left\r\n // The text box extends from (x, y) baseline upward by height\r\n const left = x / pageData.pageWidth + (itemWidth / pageData.pageWidth) * startFraction;\r\n const top = (pageData.pageHeight - y - itemHeight) / pageData.pageHeight;\r\n const width = (itemWidth / pageData.pageWidth) * widthFraction;\r\n const height = itemHeight / pageData.pageHeight;\r\n\r\n rects.push({ left, top, width, height });\r\n }\r\n\r\n charPos = itemEnd;\r\n }\r\n\r\n return rects;\r\n}\r\n","import type { PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport {\r\n extractPageTextData,\r\n findTextMatches,\r\n type TextMatch,\r\n} from \"../lib/findTextMatches\";\r\n\r\ntype PageTextData = {\r\n pageNumber: number;\r\n text: string;\r\n items: Array<{ str: string; transform: number[]; width: number; height: number }>;\r\n pageWidth: number;\r\n pageHeight: number;\r\n};\r\n\r\nexport function usePdfTextSearch(pdf: PDFDocumentProxy | null) {\r\n const [pagesData, setPagesData] = useState<PageTextData[]>([]);\r\n const [query, setQuery] = useState(\"\");\r\n const [matches, setMatches] = useState<TextMatch[]>([]);\r\n const [currentIndex, setCurrentIndex] = useState(-1);\r\n\r\n // Index all pages when PDF loads\r\n useEffect(() => {\r\n if (!pdf) {\r\n setPagesData([]);\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n\r\n void (async () => {\r\n const data: PageTextData[] = [];\r\n\r\n for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const page = await pdf.getPage(pageNum);\r\n const textContent = await page.getTextContent();\r\n const viewport = page.getViewport({ scale: 1 });\r\n\r\n const pageData = extractPageTextData(\r\n pageNum,\r\n textContent,\r\n viewport.width,\r\n viewport.height,\r\n );\r\n\r\n data.push(pageData);\r\n }\r\n\r\n if (!cancelled) {\r\n setPagesData(data);\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [pdf]);\r\n\r\n // Update matches when query or data changes\r\n useEffect(() => {\r\n if (!query.trim() || pagesData.length === 0) {\r\n setMatches([]);\r\n setCurrentIndex(-1);\r\n return;\r\n }\r\n\r\n const newMatches = findTextMatches(pagesData, query);\r\n setMatches(newMatches);\r\n setCurrentIndex(newMatches.length > 0 ? 0 : -1);\r\n }, [query, pagesData]);\r\n\r\n const next = useCallback(() => {\r\n if (matches.length === 0) {\r\n return;\r\n }\r\n setCurrentIndex((prev) => (prev + 1) % matches.length);\r\n }, [matches.length]);\r\n\r\n const prev = useCallback(() => {\r\n if (matches.length === 0) {\r\n return;\r\n }\r\n setCurrentIndex((prev) => (prev - 1 + matches.length) % matches.length);\r\n }, [matches.length]);\r\n\r\n const clear = useCallback(() => {\r\n setQuery(\"\");\r\n setMatches([]);\r\n setCurrentIndex(-1);\r\n }, []);\r\n\r\n return {\r\n query,\r\n setQuery,\r\n matches,\r\n currentIndex,\r\n currentMatch: currentIndex >= 0 ? matches[currentIndex] : null,\r\n next,\r\n prev,\r\n clear,\r\n };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { SignatureAnnotation } from \"../types\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `signature-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useSignatures() {\r\n const [items, setItems] = useState<SignatureAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n\r\n const add = useCallback((annotation: Omit<SignatureAnnotation, \"id\">) => {\r\n const item: SignatureAnnotation = { ...annotation, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n setSelectedId(item.id);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<SignatureAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: SignatureAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: SignatureAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { TextAnnotation } from \"../types\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `text-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useTextAnnotations() {\r\n const [items, setItems] = useState<TextAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n const [editingId, setEditingId] = useState<string | null>(null);\r\n\r\n const add = useCallback((annotation: Omit<TextAnnotation, \"id\">) => {\r\n const item: TextAnnotation = { ...annotation, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n setSelectedId(item.id);\r\n setEditingId(item.id);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<TextAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n setEditingId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n setEditingId((prev) => (prev === id ? prev : null));\r\n }, []);\r\n\r\n const startEdit = useCallback((id: string) => {\r\n setSelectedId(id);\r\n setEditingId(id);\r\n }, []);\r\n\r\n const stopEdit = useCallback(() => {\r\n setEditingId(null);\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: TextAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n setEditingId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: TextAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n setEditingId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n setEditingId(null);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n editingId,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n startEdit,\r\n stopEdit,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { PDFDocument } from \"pdf-lib\";\r\n\r\nexport async function deletePage(\r\n pdfBytes: Uint8Array,\r\n pageIndex: number,\r\n): Promise<Uint8Array> {\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const pageCount = pdf.getPageCount();\r\n\r\n if (pageCount <= 1) {\r\n throw new Error(\"A PDF must have at least one page\");\r\n }\r\n\r\n const index = Math.max(0, Math.min(pageIndex, pageCount - 1));\r\n pdf.removePage(index);\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","import type { ToolbarShortcuts } from \"../types\";\r\n\r\nexport function historyShortcuts(): ToolbarShortcuts {\r\n const isMac =\r\n typeof navigator !== \"undefined\" && /Mac|iPhone|iPad|iPod/.test(navigator.platform);\r\n return {\r\n undo: isMac ? \"⌘Z\" : \"Ctrl+Z\",\r\n redo: isMac ? \"⌘⇧Z\" : \"Ctrl+Y\",\r\n undoKeys: isMac ? \"Meta+Z\" : \"Control+Z\",\r\n redoKeys: isMac ? \"Meta+Shift+Z\" : \"Control+Y\",\r\n };\r\n}\r\n","import { PDFDocument, type PDFPage } from \"pdf-lib\";\r\n\r\nconst LETTER: [number, number] = [612, 792];\r\n\r\nfunction visualSize(page: PDFPage): [number, number] {\r\n const { width, height } = page.getSize();\r\n const angle = ((page.getRotation().angle % 360) + 360) % 360;\r\n if (angle === 90 || angle === 270) {\r\n return [height, width];\r\n }\r\n return [width, height];\r\n}\r\n\r\nexport async function insertBlankPage(\r\n pdfBytes: Uint8Array,\r\n insertIndex: number,\r\n): Promise<Uint8Array> {\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const pageCount = pdf.getPageCount();\r\n const index = Math.max(0, Math.min(insertIndex, pageCount));\r\n const reference =\r\n pageCount > 0 ? pdf.getPage(index === 0 ? 0 : index - 1) : undefined;\r\n const size = reference ? visualSize(reference) : LETTER;\r\n pdf.insertPage(index, size);\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","import { PDFDocument } from \"pdf-lib\";\r\n\r\nexport async function movePage(\r\n pdfBytes: Uint8Array,\r\n fromIndex: number,\r\n toIndex: number,\r\n): Promise<Uint8Array> {\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const pageCount = pdf.getPageCount();\r\n\r\n if (pageCount <= 1) {\r\n return pdfBytes;\r\n }\r\n\r\n const from = Math.max(0, Math.min(fromIndex, pageCount - 1));\r\n const to = Math.max(0, Math.min(toIndex, pageCount - 1));\r\n\r\n if (from === to) {\r\n return pdfBytes;\r\n }\r\n\r\n const [copied] = await pdf.copyPages(pdf, [from]);\r\n if (from < to) {\r\n pdf.insertPage(to + 1, copied);\r\n pdf.removePage(from);\r\n } else {\r\n pdf.insertPage(to, copied);\r\n pdf.removePage(from + 1);\r\n }\r\n\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","export function moveIndex<T>(items: T[], from: number, to: number): T[] {\r\n if (from === to) {\r\n return items;\r\n }\r\n\r\n const next = items.slice();\r\n const [item] = next.splice(from, 1);\r\n if (item === undefined) {\r\n return items;\r\n }\r\n\r\n next.splice(to, 0, item);\r\n return next;\r\n}\r\n\r\nexport function remapAfterDelete(pageNumber: number) {\r\n return (current: number): number | null => {\r\n if (current === pageNumber) {\r\n return null;\r\n }\r\n return current > pageNumber ? current - 1 : current;\r\n };\r\n}\r\n\r\nexport function remapAfterMove(from: number, to: number) {\r\n return (current: number): number => {\r\n if (current === from) {\r\n return to;\r\n }\r\n if (from < to && current > from && current <= to) {\r\n return current - 1;\r\n }\r\n if (from > to && current >= to && current < from) {\r\n return current + 1;\r\n }\r\n return current;\r\n };\r\n}\r\n\r\nexport function sequentialPages(count: number): number[] {\r\n return Array.from({ length: count }, (_, index) => index + 1);\r\n}\r\n","import {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { HighlightToolbar } from \"./components/HighlightToolbar\";\r\nimport { ImageModal } from \"./components/ImageModal\";\r\nimport { ImageToolbar } from \"./components/ImageToolbar\";\r\nimport { InkToolbar } from \"./components/InkToolbar\";\r\nimport { PdfPage } from \"./components/PdfPage\";\r\nimport { PagesSidebar } from \"./components/PagesSidebar\";\r\nimport { PropertiesPanel } from \"./components/PropertiesPanel\";\r\nimport { SignatureModal } from \"./components/SignatureModal\";\r\nimport { SignatureToolbar } from \"./components/SignatureToolbar\";\r\nimport { Toolbar } from \"./components/Toolbar\";\r\nimport { PanelLeftIcon, XIcon } from \"./components/icons\";\r\nimport { useCompactLayout } from \"./hooks/useCompactLayout\";\r\nimport { useDrawStrokes } from \"./hooks/useDrawStrokes\";\r\nimport {\r\n remapSnapshot,\r\n useEditorHistory,\r\n type DocumentSnapshot,\r\n type HistoryApply,\r\n type HistorySelection,\r\n} from \"./hooks/useEditorHistory\";\r\nimport { useExportPdf } from \"./hooks/useExportPdf\";\r\nimport { useHighlights } from \"./hooks/useHighlights\";\r\nimport { useImages } from \"./hooks/useImages\";\r\nimport { usePdfDocument } from \"./hooks/usePdfDocument\";\r\nimport { usePdfTextSearch } from \"./hooks/usePdfTextSearch\";\r\nimport { useSignatures } from \"./hooks/useSignatures\";\r\nimport { useTextAnnotations } from \"./hooks/useTextAnnotations\";\r\nimport { deletePage } from \"./lib/deletePage\";\r\nimport { historyShortcuts } from \"./lib/historyShortcuts\";\r\nimport { toPendingImage } from \"./lib/imageUpload\";\r\nimport { insertBlankPage } from \"./lib/insertBlankPage\";\r\nimport { movePage } from \"./lib/movePage\";\r\nimport {\r\n moveIndex,\r\n remapAfterDelete,\r\n remapAfterMove,\r\n sequentialPages,\r\n} from \"./lib/pageOrder\";\r\nimport { toPendingSignature } from \"./lib/signatureImage\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n PendingImage,\r\n PendingSignature,\r\n PdfEditorProps,\r\n PdfSource,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n SidebarApi,\r\n Tool,\r\n ToolbarApi,\r\n} from \"./types\";\r\n\r\ntype PendingPageOp =\r\n | { type: \"insert\"; afterPage: number }\r\n | { type: \"delete\"; pageNumber: number }\r\n | { type: \"reorder\"; from: number; to: number };\r\n\r\ntype PendingHistoryApply = {\r\n page?: number;\r\n selection?: HistorySelection | null;\r\n};\r\n\r\nconst HISTORY_KIND_LABEL: Record<HistorySelection[\"kind\"], string> = {\r\n text: \"text\",\r\n draw: \"drawing\",\r\n highlight: \"highlight\",\r\n signature: \"signature\",\r\n image: \"image\",\r\n};\r\n\r\nconst HISTORY_ITEMS_KEY: Record<\r\n HistorySelection[\"kind\"],\r\n keyof Pick<DocumentSnapshot, \"texts\" | \"drawings\" | \"highlights\" | \"signatures\" | \"images\">\r\n> = {\r\n text: \"texts\",\r\n draw: \"drawings\",\r\n highlight: \"highlights\",\r\n signature: \"signatures\",\r\n image: \"images\",\r\n};\r\n\r\nfunction historySelectionId(snapshot: DocumentSnapshot, selection?: HistorySelection | null) {\r\n if (!selection) {\r\n return null;\r\n }\r\n\r\n const items = snapshot[HISTORY_ITEMS_KEY[selection.kind]];\r\n return items.some((item) => item.id === selection.id) ? selection.id : null;\r\n}\r\n\r\nfunction updateHistoryMeta(\r\n kind: HistorySelection[\"kind\"],\r\n id: string,\r\n changes: Record<string, unknown>,\r\n editingTextId: string | null,\r\n): { label: string; coalesceKey?: string } {\r\n const noun = HISTORY_KIND_LABEL[kind];\r\n\r\n if (kind === \"text\" && editingTextId === id && \"text\" in changes) {\r\n return { label: \"Edit text\", coalesceKey: `edit:text:${id}` };\r\n }\r\n\r\n const keys = Object.keys(changes);\r\n const transformKeys =\r\n kind === \"draw\" ? [\"points\"] : kind === \"highlight\" ? [\"rects\"] : [\"x\", \"y\", \"width\", \"height\", \"rotation\"];\r\n\r\n if (keys.some((key) => transformKeys.includes(key))) {\r\n return { label: `Move ${noun}`, coalesceKey: `transform:${kind}:${id}` };\r\n }\r\n\r\n const field = keys[0] ?? \"edit\";\r\n return { label: `Edit ${noun}`, coalesceKey: `style:${kind}:${id}:${field}` };\r\n}\r\n\r\nfunction snapshotHasChange(\r\n item: { id: string } | undefined,\r\n changes: Record<string, unknown>,\r\n) {\r\n if (!item) {\r\n return false;\r\n }\r\n\r\n const current = item as Record<string, unknown>;\r\n return Object.keys(changes).some((key) => current[key] !== changes[key]);\r\n}\r\n\r\nconst ADDED_PAGE_PULSE_MS = 900;\r\n\r\nconst DEFAULT_SCALE = 1;\r\nconst DEFAULT_MIN_SCALE = 0.5;\r\nconst DEFAULT_MAX_SCALE = 3;\r\nconst SCALE_WHEEL_STEP = 0.1;\r\nconst SCALE_WHEEL_THRESHOLD = 40;\r\nconst KEYBOARD_LINE_SCROLL = 72;\r\nconst STAGE_SCROLL_PADDING = 24;\r\nconst SCROLL_SYNC_SETTLE_MS = 150;\r\nconst SCROLL_SYNC_LOCK_MAX_MS = 2500;\r\n\r\nfunction clamp(value: number, min: number, max: number): number {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nfunction readPageSlotSize(node: HTMLElement | undefined) {\r\n const page = node?.querySelector(\".rpe-page\");\r\n if (!(page instanceof HTMLElement) || page.offsetWidth === 0) {\r\n return undefined;\r\n }\r\n\r\n return { width: page.offsetWidth, height: page.offsetHeight };\r\n}\r\n\r\nfunction scrollWithinContainer(\r\n container: HTMLElement,\r\n target: HTMLElement,\r\n options?: {\r\n behavior?: ScrollBehavior;\r\n block?: \"start\" | \"center\" | \"nearest\";\r\n padding?: number;\r\n },\r\n) {\r\n const behavior = options?.behavior ?? \"auto\";\r\n const block = options?.block ?? \"start\";\r\n const padding = options?.padding ?? STAGE_SCROLL_PADDING;\r\n const containerRect = container.getBoundingClientRect();\r\n const targetRect = target.getBoundingClientRect();\r\n let delta = 0;\r\n\r\n if (block === \"center\") {\r\n const containerCenter = containerRect.top + containerRect.height / 2;\r\n const targetCenter = targetRect.top + targetRect.height / 2;\r\n delta = targetCenter - containerCenter;\r\n } else if (block === \"nearest\") {\r\n if (targetRect.top < containerRect.top + padding) {\r\n delta = targetRect.top - containerRect.top - padding;\r\n } else if (targetRect.bottom > containerRect.bottom - padding) {\r\n delta = targetRect.bottom - containerRect.bottom + padding;\r\n }\r\n } else {\r\n delta = targetRect.top - containerRect.top - padding;\r\n }\r\n\r\n if (Math.abs(delta) < 1) {\r\n return;\r\n }\r\n\r\n container.scrollTo({\r\n top: container.scrollTop + delta,\r\n behavior,\r\n });\r\n}\r\n\r\nfunction isPageInView(container: HTMLElement, pageNode: HTMLElement) {\r\n const containerRect = container.getBoundingClientRect();\r\n const pageRect = pageNode.getBoundingClientRect();\r\n return (\r\n pageRect.bottom > containerRect.top + 24 &&\r\n pageRect.top < containerRect.bottom - 24\r\n );\r\n}\r\n\r\nfunction holdScrollSync(\r\n container: HTMLElement,\r\n lock: { current: boolean },\r\n onRelease?: () => void,\r\n): () => void {\r\n lock.current = true;\r\n\r\n let released = false;\r\n let settleTimer = 0;\r\n\r\n const release = () => {\r\n if (released) {\r\n return;\r\n }\r\n released = true;\r\n lock.current = false;\r\n container.removeEventListener(\"scrollend\", release);\r\n container.removeEventListener(\"scroll\", bumpSettle);\r\n window.clearTimeout(settleTimer);\r\n window.clearTimeout(maxTimer);\r\n onRelease?.();\r\n };\r\n\r\n const bumpSettle = () => {\r\n window.clearTimeout(settleTimer);\r\n settleTimer = window.setTimeout(release, SCROLL_SYNC_SETTLE_MS);\r\n };\r\n\r\n container.addEventListener(\"scrollend\", release);\r\n container.addEventListener(\"scroll\", bumpSettle, { passive: true });\r\n settleTimer = window.setTimeout(release, SCROLL_SYNC_SETTLE_MS);\r\n const maxTimer = window.setTimeout(release, SCROLL_SYNC_LOCK_MAX_MS);\r\n\r\n return release;\r\n}\r\n\r\nfunction fileNameFromPath(path: string): string | undefined {\r\n const last = path.split(/[/\\\\]/).pop();\r\n if (!last) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n return decodeURIComponent(last) || undefined;\r\n } catch {\r\n return last;\r\n }\r\n}\r\n\r\nfunction extractPdfFileName(file?: PdfSource | null): string | undefined {\r\n if (!file) {\r\n return undefined;\r\n }\r\n\r\n if (typeof File !== \"undefined\" && file instanceof File && file.name) {\r\n return file.name;\r\n }\r\n\r\n if (typeof URL !== \"undefined\" && file instanceof URL) {\r\n return fileNameFromPath(file.pathname);\r\n }\r\n\r\n if (typeof file === \"string\") {\r\n const [withoutQuery] = file.split(/[?#]/);\r\n return fileNameFromPath(withoutQuery);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction resolveDocumentName(file?: PdfSource | null, override?: string): string {\r\n const trimmed = override?.trim();\r\n if (trimmed) {\r\n return trimmed;\r\n }\r\n\r\n return extractPdfFileName(file) ?? \"document.pdf\";\r\n}\r\n\r\nfunction toPdfFileName(name: string): string {\r\n return name.toLowerCase().endsWith(\".pdf\") ? name : `${name}.pdf`;\r\n}\r\n\r\nfunction resolveExportFileName(documentName: string, override?: string): string {\r\n const trimmed = override?.trim();\r\n return toPdfFileName(trimmed || documentName);\r\n}\r\n\r\nfunction isEditableTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) {\r\n return false;\r\n }\r\n\r\n return Boolean(target.closest(\"input, textarea, select, [contenteditable='true']\"));\r\n}\r\n\r\nexport function PdfEditor({\r\n file,\r\n name,\r\n className,\r\n style,\r\n page,\r\n defaultPage = 1,\r\n scale,\r\n defaultScale = DEFAULT_SCALE,\r\n minScale = DEFAULT_MIN_SCALE,\r\n maxScale = DEFAULT_MAX_SCALE,\r\n workerSrc,\r\n exportWorkerSrc,\r\n exportFileName,\r\n showToolbar = true,\r\n toolbar,\r\n showSidebar = true,\r\n sidebar,\r\n emptyState,\r\n onLoadSuccess,\r\n onLoadError,\r\n onPageChange,\r\n onScaleChange,\r\n onNameChange,\r\n onExport,\r\n onExportError,\r\n}: PdfEditorProps) {\r\n const [working, setWorking] = useState<{\r\n forFile: PdfSource | null | undefined;\r\n bytes: Uint8Array | null;\r\n }>({ forFile: file, bytes: null });\r\n const documentSource = working.forFile === file ? (working.bytes ?? file) : file;\r\n const { pdf, numPages, loading, loadPhase, downloadProgress, error } = usePdfDocument(\r\n documentSource,\r\n workerSrc,\r\n );\r\n const search = usePdfTextSearch(pdf);\r\n const texts = useTextAnnotations();\r\n const drawings = useDrawStrokes();\r\n const highlights = useHighlights();\r\n const signatures = useSignatures();\r\n const images = useImages();\r\n const history = useEditorHistory();\r\n const resolvedName = useMemo(() => resolveDocumentName(file, name), [file, name]);\r\n const [documentName, setDocumentName] = useState(resolvedName);\r\n const exportFile = useExportPdf({\r\n pdf,\r\n annotations: texts.items,\r\n drawings: drawings.items,\r\n highlights: highlights.items,\r\n signatures: signatures.items,\r\n images: images.items,\r\n fileName: resolveExportFileName(documentName, exportFileName),\r\n workerSrc: exportWorkerSrc,\r\n onExport,\r\n onExportError,\r\n });\r\n const [internalPage, setInternalPage] = useState(defaultPage);\r\n const [internalScale, setInternalScale] = useState(defaultScale);\r\n const [activeTool, setActiveTool] = useState<Tool>(\"select\");\r\n const [signatureModalOpen, setSignatureModalOpen] = useState(false);\r\n const [pendingSignature, setPendingSignature] = useState<PendingSignature | null>(null);\r\n const [imageModalOpen, setImageModalOpen] = useState(false);\r\n const [pendingImage, setPendingImage] = useState<PendingImage | null>(null);\r\n const [replacingImageId, setReplacingImageId] = useState<string | null>(null);\r\n const [mutatingPages, setMutatingPages] = useState(false);\r\n const [justAddedPage, setJustAddedPage] = useState<number | null>(null);\r\n const [pageOpError, setPageOpError] = useState<string | null>(null);\r\n const [pendingPageOp, setPendingPageOp] = useState<PendingPageOp | null>(null);\r\n const [pendingHistoryApply, setPendingHistoryApply] = useState<PendingHistoryApply | null>(null);\r\n const [optimisticOrder, setOptimisticOrder] = useState<number[] | null>(null);\r\n const [pagesOpen, setPagesOpen] = useState(false);\r\n const [propertiesOpen, setPropertiesOpen] = useState(false);\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const compact = useCompactLayout(rootRef);\r\n const stageRef = useRef<HTMLDivElement>(null);\r\n const pageRefs = useRef(new Map<number, HTMLElement>());\r\n const skipScrollSyncRef = useRef(false);\r\n const pendingScrollPageRef = useRef<number | null>(null);\r\n const explicitScrollPageRef = useRef<number | null>(null);\r\n const lastReportedPageRef = useRef(defaultPage);\r\n const textsRef = useRef(texts.items);\r\n const drawingsRef = useRef(drawings.items);\r\n const highlightsRef = useRef(highlights.items);\r\n const signaturesRef = useRef(signatures.items);\r\n const imagesRef = useRef(images.items);\r\n const documentNameRef = useRef(documentName);\r\n const workingBytesRef = useRef(working.bytes);\r\n const editStartTextRef = useRef<string | null>(null);\r\n textsRef.current = texts.items;\r\n drawingsRef.current = drawings.items;\r\n highlightsRef.current = highlights.items;\r\n signaturesRef.current = signatures.items;\r\n imagesRef.current = images.items;\r\n documentNameRef.current = documentName;\r\n workingBytesRef.current = working.bytes;\r\n\r\n const currentPage = page ?? internalPage;\r\n const currentScale = scale ?? internalScale;\r\n\r\n useEffect(() => {\r\n setWorking({ forFile: file, bytes: null });\r\n setMutatingPages(false);\r\n setJustAddedPage(null);\r\n setPageOpError(null);\r\n setPendingPageOp(null);\r\n setPendingHistoryApply(null);\r\n setOptimisticOrder(null);\r\n texts.reset();\r\n drawings.reset();\r\n highlights.reset();\r\n signatures.reset();\r\n images.reset();\r\n history.reset();\r\n editStartTextRef.current = null;\r\n setPendingSignature(null);\r\n setSignatureModalOpen(false);\r\n setPendingImage(null);\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n setPagesOpen(false);\r\n setPropertiesOpen(false);\r\n }, [file, texts.reset, drawings.reset, highlights.reset, signatures.reset, images.reset, history.reset]);\r\n\r\n useEffect(() => {\r\n setDocumentName(resolvedName);\r\n }, [resolvedName]);\r\n\r\n useEffect(() => {\r\n if (pdf && onLoadSuccess) {\r\n onLoadSuccess({ numPages });\r\n }\r\n }, [pdf, numPages, onLoadSuccess]);\r\n\r\n useEffect(() => {\r\n if (error && onLoadError) {\r\n onLoadError(error);\r\n }\r\n }, [error, onLoadError]);\r\n\r\n useEffect(() => {\r\n if (numPages > 0 && currentPage > numPages) {\r\n const nextPage = numPages;\r\n if (page === undefined) {\r\n setInternalPage(nextPage);\r\n }\r\n onPageChange?.(nextPage);\r\n }\r\n }, [currentPage, numPages, onPageChange, page]);\r\n\r\n const safePage = useMemo(() => {\r\n if (numPages === 0) {\r\n return 1;\r\n }\r\n return clamp(currentPage, 1, numPages);\r\n }, [currentPage, numPages]);\r\n\r\n const safeScale = clamp(currentScale, minScale, maxScale);\r\n const enteringPage =\r\n pendingPageOp?.type === \"insert\" &&\r\n pdf &&\r\n !loading &&\r\n numPages >= pendingPageOp.afterPage + 1\r\n ? pendingPageOp.afterPage + 1\r\n : justAddedPage;\r\n const pageNumbers = useMemo(() => sequentialPages(numPages), [numPages]);\r\n\r\n const setPage = useCallback(\r\n (nextPage: number, options?: { scroll?: boolean }) => {\r\n const next = clamp(nextPage, 1, Math.max(numPages, 1));\r\n if (options?.scroll === false) {\r\n pendingScrollPageRef.current = null;\r\n } else {\r\n pendingScrollPageRef.current = next;\r\n explicitScrollPageRef.current = next;\r\n }\r\n\r\n if (page === undefined) {\r\n setInternalPage(next);\r\n }\r\n\r\n onPageChange?.(next);\r\n },\r\n [numPages, onPageChange, page],\r\n );\r\n\r\n const captureSnapshot = useCallback((): DocumentSnapshot => {\r\n return {\r\n texts: textsRef.current,\r\n drawings: drawingsRef.current,\r\n highlights: highlightsRef.current,\r\n signatures: signaturesRef.current,\r\n images: imagesRef.current,\r\n documentName: documentNameRef.current,\r\n workingBytes: workingBytesRef.current,\r\n };\r\n }, []);\r\n\r\n const restoreHistoryChrome = useCallback(\r\n (snapshot: DocumentSnapshot, selection?: HistorySelection | null, nextPage?: number) => {\r\n texts.stopEdit();\r\n texts.select(selection?.kind === \"text\" ? historySelectionId(snapshot, selection) : null);\r\n drawings.select(selection?.kind === \"draw\" ? historySelectionId(snapshot, selection) : null);\r\n highlights.select(\r\n selection?.kind === \"highlight\" ? historySelectionId(snapshot, selection) : null,\r\n );\r\n signatures.select(\r\n selection?.kind === \"signature\" ? historySelectionId(snapshot, selection) : null,\r\n );\r\n images.select(selection?.kind === \"image\" ? historySelectionId(snapshot, selection) : null);\r\n if (nextPage != null) {\r\n setPage(nextPage);\r\n }\r\n },\r\n [\r\n drawings.select,\r\n highlights.select,\r\n images.select,\r\n setPage,\r\n signatures.select,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const applyHistory = useCallback(\r\n (applied: HistoryApply) => {\r\n const { snapshot, selection, page: nextPage } = applied;\r\n history.beginApply();\r\n texts.hydrate(snapshot.texts);\r\n drawings.hydrate(snapshot.drawings);\r\n highlights.hydrate(snapshot.highlights);\r\n signatures.hydrate(snapshot.signatures);\r\n images.hydrate(snapshot.images);\r\n setDocumentName(snapshot.documentName);\r\n onNameChange?.(snapshot.documentName);\r\n\r\n const bytesChanged =\r\n snapshot.workingBytes != null && snapshot.workingBytes !== workingBytesRef.current;\r\n\r\n if (bytesChanged) {\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n setOptimisticOrder(null);\r\n setPendingHistoryApply({ page: nextPage, selection });\r\n setWorking({ forFile: file, bytes: snapshot.workingBytes });\r\n } else {\r\n restoreHistoryChrome(snapshot, selection, nextPage);\r\n }\r\n\r\n history.endApply();\r\n },\r\n [\r\n drawings.hydrate,\r\n file,\r\n highlights.hydrate,\r\n history,\r\n images.hydrate,\r\n onNameChange,\r\n restoreHistoryChrome,\r\n signatures.hydrate,\r\n texts.hydrate,\r\n ],\r\n );\r\n\r\n const runUndo = useCallback(() => {\r\n if (mutatingPages || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n const applied = history.undo();\r\n if (applied) {\r\n applyHistory(applied);\r\n }\r\n }, [applyHistory, history, imageModalOpen, mutatingPages, signatureModalOpen]);\r\n\r\n const runRedo = useCallback(() => {\r\n if (mutatingPages || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n const applied = history.redo();\r\n if (applied) {\r\n applyHistory(applied);\r\n }\r\n }, [applyHistory, history, imageModalOpen, mutatingPages, signatureModalOpen]);\r\n\r\n const recordAdd = useCallback(\r\n <T extends { id: string; pageNumber: number }>(\r\n kind: HistorySelection[\"kind\"],\r\n item: T,\r\n label: string,\r\n ) => {\r\n const before = captureSnapshot();\r\n const key = HISTORY_ITEMS_KEY[kind];\r\n history.push({\r\n label,\r\n before,\r\n after: { ...before, [key]: [...before[key], item] },\r\n selection: { kind, id: item.id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history],\r\n );\r\n\r\n const recordRemove = useCallback(\r\n (kind: HistorySelection[\"kind\"], id: string, label: string) => {\r\n const before = captureSnapshot();\r\n const key = HISTORY_ITEMS_KEY[kind];\r\n const item = before[key].find((entry) => entry.id === id);\r\n if (!item) {\r\n return;\r\n }\r\n history.push({\r\n label,\r\n before,\r\n after: { ...before, [key]: before[key].filter((entry) => entry.id !== id) },\r\n selection: { kind, id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history],\r\n );\r\n\r\n const recordUpdate = useCallback(\r\n (kind: HistorySelection[\"kind\"], id: string, changes: Record<string, unknown>) => {\r\n const before = captureSnapshot();\r\n const key = HISTORY_ITEMS_KEY[kind];\r\n const item = before[key].find((entry) => entry.id === id);\r\n if (!item || !snapshotHasChange(item, changes)) {\r\n return;\r\n }\r\n\r\n const { label, coalesceKey } = updateHistoryMeta(kind, id, changes, texts.editingId);\r\n history.push({\r\n label,\r\n coalesceKey,\r\n before,\r\n after: {\r\n ...before,\r\n [key]: before[key].map((entry) => (entry.id === id ? { ...entry, ...changes } : entry)),\r\n },\r\n selection: { kind, id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history, texts.editingId],\r\n );\r\n\r\n const handleAddText = useCallback(\r\n (annotation: Omit<TextAnnotation, \"id\">) => {\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n const item = texts.add(annotation);\r\n editStartTextRef.current = item.text;\r\n recordAdd(\"text\", item, \"Add text\");\r\n },\r\n [drawings.select, highlights.select, images.select, recordAdd, signatures.select, texts.add],\r\n );\r\n\r\n const handleUpdateText = useCallback(\r\n (id: string, changes: Partial<TextAnnotation>) => {\r\n texts.update(id, changes);\r\n recordUpdate(\"text\", id, changes);\r\n },\r\n [recordUpdate, texts.update],\r\n );\r\n\r\n const handleRemoveText = useCallback(\r\n (id: string) => {\r\n recordRemove(\"text\", id, \"Delete text\");\r\n texts.remove(id);\r\n },\r\n [recordRemove, texts.remove],\r\n );\r\n\r\n const handleStartEditText = useCallback(\r\n (id: string) => {\r\n const item = textsRef.current.find((entry) => entry.id === id);\r\n editStartTextRef.current = item?.text ?? \"\";\r\n texts.startEdit(id);\r\n },\r\n [texts.startEdit],\r\n );\r\n\r\n const handleStopEditText = useCallback(() => {\r\n const id = texts.editingId;\r\n texts.stopEdit();\r\n if (!id) {\r\n return;\r\n }\r\n\r\n const current = textsRef.current.find((entry) => entry.id === id);\r\n const start = editStartTextRef.current;\r\n if (!current || start == null || current.text === start) {\r\n return;\r\n }\r\n\r\n recordUpdate(\"text\", id, { text: current.text });\r\n }, [recordUpdate, texts.editingId, texts.stopEdit]);\r\n\r\n const handleAddDraw = useCallback(\r\n (stroke: Omit<DrawStroke, \"id\">) => {\r\n const item = drawings.add(stroke);\r\n recordAdd(\"draw\", item, \"Add drawing\");\r\n },\r\n [drawings.add, recordAdd],\r\n );\r\n\r\n const handleUpdateDraw = useCallback(\r\n (id: string, changes: Partial<DrawStroke>) => {\r\n drawings.update(id, changes);\r\n recordUpdate(\"draw\", id, changes);\r\n },\r\n [drawings.update, recordUpdate],\r\n );\r\n\r\n const handleRemoveDraw = useCallback(\r\n (id: string) => {\r\n recordRemove(\"draw\", id, \"Delete drawing\");\r\n drawings.remove(id);\r\n },\r\n [drawings.remove, recordRemove],\r\n );\r\n\r\n const handleDrawColorChange = useCallback(\r\n (next: string) => {\r\n const id = drawings.selectedId;\r\n drawings.setColor(next);\r\n if (id) {\r\n recordUpdate(\"draw\", id, { color: next });\r\n }\r\n },\r\n [drawings.selectedId, drawings.setColor, recordUpdate],\r\n );\r\n\r\n const handleDrawWidthChange = useCallback(\r\n (next: number) => {\r\n const id = drawings.selectedId;\r\n drawings.setWidth(next);\r\n if (id) {\r\n recordUpdate(\"draw\", id, { width: next });\r\n }\r\n },\r\n [drawings.selectedId, drawings.setWidth, recordUpdate],\r\n );\r\n\r\n const handleAddHighlight = useCallback(\r\n (highlight: Omit<HighlightAnnotation, \"id\">) => {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n const item = highlights.add(highlight);\r\n recordAdd(\"highlight\", item, \"Add highlight\");\r\n },\r\n [\r\n drawings.select,\r\n highlights.add,\r\n images.select,\r\n recordAdd,\r\n signatures.select,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const handleUpdateHighlight = useCallback(\r\n (id: string, changes: Partial<HighlightAnnotation>) => {\r\n highlights.update(id, changes);\r\n recordUpdate(\"highlight\", id, changes);\r\n },\r\n [highlights.update, recordUpdate],\r\n );\r\n\r\n const handleRemoveHighlight = useCallback(\r\n (id: string) => {\r\n recordRemove(\"highlight\", id, \"Delete highlight\");\r\n highlights.remove(id);\r\n },\r\n [highlights.remove, recordRemove],\r\n );\r\n\r\n const handleHighlightColorChange = useCallback(\r\n (next: string) => {\r\n const id = highlights.selectedId;\r\n highlights.setColor(next);\r\n if (id) {\r\n recordUpdate(\"highlight\", id, { color: next });\r\n }\r\n },\r\n [highlights.selectedId, highlights.setColor, recordUpdate],\r\n );\r\n\r\n const handleAddSignature = useCallback(\r\n (annotation: Omit<SignatureAnnotation, \"id\">) => {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n images.select(null);\r\n const item = signatures.add(annotation);\r\n recordAdd(\"signature\", item, \"Add signature\");\r\n setPendingSignature(null);\r\n setActiveTool(\"select\");\r\n },\r\n [\r\n drawings.select,\r\n highlights.select,\r\n images.select,\r\n recordAdd,\r\n signatures.add,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const handleUpdateSignature = useCallback(\r\n (id: string, changes: Partial<SignatureAnnotation>) => {\r\n signatures.update(id, changes);\r\n recordUpdate(\"signature\", id, changes);\r\n },\r\n [recordUpdate, signatures.update],\r\n );\r\n\r\n const handleRemoveSignature = useCallback(\r\n (id: string) => {\r\n recordRemove(\"signature\", id, \"Delete signature\");\r\n signatures.remove(id);\r\n },\r\n [recordRemove, signatures.remove],\r\n );\r\n\r\n const handleAddImage = useCallback(\r\n (annotation: Omit<ImageAnnotation, \"id\">) => {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n const item = images.add(annotation);\r\n recordAdd(\"image\", item, \"Add image\");\r\n setPendingImage(null);\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n setActiveTool(\"select\");\r\n },\r\n [\r\n drawings.select,\r\n highlights.select,\r\n images.add,\r\n recordAdd,\r\n signatures.select,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const handleUpdateImage = useCallback(\r\n (id: string, changes: Partial<ImageAnnotation>) => {\r\n images.update(id, changes);\r\n recordUpdate(\"image\", id, changes);\r\n },\r\n [images.update, recordUpdate],\r\n );\r\n\r\n const handleRemoveImage = useCallback(\r\n (id: string) => {\r\n recordRemove(\"image\", id, \"Delete image\");\r\n images.remove(id);\r\n },\r\n [images.remove, recordRemove],\r\n );\r\n\r\n const handleReplaceImage = useCallback(\r\n (id: string, src: string) => {\r\n const before = captureSnapshot();\r\n const item = before.images.find((entry) => entry.id === id);\r\n if (!item || item.src === src) {\r\n return;\r\n }\r\n images.update(id, { src });\r\n history.push({\r\n label: \"Replace image\",\r\n before,\r\n after: {\r\n ...before,\r\n images: before.images.map((entry) => (entry.id === id ? { ...entry, src } : entry)),\r\n },\r\n selection: { kind: \"image\", id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history, images.update],\r\n );\r\n\r\n const handleRenameDocument = useCallback(\r\n (nextName: string) => {\r\n if (nextName === documentNameRef.current) {\r\n return;\r\n }\r\n const before = captureSnapshot();\r\n setDocumentName(nextName);\r\n onNameChange?.(nextName);\r\n history.push({\r\n label: \"Rename document\",\r\n before,\r\n after: { ...before, documentName: nextName },\r\n });\r\n },\r\n [captureSnapshot, history, onNameChange],\r\n );\r\n\r\n const setScaleValue = useCallback(\r\n (nextScale: number) => {\r\n const next = clamp(nextScale, minScale, maxScale);\r\n if (scale === undefined) {\r\n setInternalScale(next);\r\n }\r\n onScaleChange?.(next);\r\n },\r\n [maxScale, minScale, onScaleChange, scale],\r\n );\r\n\r\n const zoomIn = useCallback(() => {\r\n setScaleValue(Number((safeScale + 0.25).toFixed(2)));\r\n }, [safeScale, setScaleValue]);\r\n\r\n const zoomOut = useCallback(() => {\r\n setScaleValue(Number((safeScale - 0.25).toFixed(2)));\r\n }, [safeScale, setScaleValue]);\r\n\r\n const prevPage = useCallback(() => {\r\n setPage(safePage - 1);\r\n }, [safePage, setPage]);\r\n\r\n const nextPage = useCallback(() => {\r\n setPage(safePage + 1);\r\n }, [safePage, setPage]);\r\n\r\n const setTool = useCallback(\r\n (tool: Tool) => {\r\n setActiveTool(tool);\r\n texts.stopEdit();\r\n window.getSelection()?.removeAllRanges();\r\n if (tool === \"draw\") {\r\n texts.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n } else if (tool === \"text\") {\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n } else if (tool === \"highlight\") {\r\n texts.select(null);\r\n drawings.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n } else if (tool === \"signature\") {\r\n texts.select(null);\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n if (pendingSignature) {\r\n setSignatureModalOpen(false);\r\n } else {\r\n setSignatureModalOpen(true);\r\n }\r\n } else if (tool === \"image\") {\r\n texts.select(null);\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setReplacingImageId(null);\r\n if (pendingImage) {\r\n setImageModalOpen(false);\r\n } else {\r\n setImageModalOpen(true);\r\n }\r\n } else {\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n }\r\n },\r\n [\r\n drawings,\r\n highlights,\r\n images,\r\n pendingImage,\r\n pendingSignature,\r\n signatures,\r\n texts,\r\n ],\r\n );\r\n\r\n const exportPdf = useCallback(() => {\r\n void exportFile.exportPdf();\r\n }, [exportFile]);\r\n\r\n const toolbarShortcuts = useMemo(() => historyShortcuts(), []);\r\n\r\n const toolbarSearch = useMemo(\r\n () => ({\r\n query: search.query,\r\n setQuery: search.setQuery,\r\n matchCount: search.matches.length,\r\n currentIndex: search.currentIndex,\r\n next: search.next,\r\n prev: search.prev,\r\n clear: search.clear,\r\n }),\r\n [\r\n search.clear,\r\n search.currentIndex,\r\n search.matches.length,\r\n search.next,\r\n search.prev,\r\n search.query,\r\n search.setQuery,\r\n ],\r\n );\r\n\r\n const toolbarApi = useMemo<ToolbarApi>(\r\n () => ({\r\n name: documentName,\r\n setName: handleRenameDocument,\r\n disabled: !pdf,\r\n canUndo: Boolean(pdf) && history.canUndo && !mutatingPages,\r\n canRedo: Boolean(pdf) && history.canRedo && !mutatingPages,\r\n undoLabel: history.undoLabel,\r\n redoLabel: history.redoLabel,\r\n undo: runUndo,\r\n redo: runRedo,\r\n shortcuts: toolbarShortcuts,\r\n activeTool,\r\n setTool,\r\n scale: safeScale,\r\n minScale,\r\n maxScale,\r\n setScale: setScaleValue,\r\n zoomIn,\r\n zoomOut,\r\n page: safePage,\r\n numPages,\r\n setPage,\r\n prevPage,\r\n nextPage,\r\n search: toolbarSearch,\r\n exportPdf,\r\n exporting: exportFile.exporting,\r\n exportError: exportFile.exportError,\r\n }),\r\n [\r\n activeTool,\r\n documentName,\r\n exportFile.exportError,\r\n exportFile.exporting,\r\n exportPdf,\r\n handleRenameDocument,\r\n history.canRedo,\r\n history.canUndo,\r\n history.redoLabel,\r\n history.undoLabel,\r\n maxScale,\r\n minScale,\r\n mutatingPages,\r\n nextPage,\r\n numPages,\r\n pdf,\r\n prevPage,\r\n runRedo,\r\n runUndo,\r\n safePage,\r\n safeScale,\r\n setPage,\r\n setScaleValue,\r\n setTool,\r\n toolbarSearch,\r\n toolbarShortcuts,\r\n zoomIn,\r\n zoomOut,\r\n ],\r\n );\r\n\r\n const sidebarPages = useMemo(\r\n () =>\r\n (optimisticOrder ?? sequentialPages(numPages)).map((pageNumber, index) => ({\r\n pageNumber,\r\n index,\r\n label: index + 1,\r\n selected: pageNumber === safePage,\r\n justAdded: pageNumber === enteringPage,\r\n })),\r\n [enteringPage, numPages, optimisticOrder, safePage],\r\n );\r\n\r\n const applyPageRemap = useCallback(\r\n (fn: (pageNumber: number) => number | null) => {\r\n texts.remapPageNumbers(fn);\r\n drawings.remapPageNumbers(fn);\r\n highlights.remapPageNumbers(fn);\r\n signatures.remapPageNumbers(fn);\r\n images.remapPageNumbers(fn);\r\n },\r\n [\r\n drawings.remapPageNumbers,\r\n highlights.remapPageNumbers,\r\n images.remapPageNumbers,\r\n signatures.remapPageNumbers,\r\n texts.remapPageNumbers,\r\n ],\r\n );\r\n\r\n const readWorkingBytes = useCallback(async () => {\r\n if (!pdf) {\r\n throw new Error(\"PDF is not loaded\");\r\n }\r\n\r\n return working.bytes\r\n ? working.bytes.slice()\r\n : new Uint8Array(await pdf.getData());\r\n }, [pdf, working.bytes]);\r\n\r\n const handleAddBlankPage = useCallback(\r\n async (afterPage: number) => {\r\n if (!pdf || mutatingPages) {\r\n return;\r\n }\r\n\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n\r\n try {\r\n const currentBytes = await readWorkingBytes();\r\n const nextBytes = await insertBlankPage(currentBytes, afterPage);\r\n const before = { ...captureSnapshot(), workingBytes: currentBytes };\r\n const remap = (pageNumber: number) => (pageNumber > afterPage ? pageNumber + 1 : pageNumber);\r\n history.push({\r\n label: \"Add page\",\r\n before,\r\n after: { ...remapSnapshot(before, remap), workingBytes: nextBytes },\r\n page: afterPage + 1,\r\n });\r\n setPendingPageOp({ type: \"insert\", afterPage });\r\n setWorking({ forFile: file, bytes: nextBytes });\r\n } catch (caught) {\r\n setPendingPageOp(null);\r\n setMutatingPages(false);\r\n setPageOpError(\r\n caught instanceof Error ? caught.message : \"Failed to add a blank page\",\r\n );\r\n }\r\n },\r\n [captureSnapshot, file, history, mutatingPages, pdf, readWorkingBytes],\r\n );\r\n\r\n const handleDeletePage = useCallback(\r\n async (pageNumber: number) => {\r\n if (!pdf || mutatingPages || numPages <= 1) {\r\n return;\r\n }\r\n\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n setOptimisticOrder((current) =>\r\n (current ?? sequentialPages(numPages)).filter((page) => page !== pageNumber),\r\n );\r\n\r\n try {\r\n const currentBytes = await readWorkingBytes();\r\n const nextBytes = await deletePage(currentBytes, pageNumber - 1);\r\n const before = { ...captureSnapshot(), workingBytes: currentBytes };\r\n history.push({\r\n label: \"Delete page\",\r\n before,\r\n after: {\r\n ...remapSnapshot(before, remapAfterDelete(pageNumber)),\r\n workingBytes: nextBytes,\r\n },\r\n page: pageNumber,\r\n });\r\n setPendingPageOp({ type: \"delete\", pageNumber });\r\n setWorking({ forFile: file, bytes: nextBytes });\r\n } catch (caught) {\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n setMutatingPages(false);\r\n setPageOpError(\r\n caught instanceof Error ? caught.message : \"Failed to delete page\",\r\n );\r\n }\r\n },\r\n [captureSnapshot, file, history, mutatingPages, numPages, pdf, readWorkingBytes],\r\n );\r\n\r\n const handleReorderPages = useCallback(\r\n async (from: number, to: number) => {\r\n if (!pdf || mutatingPages || from === to || numPages <= 1) {\r\n return;\r\n }\r\n\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n setOptimisticOrder((current) =>\r\n moveIndex(current ?? sequentialPages(numPages), from - 1, to - 1),\r\n );\r\n\r\n try {\r\n const currentBytes = await readWorkingBytes();\r\n const nextBytes = await movePage(currentBytes, from - 1, to - 1);\r\n const before = { ...captureSnapshot(), workingBytes: currentBytes };\r\n history.push({\r\n label: \"Reorder pages\",\r\n before,\r\n after: {\r\n ...remapSnapshot(before, remapAfterMove(from, to)),\r\n workingBytes: nextBytes,\r\n },\r\n page: remapAfterMove(from, to)(safePage),\r\n });\r\n setPendingPageOp({ type: \"reorder\", from, to });\r\n setWorking({ forFile: file, bytes: nextBytes });\r\n } catch (caught) {\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n setMutatingPages(false);\r\n setPageOpError(\r\n caught instanceof Error ? caught.message : \"Failed to reorder pages\",\r\n );\r\n }\r\n },\r\n [captureSnapshot, file, history, mutatingPages, numPages, pdf, readWorkingBytes, safePage],\r\n );\r\n\r\n const addBlankPage = useCallback(\r\n (afterPage: number) => {\r\n void handleAddBlankPage(afterPage);\r\n },\r\n [handleAddBlankPage],\r\n );\r\n\r\n const deleteSidebarPage = useCallback(\r\n (pageNumber: number) => {\r\n void handleDeletePage(pageNumber);\r\n },\r\n [handleDeletePage],\r\n );\r\n\r\n const reorderPages = useCallback(\r\n (from: number, to: number) => {\r\n void handleReorderPages(from, to);\r\n },\r\n [handleReorderPages],\r\n );\r\n\r\n const sidebarApi = useMemo<SidebarApi>(\r\n () => ({\r\n pdf,\r\n page: safePage,\r\n numPages,\r\n pages: sidebarPages,\r\n setPage: (nextPage: number) => {\r\n setPage(nextPage);\r\n if (compact) {\r\n setPagesOpen(false);\r\n }\r\n },\r\n addBlankPage,\r\n deletePage: deleteSidebarPage,\r\n reorderPages,\r\n disabled: !pdf,\r\n mutating: mutatingPages,\r\n adding: pendingPageOp?.type === \"insert\",\r\n canAdd: Boolean(pdf) && !mutatingPages && numPages > 0,\r\n canDelete: numPages > 1,\r\n canReorder: Boolean(pdf) && !mutatingPages && numPages > 1,\r\n error: pageOpError,\r\n drawStrokes: drawings.items,\r\n highlights: highlights.items,\r\n textAnnotations: texts.items,\r\n signatures: signatures.items,\r\n images: images.items,\r\n }),\r\n [\r\n addBlankPage,\r\n deleteSidebarPage,\r\n drawings.items,\r\n highlights.items,\r\n images.items,\r\n mutatingPages,\r\n numPages,\r\n pageOpError,\r\n pdf,\r\n pendingPageOp?.type,\r\n reorderPages,\r\n safePage,\r\n compact,\r\n setPage,\r\n sidebarPages,\r\n signatures.items,\r\n texts.items,\r\n ],\r\n );\r\n\r\n const selectedAnnotationId =\r\n texts.selectedId ??\r\n drawings.selectedId ??\r\n highlights.selectedId ??\r\n signatures.selectedId ??\r\n images.selectedId;\r\n\r\n useEffect(() => {\r\n if (!compact) {\r\n setPagesOpen(false);\r\n setPropertiesOpen(false);\r\n return;\r\n }\r\n\r\n setPropertiesOpen(Boolean(selectedAnnotationId));\r\n }, [compact, selectedAnnotationId]);\r\n\r\n useEffect(() => {\r\n if (error && mutatingPages) {\r\n setPendingPageOp(null);\r\n setPendingHistoryApply(null);\r\n setOptimisticOrder(null);\r\n setMutatingPages(false);\r\n setPageOpError(error.message);\r\n return;\r\n }\r\n\r\n if (!pendingPageOp || !pdf || loading) {\r\n return;\r\n }\r\n\r\n if (pendingPageOp.type === \"insert\") {\r\n const nextPage = pendingPageOp.afterPage + 1;\r\n if (numPages < nextPage) {\r\n return;\r\n }\r\n\r\n const afterPage = pendingPageOp.afterPage;\r\n setPendingPageOp(null);\r\n applyPageRemap((pageNumber) =>\r\n pageNumber > afterPage ? pageNumber + 1 : pageNumber,\r\n );\r\n setMutatingPages(false);\r\n setPage(nextPage);\r\n setJustAddedPage(nextPage);\r\n return;\r\n }\r\n\r\n if (pendingPageOp.type === \"delete\") {\r\n const deleted = pendingPageOp.pageNumber;\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n applyPageRemap(remapAfterDelete(deleted));\r\n setMutatingPages(false);\r\n const nextPage =\r\n safePage === deleted\r\n ? Math.min(deleted, Math.max(numPages, 1))\r\n : safePage > deleted\r\n ? safePage - 1\r\n : safePage;\r\n setPage(nextPage);\r\n return;\r\n }\r\n\r\n const { from, to } = pendingPageOp;\r\n const remap = remapAfterMove(from, to);\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n applyPageRemap(remap);\r\n setMutatingPages(false);\r\n setPage(remap(safePage));\r\n }, [\r\n applyPageRemap,\r\n error,\r\n loading,\r\n mutatingPages,\r\n numPages,\r\n pdf,\r\n pendingPageOp,\r\n safePage,\r\n setPage,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!pendingHistoryApply || !pdf || loading) {\r\n return;\r\n }\r\n\r\n const pending = pendingHistoryApply;\r\n setPendingHistoryApply(null);\r\n setMutatingPages(false);\r\n restoreHistoryChrome(\r\n {\r\n texts: textsRef.current,\r\n drawings: drawingsRef.current,\r\n highlights: highlightsRef.current,\r\n signatures: signaturesRef.current,\r\n images: imagesRef.current,\r\n documentName: documentNameRef.current,\r\n workingBytes: workingBytesRef.current,\r\n },\r\n pending.selection,\r\n pending.page,\r\n );\r\n }, [loading, pdf, pendingHistoryApply, restoreHistoryChrome]);\r\n\r\n useEffect(() => {\r\n if (justAddedPage == null) {\r\n return;\r\n }\r\n\r\n const timeoutId = window.setTimeout(() => {\r\n setJustAddedPage(null);\r\n }, ADDED_PAGE_PULSE_MS);\r\n\r\n return () => window.clearTimeout(timeoutId);\r\n }, [justAddedPage]);\r\n\r\n const scaleRef = useRef(safeScale);\r\n scaleRef.current = safeScale;\r\n const wheelDeltaRef = useRef(0);\r\n\r\n const assignPageRef = (pageNumber: number, node: HTMLDivElement | null) => {\r\n if (node) {\r\n pageRefs.current.set(pageNumber, node);\r\n return;\r\n }\r\n\r\n pageRefs.current.delete(pageNumber);\r\n };\r\n\r\n useEffect(() => {\r\n lastReportedPageRef.current = safePage;\r\n }, [safePage]);\r\n\r\n useEffect(() => {\r\n const stage = stageRef.current;\r\n const pageNode = pageRefs.current.get(safePage);\r\n const shouldScroll = pendingScrollPageRef.current === safePage;\r\n pendingScrollPageRef.current = null;\r\n\r\n if (!stage || !pageNode || !pdf) {\r\n return;\r\n }\r\n\r\n if (!shouldScroll && isPageInView(stage, pageNode)) {\r\n return;\r\n }\r\n\r\n const release = holdScrollSync(stage, skipScrollSyncRef, () => {\r\n const target = pageRefs.current.get(safePage);\r\n if (\r\n explicitScrollPageRef.current === safePage &&\r\n target &&\r\n isPageInView(stage, target)\r\n ) {\r\n explicitScrollPageRef.current = null;\r\n }\r\n });\r\n scrollWithinContainer(stage, pageNode, {\r\n block: \"start\",\r\n behavior: shouldScroll ? \"smooth\" : \"auto\",\r\n });\r\n\r\n return release;\r\n }, [pdf, numPages, safePage, safeScale]);\r\n\r\n useEffect(() => {\r\n const stage = stageRef.current;\r\n if (!stage || !pdf) {\r\n return;\r\n }\r\n\r\n let frame = 0;\r\n\r\n const syncPageFromScroll = () => {\r\n if (skipScrollSyncRef.current) {\r\n return;\r\n }\r\n\r\n const stageRect = stage.getBoundingClientRect();\r\n const anchor = stageRect.top + Math.min(96, stageRect.height * 0.2);\r\n let bestPage = lastReportedPageRef.current;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n for (const [pageNumber, node] of pageRefs.current) {\r\n const distance = Math.abs(node.getBoundingClientRect().top - anchor);\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestPage = pageNumber;\r\n }\r\n }\r\n\r\n const explicitPage = explicitScrollPageRef.current;\r\n if (explicitPage != null && bestPage !== explicitPage) {\r\n return;\r\n }\r\n explicitScrollPageRef.current = null;\r\n\r\n if (bestPage !== lastReportedPageRef.current) {\r\n lastReportedPageRef.current = bestPage;\r\n setPage(bestPage, { scroll: false });\r\n }\r\n };\r\n\r\n const onScroll = () => {\r\n window.cancelAnimationFrame(frame);\r\n frame = window.requestAnimationFrame(syncPageFromScroll);\r\n };\r\n\r\n const onUserScrollIntent = () => {\r\n explicitScrollPageRef.current = null;\r\n skipScrollSyncRef.current = false;\r\n };\r\n\r\n stage.addEventListener(\"scroll\", onScroll, { passive: true });\r\n stage.addEventListener(\"wheel\", onUserScrollIntent, { passive: true });\r\n stage.addEventListener(\"touchstart\", onUserScrollIntent, { passive: true });\r\n stage.addEventListener(\"pointerdown\", onUserScrollIntent);\r\n return () => {\r\n window.cancelAnimationFrame(frame);\r\n stage.removeEventListener(\"scroll\", onScroll);\r\n stage.removeEventListener(\"wheel\", onUserScrollIntent);\r\n stage.removeEventListener(\"touchstart\", onUserScrollIntent);\r\n stage.removeEventListener(\"pointerdown\", onUserScrollIntent);\r\n };\r\n }, [pdf, numPages, setPage]);\r\n\r\n useEffect(() => {\r\n if (pdf && !loading) {\r\n stageRef.current?.focus({ preventScroll: true });\r\n }\r\n }, [loading, pdf]);\r\n\r\n useEffect(() => {\r\n const onWheel = (event: WheelEvent) => {\r\n if (!(event.ctrlKey || event.metaKey)) {\r\n wheelDeltaRef.current = 0;\r\n return;\r\n }\r\n\r\n const root = rootRef.current;\r\n if (!root?.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (!pdf || loading) {\r\n return;\r\n }\r\n\r\n let delta = event.deltaY;\r\n if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {\r\n delta *= 16;\r\n } else if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\r\n delta *= 100;\r\n }\r\n\r\n wheelDeltaRef.current += delta;\r\n if (Math.abs(wheelDeltaRef.current) < SCALE_WHEEL_THRESHOLD) {\r\n return;\r\n }\r\n\r\n const direction = wheelDeltaRef.current > 0 ? -1 : 1;\r\n wheelDeltaRef.current = 0;\r\n\r\n const next = Number((scaleRef.current + direction * SCALE_WHEEL_STEP).toFixed(2));\r\n if (next === scaleRef.current) {\r\n return;\r\n }\r\n\r\n setScaleValue(next);\r\n };\r\n\r\n window.addEventListener(\"wheel\", onWheel, { passive: false, capture: true });\r\n return () => {\r\n window.removeEventListener(\"wheel\", onWheel, { capture: true });\r\n };\r\n }, [loading, pdf, setScaleValue]);\r\n\r\n // Jump to the current search match without scrolling the page/window.\r\n useEffect(() => {\r\n const match = search.currentMatch;\r\n if (!match) {\r\n return;\r\n }\r\n\r\n setPage(match.pageNumber, { scroll: false });\r\n explicitScrollPageRef.current = match.pageNumber;\r\n\r\n const stage = stageRef.current;\r\n if (!stage) {\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let attempts = 0;\r\n let frame = 0;\r\n let release = () => {};\r\n\r\n const tryScrollToMatch = () => {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const highlight = stage.querySelector<HTMLElement>(\".rpe-search-highlight-current\");\r\n const pageNode = pageRefs.current.get(match.pageNumber);\r\n const target = highlight ?? pageNode;\r\n\r\n if (!target) {\r\n if (attempts < 30) {\r\n attempts += 1;\r\n frame = window.requestAnimationFrame(tryScrollToMatch);\r\n }\r\n return;\r\n }\r\n\r\n release = holdScrollSync(stage, skipScrollSyncRef, () => {\r\n const arrivedNode = pageRefs.current.get(match.pageNumber);\r\n if (\r\n explicitScrollPageRef.current === match.pageNumber &&\r\n arrivedNode &&\r\n isPageInView(stage, arrivedNode)\r\n ) {\r\n explicitScrollPageRef.current = null;\r\n }\r\n });\r\n scrollWithinContainer(stage, target, {\r\n block: highlight ? \"center\" : \"start\",\r\n behavior: \"smooth\",\r\n });\r\n };\r\n\r\n frame = window.requestAnimationFrame(tryScrollToMatch);\r\n\r\n return () => {\r\n cancelled = true;\r\n window.cancelAnimationFrame(frame);\r\n release();\r\n };\r\n }, [search.currentMatch, setPage]);\r\n\r\n const handleRootKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n const stage = stageRef.current;\r\n if (!stage || !pdf || event.defaultPrevented || event.altKey) {\r\n return;\r\n }\r\n\r\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"z\" && !event.shiftKey) {\r\n if (isEditableTarget(event.target) || texts.editingId || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n event.preventDefault();\r\n runUndo();\r\n return;\r\n }\r\n\r\n if (\r\n (event.ctrlKey || event.metaKey) &&\r\n (event.key.toLowerCase() === \"y\" || (event.key.toLowerCase() === \"z\" && event.shiftKey))\r\n ) {\r\n if (isEditableTarget(event.target) || texts.editingId || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n event.preventDefault();\r\n runRedo();\r\n return;\r\n }\r\n\r\n // Ctrl/Cmd+F for find\r\n if ((event.ctrlKey || event.metaKey) && event.key === \"f\") {\r\n event.preventDefault();\r\n const findInput = rootRef.current?.querySelector<HTMLInputElement>(\".rpe-find-input\");\r\n findInput?.focus();\r\n findInput?.select();\r\n return;\r\n }\r\n\r\n if ((event.ctrlKey || event.metaKey) && (event.key === \"=\" || event.key === \"+\" || event.key === \"-\")) {\r\n event.preventDefault();\r\n const direction = event.key === \"-\" ? -1 : 1;\r\n setScaleValue(Number((safeScale + direction * 0.25).toFixed(2)));\r\n return;\r\n }\r\n\r\n if (event.ctrlKey || event.metaKey) {\r\n return;\r\n }\r\n\r\n if (signatureModalOpen || imageModalOpen) {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n if (signatureModalOpen) {\r\n setSignatureModalOpen(false);\r\n if (!pendingSignature) {\r\n setActiveTool(\"select\");\r\n }\r\n }\r\n if (imageModalOpen) {\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n if (!pendingImage && !replacingImageId) {\r\n setActiveTool(\"select\");\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (isEditableTarget(event.target)) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n if (pagesOpen) {\r\n setPagesOpen(false);\r\n return;\r\n }\r\n if (propertiesOpen) {\r\n setPropertiesOpen(false);\r\n return;\r\n }\r\n if (texts.editingId) {\r\n texts.stopEdit();\r\n } else if (texts.selectedId) {\r\n texts.select(null);\r\n } else if (drawings.selectedId) {\r\n drawings.select(null);\r\n } else if (highlights.selectedId) {\r\n highlights.select(null);\r\n } else if (signatures.selectedId) {\r\n signatures.select(null);\r\n } else if (images.selectedId) {\r\n images.select(null);\r\n } else if (pendingSignature) {\r\n setPendingSignature(null);\r\n setActiveTool(\"select\");\r\n } else if (pendingImage) {\r\n setPendingImage(null);\r\n setActiveTool(\"select\");\r\n } else if (\r\n activeTool === \"draw\" ||\r\n activeTool === \"highlight\" ||\r\n activeTool === \"signature\" ||\r\n activeTool === \"image\"\r\n ) {\r\n setActiveTool(\"select\");\r\n }\r\n return;\r\n }\r\n\r\n if (event.key === \"Delete\" || event.key === \"Backspace\") {\r\n if (texts.selectedId) {\r\n event.preventDefault();\r\n handleRemoveText(texts.selectedId);\r\n return;\r\n }\r\n if (drawings.selectedId) {\r\n event.preventDefault();\r\n handleRemoveDraw(drawings.selectedId);\r\n return;\r\n }\r\n if (highlights.selectedId) {\r\n event.preventDefault();\r\n handleRemoveHighlight(highlights.selectedId);\r\n return;\r\n }\r\n if (signatures.selectedId) {\r\n event.preventDefault();\r\n handleRemoveSignature(signatures.selectedId);\r\n return;\r\n }\r\n if (images.selectedId) {\r\n event.preventDefault();\r\n handleRemoveImage(images.selectedId);\r\n return;\r\n }\r\n }\r\n\r\n const pageScroll = Math.max(stage.clientHeight * 0.9, KEYBOARD_LINE_SCROLL);\r\n const takeOverStageScroll = () => {\r\n explicitScrollPageRef.current = null;\r\n skipScrollSyncRef.current = false;\r\n };\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\":\r\n event.preventDefault();\r\n if (safePage > 1) {\r\n setPage(safePage - 1);\r\n }\r\n break;\r\n case \"ArrowRight\":\r\n event.preventDefault();\r\n if (safePage < numPages) {\r\n setPage(safePage + 1);\r\n }\r\n break;\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: KEYBOARD_LINE_SCROLL });\r\n break;\r\n case \"ArrowUp\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: -KEYBOARD_LINE_SCROLL });\r\n break;\r\n case \"PageDown\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: pageScroll });\r\n break;\r\n case \"PageUp\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: -pageScroll });\r\n break;\r\n case \"Home\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollTo({ top: 0 });\r\n break;\r\n case \"End\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollTo({ top: stage.scrollHeight });\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const classNames = [\"rpe-root\", compact ? \"rpe-root-compact\" : \"\", className]\r\n .filter(Boolean)\r\n .join(\" \");\r\n const bodyClass = [\r\n \"rpe-body\",\r\n !showSidebar || compact ? \"rpe-body-no-sidebar\" : \"\",\r\n compact ? \"rpe-body-compact\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n const sidebarNode = showSidebar\r\n ? sidebar\r\n ? sidebar(sidebarApi)\r\n : <PagesSidebar {...sidebarApi} />\r\n : null;\r\n const propertiesNode = (\r\n <PropertiesPanel\r\n activeTool={activeTool}\r\n selectedText={texts.selectedItem}\r\n selectedStroke={drawings.selectedItem}\r\n selectedHighlight={highlights.selectedItem}\r\n selectedSignature={signatures.selectedItem}\r\n selectedImage={images.selectedItem}\r\n drawColor={drawings.color}\r\n drawWidth={drawings.width}\r\n highlightColor={highlights.color}\r\n onUpdateText={handleUpdateText}\r\n onUpdateSignature={handleUpdateSignature}\r\n onUpdateImage={handleUpdateImage}\r\n onReplaceImage={() => {\r\n if (!images.selectedId) {\r\n return;\r\n }\r\n setReplacingImageId(images.selectedId);\r\n setImageModalOpen(true);\r\n }}\r\n onUpdateStroke={handleUpdateDraw}\r\n onDrawColorChange={handleDrawColorChange}\r\n onDrawWidthChange={handleDrawWidthChange}\r\n onHighlightColorChange={handleHighlightColorChange}\r\n onClose={compact ? () => setPropertiesOpen(false) : undefined}\r\n />\r\n );\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={classNames}\r\n style={style}\r\n tabIndex={-1}\r\n onKeyDown={handleRootKeyDown}\r\n >\r\n {showToolbar ? (\r\n toolbar ? (\r\n toolbar(toolbarApi)\r\n ) : (\r\n <Toolbar\r\n {...toolbarApi}\r\n compact={compact}\r\n showPagesButton={showSidebar}\r\n pagesOpen={pagesOpen}\r\n onTogglePages={() => setPagesOpen((open) => !open)}\r\n />\r\n )\r\n ) : null}\r\n\r\n <div className={bodyClass}>\r\n {!compact ? sidebarNode : null}\r\n\r\n <div className=\"rpe-stage-wrap\">\r\n {activeTool === \"draw\" ? (\r\n <InkToolbar\r\n color={drawings.color}\r\n width={drawings.width}\r\n onColorChange={handleDrawColorChange}\r\n onWidthChange={handleDrawWidthChange}\r\n />\r\n ) : null}\r\n {activeTool === \"highlight\" ? (\r\n <HighlightToolbar\r\n color={highlights.color}\r\n onColorChange={handleHighlightColorChange}\r\n />\r\n ) : null}\r\n {activeTool === \"signature\" && pendingSignature && !signatureModalOpen ? (\r\n <SignatureToolbar\r\n onChange={() => setSignatureModalOpen(true)}\r\n onCancel={() => {\r\n setPendingSignature(null);\r\n setActiveTool(\"select\");\r\n }}\r\n />\r\n ) : null}\r\n {activeTool === \"image\" && pendingImage && !imageModalOpen ? (\r\n <ImageToolbar\r\n onChange={() => {\r\n setReplacingImageId(null);\r\n setImageModalOpen(true);\r\n }}\r\n onCancel={() => {\r\n setPendingImage(null);\r\n setActiveTool(\"select\");\r\n }}\r\n />\r\n ) : null}\r\n <div\r\n ref={stageRef}\r\n className=\"rpe-stage\"\r\n tabIndex={0}\r\n role=\"region\"\r\n aria-label=\"PDF pages\"\r\n onMouseDown={(event) => {\r\n const onChrome =\r\n event.target instanceof HTMLElement &&\r\n Boolean(\r\n event.target.closest(\r\n \".rpe-text-hit-layer, .rpe-text-frame, .rpe-text-toolbar, .rpe-text-handle, .rpe-rotate-handle, .rpe-ink-toolbar, .rpe-draw-frame, .rpe-draw-stroke, .rpe-draw-hit, .rpe-highlight-frame, .rpe-highlight-toolbar, .rpe-highlight-item-toolbar, .rpe-highlight-hit, .rpe-signature-frame, .rpe-signature-hit-layer, .rpe-image-frame, .rpe-image-hit-layer\",\r\n ),\r\n );\r\n\r\n if (onChrome) {\r\n return;\r\n }\r\n\r\n stageRef.current?.focus({ preventScroll: true });\r\n texts.stopEdit();\r\n texts.select(null);\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }}\r\n >\r\n {!file ? (\r\n <div className=\"rpe-message\">\r\n {emptyState ?? \"Open a PDF to get started.\"}\r\n </div>\r\n ) : null}\r\n\r\n {file && loading && !pdf ? (\r\n <div className=\"rpe-load-status\" role=\"status\">\r\n <div className=\"rpe-load-status-row\">\r\n <span className=\"rpe-load-spinner\" aria-hidden=\"true\" />\r\n <span>\r\n <span aria-live=\"polite\">\r\n {loadPhase === \"downloading\" ? \"Downloading…\" : \"Loading file…\"}\r\n </span>\r\n {loadPhase === \"downloading\" && downloadProgress != null ? (\r\n <span className=\"rpe-load-percent\" aria-hidden=\"true\">\r\n {\" \"}\r\n {downloadProgress}%\r\n </span>\r\n ) : null}\r\n </span>\r\n </div>\r\n {loadPhase === \"downloading\" && downloadProgress != null ? (\r\n <div className=\"rpe-load-bar\" aria-hidden=\"true\">\r\n <div style={{ width: `${downloadProgress}%` }} />\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n {file && error && !pdf ? (\r\n <div className=\"rpe-message rpe-message-error\" role=\"alert\">\r\n {error.message}\r\n </div>\r\n ) : null}\r\n\r\n {pdf ? (\r\n <div className=\"rpe-stage-pages\">\r\n {pageNumbers.map((pageNumber) => {\r\n const pageMatches = search.matches.filter(\r\n (m) => m.pageNumber === pageNumber,\r\n );\r\n \r\n // Find which match on this page is the current one\r\n let currentMatchIndexOnPage = -1;\r\n if (search.currentMatch && search.currentMatch.pageNumber === pageNumber) {\r\n const pageMatchesStartIndex = search.matches.findIndex(\r\n (m) => m.pageNumber === pageNumber,\r\n );\r\n if (pageMatchesStartIndex !== -1) {\r\n currentMatchIndexOnPage = search.currentIndex - pageMatchesStartIndex;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n key={pageNumber}\r\n className={\r\n pageNumber === enteringPage\r\n ? \"rpe-page-slot rpe-page-slot-added\"\r\n : \"rpe-page-slot\"\r\n }\r\n ref={(node) => assignPageRef(pageNumber, node)}\r\n >\r\n <PdfPage\r\n pdf={pdf}\r\n pageNumber={pageNumber}\r\n scale={safeScale}\r\n justAdded={pageNumber === enteringPage}\r\n estimatedSize={\r\n pageNumber === enteringPage\r\n ? readPageSlotSize(pageRefs.current.get(pageNumber - 1)) ??\r\n readPageSlotSize(pageRefs.current.get(pageNumber + 1))\r\n : undefined\r\n }\r\n searchMatches={pageMatches}\r\n currentSearchMatchIndex={currentMatchIndexOnPage}\r\n activeTool={activeTool}\r\n textAnnotations={texts.items}\r\n selectedTextId={texts.selectedId}\r\n editingTextId={texts.editingId}\r\n onAddTextAnnotation={handleAddText}\r\n onUpdateTextAnnotation={handleUpdateText}\r\n onSelectTextAnnotation={(id) => {\r\n texts.select(id);\r\n if (id) {\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onStartEditText={handleStartEditText}\r\n onStopEditText={handleStopEditText}\r\n onRemoveTextAnnotation={handleRemoveText}\r\n drawStrokes={drawings.items}\r\n selectedDrawId={drawings.selectedId}\r\n drawColor={drawings.color}\r\n drawWidth={drawings.width}\r\n onAddDrawStroke={handleAddDraw}\r\n onUpdateDrawStroke={handleUpdateDraw}\r\n onSelectDrawStroke={(id) => {\r\n drawings.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onRemoveDrawStroke={handleRemoveDraw}\r\n highlights={highlights.items}\r\n selectedHighlightId={highlights.selectedId}\r\n highlightColor={highlights.color}\r\n onAddHighlight={handleAddHighlight}\r\n onSelectHighlight={(id) => {\r\n highlights.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onUpdateHighlight={handleUpdateHighlight}\r\n onRemoveHighlight={handleRemoveHighlight}\r\n onHighlightColorChange={handleHighlightColorChange}\r\n signatures={signatures.items}\r\n selectedSignatureId={signatures.selectedId}\r\n pendingSignature={pendingSignature}\r\n onAddSignature={handleAddSignature}\r\n onUpdateSignature={handleUpdateSignature}\r\n onSelectSignature={(id) => {\r\n signatures.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onRemoveSignature={handleRemoveSignature}\r\n images={images.items}\r\n selectedImageId={images.selectedId}\r\n pendingImage={pendingImage}\r\n onAddImage={handleAddImage}\r\n onUpdateImage={handleUpdateImage}\r\n onSelectImage={(id) => {\r\n images.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n }\r\n }}\r\n onRemoveImage={handleRemoveImage}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n {!compact ? propertiesNode : null}\r\n </div>\r\n\r\n {compact && showSidebar && toolbar ? (\r\n <button\r\n type=\"button\"\r\n className={`rpe-pages-fab${pagesOpen ? \" rpe-tool-button-active\" : \"\"}`}\r\n aria-label={pagesOpen ? \"Close pages\" : \"Open pages\"}\r\n aria-expanded={pagesOpen}\r\n aria-controls=\"rpe-pages-drawer\"\r\n onClick={() => setPagesOpen((open) => !open)}\r\n >\r\n <PanelLeftIcon />\r\n </button>\r\n ) : null}\r\n\r\n {compact && showSidebar ? (\r\n <div\r\n id=\"rpe-pages-drawer\"\r\n className={`rpe-drawer${pagesOpen ? \" rpe-drawer-open\" : \"\"}`}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-drawer-backdrop\"\r\n aria-label=\"Close pages\"\r\n tabIndex={pagesOpen ? 0 : -1}\r\n onClick={() => setPagesOpen(false)}\r\n />\r\n <div\r\n className=\"rpe-drawer-panel\"\r\n role=\"dialog\"\r\n aria-label=\"Pages\"\r\n aria-hidden={!pagesOpen}\r\n inert={!pagesOpen || undefined}\r\n >\r\n <div className=\"rpe-drawer-header\">\r\n <span>Pages</span>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-drawer-close\"\r\n aria-label=\"Close pages\"\r\n onClick={() => setPagesOpen(false)}\r\n >\r\n <XIcon />\r\n </button>\r\n </div>\r\n {sidebarNode}\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {compact ? (\r\n <>\r\n {selectedAnnotationId && !propertiesOpen ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-sheet-handle\"\r\n onClick={() => setPropertiesOpen(true)}\r\n >\r\n Properties\r\n </button>\r\n ) : null}\r\n <div className={`rpe-sheet${propertiesOpen ? \" rpe-sheet-open\" : \"\"}`}>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-sheet-backdrop\"\r\n aria-label=\"Close properties\"\r\n tabIndex={propertiesOpen ? 0 : -1}\r\n onClick={() => setPropertiesOpen(false)}\r\n />\r\n <div\r\n className=\"rpe-sheet-panel\"\r\n role=\"dialog\"\r\n aria-label=\"Properties\"\r\n aria-hidden={!propertiesOpen}\r\n inert={!propertiesOpen || undefined}\r\n >\r\n {propertiesNode}\r\n </div>\r\n </div>\r\n </>\r\n ) : null}\r\n\r\n {signatureModalOpen ? (\r\n <SignatureModal\r\n onApply={(src) => {\r\n void toPendingSignature(src)\r\n .catch(() => ({ src, aspect: 2.5 }))\r\n .then((pending) => {\r\n setPendingSignature(pending);\r\n setActiveTool(\"signature\");\r\n setSignatureModalOpen(false);\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n });\r\n }}\r\n onClose={() => {\r\n setSignatureModalOpen(false);\r\n if (!pendingSignature) {\r\n setActiveTool(\"select\");\r\n }\r\n }}\r\n />\r\n ) : null}\r\n\r\n {imageModalOpen ? (\r\n <ImageModal\r\n onApply={(src, name) => {\r\n void toPendingImage(src, name)\r\n .catch(() => ({ src, aspect: 1.5, name }))\r\n .then((pending) => {\r\n if (replacingImageId) {\r\n handleReplaceImage(replacingImageId, pending.src);\r\n setReplacingImageId(null);\r\n setImageModalOpen(false);\r\n return;\r\n }\r\n\r\n setPendingImage(pending);\r\n setActiveTool(\"image\");\r\n setImageModalOpen(false);\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n });\r\n }}\r\n onClose={() => {\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n if (!pendingImage && !replacingImageId) {\r\n setActiveTool(\"select\");\r\n }\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/drawPaths.ts","../src/lib/geometry.ts","../src/lib/textLayout.ts","../src/lib/exportPdf.ts","../src/configureWorker.ts","../src/components/HighlightToolbar.tsx","../src/lib/imageUpload.ts","../src/components/icons.tsx","../src/components/ImageModal.tsx","../src/components/ImageToolbar.tsx","../src/components/InkToolbar.tsx","../src/components/DrawLayer.tsx","../src/components/HighlightLayer.tsx","../src/lib/highlightRects.ts","../src/components/ImageBox.tsx","../src/components/SignatureBox.tsx","../src/lib/contentEditableText.ts","../src/components/TextBox.tsx","../src/components/PdfPage.tsx","../src/components/ThumbnailOverlay.tsx","../src/components/PageThumbnail.tsx","../src/components/PagesSidebar.tsx","../src/components/PropertiesPanel.tsx","../src/lib/signatureImage.ts","../src/components/SignaturePad.tsx","../src/components/SignatureTypePreview.tsx","../src/components/SignatureModal.tsx","../src/components/SignatureToolbar.tsx","../src/components/Toolbar.tsx","../src/hooks/useCompactLayout.ts","../src/hooks/useDrawStrokes.ts","../src/hooks/useEditorHistory.ts","../src/lib/rasterizeTextAnnotation.ts","../src/lib/runExportPdf.ts","../src/hooks/useExportPdf.ts","../src/hooks/useHighlights.ts","../src/hooks/useImages.ts","../src/hooks/usePdfDocument.ts","../src/lib/findTextMatches.ts","../src/hooks/usePdfTextSearch.ts","../src/hooks/useSignatures.ts","../src/hooks/useTextAnnotations.ts","../src/lib/deletePage.ts","../src/lib/historyShortcuts.ts","../src/lib/insertBlankPage.ts","../src/lib/movePage.ts","../src/lib/pageOrder.ts","../src/PdfEditor.tsx"],"names":["rgb","StandardFonts","drawStroke","LineCapStyle","degrees","PDFDocument","version","GlobalWorkerOptions","jsx","jsxs","useRef","useState","useEffect","SWATCHES","handlePointerMove","clamp01","MIN_MOVE_PX","pointFromEvent","selected","deltaX","deltaY","Fragment","HANDLES","MIN_BOX_PX","clamp","setLayerDimensions","TextLayer","memo","deletePage","useMemo","distance","useCallback","MAX_UPLOAD_BYTES","MAX_IMAGE_EDGE","fitWithin","measureDataUrl","forwardRef","SignaturePad","useImperativeHandle","Icon","useLayoutEffect","createId","last","exportPdfBytes","getDocument","prev","nextPage","page","name"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DrawPoint } from \"../types\";\r\n\r\nconst MIN_POINT_GAP = 0.002;\r\nconst SIMPLIFY_EPSILON = 0.003;\r\n\r\nfunction distance(a: DrawPoint, b: DrawPoint) {\r\n return Math.hypot(b.x - a.x, b.y - a.y);\r\n}\r\n\r\nexport function pathLength(points: DrawPoint[]) {\r\n let length = 0;\r\n for (let index = 1; index < points.length; index += 1) {\r\n length += distance(points[index - 1], points[index]);\r\n }\r\n return length;\r\n}\r\n\r\nexport function appendPoint(points: DrawPoint[], next: DrawPoint): DrawPoint[] {\r\n const last = points[points.length - 1];\r\n if (last && distance(last, next) < MIN_POINT_GAP) {\r\n return points;\r\n }\r\n return [...points, next];\r\n}\r\n\r\nfunction pointToSegmentDistance(point: DrawPoint, start: DrawPoint, end: DrawPoint) {\r\n const dx = end.x - start.x;\r\n const dy = end.y - start.y;\r\n const lengthSq = dx * dx + dy * dy;\r\n\r\n if (lengthSq === 0) {\r\n return distance(point, start);\r\n }\r\n\r\n const t = Math.max(\r\n 0,\r\n Math.min(1, ((point.x - start.x) * dx + (point.y - start.y) * dy) / lengthSq),\r\n );\r\n\r\n return Math.hypot(point.x - (start.x + t * dx), point.y - (start.y + t * dy));\r\n}\r\n\r\nexport function simplifyPoints(points: DrawPoint[], epsilon = SIMPLIFY_EPSILON): DrawPoint[] {\r\n if (points.length <= 2) {\r\n return points;\r\n }\r\n\r\n let maxDistance = 0;\r\n let maxIndex = 0;\r\n const first = points[0];\r\n const last = points[points.length - 1];\r\n\r\n for (let index = 1; index < points.length - 1; index += 1) {\r\n const current = pointToSegmentDistance(points[index], first, last);\r\n if (current > maxDistance) {\r\n maxDistance = current;\r\n maxIndex = index;\r\n }\r\n }\r\n\r\n if (maxDistance <= epsilon) {\r\n return [first, last];\r\n }\r\n\r\n const left = simplifyPoints(points.slice(0, maxIndex + 1), epsilon);\r\n const right = simplifyPoints(points.slice(maxIndex), epsilon);\r\n return [...left.slice(0, -1), ...right];\r\n}\r\n\r\nfunction formatCoord(value: number) {\r\n return value.toFixed(4);\r\n}\r\n\r\nexport function pointsToSvgPath(points: DrawPoint[]): string {\r\n if (points.length === 0) {\r\n return \"\";\r\n }\r\n\r\n const first = points[0];\r\n if (points.length === 1) {\r\n const x = formatCoord(first.x);\r\n const y = formatCoord(first.y);\r\n return `M ${x} ${y} L ${x} ${y}`;\r\n }\r\n\r\n if (points.length === 2) {\r\n const second = points[1];\r\n return `M ${formatCoord(first.x)} ${formatCoord(first.y)} L ${formatCoord(second.x)} ${formatCoord(second.y)}`;\r\n }\r\n\r\n let path = `M ${formatCoord(first.x)} ${formatCoord(first.y)}`;\r\n\r\n for (let index = 1; index < points.length - 1; index += 1) {\r\n const current = points[index];\r\n const next = points[index + 1];\r\n const midX = (current.x + next.x) / 2;\r\n const midY = (current.y + next.y) / 2;\r\n path += ` Q ${formatCoord(current.x)} ${formatCoord(current.y)} ${formatCoord(midX)} ${formatCoord(midY)}`;\r\n }\r\n\r\n const last = points[points.length - 1];\r\n path += ` T ${formatCoord(last.x)} ${formatCoord(last.y)}`;\r\n return path;\r\n}\r\n\r\nexport function translatePoints(points: DrawPoint[], dx: number, dy: number): DrawPoint[] {\r\n if (dx === 0 && dy === 0) {\r\n return points;\r\n }\r\n\r\n return points.map((point) => ({\r\n x: point.x + dx,\r\n y: point.y + dy,\r\n }));\r\n}\r\n\r\nexport function strokeBounds(points: DrawPoint[], pad = 0) {\r\n let minX = 1;\r\n let minY = 1;\r\n let maxX = 0;\r\n let maxY = 0;\r\n\r\n for (const point of points) {\r\n minX = Math.min(minX, point.x);\r\n minY = Math.min(minY, point.y);\r\n maxX = Math.max(maxX, point.x);\r\n maxY = Math.max(maxY, point.y);\r\n }\r\n\r\n return {\r\n left: Math.max(0, minX - pad),\r\n top: Math.max(0, minY - pad),\r\n width: Math.min(1, maxX + pad) - Math.max(0, minX - pad),\r\n height: Math.min(1, maxY + pad) - Math.max(0, minY - pad),\r\n };\r\n}\r\n\r\nexport function hitTestStroke(points: DrawPoint[], point: DrawPoint, threshold: number) {\r\n if (points.length === 0) {\r\n return false;\r\n }\r\n\r\n if (points.length === 1) {\r\n return distance(points[0], point) <= threshold;\r\n }\r\n\r\n for (let index = 1; index < points.length; index += 1) {\r\n if (pointToSegmentDistance(point, points[index - 1], points[index]) <= threshold) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n","export function normalizeDegrees(angle: number): number {\r\n return ((angle % 360) + 360) % 360;\r\n}\r\n\r\nexport function snapDegrees(angle: number, increment: number): number {\r\n return Math.round(angle / increment) * increment;\r\n}\r\n\r\nexport function pointerDeltaToLocal(\r\n deltaX: number,\r\n deltaY: number,\r\n rotationDeg: number,\r\n): { x: number; y: number } {\r\n const rad = (rotationDeg * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n return {\r\n x: deltaX * cos + deltaY * sin,\r\n y: -deltaX * sin + deltaY * cos,\r\n };\r\n}\r\n\r\nexport function angleDeltaDegrees(\r\n centerX: number,\r\n centerY: number,\r\n fromX: number,\r\n fromY: number,\r\n toX: number,\r\n toY: number,\r\n): number {\r\n const from = Math.atan2(fromY - centerY, fromX - centerX);\r\n const to = Math.atan2(toY - centerY, toX - centerX);\r\n return ((to - from) * 180) / Math.PI;\r\n}\r\n\r\nexport function rotatePoint(\r\n x: number,\r\n y: number,\r\n cx: number,\r\n cy: number,\r\n angleDeg: number,\r\n): { x: number; y: number } {\r\n const rad = (angleDeg * Math.PI) / 180;\r\n const dx = x - cx;\r\n const dy = y - cy;\r\n return {\r\n x: cx + dx * Math.cos(rad) - dy * Math.sin(rad),\r\n y: cy + dx * Math.sin(rad) + dy * Math.cos(rad),\r\n };\r\n}\r\n\r\nexport function clampBoxTranslation(\r\n bounds: { left: number; top: number; width: number; height: number },\r\n dx: number,\r\n dy: number,\r\n) {\r\n return {\r\n dx: Math.min(Math.max(dx, -bounds.left), 1 - (bounds.left + bounds.width)),\r\n dy: Math.min(Math.max(dy, -bounds.top), 1 - (bounds.top + bounds.height)),\r\n };\r\n}\r\n\r\n/** CSS clockwise rotation around center → PDF draw origin (y-up) and PDF angle. */\r\nexport function cssBoxToPdfDrawOrigin(\r\n left: number,\r\n top: number,\r\n width: number,\r\n height: number,\r\n visualHeight: number,\r\n cssRotation: number,\r\n): { x: number; y: number; angle: number } {\r\n const angle = -cssRotation;\r\n const rad = (angle * Math.PI) / 180;\r\n const centerX = left + width / 2;\r\n const centerY = visualHeight - top - height / 2;\r\n const hx = width / 2;\r\n const hy = height / 2;\r\n\r\n return {\r\n x: centerX - (hx * Math.cos(rad) - hy * Math.sin(rad)),\r\n y: centerY - (hx * Math.sin(rad) + hy * Math.cos(rad)),\r\n angle,\r\n };\r\n}\r\n","export const TEXT_PADDING_X = 8;\r\nexport const TEXT_PADDING_Y = 4;\r\nexport const TEXT_LINE_HEIGHT = 1.25;\r\n\r\nexport function normalizeTextNewlines(text: string): string {\r\n return text.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\r\n}\r\n\r\nexport function wrapMeasuredLines(\r\n text: string,\r\n measure: (value: string) => number,\r\n maxWidth?: number,\r\n): string[] {\r\n const paragraphs = normalizeTextNewlines(text).split(\"\\n\");\r\n\r\n if (maxWidth === undefined || maxWidth <= 0) {\r\n return paragraphs;\r\n }\r\n\r\n const lines: string[] = [];\r\n\r\n for (const paragraph of paragraphs) {\r\n if (paragraph === \"\") {\r\n lines.push(\"\");\r\n continue;\r\n }\r\n\r\n const tokens = paragraph.split(/(\\s+)/);\r\n let current = \"\";\r\n\r\n const pushCurrent = () => {\r\n if (current !== \"\") {\r\n lines.push(current);\r\n current = \"\";\r\n }\r\n };\r\n\r\n const appendBroken = (token: string) => {\r\n let chunk = \"\";\r\n for (const char of token) {\r\n const trial = chunk + char;\r\n if (chunk && measure(trial) > maxWidth) {\r\n lines.push(chunk);\r\n chunk = char;\r\n } else {\r\n chunk = trial;\r\n }\r\n }\r\n current = chunk;\r\n };\r\n\r\n for (const token of tokens) {\r\n if (!token) {\r\n continue;\r\n }\r\n\r\n const next = current + token;\r\n if (measure(next) <= maxWidth || current === \"\") {\r\n if (current === \"\" && measure(token) > maxWidth) {\r\n appendBroken(token);\r\n continue;\r\n }\r\n current = next;\r\n continue;\r\n }\r\n\r\n pushCurrent();\r\n if (measure(token) > maxWidth) {\r\n appendBroken(token);\r\n } else {\r\n current = /^\\s+$/.test(token) ? \"\" : token;\r\n }\r\n }\r\n\r\n pushCurrent();\r\n }\r\n\r\n return lines;\r\n}\r\n\r\nexport function textBoxFontCss(annotation: {\r\n fontStyle: string;\r\n fontWeight: string;\r\n fontSize: number;\r\n fontFamily: string;\r\n}): string {\r\n return `${annotation.fontStyle} ${annotation.fontWeight} ${annotation.fontSize}px \"${annotation.fontFamily}\", sans-serif`;\r\n}\r\n","import {\r\n degrees,\r\n LineCapStyle,\r\n PDFDocument,\r\n rgb,\r\n StandardFonts,\r\n type PDFFont,\r\n type PDFImage,\r\n type PDFPage,\r\n} from \"pdf-lib\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\nimport { pointsToSvgPath } from \"./drawPaths\";\r\nimport { cssBoxToPdfDrawOrigin, rotatePoint } from \"./geometry\";\r\nimport {\r\n TEXT_LINE_HEIGHT,\r\n TEXT_PADDING_X,\r\n TEXT_PADDING_Y,\r\n wrapMeasuredLines,\r\n} from \"./textLayout\";\r\n\r\nconst WINANSI_REPLACEMENTS: Record<string, string> = {\r\n \"\\u2018\": \"'\",\r\n \"\\u2019\": \"'\",\r\n \"\\u201C\": '\"',\r\n \"\\u201D\": '\"',\r\n \"\\u2013\": \"-\",\r\n \"\\u2014\": \"-\",\r\n \"\\u2026\": \"...\",\r\n \"\\u00A0\": \" \",\r\n};\r\n\r\nexport type ExportWorkerRequest = {\r\n type: \"export\";\r\n pdfBytes: ArrayBuffer;\r\n annotations: TextAnnotation[];\r\n drawings?: DrawStroke[];\r\n highlights?: HighlightAnnotation[];\r\n signatures?: SignatureAnnotation[];\r\n images?: ImageAnnotation[];\r\n};\r\n\r\nexport type ExportWorkerResponse =\r\n | { type: \"success\"; pdfBytes: ArrayBuffer }\r\n | { type: \"error\"; message: string };\r\n\r\nfunction parseColor(value: string) {\r\n const hex = value.trim().replace(\"#\", \"\");\r\n const normalized =\r\n hex.length === 3\r\n ? hex\r\n .split(\"\")\r\n .map((part) => part + part)\r\n .join(\"\")\r\n : hex.padEnd(6, \"0\").slice(0, 6);\r\n const red = Number.parseInt(normalized.slice(0, 2), 16);\r\n const green = Number.parseInt(normalized.slice(2, 4), 16);\r\n const blue = Number.parseInt(normalized.slice(4, 6), 16);\r\n\r\n return rgb(\r\n (Number.isFinite(red) ? red : 0) / 255,\r\n (Number.isFinite(green) ? green : 0) / 255,\r\n (Number.isFinite(blue) ? blue : 0) / 255,\r\n );\r\n}\r\n\r\nfunction resolveStandardFont(\r\n family: string,\r\n weight: TextAnnotation[\"fontWeight\"],\r\n style: TextAnnotation[\"fontStyle\"],\r\n): StandardFonts {\r\n const isBold = weight === \"bold\";\r\n const isItalic = style === \"italic\";\r\n const lower = family.toLowerCase();\r\n const isTimes = lower.includes(\"times\") || lower.includes(\"georgia\");\r\n const isCourier = lower.includes(\"courier\");\r\n\r\n if (isTimes) {\r\n if (isBold && isItalic) return StandardFonts.TimesRomanBoldItalic;\r\n if (isBold) return StandardFonts.TimesRomanBold;\r\n if (isItalic) return StandardFonts.TimesRomanItalic;\r\n return StandardFonts.TimesRoman;\r\n }\r\n\r\n if (isCourier) {\r\n if (isBold && isItalic) return StandardFonts.CourierBoldOblique;\r\n if (isBold) return StandardFonts.CourierBold;\r\n if (isItalic) return StandardFonts.CourierOblique;\r\n return StandardFonts.Courier;\r\n }\r\n\r\n if (isBold && isItalic) return StandardFonts.HelveticaBoldOblique;\r\n if (isBold) return StandardFonts.HelveticaBold;\r\n if (isItalic) return StandardFonts.HelveticaOblique;\r\n return StandardFonts.Helvetica;\r\n}\r\n\r\nfunction toWinAnsi(text: string): string {\r\n let result = \"\";\r\n\r\n for (const char of text) {\r\n if (char === \"\\t\") {\r\n result += \" \";\r\n continue;\r\n }\r\n\r\n if (char === \"\\n\") {\r\n result += \"\\n\";\r\n continue;\r\n }\r\n\r\n if (char === \"\\r\") {\r\n continue;\r\n }\r\n\r\n const replacement = WINANSI_REPLACEMENTS[char];\r\n if (replacement) {\r\n result += replacement;\r\n continue;\r\n }\r\n\r\n const code = char.charCodeAt(0);\r\n if (code < 32) {\r\n continue;\r\n }\r\n\r\n result += code <= 255 ? char : \"?\";\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction wrapText(\r\n text: string,\r\n font: PDFFont,\r\n fontSize: number,\r\n maxWidth?: number,\r\n): string[] {\r\n return wrapMeasuredLines(\r\n toWinAnsi(text),\r\n (value) => font.widthOfTextAtSize(value, fontSize),\r\n maxWidth,\r\n );\r\n}\r\n\r\nfunction normalizeRotation(angle: number): number {\r\n return ((angle % 360) + 360) % 360;\r\n}\r\n\r\nfunction getVisualSize(page: PDFPage): { width: number; height: number } {\r\n const { width, height } = page.getSize();\r\n const rotation = normalizeRotation(page.getRotation().angle);\r\n if (rotation === 90 || rotation === 270) {\r\n return { width: height, height: width };\r\n }\r\n return { width, height };\r\n}\r\n\r\nfunction visualToPdf(\r\n page: PDFPage,\r\n visualX: number,\r\n visualYFromBottom: number,\r\n): { x: number; y: number } {\r\n const { width, height } = page.getSize();\r\n const rotation = normalizeRotation(page.getRotation().angle);\r\n\r\n switch (rotation) {\r\n case 90:\r\n return { x: width - visualYFromBottom, y: visualX };\r\n case 180:\r\n return { x: width - visualX, y: height - visualYFromBottom };\r\n case 270:\r\n return { x: visualYFromBottom, y: height - visualX };\r\n default:\r\n return { x: visualX, y: visualYFromBottom };\r\n }\r\n}\r\n\r\nconst HIGHLIGHT_OPACITY = 0.38;\r\n\r\nfunction drawHighlight(page: PDFPage, highlight: HighlightAnnotation) {\r\n const visual = getVisualSize(page);\r\n const color = parseColor(highlight.color);\r\n\r\n for (const rect of highlight.rects) {\r\n const left = rect.left * visual.width;\r\n const top = rect.top * visual.height;\r\n const width = rect.width * visual.width;\r\n const height = rect.height * visual.height;\r\n const corners = [\r\n visualToPdf(page, left, visual.height - top),\r\n visualToPdf(page, left + width, visual.height - top),\r\n visualToPdf(page, left, visual.height - top - height),\r\n visualToPdf(page, left + width, visual.height - top - height),\r\n ];\r\n const xs = corners.map((corner) => corner.x);\r\n const ys = corners.map((corner) => corner.y);\r\n const x = Math.min(...xs);\r\n const y = Math.min(...ys);\r\n\r\n page.drawRectangle({\r\n x,\r\n y,\r\n width: Math.max(0, Math.max(...xs) - x),\r\n height: Math.max(0, Math.max(...ys) - y),\r\n color,\r\n opacity: HIGHLIGHT_OPACITY,\r\n borderWidth: 0,\r\n });\r\n }\r\n}\r\n\r\nfunction drawStroke(page: PDFPage, stroke: DrawStroke) {\r\n if (stroke.points.length === 0) {\r\n return;\r\n }\r\n\r\n const visual = getVisualSize(page);\r\n const pdfPoints = stroke.points.map((point) => {\r\n const visualX = point.x * visual.width;\r\n const visualYFromTop = point.y * visual.height;\r\n const pdfPoint = visualToPdf(page, visualX, visual.height - visualYFromTop);\r\n return { x: pdfPoint.x, y: -pdfPoint.y };\r\n });\r\n\r\n const path = pointsToSvgPath(pdfPoints);\r\n if (!path) {\r\n return;\r\n }\r\n\r\n page.drawSvgPath(path, {\r\n x: 0,\r\n y: 0,\r\n borderColor: parseColor(stroke.color),\r\n borderWidth: stroke.width,\r\n borderLineCap: LineCapStyle.Round,\r\n });\r\n}\r\n\r\nfunction dataUrlToBytes(dataUrl: string): Uint8Array {\r\n const comma = dataUrl.indexOf(\",\");\r\n const base64 = comma >= 0 ? dataUrl.slice(comma + 1) : dataUrl;\r\n const binary = atob(base64);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let index = 0; index < binary.length; index += 1) {\r\n bytes[index] = binary.charCodeAt(index);\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction dataUrlKind(src: string): \"png\" | \"jpg\" {\r\n if (src.startsWith(\"data:image/jpeg\") || src.startsWith(\"data:image/jpg\")) {\r\n return \"jpg\";\r\n }\r\n return \"png\";\r\n}\r\n\r\nfunction drawPlacedImage(\r\n page: PDFPage,\r\n box: {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n rotation?: number;\r\n opacity?: number;\r\n },\r\n image: PDFImage,\r\n) {\r\n const visual = getVisualSize(page);\r\n const left = box.x * visual.width;\r\n const top = box.y * visual.height;\r\n const width = box.width * visual.width;\r\n const height = box.height * visual.height;\r\n const pageRotation = normalizeRotation(page.getRotation().angle);\r\n const origin = cssBoxToPdfDrawOrigin(\r\n left,\r\n top,\r\n width,\r\n height,\r\n visual.height,\r\n box.rotation ?? 0,\r\n );\r\n const point = visualToPdf(page, origin.x, origin.y);\r\n\r\n page.drawImage(image, {\r\n x: point.x,\r\n y: point.y,\r\n width,\r\n height,\r\n rotate: degrees(normalizeRotation(pageRotation + origin.angle)),\r\n opacity: box.opacity ?? 1,\r\n });\r\n}\r\n\r\nfunction drawAnnotation(\r\n page: PDFPage,\r\n annotation: TextAnnotation,\r\n font: PDFFont,\r\n) {\r\n if (!annotation.text) {\r\n return;\r\n }\r\n\r\n const visual = getVisualSize(page);\r\n const boxLeft = annotation.x * visual.width;\r\n const boxTop = annotation.y * visual.height;\r\n const boxWidth =\r\n annotation.width !== undefined ? annotation.width * visual.width : undefined;\r\n const maxTextWidth =\r\n boxWidth !== undefined ? Math.max(0, boxWidth - TEXT_PADDING_X * 2) : undefined;\r\n const lines = wrapText(\r\n annotation.text,\r\n font,\r\n annotation.fontSize,\r\n maxTextWidth,\r\n );\r\n const color = parseColor(annotation.color);\r\n const pageRotation = normalizeRotation(page.getRotation().angle);\r\n const cssRotation = annotation.rotation ?? 0;\r\n const pdfAngle = -cssRotation;\r\n const resolvedWidth =\r\n boxWidth ??\r\n Math.max(\r\n ...lines.map((line) => (line ? font.widthOfTextAtSize(line, annotation.fontSize) : 0)),\r\n 0,\r\n ) +\r\n TEXT_PADDING_X * 2;\r\n const lineBox = annotation.fontSize * TEXT_LINE_HEIGHT;\r\n const resolvedHeight =\r\n annotation.height !== undefined\r\n ? annotation.height * visual.height\r\n : TEXT_PADDING_Y * 2 + Math.max(lines.length, 1) * lineBox;\r\n const ascent = font.heightAtSize(annotation.fontSize, { descender: false });\r\n const fontHeight = font.heightAtSize(annotation.fontSize);\r\n const halfLeading = (lineBox - fontHeight) / 2;\r\n const centerX = boxLeft + resolvedWidth / 2;\r\n const centerY = visual.height - boxTop - resolvedHeight / 2;\r\n\r\n lines.forEach((line, index) => {\r\n const lineWidth = line ? font.widthOfTextAtSize(line, annotation.fontSize) : 0;\r\n let textX = boxLeft + TEXT_PADDING_X;\r\n\r\n if (boxWidth !== undefined) {\r\n if (annotation.textAlign === \"center\") {\r\n textX = boxLeft + (boxWidth - lineWidth) / 2;\r\n } else if (annotation.textAlign === \"right\") {\r\n textX = boxLeft + boxWidth - TEXT_PADDING_X - lineWidth;\r\n }\r\n }\r\n\r\n const lineTop = TEXT_PADDING_Y + index * lineBox;\r\n if (lineTop + lineBox > resolvedHeight + 0.5) {\r\n return;\r\n }\r\n\r\n const textTop = boxTop + lineTop + halfLeading + ascent;\r\n const origin = rotatePoint(\r\n textX,\r\n visual.height - textTop,\r\n centerX,\r\n centerY,\r\n pdfAngle,\r\n );\r\n const point = visualToPdf(page, origin.x, origin.y);\r\n\r\n if (!line) {\r\n return;\r\n }\r\n\r\n page.drawText(line, {\r\n x: point.x,\r\n y: point.y,\r\n size: annotation.fontSize,\r\n font,\r\n color,\r\n rotate: degrees(normalizeRotation(pageRotation + pdfAngle)),\r\n });\r\n });\r\n}\r\n\r\nexport async function exportPdfBytes(\r\n pdfBytes: Uint8Array,\r\n annotations: TextAnnotation[],\r\n drawings: DrawStroke[] = [],\r\n highlights: HighlightAnnotation[] = [],\r\n signatures: SignatureAnnotation[] = [],\r\n images: ImageAnnotation[] = [],\r\n): Promise<Uint8Array> {\r\n if (\r\n annotations.length === 0 &&\r\n drawings.length === 0 &&\r\n highlights.length === 0 &&\r\n signatures.length === 0 &&\r\n images.length === 0\r\n ) {\r\n return pdfBytes.slice();\r\n }\r\n\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const fontCache = new Map<StandardFonts, PDFFont>();\r\n\r\n const embedFont = async (key: StandardFonts) => {\r\n const cached = fontCache.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n const font = await pdf.embedFont(key);\r\n fontCache.set(key, font);\r\n return font;\r\n };\r\n\r\n const pageCount = pdf.getPageCount();\r\n\r\n for (const highlight of highlights) {\r\n if (highlight.pageNumber < 1 || highlight.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n drawHighlight(pdf.getPage(highlight.pageNumber - 1), highlight);\r\n }\r\n\r\n for (const annotation of annotations) {\r\n if (annotation.pageNumber < 1 || annotation.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const page = pdf.getPage(annotation.pageNumber - 1);\r\n const fontKey = resolveStandardFont(\r\n annotation.fontFamily,\r\n annotation.fontWeight,\r\n annotation.fontStyle,\r\n );\r\n const font = await embedFont(fontKey);\r\n drawAnnotation(page, annotation, font);\r\n }\r\n\r\n for (const stroke of drawings) {\r\n if (stroke.pageNumber < 1 || stroke.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const page = pdf.getPage(stroke.pageNumber - 1);\r\n drawStroke(page, stroke);\r\n }\r\n\r\n const imageCache = new Map<string, PDFImage>();\r\n\r\n const embedPlacedImage = async (src: string) => {\r\n const cached = imageCache.get(src);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const bytes = dataUrlToBytes(src);\r\n const image =\r\n dataUrlKind(src) === \"jpg\" ? await pdf.embedJpg(bytes) : await pdf.embedPng(bytes);\r\n imageCache.set(src, image);\r\n return image;\r\n };\r\n\r\n for (const signature of signatures) {\r\n if (signature.pageNumber < 1 || signature.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const image = await embedPlacedImage(signature.src);\r\n drawPlacedImage(pdf.getPage(signature.pageNumber - 1), signature, image);\r\n }\r\n\r\n for (const placed of images) {\r\n if (placed.pageNumber < 1 || placed.pageNumber > pageCount) {\r\n continue;\r\n }\r\n\r\n const image = await embedPlacedImage(placed.src);\r\n drawPlacedImage(pdf.getPage(placed.pageNumber - 1), placed, image);\r\n }\r\n\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","import { GlobalWorkerOptions, version } from \"pdfjs-dist/legacy/build/pdf.mjs\";\r\n\r\n// The worker is its own thread, so a polyfill on the page never reaches it.\r\nconst DEFAULT_WORKER_SRC = `https://unpkg.com/pdfjs-dist@${version}/legacy/build/pdf.worker.min.mjs`;\r\n\r\nexport function configurePdfWorker(workerSrc?: string): void {\r\n GlobalWorkerOptions.workerSrc = workerSrc ?? DEFAULT_WORKER_SRC;\r\n}\r\n","const SWATCHES = [\"#facc15\", \"#4ade80\", \"#38bdf8\", \"#f472b6\", \"#fb923c\"] as const;\r\n\r\ntype HighlightToolbarProps = {\r\n color: string;\r\n onColorChange: (color: string) => void;\r\n};\r\n\r\nfunction sameColor(a: string, b: string) {\r\n return a.toLowerCase() === b.toLowerCase();\r\n}\r\n\r\nexport function HighlightToolbar({ color, onColorChange }: HighlightToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar rpe-highlight-toolbar\" role=\"toolbar\" aria-label=\"Highlight tools\">\r\n <div className=\"rpe-ink-swatches\">\r\n {SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${sameColor(color, swatch) ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={sameColor(color, swatch)}\r\n onClick={() => onColorChange(swatch)}\r\n />\r\n ))}\r\n <label className=\"rpe-ink-picker\" title=\"Custom color\">\r\n <span className=\"rpe-ink-picker-chip\" style={{ background: color }} />\r\n <input\r\n type=\"color\"\r\n value={color}\r\n aria-label=\"Custom highlight color\"\r\n onChange={(event) => onColorChange(event.target.value)}\r\n />\r\n </label>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { PendingImage } from \"../types\";\r\n\r\nconst MAX_UPLOAD_BYTES = 8 * 1024 * 1024;\r\nconst MAX_IMAGE_EDGE = 2400;\r\nconst JPEG_QUALITY = 0.88;\r\nconst ACCEPTED_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/webp\"]);\r\n\r\nfunction fitWithin(width: number, height: number, maxEdge: number) {\r\n const edge = Math.max(width, height);\r\n if (edge <= maxEdge) {\r\n return { width, height };\r\n }\r\n\r\n const scale = maxEdge / edge;\r\n return {\r\n width: Math.max(1, Math.round(width * scale)),\r\n height: Math.max(1, Math.round(height * scale)),\r\n };\r\n}\r\n\r\nfunction canvasHasAlpha(canvas: HTMLCanvasElement) {\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return false;\r\n }\r\n\r\n const { data } = context.getImageData(0, 0, canvas.width, canvas.height);\r\n for (let index = 3; index < data.length; index += 4) {\r\n if (data[index] < 250) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function measureDataUrl(src: string): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve({\r\n width: image.naturalWidth,\r\n height: image.naturalHeight,\r\n });\r\n };\r\n image.onerror = () => reject(new Error(\"Could not read that image.\"));\r\n image.src = src;\r\n });\r\n}\r\n\r\nexport async function toPendingImage(src: string, name?: string): Promise<PendingImage> {\r\n const size = await measureDataUrl(src);\r\n return {\r\n src,\r\n aspect: size.width / Math.max(1, size.height),\r\n name,\r\n };\r\n}\r\n\r\nexport async function fileToImageDataUrl(file: File): Promise<string> {\r\n if (file.size > MAX_UPLOAD_BYTES) {\r\n throw new Error(\"Image is too large (max 8 MB).\");\r\n }\r\n\r\n if (!ACCEPTED_TYPES.has(file.type) && !file.type.startsWith(\"image/\")) {\r\n throw new Error(\"Choose a PNG, JPG, or WebP image.\");\r\n }\r\n\r\n if (file.type && !ACCEPTED_TYPES.has(file.type) && file.type.startsWith(\"image/\")) {\r\n throw new Error(\"Choose a PNG, JPG, or WebP image.\");\r\n }\r\n\r\n const bitmap = await createImageBitmap(file);\r\n const size = fitWithin(bitmap.width, bitmap.height, MAX_IMAGE_EDGE);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = size.width;\r\n canvas.height = size.height;\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n bitmap.close();\r\n throw new Error(\"Could not read that image.\");\r\n }\r\n\r\n context.drawImage(bitmap, 0, 0, size.width, size.height);\r\n bitmap.close();\r\n\r\n if (canvasHasAlpha(canvas)) {\r\n return canvas.toDataURL(\"image/png\");\r\n }\r\n\r\n return canvas.toDataURL(\"image/jpeg\", JPEG_QUALITY);\r\n}\r\n","import type { ReactNode, SVGProps } from \"react\";\r\n\r\ntype IconProps = SVGProps<SVGSVGElement> & {\r\n size?: number;\r\n};\r\n\r\nfunction Icon({ size = 16, children, ...props }: IconProps & { children: ReactNode }) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n aria-hidden=\"true\"\r\n {...props}\r\n >\r\n {children}\r\n </svg>\r\n );\r\n}\r\n\r\nexport function FileTextIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\" />\r\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\r\n <path d=\"M10 9H8\" />\r\n <path d=\"M16 13H8\" />\r\n <path d=\"M16 17H8\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function Undo2Icon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M9 14 4 9l5-5\" />\r\n <path d=\"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function Redo2Icon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m15 14 5-5-5-5\" />\r\n <path d=\"M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function MousePointer2Icon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function TypeIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M12 4v16\" />\r\n <path d=\"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2\" />\r\n <path d=\"M9 20h6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PencilIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\r\n <path d=\"m15 5 4 4\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function HighlighterIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m9 11-6 6v3h9l3-3\" />\r\n <path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PenToolIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M15.707 21.293a1 1 0 0 1-1.414 0l-1.586-1.586a1 1 0 0 1 0-1.414l5.586-5.586a1 1 0 0 1 1.414 0l1.586 1.586a1 1 0 0 1 0 1.414z\" />\r\n <path d=\"m18 13-1.375-6.874a1 1 0 0 0-.746-.776L3.235 2.028a1 1 0 0 0-1.207 1.207L5.35 15.879a1 1 0 0 0 .776.746L13 18\" />\r\n <path d=\"m2.3 2.3 7.286 7.286\" />\r\n <circle cx=\"11\" cy=\"11\" r=\"2\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ImageIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\r\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\r\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function SearchIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m21 21-4.34-4.34\" />\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ZoomOutIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\r\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ZoomInIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\r\n <line x1=\"11\" x2=\"11\" y1=\"8\" y2=\"14\" />\r\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ChevronLeftIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m15 18-6-6 6-6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ChevronRightIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m9 18 6-6-6-6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function ChevronDownIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"m6 9 6 6 6-6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function CheckIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M20 6 9 17l-5-5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function XIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function DownloadIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M12 15V3\" />\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\r\n <path d=\"m7 10 5 5 5-5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PlusIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M5 12h14\" />\r\n <path d=\"M12 5v14\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function MinusIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M5 12h14\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function TrashIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M3 6h18\" />\r\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\r\n <path d=\"M10 11v6\" />\r\n <path d=\"M14 11v6\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function GripVerticalIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <circle cx=\"9\" cy=\"6\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"15\" cy=\"6\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"9\" cy=\"12\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"15\" cy=\"12\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"9\" cy=\"18\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n <circle cx=\"15\" cy=\"18\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function RotateCcwIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\r\n <path d=\"M3 3v5h5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function RotateCwIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\r\n <path d=\"M21 3v5h-5\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function UploadIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <path d=\"M12 3v12\" />\r\n <path d=\"m8 7 4-4 4 4\" />\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function PanelLeftIcon(props: IconProps) {\r\n return (\r\n <Icon {...props}>\r\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\r\n <path d=\"M9 3v18\" />\r\n </Icon>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type DragEvent, type KeyboardEvent } from \"react\";\r\nimport { fileToImageDataUrl, measureDataUrl } from \"../lib/imageUpload\";\r\nimport { ImageIcon, UploadIcon, XIcon } from \"./icons\";\r\n\r\ntype ImageModalProps = {\r\n onApply: (src: string, name?: string) => void;\r\n onClose: () => void;\r\n};\r\n\r\nfunction formatBytes(bytes: number) {\r\n if (bytes < 1024) {\r\n return `${bytes} B`;\r\n }\r\n if (bytes < 1024 * 1024) {\r\n return `${Math.round(bytes / 1024)} KB`;\r\n }\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\nexport function ImageModal({ onApply, onClose }: ImageModalProps) {\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const [uploadSrc, setUploadSrc] = useState<string | null>(null);\r\n const [fileName, setFileName] = useState<string | null>(null);\r\n const [fileSize, setFileSize] = useState<number | null>(null);\r\n const [dimensions, setDimensions] = useState<{ width: number; height: number } | null>(null);\r\n const [uploadError, setUploadError] = useState<string | null>(null);\r\n const [dragOver, setDragOver] = useState(false);\r\n const [busy, setBusy] = useState(false);\r\n\r\n const canApply = !busy && Boolean(uploadSrc);\r\n\r\n useEffect(() => {\r\n dialogRef.current?.focus();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onClose();\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKeyDown);\r\n return () => window.removeEventListener(\"keydown\", onKeyDown);\r\n }, [onClose]);\r\n\r\n const handleApply = () => {\r\n if (!uploadSrc || busy) {\r\n return;\r\n }\r\n onApply(uploadSrc, fileName ?? undefined);\r\n };\r\n\r\n const handleDialogKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"Enter\" && (event.ctrlKey || event.metaKey) && canApply) {\r\n event.preventDefault();\r\n handleApply();\r\n }\r\n };\r\n\r\n const readUpload = async (file: File | undefined) => {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n setUploadError(null);\r\n setBusy(true);\r\n try {\r\n const src = await fileToImageDataUrl(file);\r\n const size = await measureDataUrl(src);\r\n setUploadSrc(src);\r\n setFileName(file.name);\r\n setFileSize(file.size);\r\n setDimensions(size);\r\n } catch (caught) {\r\n setUploadSrc(null);\r\n setFileName(null);\r\n setFileSize(null);\r\n setDimensions(null);\r\n setUploadError(caught instanceof Error ? caught.message : \"Could not read that image.\");\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const handleDrop = (event: DragEvent<HTMLLabelElement>) => {\r\n event.preventDefault();\r\n setDragOver(false);\r\n void readUpload(event.dataTransfer.files[0]);\r\n };\r\n\r\n const clearUpload = () => {\r\n setUploadSrc(null);\r\n setFileName(null);\r\n setFileSize(null);\r\n setDimensions(null);\r\n setUploadError(null);\r\n };\r\n\r\n return (\r\n <div className=\"rpe-modal-backdrop\" onMouseDown={onClose}>\r\n <div\r\n ref={dialogRef}\r\n className=\"rpe-modal rpe-image-modal\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"rpe-image-title\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n onKeyDown={handleDialogKeyDown}\r\n >\r\n <div className=\"rpe-modal-header\">\r\n <div>\r\n <h2 id=\"rpe-image-title\" className=\"rpe-modal-title\">\r\n Add image\r\n </h2>\r\n <p className=\"rpe-modal-subtitle\">\r\n Upload a photo or graphic, then click a page to place it.\r\n </p>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-close\"\r\n aria-label=\"Close\"\r\n onClick={onClose}\r\n >\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n <div className=\"rpe-image-modal-body\">\r\n <input\r\n ref={fileInputRef}\r\n id=\"rpe-image-upload\"\r\n type=\"file\"\r\n accept=\"image/png,image/jpeg,image/webp\"\r\n className=\"rpe-signature-file\"\r\n onChange={(event) => {\r\n void readUpload(event.target.files?.[0]);\r\n event.currentTarget.value = \"\";\r\n }}\r\n />\r\n <label\r\n htmlFor=\"rpe-image-upload\"\r\n className={`rpe-image-dropzone${dragOver ? \" rpe-image-dropzone-active\" : \"\"}${uploadSrc ? \" rpe-image-dropzone-filled\" : \"\"}`}\r\n onDragEnter={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragOver={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragLeave={() => setDragOver(false)}\r\n onDrop={handleDrop}\r\n >\r\n {uploadSrc ? (\r\n <span className=\"rpe-image-preview-frame\">\r\n <img src={uploadSrc} alt={fileName ?? \"Uploaded image preview\"} />\r\n </span>\r\n ) : (\r\n <span className=\"rpe-image-dropzone-copy\">\r\n <span className=\"rpe-image-dropzone-icon\">\r\n <ImageIcon size={22} />\r\n </span>\r\n <strong>{busy ? \"Preparing image…\" : \"Drop an image here\"}</strong>\r\n <span>or click to browse PNG, JPG, or WebP · max 8 MB</span>\r\n </span>\r\n )}\r\n </label>\r\n\r\n {uploadSrc && dimensions ? (\r\n <div className=\"rpe-image-meta\">\r\n <div className=\"rpe-image-meta-copy\">\r\n <strong>{fileName ?? \"Untitled image\"}</strong>\r\n <span>\r\n {dimensions.width} × {dimensions.height} px\r\n {fileSize != null ? ` · ${formatBytes(fileSize)}` : \"\"}\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n onClick={() => {\r\n clearUpload();\r\n fileInputRef.current?.click();\r\n }}\r\n >\r\n <UploadIcon size={14} />\r\n Replace\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n {uploadError ? (\r\n <div className=\"rpe-signature-error\" role=\"alert\">\r\n {uploadError}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"rpe-modal-footer\">\r\n <button type=\"button\" className=\"rpe-modal-secondary\" onClick={onClose}>\r\n Cancel\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-primary\"\r\n disabled={!canApply}\r\n onClick={handleApply}\r\n >\r\n {busy ? \"Preparing…\" : \"Use image\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","type ImageToolbarProps = {\r\n onChange: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\nexport function ImageToolbar({ onChange, onCancel }: ImageToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar rpe-signature-place-toolbar\" role=\"toolbar\" aria-label=\"Place image\">\r\n <span className=\"rpe-signature-place-hint\">Click a page to place your image</span>\r\n <span className=\"rpe-ink-divider\" />\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onChange}>\r\n Change\r\n </button>\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onCancel}>\r\n Cancel\r\n </button>\r\n </div>\r\n );\r\n}\r\n","const SWATCHES = [\"#111827\", \"#dc2626\", \"#2563eb\", \"#16a34a\"] as const;\r\nconst WIDTHS = [\r\n { value: 1, label: \"Thin\" },\r\n { value: 2.5, label: \"Pen\" },\r\n { value: 5, label: \"Marker\" },\r\n { value: 8, label: \"Bold\" },\r\n] as const;\r\n\r\ntype InkToolbarProps = {\r\n color: string;\r\n width: number;\r\n onColorChange: (color: string) => void;\r\n onWidthChange: (width: number) => void;\r\n};\r\n\r\nexport function InkToolbar({\r\n color,\r\n width,\r\n onColorChange,\r\n onWidthChange,\r\n}: InkToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar\" role=\"toolbar\" aria-label=\"Draw tools\">\r\n <div className=\"rpe-ink-swatches\">\r\n {SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Ink color ${swatch}`}\r\n aria-pressed={color.toLowerCase() === swatch}\r\n onClick={() => onColorChange(swatch)}\r\n />\r\n ))}\r\n <label className=\"rpe-ink-picker\" title=\"Custom color\">\r\n <span className=\"rpe-ink-picker-chip\" style={{ background: color }} />\r\n <input\r\n type=\"color\"\r\n value={color}\r\n aria-label=\"Custom ink color\"\r\n onChange={(event) => onColorChange(event.target.value)}\r\n />\r\n </label>\r\n </div>\r\n\r\n <span className=\"rpe-ink-divider\" />\r\n\r\n <div className=\"rpe-ink-widths\">\r\n {WIDTHS.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n className={`rpe-ink-width${width === option.value ? \" rpe-ink-width-active\" : \"\"}`}\r\n aria-label={`${option.label} stroke`}\r\n aria-pressed={width === option.value}\r\n title={option.label}\r\n onClick={() => onWidthChange(option.value)}\r\n >\r\n <span\r\n className=\"rpe-ink-width-dot\"\r\n style={{ width: option.value + 4, height: option.value + 4 }}\r\n />\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type PointerEvent as ReactPointerEvent } from \"react\";\r\nimport {\r\n appendPoint,\r\n hitTestStroke,\r\n pathLength,\r\n pointsToSvgPath,\r\n simplifyPoints,\r\n strokeBounds,\r\n translatePoints,\r\n} from \"../lib/drawPaths\";\r\nimport { clampBoxTranslation } from \"../lib/geometry\";\r\nimport type { DrawPoint, DrawStroke, Tool } from \"../types\";\r\nimport { TrashIcon } from \"./icons\";\r\n\r\nconst MIN_STROKE_LENGTH = 0.008;\r\nconst MIN_MOVE_PX = 3;\r\n\r\ntype MoveDrag = {\r\n id: string;\r\n startX: number;\r\n startY: number;\r\n originPoints: DrawPoint[];\r\n};\r\n\r\ntype DrawLayerProps = {\r\n pageNumber: number;\r\n scale: number;\r\n strokes: DrawStroke[];\r\n selectedId: string | null;\r\n activeTool: Tool;\r\n color: string;\r\n width: number;\r\n onAdd: (stroke: Omit<DrawStroke, \"id\">) => void;\r\n onSelect: (id: string | null) => void;\r\n onUpdate: (id: string, changes: Partial<DrawStroke>) => void;\r\n onRemove: (id: string) => void;\r\n};\r\n\r\nfunction clamp01(value: number) {\r\n return Math.min(1, Math.max(0, value));\r\n}\r\n\r\nfunction pointFromEvent(event: { clientX: number; clientY: number }, node: HTMLElement): DrawPoint {\r\n const rect = node.getBoundingClientRect();\r\n return {\r\n x: clamp01((event.clientX - rect.left) / rect.width),\r\n y: clamp01((event.clientY - rect.top) / rect.height),\r\n };\r\n}\r\n\r\nexport function DrawLayer({\r\n pageNumber,\r\n scale,\r\n strokes,\r\n selectedId,\r\n activeTool,\r\n color,\r\n width,\r\n onAdd,\r\n onSelect,\r\n onUpdate,\r\n onRemove,\r\n}: DrawLayerProps) {\r\n const layerRef = useRef<HTMLDivElement>(null);\r\n const [draftPoints, setDraftPoints] = useState<DrawPoint[] | null>(null);\r\n const [drag, setDrag] = useState<MoveDrag | null>(null);\r\n const draftRef = useRef<DrawPoint[] | null>(null);\r\n const drawingRef = useRef(false);\r\n const suppressClickRef = useRef(false);\r\n\r\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (activeTool !== \"draw\" || event.button !== 0) {\r\n return;\r\n }\r\n\r\n const layer = layerRef.current;\r\n if (!layer) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n drawingRef.current = true;\r\n const start = [pointFromEvent(event, layer)];\r\n draftRef.current = start;\r\n layer.setPointerCapture(event.pointerId);\r\n setDraftPoints(start);\r\n onSelect(null);\r\n };\r\n\r\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (!drawingRef.current || !layerRef.current || !draftRef.current) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const next = appendPoint(draftRef.current, pointFromEvent(event, layerRef.current));\r\n draftRef.current = next;\r\n setDraftPoints(next);\r\n };\r\n\r\n const finishStroke = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (!drawingRef.current) {\r\n return;\r\n }\r\n\r\n drawingRef.current = false;\r\n if (layerRef.current?.hasPointerCapture(event.pointerId)) {\r\n layerRef.current.releasePointerCapture(event.pointerId);\r\n }\r\n\r\n const points = draftRef.current;\r\n draftRef.current = null;\r\n setDraftPoints(null);\r\n\r\n if (!points || pathLength(points) < MIN_STROKE_LENGTH) {\r\n return;\r\n }\r\n\r\n onAdd({\r\n pageNumber,\r\n points: simplifyPoints(points),\r\n color,\r\n width,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = layerRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < MIN_MOVE_PX) {\r\n return;\r\n }\r\n\r\n suppressClickRef.current = true;\r\n const rect = page.getBoundingClientRect();\r\n if (rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const { dx, dy } = clampBoxTranslation(\r\n strokeBounds(drag.originPoints),\r\n (event.clientX - drag.startX) / rect.width,\r\n (event.clientY - drag.startY) / rect.height,\r\n );\r\n onUpdate(drag.id, { points: translatePoints(drag.originPoints, dx, dy) });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent, stroke: DrawStroke) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onSelect(stroke.id);\r\n setDrag({\r\n id: stroke.id,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originPoints: stroke.points.map((point) => ({ ...point })),\r\n });\r\n };\r\n\r\n const handleSelectPointerDown = (\r\n event: ReactPointerEvent<SVGPathElement>,\r\n stroke: DrawStroke,\r\n ) => {\r\n if (activeTool === \"draw\" || event.button !== 0) {\r\n return;\r\n }\r\n\r\n beginMove(event, stroke);\r\n };\r\n\r\n const handleLayerClick = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (suppressClickRef.current) {\r\n suppressClickRef.current = false;\r\n event.stopPropagation();\r\n return;\r\n }\r\n\r\n if (activeTool === \"draw\" || !layerRef.current) {\r\n return;\r\n }\r\n\r\n const point = pointFromEvent(event, layerRef.current);\r\n const rect = layerRef.current.getBoundingClientRect();\r\n let hitId: string | null = null;\r\n\r\n for (let index = strokes.length - 1; index >= 0; index -= 1) {\r\n const stroke = strokes[index];\r\n const threshold = (stroke.width * scale) / 2 / rect.width + 0.012;\r\n if (hitTestStroke(stroke.points, point, threshold)) {\r\n hitId = stroke.id;\r\n break;\r\n }\r\n }\r\n\r\n if (hitId) {\r\n event.stopPropagation();\r\n onSelect(hitId);\r\n return;\r\n }\r\n\r\n onSelect(null);\r\n };\r\n\r\n const selectedStroke = strokes.find((stroke) => stroke.id === selectedId) ?? null;\r\n const selectedBounds = selectedStroke\r\n ? strokeBounds(selectedStroke.points, (selectedStroke.width * scale) / 2 / 800 + 0.012)\r\n : null;\r\n\r\n return (\r\n <div\r\n ref={layerRef}\r\n className={`rpe-draw-layer${activeTool === \"draw\" ? \" rpe-draw-layer-active\" : \"\"}`}\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={finishStroke}\r\n onPointerCancel={finishStroke}\r\n onClick={handleLayerClick}\r\n >\r\n <svg className=\"rpe-draw-svg\" viewBox=\"0 0 1 1\" preserveAspectRatio=\"none\">\r\n {strokes.map((stroke) => {\r\n const path = pointsToSvgPath(stroke.points);\r\n if (!path) {\r\n return null;\r\n }\r\n\r\n return (\r\n <g key={stroke.id}>\r\n <path\r\n className=\"rpe-draw-hit\"\r\n d={path}\r\n fill=\"none\"\r\n stroke=\"rgba(0,0,0,0.01)\"\r\n strokeWidth={Math.max(stroke.width * scale + 14, 24)}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n onPointerDown={(event) => handleSelectPointerDown(event, stroke)}\r\n />\r\n <path\r\n className={`rpe-draw-stroke${stroke.id === selectedId ? \" rpe-draw-stroke-selected\" : \"\"}`}\r\n d={path}\r\n fill=\"none\"\r\n stroke={stroke.color}\r\n strokeWidth={stroke.width * scale}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n pointerEvents=\"none\"\r\n />\r\n </g>\r\n );\r\n })}\r\n {draftPoints && draftPoints.length > 0 ? (\r\n <path\r\n className=\"rpe-draw-stroke rpe-draw-stroke-live\"\r\n d={pointsToSvgPath(draftPoints)}\r\n fill=\"none\"\r\n stroke={color}\r\n strokeWidth={width * scale}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n pointerEvents=\"none\"\r\n />\r\n ) : null}\r\n </svg>\r\n\r\n {selectedStroke && selectedBounds ? (\r\n <div\r\n className={`rpe-draw-frame${drag ? \" rpe-text-frame-dragging\" : \"\"}`}\r\n style={{\r\n left: `${selectedBounds.left * 100}%`,\r\n top: `${selectedBounds.top * 100}%`,\r\n width: `${selectedBounds.width * 100}%`,\r\n height: `${selectedBounds.height * 100}%`,\r\n }}\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n beginMove(event, selectedStroke);\r\n }}\r\n >\r\n <div\r\n className={`rpe-text-toolbar rpe-draw-toolbar${selectedBounds.top < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete drawing\"\r\n onClick={() => onRemove(selectedStroke.id)}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type CSSProperties, type PointerEvent as ReactPointerEvent } from \"react\";\r\nimport { clampBoxTranslation } from \"../lib/geometry\";\r\nimport {\r\n clamp01,\r\n hitTestRects,\r\n isMeaningfulRect,\r\n normalizedRectFromPoints,\r\n rectsFromSelection,\r\n translateRects,\r\n unionBounds,\r\n} from \"../lib/highlightRects\";\r\nimport type { HighlightAnnotation, HighlightRect, Tool } from \"../types\";\r\nimport { TrashIcon } from \"./icons\";\r\n\r\nconst MIN_DRAG_PX = 4;\r\nconst MIN_MOVE_PX = 3;\r\nconst FLOATING_SWATCHES = [\"#facc15\", \"#4ade80\", \"#38bdf8\", \"#f472b6\", \"#fb923c\"] as const;\r\n\r\ntype HighlightLayerProps = {\r\n pageNumber: number;\r\n highlights: HighlightAnnotation[];\r\n selectedId: string | null;\r\n activeTool: Tool;\r\n color: string;\r\n onAdd: (highlight: Omit<HighlightAnnotation, \"id\">) => void;\r\n onSelect: (id: string | null) => void;\r\n onUpdate: (id: string, changes: Partial<HighlightAnnotation>) => void;\r\n onRemove: (id: string) => void;\r\n onColorChange: (color: string) => void;\r\n};\r\n\r\ntype MoveDrag = {\r\n id: string;\r\n startX: number;\r\n startY: number;\r\n originRects: HighlightRect[];\r\n};\r\n\r\ntype Point = { x: number; y: number };\r\n\r\nfunction pointFromEvent(event: { clientX: number; clientY: number }, node: HTMLElement): Point {\r\n const rect = node.getBoundingClientRect();\r\n return {\r\n x: clamp01((event.clientX - rect.left) / rect.width),\r\n y: clamp01((event.clientY - rect.top) / rect.height),\r\n };\r\n}\r\n\r\nfunction isTextTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) {\r\n return false;\r\n }\r\n\r\n return Boolean(target.closest(\".textLayer span, .textLayer br\"));\r\n}\r\n\r\nfunction isChromeTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) {\r\n return false;\r\n }\r\n\r\n return Boolean(\r\n target.closest(\r\n \".rpe-highlight-frame, .rpe-highlight-hit, .rpe-highlight-toolbar, .rpe-highlight-item-toolbar, .rpe-text-frame, .rpe-text-toolbar, .rpe-draw-frame, .rpe-draw-toolbar, .rpe-ink-toolbar\",\r\n ),\r\n );\r\n}\r\n\r\nfunction rectStyle(rect: HighlightRect): CSSProperties {\r\n return {\r\n left: `${rect.left * 100}%`,\r\n top: `${rect.top * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n };\r\n}\r\n\r\nexport function HighlightLayer({\r\n pageNumber,\r\n highlights,\r\n selectedId,\r\n activeTool,\r\n color,\r\n onAdd,\r\n onSelect,\r\n onUpdate,\r\n onRemove,\r\n onColorChange,\r\n}: HighlightLayerProps) {\r\n const layerRef = useRef<HTMLDivElement>(null);\r\n const [draftRect, setDraftRect] = useState<HighlightRect | null>(null);\r\n const [moveDrag, setMoveDrag] = useState<MoveDrag | null>(null);\r\n const dragRef = useRef<{\r\n pointerId: number;\r\n start: Point;\r\n startClient: { x: number; y: number };\r\n mode: \"text\" | \"rect\";\r\n current: HighlightRect | null;\r\n } | null>(null);\r\n const highlightsRef = useRef(highlights);\r\n const colorRef = useRef(color);\r\n const onAddRef = useRef(onAdd);\r\n const onSelectRef = useRef(onSelect);\r\n\r\n highlightsRef.current = highlights;\r\n colorRef.current = color;\r\n onAddRef.current = onAdd;\r\n onSelectRef.current = onSelect;\r\n\r\n useEffect(() => {\r\n const layer = layerRef.current;\r\n const page = layer?.closest<HTMLElement>(\".rpe-page\");\r\n if (!layer || !page || activeTool !== \"highlight\") {\r\n return;\r\n }\r\n\r\n const finish = (event: PointerEvent) => {\r\n const drag = dragRef.current;\r\n if (!drag || drag.pointerId !== event.pointerId) {\r\n return;\r\n }\r\n\r\n dragRef.current = null;\r\n setDraftRect(null);\r\n page.querySelector(\".textLayer\")?.classList.remove(\"selecting\");\r\n\r\n const moved =\r\n Math.abs(event.clientX - drag.startClient.x) >= MIN_DRAG_PX ||\r\n Math.abs(event.clientY - drag.startClient.y) >= MIN_DRAG_PX;\r\n\r\n if (drag.mode === \"rect\" && drag.current && isMeaningfulRect(drag.current)) {\r\n onAddRef.current({\r\n pageNumber,\r\n rects: [drag.current],\r\n color: colorRef.current,\r\n });\r\n window.getSelection()?.removeAllRanges();\r\n return;\r\n }\r\n\r\n if (drag.mode === \"text\" || moved) {\r\n const selected = rectsFromSelection(page);\r\n if (selected.rects.length > 0) {\r\n onAddRef.current({\r\n pageNumber,\r\n rects: selected.rects,\r\n color: colorRef.current,\r\n text: selected.text.trim() || undefined,\r\n });\r\n window.getSelection()?.removeAllRanges();\r\n return;\r\n }\r\n }\r\n\r\n if (!moved) {\r\n const point = pointFromEvent(event, page);\r\n let hitId: string | null = null;\r\n const items = highlightsRef.current;\r\n for (let index = items.length - 1; index >= 0; index -= 1) {\r\n const highlight = items[index];\r\n if (hitTestRects(highlight.rects, point.x, point.y)) {\r\n hitId = highlight.id;\r\n break;\r\n }\r\n }\r\n onSelectRef.current(hitId);\r\n }\r\n };\r\n\r\n const onPointerDown = (event: PointerEvent) => {\r\n if (event.button !== 0 || isChromeTarget(event.target)) {\r\n return;\r\n }\r\n\r\n const start = pointFromEvent(event, page);\r\n dragRef.current = {\r\n pointerId: event.pointerId,\r\n start,\r\n startClient: { x: event.clientX, y: event.clientY },\r\n mode: isTextTarget(event.target) ? \"text\" : \"rect\",\r\n current: null,\r\n };\r\n onSelectRef.current(null);\r\n\r\n const textLayer = page.querySelector(\".textLayer\");\r\n if (dragRef.current.mode === \"text\") {\r\n textLayer?.classList.add(\"selecting\");\r\n } else {\r\n event.preventDefault();\r\n textLayer?.classList.remove(\"selecting\");\r\n }\r\n };\r\n\r\n const onPointerMove = (event: PointerEvent) => {\r\n const drag = dragRef.current;\r\n if (!drag || drag.pointerId !== event.pointerId || drag.mode !== \"rect\") {\r\n return;\r\n }\r\n\r\n const next = normalizedRectFromPoints(drag.start, pointFromEvent(event, page));\r\n drag.current = next;\r\n setDraftRect(isMeaningfulRect(next) ? next : null);\r\n };\r\n\r\n const onPointerUp = (event: PointerEvent) => {\r\n finish(event);\r\n };\r\n\r\n page.addEventListener(\"pointerdown\", onPointerDown);\r\n window.addEventListener(\"pointermove\", onPointerMove);\r\n window.addEventListener(\"pointerup\", onPointerUp);\r\n window.addEventListener(\"pointercancel\", onPointerUp);\r\n\r\n return () => {\r\n page.removeEventListener(\"pointerdown\", onPointerDown);\r\n window.removeEventListener(\"pointermove\", onPointerMove);\r\n window.removeEventListener(\"pointerup\", onPointerUp);\r\n window.removeEventListener(\"pointercancel\", onPointerUp);\r\n dragRef.current = null;\r\n };\r\n }, [activeTool, pageNumber]);\r\n\r\n useEffect(() => {\r\n if (!moveDrag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = layerRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n if (Math.hypot(event.clientX - moveDrag.startX, event.clientY - moveDrag.startY) < MIN_MOVE_PX) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n if (rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const bounds = unionBounds(moveDrag.originRects);\r\n if (!bounds) {\r\n return;\r\n }\r\n\r\n const { dx, dy } = clampBoxTranslation(\r\n bounds,\r\n (event.clientX - moveDrag.startX) / rect.width,\r\n (event.clientY - moveDrag.startY) / rect.height,\r\n );\r\n onUpdate(moveDrag.id, { rects: translateRects(moveDrag.originRects, dx, dy) });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setMoveDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [moveDrag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent, highlight: HighlightAnnotation) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onSelect(highlight.id);\r\n setMoveDrag({\r\n id: highlight.id,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originRects: highlight.rects.map((rect) => ({ ...rect })),\r\n });\r\n };\r\n\r\n const selected = highlights.find((item) => item.id === selectedId) ?? null;\r\n const selectedBounds = selected ? unionBounds(selected.rects) : null;\r\n\r\n return (\r\n <div\r\n ref={layerRef}\r\n className={`rpe-highlight-layer${activeTool === \"highlight\" ? \" rpe-highlight-layer-active\" : \"\"}`}\r\n >\r\n <div className=\"rpe-highlight-marks\">\r\n {highlights.map((highlight) =>\r\n highlight.rects.map((rect, index) => (\r\n <div\r\n key={`${highlight.id}-${index}`}\r\n className={`rpe-highlight-mark${highlight.id === selectedId ? \" rpe-highlight-mark-selected\" : \"\"}`}\r\n style={{\r\n ...rectStyle(rect),\r\n background: highlight.color,\r\n }}\r\n />\r\n )),\r\n )}\r\n {draftRect ? (\r\n <div\r\n className=\"rpe-highlight-mark rpe-highlight-mark-live\"\r\n style={{\r\n ...rectStyle(draftRect),\r\n background: color,\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"rpe-highlight-chrome\">\r\n {activeTool !== \"highlight\"\r\n ? highlights.map((highlight) =>\r\n highlight.rects.map((rect, index) => (\r\n <button\r\n key={`${highlight.id}-hit-${index}`}\r\n type=\"button\"\r\n className=\"rpe-highlight-hit\"\r\n style={rectStyle(rect)}\r\n aria-label=\"Select highlight\"\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n beginMove(event, highlight);\r\n }}\r\n />\r\n )),\r\n )\r\n : null}\r\n\r\n {selected && selectedBounds ? (\r\n <div\r\n className={`rpe-highlight-frame${moveDrag ? \" rpe-text-frame-dragging\" : \"\"}`}\r\n style={rectStyle(selectedBounds)}\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n beginMove(event, selected);\r\n }}\r\n >\r\n <div\r\n className={`rpe-text-toolbar rpe-highlight-item-toolbar${selectedBounds.top < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n {FLOATING_SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${selected.color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={selected.color.toLowerCase() === swatch}\r\n onClick={() => onColorChange(swatch)}\r\n />\r\n ))}\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete highlight\"\r\n onClick={() => onRemove(selected.id)}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { HighlightRect } from \"../types\";\r\n\r\nconst MIN_CLIENT_SIZE = 1;\r\nconst MIN_NORMALIZED = 0.002;\r\nconst LINE_TOP_TOLERANCE = 0.004;\r\nconst LINE_HEIGHT_TOLERANCE = 0.006;\r\nconst LINE_GAP_TOLERANCE = 0.008;\r\nconst MIN_RECT_AREA = 0.00008;\r\n\r\nexport function clamp01(value: number) {\r\n return Math.min(1, Math.max(0, value));\r\n}\r\n\r\nexport function mergeLineRects(rects: HighlightRect[]): HighlightRect[] {\r\n if (rects.length <= 1) {\r\n return rects.map((rect) => ({ ...rect }));\r\n }\r\n\r\n const sorted = [...rects].sort((a, b) => a.top - b.top || a.left - b.left);\r\n const merged: HighlightRect[] = [];\r\n\r\n for (const rect of sorted) {\r\n const last = merged[merged.length - 1];\r\n if (!last) {\r\n merged.push({ ...rect });\r\n continue;\r\n }\r\n\r\n const sameLine =\r\n Math.abs(last.top - rect.top) < LINE_TOP_TOLERANCE &&\r\n Math.abs(last.height - rect.height) < LINE_HEIGHT_TOLERANCE;\r\n const adjacent = rect.left <= last.left + last.width + LINE_GAP_TOLERANCE;\r\n\r\n if (sameLine && adjacent) {\r\n const right = Math.max(last.left + last.width, rect.left + rect.width);\r\n last.left = Math.min(last.left, rect.left);\r\n last.width = right - last.left;\r\n last.top = Math.min(last.top, rect.top);\r\n last.height = Math.max(last.height, rect.height);\r\n } else {\r\n merged.push({ ...rect });\r\n }\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nexport function normalizeClientRects(\r\n clientRects: ArrayLike<DOMRect>,\r\n pageRect: DOMRect,\r\n): HighlightRect[] {\r\n const rects: HighlightRect[] = [];\r\n\r\n for (let index = 0; index < clientRects.length; index += 1) {\r\n const rect = clientRects[index];\r\n if (rect.width < MIN_CLIENT_SIZE || rect.height < MIN_CLIENT_SIZE) {\r\n continue;\r\n }\r\n\r\n const next = {\r\n left: clamp01((rect.left - pageRect.left) / pageRect.width),\r\n top: clamp01((rect.top - pageRect.top) / pageRect.height),\r\n width: clamp01(rect.width / pageRect.width),\r\n height: clamp01(rect.height / pageRect.height),\r\n };\r\n\r\n if (next.width > MIN_NORMALIZED && next.height > MIN_NORMALIZED) {\r\n rects.push(next);\r\n }\r\n }\r\n\r\n return mergeLineRects(rects);\r\n}\r\n\r\nexport function rectsFromSelection(pageEl: HTMLElement): {\r\n rects: HighlightRect[];\r\n text: string;\r\n} {\r\n const selection = window.getSelection();\r\n if (!selection || selection.isCollapsed || selection.rangeCount === 0) {\r\n return { rects: [], text: \"\" };\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n if (!pageEl.contains(range.commonAncestorContainer)) {\r\n return { rects: [], text: \"\" };\r\n }\r\n\r\n return {\r\n rects: normalizeClientRects(range.getClientRects(), pageEl.getBoundingClientRect()),\r\n text: selection.toString(),\r\n };\r\n}\r\n\r\nexport function translateRects(rects: HighlightRect[], dx: number, dy: number): HighlightRect[] {\r\n if (dx === 0 && dy === 0) {\r\n return rects;\r\n }\r\n\r\n return rects.map((rect) => ({\r\n ...rect,\r\n left: rect.left + dx,\r\n top: rect.top + dy,\r\n }));\r\n}\r\n\r\nexport function unionBounds(rects: HighlightRect[]): HighlightRect | null {\r\n if (rects.length === 0) {\r\n return null;\r\n }\r\n\r\n let left = 1;\r\n let top = 1;\r\n let right = 0;\r\n let bottom = 0;\r\n\r\n for (const rect of rects) {\r\n left = Math.min(left, rect.left);\r\n top = Math.min(top, rect.top);\r\n right = Math.max(right, rect.left + rect.width);\r\n bottom = Math.max(bottom, rect.top + rect.height);\r\n }\r\n\r\n return {\r\n left,\r\n top,\r\n width: Math.max(0, right - left),\r\n height: Math.max(0, bottom - top),\r\n };\r\n}\r\n\r\nexport function hitTestRects(rects: HighlightRect[], x: number, y: number): boolean {\r\n return rects.some(\r\n (rect) =>\r\n x >= rect.left &&\r\n x <= rect.left + rect.width &&\r\n y >= rect.top &&\r\n y <= rect.top + rect.height,\r\n );\r\n}\r\n\r\nexport function isMeaningfulRect(rect: HighlightRect): boolean {\r\n return rect.width * rect.height >= MIN_RECT_AREA && rect.width > MIN_NORMALIZED && rect.height > MIN_NORMALIZED;\r\n}\r\n\r\nexport function normalizedRectFromPoints(\r\n start: { x: number; y: number },\r\n end: { x: number; y: number },\r\n): HighlightRect {\r\n const left = Math.min(start.x, end.x);\r\n const top = Math.min(start.y, end.y);\r\n return {\r\n left,\r\n top,\r\n width: Math.abs(end.x - start.x),\r\n height: Math.abs(end.y - start.y),\r\n };\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport {\r\n angleDeltaDegrees,\r\n normalizeDegrees,\r\n pointerDeltaToLocal,\r\n snapDegrees,\r\n} from \"../lib/geometry\";\r\nimport type { ImageAnnotation } from \"../types\";\r\nimport { RotateCcwIcon, RotateCwIcon, TrashIcon } from \"./icons\";\r\n\r\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\r\n\r\nconst HANDLES: Handle[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\r\nconst MIN_BOX_PX = 36;\r\n\r\ntype DragState =\r\n | {\r\n type: \"move\";\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n }\r\n | {\r\n type: \"resize\";\r\n handle: Handle;\r\n startX: number;\r\n startY: number;\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n rotation: number;\r\n }\r\n | {\r\n type: \"rotate\";\r\n startX: number;\r\n startY: number;\r\n centerX: number;\r\n centerY: number;\r\n originRotation: number;\r\n };\r\n\r\ntype ImageBoxProps = {\r\n annotation: ImageAnnotation;\r\n isSelected: boolean;\r\n onUpdate: (changes: Partial<ImageAnnotation>) => void;\r\n onSelect: () => void;\r\n onRemove: () => void;\r\n};\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nexport function ImageBox({\r\n annotation,\r\n isSelected,\r\n onUpdate,\r\n onSelect,\r\n onRemove,\r\n}: ImageBoxProps) {\r\n const frameRef = useRef<HTMLDivElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = frameRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n\r\n if (drag.type === \"move\") {\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 3) {\r\n return;\r\n }\r\n\r\n const width = annotation.width;\r\n const height = annotation.height;\r\n const deltaX = (event.clientX - drag.startX) / rect.width;\r\n const deltaY = (event.clientY - drag.startY) / rect.height;\r\n onUpdate({\r\n x: clamp(drag.originX + deltaX, 0, Math.max(0, 1 - width)),\r\n y: clamp(drag.originY + deltaY, 0, Math.max(0, 1 - height)),\r\n });\r\n return;\r\n }\r\n\r\n if (drag.type === \"rotate\") {\r\n const delta = angleDeltaDegrees(\r\n drag.centerX,\r\n drag.centerY,\r\n drag.startX,\r\n drag.startY,\r\n event.clientX,\r\n event.clientY,\r\n );\r\n let next = drag.originRotation + delta;\r\n if (event.shiftKey) {\r\n next = snapDegrees(next, 15);\r\n }\r\n onUpdate({ rotation: normalizeDegrees(next) });\r\n return;\r\n }\r\n\r\n const aspect = drag.width / Math.max(1, drag.height);\r\n const minWidth = MIN_BOX_PX;\r\n const minHeight = MIN_BOX_PX;\r\n let nextWidth = drag.width;\r\n let nextHeight = drag.height;\r\n\r\n const rawDeltaX = event.clientX - drag.startX;\r\n const rawDeltaY = event.clientY - drag.startY;\r\n const { x: deltaX, y: deltaY } = pointerDeltaToLocal(\r\n rawDeltaX,\r\n rawDeltaY,\r\n drag.rotation,\r\n );\r\n const { handle } = drag;\r\n\r\n if (handle === \"e\" || handle === \"w\") {\r\n const signed = handle === \"e\" ? deltaX : -deltaX;\r\n nextWidth = Math.max(minWidth, drag.width + signed);\r\n nextHeight = nextWidth / aspect;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n const signed = handle === \"s\" ? deltaY : -deltaY;\r\n nextHeight = Math.max(minHeight, drag.height + signed);\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n const signedX = handle.includes(\"e\") ? deltaX : -deltaX;\r\n const signedY = handle.includes(\"s\") ? deltaY : -deltaY;\r\n const scaleW = (drag.width + signedX) / drag.width;\r\n const scaleH = (drag.height + signedY) / drag.height;\r\n const scale = Math.max(minWidth / drag.width, Math.max(scaleW, scaleH));\r\n nextWidth = drag.width * scale;\r\n nextHeight = drag.height * scale;\r\n }\r\n\r\n nextWidth = Math.min(nextWidth, drag.pageWidth);\r\n nextHeight = Math.min(nextHeight, drag.pageHeight);\r\n if (nextWidth / nextHeight > aspect) {\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n nextHeight = nextWidth / aspect;\r\n }\r\n\r\n let left = drag.left;\r\n let top = drag.top;\r\n\r\n if (handle.includes(\"w\")) {\r\n left = drag.left + drag.width - nextWidth;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n left = drag.left + (drag.width - nextWidth) / 2;\r\n }\r\n\r\n if (handle.includes(\"n\")) {\r\n top = drag.top + drag.height - nextHeight;\r\n } else if (handle === \"e\" || handle === \"w\") {\r\n top = drag.top + (drag.height - nextHeight) / 2;\r\n }\r\n\r\n left = clamp(left, 0, drag.pageWidth - nextWidth);\r\n top = clamp(top, 0, drag.pageHeight - nextHeight);\r\n\r\n onUpdate({\r\n x: left / drag.pageWidth,\r\n y: top / drag.pageHeight,\r\n width: nextWidth / drag.pageWidth,\r\n height: nextHeight / drag.pageHeight,\r\n });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [annotation.height, annotation.width, drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent) => {\r\n onSelect();\r\n setDrag({\r\n type: \"move\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: annotation.x,\r\n originY: annotation.y,\r\n });\r\n };\r\n\r\n const beginResize = (event: ReactPointerEvent, handle: Handle) => {\r\n const frame = frameRef.current;\r\n const page = frame?.closest(\".rpe-page\");\r\n if (!frame || !page) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const pageRect = page.getBoundingClientRect();\r\n\r\n setDrag({\r\n type: \"resize\",\r\n handle,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n left: annotation.x * pageRect.width,\r\n top: annotation.y * pageRect.height,\r\n width: annotation.width * pageRect.width,\r\n height: annotation.height * pageRect.height,\r\n pageWidth: pageRect.width,\r\n pageHeight: pageRect.height,\r\n rotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const beginRotate = (event: ReactPointerEvent) => {\r\n const frame = frameRef.current;\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const rect = frame.getBoundingClientRect();\r\n setDrag({\r\n type: \"rotate\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n centerX: rect.left + rect.width / 2,\r\n centerY: rect.top + rect.height / 2,\r\n originRotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const nudgeRotation = (delta: number) => {\r\n onUpdate({ rotation: normalizeDegrees((annotation.rotation ?? 0) + delta) });\r\n };\r\n\r\n const handleFramePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (\r\n target.closest(\".rpe-text-toolbar\") ||\r\n target.closest(\".rpe-text-handle\") ||\r\n target.closest(\".rpe-rotate-handle\")\r\n ) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n beginMove(event);\r\n };\r\n\r\n const className = [\r\n \"rpe-text-frame\",\r\n \"rpe-signature-frame\",\r\n \"rpe-image-frame\",\r\n isSelected ? \"rpe-text-frame-selected\" : \"\",\r\n hovered && !isSelected ? \"rpe-text-frame-hover\" : \"\",\r\n drag?.type === \"move\" ? \"rpe-text-frame-dragging\" : \"\",\r\n drag?.type === \"resize\" ? \"rpe-text-frame-resizing\" : \"\",\r\n drag?.type === \"rotate\" ? \"rpe-text-frame-rotating\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n ref={frameRef}\r\n className={className}\r\n style={\r\n {\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n cursor: drag?.type === \"move\" ? \"grabbing\" : \"move\",\r\n \"--rpe-rotation\": `${annotation.rotation ?? 0}deg`,\r\n } as CSSProperties\r\n }\r\n onPointerDown={handleFramePointerDown}\r\n onPointerEnter={() => setHovered(true)}\r\n onPointerLeave={() => setHovered(false)}\r\n >\r\n {isSelected ? (\r\n <div\r\n className={`rpe-text-toolbar${annotation.y < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n onSelect();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate left 90 degrees\"\r\n onClick={() => nudgeRotation(-90)}\r\n >\r\n <RotateCcwIcon size={12} />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate right 90 degrees\"\r\n onClick={() => nudgeRotation(90)}\r\n >\r\n <RotateCwIcon size={12} />\r\n </button>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete image\"\r\n onClick={onRemove}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n <img\r\n className=\"rpe-signature-image rpe-placed-image\"\r\n src={annotation.src}\r\n alt=\"Placed image\"\r\n draggable={false}\r\n style={{ opacity: annotation.opacity ?? 1 }}\r\n />\r\n\r\n {isSelected ? (\r\n <>\r\n <span\r\n className=\"rpe-rotate-handle\"\r\n role=\"slider\"\r\n aria-label=\"Rotate image\"\r\n aria-valuemin={0}\r\n aria-valuemax={359}\r\n aria-valuenow={Math.round(normalizeDegrees(annotation.rotation ?? 0))}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginRotate(event);\r\n }}\r\n onDoubleClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onUpdate({ rotation: 0 });\r\n }}\r\n />\r\n {drag?.type === \"rotate\" ? (\r\n <span className=\"rpe-rotate-badge\">\r\n {Math.round(normalizeDegrees(annotation.rotation ?? 0))}°\r\n </span>\r\n ) : null}\r\n {HANDLES.map((handle) => (\r\n <span\r\n key={handle}\r\n className={`rpe-text-handle rpe-text-handle-${handle}`}\r\n data-handle={handle}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginResize(event, handle);\r\n }}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport {\r\n angleDeltaDegrees,\r\n normalizeDegrees,\r\n pointerDeltaToLocal,\r\n snapDegrees,\r\n} from \"../lib/geometry\";\r\nimport type { SignatureAnnotation } from \"../types\";\r\nimport { RotateCcwIcon, RotateCwIcon, TrashIcon } from \"./icons\";\r\n\r\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\r\n\r\nconst HANDLES: Handle[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\r\nconst MIN_BOX_PX = 36;\r\n\r\ntype DragState =\r\n | {\r\n type: \"move\";\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n }\r\n | {\r\n type: \"resize\";\r\n handle: Handle;\r\n startX: number;\r\n startY: number;\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n rotation: number;\r\n }\r\n | {\r\n type: \"rotate\";\r\n startX: number;\r\n startY: number;\r\n centerX: number;\r\n centerY: number;\r\n originRotation: number;\r\n };\r\n\r\ntype SignatureBoxProps = {\r\n annotation: SignatureAnnotation;\r\n isSelected: boolean;\r\n onUpdate: (changes: Partial<SignatureAnnotation>) => void;\r\n onSelect: () => void;\r\n onRemove: () => void;\r\n};\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nexport function SignatureBox({\r\n annotation,\r\n isSelected,\r\n onUpdate,\r\n onSelect,\r\n onRemove,\r\n}: SignatureBoxProps) {\r\n const frameRef = useRef<HTMLDivElement>(null);\r\n const [hovered, setHovered] = useState(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = frameRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n\r\n if (drag.type === \"move\") {\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 3) {\r\n return;\r\n }\r\n\r\n const width = annotation.width;\r\n const height = annotation.height;\r\n const deltaX = (event.clientX - drag.startX) / rect.width;\r\n const deltaY = (event.clientY - drag.startY) / rect.height;\r\n onUpdate({\r\n x: clamp(drag.originX + deltaX, 0, Math.max(0, 1 - width)),\r\n y: clamp(drag.originY + deltaY, 0, Math.max(0, 1 - height)),\r\n });\r\n return;\r\n }\r\n\r\n if (drag.type === \"rotate\") {\r\n const delta = angleDeltaDegrees(\r\n drag.centerX,\r\n drag.centerY,\r\n drag.startX,\r\n drag.startY,\r\n event.clientX,\r\n event.clientY,\r\n );\r\n let next = drag.originRotation + delta;\r\n if (event.shiftKey) {\r\n next = snapDegrees(next, 15);\r\n }\r\n onUpdate({ rotation: normalizeDegrees(next) });\r\n return;\r\n }\r\n\r\n const aspect = drag.width / Math.max(1, drag.height);\r\n const minWidth = MIN_BOX_PX;\r\n const minHeight = MIN_BOX_PX;\r\n let nextWidth = drag.width;\r\n let nextHeight = drag.height;\r\n\r\n const rawDeltaX = event.clientX - drag.startX;\r\n const rawDeltaY = event.clientY - drag.startY;\r\n const { x: deltaX, y: deltaY } = pointerDeltaToLocal(\r\n rawDeltaX,\r\n rawDeltaY,\r\n drag.rotation,\r\n );\r\n const { handle } = drag;\r\n\r\n if (handle === \"e\" || handle === \"w\") {\r\n const signed = handle === \"e\" ? deltaX : -deltaX;\r\n nextWidth = Math.max(minWidth, drag.width + signed);\r\n nextHeight = nextWidth / aspect;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n const signed = handle === \"s\" ? deltaY : -deltaY;\r\n nextHeight = Math.max(minHeight, drag.height + signed);\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n const signedX = handle.includes(\"e\") ? deltaX : -deltaX;\r\n const signedY = handle.includes(\"s\") ? deltaY : -deltaY;\r\n const scaleW = (drag.width + signedX) / drag.width;\r\n const scaleH = (drag.height + signedY) / drag.height;\r\n const scale = Math.max(minWidth / drag.width, Math.max(scaleW, scaleH));\r\n nextWidth = drag.width * scale;\r\n nextHeight = drag.height * scale;\r\n }\r\n\r\n nextWidth = Math.min(nextWidth, drag.pageWidth);\r\n nextHeight = Math.min(nextHeight, drag.pageHeight);\r\n if (nextWidth / nextHeight > aspect) {\r\n nextWidth = nextHeight * aspect;\r\n } else {\r\n nextHeight = nextWidth / aspect;\r\n }\r\n\r\n let left = drag.left;\r\n let top = drag.top;\r\n\r\n if (handle.includes(\"w\")) {\r\n left = drag.left + drag.width - nextWidth;\r\n } else if (handle === \"n\" || handle === \"s\") {\r\n left = drag.left + (drag.width - nextWidth) / 2;\r\n }\r\n\r\n if (handle.includes(\"n\")) {\r\n top = drag.top + drag.height - nextHeight;\r\n } else if (handle === \"e\" || handle === \"w\") {\r\n top = drag.top + (drag.height - nextHeight) / 2;\r\n }\r\n\r\n left = clamp(left, 0, drag.pageWidth - nextWidth);\r\n top = clamp(top, 0, drag.pageHeight - nextHeight);\r\n\r\n onUpdate({\r\n x: left / drag.pageWidth,\r\n y: top / drag.pageHeight,\r\n width: nextWidth / drag.pageWidth,\r\n height: nextHeight / drag.pageHeight,\r\n });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [annotation.height, annotation.width, drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent) => {\r\n onSelect();\r\n setDrag({\r\n type: \"move\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: annotation.x,\r\n originY: annotation.y,\r\n });\r\n };\r\n\r\n const beginResize = (event: ReactPointerEvent, handle: Handle) => {\r\n const frame = frameRef.current;\r\n const page = frame?.closest(\".rpe-page\");\r\n if (!frame || !page) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const pageRect = page.getBoundingClientRect();\r\n\r\n setDrag({\r\n type: \"resize\",\r\n handle,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n left: annotation.x * pageRect.width,\r\n top: annotation.y * pageRect.height,\r\n width: annotation.width * pageRect.width,\r\n height: annotation.height * pageRect.height,\r\n pageWidth: pageRect.width,\r\n pageHeight: pageRect.height,\r\n rotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const beginRotate = (event: ReactPointerEvent) => {\r\n const frame = frameRef.current;\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const rect = frame.getBoundingClientRect();\r\n setDrag({\r\n type: \"rotate\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n centerX: rect.left + rect.width / 2,\r\n centerY: rect.top + rect.height / 2,\r\n originRotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const nudgeRotation = (delta: number) => {\r\n onUpdate({ rotation: normalizeDegrees((annotation.rotation ?? 0) + delta) });\r\n };\r\n\r\n const handleFramePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (\r\n target.closest(\".rpe-text-toolbar\") ||\r\n target.closest(\".rpe-text-handle\") ||\r\n target.closest(\".rpe-rotate-handle\")\r\n ) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n beginMove(event);\r\n };\r\n\r\n const className = [\r\n \"rpe-text-frame\",\r\n \"rpe-signature-frame\",\r\n isSelected ? \"rpe-text-frame-selected\" : \"\",\r\n hovered && !isSelected ? \"rpe-text-frame-hover\" : \"\",\r\n drag?.type === \"move\" ? \"rpe-text-frame-dragging\" : \"\",\r\n drag?.type === \"resize\" ? \"rpe-text-frame-resizing\" : \"\",\r\n drag?.type === \"rotate\" ? \"rpe-text-frame-rotating\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n ref={frameRef}\r\n className={className}\r\n style={\r\n {\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n cursor: drag?.type === \"move\" ? \"grabbing\" : \"move\",\r\n \"--rpe-rotation\": `${annotation.rotation ?? 0}deg`,\r\n } as CSSProperties\r\n }\r\n onPointerDown={handleFramePointerDown}\r\n onPointerEnter={() => setHovered(true)}\r\n onPointerLeave={() => setHovered(false)}\r\n >\r\n {isSelected ? (\r\n <div\r\n className={`rpe-text-toolbar${annotation.y < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={(event) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n onSelect();\r\n }}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate left 90 degrees\"\r\n onClick={() => nudgeRotation(-90)}\r\n >\r\n <RotateCcwIcon size={12} />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Rotate right 90 degrees\"\r\n onClick={() => nudgeRotation(90)}\r\n >\r\n <RotateCwIcon size={12} />\r\n </button>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete signature\"\r\n onClick={onRemove}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n <img\r\n className=\"rpe-signature-image\"\r\n src={annotation.src}\r\n alt=\"Signature\"\r\n draggable={false}\r\n />\r\n\r\n {isSelected ? (\r\n <>\r\n <span\r\n className=\"rpe-rotate-handle\"\r\n role=\"slider\"\r\n aria-label=\"Rotate signature\"\r\n aria-valuemin={0}\r\n aria-valuemax={359}\r\n aria-valuenow={Math.round(normalizeDegrees(annotation.rotation ?? 0))}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginRotate(event);\r\n }}\r\n onDoubleClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onUpdate({ rotation: 0 });\r\n }}\r\n />\r\n {drag?.type === \"rotate\" ? (\r\n <span className=\"rpe-rotate-badge\">\r\n {Math.round(normalizeDegrees(annotation.rotation ?? 0))}°\r\n </span>\r\n ) : null}\r\n {HANDLES.map((handle) => (\r\n <span\r\n key={handle}\r\n className={`rpe-text-handle rpe-text-handle-${handle}`}\r\n data-handle={handle}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n beginResize(event, handle);\r\n }}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","const BLOCK_TAGS = new Set([\r\n \"DIV\",\r\n \"P\",\r\n \"LI\",\r\n \"UL\",\r\n \"OL\",\r\n \"H1\",\r\n \"H2\",\r\n \"H3\",\r\n \"H4\",\r\n \"H5\",\r\n \"H6\",\r\n \"TR\",\r\n \"BLOCKQUOTE\",\r\n \"SECTION\",\r\n \"ARTICLE\",\r\n \"HEADER\",\r\n \"FOOTER\",\r\n]);\r\n\r\nconst PARAGRAPH_TAGS = new Set([\r\n \"P\",\r\n \"LI\",\r\n \"H1\",\r\n \"H2\",\r\n \"H3\",\r\n \"H4\",\r\n \"H5\",\r\n \"H6\",\r\n \"BLOCKQUOTE\",\r\n]);\r\n\r\nfunction collectText(node: Node): string {\r\n let result = \"\";\r\n\r\n for (const child of node.childNodes) {\r\n if (child.nodeType === Node.TEXT_NODE) {\r\n result += child.textContent ?? \"\";\r\n continue;\r\n }\r\n\r\n if (child.nodeType !== Node.ELEMENT_NODE) {\r\n continue;\r\n }\r\n\r\n const element = child as HTMLElement;\r\n const tag = element.tagName;\r\n\r\n if (tag === \"BR\") {\r\n result += \"\\n\";\r\n continue;\r\n }\r\n\r\n const inner = collectText(element);\r\n if (!BLOCK_TAGS.has(tag)) {\r\n result += inner;\r\n continue;\r\n }\r\n\r\n if (result.length > 0 && !result.endsWith(\"\\n\")) {\r\n result += \"\\n\";\r\n }\r\n result += inner;\r\n if (!result.endsWith(\"\\n\")) {\r\n result += \"\\n\";\r\n }\r\n if (PARAGRAPH_TAGS.has(tag) && !result.endsWith(\"\\n\\n\")) {\r\n result += \"\\n\";\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getContentEditableText(root: HTMLElement): string {\r\n return collectText(root).replace(/\\n+$/, \"\");\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState,\r\n type CSSProperties,\r\n type FocusEvent,\r\n type KeyboardEvent,\r\n type MouseEvent,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport { getContentEditableText } from \"../lib/contentEditableText\";\r\nimport {\r\n angleDeltaDegrees,\r\n normalizeDegrees,\r\n pointerDeltaToLocal,\r\n snapDegrees,\r\n} from \"../lib/geometry\";\r\nimport type { TextAnnotation } from \"../types\";\r\nimport { MinusIcon, PlusIcon, TrashIcon } from \"./icons\";\r\n\r\ntype Handle = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\r\n\r\nconst HANDLES: Handle[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\r\nconst MIN_FONT = 8;\r\nconst MAX_FONT = 200;\r\nconst MIN_BOX_PX = 28;\r\n\r\ntype DragState =\r\n | {\r\n type: \"move\";\r\n startX: number;\r\n startY: number;\r\n originX: number;\r\n originY: number;\r\n }\r\n | {\r\n type: \"resize\";\r\n handle: Handle;\r\n startX: number;\r\n startY: number;\r\n left: number;\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n rotation: number;\r\n }\r\n | {\r\n type: \"rotate\";\r\n startX: number;\r\n startY: number;\r\n centerX: number;\r\n centerY: number;\r\n originRotation: number;\r\n };\r\n\r\ntype TextBoxProps = {\r\n annotation: TextAnnotation;\r\n scale: number;\r\n isSelected: boolean;\r\n isEditing: boolean;\r\n onUpdate: (changes: Partial<TextAnnotation>) => void;\r\n onSelect: () => void;\r\n onStartEdit: () => void;\r\n onStopEdit: () => void;\r\n onRemove: () => void;\r\n};\r\n\r\nfunction clamp(value: number, min: number, max: number) {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nfunction parseFontSize(value: string): number | null {\r\n const next = Number(value);\r\n if (!Number.isFinite(next)) {\r\n return null;\r\n }\r\n\r\n return clamp(Math.round(next), MIN_FONT, MAX_FONT);\r\n}\r\n\r\nexport function TextBox({\r\n annotation,\r\n scale,\r\n isSelected,\r\n isEditing,\r\n onUpdate,\r\n onSelect,\r\n onStartEdit,\r\n onStopEdit,\r\n onRemove,\r\n}: TextBoxProps) {\r\n const frameRef = useRef<HTMLDivElement>(null);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const keepEditingRef = useRef(false);\r\n const [hovered, setHovered] = useState(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n const [fontSizeDraft, setFontSizeDraft] = useState(String(annotation.fontSize));\r\n\r\n useEffect(() => {\r\n setFontSizeDraft(String(annotation.fontSize));\r\n }, [annotation.fontSize]);\r\n\r\n useEffect(() => {\r\n const node = contentRef.current;\r\n if (!node) {\r\n return;\r\n }\r\n\r\n const canSync = !isEditing || document.activeElement !== node;\r\n if (!canSync) {\r\n return;\r\n }\r\n\r\n if (getContentEditableText(node) !== annotation.text || node.childElementCount > 0) {\r\n node.textContent = annotation.text;\r\n }\r\n }, [annotation.text, isEditing]);\r\n\r\n useEffect(() => {\r\n const node = contentRef.current;\r\n if (!isEditing || !node) {\r\n return;\r\n }\r\n\r\n node.focus();\r\n const selection = window.getSelection();\r\n const range = document.createRange();\r\n range.selectNodeContents(node);\r\n selection?.removeAllRanges();\r\n selection?.addRange(range);\r\n }, [isEditing]);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n const page = frameRef.current?.closest(\".rpe-page\");\r\n if (!page) {\r\n return;\r\n }\r\n\r\n const rect = page.getBoundingClientRect();\r\n\r\n if (drag.type === \"move\") {\r\n if (Math.hypot(event.clientX - drag.startX, event.clientY - drag.startY) < 3) {\r\n return;\r\n }\r\n const deltaX = (event.clientX - drag.startX) / rect.width;\r\n const deltaY = (event.clientY - drag.startY) / rect.height;\r\n onUpdate({\r\n x: clamp(drag.originX + deltaX, 0, 0.98),\r\n y: clamp(drag.originY + deltaY, 0, 0.98),\r\n });\r\n return;\r\n }\r\n\r\n if (drag.type === \"rotate\") {\r\n const delta = angleDeltaDegrees(\r\n drag.centerX,\r\n drag.centerY,\r\n drag.startX,\r\n drag.startY,\r\n event.clientX,\r\n event.clientY,\r\n );\r\n let next = drag.originRotation + delta;\r\n if (event.shiftKey) {\r\n next = snapDegrees(next, 15);\r\n }\r\n onUpdate({ rotation: normalizeDegrees(next) });\r\n return;\r\n }\r\n\r\n const rawDeltaX = event.clientX - drag.startX;\r\n const rawDeltaY = event.clientY - drag.startY;\r\n const { x: deltaX, y: deltaY } = pointerDeltaToLocal(\r\n rawDeltaX,\r\n rawDeltaY,\r\n drag.rotation,\r\n );\r\n const { handle } = drag;\r\n\r\n let left = drag.left;\r\n let top = drag.top;\r\n let right = drag.right;\r\n let bottom = drag.bottom;\r\n\r\n if (handle.includes(\"e\")) {\r\n right = drag.right + deltaX;\r\n }\r\n if (handle.includes(\"w\")) {\r\n left = drag.left + deltaX;\r\n }\r\n if (handle.includes(\"s\")) {\r\n bottom = drag.bottom + deltaY;\r\n }\r\n if (handle.includes(\"n\")) {\r\n top = drag.top + deltaY;\r\n }\r\n\r\n if (right - left < MIN_BOX_PX) {\r\n if (handle.includes(\"w\")) {\r\n left = right - MIN_BOX_PX;\r\n } else {\r\n right = left + MIN_BOX_PX;\r\n }\r\n }\r\n\r\n if (bottom - top < MIN_BOX_PX) {\r\n if (handle.includes(\"n\")) {\r\n top = bottom - MIN_BOX_PX;\r\n } else {\r\n bottom = top + MIN_BOX_PX;\r\n }\r\n }\r\n\r\n left = clamp(left, 0, drag.pageWidth - MIN_BOX_PX);\r\n top = clamp(top, 0, drag.pageHeight - MIN_BOX_PX);\r\n right = clamp(right, left + MIN_BOX_PX, drag.pageWidth);\r\n bottom = clamp(bottom, top + MIN_BOX_PX, drag.pageHeight);\r\n\r\n onUpdate({\r\n x: left / drag.pageWidth,\r\n y: top / drag.pageHeight,\r\n width: (right - left) / drag.pageWidth,\r\n height: (bottom - top) / drag.pageHeight,\r\n });\r\n };\r\n\r\n const handlePointerUp = () => {\r\n setDrag(null);\r\n };\r\n\r\n document.addEventListener(\"pointermove\", handlePointerMove);\r\n document.addEventListener(\"pointerup\", handlePointerUp);\r\n document.addEventListener(\"pointercancel\", handlePointerUp);\r\n\r\n return () => {\r\n document.removeEventListener(\"pointermove\", handlePointerMove);\r\n document.removeEventListener(\"pointerup\", handlePointerUp);\r\n document.removeEventListener(\"pointercancel\", handlePointerUp);\r\n };\r\n }, [drag, onUpdate]);\r\n\r\n const beginMove = (event: ReactPointerEvent) => {\r\n onSelect();\r\n setDrag({\r\n type: \"move\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n originX: annotation.x,\r\n originY: annotation.y,\r\n });\r\n };\r\n\r\n const beginResize = (event: ReactPointerEvent, handle: Handle) => {\r\n const frame = frameRef.current;\r\n const page = frame?.closest(\".rpe-page\");\r\n if (!frame || !page) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n const pageRect = page.getBoundingClientRect();\r\n const width =\r\n annotation.width != null ? annotation.width * pageRect.width : frame.offsetWidth;\r\n const height =\r\n annotation.height != null ? annotation.height * pageRect.height : frame.offsetHeight;\r\n const left = annotation.x * pageRect.width;\r\n const top = annotation.y * pageRect.height;\r\n\r\n setDrag({\r\n type: \"resize\",\r\n handle,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n left,\r\n top,\r\n right: left + width,\r\n bottom: top + height,\r\n pageWidth: pageRect.width,\r\n pageHeight: pageRect.height,\r\n rotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const beginRotate = (event: ReactPointerEvent) => {\r\n const frame = frameRef.current;\r\n if (!frame) {\r\n return;\r\n }\r\n\r\n onSelect();\r\n if (isEditing) {\r\n onStopEdit();\r\n }\r\n\r\n const rect = frame.getBoundingClientRect();\r\n setDrag({\r\n type: \"rotate\",\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n centerX: rect.left + rect.width / 2,\r\n centerY: rect.top + rect.height / 2,\r\n originRotation: annotation.rotation ?? 0,\r\n });\r\n };\r\n\r\n const handleFramePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement;\r\n if (\r\n target.closest(\".rpe-text-toolbar\") ||\r\n target.closest(\".rpe-text-handle\") ||\r\n target.closest(\".rpe-rotate-handle\")\r\n ) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n\r\n if (isEditing) {\r\n if (target.closest(\".rpe-text-content\")) {\r\n return;\r\n }\r\n onStopEdit();\r\n }\r\n\r\n beginMove(event);\r\n };\r\n\r\n const handleHandlePointerDown = (event: ReactPointerEvent<HTMLSpanElement>, handle: Handle) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (isEditing) {\r\n onStopEdit();\r\n }\r\n beginResize(event, handle);\r\n };\r\n\r\n const handleDoubleClick = (event: MouseEvent<HTMLDivElement>) => {\r\n event.stopPropagation();\r\n onStartEdit();\r\n };\r\n\r\n const handleInput = () => {\r\n onUpdate({ text: contentRef.current ? getContentEditableText(contentRef.current) : \"\" });\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onStopEdit();\r\n contentRef.current?.blur();\r\n }\r\n\r\n if (isEditing) {\r\n event.stopPropagation();\r\n }\r\n };\r\n\r\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\r\n if (!isEditing) {\r\n return;\r\n }\r\n\r\n if (\r\n keepEditingRef.current ||\r\n frameRef.current?.contains(event.relatedTarget as Node)\r\n ) {\r\n keepEditingRef.current = false;\r\n return;\r\n }\r\n\r\n onStopEdit();\r\n };\r\n\r\n const handleToolbarPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\r\n event.stopPropagation();\r\n keepEditingRef.current = true;\r\n onSelect();\r\n\r\n const target = event.target as HTMLElement;\r\n if (!target.closest(\"input, textarea, select\")) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const commitFontSize = (raw: string) => {\r\n const next = parseFontSize(raw);\r\n if (next === null) {\r\n setFontSizeDraft(String(annotation.fontSize));\r\n return;\r\n }\r\n\r\n setFontSizeDraft(String(next));\r\n if (next !== annotation.fontSize) {\r\n onUpdate({ fontSize: next });\r\n }\r\n };\r\n\r\n const nudgeFont = (delta: number) => {\r\n const next = clamp(annotation.fontSize + delta, MIN_FONT, MAX_FONT);\r\n setFontSizeDraft(String(next));\r\n onUpdate({ fontSize: next });\r\n };\r\n\r\n const fontSizeDraftNumber = Number(fontSizeDraft);\r\n const fontSizeDraftValid =\r\n fontSizeDraft !== \"\" &&\r\n Number.isFinite(fontSizeDraftNumber) &&\r\n fontSizeDraftNumber >= MIN_FONT &&\r\n fontSizeDraftNumber <= MAX_FONT;\r\n\r\n const className = [\r\n \"rpe-text-frame\",\r\n isSelected ? \"rpe-text-frame-selected\" : \"\",\r\n isEditing ? \"rpe-text-frame-editing\" : \"\",\r\n hovered && !isSelected ? \"rpe-text-frame-hover\" : \"\",\r\n drag?.type === \"move\" ? \"rpe-text-frame-dragging\" : \"\",\r\n drag?.type === \"resize\" ? \"rpe-text-frame-resizing\" : \"\",\r\n drag?.type === \"rotate\" ? \"rpe-text-frame-rotating\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <div\r\n ref={frameRef}\r\n className={className}\r\n style={\r\n {\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: annotation.width ? `${annotation.width * 100}%` : undefined,\r\n height: annotation.height ? `${annotation.height * 100}%` : undefined,\r\n cursor: isEditing ? \"text\" : drag?.type === \"move\" ? \"grabbing\" : \"move\",\r\n \"--rpe-rotation\": `${annotation.rotation ?? 0}deg`,\r\n } as CSSProperties\r\n }\r\n onPointerDown={handleFramePointerDown}\r\n onDoubleClick={handleDoubleClick}\r\n onPointerEnter={() => setHovered(true)}\r\n onPointerLeave={() => setHovered(false)}\r\n >\r\n {isSelected || isEditing ? (\r\n <div\r\n className={`rpe-text-toolbar${annotation.y < 0.08 ? \" rpe-text-toolbar-below\" : \"\"}`}\r\n onPointerDown={handleToolbarPointerDown}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n >\r\n <button\r\n type=\"button\"\r\n className={`rpe-text-toolbar-button${annotation.fontWeight === \"bold\" ? \" rpe-text-toolbar-button-active\" : \"\"}`}\r\n aria-label=\"Bold\"\r\n onClick={() =>\r\n onUpdate({\r\n fontWeight: annotation.fontWeight === \"bold\" ? \"normal\" : \"bold\",\r\n })\r\n }\r\n >\r\n B\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`rpe-text-toolbar-button${annotation.fontStyle === \"italic\" ? \" rpe-text-toolbar-button-active\" : \"\"}`}\r\n aria-label=\"Italic\"\r\n onClick={() =>\r\n onUpdate({\r\n fontStyle: annotation.fontStyle === \"italic\" ? \"normal\" : \"italic\",\r\n })\r\n }\r\n >\r\n <span style={{ fontStyle: \"italic\" }}>I</span>\r\n </button>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Decrease font size\"\r\n disabled={annotation.fontSize <= MIN_FONT}\r\n onClick={() => nudgeFont(-1)}\r\n >\r\n <MinusIcon size={12} />\r\n </button>\r\n <input\r\n className={`rpe-text-toolbar-size${!fontSizeDraftValid ? \" rpe-text-toolbar-size-invalid\" : \"\"}`}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n aria-label={`Font size (${MIN_FONT}–${MAX_FONT})`}\r\n title={`Font size (${MIN_FONT}–${MAX_FONT})`}\r\n value={fontSizeDraft}\r\n onChange={(event) => {\r\n const value = event.target.value;\r\n if (value === \"\" || /^\\d{1,3}$/.test(value)) {\r\n setFontSizeDraft(value);\r\n }\r\n }}\r\n onBlur={() => commitFontSize(fontSizeDraft)}\r\n onKeyDown={(event) => {\r\n event.stopPropagation();\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n commitFontSize(fontSizeDraft);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n setFontSizeDraft(String(annotation.fontSize));\r\n event.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button\"\r\n aria-label=\"Increase font size\"\r\n disabled={annotation.fontSize >= MAX_FONT}\r\n onClick={() => nudgeFont(1)}\r\n >\r\n <PlusIcon size={12} />\r\n </button>\r\n <label className=\"rpe-text-toolbar-color\" title=\"Color\">\r\n <input\r\n type=\"color\"\r\n value={annotation.color}\r\n onChange={(event) => onUpdate({ color: event.target.value })}\r\n aria-label=\"Text color\"\r\n />\r\n </label>\r\n <span className=\"rpe-text-toolbar-divider\" />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-text-toolbar-button rpe-text-toolbar-danger\"\r\n aria-label=\"Delete text\"\r\n onClick={onRemove}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n </div>\r\n ) : null}\r\n\r\n <div\r\n ref={contentRef}\r\n className=\"rpe-text-content\"\r\n data-placeholder=\"Type here\"\r\n contentEditable={isEditing}\r\n suppressContentEditableWarning\r\n onInput={handleInput}\r\n onKeyDown={handleKeyDown}\r\n onBlur={handleBlur}\r\n style={{\r\n fontFamily: annotation.fontFamily,\r\n fontSize: `${annotation.fontSize * scale}px`,\r\n color: annotation.color,\r\n fontWeight: annotation.fontWeight,\r\n fontStyle: annotation.fontStyle,\r\n textAlign: annotation.textAlign,\r\n }}\r\n />\r\n\r\n {isSelected ? (\r\n <>\r\n <span\r\n className=\"rpe-rotate-handle\"\r\n role=\"slider\"\r\n aria-label=\"Rotate text\"\r\n aria-valuemin={0}\r\n aria-valuemax={359}\r\n aria-valuenow={Math.round(normalizeDegrees(annotation.rotation ?? 0))}\r\n onPointerDown={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (isEditing) {\r\n onStopEdit();\r\n }\r\n beginRotate(event);\r\n }}\r\n onDoubleClick={(event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onUpdate({ rotation: 0 });\r\n }}\r\n />\r\n {drag?.type === \"rotate\" ? (\r\n <span className=\"rpe-rotate-badge\">\r\n {Math.round(normalizeDegrees(annotation.rotation ?? 0))}°\r\n </span>\r\n ) : null}\r\n {HANDLES.map((handle) => (\r\n <span\r\n key={handle}\r\n className={`rpe-text-handle rpe-text-handle-${handle}`}\r\n data-handle={handle}\r\n onPointerDown={(event) => handleHandlePointerDown(event, handle)}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import type { PDFDocumentProxy, RenderTask } from \"pdfjs-dist\";\r\nimport { setLayerDimensions, TextLayer } from \"pdfjs-dist/legacy/build/pdf.mjs\";\r\nimport { useEffect, useRef, useState, type CSSProperties, type DragEvent } from \"react\";\r\nimport type { TextMatch } from \"../lib/findTextMatches\";\r\nimport { fileToImageDataUrl, toPendingImage } from \"../lib/imageUpload\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n PendingImage,\r\n PendingSignature,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n Tool,\r\n} from \"../types\";\r\nimport { DrawLayer } from \"./DrawLayer\";\r\nimport { HighlightLayer } from \"./HighlightLayer\";\r\nimport { ImageBox } from \"./ImageBox\";\r\nimport { SignatureBox } from \"./SignatureBox\";\r\nimport { TextBox } from \"./TextBox\";\r\n\r\nfunction placedImageSize(rect: DOMRect, aspect: number, defaultWidth = 0.4) {\r\n const safeAspect = Number.isFinite(aspect) && aspect > 0.05 ? aspect : 1.5;\r\n let width = defaultWidth;\r\n let height = (width * rect.width) / safeAspect / rect.height;\r\n if (height > 0.45) {\r\n height = 0.45;\r\n width = (height * rect.height * safeAspect) / rect.width;\r\n }\r\n return {\r\n width: Math.min(0.72, Math.max(0.1, width)),\r\n height: Math.min(0.7, Math.max(0.06, height)),\r\n };\r\n}\r\n\r\nconst LETTER_WIDTH = 612;\r\nconst LETTER_HEIGHT = 792;\r\n\r\nfunction estimatedPageSize(scale: number) {\r\n return {\r\n width: Math.floor(LETTER_WIDTH * scale),\r\n height: Math.floor(LETTER_HEIGHT * scale),\r\n };\r\n}\r\n\r\ntype PdfPageProps = {\r\n pdf: PDFDocumentProxy;\r\n pageNumber: number;\r\n scale: number;\r\n justAdded?: boolean;\r\n estimatedSize?: { width: number; height: number };\r\n searchMatches?: TextMatch[];\r\n currentSearchMatchIndex?: number;\r\n activeTool?: Tool;\r\n textAnnotations?: TextAnnotation[];\r\n selectedTextId?: string | null;\r\n editingTextId?: string | null;\r\n onAddTextAnnotation?: (annotation: Omit<TextAnnotation, \"id\">) => void;\r\n onUpdateTextAnnotation?: (id: string, changes: Partial<TextAnnotation>) => void;\r\n onSelectTextAnnotation?: (id: string | null) => void;\r\n onStartEditText?: (id: string) => void;\r\n onStopEditText?: () => void;\r\n onRemoveTextAnnotation?: (id: string) => void;\r\n drawStrokes?: DrawStroke[];\r\n selectedDrawId?: string | null;\r\n drawColor?: string;\r\n drawWidth?: number;\r\n onAddDrawStroke?: (stroke: Omit<DrawStroke, \"id\">) => void;\r\n onUpdateDrawStroke?: (id: string, changes: Partial<DrawStroke>) => void;\r\n onSelectDrawStroke?: (id: string | null) => void;\r\n onRemoveDrawStroke?: (id: string) => void;\r\n highlights?: HighlightAnnotation[];\r\n selectedHighlightId?: string | null;\r\n highlightColor?: string;\r\n onAddHighlight?: (highlight: Omit<HighlightAnnotation, \"id\">) => void;\r\n onUpdateHighlight?: (id: string, changes: Partial<HighlightAnnotation>) => void;\r\n onSelectHighlight?: (id: string | null) => void;\r\n onRemoveHighlight?: (id: string) => void;\r\n onHighlightColorChange?: (color: string) => void;\r\n signatures?: SignatureAnnotation[];\r\n selectedSignatureId?: string | null;\r\n pendingSignature?: PendingSignature | null;\r\n onAddSignature?: (annotation: Omit<SignatureAnnotation, \"id\">) => void;\r\n onUpdateSignature?: (id: string, changes: Partial<SignatureAnnotation>) => void;\r\n onSelectSignature?: (id: string | null) => void;\r\n onRemoveSignature?: (id: string) => void;\r\n images?: ImageAnnotation[];\r\n selectedImageId?: string | null;\r\n pendingImage?: PendingImage | null;\r\n onAddImage?: (annotation: Omit<ImageAnnotation, \"id\">) => void;\r\n onUpdateImage?: (id: string, changes: Partial<ImageAnnotation>) => void;\r\n onSelectImage?: (id: string | null) => void;\r\n onRemoveImage?: (id: string) => void;\r\n};\r\n\r\nexport function PdfPage({\r\n pdf,\r\n pageNumber,\r\n scale,\r\n justAdded = false,\r\n estimatedSize,\r\n searchMatches = [],\r\n currentSearchMatchIndex = -1,\r\n activeTool = \"select\",\r\n textAnnotations = [],\r\n selectedTextId = null,\r\n editingTextId = null,\r\n onAddTextAnnotation,\r\n onUpdateTextAnnotation,\r\n onSelectTextAnnotation,\r\n onStartEditText,\r\n onStopEditText,\r\n onRemoveTextAnnotation,\r\n drawStrokes = [],\r\n selectedDrawId = null,\r\n drawColor = \"#111827\",\r\n drawWidth = 2.5,\r\n onAddDrawStroke,\r\n onUpdateDrawStroke,\r\n onSelectDrawStroke,\r\n onRemoveDrawStroke,\r\n highlights = [],\r\n selectedHighlightId = null,\r\n highlightColor = \"#facc15\",\r\n onAddHighlight,\r\n onUpdateHighlight,\r\n onSelectHighlight,\r\n onRemoveHighlight,\r\n onHighlightColorChange,\r\n signatures = [],\r\n selectedSignatureId = null,\r\n pendingSignature = null,\r\n onAddSignature,\r\n onUpdateSignature,\r\n onSelectSignature,\r\n onRemoveSignature,\r\n images = [],\r\n selectedImageId = null,\r\n pendingImage = null,\r\n onAddImage,\r\n onUpdateImage,\r\n onSelectImage,\r\n onRemoveImage,\r\n}: PdfPageProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const textLayerRef = useRef<HTMLDivElement>(null);\r\n const [isVisible, setIsVisible] = useState(pageNumber <= 2 || justAdded);\r\n const [size, setSize] = useState(\r\n () => estimatedSize ?? estimatedPageSize(scale),\r\n );\r\n const [ghostPoint, setGhostPoint] = useState<{ x: number; y: number } | null>(null);\r\n\r\n useEffect(() => {\r\n const container = containerRef.current;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const root = container.closest(\".rpe-stage\");\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n setIsVisible(Boolean(entry?.isIntersecting));\r\n },\r\n { root, rootMargin: \"800px 0px\" },\r\n );\r\n\r\n observer.observe(container);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (justAdded) {\r\n setIsVisible(true);\r\n }\r\n }, [justAdded]);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n\r\n void pdf.getPage(pageNumber).then((page) => {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const viewport = page.getViewport({ scale });\r\n const width = Math.floor(viewport.width);\r\n const height = Math.floor(viewport.height);\r\n setSize((current) =>\r\n current.width === width && current.height === height\r\n ? current\r\n : { width, height },\r\n );\r\n });\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [pdf, pageNumber, scale]);\r\n\r\n const placeSignatureAt = (clientX: number, clientY: number) => {\r\n if (!pendingSignature || !onAddSignature) {\r\n return;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const aspect =\r\n Number.isFinite(pendingSignature.aspect) && pendingSignature.aspect > 0.05\r\n ? pendingSignature.aspect\r\n : 2.5;\r\n let width = 0.28;\r\n let height = (width * rect.width) / aspect / rect.height;\r\n if (height > 0.22) {\r\n height = 0.22;\r\n width = (height * rect.height * aspect) / rect.width;\r\n }\r\n width = Math.min(0.6, Math.max(0.08, width));\r\n height = Math.min(0.4, Math.max(0.03, height));\r\n\r\n const clickX = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\r\n const clickY = Math.max(0, Math.min(1, (clientY - rect.top) / rect.height));\r\n const x = Math.max(0, Math.min(1 - width, clickX - width / 2));\r\n const y = Math.max(0, Math.min(1 - height, clickY - height / 2));\r\n\r\n onAddSignature({\r\n pageNumber,\r\n x,\r\n y,\r\n width,\r\n height,\r\n src: pendingSignature.src,\r\n });\r\n };\r\n\r\n const placeImageAt = (clientX: number, clientY: number, source: PendingImage) => {\r\n if (!onAddImage) {\r\n return;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const { width, height } = placedImageSize(rect, source.aspect);\r\n const clickX = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\r\n const clickY = Math.max(0, Math.min(1, (clientY - rect.top) / rect.height));\r\n const x = Math.max(0, Math.min(1 - width, clickX - width / 2));\r\n const y = Math.max(0, Math.min(1 - height, clickY - height / 2));\r\n\r\n onAddImage({\r\n pageNumber,\r\n x,\r\n y,\r\n width,\r\n height,\r\n src: source.src,\r\n opacity: 1,\r\n });\r\n };\r\n\r\n const placingText = activeTool === \"text\";\r\n\r\n const placeTextAt = (clientX: number, clientY: number) => {\r\n if (!placingText || !onAddTextAnnotation) {\r\n return;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n\r\n const x = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\r\n const y = Math.max(0, Math.min(1, (clientY - rect.top) / rect.height));\r\n\r\n onAddTextAnnotation({\r\n pageNumber,\r\n x,\r\n y,\r\n text: \"Text\",\r\n fontFamily: \"Arial\",\r\n fontSize: 16,\r\n color: \"#111827\",\r\n fontWeight: \"normal\",\r\n fontStyle: \"normal\",\r\n textAlign: \"left\",\r\n });\r\n };\r\n\r\n const pageAnnotations = textAnnotations.filter((a) => a.pageNumber === pageNumber);\r\n const pageSignatures = signatures.filter((item) => item.pageNumber === pageNumber);\r\n const pageImages = images.filter((item) => item.pageNumber === pageNumber);\r\n const placingSignature = activeTool === \"signature\" && Boolean(pendingSignature);\r\n const placingImage = activeTool === \"image\" && Boolean(pendingImage);\r\n\r\n useEffect(() => {\r\n if (!placingImage) {\r\n setGhostPoint(null);\r\n }\r\n }, [placingImage]);\r\n\r\n const acceptImageDrop = (event: DragEvent<HTMLDivElement>) => {\r\n if (![...event.dataTransfer.types].includes(\"Files\")) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.dataTransfer.dropEffect = \"copy\";\r\n };\r\n\r\n const handleImageDrop = (event: DragEvent<HTMLDivElement>) => {\r\n const file = event.dataTransfer.files[0];\r\n if (!file || !file.type.startsWith(\"image/\")) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const { clientX, clientY } = event;\r\n void fileToImageDataUrl(file)\r\n .then((src) => toPendingImage(src, file.name))\r\n .then((pending) => {\r\n placeImageAt(clientX, clientY, pending);\r\n })\r\n .catch(() => {\r\n // Invalid drops are ignored; the modal remains the primary path.\r\n });\r\n };\r\n\r\n const ghostBox = (() => {\r\n if (!placingImage || !pendingImage || !ghostPoint) {\r\n return null;\r\n }\r\n\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return null;\r\n }\r\n\r\n const { width, height } = placedImageSize(rect, pendingImage.aspect);\r\n return {\r\n width,\r\n height,\r\n x: Math.max(0, Math.min(1 - width, ghostPoint.x - width / 2)),\r\n y: Math.max(0, Math.min(1 - height, ghostPoint.y - height / 2)),\r\n };\r\n })();\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n const textLayerDiv = textLayerRef.current;\r\n if (!canvas || !textLayerDiv || !isVisible || size.width === 0) {\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let renderTask: RenderTask | undefined;\r\n let textLayer: TextLayer | undefined;\r\n\r\n void (async () => {\r\n const page = await pdf.getPage(pageNumber);\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const viewport = page.getViewport({ scale });\r\n const outputScale = window.devicePixelRatio || 1;\r\n const width = Math.floor(viewport.width * outputScale);\r\n const height = Math.floor(viewport.height * outputScale);\r\n const cssWidth = Math.floor(viewport.width);\r\n const cssHeight = Math.floor(viewport.height);\r\n const offscreen = document.createElement(\"canvas\");\r\n const offscreenContext = offscreen.getContext(\"2d\");\r\n\r\n if (!offscreenContext) {\r\n return;\r\n }\r\n\r\n offscreen.width = width;\r\n offscreen.height = height;\r\n offscreenContext.fillStyle = \"#ffffff\";\r\n offscreenContext.fillRect(0, 0, width, height);\r\n\r\n renderTask = page.render({\r\n canvas: offscreen,\r\n canvasContext: offscreenContext,\r\n viewport,\r\n transform:\r\n outputScale !== 1\r\n ? [outputScale, 0, 0, outputScale, 0, 0]\r\n : undefined,\r\n });\r\n\r\n try {\r\n await renderTask.promise;\r\n } catch (error) {\r\n if (!cancelled && error instanceof Error && error.name !== \"RenderingCancelledException\") {\r\n throw error;\r\n }\r\n }\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return;\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n canvas.style.width = `${cssWidth}px`;\r\n canvas.style.height = `${cssHeight}px`;\r\n context.drawImage(offscreen, 0, 0);\r\n\r\n // Render text layer\r\n textLayerDiv.replaceChildren();\r\n setLayerDimensions(textLayerDiv, viewport);\r\n textLayerDiv.style.setProperty(\"--scale-factor\", String(viewport.scale));\r\n textLayerDiv.style.setProperty(\"--total-scale-factor\", String(viewport.scale));\r\n\r\n textLayer = new TextLayer({\r\n textContentSource: page.streamTextContent(),\r\n container: textLayerDiv,\r\n viewport,\r\n });\r\n\r\n await textLayer.render();\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n renderTask?.cancel();\r\n textLayer?.cancel();\r\n };\r\n }, [isVisible, pdf, pageNumber, scale, size]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={`rpe-page${activeTool === \"highlight\" ? \" rpe-page-highlighting\" : \"\"}${placingText ? \" rpe-page-texting\" : \"\"}${placingSignature ? \" rpe-page-signing\" : \"\"}${placingImage ? \" rpe-page-imaging\" : \"\"}`}\r\n data-page-number={pageNumber}\r\n onDragEnter={acceptImageDrop}\r\n onDragOver={acceptImageDrop}\r\n onDrop={handleImageDrop}\r\n style={\r\n {\r\n ...(size.width > 0 ? { width: size.width, minHeight: size.height } : {}),\r\n \"--rpe-highlight-color\": highlightColor,\r\n } as CSSProperties\r\n }\r\n >\r\n {isVisible ? (\r\n <>\r\n <canvas ref={canvasRef} className=\"rpe-page-canvas\" />\r\n <HighlightLayer\r\n pageNumber={pageNumber}\r\n highlights={highlights.filter((item) => item.pageNumber === pageNumber)}\r\n selectedId={selectedHighlightId}\r\n activeTool={activeTool}\r\n color={highlightColor}\r\n onAdd={(highlight) => onAddHighlight?.(highlight)}\r\n onSelect={(id) => onSelectHighlight?.(id)}\r\n onUpdate={(id, changes) => onUpdateHighlight?.(id, changes)}\r\n onRemove={(id) => onRemoveHighlight?.(id)}\r\n onColorChange={(next) => onHighlightColorChange?.(next)}\r\n />\r\n <div ref={textLayerRef} className=\"textLayer\" />\r\n {searchMatches.length > 0 && (\r\n <div className=\"rpe-search-highlights\">\r\n {searchMatches.map((match, matchIndex) =>\r\n match.rects.map((rect, rectIndex) => (\r\n <div\r\n key={`${matchIndex}-${rectIndex}`}\r\n className={`rpe-search-highlight ${matchIndex === currentSearchMatchIndex ? \"rpe-search-highlight-current\" : \"\"}`}\r\n style={{\r\n left: `${rect.left * 100}%`,\r\n top: `${rect.top * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n }}\r\n />\r\n )),\r\n )}\r\n </div>\r\n )}\r\n {placingText ? (\r\n <div\r\n className=\"rpe-text-hit-layer\"\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n placeTextAt(event.clientX, event.clientY);\r\n }}\r\n />\r\n ) : null}\r\n {placingSignature ? (\r\n <div\r\n className=\"rpe-signature-hit-layer\"\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n placeSignatureAt(event.clientX, event.clientY);\r\n }}\r\n />\r\n ) : null}\r\n {placingImage && pendingImage ? (\r\n <div\r\n className=\"rpe-image-hit-layer\"\r\n onPointerMove={(event) => {\r\n const rect = containerRef.current?.getBoundingClientRect();\r\n if (!rect || rect.width === 0 || rect.height === 0) {\r\n return;\r\n }\r\n setGhostPoint({\r\n x: (event.clientX - rect.left) / rect.width,\r\n y: (event.clientY - rect.top) / rect.height,\r\n });\r\n }}\r\n onPointerLeave={() => setGhostPoint(null)}\r\n onPointerDown={(event) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n placeImageAt(event.clientX, event.clientY, pendingImage);\r\n }}\r\n >\r\n {ghostBox ? (\r\n <div\r\n className=\"rpe-image-ghost\"\r\n style={{\r\n left: `${ghostBox.x * 100}%`,\r\n top: `${ghostBox.y * 100}%`,\r\n width: `${ghostBox.width * 100}%`,\r\n height: `${ghostBox.height * 100}%`,\r\n }}\r\n >\r\n <img src={pendingImage.src} alt=\"\" draggable={false} />\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n <DrawLayer\r\n pageNumber={pageNumber}\r\n scale={scale}\r\n strokes={drawStrokes.filter((stroke) => stroke.pageNumber === pageNumber)}\r\n selectedId={selectedDrawId}\r\n activeTool={activeTool}\r\n color={drawColor}\r\n width={drawWidth}\r\n onAdd={(stroke) => onAddDrawStroke?.(stroke)}\r\n onSelect={(id) => onSelectDrawStroke?.(id)}\r\n onUpdate={(id, changes) => onUpdateDrawStroke?.(id, changes)}\r\n onRemove={(id) => onRemoveDrawStroke?.(id)}\r\n />\r\n <div className=\"rpe-text-annotations\">\r\n {pageAnnotations.map((annotation) => (\r\n <TextBox\r\n key={annotation.id}\r\n annotation={annotation}\r\n scale={scale}\r\n isSelected={selectedTextId === annotation.id}\r\n isEditing={editingTextId === annotation.id}\r\n onUpdate={(changes) => onUpdateTextAnnotation?.(annotation.id, changes)}\r\n onSelect={() => onSelectTextAnnotation?.(annotation.id)}\r\n onStartEdit={() => onStartEditText?.(annotation.id)}\r\n onStopEdit={() => onStopEditText?.()}\r\n onRemove={() => onRemoveTextAnnotation?.(annotation.id)}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"rpe-signature-annotations\">\r\n {pageSignatures.map((annotation) => (\r\n <SignatureBox\r\n key={annotation.id}\r\n annotation={annotation}\r\n isSelected={selectedSignatureId === annotation.id}\r\n onUpdate={(changes) => onUpdateSignature?.(annotation.id, changes)}\r\n onSelect={() => onSelectSignature?.(annotation.id)}\r\n onRemove={() => onRemoveSignature?.(annotation.id)}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"rpe-image-annotations\">\r\n {pageImages.map((annotation) => (\r\n <ImageBox\r\n key={annotation.id}\r\n annotation={annotation}\r\n isSelected={selectedImageId === annotation.id}\r\n onUpdate={(changes) => onUpdateImage?.(annotation.id, changes)}\r\n onSelect={() => onSelectImage?.(annotation.id)}\r\n onRemove={() => onRemoveImage?.(annotation.id)}\r\n />\r\n ))}\r\n </div>\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { memo, useEffect, useRef, useState, type CSSProperties } from \"react\";\r\nimport { pointsToSvgPath } from \"../lib/drawPaths\";\r\nimport { TEXT_LINE_HEIGHT, TEXT_PADDING_X, TEXT_PADDING_Y } from \"../lib/textLayout\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\n\r\nconst THUMBNAIL_INK_SCALE = 0.32;\r\nconst MIN_THUMBNAIL_STROKE = 1.2;\r\n\r\nexport type ThumbnailOverlayProps = {\r\n strokes?: DrawStroke[];\r\n highlights?: HighlightAnnotation[];\r\n texts?: TextAnnotation[];\r\n signatures?: SignatureAnnotation[];\r\n images?: ImageAnnotation[];\r\n pageWidth?: number;\r\n pageHeight?: number;\r\n};\r\n\r\nfunction ThumbnailOverlayInner({\r\n strokes = [],\r\n highlights = [],\r\n texts = [],\r\n signatures = [],\r\n images = [],\r\n pageWidth = 612,\r\n}: ThumbnailOverlayProps) {\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n const [scale, setScale] = useState(160 / pageWidth);\r\n\r\n useEffect(() => {\r\n const node = overlayRef.current;\r\n if (!node || pageWidth <= 0) {\r\n return;\r\n }\r\n\r\n const update = () => {\r\n setScale(node.clientWidth / pageWidth);\r\n };\r\n update();\r\n\r\n const observer = new ResizeObserver(update);\r\n observer.observe(node);\r\n return () => observer.disconnect();\r\n }, [pageWidth]);\r\n\r\n if (\r\n strokes.length === 0 &&\r\n highlights.length === 0 &&\r\n texts.length === 0 &&\r\n signatures.length === 0 &&\r\n images.length === 0\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n ref={overlayRef}\r\n className=\"rpe-page-thumbnail-overlay\"\r\n style={{ \"--rpe-thumb-scale\": String(scale) } as CSSProperties}\r\n aria-hidden\r\n >\r\n {highlights.map((highlight) =>\r\n highlight.rects.map((rect, index) => (\r\n <div\r\n key={`${highlight.id}-${index}`}\r\n className=\"rpe-page-thumbnail-highlight\"\r\n style={{\r\n left: `${rect.left * 100}%`,\r\n top: `${rect.top * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n background: highlight.color,\r\n }}\r\n />\r\n )),\r\n )}\r\n\r\n {strokes.length > 0 ? (\r\n <svg\r\n className=\"rpe-page-thumbnail-draw\"\r\n viewBox=\"0 0 1 1\"\r\n preserveAspectRatio=\"none\"\r\n >\r\n {strokes.map((stroke) => {\r\n const path = pointsToSvgPath(stroke.points);\r\n if (!path) {\r\n return null;\r\n }\r\n\r\n return (\r\n <path\r\n key={stroke.id}\r\n d={path}\r\n fill=\"none\"\r\n stroke={stroke.color}\r\n strokeWidth={Math.max(\r\n MIN_THUMBNAIL_STROKE,\r\n stroke.width * THUMBNAIL_INK_SCALE,\r\n )}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n vectorEffect=\"non-scaling-stroke\"\r\n />\r\n );\r\n })}\r\n </svg>\r\n ) : null}\r\n\r\n {texts.map((annotation) => (\r\n <div\r\n key={annotation.id}\r\n className=\"rpe-page-thumbnail-text-item\"\r\n style={{\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: annotation.width ? `${annotation.width * 100}%` : undefined,\r\n height: annotation.height ? `${annotation.height * 100}%` : undefined,\r\n transform: annotation.rotation\r\n ? `rotate(${annotation.rotation}deg)`\r\n : undefined,\r\n }}\r\n >\r\n <div\r\n className=\"rpe-page-thumbnail-text-content\"\r\n style={{\r\n color: annotation.color,\r\n fontFamily: annotation.fontFamily,\r\n fontSize: annotation.fontSize,\r\n fontWeight: annotation.fontWeight,\r\n fontStyle: annotation.fontStyle,\r\n textAlign: annotation.textAlign,\r\n padding: `${TEXT_PADDING_Y}px ${TEXT_PADDING_X}px`,\r\n lineHeight: TEXT_LINE_HEIGHT,\r\n }}\r\n >\r\n {annotation.text}\r\n </div>\r\n </div>\r\n ))}\r\n\r\n {signatures.map((annotation) => (\r\n <img\r\n key={annotation.id}\r\n src={annotation.src}\r\n alt=\"\"\r\n className=\"rpe-page-thumbnail-media\"\r\n draggable={false}\r\n style={{\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n transform: annotation.rotation\r\n ? `rotate(${annotation.rotation}deg)`\r\n : undefined,\r\n }}\r\n />\r\n ))}\r\n\r\n {images.map((annotation) => (\r\n <img\r\n key={annotation.id}\r\n src={annotation.src}\r\n alt=\"\"\r\n className=\"rpe-page-thumbnail-media\"\r\n draggable={false}\r\n style={{\r\n left: `${annotation.x * 100}%`,\r\n top: `${annotation.y * 100}%`,\r\n width: `${annotation.width * 100}%`,\r\n height: `${annotation.height * 100}%`,\r\n opacity: annotation.opacity ?? 1,\r\n transform: annotation.rotation\r\n ? `rotate(${annotation.rotation}deg)`\r\n : undefined,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport const ThumbnailOverlay = memo(ThumbnailOverlayInner);\r\n","import type { PDFDocumentProxy, RenderTask } from \"pdfjs-dist\";\r\nimport { memo, useEffect, useRef, useState } from \"react\";\r\nimport { ThumbnailOverlay, type ThumbnailOverlayProps } from \"./ThumbnailOverlay\";\r\n\r\nconst THUMBNAIL_WIDTH = 160;\r\nconst DEFAULT_ASPECT = 160 / 207;\r\n\r\ntype PageThumbnailProps = ThumbnailOverlayProps & {\r\n pdf: PDFDocumentProxy;\r\n pageNumber: number;\r\n};\r\n\r\nfunction PageThumbnailInner({\r\n pdf,\r\n pageNumber,\r\n strokes,\r\n highlights,\r\n texts,\r\n signatures,\r\n images,\r\n}: PageThumbnailProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const srcRef = useRef<string | null>(null);\r\n const [src, setSrc] = useState<string | null>(null);\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [fresh, setFresh] = useState(false);\r\n const [aspect, setAspect] = useState(DEFAULT_ASPECT);\r\n const [pageSize, setPageSize] = useState({ width: 612, height: 792 });\r\n\r\n useEffect(() => {\r\n const container = containerRef.current;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const root = container.closest(\".rpe-pages-list\");\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry?.isIntersecting) {\r\n setIsVisible(true);\r\n }\r\n },\r\n { root, rootMargin: \"120px 0px\" },\r\n );\r\n\r\n observer.observe(container);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isVisible) {\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let renderTask: RenderTask | undefined;\r\n\r\n void (async () => {\r\n const page = await pdf.getPage(pageNumber);\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const unscaled = page.getViewport({ scale: 1 });\r\n if (unscaled.width > 0 && unscaled.height > 0) {\r\n setAspect(unscaled.width / unscaled.height);\r\n setPageSize({ width: unscaled.width, height: unscaled.height });\r\n }\r\n const scale = THUMBNAIL_WIDTH / unscaled.width;\r\n const viewport = page.getViewport({ scale });\r\n const outputScale = window.devicePixelRatio || 1;\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n canvas.width = Math.floor(viewport.width * outputScale);\r\n canvas.height = Math.floor(viewport.height * outputScale);\r\n context.fillStyle = \"#ffffff\";\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n renderTask = page.render({\r\n canvas,\r\n canvasContext: context,\r\n viewport,\r\n intent: \"print\",\r\n transform:\r\n outputScale !== 1\r\n ? [outputScale, 0, 0, outputScale, 0, 0]\r\n : undefined,\r\n });\r\n\r\n try {\r\n await renderTask.promise;\r\n } catch (error) {\r\n if (\r\n cancelled ||\r\n (error instanceof Error && error.name === \"RenderingCancelledException\")\r\n ) {\r\n return;\r\n }\r\n throw error;\r\n }\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const blob = await new Promise<Blob | null>((resolve) => {\r\n canvas.toBlob(resolve, \"image/png\");\r\n });\r\n\r\n if (!blob || cancelled) {\r\n return;\r\n }\r\n\r\n const objectUrl = URL.createObjectURL(blob);\r\n if (cancelled) {\r\n URL.revokeObjectURL(objectUrl);\r\n return;\r\n }\r\n\r\n const previous = srcRef.current;\r\n srcRef.current = objectUrl;\r\n setFresh(!previous);\r\n setSrc(objectUrl);\r\n if (previous) {\r\n URL.revokeObjectURL(previous);\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n renderTask?.cancel();\r\n };\r\n }, [isVisible, pdf, pageNumber]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (srcRef.current) {\r\n URL.revokeObjectURL(srcRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className=\"rpe-page-thumbnail\"\r\n style={{ aspectRatio: `${aspect}` }}\r\n >\r\n {src ? (\r\n <div className=\"rpe-page-thumbnail-stack\">\r\n <img\r\n src={src}\r\n alt=\"\"\r\n className={\r\n fresh\r\n ? \"rpe-page-thumbnail-image rpe-page-thumbnail-image-in\"\r\n : \"rpe-page-thumbnail-image\"\r\n }\r\n draggable={false}\r\n />\r\n <ThumbnailOverlay\r\n strokes={strokes}\r\n highlights={highlights}\r\n texts={texts}\r\n signatures={signatures}\r\n images={images}\r\n pageWidth={pageSize.width}\r\n pageHeight={pageSize.height}\r\n />\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport const PageThumbnail = memo(PageThumbnailInner);\r\n","import {\r\n Fragment,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type KeyboardEvent,\r\n type PointerEvent,\r\n} from \"react\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SidebarApi,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\nimport { GripVerticalIcon, PlusIcon, TrashIcon } from \"./icons\";\r\nimport { PageThumbnail } from \"./PageThumbnail\";\r\n\r\nconst SIDEBAR_SCROLL_PADDING = 8;\r\nconst DRAG_THRESHOLD_PX = 6;\r\nconst AUTO_SCROLL_EDGE_PX = 48;\r\nconst REMOVE_ANIMATION_MS = 180;\r\nconst EMPTY_STROKES: DrawStroke[] = [];\r\nconst EMPTY_HIGHLIGHTS: HighlightAnnotation[] = [];\r\nconst EMPTY_TEXTS: TextAnnotation[] = [];\r\nconst EMPTY_SIGNATURES: SignatureAnnotation[] = [];\r\nconst EMPTY_IMAGES: ImageAnnotation[] = [];\r\n\r\ntype DragState = {\r\n pointerId: number;\r\n fromIndex: number;\r\n pageNumber: number;\r\n startX: number;\r\n startY: number;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n offsetX: number;\r\n offsetY: number;\r\n dropIndex: number;\r\n active: boolean;\r\n};\r\n\r\nfunction indexByPage<T extends { pageNumber: number }>(items: T[]) {\r\n const map = new Map<number, T[]>();\r\n for (const item of items) {\r\n const list = map.get(item.pageNumber);\r\n if (list) {\r\n list.push(item);\r\n } else {\r\n map.set(item.pageNumber, [item]);\r\n }\r\n }\r\n return map;\r\n}\r\n\r\nfunction computeDropIndex(\r\n clientY: number,\r\n fromIndex: number,\r\n cardEls: Array<HTMLElement | null>,\r\n) {\r\n let insertAmongOthers = 0;\r\n for (let index = 0; index < cardEls.length; index += 1) {\r\n if (index === fromIndex) {\r\n continue;\r\n }\r\n const rect = cardEls[index]?.getBoundingClientRect();\r\n if (rect && clientY > rect.top + rect.height / 2) {\r\n insertAmongOthers += 1;\r\n }\r\n }\r\n return insertAmongOthers;\r\n}\r\n\r\nfunction dropLineBeforeIndex(fromIndex: number, dropIndex: number) {\r\n if (fromIndex === dropIndex) {\r\n return -1;\r\n }\r\n return dropIndex > fromIndex ? dropIndex + 1 : dropIndex;\r\n}\r\n\r\nfunction InsertRail({\r\n afterPage,\r\n disabled,\r\n onInsert,\r\n}: {\r\n afterPage: number;\r\n disabled: boolean;\r\n onInsert: (afterPage: number) => void;\r\n}) {\r\n const label =\r\n afterPage === 0\r\n ? \"Insert blank page at the beginning\"\r\n : `Insert blank page after page ${afterPage}`;\r\n\r\n return (\r\n <div className=\"rpe-page-insert-rail\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-page-insert-rail-button\"\r\n disabled={disabled}\r\n aria-label={label}\r\n title={label}\r\n onClick={() => onInsert(afterPage)}\r\n >\r\n <PlusIcon size={12} />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport function PagesSidebar({\r\n pdf,\r\n page,\r\n pages,\r\n setPage,\r\n addBlankPage,\r\n deletePage,\r\n reorderPages,\r\n adding,\r\n mutating,\r\n canAdd,\r\n canDelete,\r\n canReorder,\r\n disabled,\r\n error,\r\n drawStrokes,\r\n highlights,\r\n textAnnotations,\r\n signatures,\r\n images,\r\n}: SidebarApi) {\r\n const listRef = useRef<HTMLDivElement>(null);\r\n const listInnerRef = useRef<HTMLDivElement>(null);\r\n const selectedCardRef = useRef<HTMLDivElement>(null);\r\n const cardRefs = useRef<Array<HTMLDivElement | null>>([]);\r\n const dragRef = useRef<DragState | null>(null);\r\n const suppressClickRef = useRef(false);\r\n const followSelectionRef = useRef(true);\r\n const programmaticListScrollRef = useRef(false);\r\n const [drag, setDrag] = useState<DragState | null>(null);\r\n const [removingPage, setRemovingPage] = useState<number | null>(null);\r\n const insertDisabled = !canAdd;\r\n const addLabel = `Insert a blank page after page ${page}`;\r\n const strokesByPage = useMemo(() => indexByPage(drawStrokes), [drawStrokes]);\r\n const highlightsByPage = useMemo(() => indexByPage(highlights), [highlights]);\r\n const textsByPage = useMemo(() => indexByPage(textAnnotations), [textAnnotations]);\r\n const signaturesByPage = useMemo(() => indexByPage(signatures), [signatures]);\r\n const imagesByPage = useMemo(() => indexByPage(images), [images]);\r\n\r\n useEffect(() => {\r\n dragRef.current = drag;\r\n }, [drag]);\r\n\r\n useEffect(() => {\r\n cardRefs.current.length = pages.length;\r\n }, [pages.length]);\r\n\r\n useEffect(() => {\r\n followSelectionRef.current = true;\r\n }, [page]);\r\n\r\n useEffect(() => {\r\n const list = listRef.current;\r\n const listInner = listInnerRef.current;\r\n const card = selectedCardRef.current;\r\n if (!list || !listInner || !card || drag?.active) {\r\n return;\r\n }\r\n\r\n const keepSelectedVisible = () => {\r\n if (!followSelectionRef.current) {\r\n return;\r\n }\r\n\r\n const listRect = list.getBoundingClientRect();\r\n const cardRect = card.getBoundingClientRect();\r\n\r\n if (cardRect.top >= listRect.top && cardRect.bottom <= listRect.bottom) {\r\n return;\r\n }\r\n\r\n programmaticListScrollRef.current = true;\r\n list.scrollTop +=\r\n cardRect.top < listRect.top\r\n ? cardRect.top - listRect.top - SIDEBAR_SCROLL_PADDING\r\n : cardRect.bottom - listRect.bottom + SIDEBAR_SCROLL_PADDING;\r\n programmaticListScrollRef.current = false;\r\n };\r\n\r\n const onListScroll = () => {\r\n if (!programmaticListScrollRef.current) {\r\n followSelectionRef.current = false;\r\n }\r\n };\r\n\r\n keepSelectedVisible();\r\n\r\n list.addEventListener(\"scroll\", onListScroll, { passive: true });\r\n const observer = new ResizeObserver(keepSelectedVisible);\r\n observer.observe(listInner);\r\n return () => {\r\n list.removeEventListener(\"scroll\", onListScroll);\r\n observer.disconnect();\r\n };\r\n }, [page, drag?.active]);\r\n\r\n useEffect(() => {\r\n if (removingPage == null) {\r\n return;\r\n }\r\n\r\n const timeoutId = window.setTimeout(() => {\r\n deletePage(removingPage);\r\n setRemovingPage(null);\r\n }, REMOVE_ANIMATION_MS);\r\n\r\n return () => window.clearTimeout(timeoutId);\r\n }, [deletePage, removingPage]);\r\n\r\n useEffect(() => {\r\n if (!drag) {\r\n return;\r\n }\r\n\r\n const applyPointer = (clientX: number, clientY: number) => {\r\n const current = dragRef.current;\r\n if (!current) {\r\n return;\r\n }\r\n\r\n const distance = Math.hypot(clientX - current.startX, clientY - current.startY);\r\n const active = current.active || distance >= DRAG_THRESHOLD_PX;\r\n const dropIndex = active\r\n ? computeDropIndex(clientY, current.fromIndex, cardRefs.current)\r\n : current.fromIndex;\r\n const next = {\r\n ...current,\r\n x: clientX,\r\n y: clientY,\r\n active,\r\n dropIndex,\r\n };\r\n dragRef.current = next;\r\n setDrag(next);\r\n };\r\n\r\n const finish = (commit: boolean) => {\r\n const current = dragRef.current;\r\n if (!current) {\r\n return;\r\n }\r\n\r\n dragRef.current = null;\r\n setDrag(null);\r\n\r\n if (!commit || !current.active) {\r\n return;\r\n }\r\n\r\n suppressClickRef.current = true;\r\n if (current.fromIndex !== current.dropIndex) {\r\n reorderPages(current.fromIndex + 1, current.dropIndex + 1);\r\n }\r\n };\r\n\r\n const onMove = (event: globalThis.PointerEvent) => {\r\n if (event.pointerId !== drag.pointerId) {\r\n return;\r\n }\r\n applyPointer(event.clientX, event.clientY);\r\n };\r\n\r\n const onUp = (event: globalThis.PointerEvent) => {\r\n if (event.pointerId !== drag.pointerId) {\r\n return;\r\n }\r\n finish(true);\r\n };\r\n\r\n const onCancel = (event: globalThis.PointerEvent) => {\r\n if (event.pointerId !== drag.pointerId) {\r\n return;\r\n }\r\n finish(false);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", onMove);\r\n window.addEventListener(\"pointerup\", onUp);\r\n window.addEventListener(\"pointercancel\", onCancel);\r\n\r\n let frame = 0;\r\n const tick = () => {\r\n const current = dragRef.current;\r\n const list = listRef.current;\r\n if (current?.active && list) {\r\n const rect = list.getBoundingClientRect();\r\n if (current.y < rect.top + AUTO_SCROLL_EDGE_PX) {\r\n list.scrollTop -= Math.max(4, (rect.top + AUTO_SCROLL_EDGE_PX - current.y) / 6);\r\n } else if (current.y > rect.bottom - AUTO_SCROLL_EDGE_PX) {\r\n list.scrollTop += Math.max(4, (current.y - (rect.bottom - AUTO_SCROLL_EDGE_PX)) / 6);\r\n }\r\n\r\n const dropIndex = computeDropIndex(current.y, current.fromIndex, cardRefs.current);\r\n if (dropIndex !== current.dropIndex) {\r\n const next = { ...current, dropIndex };\r\n dragRef.current = next;\r\n setDrag(next);\r\n }\r\n }\r\n frame = window.requestAnimationFrame(tick);\r\n };\r\n\r\n frame = window.requestAnimationFrame(tick);\r\n\r\n return () => {\r\n window.removeEventListener(\"pointermove\", onMove);\r\n window.removeEventListener(\"pointerup\", onUp);\r\n window.removeEventListener(\"pointercancel\", onCancel);\r\n window.cancelAnimationFrame(frame);\r\n };\r\n }, [drag?.pointerId, reorderPages]);\r\n\r\n const requestDelete = useCallback(\r\n (pageNumber: number) => {\r\n if (!canDelete || mutating || removingPage != null || disabled) {\r\n return;\r\n }\r\n setRemovingPage(pageNumber);\r\n },\r\n [canDelete, disabled, mutating, removingPage],\r\n );\r\n\r\n const updateDrag = (next: DragState) => {\r\n dragRef.current = next;\r\n setDrag(next);\r\n };\r\n\r\n const handleCardPointerDown = (\r\n event: PointerEvent<HTMLDivElement>,\r\n pageNumber: number,\r\n index: number,\r\n ) => {\r\n if (event.button !== 0 || !canReorder) {\r\n return;\r\n }\r\n if (event.target instanceof Element && event.target.closest(\".rpe-page-delete\")) {\r\n return;\r\n }\r\n\r\n const rect = event.currentTarget.getBoundingClientRect();\r\n updateDrag({\r\n pointerId: event.pointerId,\r\n fromIndex: index,\r\n pageNumber,\r\n startX: event.clientX,\r\n startY: event.clientY,\r\n x: event.clientX,\r\n y: event.clientY,\r\n width: rect.width,\r\n height: rect.height,\r\n offsetX: event.clientX - rect.left,\r\n offsetY: event.clientY - rect.top,\r\n dropIndex: index,\r\n active: false,\r\n });\r\n };\r\n\r\n const handleCardKeyDown = (\r\n event: KeyboardEvent<HTMLDivElement>,\r\n pageNumber: number,\r\n index: number,\r\n ) => {\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n event.preventDefault();\r\n setPage(pageNumber);\r\n return;\r\n }\r\n\r\n if (!event.altKey || !canReorder) {\r\n return;\r\n }\r\n\r\n if (event.key === \"ArrowUp\" && index > 0) {\r\n event.preventDefault();\r\n reorderPages(index + 1, index);\r\n }\r\n\r\n if (event.key === \"ArrowDown\" && index < pages.length - 1) {\r\n event.preventDefault();\r\n reorderPages(index + 1, index + 2);\r\n }\r\n };\r\n\r\n const lineIndex =\r\n drag?.active ? dropLineBeforeIndex(drag.fromIndex, drag.dropIndex) : -1;\r\n\r\n return (\r\n <div\r\n className={\r\n drag?.active ? \"rpe-pages-sidebar rpe-pages-sidebar-dragging\" : \"rpe-pages-sidebar\"\r\n }\r\n >\r\n <div ref={listRef} className=\"rpe-pages-list\">\r\n <div ref={listInnerRef} className=\"rpe-pages-list-inner\">\r\n {pages.map((item) => {\r\n const pageNum = item.pageNumber;\r\n const index = item.index;\r\n const selected = item.selected;\r\n const added = item.justAdded;\r\n const dragging = Boolean(drag?.active && drag.pageNumber === pageNum);\r\n const removing = pageNum === removingPage;\r\n const displayLabel = item.label;\r\n const deleteLabel = canDelete\r\n ? `Delete page ${displayLabel}`\r\n : \"A PDF must have at least one page\";\r\n const className = [\r\n \"rpe-page-card\",\r\n selected ? \"rpe-page-card-selected\" : \"\",\r\n added ? \"rpe-page-card-added\" : \"\",\r\n dragging ? \"rpe-page-card-ghost\" : \"\",\r\n removing ? \"rpe-page-card-removing\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <Fragment key={pageNum}>\r\n <InsertRail\r\n afterPage={index === 0 ? 0 : (pages[index - 1]?.pageNumber ?? pageNum - 1)}\r\n disabled={insertDisabled || Boolean(drag?.active)}\r\n onInsert={addBlankPage}\r\n />\r\n {lineIndex === index ? <div className=\"rpe-page-drop-line\" /> : null}\r\n {dragging ? (\r\n <div\r\n className=\"rpe-page-card rpe-page-card-placeholder\"\r\n style={{ height: drag?.height }}\r\n aria-hidden=\"true\"\r\n />\r\n ) : null}\r\n <div\r\n ref={(node) => {\r\n cardRefs.current[index] = node;\r\n if (selected) {\r\n selectedCardRef.current = node;\r\n }\r\n }}\r\n role=\"button\"\r\n tabIndex={0}\r\n className={className}\r\n aria-current={selected ? \"page\" : undefined}\r\n aria-label={`Page ${displayLabel}`}\r\n aria-grabbed={dragging || undefined}\r\n aria-describedby=\"rpe-page-reorder-hint\"\r\n style={\r\n dragging\r\n ? {\r\n width: drag?.width,\r\n left: (drag?.x ?? 0) - (drag?.offsetX ?? 0),\r\n top: (drag?.y ?? 0) - (drag?.offsetY ?? 0),\r\n }\r\n : undefined\r\n }\r\n onPointerDown={(event) => handleCardPointerDown(event, pageNum, index)}\r\n onClick={() => {\r\n if (suppressClickRef.current) {\r\n suppressClickRef.current = false;\r\n return;\r\n }\r\n if (dragRef.current?.active) {\r\n return;\r\n }\r\n setPage(pageNum);\r\n }}\r\n onKeyDown={(event) => handleCardKeyDown(event, pageNum, index)}\r\n >\r\n <span className=\"rpe-page-grip\" aria-hidden=\"true\">\r\n <GripVerticalIcon size={12} />\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-page-delete\"\r\n disabled={!canDelete || mutating || !canAdd}\r\n aria-label={deleteLabel}\r\n title={deleteLabel}\r\n onPointerDown={(event) => event.stopPropagation()}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n requestDelete(pageNum);\r\n }}\r\n >\r\n <TrashIcon size={12} />\r\n </button>\r\n {pdf ? (\r\n <PageThumbnail\r\n pdf={pdf}\r\n pageNumber={pageNum}\r\n strokes={strokesByPage.get(pageNum) ?? EMPTY_STROKES}\r\n highlights={highlightsByPage.get(pageNum) ?? EMPTY_HIGHLIGHTS}\r\n texts={textsByPage.get(pageNum) ?? EMPTY_TEXTS}\r\n signatures={signaturesByPage.get(pageNum) ?? EMPTY_SIGNATURES}\r\n images={imagesByPage.get(pageNum) ?? EMPTY_IMAGES}\r\n />\r\n ) : (\r\n <div className=\"rpe-page-thumbnail\">\r\n <span className=\"rpe-page-thumbnail-text\">\r\n Page {displayLabel}\r\n </span>\r\n </div>\r\n )}\r\n <span className=\"rpe-page-label\">Page {displayLabel}</span>\r\n </div>\r\n </Fragment>\r\n );\r\n })}\r\n {lineIndex === pages.length ? (\r\n <div className=\"rpe-page-drop-line rpe-page-drop-line-end\" />\r\n ) : null}\r\n </div>\r\n </div>\r\n <p id=\"rpe-page-reorder-hint\" className=\"rpe-sr-only\">\r\n Drag to reorder. Use Alt plus arrow keys to move the focused page.\r\n </p>\r\n\r\n <div className=\"rpe-add-page\">\r\n <button\r\n type=\"button\"\r\n className={\r\n adding\r\n ? \"rpe-add-page-button rpe-add-page-button-busy\"\r\n : \"rpe-add-page-button\"\r\n }\r\n disabled={insertDisabled}\r\n aria-label={addLabel}\r\n title={addLabel}\r\n onClick={() => addBlankPage(page)}\r\n >\r\n {adding ? (\r\n <span className=\"rpe-add-page-spinner\" aria-hidden=\"true\" />\r\n ) : (\r\n <PlusIcon size={14} />\r\n )}\r\n {adding ? \"Adding page…\" : \"Add blank page\"}\r\n </button>\r\n {error ? (\r\n <p className=\"rpe-add-page-error\" role=\"alert\">\r\n {error}\r\n </p>\r\n ) : null}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { normalizeDegrees } from \"../lib/geometry\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n Tool,\r\n} from \"../types\";\r\nimport { RotateCcwIcon, RotateCwIcon, XIcon } from \"./icons\";\r\n\r\nconst HIGHLIGHT_SWATCHES = [\"#facc15\", \"#4ade80\", \"#38bdf8\", \"#f472b6\", \"#fb923c\"] as const;\r\n\r\nconst FONT_FAMILIES = [\r\n \"Arial\",\r\n \"Helvetica\",\r\n \"Times New Roman\",\r\n \"Georgia\",\r\n \"Courier New\",\r\n \"Verdana\",\r\n] as const;\r\n\r\nconst DRAW_WIDTHS = [\r\n { value: 1, label: \"Thin\" },\r\n { value: 2.5, label: \"Pen\" },\r\n { value: 5, label: \"Marker\" },\r\n { value: 8, label: \"Bold\" },\r\n] as const;\r\n\r\nfunction RotationField({\r\n value,\r\n onChange,\r\n}: {\r\n value?: number;\r\n onChange: (rotation: number) => void;\r\n}) {\r\n const rotation = Math.round(normalizeDegrees(value ?? 0));\r\n\r\n return (\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Rotation</span>\r\n <div className=\"rpe-properties-row\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-toggle\"\r\n aria-label=\"Rotate left 90 degrees\"\r\n onClick={() => onChange(normalizeDegrees(rotation - 90))}\r\n >\r\n <RotateCcwIcon size={14} />\r\n </button>\r\n <input\r\n className=\"rpe-properties-input\"\r\n type=\"number\"\r\n min={0}\r\n max={359}\r\n value={rotation}\r\n onChange={(event) => {\r\n const next = Number(event.target.value);\r\n if (!Number.isFinite(next)) {\r\n return;\r\n }\r\n onChange(normalizeDegrees(Math.round(next)));\r\n }}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-toggle\"\r\n aria-label=\"Rotate right 90 degrees\"\r\n onClick={() => onChange(normalizeDegrees(rotation + 90))}\r\n >\r\n <RotateCwIcon size={14} />\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\ntype PropertiesPanelProps = {\r\n activeTool: Tool;\r\n selectedText: TextAnnotation | null;\r\n selectedStroke: DrawStroke | null;\r\n selectedHighlight: HighlightAnnotation | null;\r\n selectedSignature: SignatureAnnotation | null;\r\n selectedImage: ImageAnnotation | null;\r\n drawColor: string;\r\n drawWidth: number;\r\n highlightColor: string;\r\n onUpdateText: (id: string, changes: Partial<TextAnnotation>) => void;\r\n onUpdateSignature: (id: string, changes: Partial<SignatureAnnotation>) => void;\r\n onUpdateImage: (id: string, changes: Partial<ImageAnnotation>) => void;\r\n onReplaceImage: () => void;\r\n onUpdateStroke: (id: string, changes: Partial<DrawStroke>) => void;\r\n onDrawColorChange: (color: string) => void;\r\n onDrawWidthChange: (width: number) => void;\r\n onHighlightColorChange: (color: string) => void;\r\n onClose?: () => void;\r\n};\r\n\r\nexport function PropertiesPanel({\r\n activeTool,\r\n selectedText,\r\n selectedStroke,\r\n selectedHighlight,\r\n selectedSignature,\r\n selectedImage,\r\n drawColor,\r\n drawWidth,\r\n highlightColor,\r\n onUpdateText,\r\n onUpdateSignature,\r\n onUpdateImage,\r\n onReplaceImage,\r\n onUpdateStroke,\r\n onDrawColorChange,\r\n onDrawWidthChange,\r\n onHighlightColorChange,\r\n onClose,\r\n}: PropertiesPanelProps) {\r\n return (\r\n <div className=\"rpe-properties-panel\">\r\n <div className=\"rpe-properties-header\">\r\n <span>Properties</span>\r\n {onClose ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-close\"\r\n aria-label=\"Close properties\"\r\n onClick={onClose}\r\n >\r\n <XIcon />\r\n </button>\r\n ) : null}\r\n </div>\r\n {selectedText ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Content</span>\r\n <textarea\r\n className=\"rpe-properties-textarea\"\r\n rows={3}\r\n value={selectedText.text}\r\n onChange={(event) =>\r\n onUpdateText(selectedText.id, { text: event.target.value })\r\n }\r\n />\r\n </label>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Font</span>\r\n <select\r\n className=\"rpe-properties-select\"\r\n value={selectedText.fontFamily}\r\n onChange={(event) =>\r\n onUpdateText(selectedText.id, { fontFamily: event.target.value })\r\n }\r\n >\r\n {FONT_FAMILIES.map((family) => (\r\n <option key={family} value={family}>\r\n {family}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Size</span>\r\n <input\r\n className=\"rpe-properties-input\"\r\n type=\"number\"\r\n min={8}\r\n max={200}\r\n value={selectedText.fontSize}\r\n onChange={(event) => {\r\n const next = Number(event.target.value);\r\n if (!Number.isFinite(next)) {\r\n return;\r\n }\r\n onUpdateText(selectedText.id, {\r\n fontSize: Math.min(200, Math.max(8, Math.round(next))),\r\n });\r\n }}\r\n onBlur={(event) => {\r\n const next = Number(event.target.value);\r\n if (!Number.isFinite(next)) {\r\n onUpdateText(selectedText.id, { fontSize: 16 });\r\n return;\r\n }\r\n onUpdateText(selectedText.id, {\r\n fontSize: Math.min(200, Math.max(8, Math.round(next))),\r\n });\r\n }}\r\n />\r\n </label>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={selectedText.color}\r\n onChange={(event) =>\r\n onUpdateText(selectedText.id, { color: event.target.value })\r\n }\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Style</span>\r\n <div className=\"rpe-properties-row\">\r\n <button\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedText.fontWeight === \"bold\" ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedText.fontWeight === \"bold\"}\r\n aria-label=\"Bold\"\r\n onClick={() =>\r\n onUpdateText(selectedText.id, {\r\n fontWeight: selectedText.fontWeight === \"bold\" ? \"normal\" : \"bold\",\r\n })\r\n }\r\n >\r\n B\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedText.fontStyle === \"italic\" ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedText.fontStyle === \"italic\"}\r\n aria-label=\"Italic\"\r\n style={{ fontStyle: \"italic\" }}\r\n onClick={() =>\r\n onUpdateText(selectedText.id, {\r\n fontStyle: selectedText.fontStyle === \"italic\" ? \"normal\" : \"italic\",\r\n })\r\n }\r\n >\r\n I\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Alignment</span>\r\n <div className=\"rpe-properties-row\">\r\n {(\r\n [\r\n [\"left\", \"Left\"],\r\n [\"center\", \"Center\"],\r\n [\"right\", \"Right\"],\r\n ] as const\r\n ).map(([value, label]) => (\r\n <button\r\n key={value}\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedText.textAlign === value ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedText.textAlign === value}\r\n aria-label={label}\r\n onClick={() => onUpdateText(selectedText.id, { textAlign: value })}\r\n >\r\n {label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <RotationField\r\n value={selectedText.rotation}\r\n onChange={(rotation) => onUpdateText(selectedText.id, { rotation })}\r\n />\r\n </form>\r\n ) : selectedSignature ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Signature</span>\r\n <img\r\n className=\"rpe-properties-preview\"\r\n src={selectedSignature.src}\r\n alt=\"Selected signature\"\r\n />\r\n </div>\r\n <RotationField\r\n value={selectedSignature.rotation}\r\n onChange={(rotation) => onUpdateSignature(selectedSignature.id, { rotation })}\r\n />\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag to move, resize from the handles, or drag the top handle to rotate.\r\n </div>\r\n </form>\r\n ) : selectedImage ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Image</span>\r\n <div className=\"rpe-properties-image-preview\">\r\n <img\r\n className=\"rpe-properties-preview\"\r\n src={selectedImage.src}\r\n alt=\"Selected image\"\r\n style={{ opacity: selectedImage.opacity ?? 1 }}\r\n />\r\n </div>\r\n </div>\r\n <RotationField\r\n value={selectedImage.rotation}\r\n onChange={(rotation) => onUpdateImage(selectedImage.id, { rotation })}\r\n />\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">\r\n Opacity {Math.round((selectedImage.opacity ?? 1) * 100)}%\r\n </span>\r\n <input\r\n className=\"rpe-properties-range\"\r\n type=\"range\"\r\n min={20}\r\n max={100}\r\n step={5}\r\n value={Math.round((selectedImage.opacity ?? 1) * 100)}\r\n onChange={(event) =>\r\n onUpdateImage(selectedImage.id, {\r\n opacity: Number(event.target.value) / 100,\r\n })\r\n }\r\n />\r\n </label>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-properties-replace\"\r\n onClick={onReplaceImage}\r\n >\r\n Replace image\r\n </button>\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag to move, resize from the handles, or drag the top handle to rotate.\r\n </div>\r\n </form>\r\n ) : selectedHighlight ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={selectedHighlight.color}\r\n onChange={(event) => onHighlightColorChange(event.target.value)}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Preset</span>\r\n <div className=\"rpe-properties-row\">\r\n {HIGHLIGHT_SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${selectedHighlight.color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={selectedHighlight.color.toLowerCase() === swatch}\r\n onClick={() => onHighlightColorChange(swatch)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag the highlight box to move it.\r\n </div>\r\n </form>\r\n ) : selectedStroke ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={selectedStroke.color}\r\n onChange={(event) => {\r\n onDrawColorChange(event.target.value);\r\n onUpdateStroke(selectedStroke.id, { color: event.target.value });\r\n }}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Thickness</span>\r\n <div className=\"rpe-properties-row\">\r\n {DRAW_WIDTHS.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n className={`rpe-properties-toggle${selectedStroke.width === option.value ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={selectedStroke.width === option.value}\r\n onClick={() => {\r\n onDrawWidthChange(option.value);\r\n onUpdateStroke(selectedStroke.id, { width: option.value });\r\n }}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Drag the drawing box to move it.\r\n </div>\r\n </form>\r\n ) : activeTool === \"draw\" ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Draw on the page. Choose color and thickness.\r\n </div>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={drawColor}\r\n onChange={(event) => onDrawColorChange(event.target.value)}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Thickness</span>\r\n <div className=\"rpe-properties-row\">\r\n {DRAW_WIDTHS.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n className={`rpe-properties-toggle${drawWidth === option.value ? \" rpe-properties-toggle-active\" : \"\"}`}\r\n aria-pressed={drawWidth === option.value}\r\n onClick={() => onDrawWidthChange(option.value)}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </form>\r\n ) : activeTool === \"highlight\" ? (\r\n <form\r\n className=\"rpe-properties-form\"\r\n onSubmit={(event) => event.preventDefault()}\r\n >\r\n <div className=\"rpe-properties-empty\" style={{ padding: 0, textAlign: \"left\" }}>\r\n Select text to highlight.\r\n </div>\r\n\r\n <label className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Color</span>\r\n <input\r\n className=\"rpe-properties-color\"\r\n type=\"color\"\r\n value={highlightColor}\r\n onChange={(event) => onHighlightColorChange(event.target.value)}\r\n />\r\n </label>\r\n\r\n <div className=\"rpe-properties-field\">\r\n <span className=\"rpe-properties-label\">Preset</span>\r\n <div className=\"rpe-properties-row\">\r\n {HIGHLIGHT_SWATCHES.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${highlightColor.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Highlight color ${swatch}`}\r\n aria-pressed={highlightColor.toLowerCase() === swatch}\r\n onClick={() => onHighlightColorChange(swatch)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </form>\r\n ) : (\r\n <div className=\"rpe-properties-empty\">\r\n {activeTool === \"text\"\r\n ? \"Click on the page to add text.\"\r\n : activeTool === \"signature\"\r\n ? \"Choose a signature, then click a page to place it.\"\r\n : activeTool === \"image\"\r\n ? \"Choose an image, then click a page to place it.\"\r\n : \"Select a tool or annotation to edit properties.\"}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","export const SIGNATURE_INK_COLORS = [\"#111827\", \"#1e3a5f\", \"#1d4ed8\"] as const;\r\n\r\nexport const SIGNATURE_FONTS = [\r\n { id: \"great-vibes\", label: \"Elegant\", family: \"Great Vibes\", weight: 400 },\r\n { id: \"dancing-script\", label: \"Casual\", family: \"Dancing Script\", weight: 500 },\r\n { id: \"allura\", label: \"Formal\", family: \"Allura\", weight: 400 },\r\n { id: \"satisfy\", label: \"Friendly\", family: \"Satisfy\", weight: 400 },\r\n] as const;\r\n\r\nexport type SignatureFontId = (typeof SIGNATURE_FONTS)[number][\"id\"];\r\n\r\nexport type SavedSignature = {\r\n id: string;\r\n src: string;\r\n};\r\n\r\nconst FONT_STYLESHEET =\r\n \"https://fonts.googleapis.com/css2?family=Allura&family=Dancing+Script:wght@500&family=Great+Vibes&family=Satisfy&display=swap\";\r\nconst STORAGE_KEY = \"rpe-saved-signatures\";\r\nconst MAX_SAVED = 5;\r\nconst MAX_UPLOAD_BYTES = 4 * 1024 * 1024;\r\nconst MAX_IMAGE_EDGE = 1600;\r\n\r\nlet fontsPromise: Promise<void> | null = null;\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `sig-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function loadSignatureFonts(): Promise<void> {\r\n if (typeof document === \"undefined\") {\r\n return Promise.resolve();\r\n }\r\n\r\n if (fontsPromise) {\r\n return fontsPromise;\r\n }\r\n\r\n fontsPromise = (async () => {\r\n if (!document.querySelector(\"link[data-rpe-signature-fonts]\")) {\r\n const link = document.createElement(\"link\");\r\n link.rel = \"stylesheet\";\r\n link.href = FONT_STYLESHEET;\r\n link.dataset.rpeSignatureFonts = \"\";\r\n document.head.append(link);\r\n await new Promise<void>((resolve) => {\r\n link.onload = () => resolve();\r\n link.onerror = () => resolve();\r\n });\r\n }\r\n\r\n await Promise.all(\r\n SIGNATURE_FONTS.map((font) =>\r\n document.fonts.load(`${font.weight} 72px \"${font.family}\"`),\r\n ),\r\n );\r\n await document.fonts.ready;\r\n })();\r\n\r\n return fontsPromise;\r\n}\r\n\r\nexport function trimTransparentCanvas(\r\n source: HTMLCanvasElement,\r\n padding = 10,\r\n): HTMLCanvasElement | null {\r\n const context = source.getContext(\"2d\");\r\n if (!context) {\r\n return null;\r\n }\r\n\r\n const { width, height } = source;\r\n if (width === 0 || height === 0) {\r\n return null;\r\n }\r\n\r\n const { data } = context.getImageData(0, 0, width, height);\r\n let minX = width;\r\n let minY = height;\r\n let maxX = -1;\r\n let maxY = -1;\r\n\r\n for (let y = 0; y < height; y += 1) {\r\n for (let x = 0; x < width; x += 1) {\r\n if (data[(y * width + x) * 4 + 3] > 10) {\r\n minX = Math.min(minX, x);\r\n minY = Math.min(minY, y);\r\n maxX = Math.max(maxX, x);\r\n maxY = Math.max(maxY, y);\r\n }\r\n }\r\n }\r\n\r\n if (maxX < 0) {\r\n return null;\r\n }\r\n\r\n minX = Math.max(0, minX - padding);\r\n minY = Math.max(0, minY - padding);\r\n maxX = Math.min(width - 1, maxX + padding);\r\n maxY = Math.min(height - 1, maxY + padding);\r\n\r\n const next = document.createElement(\"canvas\");\r\n next.width = maxX - minX + 1;\r\n next.height = maxY - minY + 1;\r\n const nextContext = next.getContext(\"2d\");\r\n if (!nextContext) {\r\n return null;\r\n }\r\n\r\n nextContext.drawImage(\r\n source,\r\n minX,\r\n minY,\r\n next.width,\r\n next.height,\r\n 0,\r\n 0,\r\n next.width,\r\n next.height,\r\n );\r\n return next;\r\n}\r\n\r\nexport function canvasToPngDataUrl(canvas: HTMLCanvasElement): string | null {\r\n const trimmed = trimTransparentCanvas(canvas);\r\n if (!trimmed) {\r\n return null;\r\n }\r\n\r\n return trimmed.toDataURL(\"image/png\");\r\n}\r\n\r\nfunction fitWithin(width: number, height: number, maxEdge: number) {\r\n const edge = Math.max(width, height);\r\n if (edge <= maxEdge) {\r\n return { width, height };\r\n }\r\n\r\n const scale = maxEdge / edge;\r\n return {\r\n width: Math.max(1, Math.round(width * scale)),\r\n height: Math.max(1, Math.round(height * scale)),\r\n };\r\n}\r\n\r\nexport async function fileToPngDataUrl(file: File): Promise<string> {\r\n if (file.size > MAX_UPLOAD_BYTES) {\r\n throw new Error(\"Image is too large (max 4 MB).\");\r\n }\r\n\r\n if (!file.type.startsWith(\"image/\")) {\r\n throw new Error(\"Choose a PNG, JPG, or WebP image.\");\r\n }\r\n\r\n const bitmap = await createImageBitmap(file);\r\n const size = fitWithin(bitmap.width, bitmap.height, MAX_IMAGE_EDGE);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = size.width;\r\n canvas.height = size.height;\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n bitmap.close();\r\n throw new Error(\"Could not read that image.\");\r\n }\r\n\r\n context.drawImage(bitmap, 0, 0, size.width, size.height);\r\n bitmap.close();\r\n return canvas.toDataURL(\"image/png\");\r\n}\r\n\r\nexport async function rasterizeTypedSignature(\r\n text: string,\r\n fontFamily: string,\r\n color: string,\r\n fontWeight = 400,\r\n): Promise<string | null> {\r\n const value = text.trim();\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n await loadSignatureFonts();\r\n const fontSize = 96;\r\n const font = `${fontWeight} ${fontSize}px \"${fontFamily}\", cursive`;\r\n\r\n try {\r\n await document.fonts.load(font);\r\n } catch {\r\n // Fall back to the generic cursive stack.\r\n }\r\n\r\n const measure = document.createElement(\"canvas\");\r\n const measureContext = measure.getContext(\"2d\");\r\n if (!measureContext) {\r\n return null;\r\n }\r\n\r\n measureContext.font = font;\r\n const metrics = measureContext.measureText(value);\r\n const ascent = metrics.actualBoundingBoxAscent || fontSize * 0.8;\r\n const descent = metrics.actualBoundingBoxDescent || fontSize * 0.3;\r\n const textWidth = Math.ceil(metrics.width);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(32, textWidth + Math.ceil(fontSize * 0.5));\r\n canvas.height = Math.max(32, Math.ceil(ascent + descent + fontSize * 0.4));\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return null;\r\n }\r\n\r\n context.font = font;\r\n context.fillStyle = color;\r\n context.textBaseline = \"alphabetic\";\r\n context.fillText(value, Math.ceil(fontSize * 0.2), Math.ceil(ascent + fontSize * 0.15));\r\n return canvasToPngDataUrl(canvas);\r\n}\r\n\r\nexport function measureDataUrl(src: string): Promise<{ width: number; height: number }> {\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve({\r\n width: image.naturalWidth,\r\n height: image.naturalHeight,\r\n });\r\n };\r\n image.onerror = () => reject(new Error(\"Could not read that signature.\"));\r\n image.src = src;\r\n });\r\n}\r\n\r\nexport async function toPendingSignature(src: string) {\r\n const size = await measureDataUrl(src);\r\n return {\r\n src,\r\n aspect: size.width / Math.max(1, size.height),\r\n };\r\n}\r\n\r\nexport function readSavedSignatures(): SavedSignature[] {\r\n if (typeof localStorage === \"undefined\") {\r\n return [];\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n if (!raw) {\r\n return [];\r\n }\r\n\r\n const parsed: unknown = JSON.parse(raw);\r\n if (!Array.isArray(parsed)) {\r\n return [];\r\n }\r\n\r\n return parsed\r\n .filter(\r\n (item): item is SavedSignature =>\r\n Boolean(item) &&\r\n typeof item === \"object\" &&\r\n typeof (item as SavedSignature).id === \"string\" &&\r\n typeof (item as SavedSignature).src === \"string\",\r\n )\r\n .slice(0, MAX_SAVED);\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function rememberSignature(src: string): SavedSignature[] {\r\n const items = readSavedSignatures().filter((item) => item.src !== src);\r\n items.unshift({ id: createId(), src });\r\n const next = items.slice(0, MAX_SAVED);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\r\n } catch {\r\n // Ignore quota errors; placement still works.\r\n }\r\n\r\n return next;\r\n}\r\n\r\nexport function forgetSignature(id: string): SavedSignature[] {\r\n const next = readSavedSignatures().filter((item) => item.id !== id);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\r\n } catch {\r\n // Ignore quota errors.\r\n }\r\n\r\n return next;\r\n}\r\n","import {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n type PointerEvent as ReactPointerEvent,\r\n} from \"react\";\r\nimport { canvasToPngDataUrl } from \"../lib/signatureImage\";\r\n\r\ntype Point = { x: number; y: number };\r\ntype Stroke = { points: Point[]; color: string };\r\n\r\nexport type SignaturePadHandle = {\r\n hasInk: () => boolean;\r\n toPng: () => string | null;\r\n clear: () => void;\r\n undo: () => void;\r\n};\r\n\r\ntype SignaturePadProps = {\r\n color: string;\r\n onInkChange?: (hasInk: boolean) => void;\r\n};\r\n\r\nfunction pointFromEvent(event: { clientX: number; clientY: number }, node: HTMLElement): Point {\r\n const rect = node.getBoundingClientRect();\r\n return {\r\n x: event.clientX - rect.left,\r\n y: event.clientY - rect.top,\r\n };\r\n}\r\n\r\nfunction drawStroke(\r\n context: CanvasRenderingContext2D,\r\n stroke: Stroke,\r\n scale: number,\r\n) {\r\n if (stroke.points.length === 0) {\r\n return;\r\n }\r\n\r\n context.strokeStyle = stroke.color;\r\n context.lineWidth = 2.4 * scale;\r\n context.lineCap = \"round\";\r\n context.lineJoin = \"round\";\r\n context.beginPath();\r\n\r\n const first = stroke.points[0];\r\n context.moveTo(first.x * scale, first.y * scale);\r\n\r\n if (stroke.points.length === 1) {\r\n context.lineTo(first.x * scale + 0.01, first.y * scale);\r\n context.stroke();\r\n return;\r\n }\r\n\r\n for (let index = 1; index < stroke.points.length - 1; index += 1) {\r\n const current = stroke.points[index];\r\n const next = stroke.points[index + 1];\r\n const midX = ((current.x + next.x) / 2) * scale;\r\n const midY = ((current.y + next.y) / 2) * scale;\r\n context.quadraticCurveTo(current.x * scale, current.y * scale, midX, midY);\r\n }\r\n\r\n const last = stroke.points[stroke.points.length - 1];\r\n context.lineTo(last.x * scale, last.y * scale);\r\n context.stroke();\r\n}\r\n\r\nexport const SignaturePad = forwardRef<SignaturePadHandle, SignaturePadProps>(\r\n function SignaturePad({ color, onInkChange }, ref) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const strokesRef = useRef<Stroke[]>([]);\r\n const draftRef = useRef<Point[] | null>(null);\r\n const drawingRef = useRef(false);\r\n const colorRef = useRef(color);\r\n colorRef.current = color;\r\n const [hasInk, setHasInk] = useState(false);\r\n\r\n const notifyInk = (next: boolean) => {\r\n setHasInk(next);\r\n onInkChange?.(next);\r\n };\r\n\r\n const paint = () => {\r\n const canvas = canvasRef.current;\r\n const context = canvas?.getContext(\"2d\");\r\n if (!canvas || !context) {\r\n return;\r\n }\r\n\r\n const scale = window.devicePixelRatio || 1;\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n for (const stroke of strokesRef.current) {\r\n drawStroke(context, stroke, scale);\r\n }\r\n\r\n if (draftRef.current && draftRef.current.length > 0) {\r\n drawStroke(context, { points: draftRef.current, color: colorRef.current }, scale);\r\n }\r\n };\r\n\r\n const resizeCanvas = () => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n const rect = canvas.getBoundingClientRect();\r\n const scale = window.devicePixelRatio || 1;\r\n canvas.width = Math.max(1, Math.floor(rect.width * scale));\r\n canvas.height = Math.max(1, Math.floor(rect.height * scale));\r\n paint();\r\n };\r\n\r\n useEffect(() => {\r\n resizeCanvas();\r\n const observer = new ResizeObserver(resizeCanvas);\r\n if (canvasRef.current) {\r\n observer.observe(canvasRef.current);\r\n }\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n useImperativeHandle(ref, () => ({\r\n hasInk: () => strokesRef.current.length > 0,\r\n toPng: () => {\r\n const canvas = canvasRef.current;\r\n if (!canvas || strokesRef.current.length === 0) {\r\n return null;\r\n }\r\n\r\n draftRef.current = null;\r\n paint();\r\n return canvasToPngDataUrl(canvas);\r\n },\r\n clear: () => {\r\n strokesRef.current = [];\r\n draftRef.current = null;\r\n drawingRef.current = false;\r\n paint();\r\n notifyInk(false);\r\n },\r\n undo: () => {\r\n strokesRef.current = strokesRef.current.slice(0, -1);\r\n draftRef.current = null;\r\n paint();\r\n notifyInk(strokesRef.current.length > 0);\r\n },\r\n }));\r\n\r\n const handlePointerDown = (event: ReactPointerEvent<HTMLCanvasElement>) => {\r\n if (event.button !== 0) {\r\n return;\r\n }\r\n\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n drawingRef.current = true;\r\n draftRef.current = [pointFromEvent(event, canvas)];\r\n canvas.setPointerCapture(event.pointerId);\r\n paint();\r\n };\r\n\r\n const handlePointerMove = (event: ReactPointerEvent<HTMLCanvasElement>) => {\r\n if (!drawingRef.current || !canvasRef.current || !draftRef.current) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const next = pointFromEvent(event, canvasRef.current);\r\n const last = draftRef.current[draftRef.current.length - 1];\r\n if (!last || Math.hypot(next.x - last.x, next.y - last.y) >= 1.2) {\r\n draftRef.current = [...draftRef.current, next];\r\n paint();\r\n }\r\n };\r\n\r\n const finishStroke = (event: ReactPointerEvent<HTMLCanvasElement>) => {\r\n if (!drawingRef.current) {\r\n return;\r\n }\r\n\r\n drawingRef.current = false;\r\n if (canvasRef.current?.hasPointerCapture(event.pointerId)) {\r\n canvasRef.current.releasePointerCapture(event.pointerId);\r\n }\r\n\r\n const points = draftRef.current;\r\n draftRef.current = null;\r\n if (points && points.length > 0) {\r\n strokesRef.current = [\r\n ...strokesRef.current,\r\n { points, color: colorRef.current },\r\n ];\r\n notifyInk(true);\r\n }\r\n paint();\r\n };\r\n\r\n return (\r\n <canvas\r\n ref={canvasRef}\r\n className=\"rpe-signature-pad-canvas\"\r\n aria-label=\"Signature drawing pad\"\r\n onPointerDown={handlePointerDown}\r\n onPointerMove={handlePointerMove}\r\n onPointerUp={finishStroke}\r\n onPointerCancel={finishStroke}\r\n data-has-ink={hasInk ? \"true\" : \"false\"}\r\n />\r\n );\r\n },\r\n);\r\n","import { useEffect } from \"react\";\r\nimport { loadSignatureFonts } from \"../lib/signatureImage\";\r\n\r\ntype SignatureTypePreviewProps = {\r\n text: string;\r\n fontFamily: string;\r\n color: string;\r\n};\r\n\r\nexport function SignatureTypePreview({\r\n text,\r\n fontFamily,\r\n color,\r\n}: SignatureTypePreviewProps) {\r\n useEffect(() => {\r\n void loadSignatureFonts();\r\n }, []);\r\n\r\n const value = text.trim();\r\n\r\n return (\r\n <div className=\"rpe-signature-type-preview\" aria-hidden={!value}>\r\n <span\r\n className={`rpe-signature-type-text${value ? \"\" : \" rpe-signature-type-placeholder\"}`}\r\n style={{ fontFamily: `\"${fontFamily}\", cursive`, color }}\r\n >\r\n {value || \"Your name\"}\r\n </span>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useRef, useState, type DragEvent, type KeyboardEvent } from \"react\";\r\nimport {\r\n fileToPngDataUrl,\r\n forgetSignature,\r\n loadSignatureFonts,\r\n rasterizeTypedSignature,\r\n readSavedSignatures,\r\n rememberSignature,\r\n SIGNATURE_FONTS,\r\n SIGNATURE_INK_COLORS,\r\n type SavedSignature,\r\n type SignatureFontId,\r\n} from \"../lib/signatureImage\";\r\nimport { SignaturePad, type SignaturePadHandle } from \"./SignaturePad\";\r\nimport { SignatureTypePreview } from \"./SignatureTypePreview\";\r\nimport { ImageIcon, PencilIcon, TypeIcon, Undo2Icon, UploadIcon, XIcon } from \"./icons\";\r\n\r\ntype Tab = \"draw\" | \"type\" | \"upload\";\r\n\r\ntype SignatureModalProps = {\r\n onApply: (src: string) => void;\r\n onClose: () => void;\r\n};\r\n\r\nexport function SignatureModal({ onApply, onClose }: SignatureModalProps) {\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const padRef = useRef<SignaturePadHandle>(null);\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const [tab, setTab] = useState<Tab>(\"draw\");\r\n const [color, setColor] = useState<string>(SIGNATURE_INK_COLORS[0]);\r\n const [typedName, setTypedName] = useState(\"\");\r\n const [fontId, setFontId] = useState<SignatureFontId>(SIGNATURE_FONTS[0].id);\r\n const [uploadSrc, setUploadSrc] = useState<string | null>(null);\r\n const [uploadError, setUploadError] = useState<string | null>(null);\r\n const [dragOver, setDragOver] = useState(false);\r\n const [hasInk, setHasInk] = useState(false);\r\n const [busy, setBusy] = useState(false);\r\n const [saved, setSaved] = useState<SavedSignature[]>(() => readSavedSignatures());\r\n\r\n const selectedFont =\r\n SIGNATURE_FONTS.find((font) => font.id === fontId) ?? SIGNATURE_FONTS[0];\r\n\r\n const canApply =\r\n !busy &&\r\n (tab === \"draw\"\r\n ? hasInk\r\n : tab === \"type\"\r\n ? typedName.trim().length > 0\r\n : Boolean(uploadSrc));\r\n\r\n useEffect(() => {\r\n void loadSignatureFonts();\r\n dialogRef.current?.focus();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n onClose();\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", onKeyDown);\r\n return () => window.removeEventListener(\"keydown\", onKeyDown);\r\n }, [onClose]);\r\n\r\n const applySrc = (src: string) => {\r\n setSaved(rememberSignature(src));\r\n onApply(src);\r\n };\r\n\r\n const handleApply = async () => {\r\n if (busy) {\r\n return;\r\n }\r\n\r\n setBusy(true);\r\n setUploadError(null);\r\n\r\n try {\r\n if (tab === \"draw\") {\r\n const src = padRef.current?.toPng() ?? null;\r\n if (!src) {\r\n return;\r\n }\r\n applySrc(src);\r\n return;\r\n }\r\n\r\n if (tab === \"type\") {\r\n const src = await rasterizeTypedSignature(\r\n typedName,\r\n selectedFont.family,\r\n color,\r\n selectedFont.weight,\r\n );\r\n if (!src) {\r\n return;\r\n }\r\n applySrc(src);\r\n return;\r\n }\r\n\r\n if (uploadSrc) {\r\n applySrc(uploadSrc);\r\n }\r\n } catch (caught) {\r\n setUploadError(caught instanceof Error ? caught.message : \"Could not create signature.\");\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const handleDialogKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n if (event.key === \"Enter\" && (event.ctrlKey || event.metaKey) && canApply) {\r\n event.preventDefault();\r\n void handleApply();\r\n }\r\n };\r\n\r\n const readUpload = async (file: File | undefined) => {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n setUploadError(null);\r\n setBusy(true);\r\n try {\r\n const src = await fileToPngDataUrl(file);\r\n setUploadSrc(src);\r\n setTab(\"upload\");\r\n } catch (caught) {\r\n setUploadSrc(null);\r\n setUploadError(caught instanceof Error ? caught.message : \"Could not read that image.\");\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const handleDrop = (event: DragEvent<HTMLLabelElement>) => {\r\n event.preventDefault();\r\n setDragOver(false);\r\n void readUpload(event.dataTransfer.files[0]);\r\n };\r\n\r\n return (\r\n <div className=\"rpe-modal-backdrop\" onMouseDown={onClose}>\r\n <div\r\n ref={dialogRef}\r\n className=\"rpe-modal rpe-signature-modal\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby=\"rpe-signature-title\"\r\n tabIndex={-1}\r\n onMouseDown={(event) => event.stopPropagation()}\r\n onKeyDown={handleDialogKeyDown}\r\n >\r\n <div className=\"rpe-modal-header\">\r\n <div>\r\n <h2 id=\"rpe-signature-title\" className=\"rpe-modal-title\">\r\n Add signature\r\n </h2>\r\n <p className=\"rpe-modal-subtitle\">Draw, type, or upload a signature to place on the page.</p>\r\n </div>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-close\"\r\n aria-label=\"Close\"\r\n onClick={onClose}\r\n >\r\n <XIcon />\r\n </button>\r\n </div>\r\n\r\n {saved.length > 0 ? (\r\n <div className=\"rpe-signature-saved\">\r\n <div className=\"rpe-signature-saved-label\">Saved</div>\r\n <div className=\"rpe-signature-saved-row\">\r\n {saved.map((item) => (\r\n <div key={item.id} className=\"rpe-signature-saved-item\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-signature-saved-button\"\r\n onClick={() => applySrc(item.src)}\r\n aria-label=\"Use saved signature\"\r\n >\r\n <img src={item.src} alt=\"\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-signature-saved-remove\"\r\n aria-label=\"Remove saved signature\"\r\n onClick={() => setSaved(forgetSignature(item.id))}\r\n >\r\n <XIcon size={12} />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n <div className=\"rpe-signature-tabs\" role=\"tablist\" aria-label=\"Signature method\">\r\n {(\r\n [\r\n [\"draw\", \"Draw\", PencilIcon],\r\n [\"type\", \"Type\", TypeIcon],\r\n [\"upload\", \"Upload\", ImageIcon],\r\n ] as const\r\n ).map(([id, label, Icon]) => (\r\n <button\r\n key={id}\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={tab === id}\r\n className={`rpe-signature-tab${tab === id ? \" rpe-signature-tab-active\" : \"\"}`}\r\n onClick={() => setTab(id)}\r\n >\r\n <Icon size={14} />\r\n {label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <div className=\"rpe-signature-body\" role=\"tabpanel\">\r\n {tab === \"draw\" ? (\r\n <div className=\"rpe-signature-draw\">\r\n <div className=\"rpe-signature-sheet\">\r\n <SignaturePad ref={padRef} color={color} onInkChange={setHasInk} />\r\n <div className=\"rpe-signature-baseline\" />\r\n {!hasInk ? (\r\n <div className=\"rpe-signature-sheet-hint\">Sign here</div>\r\n ) : null}\r\n </div>\r\n <div className=\"rpe-signature-controls\">\r\n <div className=\"rpe-ink-swatches\">\r\n {SIGNATURE_INK_COLORS.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Ink color ${swatch}`}\r\n aria-pressed={color.toLowerCase() === swatch}\r\n onClick={() => setColor(swatch)}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"rpe-signature-control-actions\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n disabled={!hasInk}\r\n onClick={() => padRef.current?.undo()}\r\n >\r\n <Undo2Icon size={14} />\r\n Undo\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n disabled={!hasInk}\r\n onClick={() => padRef.current?.clear()}\r\n >\r\n Clear\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {tab === \"type\" ? (\r\n <div className=\"rpe-signature-type\">\r\n <label className=\"rpe-signature-field\">\r\n <span className=\"rpe-signature-field-label\">Full name</span>\r\n <input\r\n className=\"rpe-signature-input\"\r\n type=\"text\"\r\n value={typedName}\r\n autoFocus\r\n placeholder=\"Jane Smith\"\r\n maxLength={80}\r\n onChange={(event) => setTypedName(event.target.value)}\r\n />\r\n </label>\r\n <div className=\"rpe-signature-sheet rpe-signature-sheet-type\">\r\n <SignatureTypePreview\r\n text={typedName}\r\n fontFamily={selectedFont.family}\r\n color={color}\r\n />\r\n <div className=\"rpe-signature-baseline\" />\r\n </div>\r\n <div className=\"rpe-signature-fonts\">\r\n {SIGNATURE_FONTS.map((font) => (\r\n <button\r\n key={font.id}\r\n type=\"button\"\r\n className={`rpe-signature-font${fontId === font.id ? \" rpe-signature-font-active\" : \"\"}`}\r\n aria-pressed={fontId === font.id}\r\n onClick={() => setFontId(font.id)}\r\n style={{ fontFamily: `\"${font.family}\", cursive` }}\r\n >\r\n {font.label}\r\n </button>\r\n ))}\r\n </div>\r\n <div className=\"rpe-ink-swatches\">\r\n {SIGNATURE_INK_COLORS.map((swatch) => (\r\n <button\r\n key={swatch}\r\n type=\"button\"\r\n className={`rpe-ink-swatch${color.toLowerCase() === swatch ? \" rpe-ink-swatch-active\" : \"\"}`}\r\n style={{ background: swatch }}\r\n aria-label={`Ink color ${swatch}`}\r\n aria-pressed={color.toLowerCase() === swatch}\r\n onClick={() => setColor(swatch)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {tab === \"upload\" ? (\r\n <div className=\"rpe-signature-upload\">\r\n <input\r\n ref={fileInputRef}\r\n id=\"rpe-signature-upload\"\r\n type=\"file\"\r\n accept=\"image/png,image/jpeg,image/webp\"\r\n className=\"rpe-signature-file\"\r\n onChange={(event) => {\r\n void readUpload(event.target.files?.[0]);\r\n event.currentTarget.value = \"\";\r\n }}\r\n />\r\n <label\r\n htmlFor=\"rpe-signature-upload\"\r\n className={`rpe-signature-dropzone${dragOver ? \" rpe-signature-dropzone-active\" : \"\"}${uploadSrc ? \" rpe-signature-dropzone-filled\" : \"\"}`}\r\n onDragEnter={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragOver={(event) => {\r\n event.preventDefault();\r\n setDragOver(true);\r\n }}\r\n onDragLeave={() => setDragOver(false)}\r\n onDrop={handleDrop}\r\n >\r\n {uploadSrc ? (\r\n <img src={uploadSrc} alt=\"Uploaded signature preview\" />\r\n ) : (\r\n <span className=\"rpe-signature-dropzone-copy\">\r\n <UploadIcon size={22} />\r\n <strong>Drop an image here</strong>\r\n <span>or click to browse PNG, JPG, or WebP</span>\r\n </span>\r\n )}\r\n </label>\r\n {uploadSrc ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-secondary\"\r\n onClick={() => {\r\n setUploadSrc(null);\r\n fileInputRef.current?.click();\r\n }}\r\n >\r\n Replace image\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n {uploadError ? (\r\n <div className=\"rpe-signature-error\" role=\"alert\">\r\n {uploadError}\r\n </div>\r\n ) : null}\r\n </div>\r\n\r\n <div className=\"rpe-modal-footer\">\r\n <button type=\"button\" className=\"rpe-modal-secondary\" onClick={onClose}>\r\n Cancel\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-modal-primary\"\r\n disabled={!canApply}\r\n onClick={() => void handleApply()}\r\n >\r\n {busy ? \"Preparing…\" : \"Use signature\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","type SignatureToolbarProps = {\r\n onChange: () => void;\r\n onCancel: () => void;\r\n};\r\n\r\nexport function SignatureToolbar({ onChange, onCancel }: SignatureToolbarProps) {\r\n return (\r\n <div className=\"rpe-ink-toolbar rpe-signature-place-toolbar\" role=\"toolbar\" aria-label=\"Place signature\">\r\n <span className=\"rpe-signature-place-hint\">Click a page to place your signature</span>\r\n <span className=\"rpe-ink-divider\" />\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onChange}>\r\n Change\r\n </button>\r\n <button type=\"button\" className=\"rpe-signature-place-button\" onClick={onCancel}>\r\n Cancel\r\n </button>\r\n </div>\r\n );\r\n}\r\n","import { useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent } from \"react\";\r\nimport type { ToolbarApi } from \"../types\";\r\nimport {\r\n CheckIcon,\r\n ChevronDownIcon,\r\n ChevronLeftIcon,\r\n ChevronRightIcon,\r\n DownloadIcon,\r\n FileTextIcon,\r\n HighlighterIcon,\r\n ImageIcon,\r\n MousePointer2Icon,\r\n PanelLeftIcon,\r\n PencilIcon,\r\n PenToolIcon,\r\n Redo2Icon,\r\n SearchIcon,\r\n TypeIcon,\r\n Undo2Icon,\r\n XIcon,\r\n ZoomInIcon,\r\n ZoomOutIcon,\r\n} from \"./icons\";\r\n\r\nconst ZOOM_PRESETS = [50, 75, 100, 125, 150, 200, 250, 300] as const;\r\n\r\nfunction parseZoomPercent(raw: string): number | null {\r\n const cleaned = raw.trim().replace(/%/g, \"\").replace(\",\", \".\");\r\n if (!cleaned) {\r\n return null;\r\n }\r\n\r\n const value = Number(cleaned);\r\n return Number.isFinite(value) ? value : null;\r\n}\r\n\r\nfunction parsePageNumber(raw: string): number | null {\r\n const cleaned = raw.trim();\r\n if (!cleaned || !/^\\d+$/.test(cleaned)) {\r\n return null;\r\n }\r\n\r\n const value = Number(cleaned);\r\n return Number.isInteger(value) && value > 0 ? value : null;\r\n}\r\n\r\nfunction zoomPresetPercents(minPercent: number, maxPercent: number): number[] {\r\n const values = new Set<number>([...ZOOM_PRESETS, minPercent, maxPercent]);\r\n return [...values]\r\n .filter((value) => value >= minPercent && value <= maxPercent)\r\n .sort((a, b) => a - b);\r\n}\r\n\r\nfunction sanitizeDocumentName(raw: string): string {\r\n return raw.replace(/[/\\\\?%*:|\"<>]/g, \"\").replace(/\\s+/g, \" \").trim();\r\n}\r\n\r\nfunction DocumentNameField({\r\n name,\r\n onNameChange,\r\n}: {\r\n name: string;\r\n onNameChange: (name: string) => void;\r\n}) {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const cancelRef = useRef(false);\r\n const [editing, setEditing] = useState(false);\r\n const [draft, setDraft] = useState(name);\r\n\r\n useEffect(() => {\r\n if (!editing) {\r\n setDraft(name);\r\n }\r\n }, [editing, name]);\r\n\r\n useLayoutEffect(() => {\r\n if (!editing) {\r\n return;\r\n }\r\n inputRef.current?.focus();\r\n inputRef.current?.select();\r\n }, [editing]);\r\n\r\n const beginEdit = () => {\r\n cancelRef.current = false;\r\n setDraft(name);\r\n setEditing(true);\r\n };\r\n\r\n const commit = (raw: string) => {\r\n setEditing(false);\r\n const next = sanitizeDocumentName(raw);\r\n if (!next || next === name) {\r\n setDraft(name);\r\n return;\r\n }\r\n onNameChange(next);\r\n };\r\n\r\n const cancel = () => {\r\n cancelRef.current = true;\r\n setDraft(name);\r\n setEditing(false);\r\n };\r\n\r\n if (editing) {\r\n return (\r\n <div className=\"rpe-toolbar-brand rpe-toolbar-brand-editing\">\r\n <FileTextIcon />\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n className=\"rpe-toolbar-brand-input\"\r\n value={draft}\r\n aria-label=\"Document name\"\r\n autoComplete=\"off\"\r\n spellCheck={false}\r\n onChange={(event) => setDraft(event.target.value)}\r\n onBlur={(event) => {\r\n if (cancelRef.current) {\r\n cancelRef.current = false;\r\n setDraft(name);\r\n return;\r\n }\r\n commit(event.currentTarget.value);\r\n }}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n commit(event.currentTarget.value);\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cancel();\r\n }\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-brand rpe-toolbar-brand-button\"\r\n title={`${name} — Click to rename`}\r\n aria-label={`Document name ${name}. Click to rename`}\r\n onClick={beginEdit}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\" || event.key === \"F2\") {\r\n event.preventDefault();\r\n beginEdit();\r\n }\r\n }}\r\n >\r\n <FileTextIcon />\r\n <span className=\"rpe-toolbar-brand-name\">{name}</span>\r\n </button>\r\n );\r\n}\r\n\r\nfunction toolClass(active: boolean) {\r\n return `rpe-tool-button${active ? \" rpe-tool-button-active\" : \"\"}`;\r\n}\r\n\r\nfunction ToolButtons({\r\n activeTool,\r\n disabled,\r\n setTool,\r\n}: {\r\n activeTool: ToolbarApi[\"activeTool\"];\r\n disabled: boolean;\r\n setTool: ToolbarApi[\"setTool\"];\r\n}) {\r\n return (\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"select\")}\r\n disabled={disabled}\r\n aria-label=\"Select\"\r\n title=\"Select\"\r\n onClick={() => setTool(\"select\")}\r\n >\r\n <MousePointer2Icon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"text\")}\r\n disabled={disabled}\r\n aria-label=\"Text\"\r\n title=\"Text\"\r\n onClick={() => setTool(activeTool === \"text\" ? \"select\" : \"text\")}\r\n >\r\n <TypeIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"draw\")}\r\n disabled={disabled}\r\n aria-label=\"Draw\"\r\n title=\"Draw\"\r\n onClick={() => setTool(activeTool === \"draw\" ? \"select\" : \"draw\")}\r\n >\r\n <PencilIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"highlight\")}\r\n disabled={disabled}\r\n aria-label=\"Highlight\"\r\n title=\"Highlight\"\r\n onClick={() => setTool(activeTool === \"highlight\" ? \"select\" : \"highlight\")}\r\n >\r\n <HighlighterIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"signature\")}\r\n disabled={disabled}\r\n aria-label=\"Signature\"\r\n title=\"Signature\"\r\n onClick={() => setTool(activeTool === \"signature\" ? \"select\" : \"signature\")}\r\n >\r\n <PenToolIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className={toolClass(activeTool === \"image\")}\r\n disabled={disabled}\r\n aria-label=\"Image\"\r\n title=\"Image\"\r\n onClick={() => setTool(activeTool === \"image\" ? \"select\" : \"image\")}\r\n >\r\n <ImageIcon />\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport type ToolbarProps = ToolbarApi & {\r\n compact?: boolean;\r\n showPagesButton?: boolean;\r\n pagesOpen?: boolean;\r\n onTogglePages?: () => void;\r\n};\r\n\r\nexport function Toolbar({\r\n page,\r\n numPages,\r\n scale,\r\n minScale,\r\n maxScale,\r\n disabled,\r\n activeTool,\r\n search,\r\n setPage,\r\n setScale,\r\n setTool,\r\n exportPdf,\r\n exporting,\r\n exportError,\r\n name,\r\n setName,\r\n canUndo,\r\n canRedo,\r\n undoLabel,\r\n redoLabel,\r\n undo,\r\n redo,\r\n shortcuts,\r\n zoomIn,\r\n zoomOut,\r\n prevPage,\r\n nextPage,\r\n compact = false,\r\n showPagesButton = false,\r\n pagesOpen = false,\r\n onTogglePages,\r\n}: ToolbarProps) {\r\n const findInputRef = useRef<HTMLInputElement>(null);\r\n const [searchOpen, setSearchOpen] = useState(false);\r\n\r\n const focusFind = () => {\r\n setSearchOpen(true);\r\n findInputRef.current?.focus();\r\n findInputRef.current?.select();\r\n };\r\n\r\n const closeFind = () => {\r\n search.clear();\r\n setSearchOpen(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (!compact) {\r\n setSearchOpen(false);\r\n }\r\n }, [compact]);\r\n\r\n const handleFindKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n if (event.shiftKey) {\r\n search.prev();\r\n } else {\r\n search.next();\r\n }\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n closeFind();\r\n event.currentTarget.blur();\r\n } else if (event.key === \"F3\") {\r\n event.preventDefault();\r\n if (event.shiftKey) {\r\n search.prev();\r\n } else {\r\n search.next();\r\n }\r\n }\r\n };\r\n\r\n const findControls = (\r\n <>\r\n <input\r\n ref={findInputRef}\r\n type=\"text\"\r\n className=\"rpe-find-input\"\r\n placeholder=\"Find in document\"\r\n value={search.query}\r\n disabled={disabled}\r\n onFocus={() => {\r\n if (compact) {\r\n setSearchOpen(true);\r\n }\r\n }}\r\n onChange={(e) => search.setQuery(e.target.value)}\r\n onKeyDown={handleFindKeyDown}\r\n aria-label=\"Find in document\"\r\n />\r\n {search.query ? (\r\n <>\r\n <span className=\"rpe-find-count\">\r\n {search.matchCount > 0\r\n ? `${search.currentIndex + 1} of ${search.matchCount}`\r\n : \"0\"}\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={search.matchCount === 0}\r\n onClick={search.prev}\r\n aria-label=\"Previous match\"\r\n title=\"Previous (Shift+Enter)\"\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={search.matchCount === 0}\r\n onClick={search.next}\r\n aria-label=\"Next match\"\r\n title=\"Next (Enter)\"\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n onClick={closeFind}\r\n aria-label=\"Clear search\"\r\n title=\"Clear (Escape)\"\r\n >\r\n <XIcon />\r\n </button>\r\n </>\r\n ) : compact ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n onClick={closeFind}\r\n aria-label=\"Close search\"\r\n title=\"Close search\"\r\n >\r\n <XIcon />\r\n </button>\r\n ) : null}\r\n </>\r\n );\r\n\r\n const toolbarClass = [\r\n \"rpe-toolbar\",\r\n compact ? \"rpe-toolbar-compact\" : \"\",\r\n compact && searchOpen ? \"rpe-toolbar-search-open\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n\r\n return (\r\n <>\r\n <div className={toolbarClass} role=\"toolbar\" aria-label=\"PDF toolbar\">\r\n {compact && showPagesButton ? (\r\n <button\r\n type=\"button\"\r\n className={`rpe-toolbar-button${pagesOpen ? \" rpe-tool-button-active\" : \"\"}`}\r\n aria-label={pagesOpen ? \"Close pages\" : \"Open pages\"}\r\n aria-expanded={pagesOpen}\r\n aria-controls=\"rpe-pages-drawer\"\r\n title=\"Pages\"\r\n onClick={onTogglePages}\r\n >\r\n <PanelLeftIcon />\r\n </button>\r\n ) : null}\r\n\r\n <div className=\"rpe-toolbar-main\">\r\n <DocumentNameField name={name} onNameChange={setName} />\r\n\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={!canUndo}\r\n aria-label={canUndo && undoLabel ? `Undo ${undoLabel}` : \"Undo\"}\r\n aria-keyshortcuts={shortcuts.undoKeys}\r\n title={\r\n canUndo && undoLabel\r\n ? `Undo ${undoLabel} (${shortcuts.undo})`\r\n : `Undo (${shortcuts.undo})`\r\n }\r\n onClick={undo}\r\n >\r\n <Undo2Icon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={!canRedo}\r\n aria-label={canRedo && redoLabel ? `Redo ${redoLabel}` : \"Redo\"}\r\n aria-keyshortcuts={shortcuts.redoKeys}\r\n title={\r\n canRedo && redoLabel\r\n ? `Redo ${redoLabel} (${shortcuts.redo})`\r\n : `Redo (${shortcuts.redo})`\r\n }\r\n onClick={redo}\r\n >\r\n <Redo2Icon />\r\n </button>\r\n </div>\r\n\r\n {compact ? null : (\r\n <>\r\n <div className=\"rpe-toolbar-divider\" />\r\n <ToolButtons activeTool={activeTool} disabled={disabled} setTool={setTool} />\r\n <div className=\"rpe-toolbar-divider\" />\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled}\r\n aria-label=\"Find in document\"\r\n title=\"Find in document\"\r\n onClick={focusFind}\r\n >\r\n <SearchIcon />\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale <= minScale}\r\n onClick={zoomOut}\r\n aria-label=\"Zoom out\"\r\n title=\"Zoom out\"\r\n >\r\n <ZoomOutIcon />\r\n </button>\r\n <ZoomField\r\n scale={scale}\r\n minScale={minScale}\r\n maxScale={maxScale}\r\n disabled={disabled}\r\n onScaleChange={setScale}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale >= maxScale}\r\n onClick={zoomIn}\r\n aria-label=\"Zoom in\"\r\n title=\"Zoom in\"\r\n >\r\n <ZoomInIcon />\r\n </button>\r\n </div>\r\n <div className=\"rpe-toolbar-divider\" />\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page <= 1}\r\n onClick={prevPage}\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n <PageField page={page} numPages={numPages} disabled={disabled} onPageChange={setPage} />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page >= numPages}\r\n onClick={nextPage}\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n </div>\r\n <div className=\"rpe-toolbar-divider\" />\r\n </>\r\n )}\r\n\r\n {compact ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button rpe-toolbar-search-trigger\"\r\n disabled={disabled}\r\n aria-label=\"Find in document\"\r\n title=\"Find in document\"\r\n onClick={focusFind}\r\n >\r\n <SearchIcon />\r\n </button>\r\n ) : null}\r\n\r\n <div className=\"rpe-find-group\" inert={compact && !searchOpen ? true : undefined}>\r\n {findControls}\r\n </div>\r\n </div>\r\n\r\n <div className=\"rpe-export\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-export-button\"\r\n disabled={disabled || exporting}\r\n aria-label=\"Export PDF\"\r\n aria-busy={exporting}\r\n title={exportError?.message ?? \"Export PDF\"}\r\n onClick={exportPdf}\r\n >\r\n <DownloadIcon />\r\n <span className=\"rpe-export-label\">{exporting ? \"Exporting…\" : \"Export PDF\"}</span>\r\n </button>\r\n {exportError ? (\r\n <span className=\"rpe-export-error\" role=\"alert\">\r\n {exportError.message}\r\n </span>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n {compact ? (\r\n <div className=\"rpe-tool-dock\" role=\"toolbar\" aria-label=\"Editor tools\">\r\n <ToolButtons activeTool={activeTool} disabled={disabled} setTool={setTool} />\r\n <div className=\"rpe-toolbar-divider\" />\r\n <div className=\"rpe-toolbar-group\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page <= 1}\r\n onClick={prevPage}\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeftIcon />\r\n </button>\r\n <PageField\r\n page={page}\r\n numPages={numPages}\r\n disabled={disabled}\r\n onPageChange={setPage}\r\n compact\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || page >= numPages}\r\n onClick={nextPage}\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRightIcon />\r\n </button>\r\n </div>\r\n <div className=\"rpe-toolbar-divider rpe-tool-dock-zoom-divider\" />\r\n <div className=\"rpe-toolbar-group rpe-tool-dock-zoom\">\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale <= minScale}\r\n onClick={zoomOut}\r\n aria-label=\"Zoom out\"\r\n title=\"Zoom out\"\r\n >\r\n <ZoomOutIcon />\r\n </button>\r\n <ZoomField\r\n scale={scale}\r\n minScale={minScale}\r\n maxScale={maxScale}\r\n disabled={disabled}\r\n onScaleChange={setScale}\r\n />\r\n <button\r\n type=\"button\"\r\n className=\"rpe-toolbar-button\"\r\n disabled={disabled || scale >= maxScale}\r\n onClick={zoomIn}\r\n aria-label=\"Zoom in\"\r\n title=\"Zoom in\"\r\n >\r\n <ZoomInIcon />\r\n </button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n\r\nfunction PageField({\r\n page,\r\n numPages,\r\n disabled,\r\n onPageChange,\r\n compact = false,\r\n}: {\r\n page: number;\r\n numPages: number;\r\n disabled: boolean;\r\n onPageChange: (page: number) => void;\r\n compact?: boolean;\r\n}) {\r\n const [draft, setDraft] = useState<string | null>(null);\r\n const displayValue = draft ?? (numPages === 0 ? \"\" : String(page));\r\n const parsedDraft = draft === null ? page : parsePageNumber(draft);\r\n const pageInvalid =\r\n draft !== null && (parsedDraft === null || parsedDraft < 1 || parsedDraft > Math.max(numPages, 1));\r\n const inputWidth = `${Math.max(String(numPages || 1).length, 2) + 1}ch`;\r\n\r\n const applyPage = (nextPage: number) => {\r\n if (numPages === 0) {\r\n setDraft(null);\r\n return;\r\n }\r\n const next = Math.min(numPages, Math.max(1, nextPage));\r\n onPageChange(next);\r\n setDraft(null);\r\n };\r\n\r\n const commitDraft = (raw: string) => {\r\n const parsed = parsePageNumber(raw);\r\n setDraft(null);\r\n if (parsed === null) {\r\n return;\r\n }\r\n applyPage(parsed);\r\n };\r\n\r\n return (\r\n <div className=\"rpe-page-nav\" title={pageInvalid ? `Enter a page between 1 and ${numPages}` : \"Go to page\"}>\r\n {compact ? null : <span className=\"rpe-page-nav-label\">Page</span>}\r\n <div className={`rpe-page-field${pageInvalid ? \" rpe-page-field-invalid\" : \"\"}`}>\r\n <input\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n className=\"rpe-page-input\"\r\n style={{ width: inputWidth }}\r\n value={displayValue}\r\n disabled={disabled || numPages === 0}\r\n aria-label={`Page number, 1 to ${numPages || 1}`}\r\n aria-invalid={pageInvalid}\r\n autoComplete=\"off\"\r\n spellCheck={false}\r\n onFocus={(event) => event.currentTarget.select()}\r\n onChange={(event) => setDraft(event.target.value)}\r\n onBlur={(event) => commitDraft(event.currentTarget.value)}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n commitDraft(event.currentTarget.value);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n setDraft(null);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n applyPage(page + 1);\r\n } else if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n applyPage(page - 1);\r\n }\r\n }}\r\n />\r\n </div>\r\n <span className=\"rpe-page-nav-label\">of {numPages || \"—\"}</span>\r\n </div>\r\n );\r\n}\r\n\r\nfunction ZoomField({\r\n scale,\r\n minScale,\r\n maxScale,\r\n disabled,\r\n onScaleChange,\r\n}: {\r\n scale: number;\r\n minScale: number;\r\n maxScale: number;\r\n disabled: boolean;\r\n onScaleChange: (scale: number) => void;\r\n}) {\r\n const fieldRef = useRef<HTMLDivElement>(null);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n const [draft, setDraft] = useState<string | null>(null);\r\n const [menuOpen, setMenuOpen] = useState(false);\r\n const [menuPos, setMenuPos] = useState<{ top: number; left: number } | null>(null);\r\n const zoomPercent = Math.round(scale * 100);\r\n const minZoomPercent = Math.round(minScale * 100);\r\n const maxZoomPercent = Math.round(maxScale * 100);\r\n const displayValue = draft ?? String(zoomPercent);\r\n const parsedDraft = draft === null ? zoomPercent : parseZoomPercent(draft);\r\n const zoomInvalid =\r\n draft !== null &&\r\n (parsedDraft === null || parsedDraft < minZoomPercent || parsedDraft > maxZoomPercent);\r\n const presets = zoomPresetPercents(minZoomPercent, maxZoomPercent);\r\n const rangeLabel = `${minZoomPercent}–${maxZoomPercent}%`;\r\n\r\n const applyPercent = (percent: number) => {\r\n const next = Math.min(maxZoomPercent, Math.max(minZoomPercent, Math.round(percent)));\r\n onScaleChange(Number((next / 100).toFixed(2)));\r\n setDraft(null);\r\n setMenuOpen(false);\r\n };\r\n\r\n const commitDraft = (raw: string) => {\r\n const parsed = parseZoomPercent(raw);\r\n setDraft(null);\r\n if (parsed === null) {\r\n return;\r\n }\r\n applyPercent(parsed);\r\n };\r\n\r\n useLayoutEffect(() => {\r\n if (!menuOpen) {\r\n setMenuPos(null);\r\n return;\r\n }\r\n\r\n const field = fieldRef.current;\r\n const menu = menuRef.current;\r\n if (!field || !menu) {\r\n return;\r\n }\r\n\r\n const fieldRect = field.getBoundingClientRect();\r\n const { width, height } = menu.getBoundingClientRect();\r\n let top = fieldRect.bottom + 6;\r\n if (top + height > window.innerHeight - 8) {\r\n top = Math.max(8, fieldRect.top - height - 6);\r\n }\r\n\r\n let left = fieldRect.left;\r\n left = Math.max(8, Math.min(left, window.innerWidth - width - 8));\r\n setMenuPos({ top, left });\r\n }, [menuOpen, presets.length]);\r\n\r\n useEffect(() => {\r\n if (!menuOpen) {\r\n return;\r\n }\r\n\r\n const onPointerDown = (event: PointerEvent) => {\r\n const target = event.target as Node;\r\n if (fieldRef.current?.contains(target) || menuRef.current?.contains(target)) {\r\n return;\r\n }\r\n setMenuOpen(false);\r\n };\r\n\r\n const onViewportChange = () => setMenuOpen(false);\r\n\r\n document.addEventListener(\"pointerdown\", onPointerDown);\r\n window.addEventListener(\"resize\", onViewportChange);\r\n window.addEventListener(\"scroll\", onViewportChange, true);\r\n return () => {\r\n document.removeEventListener(\"pointerdown\", onPointerDown);\r\n window.removeEventListener(\"resize\", onViewportChange);\r\n window.removeEventListener(\"scroll\", onViewportChange, true);\r\n };\r\n }, [menuOpen]);\r\n\r\n return (\r\n <div\r\n ref={fieldRef}\r\n className={`rpe-zoom-field${zoomInvalid ? \" rpe-zoom-field-invalid\" : \"\"}${menuOpen ? \" rpe-zoom-field-open\" : \"\"}`}\r\n title={zoomInvalid ? `Enter a value between ${rangeLabel}` : `Zoom ${rangeLabel}`}\r\n >\r\n <input\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n className=\"rpe-zoom-input\"\r\n style={{ width: `${Math.max(String(maxZoomPercent).length, 3) + 1}ch` }}\r\n value={displayValue}\r\n disabled={disabled}\r\n aria-label={`Zoom percent, ${minZoomPercent} to ${maxZoomPercent}`}\r\n aria-invalid={zoomInvalid}\r\n autoComplete=\"off\"\r\n spellCheck={false}\r\n onFocus={(event) => {\r\n setDraft(String(zoomPercent));\r\n event.currentTarget.select();\r\n }}\r\n onChange={(event) => {\r\n setDraft(event.target.value);\r\n setMenuOpen(false);\r\n }}\r\n onBlur={(event) => commitDraft(event.currentTarget.value)}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n commitDraft(event.currentTarget.value);\r\n event.currentTarget.blur();\r\n } else if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n if (menuOpen) {\r\n setMenuOpen(false);\r\n return;\r\n }\r\n setDraft(null);\r\n } else if (event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n setMenuOpen(true);\r\n }\r\n }}\r\n />\r\n <span className=\"rpe-zoom-suffix\" aria-hidden=\"true\">\r\n %\r\n </span>\r\n <button\r\n type=\"button\"\r\n className={`rpe-zoom-chevron${menuOpen ? \" rpe-zoom-chevron-open\" : \"\"}`}\r\n disabled={disabled}\r\n aria-label=\"Zoom presets\"\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={menuOpen}\r\n onMouseDown={(event) => event.preventDefault()}\r\n onClick={() => setMenuOpen((open) => !open)}\r\n >\r\n <ChevronDownIcon size={14} />\r\n </button>\r\n {menuOpen ? (\r\n <div\r\n ref={menuRef}\r\n className=\"rpe-zoom-menu\"\r\n role=\"listbox\"\r\n aria-label=\"Zoom presets\"\r\n style={{\r\n top: menuPos?.top ?? 0,\r\n left: menuPos?.left ?? 0,\r\n visibility: menuPos ? \"visible\" : \"hidden\",\r\n }}\r\n >\r\n {presets.map((percent) => {\r\n const selected = percent === zoomPercent;\r\n return (\r\n <button\r\n key={percent}\r\n type=\"button\"\r\n role=\"option\"\r\n aria-selected={selected}\r\n className={`rpe-zoom-option${selected ? \" rpe-zoom-option-active\" : \"\"}`}\r\n onMouseDown={(event) => event.preventDefault()}\r\n onClick={() => applyPercent(percent)}\r\n >\r\n <span>{percent}%</span>\r\n {selected ? <CheckIcon size={14} /> : null}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n","import { useLayoutEffect, useState, type RefObject } from \"react\";\r\n\r\nexport const COMPACT_BREAKPOINT = 900;\r\n\r\nexport function useCompactLayout(rootRef: RefObject<HTMLElement | null>) {\r\n const [compact, setCompact] = useState(() =>\r\n typeof window !== \"undefined\" ? window.innerWidth < COMPACT_BREAKPOINT : false,\r\n );\r\n\r\n useLayoutEffect(() => {\r\n const root = rootRef.current;\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const update = () => {\r\n setCompact(root.getBoundingClientRect().width < COMPACT_BREAKPOINT);\r\n };\r\n\r\n update();\r\n\r\n const observer = new ResizeObserver(update);\r\n observer.observe(root);\r\n return () => observer.disconnect();\r\n }, [rootRef]);\r\n\r\n return compact;\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { DrawStroke } from \"../types\";\r\n\r\nexport const DEFAULT_DRAW_COLOR = \"#111827\";\r\nexport const DEFAULT_DRAW_WIDTH = 2.5;\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `draw-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useDrawStrokes() {\r\n const [items, setItems] = useState<DrawStroke[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n const [color, setColorState] = useState(DEFAULT_DRAW_COLOR);\r\n const [width, setWidthState] = useState(DEFAULT_DRAW_WIDTH);\r\n\r\n const add = useCallback((stroke: Omit<DrawStroke, \"id\">) => {\r\n const item: DrawStroke = { ...stroke, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<DrawStroke>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const setColor = useCallback((next: string) => {\r\n setColorState(next);\r\n setSelectedId((currentId) => {\r\n if (currentId) {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === currentId ? { ...item, color: next } : item)),\r\n );\r\n }\r\n return currentId;\r\n });\r\n }, []);\r\n\r\n const setWidth = useCallback((next: number) => {\r\n setWidthState(next);\r\n setSelectedId((currentId) => {\r\n if (currentId) {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === currentId ? { ...item, width: next } : item)),\r\n );\r\n }\r\n return currentId;\r\n });\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: DrawStroke[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: DrawStroke[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n setColorState(DEFAULT_DRAW_COLOR);\r\n setWidthState(DEFAULT_DRAW_WIDTH);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n color,\r\n width,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n setColor,\r\n setWidth,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { useCallback, useRef, useState } from \"react\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\n\r\nexport const HISTORY_LIMIT = 100;\r\nconst COALESCE_MS = 500;\r\n\r\nexport type HistorySelection = {\r\n kind: \"text\" | \"draw\" | \"highlight\" | \"signature\" | \"image\";\r\n id: string;\r\n};\r\n\r\nexport type DocumentSnapshot = {\r\n texts: TextAnnotation[];\r\n drawings: DrawStroke[];\r\n highlights: HighlightAnnotation[];\r\n signatures: SignatureAnnotation[];\r\n images: ImageAnnotation[];\r\n documentName: string;\r\n workingBytes: Uint8Array | null;\r\n};\r\n\r\nexport type HistoryPush = {\r\n label: string;\r\n coalesceKey?: string;\r\n before: DocumentSnapshot;\r\n after: DocumentSnapshot;\r\n selection?: HistorySelection | null;\r\n page?: number;\r\n};\r\n\r\nexport type HistoryApply = {\r\n snapshot: DocumentSnapshot;\r\n selection?: HistorySelection | null;\r\n page?: number;\r\n};\r\n\r\ntype HistoryEntry = HistoryPush & {\r\n at: number;\r\n};\r\n\r\nexport function remapSnapshotItems<T extends { pageNumber: number }>(\r\n items: T[],\r\n fn: (pageNumber: number) => number | null,\r\n): T[] {\r\n const next: T[] = [];\r\n\r\n for (const item of items) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n next.push(pageNumber === item.pageNumber ? item : { ...item, pageNumber });\r\n }\r\n\r\n return next;\r\n}\r\n\r\nexport function remapSnapshot(\r\n snapshot: DocumentSnapshot,\r\n fn: (pageNumber: number) => number | null,\r\n): DocumentSnapshot {\r\n return {\r\n ...snapshot,\r\n texts: remapSnapshotItems(snapshot.texts, fn),\r\n drawings: remapSnapshotItems(snapshot.drawings, fn),\r\n highlights: remapSnapshotItems(snapshot.highlights, fn),\r\n signatures: remapSnapshotItems(snapshot.signatures, fn),\r\n images: remapSnapshotItems(snapshot.images, fn),\r\n };\r\n}\r\n\r\nexport function useEditorHistory(limit = HISTORY_LIMIT) {\r\n const pastRef = useRef<HistoryEntry[]>([]);\r\n const futureRef = useRef<HistoryEntry[]>([]);\r\n const applyingRef = useRef(false);\r\n const [revision, setRevision] = useState(0);\r\n\r\n const publish = useCallback(() => {\r\n setRevision((value) => value + 1);\r\n }, []);\r\n\r\n const push = useCallback(\r\n (entry: HistoryPush) => {\r\n if (applyingRef.current) {\r\n return;\r\n }\r\n\r\n const now = Date.now();\r\n const past = pastRef.current;\r\n const last = past[past.length - 1];\r\n\r\n if (\r\n last &&\r\n entry.coalesceKey &&\r\n last.coalesceKey === entry.coalesceKey &&\r\n now - last.at < COALESCE_MS\r\n ) {\r\n last.after = entry.after;\r\n last.at = now;\r\n if (entry.selection !== undefined) {\r\n last.selection = entry.selection;\r\n }\r\n if (entry.page !== undefined) {\r\n last.page = entry.page;\r\n }\r\n futureRef.current = [];\r\n publish();\r\n return;\r\n }\r\n\r\n past.push({ ...entry, at: now });\r\n if (past.length > limit) {\r\n past.splice(0, past.length - limit);\r\n }\r\n futureRef.current = [];\r\n publish();\r\n },\r\n [limit, publish],\r\n );\r\n\r\n const undo = useCallback((): HistoryApply | null => {\r\n const entry = pastRef.current.pop();\r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n futureRef.current.push(entry);\r\n publish();\r\n return {\r\n snapshot: entry.before,\r\n selection: entry.selection,\r\n page: entry.page,\r\n };\r\n }, [publish]);\r\n\r\n const redo = useCallback((): HistoryApply | null => {\r\n const entry = futureRef.current.pop();\r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n pastRef.current.push(entry);\r\n publish();\r\n return {\r\n snapshot: entry.after,\r\n selection: entry.selection,\r\n page: entry.page,\r\n };\r\n }, [publish]);\r\n\r\n const reset = useCallback(() => {\r\n pastRef.current = [];\r\n futureRef.current = [];\r\n applyingRef.current = false;\r\n publish();\r\n }, [publish]);\r\n\r\n const beginApply = useCallback(() => {\r\n applyingRef.current = true;\r\n }, []);\r\n\r\n const endApply = useCallback(() => {\r\n applyingRef.current = false;\r\n }, []);\r\n\r\n const last = pastRef.current[pastRef.current.length - 1];\r\n const next = futureRef.current[futureRef.current.length - 1];\r\n\r\n return {\r\n push,\r\n undo,\r\n redo,\r\n reset,\r\n beginApply,\r\n endApply,\r\n canUndo: pastRef.current.length > 0,\r\n canRedo: futureRef.current.length > 0,\r\n undoLabel: last?.label,\r\n redoLabel: next?.label,\r\n revision,\r\n };\r\n}\r\n","import type { ImageAnnotation, TextAnnotation } from \"../types\";\r\nimport {\r\n TEXT_LINE_HEIGHT,\r\n TEXT_PADDING_X,\r\n TEXT_PADDING_Y,\r\n textBoxFontCss,\r\n wrapMeasuredLines,\r\n} from \"./textLayout\";\r\n\r\nconst OUTPUT_SCALE = 2;\r\n\r\nfunction escapeXml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\");\r\n}\r\n\r\nfunction textToXhtml(text: string): string {\r\n return text.split(\"\\n\").map((line) => escapeXml(line)).join(\"<br />\");\r\n}\r\n\r\nfunction loadImage(src: string): Promise<HTMLImageElement> {\r\n return new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => resolve(image);\r\n image.onerror = () => reject(new Error(\"Failed to rasterize text\"));\r\n image.src = src;\r\n });\r\n}\r\n\r\nfunction canvasToPng(canvas: HTMLCanvasElement): string {\r\n return canvas.toDataURL(\"image/png\");\r\n}\r\n\r\nfunction canvasHasInk(canvas: HTMLCanvasElement): boolean {\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return false;\r\n }\r\n\r\n const pixels = context.getImageData(0, 0, canvas.width, canvas.height).data;\r\n for (let index = 3; index < pixels.length; index += 4) {\r\n if (pixels[index] > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction drawWrappedText(\r\n context: CanvasRenderingContext2D,\r\n annotation: TextAnnotation,\r\n width: number,\r\n height: number,\r\n) {\r\n context.font = textBoxFontCss(annotation);\r\n context.fillStyle = annotation.color;\r\n context.textBaseline = \"alphabetic\";\r\n\r\n const maxTextWidth = Math.max(0, width - TEXT_PADDING_X * 2);\r\n const lines = wrapMeasuredLines(\r\n annotation.text,\r\n (value) => context.measureText(value).width,\r\n annotation.width !== undefined ? maxTextWidth : undefined,\r\n );\r\n const lineBox = annotation.fontSize * TEXT_LINE_HEIGHT;\r\n const sample = context.measureText(lines.find(Boolean) || \"M\");\r\n const ascent = sample.fontBoundingBoxAscent ?? sample.actualBoundingBoxAscent ?? annotation.fontSize * 0.8;\r\n const descent = sample.fontBoundingBoxDescent ?? sample.actualBoundingBoxDescent ?? annotation.fontSize * 0.2;\r\n const halfLeading = (lineBox - (ascent + descent)) / 2;\r\n\r\n context.beginPath();\r\n context.rect(0, 0, width, height);\r\n context.clip();\r\n\r\n lines.forEach((line, index) => {\r\n if (!line) {\r\n return;\r\n }\r\n\r\n const lineWidth = context.measureText(line).width;\r\n let x = TEXT_PADDING_X;\r\n if (annotation.textAlign === \"center\") {\r\n x = (width - lineWidth) / 2;\r\n } else if (annotation.textAlign === \"right\") {\r\n x = width - TEXT_PADDING_X - lineWidth;\r\n }\r\n\r\n const y = TEXT_PADDING_Y + halfLeading + ascent + index * lineBox;\r\n if (y - ascent > height) {\r\n return;\r\n }\r\n\r\n context.fillText(line, x, y);\r\n });\r\n}\r\n\r\nasync function rasterizeWithDom(\r\n annotation: TextAnnotation,\r\n width: number,\r\n height: number,\r\n): Promise<string> {\r\n const style = [\r\n `box-sizing:border-box`,\r\n `width:${width}px`,\r\n `height:${height}px`,\r\n `padding:${TEXT_PADDING_Y}px ${TEXT_PADDING_X}px`,\r\n `margin:0`,\r\n `font:${textBoxFontCss(annotation)}`,\r\n `line-height:${TEXT_LINE_HEIGHT}`,\r\n `color:${annotation.color}`,\r\n `text-align:${annotation.textAlign}`,\r\n `white-space:pre-wrap`,\r\n `overflow-wrap:break-word`,\r\n `word-break:break-word`,\r\n `overflow:hidden`,\r\n `background:transparent`,\r\n ].join(\";\");\r\n\r\n const svg =\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">` +\r\n `<foreignObject width=\"100%\" height=\"100%\">` +\r\n `<div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"${style}\">${textToXhtml(annotation.text)}</div>` +\r\n `</foreignObject></svg>`;\r\n\r\n const blob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\r\n const url = URL.createObjectURL(blob);\r\n\r\n try {\r\n const image = await loadImage(url);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(1, Math.round(width * OUTPUT_SCALE));\r\n canvas.height = Math.max(1, Math.round(height * OUTPUT_SCALE));\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n throw new Error(\"Failed to rasterize text\");\r\n }\r\n context.scale(OUTPUT_SCALE, OUTPUT_SCALE);\r\n context.drawImage(image, 0, 0, width, height);\r\n if (!canvasHasInk(canvas)) {\r\n throw new Error(\"Blank text raster\");\r\n }\r\n return canvasToPng(canvas);\r\n } finally {\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n\r\nfunction rasterizeWithCanvas(\r\n annotation: TextAnnotation,\r\n width: number,\r\n height: number,\r\n): string {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(1, Math.round(width * OUTPUT_SCALE));\r\n canvas.height = Math.max(1, Math.round(height * OUTPUT_SCALE));\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n throw new Error(\"Failed to rasterize text\");\r\n }\r\n context.scale(OUTPUT_SCALE, OUTPUT_SCALE);\r\n drawWrappedText(context, annotation, width, height);\r\n return canvasToPng(canvas);\r\n}\r\n\r\nfunction measureBox(\r\n annotation: TextAnnotation,\r\n pageWidth: number,\r\n pageHeight: number,\r\n): { width: number; height: number } {\r\n const width =\r\n annotation.width !== undefined\r\n ? annotation.width * pageWidth\r\n : (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return pageWidth;\r\n }\r\n context.font = textBoxFontCss(annotation);\r\n const lines = wrapMeasuredLines(annotation.text, (value) => context.measureText(value).width);\r\n const longest = Math.max(0, ...lines.map((line) => (line ? context.measureText(line).width : 0)));\r\n return longest + TEXT_PADDING_X * 2;\r\n })();\r\n\r\n const height =\r\n annotation.height !== undefined\r\n ? annotation.height * pageHeight\r\n : (() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n const measure = context\r\n ? (value: string) => {\r\n context.font = textBoxFontCss(annotation);\r\n return context.measureText(value).width;\r\n }\r\n : () => 0;\r\n const lines = wrapMeasuredLines(\r\n annotation.text,\r\n measure,\r\n annotation.width !== undefined ? Math.max(0, width - TEXT_PADDING_X * 2) : undefined,\r\n );\r\n return TEXT_PADDING_Y * 2 + Math.max(lines.length, 1) * annotation.fontSize * TEXT_LINE_HEIGHT;\r\n })();\r\n\r\n return {\r\n width: Math.max(1, width),\r\n height: Math.max(1, height),\r\n };\r\n}\r\n\r\nexport async function rasterizeTextAnnotation(\r\n annotation: TextAnnotation,\r\n pageWidth: number,\r\n pageHeight: number,\r\n): Promise<ImageAnnotation | null> {\r\n if (!annotation.text) {\r\n return null;\r\n }\r\n\r\n const box = measureBox(annotation, pageWidth, pageHeight);\r\n\r\n if (typeof document !== \"undefined\" && document.fonts) {\r\n try {\r\n await document.fonts.load(textBoxFontCss(annotation));\r\n await document.fonts.ready;\r\n } catch {\r\n // Use fallback metrics if the browser font loader is unavailable.\r\n }\r\n }\r\n\r\n let src: string;\r\n try {\r\n src = await rasterizeWithDom(annotation, box.width, box.height);\r\n } catch {\r\n src = rasterizeWithCanvas(annotation, box.width, box.height);\r\n }\r\n\r\n return {\r\n id: `text-raster-${annotation.id}`,\r\n pageNumber: annotation.pageNumber,\r\n x: annotation.x,\r\n y: annotation.y,\r\n width: box.width / pageWidth,\r\n height: box.height / pageHeight,\r\n src,\r\n rotation: annotation.rotation,\r\n };\r\n}\r\n\r\nexport async function rasterizeTextAnnotations(\r\n annotations: TextAnnotation[],\r\n pageSizes: Array<{ width: number; height: number }>,\r\n): Promise<{ images: ImageAnnotation[]; leftover: TextAnnotation[] }> {\r\n const images: ImageAnnotation[] = [];\r\n const leftover: TextAnnotation[] = [];\r\n\r\n for (const annotation of annotations) {\r\n const size = pageSizes[annotation.pageNumber - 1];\r\n if (!size || size.width <= 0 || size.height <= 0) {\r\n leftover.push(annotation);\r\n continue;\r\n }\r\n\r\n try {\r\n const image = await rasterizeTextAnnotation(annotation, size.width, size.height);\r\n if (image) {\r\n images.push(image);\r\n }\r\n } catch {\r\n leftover.push(annotation);\r\n }\r\n }\r\n\r\n return { images, leftover };\r\n}\r\n\r\nexport async function getPdfPageSizes(\r\n pdf: { numPages: number; getPage: (pageNumber: number) => Promise<{ getViewport: (opts: { scale: number }) => { width: number; height: number } }> },\r\n): Promise<Array<{ width: number; height: number }>> {\r\n return Promise.all(\r\n Array.from({ length: pdf.numPages }, async (_, index) => {\r\n const page = await pdf.getPage(index + 1);\r\n const viewport = page.getViewport({ scale: 1 });\r\n return { width: viewport.width, height: viewport.height };\r\n }),\r\n );\r\n}\r\n","import type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\nimport type { ExportWorkerRequest, ExportWorkerResponse } from \"./exportPdf\";\r\n\r\nconst EXPORT_TIMEOUT_MS = 60_000;\r\n\r\nfunction createExportWorker(workerSrc?: string): Worker {\r\n if (workerSrc) {\r\n return new Worker(workerSrc, { type: \"module\" });\r\n }\r\n\r\n return new Worker(new URL(\"./exportPdf.worker.ts\", import.meta.url), {\r\n type: \"module\",\r\n });\r\n}\r\n\r\nasync function exportOnMainThread(\r\n pdfBytes: Uint8Array,\r\n annotations: TextAnnotation[],\r\n drawings: DrawStroke[],\r\n highlights: HighlightAnnotation[],\r\n signatures: SignatureAnnotation[],\r\n images: ImageAnnotation[],\r\n): Promise<Uint8Array> {\r\n const { exportPdfBytes } = await import(\"./exportPdf\");\r\n return exportPdfBytes(pdfBytes, annotations, drawings, highlights, signatures, images);\r\n}\r\n\r\nexport async function runExportPdf(\r\n pdfBytes: Uint8Array,\r\n annotations: TextAnnotation[],\r\n drawings: DrawStroke[] = [],\r\n highlights: HighlightAnnotation[] = [],\r\n signatures: SignatureAnnotation[] = [],\r\n images: ImageAnnotation[] = [],\r\n workerSrc?: string,\r\n): Promise<Uint8Array> {\r\n if (\r\n annotations.length === 0 &&\r\n drawings.length === 0 &&\r\n highlights.length === 0 &&\r\n signatures.length === 0 &&\r\n images.length === 0\r\n ) {\r\n return pdfBytes.slice();\r\n }\r\n\r\n let worker: Worker;\r\n try {\r\n worker = createExportWorker(workerSrc);\r\n } catch {\r\n return exportOnMainThread(pdfBytes, annotations, drawings, highlights, signatures, images);\r\n }\r\n\r\n return new Promise<Uint8Array>((resolve, reject) => {\r\n let settled = false;\r\n\r\n const finish = (callback: () => void) => {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n window.clearTimeout(timeoutId);\r\n worker.terminate();\r\n callback();\r\n };\r\n\r\n const timeoutId = window.setTimeout(() => {\r\n finish(() => reject(new Error(\"PDF export timed out\")));\r\n }, EXPORT_TIMEOUT_MS);\r\n\r\n worker.onmessage = (event: MessageEvent<ExportWorkerResponse>) => {\r\n const data = event.data;\r\n if (data?.type === \"success\") {\r\n finish(() => resolve(new Uint8Array(data.pdfBytes)));\r\n return;\r\n }\r\n\r\n finish(() =>\r\n reject(new Error(data?.message ?? \"Failed to export PDF\")),\r\n );\r\n };\r\n\r\n worker.onerror = () => {\r\n finish(() => {\r\n void exportOnMainThread(pdfBytes, annotations, drawings, highlights, signatures, images).then(resolve, reject);\r\n });\r\n };\r\n\r\n const transferable = pdfBytes.slice();\r\n const request: ExportWorkerRequest = {\r\n type: \"export\",\r\n pdfBytes: transferable.buffer,\r\n annotations,\r\n drawings,\r\n highlights,\r\n signatures,\r\n images,\r\n };\r\n worker.postMessage(request, [transferable.buffer]);\r\n });\r\n}\r\n","import { useCallback, useRef, useState } from \"react\";\r\nimport type { PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { getPdfPageSizes, rasterizeTextAnnotations } from \"../lib/rasterizeTextAnnotation\";\r\nimport { runExportPdf } from \"../lib/runExportPdf\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n} from \"../types\";\r\n\r\ntype UseExportPdfOptions = {\r\n pdf: PDFDocumentProxy | null;\r\n annotations: TextAnnotation[];\r\n drawings?: DrawStroke[];\r\n highlights?: HighlightAnnotation[];\r\n signatures?: SignatureAnnotation[];\r\n images?: ImageAnnotation[];\r\n fileName: string;\r\n workerSrc?: string;\r\n onExport?: (blob: Blob) => void | Promise<void>;\r\n onExportError?: (error: Error) => void;\r\n};\r\n\r\nfunction downloadBlob(blob: Blob, fileName: string) {\r\n const url = URL.createObjectURL(blob);\r\n const anchor = document.createElement(\"a\");\r\n anchor.href = url;\r\n anchor.download = fileName;\r\n anchor.rel = \"noopener\";\r\n document.body.append(anchor);\r\n anchor.click();\r\n anchor.remove();\r\n window.setTimeout(() => URL.revokeObjectURL(url), 1_000);\r\n}\r\n\r\nexport function useExportPdf({\r\n pdf,\r\n annotations,\r\n drawings = [],\r\n highlights = [],\r\n signatures = [],\r\n images = [],\r\n fileName,\r\n workerSrc,\r\n onExport,\r\n onExportError,\r\n}: UseExportPdfOptions) {\r\n const [exporting, setExporting] = useState(false);\r\n const [exportError, setExportError] = useState<Error | null>(null);\r\n const exportingRef = useRef(false);\r\n\r\n const exportPdf = useCallback(async () => {\r\n if (!pdf || exportingRef.current) {\r\n return;\r\n }\r\n\r\n exportingRef.current = true;\r\n setExporting(true);\r\n setExportError(null);\r\n\r\n try {\r\n const data = await pdf.getData();\r\n const pageSizes = await getPdfPageSizes(pdf);\r\n const rasterized = await rasterizeTextAnnotations(annotations, pageSizes);\r\n const bytes = await runExportPdf(\r\n data,\r\n rasterized.leftover,\r\n drawings,\r\n highlights,\r\n signatures,\r\n [...images, ...rasterized.images],\r\n workerSrc,\r\n );\r\n const copy = new Uint8Array(bytes.byteLength);\r\n copy.set(bytes);\r\n const blob = new Blob([copy], { type: \"application/pdf\" });\r\n\r\n if (onExport) {\r\n await onExport(blob);\r\n } else {\r\n downloadBlob(blob, fileName);\r\n }\r\n } catch (caught) {\r\n const error =\r\n caught instanceof Error ? caught : new Error(\"Failed to export PDF\");\r\n setExportError(error);\r\n onExportError?.(error);\r\n } finally {\r\n exportingRef.current = false;\r\n setExporting(false);\r\n }\r\n }, [annotations, drawings, fileName, highlights, images, onExport, onExportError, pdf, signatures, workerSrc]);\r\n\r\n return { exportPdf, exporting, exportError };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { HighlightAnnotation } from \"../types\";\r\n\r\nexport const DEFAULT_HIGHLIGHT_COLOR = \"#facc15\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `highlight-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useHighlights() {\r\n const [items, setItems] = useState<HighlightAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n const [color, setColorState] = useState(DEFAULT_HIGHLIGHT_COLOR);\r\n\r\n const add = useCallback((highlight: Omit<HighlightAnnotation, \"id\">) => {\r\n const item: HighlightAnnotation = { ...highlight, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<HighlightAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const setColor = useCallback((next: string) => {\r\n setColorState(next);\r\n setSelectedId((currentId) => {\r\n if (currentId) {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === currentId ? { ...item, color: next } : item)),\r\n );\r\n }\r\n return currentId;\r\n });\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: HighlightAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: HighlightAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n setColorState(DEFAULT_HIGHLIGHT_COLOR);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n color,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n setColor,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { ImageAnnotation } from \"../types\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `image-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useImages() {\r\n const [items, setItems] = useState<ImageAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n\r\n const add = useCallback((annotation: Omit<ImageAnnotation, \"id\">) => {\r\n const item: ImageAnnotation = { ...annotation, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n setSelectedId(item.id);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<ImageAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: ImageAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: ImageAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import type { PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { getDocument } from \"pdfjs-dist/legacy/build/pdf.mjs\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { configurePdfWorker } from \"../configureWorker\";\r\nimport type { PdfSource } from \"../types\";\r\n\r\nexport type PdfLoadPhase = \"downloading\" | \"loading\";\r\n\r\nfunction isNetworkSource(file: PdfSource): boolean {\r\n if (file instanceof URL) {\r\n return file.protocol === \"http:\" || file.protocol === \"https:\";\r\n }\r\n\r\n if (typeof file !== \"string\") {\r\n return false;\r\n }\r\n\r\n return !file.startsWith(\"data:\") && !file.startsWith(\"blob:\");\r\n}\r\n\r\nasync function downloadPdf(\r\n url: string,\r\n signal: AbortSignal,\r\n onProgress: (percent: number | null) => void,\r\n): Promise<Uint8Array> {\r\n const response = await fetch(url, { signal });\r\n if (!response.ok) {\r\n throw new Error(`Failed to download PDF (${response.status})`);\r\n }\r\n\r\n const body = response.body;\r\n if (!body) {\r\n return new Uint8Array(await response.arrayBuffer());\r\n }\r\n\r\n const encodedLength = Number(response.headers.get(\"content-length\"));\r\n const compressed = Boolean(response.headers.get(\"content-encoding\"));\r\n const total =\r\n !compressed && Number.isFinite(encodedLength) && encodedLength > 0 ? encodedLength : 0;\r\n const reader = body.getReader();\r\n const chunks: Uint8Array[] = [];\r\n let received = 0;\r\n let lastPercent: number | null | undefined;\r\n\r\n try {\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) {\r\n break;\r\n }\r\n if (!value) {\r\n continue;\r\n }\r\n\r\n chunks.push(value);\r\n received += value.byteLength;\r\n\r\n const percent =\r\n total > 0 && received <= total\r\n ? Math.min(100, Math.round((received / total) * 100))\r\n : null;\r\n if (percent !== lastPercent) {\r\n lastPercent = percent;\r\n onProgress(percent);\r\n }\r\n }\r\n } finally {\r\n try {\r\n reader.releaseLock();\r\n } catch {\r\n // The stream is already cancelled when the load is aborted.\r\n }\r\n }\r\n\r\n const data = new Uint8Array(received);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n data.set(chunk, offset);\r\n offset += chunk.byteLength;\r\n }\r\n return data;\r\n}\r\n\r\nasync function resolveSource(\r\n file: PdfSource,\r\n): Promise<{ url: string } | { data: ArrayBuffer | Uint8Array }> {\r\n if (typeof file === \"string\" || file instanceof URL) {\r\n return { url: String(file) };\r\n }\r\n\r\n if (file instanceof Blob) {\r\n return { data: new Uint8Array(await file.arrayBuffer()) };\r\n }\r\n\r\n if (file instanceof ArrayBuffer) {\r\n return { data: new Uint8Array(file.slice(0)) };\r\n }\r\n\r\n return { data: file.slice() };\r\n}\r\n\r\nexport function usePdfDocument(file?: PdfSource | null, workerSrc?: string) {\r\n const [pdf, setPdf] = useState<PDFDocumentProxy | null>(null);\r\n const [numPages, setNumPages] = useState(0);\r\n const [loading, setLoading] = useState(false);\r\n const [loadPhase, setLoadPhase] = useState<PdfLoadPhase>(\"loading\");\r\n const [downloadProgress, setDownloadProgress] = useState<number | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const displayedPdfRef = useRef<PDFDocumentProxy | null>(null);\r\n\r\n useEffect(() => {\r\n if (!file) {\r\n const previous = displayedPdfRef.current;\r\n displayedPdfRef.current = null;\r\n setPdf(null);\r\n setNumPages(0);\r\n setError(null);\r\n setLoading(false);\r\n setLoadPhase(\"loading\");\r\n setDownloadProgress(null);\r\n void previous?.destroy();\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let committed = false;\r\n let loadingTask: ReturnType<typeof getDocument> | undefined;\r\n const network = isNetworkSource(file);\r\n const abortController = new AbortController();\r\n\r\n setLoading(true);\r\n setError(null);\r\n setLoadPhase(network ? \"downloading\" : \"loading\");\r\n setDownloadProgress(null);\r\n configurePdfWorker(workerSrc);\r\n\r\n void (async () => {\r\n try {\r\n const source = network\r\n ? {\r\n data: await downloadPdf(String(file), abortController.signal, (percent) => {\r\n if (!cancelled) {\r\n setDownloadProgress(percent);\r\n }\r\n }),\r\n }\r\n : await resolveSource(file);\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n if (network) {\r\n setLoadPhase(\"loading\");\r\n setDownloadProgress(null);\r\n }\r\n\r\n loadingTask = getDocument(source);\r\n const incoming = await loadingTask.promise;\r\n\r\n if (cancelled) {\r\n await incoming.destroy();\r\n return;\r\n }\r\n\r\n committed = true;\r\n const previous = displayedPdfRef.current;\r\n displayedPdfRef.current = incoming;\r\n setPdf(incoming);\r\n setNumPages(incoming.numPages);\r\n if (previous && previous !== incoming) {\r\n void previous.destroy();\r\n }\r\n } catch (caught) {\r\n if (!cancelled) {\r\n setError(\r\n caught instanceof Error ? caught : new Error(\"Failed to load PDF\"),\r\n );\r\n }\r\n } finally {\r\n if (!cancelled) {\r\n setLoading(false);\r\n }\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n abortController.abort();\r\n if (!committed) {\r\n void loadingTask?.destroy();\r\n }\r\n };\r\n }, [file, workerSrc]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n const current = displayedPdfRef.current;\r\n displayedPdfRef.current = null;\r\n void current?.destroy();\r\n };\r\n }, []);\r\n\r\n return { pdf, numPages, loading, loadPhase, downloadProgress, error };\r\n}\r\n","import type { TextContent, TextItem } from \"pdfjs-dist/types/src/display/api\";\r\n\r\nexport type TextRect = {\r\n left: number;\r\n top: number;\r\n width: number;\r\n height: number;\r\n};\r\n\r\nexport type TextMatch = {\r\n pageNumber: number;\r\n rects: TextRect[];\r\n text: string;\r\n};\r\n\r\ntype PageTextData = {\r\n pageNumber: number;\r\n text: string;\r\n items: Array<{ str: string; transform: number[]; width: number; height: number }>;\r\n pageWidth: number;\r\n pageHeight: number;\r\n};\r\n\r\nfunction isTextItem(item: unknown): item is TextItem {\r\n return (\r\n typeof item === \"object\" &&\r\n item !== null &&\r\n \"str\" in item &&\r\n typeof (item as TextItem).str === \"string\"\r\n );\r\n}\r\n\r\nexport function extractPageTextData(\r\n pageNumber: number,\r\n textContent: TextContent,\r\n pageWidth: number,\r\n pageHeight: number,\r\n): PageTextData {\r\n const items = textContent.items\r\n .filter(isTextItem)\r\n .map((item) => ({\r\n str: item.str,\r\n transform: item.transform,\r\n width: item.width,\r\n height: item.height,\r\n }));\r\n\r\n const text = items.map((item) => item.str).join(\"\");\r\n\r\n return { pageNumber, text, items, pageWidth, pageHeight };\r\n}\r\n\r\nexport function findTextMatches(\r\n pagesData: PageTextData[],\r\n query: string,\r\n): TextMatch[] {\r\n if (!query.trim()) {\r\n return [];\r\n }\r\n\r\n const matches: TextMatch[] = [];\r\n const normalizedQuery = query.toLowerCase();\r\n\r\n for (const pageData of pagesData) {\r\n const normalizedText = pageData.text.toLowerCase();\r\n let searchIndex = 0;\r\n\r\n while (true) {\r\n const matchIndex = normalizedText.indexOf(normalizedQuery, searchIndex);\r\n if (matchIndex === -1) {\r\n break;\r\n }\r\n\r\n const matchEnd = matchIndex + query.length;\r\n const rects = computeRectsForRange(\r\n pageData,\r\n matchIndex,\r\n matchEnd,\r\n );\r\n\r\n if (rects.length > 0) {\r\n matches.push({\r\n pageNumber: pageData.pageNumber,\r\n rects,\r\n text: pageData.text.substring(matchIndex, matchEnd),\r\n });\r\n }\r\n\r\n searchIndex = matchIndex + 1;\r\n }\r\n }\r\n\r\n return matches;\r\n}\r\n\r\nfunction computeRectsForRange(\r\n pageData: PageTextData,\r\n startChar: number,\r\n endChar: number,\r\n): TextRect[] {\r\n const rects: TextRect[] = [];\r\n let charPos = 0;\r\n\r\n for (const item of pageData.items) {\r\n const itemStart = charPos;\r\n const itemEnd = charPos + item.str.length;\r\n\r\n // Check if this item overlaps with the match range\r\n if (itemEnd > startChar && itemStart < endChar) {\r\n const overlapStart = Math.max(0, startChar - itemStart);\r\n const overlapEnd = Math.min(item.str.length, endChar - itemStart);\r\n const overlapLength = overlapEnd - overlapStart;\r\n\r\n // Transform is [a, b, c, d, e, f] where e,f are position (baseline)\r\n const [, , , , x, y] = item.transform;\r\n const itemWidth = item.width;\r\n const itemHeight = item.height;\r\n\r\n // Compute character position within the text item\r\n // Note: This assumes uniform character spacing, which is an approximation\r\n // For better accuracy, we'd need per-character metrics which aren't available\r\n const totalChars = item.str.length || 1; // Avoid division by zero\r\n const startFraction = overlapStart / totalChars;\r\n const widthFraction = overlapLength / totalChars;\r\n\r\n // PDF coordinates: origin at bottom-left, y is baseline\r\n // CSS coordinates: origin at top-left\r\n // The text box extends from (x, y) baseline upward by height\r\n const left = x / pageData.pageWidth + (itemWidth / pageData.pageWidth) * startFraction;\r\n const top = (pageData.pageHeight - y - itemHeight) / pageData.pageHeight;\r\n const width = (itemWidth / pageData.pageWidth) * widthFraction;\r\n const height = itemHeight / pageData.pageHeight;\r\n\r\n rects.push({ left, top, width, height });\r\n }\r\n\r\n charPos = itemEnd;\r\n }\r\n\r\n return rects;\r\n}\r\n","import type { PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport {\r\n extractPageTextData,\r\n findTextMatches,\r\n type TextMatch,\r\n} from \"../lib/findTextMatches\";\r\n\r\ntype PageTextData = {\r\n pageNumber: number;\r\n text: string;\r\n items: Array<{ str: string; transform: number[]; width: number; height: number }>;\r\n pageWidth: number;\r\n pageHeight: number;\r\n};\r\n\r\nexport function usePdfTextSearch(pdf: PDFDocumentProxy | null) {\r\n const [pagesData, setPagesData] = useState<PageTextData[]>([]);\r\n const [query, setQuery] = useState(\"\");\r\n const [matches, setMatches] = useState<TextMatch[]>([]);\r\n const [currentIndex, setCurrentIndex] = useState(-1);\r\n\r\n // Index all pages when PDF loads\r\n useEffect(() => {\r\n if (!pdf) {\r\n setPagesData([]);\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n\r\n void (async () => {\r\n const data: PageTextData[] = [];\r\n\r\n for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const page = await pdf.getPage(pageNum);\r\n const textContent = await page.getTextContent();\r\n const viewport = page.getViewport({ scale: 1 });\r\n\r\n const pageData = extractPageTextData(\r\n pageNum,\r\n textContent,\r\n viewport.width,\r\n viewport.height,\r\n );\r\n\r\n data.push(pageData);\r\n }\r\n\r\n if (!cancelled) {\r\n setPagesData(data);\r\n }\r\n })();\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [pdf]);\r\n\r\n // Update matches when query or data changes\r\n useEffect(() => {\r\n if (!query.trim() || pagesData.length === 0) {\r\n setMatches([]);\r\n setCurrentIndex(-1);\r\n return;\r\n }\r\n\r\n const newMatches = findTextMatches(pagesData, query);\r\n setMatches(newMatches);\r\n setCurrentIndex(newMatches.length > 0 ? 0 : -1);\r\n }, [query, pagesData]);\r\n\r\n const next = useCallback(() => {\r\n if (matches.length === 0) {\r\n return;\r\n }\r\n setCurrentIndex((prev) => (prev + 1) % matches.length);\r\n }, [matches.length]);\r\n\r\n const prev = useCallback(() => {\r\n if (matches.length === 0) {\r\n return;\r\n }\r\n setCurrentIndex((prev) => (prev - 1 + matches.length) % matches.length);\r\n }, [matches.length]);\r\n\r\n const clear = useCallback(() => {\r\n setQuery(\"\");\r\n setMatches([]);\r\n setCurrentIndex(-1);\r\n }, []);\r\n\r\n return {\r\n query,\r\n setQuery,\r\n matches,\r\n currentIndex,\r\n currentMatch: currentIndex >= 0 ? matches[currentIndex] : null,\r\n next,\r\n prev,\r\n clear,\r\n };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { SignatureAnnotation } from \"../types\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `signature-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useSignatures() {\r\n const [items, setItems] = useState<SignatureAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n\r\n const add = useCallback((annotation: Omit<SignatureAnnotation, \"id\">) => {\r\n const item: SignatureAnnotation = { ...annotation, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n setSelectedId(item.id);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<SignatureAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: SignatureAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: SignatureAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { useCallback, useState } from \"react\";\r\nimport type { TextAnnotation } from \"../types\";\r\n\r\nfunction createId() {\r\n if (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n\r\n return `text-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function useTextAnnotations() {\r\n const [items, setItems] = useState<TextAnnotation[]>([]);\r\n const [selectedId, setSelectedId] = useState<string | null>(null);\r\n const [editingId, setEditingId] = useState<string | null>(null);\r\n\r\n const add = useCallback((annotation: Omit<TextAnnotation, \"id\">) => {\r\n const item: TextAnnotation = { ...annotation, id: createId() };\r\n setItems((prev) => [...prev, item]);\r\n setSelectedId(item.id);\r\n setEditingId(item.id);\r\n return item;\r\n }, []);\r\n\r\n const update = useCallback((id: string, changes: Partial<TextAnnotation>) => {\r\n setItems((prev) =>\r\n prev.map((item) => (item.id === id ? { ...item, ...changes } : item)),\r\n );\r\n }, []);\r\n\r\n const remove = useCallback((id: string) => {\r\n setItems((prev) => prev.filter((item) => item.id !== id));\r\n setSelectedId((prev) => (prev === id ? null : prev));\r\n setEditingId((prev) => (prev === id ? null : prev));\r\n }, []);\r\n\r\n const select = useCallback((id: string | null) => {\r\n setSelectedId(id);\r\n setEditingId((prev) => (prev === id ? prev : null));\r\n }, []);\r\n\r\n const startEdit = useCallback((id: string) => {\r\n setSelectedId(id);\r\n setEditingId(id);\r\n }, []);\r\n\r\n const stopEdit = useCallback(() => {\r\n setEditingId(null);\r\n }, []);\r\n\r\n const remapPageNumbers = useCallback((fn: (pageNumber: number) => number | null) => {\r\n setItems((prev) => {\r\n const next: TextAnnotation[] = [];\r\n const kept = new Set<string>();\r\n\r\n for (const item of prev) {\r\n const pageNumber = fn(item.pageNumber);\r\n if (pageNumber == null) {\r\n continue;\r\n }\r\n const mapped = pageNumber === item.pageNumber ? item : { ...item, pageNumber };\r\n next.push(mapped);\r\n kept.add(mapped.id);\r\n }\r\n\r\n setSelectedId((current) => (current && !kept.has(current) ? null : current));\r\n setEditingId((current) => (current && !kept.has(current) ? null : current));\r\n return next;\r\n });\r\n }, []);\r\n\r\n const hydrate = useCallback((next: TextAnnotation[]) => {\r\n setItems(next);\r\n setSelectedId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n setEditingId((current) => (current && next.some((item) => item.id === current) ? current : null));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n setItems([]);\r\n setSelectedId(null);\r\n setEditingId(null);\r\n }, []);\r\n\r\n const selectedItem = selectedId\r\n ? (items.find((item) => item.id === selectedId) ?? null)\r\n : null;\r\n\r\n return {\r\n items,\r\n selectedId,\r\n selectedItem,\r\n editingId,\r\n add,\r\n update,\r\n remove,\r\n select,\r\n startEdit,\r\n stopEdit,\r\n remapPageNumbers,\r\n hydrate,\r\n reset,\r\n };\r\n}\r\n","import { PDFDocument } from \"pdf-lib\";\r\n\r\nexport async function deletePage(\r\n pdfBytes: Uint8Array,\r\n pageIndex: number,\r\n): Promise<Uint8Array> {\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const pageCount = pdf.getPageCount();\r\n\r\n if (pageCount <= 1) {\r\n throw new Error(\"A PDF must have at least one page\");\r\n }\r\n\r\n const index = Math.max(0, Math.min(pageIndex, pageCount - 1));\r\n pdf.removePage(index);\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","import type { ToolbarShortcuts } from \"../types\";\r\n\r\nexport function historyShortcuts(): ToolbarShortcuts {\r\n const isMac =\r\n typeof navigator !== \"undefined\" && /Mac|iPhone|iPad|iPod/.test(navigator.platform);\r\n return {\r\n undo: isMac ? \"⌘Z\" : \"Ctrl+Z\",\r\n redo: isMac ? \"⌘⇧Z\" : \"Ctrl+Y\",\r\n undoKeys: isMac ? \"Meta+Z\" : \"Control+Z\",\r\n redoKeys: isMac ? \"Meta+Shift+Z\" : \"Control+Y\",\r\n };\r\n}\r\n","import { PDFDocument, type PDFPage } from \"pdf-lib\";\r\n\r\nconst LETTER: [number, number] = [612, 792];\r\n\r\nfunction visualSize(page: PDFPage): [number, number] {\r\n const { width, height } = page.getSize();\r\n const angle = ((page.getRotation().angle % 360) + 360) % 360;\r\n if (angle === 90 || angle === 270) {\r\n return [height, width];\r\n }\r\n return [width, height];\r\n}\r\n\r\nexport async function insertBlankPage(\r\n pdfBytes: Uint8Array,\r\n insertIndex: number,\r\n): Promise<Uint8Array> {\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const pageCount = pdf.getPageCount();\r\n const index = Math.max(0, Math.min(insertIndex, pageCount));\r\n const reference =\r\n pageCount > 0 ? pdf.getPage(index === 0 ? 0 : index - 1) : undefined;\r\n const size = reference ? visualSize(reference) : LETTER;\r\n pdf.insertPage(index, size);\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","import { PDFDocument } from \"pdf-lib\";\r\n\r\nexport async function movePage(\r\n pdfBytes: Uint8Array,\r\n fromIndex: number,\r\n toIndex: number,\r\n): Promise<Uint8Array> {\r\n const pdf = await PDFDocument.load(pdfBytes);\r\n const pageCount = pdf.getPageCount();\r\n\r\n if (pageCount <= 1) {\r\n return pdfBytes;\r\n }\r\n\r\n const from = Math.max(0, Math.min(fromIndex, pageCount - 1));\r\n const to = Math.max(0, Math.min(toIndex, pageCount - 1));\r\n\r\n if (from === to) {\r\n return pdfBytes;\r\n }\r\n\r\n const [copied] = await pdf.copyPages(pdf, [from]);\r\n if (from < to) {\r\n pdf.insertPage(to + 1, copied);\r\n pdf.removePage(from);\r\n } else {\r\n pdf.insertPage(to, copied);\r\n pdf.removePage(from + 1);\r\n }\r\n\r\n const saved = await pdf.save({ useObjectStreams: true });\r\n return saved instanceof Uint8Array ? saved : new Uint8Array(saved);\r\n}\r\n","export function moveIndex<T>(items: T[], from: number, to: number): T[] {\r\n if (from === to) {\r\n return items;\r\n }\r\n\r\n const next = items.slice();\r\n const [item] = next.splice(from, 1);\r\n if (item === undefined) {\r\n return items;\r\n }\r\n\r\n next.splice(to, 0, item);\r\n return next;\r\n}\r\n\r\nexport function remapAfterDelete(pageNumber: number) {\r\n return (current: number): number | null => {\r\n if (current === pageNumber) {\r\n return null;\r\n }\r\n return current > pageNumber ? current - 1 : current;\r\n };\r\n}\r\n\r\nexport function remapAfterMove(from: number, to: number) {\r\n return (current: number): number => {\r\n if (current === from) {\r\n return to;\r\n }\r\n if (from < to && current > from && current <= to) {\r\n return current - 1;\r\n }\r\n if (from > to && current >= to && current < from) {\r\n return current + 1;\r\n }\r\n return current;\r\n };\r\n}\r\n\r\nexport function sequentialPages(count: number): number[] {\r\n return Array.from({ length: count }, (_, index) => index + 1);\r\n}\r\n","import {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type KeyboardEvent,\r\n} from \"react\";\r\nimport { HighlightToolbar } from \"./components/HighlightToolbar\";\r\nimport { ImageModal } from \"./components/ImageModal\";\r\nimport { ImageToolbar } from \"./components/ImageToolbar\";\r\nimport { InkToolbar } from \"./components/InkToolbar\";\r\nimport { PdfPage } from \"./components/PdfPage\";\r\nimport { PagesSidebar } from \"./components/PagesSidebar\";\r\nimport { PropertiesPanel } from \"./components/PropertiesPanel\";\r\nimport { SignatureModal } from \"./components/SignatureModal\";\r\nimport { SignatureToolbar } from \"./components/SignatureToolbar\";\r\nimport { Toolbar } from \"./components/Toolbar\";\r\nimport { PanelLeftIcon, XIcon } from \"./components/icons\";\r\nimport { useCompactLayout } from \"./hooks/useCompactLayout\";\r\nimport { useDrawStrokes } from \"./hooks/useDrawStrokes\";\r\nimport {\r\n remapSnapshot,\r\n useEditorHistory,\r\n type DocumentSnapshot,\r\n type HistoryApply,\r\n type HistorySelection,\r\n} from \"./hooks/useEditorHistory\";\r\nimport { useExportPdf } from \"./hooks/useExportPdf\";\r\nimport { useHighlights } from \"./hooks/useHighlights\";\r\nimport { useImages } from \"./hooks/useImages\";\r\nimport { usePdfDocument } from \"./hooks/usePdfDocument\";\r\nimport { usePdfTextSearch } from \"./hooks/usePdfTextSearch\";\r\nimport { useSignatures } from \"./hooks/useSignatures\";\r\nimport { useTextAnnotations } from \"./hooks/useTextAnnotations\";\r\nimport { deletePage } from \"./lib/deletePage\";\r\nimport { historyShortcuts } from \"./lib/historyShortcuts\";\r\nimport { toPendingImage } from \"./lib/imageUpload\";\r\nimport { insertBlankPage } from \"./lib/insertBlankPage\";\r\nimport { movePage } from \"./lib/movePage\";\r\nimport {\r\n moveIndex,\r\n remapAfterDelete,\r\n remapAfterMove,\r\n sequentialPages,\r\n} from \"./lib/pageOrder\";\r\nimport { toPendingSignature } from \"./lib/signatureImage\";\r\nimport type {\r\n DrawStroke,\r\n HighlightAnnotation,\r\n ImageAnnotation,\r\n PendingImage,\r\n PendingSignature,\r\n PdfEditorProps,\r\n PdfSource,\r\n SignatureAnnotation,\r\n TextAnnotation,\r\n SidebarApi,\r\n Tool,\r\n ToolbarApi,\r\n} from \"./types\";\r\n\r\ntype PendingPageOp =\r\n | { type: \"insert\"; afterPage: number }\r\n | { type: \"delete\"; pageNumber: number }\r\n | { type: \"reorder\"; from: number; to: number };\r\n\r\ntype PendingHistoryApply = {\r\n page?: number;\r\n selection?: HistorySelection | null;\r\n};\r\n\r\nconst HISTORY_KIND_LABEL: Record<HistorySelection[\"kind\"], string> = {\r\n text: \"text\",\r\n draw: \"drawing\",\r\n highlight: \"highlight\",\r\n signature: \"signature\",\r\n image: \"image\",\r\n};\r\n\r\nconst HISTORY_ITEMS_KEY: Record<\r\n HistorySelection[\"kind\"],\r\n keyof Pick<DocumentSnapshot, \"texts\" | \"drawings\" | \"highlights\" | \"signatures\" | \"images\">\r\n> = {\r\n text: \"texts\",\r\n draw: \"drawings\",\r\n highlight: \"highlights\",\r\n signature: \"signatures\",\r\n image: \"images\",\r\n};\r\n\r\nfunction historySelectionId(snapshot: DocumentSnapshot, selection?: HistorySelection | null) {\r\n if (!selection) {\r\n return null;\r\n }\r\n\r\n const items = snapshot[HISTORY_ITEMS_KEY[selection.kind]];\r\n return items.some((item) => item.id === selection.id) ? selection.id : null;\r\n}\r\n\r\nfunction updateHistoryMeta(\r\n kind: HistorySelection[\"kind\"],\r\n id: string,\r\n changes: Record<string, unknown>,\r\n editingTextId: string | null,\r\n): { label: string; coalesceKey?: string } {\r\n const noun = HISTORY_KIND_LABEL[kind];\r\n\r\n if (kind === \"text\" && editingTextId === id && \"text\" in changes) {\r\n return { label: \"Edit text\", coalesceKey: `edit:text:${id}` };\r\n }\r\n\r\n const keys = Object.keys(changes);\r\n const transformKeys =\r\n kind === \"draw\" ? [\"points\"] : kind === \"highlight\" ? [\"rects\"] : [\"x\", \"y\", \"width\", \"height\", \"rotation\"];\r\n\r\n if (keys.some((key) => transformKeys.includes(key))) {\r\n return { label: `Move ${noun}`, coalesceKey: `transform:${kind}:${id}` };\r\n }\r\n\r\n const field = keys[0] ?? \"edit\";\r\n return { label: `Edit ${noun}`, coalesceKey: `style:${kind}:${id}:${field}` };\r\n}\r\n\r\nfunction snapshotHasChange(\r\n item: { id: string } | undefined,\r\n changes: Record<string, unknown>,\r\n) {\r\n if (!item) {\r\n return false;\r\n }\r\n\r\n const current = item as Record<string, unknown>;\r\n return Object.keys(changes).some((key) => current[key] !== changes[key]);\r\n}\r\n\r\nconst ADDED_PAGE_PULSE_MS = 900;\r\n\r\nconst DEFAULT_SCALE = 1;\r\nconst DEFAULT_MIN_SCALE = 0.5;\r\nconst DEFAULT_MAX_SCALE = 3;\r\nconst SCALE_WHEEL_STEP = 0.1;\r\nconst SCALE_WHEEL_THRESHOLD = 40;\r\nconst KEYBOARD_LINE_SCROLL = 72;\r\nconst STAGE_SCROLL_PADDING = 24;\r\nconst SCROLL_SYNC_SETTLE_MS = 150;\r\nconst SCROLL_SYNC_LOCK_MAX_MS = 2500;\r\n\r\nfunction clamp(value: number, min: number, max: number): number {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n\r\nfunction readPageSlotSize(node: HTMLElement | undefined) {\r\n const page = node?.querySelector(\".rpe-page\");\r\n if (!(page instanceof HTMLElement) || page.offsetWidth === 0) {\r\n return undefined;\r\n }\r\n\r\n return { width: page.offsetWidth, height: page.offsetHeight };\r\n}\r\n\r\nfunction scrollWithinContainer(\r\n container: HTMLElement,\r\n target: HTMLElement,\r\n options?: {\r\n behavior?: ScrollBehavior;\r\n block?: \"start\" | \"center\" | \"nearest\";\r\n padding?: number;\r\n },\r\n) {\r\n const behavior = options?.behavior ?? \"auto\";\r\n const block = options?.block ?? \"start\";\r\n const padding = options?.padding ?? STAGE_SCROLL_PADDING;\r\n const containerRect = container.getBoundingClientRect();\r\n const targetRect = target.getBoundingClientRect();\r\n let delta = 0;\r\n\r\n if (block === \"center\") {\r\n const containerCenter = containerRect.top + containerRect.height / 2;\r\n const targetCenter = targetRect.top + targetRect.height / 2;\r\n delta = targetCenter - containerCenter;\r\n } else if (block === \"nearest\") {\r\n if (targetRect.top < containerRect.top + padding) {\r\n delta = targetRect.top - containerRect.top - padding;\r\n } else if (targetRect.bottom > containerRect.bottom - padding) {\r\n delta = targetRect.bottom - containerRect.bottom + padding;\r\n }\r\n } else {\r\n delta = targetRect.top - containerRect.top - padding;\r\n }\r\n\r\n if (Math.abs(delta) < 1) {\r\n return;\r\n }\r\n\r\n container.scrollTo({\r\n top: container.scrollTop + delta,\r\n behavior,\r\n });\r\n}\r\n\r\nfunction isPageInView(container: HTMLElement, pageNode: HTMLElement) {\r\n const containerRect = container.getBoundingClientRect();\r\n const pageRect = pageNode.getBoundingClientRect();\r\n return (\r\n pageRect.bottom > containerRect.top + 24 &&\r\n pageRect.top < containerRect.bottom - 24\r\n );\r\n}\r\n\r\nfunction holdScrollSync(\r\n container: HTMLElement,\r\n lock: { current: boolean },\r\n onRelease?: () => void,\r\n): () => void {\r\n lock.current = true;\r\n\r\n let released = false;\r\n let settleTimer = 0;\r\n\r\n const release = () => {\r\n if (released) {\r\n return;\r\n }\r\n released = true;\r\n lock.current = false;\r\n container.removeEventListener(\"scrollend\", release);\r\n container.removeEventListener(\"scroll\", bumpSettle);\r\n window.clearTimeout(settleTimer);\r\n window.clearTimeout(maxTimer);\r\n onRelease?.();\r\n };\r\n\r\n const bumpSettle = () => {\r\n window.clearTimeout(settleTimer);\r\n settleTimer = window.setTimeout(release, SCROLL_SYNC_SETTLE_MS);\r\n };\r\n\r\n container.addEventListener(\"scrollend\", release);\r\n container.addEventListener(\"scroll\", bumpSettle, { passive: true });\r\n settleTimer = window.setTimeout(release, SCROLL_SYNC_SETTLE_MS);\r\n const maxTimer = window.setTimeout(release, SCROLL_SYNC_LOCK_MAX_MS);\r\n\r\n return release;\r\n}\r\n\r\nfunction fileNameFromPath(path: string): string | undefined {\r\n const last = path.split(/[/\\\\]/).pop();\r\n if (!last) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n return decodeURIComponent(last) || undefined;\r\n } catch {\r\n return last;\r\n }\r\n}\r\n\r\nfunction extractPdfFileName(file?: PdfSource | null): string | undefined {\r\n if (!file) {\r\n return undefined;\r\n }\r\n\r\n if (typeof File !== \"undefined\" && file instanceof File && file.name) {\r\n return file.name;\r\n }\r\n\r\n if (typeof URL !== \"undefined\" && file instanceof URL) {\r\n return fileNameFromPath(file.pathname);\r\n }\r\n\r\n if (typeof file === \"string\") {\r\n const [withoutQuery] = file.split(/[?#]/);\r\n return fileNameFromPath(withoutQuery);\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction resolveDocumentName(file?: PdfSource | null, override?: string): string {\r\n const trimmed = override?.trim();\r\n if (trimmed) {\r\n return trimmed;\r\n }\r\n\r\n return extractPdfFileName(file) ?? \"document.pdf\";\r\n}\r\n\r\nfunction toPdfFileName(name: string): string {\r\n return name.toLowerCase().endsWith(\".pdf\") ? name : `${name}.pdf`;\r\n}\r\n\r\nfunction resolveExportFileName(documentName: string, override?: string): string {\r\n const trimmed = override?.trim();\r\n return toPdfFileName(trimmed || documentName);\r\n}\r\n\r\nfunction isEditableTarget(target: EventTarget | null): boolean {\r\n if (!(target instanceof HTMLElement)) {\r\n return false;\r\n }\r\n\r\n return Boolean(target.closest(\"input, textarea, select, [contenteditable='true']\"));\r\n}\r\n\r\nexport function PdfEditor({\r\n file,\r\n name,\r\n className,\r\n style,\r\n page,\r\n defaultPage = 1,\r\n scale,\r\n defaultScale = DEFAULT_SCALE,\r\n minScale = DEFAULT_MIN_SCALE,\r\n maxScale = DEFAULT_MAX_SCALE,\r\n workerSrc,\r\n exportWorkerSrc,\r\n exportFileName,\r\n showToolbar = true,\r\n toolbar,\r\n showSidebar = true,\r\n sidebar,\r\n emptyState,\r\n onLoadSuccess,\r\n onLoadError,\r\n onPageChange,\r\n onScaleChange,\r\n onNameChange,\r\n onExport,\r\n onExportError,\r\n}: PdfEditorProps) {\r\n const [working, setWorking] = useState<{\r\n forFile: PdfSource | null | undefined;\r\n bytes: Uint8Array | null;\r\n }>({ forFile: file, bytes: null });\r\n const documentSource = working.forFile === file ? (working.bytes ?? file) : file;\r\n const { pdf, numPages, loading, loadPhase, downloadProgress, error } = usePdfDocument(\r\n documentSource,\r\n workerSrc,\r\n );\r\n const search = usePdfTextSearch(pdf);\r\n const texts = useTextAnnotations();\r\n const drawings = useDrawStrokes();\r\n const highlights = useHighlights();\r\n const signatures = useSignatures();\r\n const images = useImages();\r\n const history = useEditorHistory();\r\n const resolvedName = useMemo(() => resolveDocumentName(file, name), [file, name]);\r\n const [documentName, setDocumentName] = useState(resolvedName);\r\n const exportFile = useExportPdf({\r\n pdf,\r\n annotations: texts.items,\r\n drawings: drawings.items,\r\n highlights: highlights.items,\r\n signatures: signatures.items,\r\n images: images.items,\r\n fileName: resolveExportFileName(documentName, exportFileName),\r\n workerSrc: exportWorkerSrc,\r\n onExport,\r\n onExportError,\r\n });\r\n const [internalPage, setInternalPage] = useState(defaultPage);\r\n const [internalScale, setInternalScale] = useState(defaultScale);\r\n const [activeTool, setActiveTool] = useState<Tool>(\"select\");\r\n const [signatureModalOpen, setSignatureModalOpen] = useState(false);\r\n const [pendingSignature, setPendingSignature] = useState<PendingSignature | null>(null);\r\n const [imageModalOpen, setImageModalOpen] = useState(false);\r\n const [pendingImage, setPendingImage] = useState<PendingImage | null>(null);\r\n const [replacingImageId, setReplacingImageId] = useState<string | null>(null);\r\n const [mutatingPages, setMutatingPages] = useState(false);\r\n const [justAddedPage, setJustAddedPage] = useState<number | null>(null);\r\n const [pageOpError, setPageOpError] = useState<string | null>(null);\r\n const [pendingPageOp, setPendingPageOp] = useState<PendingPageOp | null>(null);\r\n const [pendingHistoryApply, setPendingHistoryApply] = useState<PendingHistoryApply | null>(null);\r\n const [optimisticOrder, setOptimisticOrder] = useState<number[] | null>(null);\r\n const [pagesOpen, setPagesOpen] = useState(false);\r\n const [propertiesOpen, setPropertiesOpen] = useState(false);\r\n const rootRef = useRef<HTMLDivElement>(null);\r\n const compact = useCompactLayout(rootRef);\r\n const stageRef = useRef<HTMLDivElement>(null);\r\n const pageRefs = useRef(new Map<number, HTMLElement>());\r\n const skipScrollSyncRef = useRef(false);\r\n const pendingScrollPageRef = useRef<number | null>(null);\r\n const explicitScrollPageRef = useRef<number | null>(null);\r\n const lastReportedPageRef = useRef(defaultPage);\r\n const textsRef = useRef(texts.items);\r\n const drawingsRef = useRef(drawings.items);\r\n const highlightsRef = useRef(highlights.items);\r\n const signaturesRef = useRef(signatures.items);\r\n const imagesRef = useRef(images.items);\r\n const documentNameRef = useRef(documentName);\r\n const workingBytesRef = useRef(working.bytes);\r\n const editStartTextRef = useRef<string | null>(null);\r\n textsRef.current = texts.items;\r\n drawingsRef.current = drawings.items;\r\n highlightsRef.current = highlights.items;\r\n signaturesRef.current = signatures.items;\r\n imagesRef.current = images.items;\r\n documentNameRef.current = documentName;\r\n workingBytesRef.current = working.bytes;\r\n\r\n const currentPage = page ?? internalPage;\r\n const currentScale = scale ?? internalScale;\r\n\r\n useEffect(() => {\r\n setWorking({ forFile: file, bytes: null });\r\n setMutatingPages(false);\r\n setJustAddedPage(null);\r\n setPageOpError(null);\r\n setPendingPageOp(null);\r\n setPendingHistoryApply(null);\r\n setOptimisticOrder(null);\r\n texts.reset();\r\n drawings.reset();\r\n highlights.reset();\r\n signatures.reset();\r\n images.reset();\r\n history.reset();\r\n editStartTextRef.current = null;\r\n setPendingSignature(null);\r\n setSignatureModalOpen(false);\r\n setPendingImage(null);\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n setPagesOpen(false);\r\n setPropertiesOpen(false);\r\n }, [file, texts.reset, drawings.reset, highlights.reset, signatures.reset, images.reset, history.reset]);\r\n\r\n useEffect(() => {\r\n setDocumentName(resolvedName);\r\n }, [resolvedName]);\r\n\r\n useEffect(() => {\r\n if (pdf && onLoadSuccess) {\r\n onLoadSuccess({ numPages });\r\n }\r\n }, [pdf, numPages, onLoadSuccess]);\r\n\r\n useEffect(() => {\r\n if (error && onLoadError) {\r\n onLoadError(error);\r\n }\r\n }, [error, onLoadError]);\r\n\r\n useEffect(() => {\r\n if (numPages > 0 && currentPage > numPages) {\r\n const nextPage = numPages;\r\n if (page === undefined) {\r\n setInternalPage(nextPage);\r\n }\r\n onPageChange?.(nextPage);\r\n }\r\n }, [currentPage, numPages, onPageChange, page]);\r\n\r\n const safePage = useMemo(() => {\r\n if (numPages === 0) {\r\n return 1;\r\n }\r\n return clamp(currentPage, 1, numPages);\r\n }, [currentPage, numPages]);\r\n\r\n const safeScale = clamp(currentScale, minScale, maxScale);\r\n const enteringPage =\r\n pendingPageOp?.type === \"insert\" &&\r\n pdf &&\r\n !loading &&\r\n numPages >= pendingPageOp.afterPage + 1\r\n ? pendingPageOp.afterPage + 1\r\n : justAddedPage;\r\n const pageNumbers = useMemo(() => sequentialPages(numPages), [numPages]);\r\n\r\n const setPage = useCallback(\r\n (nextPage: number, options?: { scroll?: boolean }) => {\r\n const next = clamp(nextPage, 1, Math.max(numPages, 1));\r\n if (options?.scroll === false) {\r\n pendingScrollPageRef.current = null;\r\n } else {\r\n pendingScrollPageRef.current = next;\r\n explicitScrollPageRef.current = next;\r\n }\r\n\r\n if (page === undefined) {\r\n setInternalPage(next);\r\n }\r\n\r\n onPageChange?.(next);\r\n },\r\n [numPages, onPageChange, page],\r\n );\r\n\r\n const captureSnapshot = useCallback((): DocumentSnapshot => {\r\n return {\r\n texts: textsRef.current,\r\n drawings: drawingsRef.current,\r\n highlights: highlightsRef.current,\r\n signatures: signaturesRef.current,\r\n images: imagesRef.current,\r\n documentName: documentNameRef.current,\r\n workingBytes: workingBytesRef.current,\r\n };\r\n }, []);\r\n\r\n const restoreHistoryChrome = useCallback(\r\n (snapshot: DocumentSnapshot, selection?: HistorySelection | null, nextPage?: number) => {\r\n texts.stopEdit();\r\n texts.select(selection?.kind === \"text\" ? historySelectionId(snapshot, selection) : null);\r\n drawings.select(selection?.kind === \"draw\" ? historySelectionId(snapshot, selection) : null);\r\n highlights.select(\r\n selection?.kind === \"highlight\" ? historySelectionId(snapshot, selection) : null,\r\n );\r\n signatures.select(\r\n selection?.kind === \"signature\" ? historySelectionId(snapshot, selection) : null,\r\n );\r\n images.select(selection?.kind === \"image\" ? historySelectionId(snapshot, selection) : null);\r\n if (nextPage != null) {\r\n setPage(nextPage);\r\n }\r\n },\r\n [\r\n drawings.select,\r\n highlights.select,\r\n images.select,\r\n setPage,\r\n signatures.select,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const applyHistory = useCallback(\r\n (applied: HistoryApply) => {\r\n const { snapshot, selection, page: nextPage } = applied;\r\n history.beginApply();\r\n texts.hydrate(snapshot.texts);\r\n drawings.hydrate(snapshot.drawings);\r\n highlights.hydrate(snapshot.highlights);\r\n signatures.hydrate(snapshot.signatures);\r\n images.hydrate(snapshot.images);\r\n setDocumentName(snapshot.documentName);\r\n onNameChange?.(snapshot.documentName);\r\n\r\n const bytesChanged =\r\n snapshot.workingBytes != null && snapshot.workingBytes !== workingBytesRef.current;\r\n\r\n if (bytesChanged) {\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n setOptimisticOrder(null);\r\n setPendingHistoryApply({ page: nextPage, selection });\r\n setWorking({ forFile: file, bytes: snapshot.workingBytes });\r\n } else {\r\n restoreHistoryChrome(snapshot, selection, nextPage);\r\n }\r\n\r\n history.endApply();\r\n },\r\n [\r\n drawings.hydrate,\r\n file,\r\n highlights.hydrate,\r\n history,\r\n images.hydrate,\r\n onNameChange,\r\n restoreHistoryChrome,\r\n signatures.hydrate,\r\n texts.hydrate,\r\n ],\r\n );\r\n\r\n const runUndo = useCallback(() => {\r\n if (mutatingPages || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n const applied = history.undo();\r\n if (applied) {\r\n applyHistory(applied);\r\n }\r\n }, [applyHistory, history, imageModalOpen, mutatingPages, signatureModalOpen]);\r\n\r\n const runRedo = useCallback(() => {\r\n if (mutatingPages || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n const applied = history.redo();\r\n if (applied) {\r\n applyHistory(applied);\r\n }\r\n }, [applyHistory, history, imageModalOpen, mutatingPages, signatureModalOpen]);\r\n\r\n const recordAdd = useCallback(\r\n <T extends { id: string; pageNumber: number }>(\r\n kind: HistorySelection[\"kind\"],\r\n item: T,\r\n label: string,\r\n ) => {\r\n const before = captureSnapshot();\r\n const key = HISTORY_ITEMS_KEY[kind];\r\n history.push({\r\n label,\r\n before,\r\n after: { ...before, [key]: [...before[key], item] },\r\n selection: { kind, id: item.id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history],\r\n );\r\n\r\n const recordRemove = useCallback(\r\n (kind: HistorySelection[\"kind\"], id: string, label: string) => {\r\n const before = captureSnapshot();\r\n const key = HISTORY_ITEMS_KEY[kind];\r\n const item = before[key].find((entry) => entry.id === id);\r\n if (!item) {\r\n return;\r\n }\r\n history.push({\r\n label,\r\n before,\r\n after: { ...before, [key]: before[key].filter((entry) => entry.id !== id) },\r\n selection: { kind, id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history],\r\n );\r\n\r\n const recordUpdate = useCallback(\r\n (kind: HistorySelection[\"kind\"], id: string, changes: Record<string, unknown>) => {\r\n const before = captureSnapshot();\r\n const key = HISTORY_ITEMS_KEY[kind];\r\n const item = before[key].find((entry) => entry.id === id);\r\n if (!item || !snapshotHasChange(item, changes)) {\r\n return;\r\n }\r\n\r\n const { label, coalesceKey } = updateHistoryMeta(kind, id, changes, texts.editingId);\r\n history.push({\r\n label,\r\n coalesceKey,\r\n before,\r\n after: {\r\n ...before,\r\n [key]: before[key].map((entry) => (entry.id === id ? { ...entry, ...changes } : entry)),\r\n },\r\n selection: { kind, id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history, texts.editingId],\r\n );\r\n\r\n const handleAddText = useCallback(\r\n (annotation: Omit<TextAnnotation, \"id\">) => {\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n const item = texts.add(annotation);\r\n editStartTextRef.current = item.text;\r\n recordAdd(\"text\", item, \"Add text\");\r\n },\r\n [drawings.select, highlights.select, images.select, recordAdd, signatures.select, texts.add],\r\n );\r\n\r\n const handleUpdateText = useCallback(\r\n (id: string, changes: Partial<TextAnnotation>) => {\r\n texts.update(id, changes);\r\n recordUpdate(\"text\", id, changes);\r\n },\r\n [recordUpdate, texts.update],\r\n );\r\n\r\n const handleRemoveText = useCallback(\r\n (id: string) => {\r\n recordRemove(\"text\", id, \"Delete text\");\r\n texts.remove(id);\r\n },\r\n [recordRemove, texts.remove],\r\n );\r\n\r\n const handleStartEditText = useCallback(\r\n (id: string) => {\r\n const item = textsRef.current.find((entry) => entry.id === id);\r\n editStartTextRef.current = item?.text ?? \"\";\r\n texts.startEdit(id);\r\n },\r\n [texts.startEdit],\r\n );\r\n\r\n const handleStopEditText = useCallback(() => {\r\n const id = texts.editingId;\r\n texts.stopEdit();\r\n if (!id) {\r\n return;\r\n }\r\n\r\n const current = textsRef.current.find((entry) => entry.id === id);\r\n const start = editStartTextRef.current;\r\n if (!current || start == null || current.text === start) {\r\n return;\r\n }\r\n\r\n recordUpdate(\"text\", id, { text: current.text });\r\n }, [recordUpdate, texts.editingId, texts.stopEdit]);\r\n\r\n const handleAddDraw = useCallback(\r\n (stroke: Omit<DrawStroke, \"id\">) => {\r\n const item = drawings.add(stroke);\r\n recordAdd(\"draw\", item, \"Add drawing\");\r\n },\r\n [drawings.add, recordAdd],\r\n );\r\n\r\n const handleUpdateDraw = useCallback(\r\n (id: string, changes: Partial<DrawStroke>) => {\r\n drawings.update(id, changes);\r\n recordUpdate(\"draw\", id, changes);\r\n },\r\n [drawings.update, recordUpdate],\r\n );\r\n\r\n const handleRemoveDraw = useCallback(\r\n (id: string) => {\r\n recordRemove(\"draw\", id, \"Delete drawing\");\r\n drawings.remove(id);\r\n },\r\n [drawings.remove, recordRemove],\r\n );\r\n\r\n const handleDrawColorChange = useCallback(\r\n (next: string) => {\r\n const id = drawings.selectedId;\r\n drawings.setColor(next);\r\n if (id) {\r\n recordUpdate(\"draw\", id, { color: next });\r\n }\r\n },\r\n [drawings.selectedId, drawings.setColor, recordUpdate],\r\n );\r\n\r\n const handleDrawWidthChange = useCallback(\r\n (next: number) => {\r\n const id = drawings.selectedId;\r\n drawings.setWidth(next);\r\n if (id) {\r\n recordUpdate(\"draw\", id, { width: next });\r\n }\r\n },\r\n [drawings.selectedId, drawings.setWidth, recordUpdate],\r\n );\r\n\r\n const handleAddHighlight = useCallback(\r\n (highlight: Omit<HighlightAnnotation, \"id\">) => {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n const item = highlights.add(highlight);\r\n recordAdd(\"highlight\", item, \"Add highlight\");\r\n },\r\n [\r\n drawings.select,\r\n highlights.add,\r\n images.select,\r\n recordAdd,\r\n signatures.select,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const handleUpdateHighlight = useCallback(\r\n (id: string, changes: Partial<HighlightAnnotation>) => {\r\n highlights.update(id, changes);\r\n recordUpdate(\"highlight\", id, changes);\r\n },\r\n [highlights.update, recordUpdate],\r\n );\r\n\r\n const handleRemoveHighlight = useCallback(\r\n (id: string) => {\r\n recordRemove(\"highlight\", id, \"Delete highlight\");\r\n highlights.remove(id);\r\n },\r\n [highlights.remove, recordRemove],\r\n );\r\n\r\n const handleHighlightColorChange = useCallback(\r\n (next: string) => {\r\n const id = highlights.selectedId;\r\n highlights.setColor(next);\r\n if (id) {\r\n recordUpdate(\"highlight\", id, { color: next });\r\n }\r\n },\r\n [highlights.selectedId, highlights.setColor, recordUpdate],\r\n );\r\n\r\n const handleAddSignature = useCallback(\r\n (annotation: Omit<SignatureAnnotation, \"id\">) => {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n images.select(null);\r\n const item = signatures.add(annotation);\r\n recordAdd(\"signature\", item, \"Add signature\");\r\n setPendingSignature(null);\r\n setActiveTool(\"select\");\r\n },\r\n [\r\n drawings.select,\r\n highlights.select,\r\n images.select,\r\n recordAdd,\r\n signatures.add,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const handleUpdateSignature = useCallback(\r\n (id: string, changes: Partial<SignatureAnnotation>) => {\r\n signatures.update(id, changes);\r\n recordUpdate(\"signature\", id, changes);\r\n },\r\n [recordUpdate, signatures.update],\r\n );\r\n\r\n const handleRemoveSignature = useCallback(\r\n (id: string) => {\r\n recordRemove(\"signature\", id, \"Delete signature\");\r\n signatures.remove(id);\r\n },\r\n [recordRemove, signatures.remove],\r\n );\r\n\r\n const handleAddImage = useCallback(\r\n (annotation: Omit<ImageAnnotation, \"id\">) => {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n const item = images.add(annotation);\r\n recordAdd(\"image\", item, \"Add image\");\r\n setPendingImage(null);\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n setActiveTool(\"select\");\r\n },\r\n [\r\n drawings.select,\r\n highlights.select,\r\n images.add,\r\n recordAdd,\r\n signatures.select,\r\n texts.select,\r\n texts.stopEdit,\r\n ],\r\n );\r\n\r\n const handleUpdateImage = useCallback(\r\n (id: string, changes: Partial<ImageAnnotation>) => {\r\n images.update(id, changes);\r\n recordUpdate(\"image\", id, changes);\r\n },\r\n [images.update, recordUpdate],\r\n );\r\n\r\n const handleRemoveImage = useCallback(\r\n (id: string) => {\r\n recordRemove(\"image\", id, \"Delete image\");\r\n images.remove(id);\r\n },\r\n [images.remove, recordRemove],\r\n );\r\n\r\n const handleReplaceImage = useCallback(\r\n (id: string, src: string) => {\r\n const before = captureSnapshot();\r\n const item = before.images.find((entry) => entry.id === id);\r\n if (!item || item.src === src) {\r\n return;\r\n }\r\n images.update(id, { src });\r\n history.push({\r\n label: \"Replace image\",\r\n before,\r\n after: {\r\n ...before,\r\n images: before.images.map((entry) => (entry.id === id ? { ...entry, src } : entry)),\r\n },\r\n selection: { kind: \"image\", id },\r\n page: item.pageNumber,\r\n });\r\n },\r\n [captureSnapshot, history, images.update],\r\n );\r\n\r\n const handleRenameDocument = useCallback(\r\n (nextName: string) => {\r\n if (nextName === documentNameRef.current) {\r\n return;\r\n }\r\n const before = captureSnapshot();\r\n setDocumentName(nextName);\r\n onNameChange?.(nextName);\r\n history.push({\r\n label: \"Rename document\",\r\n before,\r\n after: { ...before, documentName: nextName },\r\n });\r\n },\r\n [captureSnapshot, history, onNameChange],\r\n );\r\n\r\n const setScaleValue = useCallback(\r\n (nextScale: number) => {\r\n const next = clamp(nextScale, minScale, maxScale);\r\n if (scale === undefined) {\r\n setInternalScale(next);\r\n }\r\n onScaleChange?.(next);\r\n },\r\n [maxScale, minScale, onScaleChange, scale],\r\n );\r\n\r\n const zoomIn = useCallback(() => {\r\n setScaleValue(Number((safeScale + 0.25).toFixed(2)));\r\n }, [safeScale, setScaleValue]);\r\n\r\n const zoomOut = useCallback(() => {\r\n setScaleValue(Number((safeScale - 0.25).toFixed(2)));\r\n }, [safeScale, setScaleValue]);\r\n\r\n const prevPage = useCallback(() => {\r\n setPage(safePage - 1);\r\n }, [safePage, setPage]);\r\n\r\n const nextPage = useCallback(() => {\r\n setPage(safePage + 1);\r\n }, [safePage, setPage]);\r\n\r\n const setTool = useCallback(\r\n (tool: Tool) => {\r\n setActiveTool(tool);\r\n texts.stopEdit();\r\n window.getSelection()?.removeAllRanges();\r\n if (tool === \"draw\") {\r\n texts.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n } else if (tool === \"text\") {\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n } else if (tool === \"highlight\") {\r\n texts.select(null);\r\n drawings.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n } else if (tool === \"signature\") {\r\n texts.select(null);\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n if (pendingSignature) {\r\n setSignatureModalOpen(false);\r\n } else {\r\n setSignatureModalOpen(true);\r\n }\r\n } else if (tool === \"image\") {\r\n texts.select(null);\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setReplacingImageId(null);\r\n if (pendingImage) {\r\n setImageModalOpen(false);\r\n } else {\r\n setImageModalOpen(true);\r\n }\r\n } else {\r\n setSignatureModalOpen(false);\r\n setPendingSignature(null);\r\n setImageModalOpen(false);\r\n setPendingImage(null);\r\n setReplacingImageId(null);\r\n }\r\n },\r\n [\r\n drawings,\r\n highlights,\r\n images,\r\n pendingImage,\r\n pendingSignature,\r\n signatures,\r\n texts,\r\n ],\r\n );\r\n\r\n const exportPdf = useCallback(() => {\r\n void exportFile.exportPdf();\r\n }, [exportFile]);\r\n\r\n const toolbarShortcuts = useMemo(() => historyShortcuts(), []);\r\n\r\n const toolbarSearch = useMemo(\r\n () => ({\r\n query: search.query,\r\n setQuery: search.setQuery,\r\n matchCount: search.matches.length,\r\n currentIndex: search.currentIndex,\r\n next: search.next,\r\n prev: search.prev,\r\n clear: search.clear,\r\n }),\r\n [\r\n search.clear,\r\n search.currentIndex,\r\n search.matches.length,\r\n search.next,\r\n search.prev,\r\n search.query,\r\n search.setQuery,\r\n ],\r\n );\r\n\r\n const toolbarApi = useMemo<ToolbarApi>(\r\n () => ({\r\n name: documentName,\r\n setName: handleRenameDocument,\r\n disabled: !pdf,\r\n canUndo: Boolean(pdf) && history.canUndo && !mutatingPages,\r\n canRedo: Boolean(pdf) && history.canRedo && !mutatingPages,\r\n undoLabel: history.undoLabel,\r\n redoLabel: history.redoLabel,\r\n undo: runUndo,\r\n redo: runRedo,\r\n shortcuts: toolbarShortcuts,\r\n activeTool,\r\n setTool,\r\n scale: safeScale,\r\n minScale,\r\n maxScale,\r\n setScale: setScaleValue,\r\n zoomIn,\r\n zoomOut,\r\n page: safePage,\r\n numPages,\r\n setPage,\r\n prevPage,\r\n nextPage,\r\n search: toolbarSearch,\r\n exportPdf,\r\n exporting: exportFile.exporting,\r\n exportError: exportFile.exportError,\r\n }),\r\n [\r\n activeTool,\r\n documentName,\r\n exportFile.exportError,\r\n exportFile.exporting,\r\n exportPdf,\r\n handleRenameDocument,\r\n history.canRedo,\r\n history.canUndo,\r\n history.redoLabel,\r\n history.undoLabel,\r\n maxScale,\r\n minScale,\r\n mutatingPages,\r\n nextPage,\r\n numPages,\r\n pdf,\r\n prevPage,\r\n runRedo,\r\n runUndo,\r\n safePage,\r\n safeScale,\r\n setPage,\r\n setScaleValue,\r\n setTool,\r\n toolbarSearch,\r\n toolbarShortcuts,\r\n zoomIn,\r\n zoomOut,\r\n ],\r\n );\r\n\r\n const sidebarPages = useMemo(\r\n () =>\r\n (optimisticOrder ?? sequentialPages(numPages)).map((pageNumber, index) => ({\r\n pageNumber,\r\n index,\r\n label: index + 1,\r\n selected: pageNumber === safePage,\r\n justAdded: pageNumber === enteringPage,\r\n })),\r\n [enteringPage, numPages, optimisticOrder, safePage],\r\n );\r\n\r\n const applyPageRemap = useCallback(\r\n (fn: (pageNumber: number) => number | null) => {\r\n texts.remapPageNumbers(fn);\r\n drawings.remapPageNumbers(fn);\r\n highlights.remapPageNumbers(fn);\r\n signatures.remapPageNumbers(fn);\r\n images.remapPageNumbers(fn);\r\n },\r\n [\r\n drawings.remapPageNumbers,\r\n highlights.remapPageNumbers,\r\n images.remapPageNumbers,\r\n signatures.remapPageNumbers,\r\n texts.remapPageNumbers,\r\n ],\r\n );\r\n\r\n const readWorkingBytes = useCallback(async () => {\r\n if (!pdf) {\r\n throw new Error(\"PDF is not loaded\");\r\n }\r\n\r\n return working.bytes\r\n ? working.bytes.slice()\r\n : new Uint8Array(await pdf.getData());\r\n }, [pdf, working.bytes]);\r\n\r\n const handleAddBlankPage = useCallback(\r\n async (afterPage: number) => {\r\n if (!pdf || mutatingPages) {\r\n return;\r\n }\r\n\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n\r\n try {\r\n const currentBytes = await readWorkingBytes();\r\n const nextBytes = await insertBlankPage(currentBytes, afterPage);\r\n const before = { ...captureSnapshot(), workingBytes: currentBytes };\r\n const remap = (pageNumber: number) => (pageNumber > afterPage ? pageNumber + 1 : pageNumber);\r\n history.push({\r\n label: \"Add page\",\r\n before,\r\n after: { ...remapSnapshot(before, remap), workingBytes: nextBytes },\r\n page: afterPage + 1,\r\n });\r\n setPendingPageOp({ type: \"insert\", afterPage });\r\n setWorking({ forFile: file, bytes: nextBytes });\r\n } catch (caught) {\r\n setPendingPageOp(null);\r\n setMutatingPages(false);\r\n setPageOpError(\r\n caught instanceof Error ? caught.message : \"Failed to add a blank page\",\r\n );\r\n }\r\n },\r\n [captureSnapshot, file, history, mutatingPages, pdf, readWorkingBytes],\r\n );\r\n\r\n const handleDeletePage = useCallback(\r\n async (pageNumber: number) => {\r\n if (!pdf || mutatingPages || numPages <= 1) {\r\n return;\r\n }\r\n\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n setOptimisticOrder((current) =>\r\n (current ?? sequentialPages(numPages)).filter((page) => page !== pageNumber),\r\n );\r\n\r\n try {\r\n const currentBytes = await readWorkingBytes();\r\n const nextBytes = await deletePage(currentBytes, pageNumber - 1);\r\n const before = { ...captureSnapshot(), workingBytes: currentBytes };\r\n history.push({\r\n label: \"Delete page\",\r\n before,\r\n after: {\r\n ...remapSnapshot(before, remapAfterDelete(pageNumber)),\r\n workingBytes: nextBytes,\r\n },\r\n page: pageNumber,\r\n });\r\n setPendingPageOp({ type: \"delete\", pageNumber });\r\n setWorking({ forFile: file, bytes: nextBytes });\r\n } catch (caught) {\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n setMutatingPages(false);\r\n setPageOpError(\r\n caught instanceof Error ? caught.message : \"Failed to delete page\",\r\n );\r\n }\r\n },\r\n [captureSnapshot, file, history, mutatingPages, numPages, pdf, readWorkingBytes],\r\n );\r\n\r\n const handleReorderPages = useCallback(\r\n async (from: number, to: number) => {\r\n if (!pdf || mutatingPages || from === to || numPages <= 1) {\r\n return;\r\n }\r\n\r\n setMutatingPages(true);\r\n setPageOpError(null);\r\n setOptimisticOrder((current) =>\r\n moveIndex(current ?? sequentialPages(numPages), from - 1, to - 1),\r\n );\r\n\r\n try {\r\n const currentBytes = await readWorkingBytes();\r\n const nextBytes = await movePage(currentBytes, from - 1, to - 1);\r\n const before = { ...captureSnapshot(), workingBytes: currentBytes };\r\n history.push({\r\n label: \"Reorder pages\",\r\n before,\r\n after: {\r\n ...remapSnapshot(before, remapAfterMove(from, to)),\r\n workingBytes: nextBytes,\r\n },\r\n page: remapAfterMove(from, to)(safePage),\r\n });\r\n setPendingPageOp({ type: \"reorder\", from, to });\r\n setWorking({ forFile: file, bytes: nextBytes });\r\n } catch (caught) {\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n setMutatingPages(false);\r\n setPageOpError(\r\n caught instanceof Error ? caught.message : \"Failed to reorder pages\",\r\n );\r\n }\r\n },\r\n [captureSnapshot, file, history, mutatingPages, numPages, pdf, readWorkingBytes, safePage],\r\n );\r\n\r\n const addBlankPage = useCallback(\r\n (afterPage: number) => {\r\n void handleAddBlankPage(afterPage);\r\n },\r\n [handleAddBlankPage],\r\n );\r\n\r\n const deleteSidebarPage = useCallback(\r\n (pageNumber: number) => {\r\n void handleDeletePage(pageNumber);\r\n },\r\n [handleDeletePage],\r\n );\r\n\r\n const reorderPages = useCallback(\r\n (from: number, to: number) => {\r\n void handleReorderPages(from, to);\r\n },\r\n [handleReorderPages],\r\n );\r\n\r\n const sidebarApi = useMemo<SidebarApi>(\r\n () => ({\r\n pdf,\r\n page: safePage,\r\n numPages,\r\n pages: sidebarPages,\r\n setPage: (nextPage: number) => {\r\n setPage(nextPage);\r\n if (compact) {\r\n setPagesOpen(false);\r\n }\r\n },\r\n addBlankPage,\r\n deletePage: deleteSidebarPage,\r\n reorderPages,\r\n disabled: !pdf,\r\n mutating: mutatingPages,\r\n adding: pendingPageOp?.type === \"insert\",\r\n canAdd: Boolean(pdf) && !mutatingPages && numPages > 0,\r\n canDelete: numPages > 1,\r\n canReorder: Boolean(pdf) && !mutatingPages && numPages > 1,\r\n error: pageOpError,\r\n drawStrokes: drawings.items,\r\n highlights: highlights.items,\r\n textAnnotations: texts.items,\r\n signatures: signatures.items,\r\n images: images.items,\r\n }),\r\n [\r\n addBlankPage,\r\n deleteSidebarPage,\r\n drawings.items,\r\n highlights.items,\r\n images.items,\r\n mutatingPages,\r\n numPages,\r\n pageOpError,\r\n pdf,\r\n pendingPageOp?.type,\r\n reorderPages,\r\n safePage,\r\n compact,\r\n setPage,\r\n sidebarPages,\r\n signatures.items,\r\n texts.items,\r\n ],\r\n );\r\n\r\n const selectedAnnotationId =\r\n texts.selectedId ??\r\n drawings.selectedId ??\r\n highlights.selectedId ??\r\n signatures.selectedId ??\r\n images.selectedId;\r\n\r\n useEffect(() => {\r\n if (!compact) {\r\n setPagesOpen(false);\r\n setPropertiesOpen(false);\r\n return;\r\n }\r\n\r\n setPropertiesOpen(Boolean(selectedAnnotationId));\r\n }, [compact, selectedAnnotationId]);\r\n\r\n useEffect(() => {\r\n if (error && mutatingPages) {\r\n setPendingPageOp(null);\r\n setPendingHistoryApply(null);\r\n setOptimisticOrder(null);\r\n setMutatingPages(false);\r\n setPageOpError(error.message);\r\n return;\r\n }\r\n\r\n if (!pendingPageOp || !pdf || loading) {\r\n return;\r\n }\r\n\r\n if (pendingPageOp.type === \"insert\") {\r\n const nextPage = pendingPageOp.afterPage + 1;\r\n if (numPages < nextPage) {\r\n return;\r\n }\r\n\r\n const afterPage = pendingPageOp.afterPage;\r\n setPendingPageOp(null);\r\n applyPageRemap((pageNumber) =>\r\n pageNumber > afterPage ? pageNumber + 1 : pageNumber,\r\n );\r\n setMutatingPages(false);\r\n setPage(nextPage);\r\n setJustAddedPage(nextPage);\r\n return;\r\n }\r\n\r\n if (pendingPageOp.type === \"delete\") {\r\n const deleted = pendingPageOp.pageNumber;\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n applyPageRemap(remapAfterDelete(deleted));\r\n setMutatingPages(false);\r\n const nextPage =\r\n safePage === deleted\r\n ? Math.min(deleted, Math.max(numPages, 1))\r\n : safePage > deleted\r\n ? safePage - 1\r\n : safePage;\r\n setPage(nextPage);\r\n return;\r\n }\r\n\r\n const { from, to } = pendingPageOp;\r\n const remap = remapAfterMove(from, to);\r\n setPendingPageOp(null);\r\n setOptimisticOrder(null);\r\n applyPageRemap(remap);\r\n setMutatingPages(false);\r\n setPage(remap(safePage));\r\n }, [\r\n applyPageRemap,\r\n error,\r\n loading,\r\n mutatingPages,\r\n numPages,\r\n pdf,\r\n pendingPageOp,\r\n safePage,\r\n setPage,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!pendingHistoryApply || !pdf || loading) {\r\n return;\r\n }\r\n\r\n const pending = pendingHistoryApply;\r\n setPendingHistoryApply(null);\r\n setMutatingPages(false);\r\n restoreHistoryChrome(\r\n {\r\n texts: textsRef.current,\r\n drawings: drawingsRef.current,\r\n highlights: highlightsRef.current,\r\n signatures: signaturesRef.current,\r\n images: imagesRef.current,\r\n documentName: documentNameRef.current,\r\n workingBytes: workingBytesRef.current,\r\n },\r\n pending.selection,\r\n pending.page,\r\n );\r\n }, [loading, pdf, pendingHistoryApply, restoreHistoryChrome]);\r\n\r\n useEffect(() => {\r\n if (justAddedPage == null) {\r\n return;\r\n }\r\n\r\n const timeoutId = window.setTimeout(() => {\r\n setJustAddedPage(null);\r\n }, ADDED_PAGE_PULSE_MS);\r\n\r\n return () => window.clearTimeout(timeoutId);\r\n }, [justAddedPage]);\r\n\r\n const scaleRef = useRef(safeScale);\r\n scaleRef.current = safeScale;\r\n const wheelDeltaRef = useRef(0);\r\n\r\n const assignPageRef = (pageNumber: number, node: HTMLDivElement | null) => {\r\n if (node) {\r\n pageRefs.current.set(pageNumber, node);\r\n return;\r\n }\r\n\r\n pageRefs.current.delete(pageNumber);\r\n };\r\n\r\n useEffect(() => {\r\n lastReportedPageRef.current = safePage;\r\n }, [safePage]);\r\n\r\n useEffect(() => {\r\n const stage = stageRef.current;\r\n const pageNode = pageRefs.current.get(safePage);\r\n const shouldScroll = pendingScrollPageRef.current === safePage;\r\n pendingScrollPageRef.current = null;\r\n\r\n if (!stage || !pageNode || !pdf) {\r\n return;\r\n }\r\n\r\n if (!shouldScroll && isPageInView(stage, pageNode)) {\r\n return;\r\n }\r\n\r\n const release = holdScrollSync(stage, skipScrollSyncRef, () => {\r\n const target = pageRefs.current.get(safePage);\r\n if (\r\n explicitScrollPageRef.current === safePage &&\r\n target &&\r\n isPageInView(stage, target)\r\n ) {\r\n explicitScrollPageRef.current = null;\r\n }\r\n });\r\n scrollWithinContainer(stage, pageNode, {\r\n block: \"start\",\r\n behavior: shouldScroll ? \"smooth\" : \"auto\",\r\n });\r\n\r\n return release;\r\n }, [pdf, numPages, safePage, safeScale]);\r\n\r\n useEffect(() => {\r\n const stage = stageRef.current;\r\n if (!stage || !pdf) {\r\n return;\r\n }\r\n\r\n let frame = 0;\r\n\r\n const syncPageFromScroll = () => {\r\n if (skipScrollSyncRef.current) {\r\n return;\r\n }\r\n\r\n const stageRect = stage.getBoundingClientRect();\r\n const anchor = stageRect.top + Math.min(96, stageRect.height * 0.2);\r\n let bestPage = lastReportedPageRef.current;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n for (const [pageNumber, node] of pageRefs.current) {\r\n const distance = Math.abs(node.getBoundingClientRect().top - anchor);\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestPage = pageNumber;\r\n }\r\n }\r\n\r\n const explicitPage = explicitScrollPageRef.current;\r\n if (explicitPage != null && bestPage !== explicitPage) {\r\n return;\r\n }\r\n explicitScrollPageRef.current = null;\r\n\r\n if (bestPage !== lastReportedPageRef.current) {\r\n lastReportedPageRef.current = bestPage;\r\n setPage(bestPage, { scroll: false });\r\n }\r\n };\r\n\r\n const onScroll = () => {\r\n window.cancelAnimationFrame(frame);\r\n frame = window.requestAnimationFrame(syncPageFromScroll);\r\n };\r\n\r\n const onUserScrollIntent = () => {\r\n explicitScrollPageRef.current = null;\r\n skipScrollSyncRef.current = false;\r\n };\r\n\r\n stage.addEventListener(\"scroll\", onScroll, { passive: true });\r\n stage.addEventListener(\"wheel\", onUserScrollIntent, { passive: true });\r\n stage.addEventListener(\"touchstart\", onUserScrollIntent, { passive: true });\r\n stage.addEventListener(\"pointerdown\", onUserScrollIntent);\r\n return () => {\r\n window.cancelAnimationFrame(frame);\r\n stage.removeEventListener(\"scroll\", onScroll);\r\n stage.removeEventListener(\"wheel\", onUserScrollIntent);\r\n stage.removeEventListener(\"touchstart\", onUserScrollIntent);\r\n stage.removeEventListener(\"pointerdown\", onUserScrollIntent);\r\n };\r\n }, [pdf, numPages, setPage]);\r\n\r\n useEffect(() => {\r\n if (pdf && !loading) {\r\n stageRef.current?.focus({ preventScroll: true });\r\n }\r\n }, [loading, pdf]);\r\n\r\n useEffect(() => {\r\n const onWheel = (event: WheelEvent) => {\r\n if (!(event.ctrlKey || event.metaKey)) {\r\n wheelDeltaRef.current = 0;\r\n return;\r\n }\r\n\r\n const root = rootRef.current;\r\n if (!root?.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (!pdf || loading) {\r\n return;\r\n }\r\n\r\n let delta = event.deltaY;\r\n if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {\r\n delta *= 16;\r\n } else if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\r\n delta *= 100;\r\n }\r\n\r\n wheelDeltaRef.current += delta;\r\n if (Math.abs(wheelDeltaRef.current) < SCALE_WHEEL_THRESHOLD) {\r\n return;\r\n }\r\n\r\n const direction = wheelDeltaRef.current > 0 ? -1 : 1;\r\n wheelDeltaRef.current = 0;\r\n\r\n const next = Number((scaleRef.current + direction * SCALE_WHEEL_STEP).toFixed(2));\r\n if (next === scaleRef.current) {\r\n return;\r\n }\r\n\r\n setScaleValue(next);\r\n };\r\n\r\n window.addEventListener(\"wheel\", onWheel, { passive: false, capture: true });\r\n return () => {\r\n window.removeEventListener(\"wheel\", onWheel, { capture: true });\r\n };\r\n }, [loading, pdf, setScaleValue]);\r\n\r\n // Jump to the current search match without scrolling the page/window.\r\n useEffect(() => {\r\n const match = search.currentMatch;\r\n if (!match) {\r\n return;\r\n }\r\n\r\n setPage(match.pageNumber, { scroll: false });\r\n explicitScrollPageRef.current = match.pageNumber;\r\n\r\n const stage = stageRef.current;\r\n if (!stage) {\r\n return;\r\n }\r\n\r\n let cancelled = false;\r\n let attempts = 0;\r\n let frame = 0;\r\n let release = () => {};\r\n\r\n const tryScrollToMatch = () => {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const highlight = stage.querySelector<HTMLElement>(\".rpe-search-highlight-current\");\r\n const pageNode = pageRefs.current.get(match.pageNumber);\r\n const target = highlight ?? pageNode;\r\n\r\n if (!target) {\r\n if (attempts < 30) {\r\n attempts += 1;\r\n frame = window.requestAnimationFrame(tryScrollToMatch);\r\n }\r\n return;\r\n }\r\n\r\n release = holdScrollSync(stage, skipScrollSyncRef, () => {\r\n const arrivedNode = pageRefs.current.get(match.pageNumber);\r\n if (\r\n explicitScrollPageRef.current === match.pageNumber &&\r\n arrivedNode &&\r\n isPageInView(stage, arrivedNode)\r\n ) {\r\n explicitScrollPageRef.current = null;\r\n }\r\n });\r\n scrollWithinContainer(stage, target, {\r\n block: highlight ? \"center\" : \"start\",\r\n behavior: \"smooth\",\r\n });\r\n };\r\n\r\n frame = window.requestAnimationFrame(tryScrollToMatch);\r\n\r\n return () => {\r\n cancelled = true;\r\n window.cancelAnimationFrame(frame);\r\n release();\r\n };\r\n }, [search.currentMatch, setPage]);\r\n\r\n const handleRootKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\r\n const stage = stageRef.current;\r\n if (!stage || !pdf || event.defaultPrevented || event.altKey) {\r\n return;\r\n }\r\n\r\n if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"z\" && !event.shiftKey) {\r\n if (isEditableTarget(event.target) || texts.editingId || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n event.preventDefault();\r\n runUndo();\r\n return;\r\n }\r\n\r\n if (\r\n (event.ctrlKey || event.metaKey) &&\r\n (event.key.toLowerCase() === \"y\" || (event.key.toLowerCase() === \"z\" && event.shiftKey))\r\n ) {\r\n if (isEditableTarget(event.target) || texts.editingId || signatureModalOpen || imageModalOpen) {\r\n return;\r\n }\r\n event.preventDefault();\r\n runRedo();\r\n return;\r\n }\r\n\r\n // Ctrl/Cmd+F for find\r\n if ((event.ctrlKey || event.metaKey) && event.key === \"f\") {\r\n event.preventDefault();\r\n const findInput = rootRef.current?.querySelector<HTMLInputElement>(\".rpe-find-input\");\r\n findInput?.focus();\r\n findInput?.select();\r\n return;\r\n }\r\n\r\n if ((event.ctrlKey || event.metaKey) && (event.key === \"=\" || event.key === \"+\" || event.key === \"-\")) {\r\n event.preventDefault();\r\n const direction = event.key === \"-\" ? -1 : 1;\r\n setScaleValue(Number((safeScale + direction * 0.25).toFixed(2)));\r\n return;\r\n }\r\n\r\n if (event.ctrlKey || event.metaKey) {\r\n return;\r\n }\r\n\r\n if (signatureModalOpen || imageModalOpen) {\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n if (signatureModalOpen) {\r\n setSignatureModalOpen(false);\r\n if (!pendingSignature) {\r\n setActiveTool(\"select\");\r\n }\r\n }\r\n if (imageModalOpen) {\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n if (!pendingImage && !replacingImageId) {\r\n setActiveTool(\"select\");\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (isEditableTarget(event.target)) {\r\n return;\r\n }\r\n\r\n if (event.key === \"Escape\") {\r\n event.preventDefault();\r\n if (pagesOpen) {\r\n setPagesOpen(false);\r\n return;\r\n }\r\n if (propertiesOpen) {\r\n setPropertiesOpen(false);\r\n return;\r\n }\r\n if (texts.editingId) {\r\n texts.stopEdit();\r\n } else if (texts.selectedId) {\r\n texts.select(null);\r\n } else if (drawings.selectedId) {\r\n drawings.select(null);\r\n } else if (highlights.selectedId) {\r\n highlights.select(null);\r\n } else if (signatures.selectedId) {\r\n signatures.select(null);\r\n } else if (images.selectedId) {\r\n images.select(null);\r\n } else if (pendingSignature) {\r\n setPendingSignature(null);\r\n setActiveTool(\"select\");\r\n } else if (pendingImage) {\r\n setPendingImage(null);\r\n setActiveTool(\"select\");\r\n } else if (\r\n activeTool === \"draw\" ||\r\n activeTool === \"highlight\" ||\r\n activeTool === \"signature\" ||\r\n activeTool === \"image\"\r\n ) {\r\n setActiveTool(\"select\");\r\n }\r\n return;\r\n }\r\n\r\n if (event.key === \"Delete\" || event.key === \"Backspace\") {\r\n if (texts.selectedId) {\r\n event.preventDefault();\r\n handleRemoveText(texts.selectedId);\r\n return;\r\n }\r\n if (drawings.selectedId) {\r\n event.preventDefault();\r\n handleRemoveDraw(drawings.selectedId);\r\n return;\r\n }\r\n if (highlights.selectedId) {\r\n event.preventDefault();\r\n handleRemoveHighlight(highlights.selectedId);\r\n return;\r\n }\r\n if (signatures.selectedId) {\r\n event.preventDefault();\r\n handleRemoveSignature(signatures.selectedId);\r\n return;\r\n }\r\n if (images.selectedId) {\r\n event.preventDefault();\r\n handleRemoveImage(images.selectedId);\r\n return;\r\n }\r\n }\r\n\r\n const pageScroll = Math.max(stage.clientHeight * 0.9, KEYBOARD_LINE_SCROLL);\r\n const takeOverStageScroll = () => {\r\n explicitScrollPageRef.current = null;\r\n skipScrollSyncRef.current = false;\r\n };\r\n\r\n switch (event.key) {\r\n case \"ArrowLeft\":\r\n event.preventDefault();\r\n if (safePage > 1) {\r\n setPage(safePage - 1);\r\n }\r\n break;\r\n case \"ArrowRight\":\r\n event.preventDefault();\r\n if (safePage < numPages) {\r\n setPage(safePage + 1);\r\n }\r\n break;\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: KEYBOARD_LINE_SCROLL });\r\n break;\r\n case \"ArrowUp\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: -KEYBOARD_LINE_SCROLL });\r\n break;\r\n case \"PageDown\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: pageScroll });\r\n break;\r\n case \"PageUp\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollBy({ top: -pageScroll });\r\n break;\r\n case \"Home\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollTo({ top: 0 });\r\n break;\r\n case \"End\":\r\n event.preventDefault();\r\n takeOverStageScroll();\r\n stage.scrollTo({ top: stage.scrollHeight });\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const classNames = [\"rpe-root\", compact ? \"rpe-root-compact\" : \"\", className]\r\n .filter(Boolean)\r\n .join(\" \");\r\n const bodyClass = [\r\n \"rpe-body\",\r\n !showSidebar || compact ? \"rpe-body-no-sidebar\" : \"\",\r\n compact ? \"rpe-body-compact\" : \"\",\r\n ]\r\n .filter(Boolean)\r\n .join(\" \");\r\n const sidebarNode = showSidebar\r\n ? sidebar\r\n ? sidebar(sidebarApi)\r\n : <PagesSidebar {...sidebarApi} />\r\n : null;\r\n const propertiesNode = (\r\n <PropertiesPanel\r\n activeTool={activeTool}\r\n selectedText={texts.selectedItem}\r\n selectedStroke={drawings.selectedItem}\r\n selectedHighlight={highlights.selectedItem}\r\n selectedSignature={signatures.selectedItem}\r\n selectedImage={images.selectedItem}\r\n drawColor={drawings.color}\r\n drawWidth={drawings.width}\r\n highlightColor={highlights.color}\r\n onUpdateText={handleUpdateText}\r\n onUpdateSignature={handleUpdateSignature}\r\n onUpdateImage={handleUpdateImage}\r\n onReplaceImage={() => {\r\n if (!images.selectedId) {\r\n return;\r\n }\r\n setReplacingImageId(images.selectedId);\r\n setImageModalOpen(true);\r\n }}\r\n onUpdateStroke={handleUpdateDraw}\r\n onDrawColorChange={handleDrawColorChange}\r\n onDrawWidthChange={handleDrawWidthChange}\r\n onHighlightColorChange={handleHighlightColorChange}\r\n onClose={compact ? () => setPropertiesOpen(false) : undefined}\r\n />\r\n );\r\n\r\n return (\r\n <div\r\n ref={rootRef}\r\n className={classNames}\r\n style={style}\r\n tabIndex={-1}\r\n onKeyDown={handleRootKeyDown}\r\n >\r\n {showToolbar ? (\r\n toolbar ? (\r\n toolbar(toolbarApi)\r\n ) : (\r\n <Toolbar\r\n {...toolbarApi}\r\n compact={compact}\r\n showPagesButton={showSidebar}\r\n pagesOpen={pagesOpen}\r\n onTogglePages={() => setPagesOpen((open) => !open)}\r\n />\r\n )\r\n ) : null}\r\n\r\n <div className={bodyClass}>\r\n {!compact ? sidebarNode : null}\r\n\r\n <div className=\"rpe-stage-wrap\">\r\n {activeTool === \"draw\" ? (\r\n <InkToolbar\r\n color={drawings.color}\r\n width={drawings.width}\r\n onColorChange={handleDrawColorChange}\r\n onWidthChange={handleDrawWidthChange}\r\n />\r\n ) : null}\r\n {activeTool === \"highlight\" ? (\r\n <HighlightToolbar\r\n color={highlights.color}\r\n onColorChange={handleHighlightColorChange}\r\n />\r\n ) : null}\r\n {activeTool === \"signature\" && pendingSignature && !signatureModalOpen ? (\r\n <SignatureToolbar\r\n onChange={() => setSignatureModalOpen(true)}\r\n onCancel={() => {\r\n setPendingSignature(null);\r\n setActiveTool(\"select\");\r\n }}\r\n />\r\n ) : null}\r\n {activeTool === \"image\" && pendingImage && !imageModalOpen ? (\r\n <ImageToolbar\r\n onChange={() => {\r\n setReplacingImageId(null);\r\n setImageModalOpen(true);\r\n }}\r\n onCancel={() => {\r\n setPendingImage(null);\r\n setActiveTool(\"select\");\r\n }}\r\n />\r\n ) : null}\r\n <div\r\n ref={stageRef}\r\n className=\"rpe-stage\"\r\n tabIndex={0}\r\n role=\"region\"\r\n aria-label=\"PDF pages\"\r\n onMouseDown={(event) => {\r\n const onChrome =\r\n event.target instanceof HTMLElement &&\r\n Boolean(\r\n event.target.closest(\r\n \".rpe-text-hit-layer, .rpe-text-frame, .rpe-text-toolbar, .rpe-text-handle, .rpe-rotate-handle, .rpe-ink-toolbar, .rpe-draw-frame, .rpe-draw-stroke, .rpe-draw-hit, .rpe-highlight-frame, .rpe-highlight-toolbar, .rpe-highlight-item-toolbar, .rpe-highlight-hit, .rpe-signature-frame, .rpe-signature-hit-layer, .rpe-image-frame, .rpe-image-hit-layer\",\r\n ),\r\n );\r\n\r\n if (onChrome) {\r\n return;\r\n }\r\n\r\n stageRef.current?.focus({ preventScroll: true });\r\n texts.stopEdit();\r\n texts.select(null);\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }}\r\n >\r\n {!file ? (\r\n <div className=\"rpe-message\">\r\n {emptyState ?? \"Open a PDF to get started.\"}\r\n </div>\r\n ) : null}\r\n\r\n {file && loading && !pdf ? (\r\n <div className=\"rpe-load-status\" role=\"status\">\r\n <div className=\"rpe-load-status-row\">\r\n <span className=\"rpe-load-spinner\" aria-hidden=\"true\" />\r\n <span>\r\n <span aria-live=\"polite\">\r\n {loadPhase === \"downloading\" ? \"Downloading…\" : \"Loading file…\"}\r\n </span>\r\n {loadPhase === \"downloading\" && downloadProgress != null ? (\r\n <span className=\"rpe-load-percent\" aria-hidden=\"true\">\r\n {\" \"}\r\n {downloadProgress}%\r\n </span>\r\n ) : null}\r\n </span>\r\n </div>\r\n {loadPhase === \"downloading\" && downloadProgress != null ? (\r\n <div className=\"rpe-load-bar\" aria-hidden=\"true\">\r\n <div style={{ width: `${downloadProgress}%` }} />\r\n </div>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n\r\n {file && error && !pdf ? (\r\n <div className=\"rpe-message rpe-message-error\" role=\"alert\">\r\n {error.message}\r\n </div>\r\n ) : null}\r\n\r\n {pdf ? (\r\n <div className=\"rpe-stage-pages\">\r\n {pageNumbers.map((pageNumber) => {\r\n const pageMatches = search.matches.filter(\r\n (m) => m.pageNumber === pageNumber,\r\n );\r\n \r\n // Find which match on this page is the current one\r\n let currentMatchIndexOnPage = -1;\r\n if (search.currentMatch && search.currentMatch.pageNumber === pageNumber) {\r\n const pageMatchesStartIndex = search.matches.findIndex(\r\n (m) => m.pageNumber === pageNumber,\r\n );\r\n if (pageMatchesStartIndex !== -1) {\r\n currentMatchIndexOnPage = search.currentIndex - pageMatchesStartIndex;\r\n }\r\n }\r\n\r\n return (\r\n <div\r\n key={pageNumber}\r\n className={\r\n pageNumber === enteringPage\r\n ? \"rpe-page-slot rpe-page-slot-added\"\r\n : \"rpe-page-slot\"\r\n }\r\n ref={(node) => assignPageRef(pageNumber, node)}\r\n >\r\n <PdfPage\r\n pdf={pdf}\r\n pageNumber={pageNumber}\r\n scale={safeScale}\r\n justAdded={pageNumber === enteringPage}\r\n estimatedSize={\r\n pageNumber === enteringPage\r\n ? readPageSlotSize(pageRefs.current.get(pageNumber - 1)) ??\r\n readPageSlotSize(pageRefs.current.get(pageNumber + 1))\r\n : undefined\r\n }\r\n searchMatches={pageMatches}\r\n currentSearchMatchIndex={currentMatchIndexOnPage}\r\n activeTool={activeTool}\r\n textAnnotations={texts.items}\r\n selectedTextId={texts.selectedId}\r\n editingTextId={texts.editingId}\r\n onAddTextAnnotation={handleAddText}\r\n onUpdateTextAnnotation={handleUpdateText}\r\n onSelectTextAnnotation={(id) => {\r\n texts.select(id);\r\n if (id) {\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onStartEditText={handleStartEditText}\r\n onStopEditText={handleStopEditText}\r\n onRemoveTextAnnotation={handleRemoveText}\r\n drawStrokes={drawings.items}\r\n selectedDrawId={drawings.selectedId}\r\n drawColor={drawings.color}\r\n drawWidth={drawings.width}\r\n onAddDrawStroke={handleAddDraw}\r\n onUpdateDrawStroke={handleUpdateDraw}\r\n onSelectDrawStroke={(id) => {\r\n drawings.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onRemoveDrawStroke={handleRemoveDraw}\r\n highlights={highlights.items}\r\n selectedHighlightId={highlights.selectedId}\r\n highlightColor={highlights.color}\r\n onAddHighlight={handleAddHighlight}\r\n onSelectHighlight={(id) => {\r\n highlights.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onUpdateHighlight={handleUpdateHighlight}\r\n onRemoveHighlight={handleRemoveHighlight}\r\n onHighlightColorChange={handleHighlightColorChange}\r\n signatures={signatures.items}\r\n selectedSignatureId={signatures.selectedId}\r\n pendingSignature={pendingSignature}\r\n onAddSignature={handleAddSignature}\r\n onUpdateSignature={handleUpdateSignature}\r\n onSelectSignature={(id) => {\r\n signatures.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n images.select(null);\r\n }\r\n }}\r\n onRemoveSignature={handleRemoveSignature}\r\n images={images.items}\r\n selectedImageId={images.selectedId}\r\n pendingImage={pendingImage}\r\n onAddImage={handleAddImage}\r\n onUpdateImage={handleUpdateImage}\r\n onSelectImage={(id) => {\r\n images.select(id);\r\n if (id) {\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n }\r\n }}\r\n onRemoveImage={handleRemoveImage}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n ) : null}\r\n </div>\r\n </div>\r\n\r\n {!compact ? propertiesNode : null}\r\n </div>\r\n\r\n {compact && showSidebar && toolbar ? (\r\n <button\r\n type=\"button\"\r\n className={`rpe-pages-fab${pagesOpen ? \" rpe-tool-button-active\" : \"\"}`}\r\n aria-label={pagesOpen ? \"Close pages\" : \"Open pages\"}\r\n aria-expanded={pagesOpen}\r\n aria-controls=\"rpe-pages-drawer\"\r\n onClick={() => setPagesOpen((open) => !open)}\r\n >\r\n <PanelLeftIcon />\r\n </button>\r\n ) : null}\r\n\r\n {compact && showSidebar ? (\r\n <div\r\n id=\"rpe-pages-drawer\"\r\n className={`rpe-drawer${pagesOpen ? \" rpe-drawer-open\" : \"\"}`}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"rpe-drawer-backdrop\"\r\n aria-label=\"Close pages\"\r\n tabIndex={pagesOpen ? 0 : -1}\r\n onClick={() => setPagesOpen(false)}\r\n />\r\n <div\r\n className=\"rpe-drawer-panel\"\r\n role=\"dialog\"\r\n aria-label=\"Pages\"\r\n aria-hidden={!pagesOpen}\r\n inert={!pagesOpen || undefined}\r\n >\r\n <div className=\"rpe-drawer-header\">\r\n <span>Pages</span>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-drawer-close\"\r\n aria-label=\"Close pages\"\r\n onClick={() => setPagesOpen(false)}\r\n >\r\n <XIcon />\r\n </button>\r\n </div>\r\n {sidebarNode}\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {compact ? (\r\n <>\r\n {selectedAnnotationId && !propertiesOpen ? (\r\n <button\r\n type=\"button\"\r\n className=\"rpe-sheet-handle\"\r\n onClick={() => setPropertiesOpen(true)}\r\n >\r\n Properties\r\n </button>\r\n ) : null}\r\n <div className={`rpe-sheet${propertiesOpen ? \" rpe-sheet-open\" : \"\"}`}>\r\n <button\r\n type=\"button\"\r\n className=\"rpe-sheet-backdrop\"\r\n aria-label=\"Close properties\"\r\n tabIndex={propertiesOpen ? 0 : -1}\r\n onClick={() => setPropertiesOpen(false)}\r\n />\r\n <div\r\n className=\"rpe-sheet-panel\"\r\n role=\"dialog\"\r\n aria-label=\"Properties\"\r\n aria-hidden={!propertiesOpen}\r\n inert={!propertiesOpen || undefined}\r\n >\r\n {propertiesNode}\r\n </div>\r\n </div>\r\n </>\r\n ) : null}\r\n\r\n {signatureModalOpen ? (\r\n <SignatureModal\r\n onApply={(src) => {\r\n void toPendingSignature(src)\r\n .catch(() => ({ src, aspect: 2.5 }))\r\n .then((pending) => {\r\n setPendingSignature(pending);\r\n setActiveTool(\"signature\");\r\n setSignatureModalOpen(false);\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n });\r\n }}\r\n onClose={() => {\r\n setSignatureModalOpen(false);\r\n if (!pendingSignature) {\r\n setActiveTool(\"select\");\r\n }\r\n }}\r\n />\r\n ) : null}\r\n\r\n {imageModalOpen ? (\r\n <ImageModal\r\n onApply={(src, name) => {\r\n void toPendingImage(src, name)\r\n .catch(() => ({ src, aspect: 1.5, name }))\r\n .then((pending) => {\r\n if (replacingImageId) {\r\n handleReplaceImage(replacingImageId, pending.src);\r\n setReplacingImageId(null);\r\n setImageModalOpen(false);\r\n return;\r\n }\r\n\r\n setPendingImage(pending);\r\n setActiveTool(\"image\");\r\n setImageModalOpen(false);\r\n texts.select(null);\r\n texts.stopEdit();\r\n drawings.select(null);\r\n highlights.select(null);\r\n signatures.select(null);\r\n images.select(null);\r\n });\r\n }}\r\n onClose={() => {\r\n setImageModalOpen(false);\r\n setReplacingImageId(null);\r\n if (!pendingImage && !replacingImageId) {\r\n setActiveTool(\"select\");\r\n }\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n}\r\n"]}
|