@epam/pdf-highlighter-kit 0.0.3 → 0.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.
- package/README.md +194 -63
- package/dist/PDFHighlightViewer.d.ts +31 -24
- package/dist/PDFHighlightViewer.d.ts.map +1 -1
- package/dist/PDFHighlightViewer.js +332 -292
- package/dist/PDFHighlightViewer.js.map +1 -1
- package/dist/api.d.ts +7 -12
- package/dist/api.d.ts.map +1 -1
- package/dist/core/interaction-handler.d.ts +1 -1
- package/dist/core/interaction-handler.d.ts.map +1 -1
- package/dist/core/interaction-handler.js +43 -31
- package/dist/core/interaction-handler.js.map +1 -1
- package/dist/core/performance-optimizer.d.ts +3 -3
- package/dist/core/performance-optimizer.d.ts.map +1 -1
- package/dist/core/performance-optimizer.js +7 -8
- package/dist/core/performance-optimizer.js.map +1 -1
- package/dist/core/text-segmentation.d.ts +8 -7
- package/dist/core/text-segmentation.d.ts.map +1 -1
- package/dist/core/text-segmentation.js +101 -133
- package/dist/core/text-segmentation.js.map +1 -1
- package/dist/core/unified-layer-builder.d.ts +7 -8
- package/dist/core/unified-layer-builder.d.ts.map +1 -1
- package/dist/core/unified-layer-builder.js +124 -174
- package/dist/core/unified-layer-builder.js.map +1 -1
- package/dist/index.d.ts +1 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -44
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +32 -48
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/highlight-adapter.d.ts +2 -30
- package/dist/utils/highlight-adapter.d.ts.map +1 -1
- package/dist/utils/highlight-adapter.js +21 -197
- package/dist/utils/highlight-adapter.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/style-manager.d.ts +0 -88
- package/dist/core/style-manager.d.ts.map +0 -1
- package/dist/core/style-manager.js +0 -413
- package/dist/core/style-manager.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>PDF Highlight Viewer</h1>
|
|
3
|
+
<p>High-performance PDF viewer with intelligent highlighting and text selection capabilities for web applications.</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@epam/pdf-highlighter-kit) [](https://opensource.org/licenses/Apache-2.0) [](https://github.com/epam/pdf-highlighter-kit/pulls)
|
|
6
|
+
|
|
7
|
+
<p>An open-source project by <strong>BadgerDoc</strong> <img src="./logo.svg" alt="BadgerDoc" width="22" height="21" style="vertical-align: middle; margin-bottom: 3px;"></p>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
---
|
|
4
11
|
|
|
5
12
|
## Installation
|
|
6
13
|
|
|
@@ -8,17 +15,21 @@ High-performance PDF viewer with intelligent highlighting and text selection cap
|
|
|
8
15
|
npm install @epam/pdf-highlighter-kit pdfjs-dist
|
|
9
16
|
```
|
|
10
17
|
|
|
18
|
+
> Peer dependency: `pdfjs-dist` (see Requirements).
|
|
19
|
+
|
|
11
20
|
## Quick Start
|
|
12
21
|
|
|
13
|
-
```
|
|
22
|
+
```ts
|
|
14
23
|
import { PDFHighlightViewer } from '@epam/pdf-highlighter-kit';
|
|
24
|
+
import type { InputHighlightData } from '@epam/pdf-highlighter-kit';
|
|
15
25
|
import '@epam/pdf-highlighter-kit/styles/pdf-highlight-viewer.css';
|
|
16
26
|
|
|
17
27
|
// Create viewer instance
|
|
18
28
|
const viewer = new PDFHighlightViewer();
|
|
19
29
|
|
|
20
30
|
// Initialize with container element
|
|
21
|
-
const container = document.getElementById('pdf-container');
|
|
31
|
+
const container = document.getElementById('pdf-container') as HTMLElement;
|
|
32
|
+
|
|
22
33
|
await viewer.init(container, {
|
|
23
34
|
enableTextSelection: true,
|
|
24
35
|
enableVirtualScrolling: true,
|
|
@@ -30,34 +41,73 @@ await viewer.init(container, {
|
|
|
30
41
|
// Load PDF document
|
|
31
42
|
await viewer.loadPDF('/path/to/document.pdf');
|
|
32
43
|
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
// Highlights
|
|
45
|
+
const highlights: InputHighlightData[] = [
|
|
46
|
+
{
|
|
47
|
+
id: 'term-001',
|
|
48
|
+
bboxes: [
|
|
49
|
+
// page is 1-based
|
|
50
|
+
{ page: 1, x1: 100, y1: 200, x2: 300, y2: 220 },
|
|
51
|
+
{ page: 3, x1: 80, y1: 140, x2: 260, y2: 160 },
|
|
52
|
+
],
|
|
53
|
+
style: {
|
|
54
|
+
backgroundColor: '#ffeb3b',
|
|
55
|
+
opacity: 0.3,
|
|
56
|
+
borderColor: '#d4c400',
|
|
57
|
+
borderWidth: '1px',
|
|
43
58
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
frequency: 5,
|
|
49
|
-
pages: [1, 3, 7],
|
|
50
|
-
},
|
|
59
|
+
tooltipText: 'Important Term',
|
|
60
|
+
metadata: {
|
|
61
|
+
frequency: 5,
|
|
62
|
+
tags: ['important', 'glossary'],
|
|
51
63
|
},
|
|
52
64
|
},
|
|
53
|
-
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
viewer.loadHighlights(highlights);
|
|
68
|
+
|
|
69
|
+
// Navigate to a highlight occurrence
|
|
70
|
+
viewer.goToHighlight('term-001', 0);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Data Model
|
|
74
|
+
|
|
75
|
+
### `InputHighlightData`
|
|
76
|
+
|
|
77
|
+
Each highlight carries its own style. No categories are required.
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
export interface BBox {
|
|
81
|
+
x1: number;
|
|
82
|
+
y1: number;
|
|
83
|
+
x2: number;
|
|
84
|
+
y2: number;
|
|
85
|
+
page: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface HighlightStyle {
|
|
89
|
+
backgroundColor: string;
|
|
90
|
+
borderColor?: string;
|
|
91
|
+
borderWidth?: string;
|
|
92
|
+
opacity?: number;
|
|
93
|
+
hoverOpacity?: number;
|
|
94
|
+
pulseAnimation?: boolean;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface InputHighlightData {
|
|
98
|
+
id: string;
|
|
99
|
+
bboxes: BBox[];
|
|
100
|
+
style?: HighlightStyle;
|
|
101
|
+
tooltipText?: string;
|
|
102
|
+
metadata?: Record<string, any>;
|
|
103
|
+
}
|
|
54
104
|
```
|
|
55
105
|
|
|
56
106
|
## Configuration Options
|
|
57
107
|
|
|
58
108
|
### ViewerConfig
|
|
59
109
|
|
|
60
|
-
```
|
|
110
|
+
```ts
|
|
61
111
|
interface ViewerConfig {
|
|
62
112
|
// Enable text selection functionality
|
|
63
113
|
enableTextSelection?: boolean;
|
|
@@ -74,11 +124,16 @@ interface ViewerConfig {
|
|
|
74
124
|
// Interaction mode: 'select' | 'highlight' | 'hybrid'
|
|
75
125
|
interactionMode?: 'select' | 'highlight' | 'hybrid';
|
|
76
126
|
|
|
77
|
-
// Custom styles configuration
|
|
127
|
+
// Custom styles configuration (viewer/selection CSS). Highlight styles are per-highlight.
|
|
78
128
|
customStyles?: StyleConfig;
|
|
79
129
|
|
|
80
130
|
// PDF.js worker source URL
|
|
81
131
|
workerSrc?: string;
|
|
132
|
+
|
|
133
|
+
// Highlight UI config (style is per highlight)
|
|
134
|
+
highlightsConfig?: {
|
|
135
|
+
enableMultilineHover?: boolean;
|
|
136
|
+
};
|
|
82
137
|
}
|
|
83
138
|
```
|
|
84
139
|
|
|
@@ -94,13 +149,36 @@ Initialize the viewer with a container element and optional configuration.
|
|
|
94
149
|
|
|
95
150
|
Load a PDF document from URL or ArrayBuffer.
|
|
96
151
|
|
|
97
|
-
#### `loadHighlights(highlights:
|
|
152
|
+
#### `loadHighlights(highlights: InputHighlightData[]): void`
|
|
153
|
+
|
|
154
|
+
Replace current highlights with the provided list.
|
|
155
|
+
|
|
156
|
+
#### `addHighlight(highlight: InputHighlightData): void`
|
|
157
|
+
|
|
158
|
+
Add a single highlight (incremental update).
|
|
159
|
+
|
|
160
|
+
#### `removeHighlight(termId: string): void`
|
|
161
|
+
|
|
162
|
+
Remove highlight by its `id`.
|
|
98
163
|
|
|
99
|
-
|
|
164
|
+
#### `updateHighlightStyle(termId: string, stylePatch: Partial<HighlightStyle>): void`
|
|
165
|
+
|
|
166
|
+
Update highlight style by id (patch merge).
|
|
167
|
+
|
|
168
|
+
#### `goToHighlight(termId: string, bboxIndex?: number): void`
|
|
169
|
+
|
|
170
|
+
Navigate to a specific highlight occurrence. `bboxIndex` defaults to `0`.
|
|
171
|
+
|
|
172
|
+
#### `nextHighlight(termId?: string): void` / `previousHighlight(termId?: string): void`
|
|
173
|
+
|
|
174
|
+
Navigate across highlight occurrences:
|
|
175
|
+
|
|
176
|
+
- without `termId` → across all highlights in document order
|
|
177
|
+
- with `termId` → only within that highlight’s occurrences
|
|
100
178
|
|
|
101
179
|
#### `goToPage(pageNumber: number): void`
|
|
102
180
|
|
|
103
|
-
Navigate to a specific page.
|
|
181
|
+
Navigate to a specific page (1-based).
|
|
104
182
|
|
|
105
183
|
#### `zoomIn(): void` / `zoomOut(): void`
|
|
106
184
|
|
|
@@ -110,46 +188,95 @@ Zoom in or out of the PDF.
|
|
|
110
188
|
|
|
111
189
|
Set a specific zoom level (e.g., 1.0 for 100%, 1.5 for 150%).
|
|
112
190
|
|
|
113
|
-
#### `search(query: string): Promise<SearchResult[]>`
|
|
114
|
-
|
|
115
|
-
Search for text in the PDF document.
|
|
116
|
-
|
|
117
191
|
#### `destroy(): void`
|
|
118
192
|
|
|
119
193
|
Clean up and destroy the viewer instance.
|
|
120
194
|
|
|
121
|
-
|
|
195
|
+
## Events
|
|
122
196
|
|
|
123
197
|
The viewer emits various events that you can listen to:
|
|
124
198
|
|
|
125
|
-
```
|
|
126
|
-
viewer.
|
|
127
|
-
console.log('
|
|
199
|
+
```ts
|
|
200
|
+
viewer.addEventListener('initialized', () => {
|
|
201
|
+
console.log('Viewer initialized');
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
viewer.addEventListener('pdfLoaded', (e) => {
|
|
205
|
+
console.log('PDF loaded. Total pages:', e.totalPages);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
viewer.addEventListener('pageChanged', (e) => {
|
|
209
|
+
console.log('Current page:', e.pageNumber);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
viewer.addEventListener('zoomChanged', (e) => {
|
|
213
|
+
console.log('Zoom changed:', e.scale);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
viewer.addEventListener('renderComplete', (e) => {
|
|
217
|
+
console.log('Page rendered:', e.pageNumber);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
viewer.addEventListener('renderError', (e) => {
|
|
221
|
+
console.error('Render error:', e.pageNumber, e.error);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
viewer.addEventListener('highlightsLoaded', (e) => {
|
|
225
|
+
console.log('Highlights loaded:', e.data?.length ?? 0);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
viewer.addEventListener('highlightHover', (e) => {
|
|
229
|
+
console.log('Highlight hover:', e.termId, 'page', e.pageNumber, 'bbox', e.bboxIndex);
|
|
128
230
|
});
|
|
129
231
|
|
|
130
|
-
viewer.
|
|
131
|
-
console.log('
|
|
232
|
+
viewer.addEventListener('highlightBlur', (e) => {
|
|
233
|
+
console.log('Highlight blur:', e.termId);
|
|
132
234
|
});
|
|
133
235
|
|
|
134
|
-
viewer.
|
|
135
|
-
console.log('Highlight clicked:',
|
|
236
|
+
viewer.addEventListener('highlightClick', (e) => {
|
|
237
|
+
console.log('Highlight clicked:', e.termId, 'page', e.pageNumber, 'bbox', e.bboxIndex);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
viewer.addEventListener('navigationComplete', (e) => {
|
|
241
|
+
console.log('Navigation complete:', e.termId, e.pageNumber, e.occurrenceIndex);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
viewer.addEventListener('selectionChanged', (e) => {
|
|
245
|
+
console.log('Text selected:', e.text);
|
|
246
|
+
console.log('Pages:', e.pageNumbers);
|
|
247
|
+
console.log('Overlapping highlights:', e.highlights); // array of bbox refs
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
viewer.addEventListener('selectionHighlighted', (e) => {
|
|
251
|
+
console.log('Selection highlighted:', e.termId);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
viewer.addEventListener('error', (e) => {
|
|
255
|
+
console.error('Viewer error:', e);
|
|
136
256
|
});
|
|
137
257
|
```
|
|
138
258
|
|
|
139
|
-
|
|
259
|
+
> Event payload fields may include `termId`, `pageNumber`, `bboxIndex`, and `bbox` depending on event type.
|
|
140
260
|
|
|
141
|
-
|
|
261
|
+
## Advanced Usage
|
|
142
262
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
263
|
+
### Custom Styling (per highlight)
|
|
264
|
+
|
|
265
|
+
```ts
|
|
266
|
+
const highlight: InputHighlightData = {
|
|
267
|
+
id: 'note-001',
|
|
268
|
+
bboxes: [{ page: 2, x1: 120, y1: 330, x2: 420, y2: 355 }],
|
|
269
|
+
style: {
|
|
270
|
+
backgroundColor: '#ffd54f',
|
|
271
|
+
opacity: 0.25,
|
|
272
|
+
borderColor: '#ff8f00',
|
|
273
|
+
borderWidth: '1px',
|
|
274
|
+
hoverOpacity: 0.6,
|
|
151
275
|
},
|
|
152
|
-
|
|
276
|
+
tooltipText: 'My note',
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
viewer.addHighlight(highlight);
|
|
153
280
|
```
|
|
154
281
|
|
|
155
282
|
### React Integration
|
|
@@ -157,9 +284,16 @@ await viewer.init(container, {
|
|
|
157
284
|
```tsx
|
|
158
285
|
import { useEffect, useRef } from 'react';
|
|
159
286
|
import { PDFHighlightViewer } from '@epam/pdf-highlighter-kit';
|
|
287
|
+
import type { InputHighlightData } from '@epam/pdf-highlighter-kit';
|
|
160
288
|
import '@epam/pdf-highlighter-kit/styles/pdf-highlight-viewer.css';
|
|
161
289
|
|
|
162
|
-
function PDFViewer({
|
|
290
|
+
export function PDFViewer({
|
|
291
|
+
pdfUrl,
|
|
292
|
+
highlights,
|
|
293
|
+
}: {
|
|
294
|
+
pdfUrl: string;
|
|
295
|
+
highlights: InputHighlightData[];
|
|
296
|
+
}) {
|
|
163
297
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
164
298
|
const viewerRef = useRef<PDFHighlightViewer | null>(null);
|
|
165
299
|
|
|
@@ -169,27 +303,24 @@ function PDFViewer({ pdfUrl, highlights }) {
|
|
|
169
303
|
const viewer = new PDFHighlightViewer();
|
|
170
304
|
viewerRef.current = viewer;
|
|
171
305
|
|
|
172
|
-
|
|
173
|
-
.init(containerRef.current
|
|
306
|
+
(async () => {
|
|
307
|
+
await viewer.init(containerRef.current!, {
|
|
174
308
|
enableTextSelection: true,
|
|
175
309
|
enableVirtualScrolling: true,
|
|
176
|
-
})
|
|
177
|
-
.then(() => {
|
|
178
|
-
viewer.loadPDF(pdfUrl);
|
|
179
|
-
if (highlights) {
|
|
180
|
-
viewer.loadHighlights(highlights);
|
|
181
|
-
}
|
|
182
310
|
});
|
|
183
311
|
|
|
312
|
+
await viewer.loadPDF(pdfUrl);
|
|
313
|
+
viewer.loadHighlights(highlights);
|
|
314
|
+
})();
|
|
315
|
+
|
|
184
316
|
return () => {
|
|
185
317
|
viewer.destroy();
|
|
318
|
+
viewerRef.current = null;
|
|
186
319
|
};
|
|
187
320
|
}, [pdfUrl]);
|
|
188
321
|
|
|
189
322
|
useEffect(() => {
|
|
190
|
-
|
|
191
|
-
viewerRef.current.loadHighlights(highlights);
|
|
192
|
-
}
|
|
323
|
+
viewerRef.current?.loadHighlights(highlights);
|
|
193
324
|
}, [highlights]);
|
|
194
325
|
|
|
195
326
|
return <div ref={containerRef} style={{ width: '100%', height: '100vh' }} />;
|
|
@@ -216,4 +347,4 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
216
347
|
|
|
217
348
|
## Support
|
|
218
349
|
|
|
219
|
-
For issues and questions, please use the
|
|
350
|
+
For issues and questions, please use the GitHub Issues page.
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { PDFHighlightViewer as IPDFHighlightViewer } from './api';
|
|
2
|
-
import { ViewerOptions,
|
|
2
|
+
import { ViewerOptions, TextRange, SelectionWithMetadata, PerformanceMetrics, HighlightAnalytics, AccessibilityFeatures, InteractionMode, InputHighlightData, HighlightStyle } from './types';
|
|
3
3
|
export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
4
4
|
private pdfEngine;
|
|
5
5
|
private viewportManager;
|
|
6
6
|
private layerBuilder;
|
|
7
7
|
private interactionHandler;
|
|
8
8
|
private performanceOptimizer;
|
|
9
|
-
private styleManager;
|
|
10
9
|
private container;
|
|
11
10
|
private pdfContainer;
|
|
12
11
|
private pageContainers;
|
|
13
12
|
private options;
|
|
14
|
-
private
|
|
13
|
+
private highlightsIndex;
|
|
15
14
|
private currentPage;
|
|
16
15
|
private currentScale;
|
|
17
16
|
private totalPages;
|
|
18
17
|
private selectedTermId;
|
|
19
18
|
private isInitialized;
|
|
19
|
+
private navIndex;
|
|
20
20
|
private pageDimensions;
|
|
21
21
|
private defaultPageHeight;
|
|
22
22
|
private eventListeners;
|
|
@@ -36,6 +36,7 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
36
36
|
* Setup scroll handling for virtual viewport management
|
|
37
37
|
*/
|
|
38
38
|
private setupScrollHandling;
|
|
39
|
+
private getPageScrollTop;
|
|
39
40
|
/**
|
|
40
41
|
* Handle scroll events for virtual viewport management
|
|
41
42
|
*/
|
|
@@ -65,6 +66,7 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
65
66
|
* Load initial pages (simple and reliable)
|
|
66
67
|
*/
|
|
67
68
|
private loadInitialPages;
|
|
69
|
+
private renderAllPagesBatched;
|
|
68
70
|
/**
|
|
69
71
|
* Render a specific page
|
|
70
72
|
*/
|
|
@@ -94,11 +96,10 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
94
96
|
* Check if text selection is currently enabled
|
|
95
97
|
*/
|
|
96
98
|
isTextSelectionEnabled(): boolean;
|
|
97
|
-
loadHighlights(data:
|
|
98
|
-
addHighlight(
|
|
99
|
+
loadHighlights(data: InputHighlightData[]): void;
|
|
100
|
+
addHighlight(highlight: InputHighlightData): void;
|
|
99
101
|
removeHighlight(termId: string): void;
|
|
100
|
-
updateHighlightStyle(
|
|
101
|
-
getHighlightsForPage(pageNumber: number): TermOccurrence[];
|
|
102
|
+
updateHighlightStyle(termId: string, stylePatch: Partial<HighlightStyle>): void;
|
|
102
103
|
/**
|
|
103
104
|
* Update unified layer for a specific page
|
|
104
105
|
*/
|
|
@@ -119,16 +120,14 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
119
120
|
clearSelection: () => void;
|
|
120
121
|
selectText: (range: TextRange) => void;
|
|
121
122
|
copySelection: (format?: "plain" | "formatted" | "citation") => void;
|
|
122
|
-
createHighlightFromSelection: (
|
|
123
|
+
createHighlightFromSelection: (style?: HighlightStyle) => InputHighlightData | null;
|
|
123
124
|
};
|
|
125
|
+
private getNavOccurrences;
|
|
124
126
|
goToHighlight(termId: string, occurrenceIndex?: number): void;
|
|
125
|
-
nextHighlight(
|
|
126
|
-
previousHighlight(
|
|
127
|
+
nextHighlight(): void;
|
|
128
|
+
previousHighlight(): void;
|
|
127
129
|
goToCoordinate(pageNumber: number, x: number, y: number): void;
|
|
128
|
-
|
|
129
|
-
filterByCategory(categories: string[]): void;
|
|
130
|
-
highlightSearchResults(query: string): void;
|
|
131
|
-
clearSearchResults(): void;
|
|
130
|
+
searchHighlights(query: string): InputHighlightData[];
|
|
132
131
|
setInteractionMode(mode: InteractionMode): void;
|
|
133
132
|
getInteractionMode(): InteractionMode;
|
|
134
133
|
getPerformanceMetrics(): PerformanceMetrics;
|
|
@@ -161,22 +160,17 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
161
160
|
};
|
|
162
161
|
};
|
|
163
162
|
refresh(): void;
|
|
163
|
+
private refreshHighlightLayerForPage;
|
|
164
164
|
/**
|
|
165
165
|
* Add highlights to a rendered page
|
|
166
166
|
*/
|
|
167
167
|
private addHighlightsToPage;
|
|
168
|
+
private getHighlightById;
|
|
169
|
+
private getHighlightStyle;
|
|
168
170
|
/**
|
|
169
171
|
* Update highlights colors for specified page
|
|
170
172
|
* */
|
|
171
173
|
updateHighlightsStyles(pageNumber: number, hoveredIds?: string[]): void;
|
|
172
|
-
/**
|
|
173
|
-
* Get highlight color
|
|
174
|
-
*/
|
|
175
|
-
private getHighlightColor;
|
|
176
|
-
/**
|
|
177
|
-
* Get color for highlight category
|
|
178
|
-
*/
|
|
179
|
-
private getCategoryColor;
|
|
180
174
|
/**
|
|
181
175
|
* Build spatial index for a specific page
|
|
182
176
|
*/
|
|
@@ -186,11 +180,24 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
186
180
|
*/
|
|
187
181
|
private buildAllSpatialIndices;
|
|
188
182
|
/**
|
|
189
|
-
* Get
|
|
183
|
+
* Get the number of highlights on a given page.
|
|
184
|
+
*
|
|
185
|
+
* This reads from the precomputed `highlightsIndex.pages` map, which stores
|
|
186
|
+
* arrays of highlight references keyed by the page number as a string.
|
|
187
|
+
* If there are no references for the requested page, an empty array is used,
|
|
188
|
+
* and the method returns 0.
|
|
189
|
+
*
|
|
190
|
+
* @param pageNumber - The 1-based page number to count highlights for.
|
|
191
|
+
* @returns The total number of highlight references on the page.
|
|
190
192
|
*/
|
|
191
193
|
private getHighlightCountForPage;
|
|
192
194
|
/**
|
|
193
|
-
* Update analytics
|
|
195
|
+
* Update analytics information based on the current highlights index.
|
|
196
|
+
*
|
|
197
|
+
* This method recalculates the total number of highlights by reading the
|
|
198
|
+
* length of `this.highlightsIndex.highlights` and updates the
|
|
199
|
+
* `this.analytics` object with the new `totalHighlights` value, while
|
|
200
|
+
* preserving all other existing analytics properties.
|
|
194
201
|
*/
|
|
195
202
|
private updateAnalytics;
|
|
196
203
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFHighlightViewer.d.ts","sourceRoot":"","sources":["../src/PDFHighlightViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"PDFHighlightViewer.d.ts","sourceRoot":"","sources":["../src/PDFHighlightViewer.ts"],"names":[],"mappings":"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"}
|