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,63 +0,0 @@
1
- import React, { CSSProperties, MouseEvent, ReactNode } from "react";
2
- import "../style/ImageHighlight.css";
3
- import type { LTWHP, ViewportHighlight } from "../types";
4
- /**
5
- * The props type for {@link ImageHighlight}.
6
- *
7
- * @category Component Properties
8
- */
9
- export interface ImageHighlightProps {
10
- /**
11
- * The highlight to be rendered as an {@link ImageHighlight}.
12
- * The highlight.content.image should contain the image data URL.
13
- */
14
- highlight: ViewportHighlight;
15
- /**
16
- * A callback triggered whenever the highlight position or size changes.
17
- *
18
- * @param rect - The updated highlight area.
19
- */
20
- onChange?(rect: LTWHP): void;
21
- /**
22
- * Has the highlight been auto-scrolled into view?
23
- */
24
- isScrolledTo?: boolean;
25
- /**
26
- * react-rnd bounds on the highlight area.
27
- */
28
- bounds?: string | Element;
29
- /**
30
- * A callback triggered on context menu.
31
- */
32
- onContextMenu?(event: MouseEvent<HTMLDivElement>): void;
33
- /**
34
- * Event called when editing begins (drag or resize).
35
- */
36
- onEditStart?(): void;
37
- /**
38
- * Event called when editing ends.
39
- */
40
- onEditEnd?(): void;
41
- /**
42
- * Custom styling for the container.
43
- */
44
- style?: CSSProperties;
45
- /**
46
- * Custom drag icon. Replaces the default 6-dot grid icon.
47
- */
48
- dragIcon?: ReactNode;
49
- /**
50
- * Callback triggered when the delete button is clicked.
51
- */
52
- onDelete?(): void;
53
- /**
54
- * Custom delete icon. Replaces the default trash icon.
55
- */
56
- deleteIcon?: ReactNode;
57
- }
58
- /**
59
- * Renders a draggable, resizable image/signature annotation.
60
- *
61
- * @category Component
62
- */
63
- export declare const ImageHighlight: ({ highlight, onChange, isScrolledTo, bounds, onContextMenu, onEditStart, onEditEnd, style, dragIcon, onDelete, deleteIcon, }: ImageHighlightProps) => React.JSX.Element;
@@ -1,65 +0,0 @@
1
- import React from "react";
2
- import { Rnd } from "react-rnd";
3
- import { getPageFromElement } from "../lib/pdfjs-dom";
4
- import "../style/ImageHighlight.css";
5
- /**
6
- * Default drag icon - 6 dot grid pattern.
7
- */
8
- const DefaultDragIcon = () => (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor" },
9
- React.createElement("circle", { cx: "8", cy: "6", r: "2" }),
10
- React.createElement("circle", { cx: "16", cy: "6", r: "2" }),
11
- React.createElement("circle", { cx: "8", cy: "12", r: "2" }),
12
- React.createElement("circle", { cx: "16", cy: "12", r: "2" }),
13
- React.createElement("circle", { cx: "8", cy: "18", r: "2" }),
14
- React.createElement("circle", { cx: "16", cy: "18", r: "2" })));
15
- const DefaultDeleteIcon = () => (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor" },
16
- React.createElement("path", { d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" })));
17
- /**
18
- * Renders a draggable, resizable image/signature annotation.
19
- *
20
- * @category Component
21
- */
22
- export const ImageHighlight = ({ highlight, onChange, isScrolledTo, bounds, onContextMenu, onEditStart, onEditEnd, style, dragIcon, onDelete, deleteIcon, }) => {
23
- const highlightClass = isScrolledTo ? "ImageHighlight--scrolledTo" : "";
24
- // Generate key based on position for Rnd remount on position changes
25
- const key = `${highlight.position.boundingRect.width}${highlight.position.boundingRect.height}${highlight.position.boundingRect.left}${highlight.position.boundingRect.top}`;
26
- const imageUrl = highlight.content?.image;
27
- return (React.createElement("div", { className: `ImageHighlight ${highlightClass}`, onContextMenu: onContextMenu },
28
- React.createElement(Rnd, { className: "ImageHighlight__rnd", onDragStop: (_, data) => {
29
- const boundingRect = {
30
- ...highlight.position.boundingRect,
31
- top: data.y,
32
- left: data.x,
33
- };
34
- onChange?.(boundingRect);
35
- onEditEnd?.();
36
- }, onDragStart: onEditStart, onResizeStop: (_e, _direction, ref, _delta, position) => {
37
- const boundingRect = {
38
- top: position.y,
39
- left: position.x,
40
- width: ref.offsetWidth,
41
- height: ref.offsetHeight,
42
- pageNumber: getPageFromElement(ref)?.number ||
43
- highlight.position.boundingRect.pageNumber,
44
- };
45
- onChange?.(boundingRect);
46
- onEditEnd?.();
47
- }, onResizeStart: onEditStart, default: {
48
- x: highlight.position.boundingRect.left,
49
- y: highlight.position.boundingRect.top,
50
- width: highlight.position.boundingRect.width || 150,
51
- height: highlight.position.boundingRect.height || 100,
52
- }, minWidth: 50, minHeight: 50, key: key, bounds: bounds, lockAspectRatio: true, dragHandleClassName: "ImageHighlight__drag-handle", onClick: (event) => {
53
- event.stopPropagation();
54
- event.preventDefault();
55
- }, style: style },
56
- React.createElement("div", { className: "ImageHighlight__container" },
57
- React.createElement("div", { className: "ImageHighlight__toolbar" },
58
- React.createElement("div", { className: "ImageHighlight__drag-handle", title: "Drag to move" }, dragIcon || React.createElement(DefaultDragIcon, null)),
59
- onDelete && (React.createElement("button", { className: "ImageHighlight__delete-button", onClick: (e) => {
60
- e.stopPropagation();
61
- onDelete();
62
- }, title: "Delete", type: "button" }, deleteIcon || React.createElement(DefaultDeleteIcon, null)))),
63
- React.createElement("div", { className: "ImageHighlight__content" }, imageUrl ? (React.createElement("img", { src: imageUrl, alt: "Highlight", className: "ImageHighlight__image", draggable: false })) : (React.createElement("div", { className: "ImageHighlight__placeholder" }, "No image")))))));
64
- };
65
- //# sourceMappingURL=ImageHighlight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImageHighlight.js","sourceRoot":"","sources":["../../../src/components/ImageHighlight.tsx"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import React, { ReactNode } from "react";
2
- import { Tip } from "../types";
3
- /**
4
- * The props type for {@link MonitoredHighlightContainer}.
5
- *
6
- * @category Component Properties
7
- */
8
- export interface MonitoredHighlightContainerProps {
9
- /**
10
- * A callback triggered whenever the mouse hovers over a highlight.
11
- */
12
- onMouseEnter?(): void;
13
- /**
14
- * What tip to automatically display whenever a mouse hovers over a highlight.
15
- * The tip will persist even as the user puts their mouse over it and not the
16
- * highlight, but will disappear once it no longer hovers both.
17
- */
18
- highlightTip?: Tip;
19
- /**
20
- * A callback triggered whenever the mouse completely moves out from both the
21
- * highlight (children) and any highlightTip.
22
- */
23
- onMouseLeave?(): void;
24
- /**
25
- * Component to monitor mouse activity over. This should be a highlight within the {@link PdfHighlighter}.
26
- */
27
- children: ReactNode;
28
- }
29
- /**
30
- * A container for a highlight component that monitors whether a mouse is over a
31
- * highlight and over some secondary highlight tip. It will display the tip
32
- * whenever the mouse is over the highlight and it will hide the tip only when
33
- * the mouse has left the highlight AND the tip.
34
- *
35
- * @category Component
36
- */
37
- export declare const MonitoredHighlightContainer: ({ onMouseEnter, highlightTip, onMouseLeave, children, }: MonitoredHighlightContainerProps) => React.JSX.Element;
@@ -1,42 +0,0 @@
1
- import React, { useRef } from "react";
2
- import { usePdfHighlighterContext } from "../contexts/PdfHighlighterContext";
3
- import { MouseMonitor } from "./MouseMonitor";
4
- /**
5
- * A container for a highlight component that monitors whether a mouse is over a
6
- * highlight and over some secondary highlight tip. It will display the tip
7
- * whenever the mouse is over the highlight and it will hide the tip only when
8
- * the mouse has left the highlight AND the tip.
9
- *
10
- * @category Component
11
- */
12
- export const MonitoredHighlightContainer = ({ onMouseEnter, highlightTip, onMouseLeave, children, }) => {
13
- const mouseInRef = useRef(false); // Whether the mouse is over the child (highlight)
14
- const { setTip, isEditingOrHighlighting } = usePdfHighlighterContext();
15
- return (React.createElement("div", { onMouseEnter: () => {
16
- mouseInRef.current = true;
17
- onMouseEnter && onMouseEnter();
18
- if (isEditingOrHighlighting())
19
- return;
20
- if (highlightTip) {
21
- // MouseMonitor the highlightTip to prevent it from disappearing if the mouse is over it and not the highlight.
22
- const monitoredHighlightTip = (React.createElement(MouseMonitor, { onMoveAway: () => {
23
- // The event will keep triggering if the mouse is not on the highlightTip,
24
- // but don't do anything if the mouse is over the highlight.
25
- if (mouseInRef.current) {
26
- return;
27
- }
28
- setTip(null);
29
- onMouseLeave && onMouseLeave();
30
- }, paddingX: 60, paddingY: 30 }, highlightTip.content));
31
- setTip({
32
- position: highlightTip.position,
33
- content: monitoredHighlightTip,
34
- });
35
- }
36
- }, onMouseLeave: () => {
37
- mouseInRef.current = false;
38
- // Trigger onMouseLeave if no highlightTip exists
39
- !highlightTip && onMouseLeave && onMouseLeave();
40
- } }, children));
41
- };
42
- //# sourceMappingURL=MonitoredHighlightContainer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MonitoredHighlightContainer.js","sourceRoot":"","sources":["../../../src/components/MonitoredHighlightContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,MAAM,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAgC9C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,EAC1C,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,QAAQ,GACyB,EAAE,EAAE;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kDAAkD;IAEpF,MAAM,EAAE,MAAM,EAAE,uBAAuB,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAEvE,OAAO,CACL,6BACE,YAAY,EAAE,GAAG,EAAE;YACjB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,YAAY,IAAI,YAAY,EAAE,CAAC;YAE/B,IAAI,uBAAuB,EAAE;gBAAE,OAAO;YAEtC,IAAI,YAAY,EAAE,CAAC;gBACjB,+GAA+G;gBAC/G,MAAM,qBAAqB,GAAG,CAC5B,oBAAC,YAAY,IACX,UAAU,EAAE,GAAG,EAAE;wBACf,0EAA0E;wBAC1E,4DAA4D;wBAC5D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;4BACvB,OAAO;wBACT,CAAC;wBAED,MAAM,CAAC,IAAI,CAAC,CAAC;wBACb,YAAY,IAAI,YAAY,EAAE,CAAC;oBACjC,CAAC,EACD,QAAQ,EAAE,EAAE,EACZ,QAAQ,EAAE,EAAE,IAEX,YAAY,CAAC,OAAO,CACR,CAChB,CAAC;gBAEF,MAAM,CAAC;oBACL,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,OAAO,EAAE,qBAAqB;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EACD,YAAY,EAAE,GAAG,EAAE;YACjB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAE3B,iDAAiD;YACjD,CAAC,YAAY,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;QAClD,CAAC,IAEA,QAAQ,CACL,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,34 +0,0 @@
1
- import React, { ReactNode } from "react";
2
- /**
3
- * The props type for {@link MouseMonitor}.
4
- *
5
- * @category Component Properties
6
- * @internal
7
- */
8
- export interface MouseMonitorProps {
9
- /**
10
- * Callback triggered whenever the mouse moves not within the bounds of the
11
- * child component. This will keep triggering as long as the component is
12
- * rendered.
13
- */
14
- onMoveAway(): void;
15
- /**
16
- * X padding in pixels for the container to monitor mouse activity in.
17
- */
18
- paddingX: number;
19
- /**
20
- * Y padding in pixels for the container to monitor mouse activity in.
21
- */
22
- paddingY: number;
23
- /**
24
- * Component over which mouse activity is monitored.
25
- */
26
- children: ReactNode;
27
- }
28
- /**
29
- * A component that monitors mouse movements over a child and invisible padded area.
30
- *
31
- * @category Component
32
- * @internal
33
- */
34
- export declare const MouseMonitor: ({ onMoveAway, paddingX, paddingY, children, }: MouseMonitorProps) => React.JSX.Element;
@@ -1,30 +0,0 @@
1
- import React, { useEffect, useRef } from "react";
2
- /**
3
- * A component that monitors mouse movements over a child and invisible padded area.
4
- *
5
- * @category Component
6
- * @internal
7
- */
8
- export const MouseMonitor = ({ onMoveAway, paddingX, paddingY, children, }) => {
9
- const containerRef = useRef(null);
10
- const onMouseMove = (event) => {
11
- if (!containerRef.current)
12
- return;
13
- const { clientX, clientY } = event;
14
- const { left, top, width, height } = containerRef.current.getBoundingClientRect();
15
- const inBoundsX = clientX > left - paddingX && clientX < left + width + paddingX;
16
- const inBoundsY = clientY > top - paddingY && clientY < top + height + paddingY;
17
- if (!(inBoundsX && inBoundsY)) {
18
- onMoveAway();
19
- }
20
- };
21
- useEffect(() => {
22
- // TODO: Maybe optimise or throttle?
23
- document.addEventListener("mousemove", onMouseMove);
24
- return () => {
25
- document.removeEventListener("mousemove", onMouseMove);
26
- };
27
- }, []);
28
- return React.createElement("div", { ref: containerRef }, children);
29
- };
30
- //# sourceMappingURL=MouseMonitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MouseMonitor.js","sourceRoot":"","sources":["../../../src/components/MouseMonitor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAgC5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,GACU,EAAE,EAAE;IACtB,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,EAAE;QACxC,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE,OAAO;QAElC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAChC,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAE/C,MAAM,SAAS,GACb,OAAO,GAAG,IAAI,GAAG,QAAQ,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;QACjE,MAAM,SAAS,GACb,OAAO,GAAG,GAAG,GAAG,QAAQ,IAAI,OAAO,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC;QAEhE,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC;YAC9B,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,oCAAoC;QACpC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAEpD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,6BAAK,GAAG,EAAE,YAAY,IAAG,QAAQ,CAAO,CAAC;AAClD,CAAC,CAAC"}
@@ -1,66 +0,0 @@
1
- import React, { CSSProperties } from "react";
2
- import "../style/MouseSelection.css";
3
- import { PDFViewer } from "pdfjs-dist/types/web/pdf_viewer";
4
- import type { ScaledPosition, ViewportPosition } from "../types";
5
- /**
6
- * The props type for {@link MouseSelection}.
7
- *
8
- * @category Component Properties
9
- * @internal
10
- */
11
- export interface MouseSelectionProps {
12
- /**
13
- * The PDFViewer instance containing this MouseSelection.
14
- */
15
- viewer: PDFViewer;
16
- /**
17
- * Callback triggered whenever the user stops dragging their mouse and a valid
18
- * mouse selection is made. In general, this will only be called if a mouse
19
- * selection is rendered.
20
- *
21
- * @param viewportPosition - viewport position of the mouse selection.
22
- * @param scaledPosition - scaled position of the mouse selection.
23
- * @param image - PNG screenshot of the mouse selection.
24
- * @param resetSelection - Callback to reset the current selection.
25
- * @param event - Mouse event associated with ending the selection.
26
- */
27
- onSelection?(viewportPosition: ViewportPosition, scaledPosition: ScaledPosition, image: string, resetSelection: () => void, event: MouseEvent): void;
28
- /**
29
- * Callback triggered whenever the current mouse selection is reset.
30
- * This includes when dragging ends but the selection is invalid.
31
- */
32
- onReset?(): void;
33
- /**
34
- * Callback triggered whenever a new valid mouse selection begins.
35
- *
36
- * @param event - mouse event associated with the new selection.
37
- */
38
- onDragStart?(event: MouseEvent): void;
39
- /**
40
- * Condition to check before any mouse selection starts.
41
- *
42
- * @param event - mouse event associated with the new selection.
43
- * @returns - `True` if mouse selection should start.
44
- */
45
- enableAreaSelection(event: MouseEvent): boolean;
46
- /**
47
- * Callback whenever the mouse selection area changes.
48
- *
49
- * @param isVisible - Whether the mouse selection is rendered (i.e., non-zero area)
50
- */
51
- onChange?(isVisible: boolean): void;
52
- /**
53
- * Optional style props for the mouse selection rectangle.
54
- */
55
- style?: CSSProperties;
56
- }
57
- /**
58
- * A component that enables the creation of rectangular and interactive mouse
59
- * selections within a given container. NOTE: This does not disable selection in
60
- * whatever container the component is placed in. That must be handled through
61
- * the component's events.
62
- *
63
- * @category Component
64
- * @internal
65
- */
66
- export declare const MouseSelection: ({ viewer, onSelection, onReset, onDragStart, enableAreaSelection, onChange, style, }: MouseSelectionProps) => React.JSX.Element;
@@ -1,122 +0,0 @@
1
- import React, { useEffect, useRef, useState } from "react";
2
- import { asElement, getPageFromElement, isHTMLElement } from "../lib/pdfjs-dom";
3
- import "../style/MouseSelection.css";
4
- import { viewportPositionToScaled } from "../lib/coordinates";
5
- import screenshot from "../lib/screenshot";
6
- const getBoundingRect = (start, end) => {
7
- return {
8
- left: Math.min(end.x, start.x),
9
- top: Math.min(end.y, start.y),
10
- width: Math.abs(end.x - start.x),
11
- height: Math.abs(end.y - start.y),
12
- };
13
- };
14
- const getContainerCoords = (container, pageX, pageY) => {
15
- const containerBoundingRect = container.getBoundingClientRect();
16
- return {
17
- x: pageX - containerBoundingRect.left + container.scrollLeft,
18
- y: pageY - containerBoundingRect.top + container.scrollTop - window.scrollY,
19
- };
20
- };
21
- /**
22
- * A component that enables the creation of rectangular and interactive mouse
23
- * selections within a given container. NOTE: This does not disable selection in
24
- * whatever container the component is placed in. That must be handled through
25
- * the component's events.
26
- *
27
- * @category Component
28
- * @internal
29
- */
30
- export const MouseSelection = ({ viewer, onSelection, onReset, onDragStart, enableAreaSelection, onChange, style, }) => {
31
- const [start, setStart] = useState(null);
32
- const [end, setEnd] = useState(null);
33
- const [locked, setLocked] = useState(false);
34
- const rootRef = useRef(null);
35
- // Needed in order to grab the page info of a mouse selection
36
- const startTargetRef = useRef(null);
37
- const reset = () => {
38
- onReset && onReset();
39
- setStart(null);
40
- setEnd(null);
41
- setLocked(false);
42
- };
43
- // Register event listeners onChange
44
- useEffect(() => {
45
- onChange && onChange(Boolean(start && end));
46
- if (!rootRef.current)
47
- return;
48
- // Should be the PdfHighlighter
49
- const container = asElement(rootRef.current.parentElement);
50
- const handleMouseUp = (event) => {
51
- if (!start || !end || !startTargetRef.current)
52
- return;
53
- const boundingRect = getBoundingRect(start, end);
54
- // Check if the bounding rectangle has a minimum width and height
55
- // to prevent recording selections with 0 area
56
- const shouldEnd = boundingRect.width >= 1 && boundingRect.height >= 1;
57
- if (!container.contains(asElement(event.target)) || !shouldEnd) {
58
- reset();
59
- return;
60
- }
61
- setLocked(true);
62
- const page = getPageFromElement(startTargetRef.current);
63
- if (!page)
64
- return;
65
- const pageBoundingRect = {
66
- ...boundingRect,
67
- top: boundingRect.top - page.node.offsetTop,
68
- left: boundingRect.left - page.node.offsetLeft,
69
- pageNumber: page.number,
70
- };
71
- const viewportPosition = {
72
- boundingRect: pageBoundingRect,
73
- rects: [],
74
- };
75
- const scaledPosition = viewportPositionToScaled(viewportPosition, viewer);
76
- const image = screenshot(pageBoundingRect, pageBoundingRect.pageNumber, viewer);
77
- onSelection &&
78
- onSelection(viewportPosition, scaledPosition, image, reset, event);
79
- };
80
- const handleMouseMove = (event) => {
81
- if (!rootRef.current || !start || locked)
82
- return;
83
- setEnd(getContainerCoords(container, event.pageX, event.pageY));
84
- };
85
- const handleMouseDown = (event) => {
86
- const shouldStart = (event) => enableAreaSelection(event) &&
87
- isHTMLElement(event.target) &&
88
- Boolean(asElement(event.target).closest(".page"));
89
- // If the user clicks anywhere outside a tip, reset the selection
90
- const shouldReset = (event) => start &&
91
- !asElement(event.target).closest(".PdfHighlighter__tip-container");
92
- if (!shouldStart(event)) {
93
- if (shouldReset(event))
94
- reset();
95
- return;
96
- }
97
- startTargetRef.current = asElement(event.target);
98
- onDragStart && onDragStart(event);
99
- setStart(getContainerCoords(container, event.pageX, event.pageY));
100
- setEnd(null);
101
- setLocked(false);
102
- };
103
- /**
104
- * Although we register the event listeners on the PdfHighlighter component, we encapsulate
105
- * them in this separate component to enhance maintainability and prevent unnecessary
106
- * rerenders of the PdfHighlighter itself. While synthetic events on PdfHighlighter would
107
- * be preferable, we need to register "mouseup" on the entire document anyway. Therefore,
108
- * we can't avoid using useEffect. We must re-register all events on state changes, as
109
- * custom event listeners may otherwise receive stale state.
110
- */
111
- container.addEventListener("mousemove", handleMouseMove);
112
- container.addEventListener("mousedown", handleMouseDown);
113
- document.addEventListener("mouseup", handleMouseUp);
114
- return () => {
115
- container.removeEventListener("mousemove", handleMouseMove);
116
- container.removeEventListener("mousedown", handleMouseDown);
117
- document.removeEventListener("mouseup", handleMouseUp);
118
- };
119
- }, [start, end, enableAreaSelection]);
120
- return (React.createElement("div", { className: "MouseSelection-container", ref: rootRef }, start && end && (React.createElement("div", { className: "MouseSelection", style: { ...getBoundingRect(start, end), ...style } }))));
121
- };
122
- //# sourceMappingURL=MouseSelection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MouseSelection.js","sourceRoot":"","sources":["../../../src/components/MouseSelection.tsx"],"names":[],"mappings":"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"}