@epam/pdf-highlighter-kit 0.0.5 → 0.0.7
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 +101 -1
- package/dist/PDFHighlightViewer.d.ts +12 -3
- package/dist/PDFHighlightViewer.d.ts.map +1 -1
- package/dist/PDFHighlightViewer.js +227 -62
- package/dist/PDFHighlightViewer.js.map +1 -1
- package/dist/api.d.ts +4 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/core/pdf-engine.d.ts +7 -1
- package/dist/core/pdf-engine.d.ts.map +1 -1
- package/dist/core/pdf-engine.js +61 -0
- package/dist/core/pdf-engine.js.map +1 -1
- package/dist/core/unified-layer-builder.d.ts +1 -0
- package/dist/core/unified-layer-builder.d.ts.map +1 -1
- package/dist/core/unified-layer-builder.js +54 -4
- package/dist/core/unified-layer-builder.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pdf-highlight-viewer.css +39 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/label-style.d.ts +20 -0
- package/dist/utils/label-style.d.ts.map +1 -0
- package/dist/utils/label-style.js +52 -0
- package/dist/utils/label-style.js.map +1 -0
- package/dist/utils/sanitize-icon-html.d.ts +12 -0
- package/dist/utils/sanitize-icon-html.d.ts.map +1 -0
- package/dist/utils/sanitize-icon-html.js +139 -0
- package/dist/utils/sanitize-icon-html.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -56,6 +56,8 @@ const highlights: InputHighlightData[] = [
|
|
|
56
56
|
borderColor: '#d4c400',
|
|
57
57
|
borderWidth: '1px',
|
|
58
58
|
},
|
|
59
|
+
label: 'Important Term',
|
|
60
|
+
labelStyle: { fontSize: 11 },
|
|
59
61
|
tooltipText: 'Important Term',
|
|
60
62
|
metadata: {
|
|
61
63
|
frequency: 5,
|
|
@@ -76,6 +78,10 @@ viewer.goToHighlight('term-001', 0);
|
|
|
76
78
|
|
|
77
79
|
Each highlight carries its own style. No categories are required.
|
|
78
80
|
|
|
81
|
+
**Labels:** You can add an optional `label` that is displayed to the left of the highlight, flush against it. By default the label uses the highlight’s color (from `style.borderColor` or `style.backgroundColor`), `border: 1px solid`, and `padding: 2px 4px`. Override any of these with `labelStyle` (e.g. `fontSize`, `color`, `padding`, `border`). To hide the label border, set `labelStyle: { border: 'none' }` (the default border is always applied unless overridden).
|
|
82
|
+
|
|
83
|
+
**Icon before label:** Optionally set `beforeIcon` to an inline SVG string (e.g. from [Tabler Icons](https://tabler.io/icons)) to render an icon inside the label frame, to the left of the text. The icon inherits the label color via `currentColor`. Use `labelStyle.iconSize` to set the icon size (e.g. `14` or `'14px'`) and `labelStyle.iconColor` to set the icon color (e.g. `'#ff6b6b'`); if `iconColor` is not set, the icon uses the label text color. Only pass trusted SVG content (e.g. from your bundle or `@tabler/icons`); in React with Vite you can use `import iconSvg from '@tabler/icons/icons/outline/alert-circle.svg?raw'` and pass `iconSvg` as `beforeIcon`.
|
|
84
|
+
|
|
79
85
|
```ts
|
|
80
86
|
export interface BBox {
|
|
81
87
|
x1: number;
|
|
@@ -85,6 +91,11 @@ export interface BBox {
|
|
|
85
91
|
page: number;
|
|
86
92
|
}
|
|
87
93
|
|
|
94
|
+
export interface BBoxDimensions {
|
|
95
|
+
width: number;
|
|
96
|
+
height: number;
|
|
97
|
+
}
|
|
98
|
+
|
|
88
99
|
export interface HighlightStyle {
|
|
89
100
|
backgroundColor: string;
|
|
90
101
|
borderColor?: string;
|
|
@@ -94,15 +105,45 @@ export interface HighlightStyle {
|
|
|
94
105
|
pulseAnimation?: boolean;
|
|
95
106
|
}
|
|
96
107
|
|
|
108
|
+
export interface HighlightLabelStyle {
|
|
109
|
+
fontSize?: string | number;
|
|
110
|
+
color?: string;
|
|
111
|
+
backgroundColor?: string;
|
|
112
|
+
padding?: string;
|
|
113
|
+
borderRadius?: string;
|
|
114
|
+
fontFamily?: string;
|
|
115
|
+
fontWeight?: string | number;
|
|
116
|
+
border?: string;
|
|
117
|
+
whiteSpace?: string;
|
|
118
|
+
iconSize?: string | number; // size for beforeIcon (e.g. 14 or '14px')
|
|
119
|
+
}
|
|
120
|
+
|
|
97
121
|
export interface InputHighlightData {
|
|
98
122
|
id: string;
|
|
99
123
|
bboxes: BBox[];
|
|
124
|
+
bboxOrigin?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
125
|
+
bboxSourceDimensions?: BBoxDimensions;
|
|
100
126
|
style?: HighlightStyle;
|
|
127
|
+
label?: string;
|
|
128
|
+
beforeIcon?: string; // inline SVG string (trusted content only, e.g. Tabler icons)
|
|
129
|
+
labelStyle?: HighlightLabelStyle;
|
|
101
130
|
tooltipText?: string;
|
|
102
131
|
metadata?: Record<string, any>;
|
|
103
132
|
}
|
|
104
133
|
```
|
|
105
134
|
|
|
135
|
+
If `bboxSourceDimensions` is provided, each bbox coordinate is recalculated against the actual page size:
|
|
136
|
+
|
|
137
|
+
```ts
|
|
138
|
+
scaledX = (x / bboxSourceDimensions.width) * actualPageWidth;
|
|
139
|
+
scaledY = (y / bboxSourceDimensions.height) * actualPageHeight;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Priority (highest to lowest):
|
|
143
|
+
|
|
144
|
+
- `highlight.bboxOrigin` / `highlight.bboxSourceDimensions`
|
|
145
|
+
- global viewer options (`bboxOrigin`, `bboxSourceDimensions`)
|
|
146
|
+
|
|
106
147
|
## Configuration Options
|
|
107
148
|
|
|
108
149
|
### ViewerConfig
|
|
@@ -134,6 +175,13 @@ interface ViewerConfig {
|
|
|
134
175
|
highlightsConfig?: {
|
|
135
176
|
enableMultilineHover?: boolean;
|
|
136
177
|
};
|
|
178
|
+
|
|
179
|
+
// Coordinate origin for incoming bbox values
|
|
180
|
+
// Default: 'bottom-right'
|
|
181
|
+
bboxOrigin?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
182
|
+
|
|
183
|
+
// Page dimensions for which bbox coordinates were calculated
|
|
184
|
+
bboxSourceDimensions?: { width: number; height: number };
|
|
137
185
|
}
|
|
138
186
|
```
|
|
139
187
|
|
|
@@ -188,6 +236,14 @@ Zoom in or out of the PDF.
|
|
|
188
236
|
|
|
189
237
|
Set a specific zoom level (e.g., 1.0 for 100%, 1.5 for 150%).
|
|
190
238
|
|
|
239
|
+
#### `getThumbnails(pageNumbers: number[], options?: ThumbnailOptions): Promise<Map<number, HTMLCanvasElement>>`
|
|
240
|
+
|
|
241
|
+
Render page thumbnails (miniatures) for the given page numbers. Returns a `Map` of page number → canvas. Use this when you need canvas elements (e.g. for drawing or custom display). Options: `maxWidth` (target width in px), `scale` (viewport scale).
|
|
242
|
+
|
|
243
|
+
#### `getThumbnailsDataUrl(pageNumbers: number[], options?: ThumbnailOptions): Promise<Map<number, string>>`
|
|
244
|
+
|
|
245
|
+
Same as `getThumbnails` but returns data URLs (e.g. for `<img src="...">`). Options include `maxWidth`, `scale`, `format` (`'image/jpeg' | 'image/webp' | 'image/png'`), and `quality` (0–1 for jpeg/webp). Thumbnails are cached; repeated calls for the same page return cached results.
|
|
246
|
+
|
|
191
247
|
#### `destroy(): void`
|
|
192
248
|
|
|
193
249
|
Clean up and destroy the viewer instance.
|
|
@@ -260,6 +316,27 @@ viewer.addEventListener('error', (e) => {
|
|
|
260
316
|
|
|
261
317
|
## Advanced Usage
|
|
262
318
|
|
|
319
|
+
### Page thumbnails
|
|
320
|
+
|
|
321
|
+
```ts
|
|
322
|
+
// ThumbnailOptions: maxWidth?, scale?, format?, quality?
|
|
323
|
+
const pageNumbers = Array.from({ length: viewer.getTotalPages() }, (_, i) => i + 1);
|
|
324
|
+
|
|
325
|
+
// Option 1: get data URLs for <img src="...">
|
|
326
|
+
const dataUrls = await viewer.getThumbnailsDataUrl(pageNumbers, {
|
|
327
|
+
maxWidth: 120,
|
|
328
|
+
format: 'image/webp',
|
|
329
|
+
quality: 0.85,
|
|
330
|
+
});
|
|
331
|
+
// dataUrls is Map<number, string> — use dataUrls.get(pageNum) in img src
|
|
332
|
+
|
|
333
|
+
// Option 2: get canvases for custom rendering
|
|
334
|
+
const canvases = await viewer.getThumbnails(pageNumbers, { maxWidth: 120 });
|
|
335
|
+
// canvases is Map<number, HTMLCanvasElement>
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
For a single page, pass an array with one number: `getThumbnailsDataUrl([5], options)`. Thumbnails are cached inside the viewer; reopening the panel does not re-render unless the cache was cleared (e.g. after loading a new PDF).
|
|
339
|
+
|
|
263
340
|
### Custom Styling (per highlight)
|
|
264
341
|
|
|
265
342
|
```ts
|
|
@@ -273,12 +350,36 @@ const highlight: InputHighlightData = {
|
|
|
273
350
|
borderWidth: '1px',
|
|
274
351
|
hoverOpacity: 0.6,
|
|
275
352
|
},
|
|
353
|
+
label: 'My note',
|
|
354
|
+
labelStyle: { padding: '2px 6px', borderRadius: '4px' },
|
|
276
355
|
tooltipText: 'My note',
|
|
277
356
|
};
|
|
278
357
|
|
|
279
358
|
viewer.addHighlight(highlight);
|
|
280
359
|
```
|
|
281
360
|
|
|
361
|
+
### Label with icon (e.g. Tabler Icons)
|
|
362
|
+
|
|
363
|
+
Pass an inline SVG string as `beforeIcon` to show an icon inside the label frame. Use trusted content only. With Vite you can import SVG as raw string:
|
|
364
|
+
|
|
365
|
+
```ts
|
|
366
|
+
// Inline SVG string (e.g. from Tabler: import icon from '@tabler/icons/icons/outline/alert-circle.svg?raw')
|
|
367
|
+
const alertIconSvg =
|
|
368
|
+
'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 8v4"/><path d="M12 16h.01"/><circle cx="12" cy="12" r="10"/></svg>';
|
|
369
|
+
|
|
370
|
+
const highlight: InputHighlightData = {
|
|
371
|
+
id: 'alert-001',
|
|
372
|
+
bboxes: [{ page: 1, x1: 100, y1: 200, x2: 300, y2: 220 }],
|
|
373
|
+
style: { backgroundColor: '#ffeb3b', opacity: 0.3, borderColor: '#d4c400' },
|
|
374
|
+
label: 'Important',
|
|
375
|
+
beforeIcon: alertIconSvg,
|
|
376
|
+
labelStyle: { fontSize: 11, iconSize: 14 },
|
|
377
|
+
tooltipText: 'Important',
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
viewer.addHighlight(highlight);
|
|
381
|
+
```
|
|
382
|
+
|
|
282
383
|
### React Integration
|
|
283
384
|
|
|
284
385
|
```tsx
|
|
@@ -308,7 +409,6 @@ export function PDFViewer({
|
|
|
308
409
|
enableTextSelection: true,
|
|
309
410
|
enableVirtualScrolling: true,
|
|
310
411
|
});
|
|
311
|
-
|
|
312
412
|
await viewer.loadPDF(pdfUrl);
|
|
313
413
|
viewer.loadHighlights(highlights);
|
|
314
414
|
})();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PDFHighlightViewer as IPDFHighlightViewer } from './api';
|
|
2
|
-
import { ViewerOptions, TextRange, SelectionWithMetadata, PerformanceMetrics, HighlightAnalytics, AccessibilityFeatures, InteractionMode, InputHighlightData, HighlightStyle } from './types';
|
|
2
|
+
import { ViewerOptions, TextRange, SelectionWithMetadata, PerformanceMetrics, HighlightAnalytics, AccessibilityFeatures, InteractionMode, InputHighlightData, HighlightStyle, ZoomValue, ThumbnailOptions } from './types';
|
|
3
3
|
export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
4
4
|
private pdfEngine;
|
|
5
5
|
private viewportManager;
|
|
@@ -74,12 +74,18 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
74
74
|
preloadPages(pageNumbers: number[]): Promise<void>;
|
|
75
75
|
setPage(pageNumber: number): void;
|
|
76
76
|
getZoom(): number;
|
|
77
|
-
setZoom(
|
|
77
|
+
setZoom(value: ZoomValue): void;
|
|
78
|
+
private applyZoom;
|
|
79
|
+
private setAutoZoom;
|
|
80
|
+
private setPageFitZoom;
|
|
81
|
+
private computeFitScales;
|
|
78
82
|
zoomIn(): void;
|
|
79
83
|
zoomOut(): void;
|
|
80
84
|
resetZoom(): void;
|
|
81
85
|
getCurrentPage(): number;
|
|
82
86
|
getTotalPages(): number;
|
|
87
|
+
getThumbnails(pageNumbers: number[], options?: ThumbnailOptions): Promise<Map<number, HTMLCanvasElement>>;
|
|
88
|
+
getThumbnailsDataUrl(pageNumbers: number[], options?: ThumbnailOptions): Promise<Map<number, string>>;
|
|
83
89
|
/**
|
|
84
90
|
* Enable text selection functionality
|
|
85
91
|
*/
|
|
@@ -167,6 +173,7 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
167
173
|
private addHighlightsToPage;
|
|
168
174
|
private getHighlightById;
|
|
169
175
|
private getHighlightStyle;
|
|
176
|
+
private getHighlightElements;
|
|
170
177
|
/**
|
|
171
178
|
* Update highlights colors for specified page
|
|
172
179
|
* */
|
|
@@ -175,6 +182,8 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
175
182
|
* Build spatial index for a specific page
|
|
176
183
|
*/
|
|
177
184
|
private buildSpatialIndexForPage;
|
|
185
|
+
private toPageCoordinateDimensions;
|
|
186
|
+
private normalizeBBoxForPage;
|
|
178
187
|
/**
|
|
179
188
|
* Build spatial indices for all pages
|
|
180
189
|
*/
|
|
@@ -207,7 +216,7 @@ export declare class PDFHighlightViewer implements IPDFHighlightViewer {
|
|
|
207
216
|
/**
|
|
208
217
|
* Clear selected term highlighting
|
|
209
218
|
*/
|
|
210
|
-
clearSelectedTermHighlighting(): void;
|
|
219
|
+
clearSelectedTermHighlighting(clearStoredSelection?: boolean): void;
|
|
211
220
|
/**
|
|
212
221
|
* Add text layer for text selection functionality
|
|
213
222
|
*/
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"PDFHighlightViewer.d.ts","sourceRoot":"","sources":["../src/PDFHighlightViewer.ts"],"names":[],"mappings":"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"}
|