@epam/pdf-highlighter-kit 0.0.1

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 (77) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +219 -0
  3. package/dist/PDFHighlightViewer.d.ts +219 -0
  4. package/dist/PDFHighlightViewer.d.ts.map +1 -0
  5. package/dist/PDFHighlightViewer.js +1551 -0
  6. package/dist/PDFHighlightViewer.js.map +1 -0
  7. package/dist/api.d.ts +59 -0
  8. package/dist/api.d.ts.map +1 -0
  9. package/dist/api.js +2 -0
  10. package/dist/api.js.map +1 -0
  11. package/dist/config.d.ts +12 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +32 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/core/interaction-handler.d.ts +63 -0
  16. package/dist/core/interaction-handler.d.ts.map +1 -0
  17. package/dist/core/interaction-handler.js +430 -0
  18. package/dist/core/interaction-handler.js.map +1 -0
  19. package/dist/core/pdf-engine.d.ts +37 -0
  20. package/dist/core/pdf-engine.d.ts.map +1 -0
  21. package/dist/core/pdf-engine.js +281 -0
  22. package/dist/core/pdf-engine.js.map +1 -0
  23. package/dist/core/performance-optimizer.d.ts +91 -0
  24. package/dist/core/performance-optimizer.d.ts.map +1 -0
  25. package/dist/core/performance-optimizer.js +473 -0
  26. package/dist/core/performance-optimizer.js.map +1 -0
  27. package/dist/core/style-manager.d.ts +88 -0
  28. package/dist/core/style-manager.d.ts.map +1 -0
  29. package/dist/core/style-manager.js +413 -0
  30. package/dist/core/style-manager.js.map +1 -0
  31. package/dist/core/text-segmentation.d.ts +41 -0
  32. package/dist/core/text-segmentation.d.ts.map +1 -0
  33. package/dist/core/text-segmentation.js +338 -0
  34. package/dist/core/text-segmentation.js.map +1 -0
  35. package/dist/core/unified-layer-builder.d.ts +27 -0
  36. package/dist/core/unified-layer-builder.d.ts.map +1 -0
  37. package/dist/core/unified-layer-builder.js +331 -0
  38. package/dist/core/unified-layer-builder.js.map +1 -0
  39. package/dist/core/viewport-manager.d.ts +103 -0
  40. package/dist/core/viewport-manager.d.ts.map +1 -0
  41. package/dist/core/viewport-manager.js +222 -0
  42. package/dist/core/viewport-manager.js.map +1 -0
  43. package/dist/index.d.ts +27 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +57 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/pdf-highlight-viewer.css +488 -0
  48. package/dist/types.d.ts +279 -0
  49. package/dist/types.d.ts.map +1 -0
  50. package/dist/types.js +2 -0
  51. package/dist/types.js.map +1 -0
  52. package/dist/utils/highlight-adapter.d.ts +31 -0
  53. package/dist/utils/highlight-adapter.d.ts.map +1 -0
  54. package/dist/utils/highlight-adapter.js +202 -0
  55. package/dist/utils/highlight-adapter.js.map +1 -0
  56. package/dist/utils/pdf-utils.d.ts +14 -0
  57. package/dist/utils/pdf-utils.d.ts.map +1 -0
  58. package/dist/utils/pdf-utils.js +120 -0
  59. package/dist/utils/pdf-utils.js.map +1 -0
  60. package/dist/utils/worker-loader-simple.d.ts +8 -0
  61. package/dist/utils/worker-loader-simple.d.ts.map +1 -0
  62. package/dist/utils/worker-loader-simple.js +65 -0
  63. package/dist/utils/worker-loader-simple.js.map +1 -0
  64. package/dist/vite.config.d.ts +3 -0
  65. package/dist/vite.config.d.ts.map +1 -0
  66. package/dist/vite.config.js +20 -0
  67. package/dist/vite.config.js.map +1 -0
  68. package/dist/vitest.config.d.ts +3 -0
  69. package/dist/vitest.config.d.ts.map +1 -0
  70. package/dist/vitest.config.js +24 -0
  71. package/dist/vitest.config.js.map +1 -0
  72. package/dist/vitest.setup.d.ts +2 -0
  73. package/dist/vitest.setup.d.ts.map +1 -0
  74. package/dist/vitest.setup.js +8 -0
  75. package/dist/vitest.setup.js.map +1 -0
  76. package/package.json +74 -0
  77. package/styles/pdf-highlight-viewer.css +488 -0
@@ -0,0 +1,413 @@
1
+ export class CategoryStyleManager {
2
+ constructor() {
3
+ this.styles = new Map();
4
+ this.styleSheet = null;
5
+ this.styleElement = null;
6
+ this.initializeStyleSheet();
7
+ this.registerDefaultCategories();
8
+ }
9
+ /**
10
+ * Initialize CSS style sheet for dynamic styles
11
+ */
12
+ initializeStyleSheet() {
13
+ // Create style element
14
+ this.styleElement = document.createElement('style');
15
+ this.styleElement.id = 'pdf-highlight-dynamic-styles';
16
+ document.head.appendChild(this.styleElement);
17
+ // Get stylesheet reference
18
+ if (this.styleElement.sheet) {
19
+ this.styleSheet = this.styleElement.sheet;
20
+ }
21
+ }
22
+ /**
23
+ * Register default category styles
24
+ */
25
+ registerDefaultCategories() {
26
+ const defaultCategories = [
27
+ {
28
+ name: 'protein',
29
+ style: {
30
+ backgroundColor: 'rgba(255, 200, 0, 0.3)',
31
+ borderColor: 'rgba(255, 180, 0, 0.6)',
32
+ opacity: 0.3,
33
+ hoverOpacity: 0.5,
34
+ pulseAnimation: false,
35
+ },
36
+ },
37
+ {
38
+ name: 'gene',
39
+ style: {
40
+ backgroundColor: 'rgba(0, 200, 100, 0.3)',
41
+ borderColor: 'rgba(0, 180, 90, 0.6)',
42
+ opacity: 0.3,
43
+ hoverOpacity: 0.5,
44
+ pulseAnimation: false,
45
+ },
46
+ },
47
+ {
48
+ name: 'disease',
49
+ style: {
50
+ backgroundColor: 'rgba(220, 50, 50, 0.3)',
51
+ borderColor: 'rgba(200, 40, 40, 0.6)',
52
+ opacity: 0.3,
53
+ hoverOpacity: 0.5,
54
+ pulseAnimation: true,
55
+ },
56
+ },
57
+ {
58
+ name: 'chemical',
59
+ style: {
60
+ backgroundColor: 'rgba(0, 150, 255, 0.3)',
61
+ borderColor: 'rgba(0, 130, 235, 0.6)',
62
+ opacity: 0.3,
63
+ hoverOpacity: 0.5,
64
+ pulseAnimation: false,
65
+ },
66
+ },
67
+ {
68
+ name: 'species',
69
+ style: {
70
+ backgroundColor: 'rgba(150, 100, 200, 0.3)',
71
+ borderColor: 'rgba(130, 80, 180, 0.6)',
72
+ opacity: 0.3,
73
+ hoverOpacity: 0.5,
74
+ pulseAnimation: false,
75
+ },
76
+ },
77
+ ];
78
+ defaultCategories.forEach(({ name, style }) => {
79
+ this.registerCategory(name, style);
80
+ });
81
+ }
82
+ /**
83
+ * Register a new category style
84
+ */
85
+ registerCategory(name, style) {
86
+ const fullStyle = {
87
+ backgroundColor: style.backgroundColor,
88
+ borderColor: style.borderColor,
89
+ opacity: style.opacity ?? 0.3,
90
+ hoverOpacity: style.hoverOpacity ?? 0.5,
91
+ pulseAnimation: style.pulseAnimation ?? false,
92
+ };
93
+ this.styles.set(name, fullStyle);
94
+ this.updateStyleSheet(name, fullStyle);
95
+ }
96
+ /**
97
+ * Update existing category style
98
+ */
99
+ updateCategoryStyle(name, partialStyle) {
100
+ const existingStyle = this.styles.get(name);
101
+ if (!existingStyle) {
102
+ console.warn(`Category '${name}' not found. Registering as new category.`);
103
+ this.registerCategory(name, partialStyle);
104
+ return;
105
+ }
106
+ const updatedStyle = { ...existingStyle, ...partialStyle };
107
+ this.styles.set(name, updatedStyle);
108
+ this.updateStyleSheet(name, this.ensureCompleteStyle(updatedStyle));
109
+ }
110
+ /**
111
+ * Ensure CategoryStyle has all required properties
112
+ */
113
+ ensureCompleteStyle(style) {
114
+ return {
115
+ backgroundColor: style.backgroundColor,
116
+ borderColor: style.borderColor,
117
+ opacity: style.opacity ?? 0.3,
118
+ hoverOpacity: style.hoverOpacity ?? 0.6,
119
+ pulseAnimation: style.pulseAnimation ?? false,
120
+ };
121
+ }
122
+ /**
123
+ * Generate and inject CSS for a category
124
+ */
125
+ updateStyleSheet(category, style) {
126
+ if (!this.styleSheet)
127
+ return;
128
+ // Remove existing rules for this category
129
+ this.removeRulesForCategory(category);
130
+ const cssRules = this.generateCSSRules(category, style);
131
+ // Add new rules
132
+ cssRules.forEach((rule) => {
133
+ try {
134
+ this.styleSheet.insertRule(rule, this.styleSheet.cssRules.length);
135
+ }
136
+ catch (error) {
137
+ console.warn('Failed to insert CSS rule:', rule, error);
138
+ }
139
+ });
140
+ }
141
+ /**
142
+ * Generate CSS rules for a category
143
+ */
144
+ generateCSSRules(category, style) {
145
+ const rules = [];
146
+ // Base highlight style
147
+ rules.push(`
148
+ .${category}-highlight .highlight-background {
149
+ background: ${style.backgroundColor};
150
+ border: 1px solid ${style.borderColor};
151
+ opacity: ${style.opacity};
152
+ transition: opacity 0.2s ease, transform 0.2s ease;
153
+ }
154
+ `);
155
+ // Hover state
156
+ rules.push(`
157
+ .${category}-highlight:hover .highlight-background {
158
+ opacity: ${style.hoverOpacity};
159
+ transform: scale(1.02);
160
+ }
161
+ `);
162
+ // Selected state
163
+ rules.push(`
164
+ .${category}-highlight.selected .highlight-background {
165
+ opacity: 1;
166
+ border: 2px solid ${this.darkenColor(style.borderColor)};
167
+ outline: 2px solid #007acc;
168
+ outline-offset: 1px;
169
+ }
170
+ `);
171
+ // Focus state (accessibility)
172
+ rules.push(`
173
+ .${category}-highlight:focus .highlight-background {
174
+ opacity: 0.8;
175
+ outline: 2px solid #007acc;
176
+ outline-offset: 2px;
177
+ }
178
+ `);
179
+ // Pulse animation (if enabled)
180
+ if (style.pulseAnimation) {
181
+ rules.push(`
182
+ .${category}-highlight .highlight-background {
183
+ animation: pulse-${category} 2s ease-in-out infinite alternate;
184
+ }
185
+ `);
186
+ rules.push(`
187
+ @keyframes pulse-${category} {
188
+ from { opacity: ${style.opacity}; }
189
+ to { opacity: ${style.hoverOpacity}; }
190
+ }
191
+ `);
192
+ }
193
+ // High contrast support
194
+ rules.push(`
195
+ @media (prefers-contrast: high) {
196
+ .${category}-highlight .highlight-background {
197
+ border-width: 2px !important;
198
+ opacity: 0.8 !important;
199
+ }
200
+ }
201
+ `);
202
+ // Print styles
203
+ rules.push(`
204
+ @media print {
205
+ .${category}-highlight .highlight-background {
206
+ opacity: 0.6 !important;
207
+ animation: none !important;
208
+ }
209
+ }
210
+ `);
211
+ return rules;
212
+ }
213
+ /**
214
+ * Remove existing CSS rules for a category
215
+ */
216
+ removeRulesForCategory(category) {
217
+ if (!this.styleSheet)
218
+ return;
219
+ const rulesToRemove = [];
220
+ for (let i = 0; i < this.styleSheet.cssRules.length; i++) {
221
+ const rule = this.styleSheet.cssRules[i];
222
+ if (rule instanceof CSSStyleRule) {
223
+ if (rule.selectorText.includes(`.${category}-highlight`) ||
224
+ rule.cssText.includes(`pulse-${category}`)) {
225
+ rulesToRemove.unshift(i); // Add to beginning to remove in reverse order
226
+ }
227
+ }
228
+ if (rule instanceof CSSKeyframesRule) {
229
+ if (rule.name === `pulse-${category}`) {
230
+ rulesToRemove.unshift(i);
231
+ }
232
+ }
233
+ }
234
+ rulesToRemove.forEach((index) => {
235
+ try {
236
+ this.styleSheet.deleteRule(index);
237
+ }
238
+ catch (error) {
239
+ console.warn('Failed to delete CSS rule at index:', index, error);
240
+ }
241
+ });
242
+ }
243
+ /**
244
+ * Get computed style for a term
245
+ */
246
+ getComputedStyle(termId, state = 'default') {
247
+ // For now, return category-based styles
248
+ // In a full implementation, you'd look up the term's category
249
+ const category = this.getCategoryForTerm(termId);
250
+ const style = this.styles.get(category);
251
+ if (!style) {
252
+ return {};
253
+ }
254
+ const baseStyle = {
255
+ background: style.backgroundColor,
256
+ border: `1px solid ${style.borderColor}`,
257
+ opacity: style.opacity,
258
+ transition: 'opacity 0.2s ease, transform 0.2s ease',
259
+ };
260
+ switch (state) {
261
+ case 'hover':
262
+ return {
263
+ ...baseStyle,
264
+ opacity: style.hoverOpacity,
265
+ transform: 'scale(1.02)',
266
+ };
267
+ case 'selected':
268
+ return {
269
+ ...baseStyle,
270
+ opacity: 1,
271
+ border: `2px solid ${this.darkenColor(style.borderColor)}`,
272
+ outline: '2px solid #007acc',
273
+ outlineOffset: '1px',
274
+ };
275
+ default:
276
+ return baseStyle;
277
+ }
278
+ }
279
+ /**
280
+ * Get category for a term (simplified implementation)
281
+ */
282
+ getCategoryForTerm(_termId) {
283
+ // In a real implementation, you'd look this up from your data
284
+ // For now, return a default category
285
+ return 'protein';
286
+ }
287
+ /**
288
+ * Darken a color (utility function)
289
+ */
290
+ darkenColor(color) {
291
+ // Simple darkening by reducing opacity or converting rgba values
292
+ if (color.startsWith('rgba')) {
293
+ return color.replace(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/, (match, r, g, b, a) => {
294
+ const newR = Math.max(0, parseInt(r) - 40);
295
+ const newG = Math.max(0, parseInt(g) - 40);
296
+ const newB = Math.max(0, parseInt(b) - 40);
297
+ return `rgba(${newR}, ${newG}, ${newB}, ${a})`;
298
+ });
299
+ }
300
+ return color; // Return original if not rgba
301
+ }
302
+ /**
303
+ * Get all registered categories
304
+ */
305
+ getCategories() {
306
+ return Array.from(this.styles.keys());
307
+ }
308
+ /**
309
+ * Get style for a category
310
+ */
311
+ getCategoryStyle(category) {
312
+ return this.styles.get(category);
313
+ }
314
+ /**
315
+ * Apply theme (light/dark)
316
+ */
317
+ applyTheme(theme) {
318
+ const themeMultiplier = theme === 'dark' ? 1.2 : 1.0;
319
+ // Update all categories with theme adjustments
320
+ for (const [category, style] of this.styles) {
321
+ const adjustedStyle = {
322
+ ...style,
323
+ opacity: Math.min(1, (style.opacity ?? 0.3) * themeMultiplier),
324
+ hoverOpacity: Math.min(1, (style.hoverOpacity ?? 0.6) * themeMultiplier),
325
+ };
326
+ this.updateStyleSheet(category, this.ensureCompleteStyle(adjustedStyle));
327
+ }
328
+ }
329
+ /**
330
+ * Enable/disable animations globally
331
+ */
332
+ setAnimationsEnabled(enabled) {
333
+ if (!this.styleSheet)
334
+ return;
335
+ // Add or remove global animation disable rule
336
+ const ruleText = enabled
337
+ ? ''
338
+ : `
339
+ .highlight-background,
340
+ .highlight-wrapper {
341
+ animation: none !important;
342
+ transition: none !important;
343
+ }
344
+ `;
345
+ // Remove existing animation rule
346
+ this.removeRuleByContent('animation: none !important');
347
+ // Add new rule if animations disabled
348
+ if (!enabled && ruleText) {
349
+ try {
350
+ this.styleSheet.insertRule(ruleText, this.styleSheet.cssRules.length);
351
+ }
352
+ catch (error) {
353
+ console.warn('Failed to insert animation disable rule:', error);
354
+ }
355
+ }
356
+ }
357
+ /**
358
+ * Remove CSS rule by content
359
+ */
360
+ removeRuleByContent(content) {
361
+ if (!this.styleSheet)
362
+ return;
363
+ for (let i = this.styleSheet.cssRules.length - 1; i >= 0; i--) {
364
+ const rule = this.styleSheet.cssRules[i];
365
+ if (rule.cssText.includes(content)) {
366
+ try {
367
+ this.styleSheet.deleteRule(i);
368
+ }
369
+ catch (error) {
370
+ console.warn('Failed to delete CSS rule:', error);
371
+ }
372
+ }
373
+ }
374
+ }
375
+ /**
376
+ * Export current styles as CSS string
377
+ */
378
+ exportStyles() {
379
+ if (!this.styleElement)
380
+ return '';
381
+ return this.styleElement.textContent || '';
382
+ }
383
+ /**
384
+ * Import styles from CSS string
385
+ */
386
+ importStyles(cssString) {
387
+ if (this.styleElement) {
388
+ this.styleElement.textContent = cssString;
389
+ }
390
+ }
391
+ /**
392
+ * Reset all styles to defaults
393
+ */
394
+ resetToDefaults() {
395
+ this.styles.clear();
396
+ if (this.styleElement) {
397
+ this.styleElement.textContent = '';
398
+ }
399
+ this.registerDefaultCategories();
400
+ }
401
+ /**
402
+ * Destroy style manager and clean up
403
+ */
404
+ destroy() {
405
+ if (this.styleElement && this.styleElement.parentNode) {
406
+ this.styleElement.parentNode.removeChild(this.styleElement);
407
+ }
408
+ this.styles.clear();
409
+ this.styleSheet = null;
410
+ this.styleElement = null;
411
+ }
412
+ }
413
+ //# sourceMappingURL=style-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-manager.js","sourceRoot":"","sources":["../../core/style-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { TextContent, BoundingBox, Segment, HighlightData } from '../types';
2
+ export interface SegmentationPoint {
3
+ globalIndex: number;
4
+ itemIndex: number;
5
+ charIndex: number;
6
+ reason: 'highlight-start' | 'highlight-end' | 'font-change' | 'line-break';
7
+ }
8
+ export interface HighlightRange {
9
+ startIndex: number;
10
+ endIndex: number;
11
+ termId: string;
12
+ category: string;
13
+ coordinates: BoundingBox;
14
+ priority: number;
15
+ }
16
+ export declare class TextSegmentation {
17
+ private debugMode;
18
+ constructor(debugMode?: boolean);
19
+ segmentText(textContent: TextContent, highlights: HighlightData, pageNumber: number): Segment[];
20
+ private buildCharacterIndex;
21
+ private mapHighlightsToCharacters;
22
+ private findTextMatchesForCoordinate;
23
+ private calculateIntersectionArea;
24
+ private mergeAdjacentMatches;
25
+ private resolveOverlappingHighlights;
26
+ private rangesOverlap;
27
+ private splitRangeAroundOverlaps;
28
+ private calculateHighlightPriority;
29
+ private findSegmentationPoints;
30
+ private getItemIndexForGlobalIndex;
31
+ private getCharIndexForGlobalIndex;
32
+ private removeDuplicatePoints;
33
+ private createSegments;
34
+ private createSegment;
35
+ private optimizeSegments;
36
+ private canMergeSegments;
37
+ private mergeSegments;
38
+ private getTextItemBounds;
39
+ private boundsIntersect;
40
+ }
41
+ //# sourceMappingURL=text-segmentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-segmentation.d.ts","sourceRoot":"","sources":["../../core/text-segmentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAY,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAAG,aAAa,GAAG,YAAY,CAAC;CAC5E;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,UAAQ;IAI7B,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE;IAqB/F,OAAO,CAAC,mBAAmB;IA8C3B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,4BAA4B;IA6BpC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,4BAA4B;IAiBpC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,wBAAwB;IAgChC,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,aAAa;IAgDrB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,eAAe;CAQxB"}