react-pdf-highlighter-plus 1.0.3 → 1.0.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.
Files changed (85) hide show
  1. package/dist/esm/index.d.ts +1348 -19
  2. package/dist/esm/index.js +3557 -18
  3. package/dist/esm/index.js.map +1 -1
  4. package/package.json +3 -2
  5. package/dist/esm/components/AreaHighlight.d.ts +0 -82
  6. package/dist/esm/components/AreaHighlight.js +0 -109
  7. package/dist/esm/components/AreaHighlight.js.map +0 -1
  8. package/dist/esm/components/DrawingCanvas.d.ts +0 -48
  9. package/dist/esm/components/DrawingCanvas.js +0 -277
  10. package/dist/esm/components/DrawingCanvas.js.map +0 -1
  11. package/dist/esm/components/DrawingHighlight.d.ts +0 -70
  12. package/dist/esm/components/DrawingHighlight.js +0 -164
  13. package/dist/esm/components/DrawingHighlight.js.map +0 -1
  14. package/dist/esm/components/FreetextHighlight.d.ts +0 -112
  15. package/dist/esm/components/FreetextHighlight.js +0 -193
  16. package/dist/esm/components/FreetextHighlight.js.map +0 -1
  17. package/dist/esm/components/HighlightLayer.d.ts +0 -49
  18. package/dist/esm/components/HighlightLayer.js +0 -37
  19. package/dist/esm/components/HighlightLayer.js.map +0 -1
  20. package/dist/esm/components/ImageHighlight.d.ts +0 -63
  21. package/dist/esm/components/ImageHighlight.js +0 -65
  22. package/dist/esm/components/ImageHighlight.js.map +0 -1
  23. package/dist/esm/components/MonitoredHighlightContainer.d.ts +0 -37
  24. package/dist/esm/components/MonitoredHighlightContainer.js +0 -42
  25. package/dist/esm/components/MonitoredHighlightContainer.js.map +0 -1
  26. package/dist/esm/components/MouseMonitor.d.ts +0 -34
  27. package/dist/esm/components/MouseMonitor.js +0 -30
  28. package/dist/esm/components/MouseMonitor.js.map +0 -1
  29. package/dist/esm/components/MouseSelection.d.ts +0 -66
  30. package/dist/esm/components/MouseSelection.js +0 -122
  31. package/dist/esm/components/MouseSelection.js.map +0 -1
  32. package/dist/esm/components/PdfHighlighter.d.ts +0 -184
  33. package/dist/esm/components/PdfHighlighter.js +0 -410
  34. package/dist/esm/components/PdfHighlighter.js.map +0 -1
  35. package/dist/esm/components/PdfLoader.d.ts +0 -55
  36. package/dist/esm/components/PdfLoader.js +0 -57
  37. package/dist/esm/components/PdfLoader.js.map +0 -1
  38. package/dist/esm/components/ShapeCanvas.d.ts +0 -51
  39. package/dist/esm/components/ShapeCanvas.js +0 -205
  40. package/dist/esm/components/ShapeCanvas.js.map +0 -1
  41. package/dist/esm/components/ShapeHighlight.d.ts +0 -107
  42. package/dist/esm/components/ShapeHighlight.js +0 -140
  43. package/dist/esm/components/ShapeHighlight.js.map +0 -1
  44. package/dist/esm/components/SignaturePad.d.ts +0 -40
  45. package/dist/esm/components/SignaturePad.js +0 -138
  46. package/dist/esm/components/SignaturePad.js.map +0 -1
  47. package/dist/esm/components/TextHighlight.d.ts +0 -93
  48. package/dist/esm/components/TextHighlight.js +0 -115
  49. package/dist/esm/components/TextHighlight.js.map +0 -1
  50. package/dist/esm/components/TipContainer.d.ts +0 -27
  51. package/dist/esm/components/TipContainer.js +0 -58
  52. package/dist/esm/components/TipContainer.js.map +0 -1
  53. package/dist/esm/contexts/HighlightContext.d.ts +0 -44
  54. package/dist/esm/contexts/HighlightContext.js +0 -16
  55. package/dist/esm/contexts/HighlightContext.js.map +0 -1
  56. package/dist/esm/contexts/PdfHighlighterContext.d.ts +0 -89
  57. package/dist/esm/contexts/PdfHighlighterContext.js +0 -16
  58. package/dist/esm/contexts/PdfHighlighterContext.js.map +0 -1
  59. package/dist/esm/lib/coordinates.d.ts +0 -16
  60. package/dist/esm/lib/coordinates.js +0 -69
  61. package/dist/esm/lib/coordinates.js.map +0 -1
  62. package/dist/esm/lib/export-pdf.d.ts +0 -81
  63. package/dist/esm/lib/export-pdf.js +0 -511
  64. package/dist/esm/lib/export-pdf.js.map +0 -1
  65. package/dist/esm/lib/get-bounding-rect.d.ts +0 -3
  66. package/dist/esm/lib/get-bounding-rect.js +0 -35
  67. package/dist/esm/lib/get-bounding-rect.js.map +0 -1
  68. package/dist/esm/lib/get-client-rects.d.ts +0 -3
  69. package/dist/esm/lib/get-client-rects.js +0 -43
  70. package/dist/esm/lib/get-client-rects.js.map +0 -1
  71. package/dist/esm/lib/group-highlights-by-page.d.ts +0 -6
  72. package/dist/esm/lib/group-highlights-by-page.js +0 -23
  73. package/dist/esm/lib/group-highlights-by-page.js.map +0 -1
  74. package/dist/esm/lib/optimize-client-rects.d.ts +0 -3
  75. package/dist/esm/lib/optimize-client-rects.js +0 -65
  76. package/dist/esm/lib/optimize-client-rects.js.map +0 -1
  77. package/dist/esm/lib/pdfjs-dom.d.ts +0 -9
  78. package/dist/esm/lib/pdfjs-dom.js +0 -55
  79. package/dist/esm/lib/pdfjs-dom.js.map +0 -1
  80. package/dist/esm/lib/screenshot.d.ts +0 -4
  81. package/dist/esm/lib/screenshot.js +0 -24
  82. package/dist/esm/lib/screenshot.js.map +0 -1
  83. package/dist/esm/types.d.ts +0 -213
  84. package/dist/esm/types.js +0 -2
  85. package/dist/esm/types.js.map +0 -1
@@ -1,184 +0,0 @@
1
- import "pdfjs-dist/web/pdf_viewer.css";
2
- import "../style/PdfHighlighter.css";
3
- import "../style/pdf_viewer.css";
4
- import { PDFDocumentProxy } from "pdfjs-dist";
5
- import React, { CSSProperties, ReactNode } from "react";
6
- import { PdfHighlighterUtils } from "../contexts/PdfHighlighterContext";
7
- import { DrawingStroke, GhostHighlight, Highlight, PdfScaleValue, PdfSelection, ScaledPosition, ShapeData, ShapeType } from "../types";
8
- /**
9
- * The props type for {@link PdfHighlighter}.
10
- *
11
- * @category Component Properties
12
- */
13
- export interface PdfHighlighterProps {
14
- /**
15
- * Array of all highlights to be organised and fed through to the child
16
- * highlight container.
17
- */
18
- highlights: Array<Highlight>;
19
- /**
20
- * Event is called only once whenever the user changes scroll after
21
- * the autoscroll function, scrollToHighlight, has been called.
22
- */
23
- onScrollAway?(): void;
24
- /**
25
- * What scale to render the PDF at inside the viewer.
26
- */
27
- pdfScaleValue?: PdfScaleValue;
28
- /**
29
- * Callback triggered whenever a user finishes making a mouse selection or has
30
- * selected text.
31
- *
32
- * @param PdfSelection - Content and positioning of the selection. NOTE:
33
- * `makeGhostHighlight` will not work if the selection disappears.
34
- */
35
- onSelection?(PdfSelection: PdfSelection): void;
36
- /**
37
- * Callback triggered whenever a ghost (non-permanent) highlight is created.
38
- *
39
- * @param ghostHighlight - Ghost Highlight that has been created.
40
- */
41
- onCreateGhostHighlight?(ghostHighlight: GhostHighlight): void;
42
- /**
43
- * Callback triggered whenever a ghost (non-permanent) highlight is removed.
44
- *
45
- * @param ghostHighlight - Ghost Highlight that has been removed.
46
- */
47
- onRemoveGhostHighlight?(ghostHighlight: GhostHighlight): void;
48
- /**
49
- * Optional element that can be displayed as a tip whenever a user makes a
50
- * selection.
51
- */
52
- selectionTip?: ReactNode;
53
- /**
54
- * Condition to check before any mouse selection starts.
55
- *
56
- * @param event - mouse event associated with the new selection.
57
- * @returns - `True` if mouse selection should start.
58
- */
59
- enableAreaSelection?(event: MouseEvent): boolean;
60
- /**
61
- * When true, shows crosshair cursor indicating area selection mode is active.
62
- * Use this when area selection should be persistently enabled (not just on modifier key).
63
- */
64
- areaSelectionMode?: boolean;
65
- /**
66
- * Optional CSS styling for the rectangular mouse selection.
67
- */
68
- mouseSelectionStyle?: CSSProperties;
69
- /**
70
- * PDF document to view and overlay highlights.
71
- */
72
- pdfDocument: PDFDocumentProxy;
73
- /**
74
- * This should be a highlight container/renderer of some sorts. It will be
75
- * given appropriate context for a single highlight which it can then use to
76
- * render a TextHighlight, AreaHighlight, etc. in the correct place.
77
- */
78
- children: ReactNode;
79
- /**
80
- * Coloring for unhighlighted, selected text.
81
- */
82
- textSelectionColor?: string;
83
- /**
84
- * Creates a reference to the PdfHighlighterContext above the component.
85
- *
86
- * @param pdfHighlighterUtils - various useful tools with a PdfHighlighter.
87
- * See {@link PdfHighlighterContext} for more description.
88
- */
89
- utilsRef(pdfHighlighterUtils: PdfHighlighterUtils): void;
90
- /**
91
- * Style properties for the PdfHighlighter (scrollbar, background, etc.), NOT
92
- * the PDF.js viewer it encloses. If you want to edit the latter, use the
93
- * other style props like `textSelectionColor` or overwrite pdf_viewer.css
94
- */
95
- style?: CSSProperties;
96
- /**
97
- * Condition to check before freetext creation starts.
98
- *
99
- * @param event - mouse event associated with the click.
100
- * @returns - `True` if freetext creation should occur.
101
- */
102
- enableFreetextCreation?(event: MouseEvent): boolean;
103
- /**
104
- * Callback triggered when user clicks to create a freetext annotation.
105
- *
106
- * @param position - Scaled position where the click occurred.
107
- */
108
- onFreetextClick?(position: ScaledPosition): void;
109
- /**
110
- * Condition to check before image creation starts.
111
- *
112
- * @param event - mouse event associated with the click.
113
- * @returns - `True` if image creation should occur.
114
- */
115
- enableImageCreation?(event: MouseEvent): boolean;
116
- /**
117
- * Callback triggered when user clicks to create an image annotation.
118
- *
119
- * @param position - Scaled position where the click occurred.
120
- */
121
- onImageClick?(position: ScaledPosition): void;
122
- /**
123
- * Whether drawing mode is enabled.
124
- */
125
- enableDrawingMode?: boolean;
126
- /**
127
- * Callback triggered when a drawing is completed.
128
- *
129
- * @param dataUrl - The drawing as a PNG data URL.
130
- * @param position - Scaled position of the drawing on the page.
131
- * @param strokes - The stroke data for later editing.
132
- */
133
- onDrawingComplete?(dataUrl: string, position: ScaledPosition, strokes: DrawingStroke[]): void;
134
- /**
135
- * Callback triggered when drawing is cancelled.
136
- */
137
- onDrawingCancel?(): void;
138
- /**
139
- * Stroke color for drawing mode.
140
- * @default "#000000"
141
- */
142
- drawingStrokeColor?: string;
143
- /**
144
- * Stroke width for drawing mode.
145
- * @default 3
146
- */
147
- drawingStrokeWidth?: number;
148
- /**
149
- * The type of shape to create, or null if shape mode is not active.
150
- */
151
- enableShapeMode?: ShapeType | null;
152
- /**
153
- * Callback triggered when a shape is completed.
154
- *
155
- * @param position - Scaled position of the shape on the page.
156
- * @param shape - The shape data (type, color, width).
157
- */
158
- onShapeComplete?(position: ScaledPosition, shape: ShapeData): void;
159
- /**
160
- * Callback triggered when shape creation is cancelled.
161
- */
162
- onShapeCancel?(): void;
163
- /**
164
- * Stroke color for shape mode.
165
- * @default "#000000"
166
- */
167
- shapeStrokeColor?: string;
168
- /**
169
- * Stroke width for shape mode.
170
- * @default 2
171
- */
172
- shapeStrokeWidth?: number;
173
- }
174
- /**
175
- * This is a large-scale PDF viewer component designed to facilitate
176
- * highlighting. It should be used as a child to a {@link PdfLoader} to ensure
177
- * proper document loading. This does not itself render any highlights, but
178
- * instead its child should be the container component for each individual
179
- * highlight. This component will be provided appropriate HighlightContext for
180
- * rendering.
181
- *
182
- * @category Component
183
- */
184
- export declare const PdfHighlighter: ({ highlights, onScrollAway, pdfScaleValue, onSelection: onSelectionFinished, onCreateGhostHighlight, onRemoveGhostHighlight, selectionTip, enableAreaSelection, areaSelectionMode, mouseSelectionStyle, pdfDocument, children, textSelectionColor, utilsRef, style, enableFreetextCreation, onFreetextClick, enableImageCreation, onImageClick, enableDrawingMode, onDrawingComplete, onDrawingCancel, drawingStrokeColor, drawingStrokeWidth, enableShapeMode, onShapeComplete, onShapeCancel, shapeStrokeColor, shapeStrokeWidth, }: PdfHighlighterProps) => React.JSX.Element;
@@ -1,410 +0,0 @@
1
- import "pdfjs-dist/web/pdf_viewer.css";
2
- import "../style/PdfHighlighter.css";
3
- import "../style/pdf_viewer.css";
4
- import debounce from "lodash.debounce";
5
- import React, { useLayoutEffect, useRef, useState, } from "react";
6
- import { createRoot } from "react-dom/client";
7
- import { PdfHighlighterContext, } from "../contexts/PdfHighlighterContext";
8
- import { scaledToViewport, viewportPositionToScaled } from "../lib/coordinates";
9
- import getBoundingRect from "../lib/get-bounding-rect";
10
- import getClientRects from "../lib/get-client-rects";
11
- import groupHighlightsByPage from "../lib/group-highlights-by-page";
12
- import { asElement, findOrCreateContainerLayer, getPageFromElement, getPagesFromRange, getWindow, isHTMLElement, } from "../lib/pdfjs-dom";
13
- import { DrawingCanvas } from "./DrawingCanvas";
14
- import { HighlightLayer } from "./HighlightLayer";
15
- import { MouseSelection } from "./MouseSelection";
16
- import { ShapeCanvas } from "./ShapeCanvas";
17
- import { TipContainer } from "./TipContainer";
18
- let EventBus, PDFLinkService, PDFViewer;
19
- (async () => {
20
- // Due to breaking changes in PDF.js 4.0.189. See issue #17228
21
- const pdfjs = await import("pdfjs-dist/web/pdf_viewer.mjs");
22
- EventBus = pdfjs.EventBus;
23
- PDFLinkService = pdfjs.PDFLinkService;
24
- PDFViewer = pdfjs.PDFViewer;
25
- })();
26
- const SCROLL_MARGIN = 10;
27
- const DEFAULT_SCALE_VALUE = "auto";
28
- const DEFAULT_TEXT_SELECTION_COLOR = "rgba(153,193,218,255)";
29
- const findOrCreateHighlightLayer = (textLayer) => {
30
- return findOrCreateContainerLayer(textLayer, "PdfHighlighter__highlight-layer");
31
- };
32
- const disableTextSelection = (viewer, flag) => {
33
- viewer.viewer?.classList.toggle("PdfHighlighter--disable-selection", flag);
34
- };
35
- /**
36
- * This is a large-scale PDF viewer component designed to facilitate
37
- * highlighting. It should be used as a child to a {@link PdfLoader} to ensure
38
- * proper document loading. This does not itself render any highlights, but
39
- * instead its child should be the container component for each individual
40
- * highlight. This component will be provided appropriate HighlightContext for
41
- * rendering.
42
- *
43
- * @category Component
44
- */
45
- export const PdfHighlighter = ({ highlights, onScrollAway, pdfScaleValue = DEFAULT_SCALE_VALUE, onSelection: onSelectionFinished, onCreateGhostHighlight, onRemoveGhostHighlight, selectionTip, enableAreaSelection, areaSelectionMode, mouseSelectionStyle, pdfDocument, children, textSelectionColor = DEFAULT_TEXT_SELECTION_COLOR, utilsRef, style, enableFreetextCreation, onFreetextClick, enableImageCreation, onImageClick, enableDrawingMode, onDrawingComplete, onDrawingCancel, drawingStrokeColor = "#000000", drawingStrokeWidth = 3, enableShapeMode, onShapeComplete, onShapeCancel, shapeStrokeColor = "#000000", shapeStrokeWidth = 2, }) => {
46
- // State
47
- const [tip, setTip] = useState(null);
48
- const [isViewerReady, setIsViewerReady] = useState(false);
49
- // Refs
50
- const containerNodeRef = useRef(null);
51
- const highlightBindingsRef = useRef({});
52
- const ghostHighlightRef = useRef(null);
53
- const selectionRef = useRef(null);
54
- const scrolledToHighlightIdRef = useRef(null);
55
- const isAreaSelectionInProgressRef = useRef(false);
56
- const isEditInProgressRef = useRef(false);
57
- const updateTipPositionRef = useRef(() => { });
58
- const eventBusRef = useRef(new EventBus());
59
- const linkServiceRef = useRef(new PDFLinkService({
60
- eventBus: eventBusRef.current,
61
- externalLinkTarget: 2,
62
- }));
63
- const resizeObserverRef = useRef(null);
64
- const viewerRef = useRef(null);
65
- // Initialise PDF Viewer
66
- useLayoutEffect(() => {
67
- if (!containerNodeRef.current)
68
- return;
69
- const debouncedDocumentInit = debounce(() => {
70
- viewerRef.current =
71
- viewerRef.current ||
72
- new PDFViewer({
73
- container: containerNodeRef.current,
74
- eventBus: eventBusRef.current,
75
- textLayerMode: 2,
76
- removePageBorders: true,
77
- linkService: linkServiceRef.current,
78
- });
79
- viewerRef.current.setDocument(pdfDocument);
80
- linkServiceRef.current.setDocument(pdfDocument);
81
- linkServiceRef.current.setViewer(viewerRef.current);
82
- setIsViewerReady(true);
83
- }, 100);
84
- debouncedDocumentInit();
85
- return () => {
86
- debouncedDocumentInit.cancel();
87
- };
88
- }, [document]);
89
- // Initialise viewer event listeners
90
- useLayoutEffect(() => {
91
- if (!containerNodeRef.current)
92
- return;
93
- resizeObserverRef.current = new ResizeObserver(handleScaleValue);
94
- resizeObserverRef.current.observe(containerNodeRef.current);
95
- const doc = containerNodeRef.current.ownerDocument;
96
- eventBusRef.current.on("textlayerrendered", renderHighlightLayers);
97
- eventBusRef.current.on("pagesinit", handleScaleValue);
98
- doc.addEventListener("keydown", handleKeyDown);
99
- renderHighlightLayers();
100
- return () => {
101
- eventBusRef.current.off("pagesinit", handleScaleValue);
102
- eventBusRef.current.off("textlayerrendered", renderHighlightLayers);
103
- doc.removeEventListener("keydown", handleKeyDown);
104
- resizeObserverRef.current?.disconnect();
105
- };
106
- }, [selectionTip, highlights, onSelectionFinished]);
107
- // Event listeners
108
- const handleScroll = () => {
109
- onScrollAway && onScrollAway();
110
- scrolledToHighlightIdRef.current = null;
111
- renderHighlightLayers();
112
- };
113
- const handleMouseUp = () => {
114
- const container = containerNodeRef.current;
115
- const selection = getWindow(container).getSelection();
116
- if (!container || !selection || selection.isCollapsed || !viewerRef.current)
117
- return;
118
- const range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null;
119
- // Check the selected text is in the document, not the tip
120
- if (!range || !container.contains(range.commonAncestorContainer))
121
- return;
122
- const pages = getPagesFromRange(range);
123
- if (!pages || pages.length === 0)
124
- return;
125
- const rects = getClientRects(range, pages);
126
- if (rects.length === 0)
127
- return;
128
- const viewportPosition = {
129
- boundingRect: getBoundingRect(rects),
130
- rects,
131
- };
132
- const scaledPosition = viewportPositionToScaled(viewportPosition, viewerRef.current);
133
- const content = {
134
- text: selection.toString().split("\n").join(" "), // Make all line breaks spaces
135
- };
136
- selectionRef.current = {
137
- content,
138
- type: "text",
139
- position: scaledPosition,
140
- makeGhostHighlight: () => {
141
- ghostHighlightRef.current = {
142
- content: content,
143
- type: "text",
144
- position: scaledPosition,
145
- };
146
- onCreateGhostHighlight &&
147
- onCreateGhostHighlight(ghostHighlightRef.current);
148
- clearTextSelection();
149
- renderHighlightLayers();
150
- return ghostHighlightRef.current;
151
- },
152
- };
153
- onSelectionFinished && onSelectionFinished(selectionRef.current);
154
- selectionTip &&
155
- setTip({ position: viewportPosition, content: selectionTip });
156
- };
157
- const handleMouseDown = (event) => {
158
- if (!isHTMLElement(event.target) ||
159
- asElement(event.target).closest(".PdfHighlighter__tip-container") // Ignore selections on tip container
160
- ) {
161
- return;
162
- }
163
- // Check for freetext creation mode
164
- if (enableFreetextCreation?.(event.nativeEvent) &&
165
- onFreetextClick &&
166
- !isEditInProgressRef.current) {
167
- const target = asElement(event.target);
168
- const page = getPageFromElement(target);
169
- if (page && viewerRef.current) {
170
- const pageRect = page.node.getBoundingClientRect();
171
- const clickX = event.clientX - pageRect.left;
172
- const clickY = event.clientY - pageRect.top;
173
- // Default size for new freetext note
174
- const defaultWidth = 150;
175
- const defaultHeight = 80;
176
- const viewportPosition = {
177
- boundingRect: {
178
- left: clickX,
179
- top: clickY,
180
- width: defaultWidth,
181
- height: defaultHeight,
182
- pageNumber: page.number,
183
- },
184
- rects: [],
185
- };
186
- const scaledPosition = viewportPositionToScaled(viewportPosition, viewerRef.current);
187
- onFreetextClick(scaledPosition);
188
- return; // Don't proceed with normal mousedown handling
189
- }
190
- }
191
- // Check for image creation mode
192
- if (enableImageCreation?.(event.nativeEvent) &&
193
- onImageClick &&
194
- !isEditInProgressRef.current) {
195
- const target = asElement(event.target);
196
- const page = getPageFromElement(target);
197
- if (page && viewerRef.current) {
198
- const pageRect = page.node.getBoundingClientRect();
199
- const clickX = event.clientX - pageRect.left;
200
- const clickY = event.clientY - pageRect.top;
201
- // Default size for new image
202
- const defaultWidth = 150;
203
- const defaultHeight = 100;
204
- const viewportPosition = {
205
- boundingRect: {
206
- left: clickX,
207
- top: clickY,
208
- width: defaultWidth,
209
- height: defaultHeight,
210
- pageNumber: page.number,
211
- },
212
- rects: [],
213
- };
214
- const scaledPosition = viewportPositionToScaled(viewportPosition, viewerRef.current);
215
- onImageClick(scaledPosition);
216
- return; // Don't proceed with normal mousedown handling
217
- }
218
- }
219
- setTip(null);
220
- clearTextSelection(); // TODO: Check if clearing text selection only if not clicking on tip breaks anything.
221
- removeGhostHighlight();
222
- toggleEditInProgress(false);
223
- };
224
- const handleKeyDown = (event) => {
225
- if (event.code === "Escape") {
226
- clearTextSelection();
227
- removeGhostHighlight();
228
- setTip(null);
229
- }
230
- };
231
- const handleScaleValue = () => {
232
- if (viewerRef.current) {
233
- viewerRef.current.currentScaleValue = pdfScaleValue.toString();
234
- }
235
- };
236
- // Render Highlight layers
237
- const renderHighlightLayer = (highlightBindings, pageNumber) => {
238
- if (!viewerRef.current)
239
- return;
240
- highlightBindings.reactRoot.render(React.createElement(PdfHighlighterContext.Provider, { value: pdfHighlighterUtils },
241
- React.createElement(HighlightLayer, { highlightsByPage: groupHighlightsByPage([
242
- ...highlights,
243
- ghostHighlightRef.current,
244
- ]), pageNumber: pageNumber, scrolledToHighlightId: scrolledToHighlightIdRef.current, viewer: viewerRef.current, highlightBindings: highlightBindings, children: children })));
245
- };
246
- const renderHighlightLayers = () => {
247
- if (!viewerRef.current)
248
- return;
249
- for (let pageNumber = 1; pageNumber <= pdfDocument.numPages; pageNumber++) {
250
- const highlightBindings = highlightBindingsRef.current[pageNumber];
251
- // Need to check if container is still attached to the DOM as PDF.js can unload pages.
252
- if (highlightBindings?.container?.isConnected) {
253
- renderHighlightLayer(highlightBindings, pageNumber);
254
- }
255
- else {
256
- const { textLayer } = viewerRef.current.getPageView(pageNumber - 1) || {};
257
- if (!textLayer)
258
- continue; // Viewer hasn't rendered page yet
259
- // textLayer.div for version >=3.0 and textLayer.textLayerDiv otherwise.
260
- const highlightLayer = findOrCreateHighlightLayer(textLayer.div);
261
- if (highlightLayer) {
262
- const reactRoot = createRoot(highlightLayer);
263
- highlightBindingsRef.current[pageNumber] = {
264
- reactRoot,
265
- container: highlightLayer,
266
- textLayer: textLayer.div, // textLayer.div for version >=3.0 and textLayer.textLayerDiv otherwise.
267
- };
268
- renderHighlightLayer(highlightBindingsRef.current[pageNumber], pageNumber);
269
- }
270
- }
271
- }
272
- };
273
- // Utils
274
- const isEditingOrHighlighting = () => {
275
- return (Boolean(selectionRef.current) ||
276
- Boolean(ghostHighlightRef.current) ||
277
- isAreaSelectionInProgressRef.current ||
278
- isEditInProgressRef.current);
279
- };
280
- const toggleEditInProgress = (flag) => {
281
- if (flag !== undefined) {
282
- isEditInProgressRef.current = flag;
283
- }
284
- else {
285
- isEditInProgressRef.current = !isEditInProgressRef.current;
286
- }
287
- // Disable text selection
288
- if (viewerRef.current)
289
- viewerRef.current.viewer?.classList.toggle("PdfHighlighter--disable-selection", isEditInProgressRef.current);
290
- };
291
- const removeGhostHighlight = () => {
292
- if (onRemoveGhostHighlight && ghostHighlightRef.current)
293
- onRemoveGhostHighlight(ghostHighlightRef.current);
294
- ghostHighlightRef.current = null;
295
- renderHighlightLayers();
296
- };
297
- const clearTextSelection = () => {
298
- selectionRef.current = null;
299
- const container = containerNodeRef.current;
300
- const selection = getWindow(container).getSelection();
301
- if (!container || !selection)
302
- return;
303
- selection.removeAllRanges();
304
- };
305
- const scrollToHighlight = (highlight) => {
306
- const { boundingRect, usePdfCoordinates } = highlight.position;
307
- const pageNumber = boundingRect.pageNumber;
308
- // Remove scroll listener in case user auto-scrolls in succession.
309
- viewerRef.current.container.removeEventListener("scroll", handleScroll);
310
- const pageViewport = viewerRef.current.getPageView(pageNumber - 1).viewport;
311
- viewerRef.current.scrollPageIntoView({
312
- pageNumber,
313
- destArray: [
314
- null, // null since we pass pageNumber already as an arg
315
- { name: "XYZ" },
316
- ...pageViewport.convertToPdfPoint(0, // Default x coord
317
- scaledToViewport(boundingRect, pageViewport, usePdfCoordinates).top -
318
- SCROLL_MARGIN),
319
- 0, // Default z coord
320
- ],
321
- });
322
- scrolledToHighlightIdRef.current = highlight.id;
323
- renderHighlightLayers();
324
- // wait for scrolling to finish
325
- setTimeout(() => {
326
- viewerRef.current.container.addEventListener("scroll", handleScroll, {
327
- once: true,
328
- });
329
- }, 100);
330
- };
331
- const pdfHighlighterUtils = {
332
- isEditingOrHighlighting,
333
- getCurrentSelection: () => selectionRef.current,
334
- getGhostHighlight: () => ghostHighlightRef.current,
335
- removeGhostHighlight,
336
- toggleEditInProgress,
337
- isEditInProgress: () => isEditInProgressRef.current,
338
- isSelectionInProgress: () => Boolean(selectionRef.current) || isAreaSelectionInProgressRef.current,
339
- scrollToHighlight,
340
- getViewer: () => viewerRef.current,
341
- getTip: () => tip,
342
- setTip,
343
- updateTipPosition: updateTipPositionRef.current,
344
- };
345
- utilsRef(pdfHighlighterUtils);
346
- // Check if freetext or image mode is active for cursor styling
347
- const isFreetextMode = enableFreetextCreation?.({}) ?? false;
348
- const isImageMode = enableImageCreation?.({}) ?? false;
349
- // Build class name based on active modes
350
- let containerClassName = 'PdfHighlighter';
351
- if (isFreetextMode)
352
- containerClassName += ' PdfHighlighter--freetext-mode';
353
- if (isImageMode)
354
- containerClassName += ' PdfHighlighter--image-mode';
355
- if (enableDrawingMode)
356
- containerClassName += ' PdfHighlighter--drawing-mode';
357
- if (enableShapeMode)
358
- containerClassName += ' PdfHighlighter--shape-mode';
359
- if (areaSelectionMode)
360
- containerClassName += ' PdfHighlighter--area-mode';
361
- return (React.createElement(PdfHighlighterContext.Provider, { value: pdfHighlighterUtils },
362
- React.createElement("div", { ref: containerNodeRef, className: containerClassName, onPointerDown: handleMouseDown, onPointerUp: handleMouseUp, style: style },
363
- React.createElement("div", { className: "pdfViewer" }),
364
- React.createElement("style", null, `
365
- .textLayer ::selection {
366
- background: ${textSelectionColor};
367
- }
368
- `),
369
- isViewerReady && (React.createElement(TipContainer, { viewer: viewerRef.current, updateTipPositionRef: updateTipPositionRef })),
370
- isViewerReady && enableAreaSelection && (React.createElement(MouseSelection, { viewer: viewerRef.current, onChange: (isVisible) => (isAreaSelectionInProgressRef.current = isVisible), enableAreaSelection: enableAreaSelection, style: mouseSelectionStyle, onDragStart: () => disableTextSelection(viewerRef.current, true), onReset: () => {
371
- selectionRef.current = null;
372
- disableTextSelection(viewerRef.current, false);
373
- }, onSelection: (viewportPosition, scaledPosition, image, resetSelection) => {
374
- selectionRef.current = {
375
- content: { image },
376
- type: "area",
377
- position: scaledPosition,
378
- makeGhostHighlight: () => {
379
- ghostHighlightRef.current = {
380
- position: scaledPosition,
381
- type: "area",
382
- content: { image },
383
- };
384
- onCreateGhostHighlight &&
385
- onCreateGhostHighlight(ghostHighlightRef.current);
386
- resetSelection();
387
- renderHighlightLayers();
388
- return ghostHighlightRef.current;
389
- },
390
- };
391
- onSelectionFinished && onSelectionFinished(selectionRef.current);
392
- selectionTip &&
393
- setTip({ position: viewportPosition, content: selectionTip });
394
- } })),
395
- isViewerReady && enableDrawingMode && (React.createElement(DrawingCanvas, { isActive: enableDrawingMode, strokeColor: drawingStrokeColor, strokeWidth: drawingStrokeWidth, viewer: viewerRef.current, onComplete: (dataUrl, position, strokes) => {
396
- console.log("PdfHighlighter: Drawing complete");
397
- onDrawingComplete?.(dataUrl, position, strokes);
398
- }, onCancel: () => {
399
- console.log("PdfHighlighter: Drawing cancelled");
400
- onDrawingCancel?.();
401
- } })),
402
- isViewerReady && enableShapeMode && (React.createElement(ShapeCanvas, { isActive: !!enableShapeMode, shapeType: enableShapeMode, strokeColor: shapeStrokeColor, strokeWidth: shapeStrokeWidth, viewer: viewerRef.current, onComplete: (position, shape) => {
403
- console.log("PdfHighlighter: Shape complete", shape.shapeType);
404
- onShapeComplete?.(position, shape);
405
- }, onCancel: () => {
406
- console.log("PdfHighlighter: Shape cancelled");
407
- onShapeCancel?.();
408
- } })))));
409
- };
410
- //# sourceMappingURL=PdfHighlighter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PdfHighlighter.js","sourceRoot":"","sources":["../../../src/components/PdfHighlighter.tsx"],"names":[],"mappings":"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"}