@epam/pdf-highlighter-kit 0.0.3 → 0.0.4
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 +185 -61
- 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 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- 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
|
@@ -8,17 +8,21 @@ High-performance PDF viewer with intelligent highlighting and text selection cap
|
|
|
8
8
|
npm install @epam/pdf-highlighter-kit pdfjs-dist
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
> Peer dependency: `pdfjs-dist` (see Requirements).
|
|
12
|
+
|
|
11
13
|
## Quick Start
|
|
12
14
|
|
|
13
|
-
```
|
|
15
|
+
```ts
|
|
14
16
|
import { PDFHighlightViewer } from '@epam/pdf-highlighter-kit';
|
|
17
|
+
import type { InputHighlightData } from '@epam/pdf-highlighter-kit';
|
|
15
18
|
import '@epam/pdf-highlighter-kit/styles/pdf-highlight-viewer.css';
|
|
16
19
|
|
|
17
20
|
// Create viewer instance
|
|
18
21
|
const viewer = new PDFHighlightViewer();
|
|
19
22
|
|
|
20
23
|
// Initialize with container element
|
|
21
|
-
const container = document.getElementById('pdf-container');
|
|
24
|
+
const container = document.getElementById('pdf-container') as HTMLElement;
|
|
25
|
+
|
|
22
26
|
await viewer.init(container, {
|
|
23
27
|
enableTextSelection: true,
|
|
24
28
|
enableVirtualScrolling: true,
|
|
@@ -30,34 +34,73 @@ await viewer.init(container, {
|
|
|
30
34
|
// Load PDF document
|
|
31
35
|
await viewer.loadPDF('/path/to/document.pdf');
|
|
32
36
|
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
// Highlights
|
|
38
|
+
const highlights: InputHighlightData[] = [
|
|
39
|
+
{
|
|
40
|
+
id: 'term-001',
|
|
41
|
+
bboxes: [
|
|
42
|
+
// page is 1-based
|
|
43
|
+
{ page: 1, x1: 100, y1: 200, x2: 300, y2: 220 },
|
|
44
|
+
{ page: 3, x1: 80, y1: 140, x2: 260, y2: 160 },
|
|
45
|
+
],
|
|
46
|
+
style: {
|
|
47
|
+
backgroundColor: '#ffeb3b',
|
|
48
|
+
opacity: 0.3,
|
|
49
|
+
borderColor: '#d4c400',
|
|
50
|
+
borderWidth: '1px',
|
|
43
51
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
frequency: 5,
|
|
49
|
-
pages: [1, 3, 7],
|
|
50
|
-
},
|
|
52
|
+
tooltipText: 'Important Term',
|
|
53
|
+
metadata: {
|
|
54
|
+
frequency: 5,
|
|
55
|
+
tags: ['important', 'glossary'],
|
|
51
56
|
},
|
|
52
57
|
},
|
|
53
|
-
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
viewer.loadHighlights(highlights);
|
|
61
|
+
|
|
62
|
+
// Navigate to a highlight occurrence
|
|
63
|
+
viewer.goToHighlight('term-001', 0);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Data Model
|
|
67
|
+
|
|
68
|
+
### `InputHighlightData`
|
|
69
|
+
|
|
70
|
+
Each highlight carries its own style. No categories are required.
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
export interface BBox {
|
|
74
|
+
x1: number;
|
|
75
|
+
y1: number;
|
|
76
|
+
x2: number;
|
|
77
|
+
y2: number;
|
|
78
|
+
page: number;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface HighlightStyle {
|
|
82
|
+
backgroundColor: string;
|
|
83
|
+
borderColor?: string;
|
|
84
|
+
borderWidth?: string;
|
|
85
|
+
opacity?: number;
|
|
86
|
+
hoverOpacity?: number;
|
|
87
|
+
pulseAnimation?: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface InputHighlightData {
|
|
91
|
+
id: string;
|
|
92
|
+
bboxes: BBox[];
|
|
93
|
+
style?: HighlightStyle;
|
|
94
|
+
tooltipText?: string;
|
|
95
|
+
metadata?: Record<string, any>;
|
|
96
|
+
}
|
|
54
97
|
```
|
|
55
98
|
|
|
56
99
|
## Configuration Options
|
|
57
100
|
|
|
58
101
|
### ViewerConfig
|
|
59
102
|
|
|
60
|
-
```
|
|
103
|
+
```ts
|
|
61
104
|
interface ViewerConfig {
|
|
62
105
|
// Enable text selection functionality
|
|
63
106
|
enableTextSelection?: boolean;
|
|
@@ -74,11 +117,16 @@ interface ViewerConfig {
|
|
|
74
117
|
// Interaction mode: 'select' | 'highlight' | 'hybrid'
|
|
75
118
|
interactionMode?: 'select' | 'highlight' | 'hybrid';
|
|
76
119
|
|
|
77
|
-
// Custom styles configuration
|
|
120
|
+
// Custom styles configuration (viewer/selection CSS). Highlight styles are per-highlight.
|
|
78
121
|
customStyles?: StyleConfig;
|
|
79
122
|
|
|
80
123
|
// PDF.js worker source URL
|
|
81
124
|
workerSrc?: string;
|
|
125
|
+
|
|
126
|
+
// Highlight UI config (style is per highlight)
|
|
127
|
+
highlightsConfig?: {
|
|
128
|
+
enableMultilineHover?: boolean;
|
|
129
|
+
};
|
|
82
130
|
}
|
|
83
131
|
```
|
|
84
132
|
|
|
@@ -94,13 +142,36 @@ Initialize the viewer with a container element and optional configuration.
|
|
|
94
142
|
|
|
95
143
|
Load a PDF document from URL or ArrayBuffer.
|
|
96
144
|
|
|
97
|
-
#### `loadHighlights(highlights:
|
|
145
|
+
#### `loadHighlights(highlights: InputHighlightData[]): void`
|
|
146
|
+
|
|
147
|
+
Replace current highlights with the provided list.
|
|
148
|
+
|
|
149
|
+
#### `addHighlight(highlight: InputHighlightData): void`
|
|
150
|
+
|
|
151
|
+
Add a single highlight (incremental update).
|
|
152
|
+
|
|
153
|
+
#### `removeHighlight(termId: string): void`
|
|
154
|
+
|
|
155
|
+
Remove highlight by its `id`.
|
|
156
|
+
|
|
157
|
+
#### `updateHighlightStyle(termId: string, stylePatch: Partial<HighlightStyle>): void`
|
|
98
158
|
|
|
99
|
-
|
|
159
|
+
Update highlight style by id (patch merge).
|
|
160
|
+
|
|
161
|
+
#### `goToHighlight(termId: string, bboxIndex?: number): void`
|
|
162
|
+
|
|
163
|
+
Navigate to a specific highlight occurrence. `bboxIndex` defaults to `0`.
|
|
164
|
+
|
|
165
|
+
#### `nextHighlight(termId?: string): void` / `previousHighlight(termId?: string): void`
|
|
166
|
+
|
|
167
|
+
Navigate across highlight occurrences:
|
|
168
|
+
|
|
169
|
+
- without `termId` → across all highlights in document order
|
|
170
|
+
- with `termId` → only within that highlight’s occurrences
|
|
100
171
|
|
|
101
172
|
#### `goToPage(pageNumber: number): void`
|
|
102
173
|
|
|
103
|
-
Navigate to a specific page.
|
|
174
|
+
Navigate to a specific page (1-based).
|
|
104
175
|
|
|
105
176
|
#### `zoomIn(): void` / `zoomOut(): void`
|
|
106
177
|
|
|
@@ -110,46 +181,95 @@ Zoom in or out of the PDF.
|
|
|
110
181
|
|
|
111
182
|
Set a specific zoom level (e.g., 1.0 for 100%, 1.5 for 150%).
|
|
112
183
|
|
|
113
|
-
#### `search(query: string): Promise<SearchResult[]>`
|
|
114
|
-
|
|
115
|
-
Search for text in the PDF document.
|
|
116
|
-
|
|
117
184
|
#### `destroy(): void`
|
|
118
185
|
|
|
119
186
|
Clean up and destroy the viewer instance.
|
|
120
187
|
|
|
121
|
-
|
|
188
|
+
## Events
|
|
122
189
|
|
|
123
190
|
The viewer emits various events that you can listen to:
|
|
124
191
|
|
|
125
|
-
```
|
|
126
|
-
viewer.
|
|
127
|
-
console.log('
|
|
192
|
+
```ts
|
|
193
|
+
viewer.addEventListener('initialized', () => {
|
|
194
|
+
console.log('Viewer initialized');
|
|
128
195
|
});
|
|
129
196
|
|
|
130
|
-
viewer.
|
|
131
|
-
console.log('
|
|
197
|
+
viewer.addEventListener('pdfLoaded', (e) => {
|
|
198
|
+
console.log('PDF loaded. Total pages:', e.totalPages);
|
|
132
199
|
});
|
|
133
200
|
|
|
134
|
-
viewer.
|
|
135
|
-
console.log('
|
|
201
|
+
viewer.addEventListener('pageChanged', (e) => {
|
|
202
|
+
console.log('Current page:', e.pageNumber);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
viewer.addEventListener('zoomChanged', (e) => {
|
|
206
|
+
console.log('Zoom changed:', e.scale);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
viewer.addEventListener('renderComplete', (e) => {
|
|
210
|
+
console.log('Page rendered:', e.pageNumber);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
viewer.addEventListener('renderError', (e) => {
|
|
214
|
+
console.error('Render error:', e.pageNumber, e.error);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
viewer.addEventListener('highlightsLoaded', (e) => {
|
|
218
|
+
console.log('Highlights loaded:', e.data?.length ?? 0);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
viewer.addEventListener('highlightHover', (e) => {
|
|
222
|
+
console.log('Highlight hover:', e.termId, 'page', e.pageNumber, 'bbox', e.bboxIndex);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
viewer.addEventListener('highlightBlur', (e) => {
|
|
226
|
+
console.log('Highlight blur:', e.termId);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
viewer.addEventListener('highlightClick', (e) => {
|
|
230
|
+
console.log('Highlight clicked:', e.termId, 'page', e.pageNumber, 'bbox', e.bboxIndex);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
viewer.addEventListener('navigationComplete', (e) => {
|
|
234
|
+
console.log('Navigation complete:', e.termId, e.pageNumber, e.occurrenceIndex);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
viewer.addEventListener('selectionChanged', (e) => {
|
|
238
|
+
console.log('Text selected:', e.text);
|
|
239
|
+
console.log('Pages:', e.pageNumbers);
|
|
240
|
+
console.log('Overlapping highlights:', e.highlights); // array of bbox refs
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
viewer.addEventListener('selectionHighlighted', (e) => {
|
|
244
|
+
console.log('Selection highlighted:', e.termId);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
viewer.addEventListener('error', (e) => {
|
|
248
|
+
console.error('Viewer error:', e);
|
|
136
249
|
});
|
|
137
250
|
```
|
|
138
251
|
|
|
139
|
-
|
|
252
|
+
> Event payload fields may include `termId`, `pageNumber`, `bboxIndex`, and `bbox` depending on event type.
|
|
140
253
|
|
|
141
|
-
|
|
254
|
+
## Advanced Usage
|
|
142
255
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
256
|
+
### Custom Styling (per highlight)
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
const highlight: InputHighlightData = {
|
|
260
|
+
id: 'note-001',
|
|
261
|
+
bboxes: [{ page: 2, x1: 120, y1: 330, x2: 420, y2: 355 }],
|
|
262
|
+
style: {
|
|
263
|
+
backgroundColor: '#ffd54f',
|
|
264
|
+
opacity: 0.25,
|
|
265
|
+
borderColor: '#ff8f00',
|
|
266
|
+
borderWidth: '1px',
|
|
267
|
+
hoverOpacity: 0.6,
|
|
151
268
|
},
|
|
152
|
-
|
|
269
|
+
tooltipText: 'My note',
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
viewer.addHighlight(highlight);
|
|
153
273
|
```
|
|
154
274
|
|
|
155
275
|
### React Integration
|
|
@@ -157,9 +277,16 @@ await viewer.init(container, {
|
|
|
157
277
|
```tsx
|
|
158
278
|
import { useEffect, useRef } from 'react';
|
|
159
279
|
import { PDFHighlightViewer } from '@epam/pdf-highlighter-kit';
|
|
280
|
+
import type { InputHighlightData } from '@epam/pdf-highlighter-kit';
|
|
160
281
|
import '@epam/pdf-highlighter-kit/styles/pdf-highlight-viewer.css';
|
|
161
282
|
|
|
162
|
-
function PDFViewer({
|
|
283
|
+
export function PDFViewer({
|
|
284
|
+
pdfUrl,
|
|
285
|
+
highlights,
|
|
286
|
+
}: {
|
|
287
|
+
pdfUrl: string;
|
|
288
|
+
highlights: InputHighlightData[];
|
|
289
|
+
}) {
|
|
163
290
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
164
291
|
const viewerRef = useRef<PDFHighlightViewer | null>(null);
|
|
165
292
|
|
|
@@ -169,27 +296,24 @@ function PDFViewer({ pdfUrl, highlights }) {
|
|
|
169
296
|
const viewer = new PDFHighlightViewer();
|
|
170
297
|
viewerRef.current = viewer;
|
|
171
298
|
|
|
172
|
-
|
|
173
|
-
.init(containerRef.current
|
|
299
|
+
(async () => {
|
|
300
|
+
await viewer.init(containerRef.current!, {
|
|
174
301
|
enableTextSelection: true,
|
|
175
302
|
enableVirtualScrolling: true,
|
|
176
|
-
})
|
|
177
|
-
.then(() => {
|
|
178
|
-
viewer.loadPDF(pdfUrl);
|
|
179
|
-
if (highlights) {
|
|
180
|
-
viewer.loadHighlights(highlights);
|
|
181
|
-
}
|
|
182
303
|
});
|
|
183
304
|
|
|
305
|
+
await viewer.loadPDF(pdfUrl);
|
|
306
|
+
viewer.loadHighlights(highlights);
|
|
307
|
+
})();
|
|
308
|
+
|
|
184
309
|
return () => {
|
|
185
310
|
viewer.destroy();
|
|
311
|
+
viewerRef.current = null;
|
|
186
312
|
};
|
|
187
313
|
}, [pdfUrl]);
|
|
188
314
|
|
|
189
315
|
useEffect(() => {
|
|
190
|
-
|
|
191
|
-
viewerRef.current.loadHighlights(highlights);
|
|
192
|
-
}
|
|
316
|
+
viewerRef.current?.loadHighlights(highlights);
|
|
193
317
|
}, [highlights]);
|
|
194
318
|
|
|
195
319
|
return <div ref={containerRef} style={{ width: '100%', height: '100vh' }} />;
|
|
@@ -216,4 +340,4 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
216
340
|
|
|
217
341
|
## Support
|
|
218
342
|
|
|
219
|
-
For issues and questions, please use the
|
|
343
|
+
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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"}
|