@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,338 @@
1
+ export class TextSegmentation {
2
+ constructor(debugMode = false) {
3
+ this.debugMode = false;
4
+ this.debugMode = debugMode;
5
+ }
6
+ segmentText(textContent, highlights, pageNumber) {
7
+ const characterIndex = this.buildCharacterIndex(textContent.items);
8
+ const highlightRanges = this.mapHighlightsToCharacters(highlights, pageNumber, textContent.items);
9
+ const segmentationPoints = this.findSegmentationPoints(textContent.items, highlightRanges);
10
+ const segments = this.createSegments(textContent.items, characterIndex, segmentationPoints, highlightRanges);
11
+ return this.optimizeSegments(segments);
12
+ }
13
+ buildCharacterIndex(textItems) {
14
+ const index = [];
15
+ let globalIndex = 0;
16
+ textItems.forEach((item, itemIndex) => {
17
+ const itemBounds = this.getTextItemBounds(item);
18
+ const charWidth = item.width / item.str.length;
19
+ for (let charIndex = 0; charIndex < item.str.length; charIndex++) {
20
+ const char = item.str[charIndex];
21
+ const charBounds = {
22
+ x1: itemBounds.x1 + charIndex * charWidth,
23
+ y1: itemBounds.y1,
24
+ x2: itemBounds.x1 + (charIndex + 1) * charWidth,
25
+ y2: itemBounds.y2,
26
+ };
27
+ index.push({
28
+ char,
29
+ itemIndex,
30
+ charIndex,
31
+ globalIndex,
32
+ bounds: charBounds,
33
+ });
34
+ globalIndex++;
35
+ }
36
+ });
37
+ return index;
38
+ }
39
+ mapHighlightsToCharacters(highlights, pageNumber, textItems) {
40
+ const ranges = [];
41
+ Object.entries(highlights).forEach(([category, categoryData]) => {
42
+ const pageHighlights = categoryData.pages[pageNumber.toString()];
43
+ if (!pageHighlights)
44
+ return;
45
+ pageHighlights.forEach((occurrence, occIndex) => {
46
+ occurrence.coordinates.forEach((coord, _coordIndex) => {
47
+ const textMatches = this.findTextMatchesForCoordinate(coord, textItems);
48
+ textMatches.forEach((match) => {
49
+ ranges.push({
50
+ startIndex: match.startIndex,
51
+ endIndex: match.endIndex,
52
+ termId: occurrence.termId,
53
+ category,
54
+ coordinates: coord,
55
+ priority: this.calculateHighlightPriority(category, occIndex),
56
+ });
57
+ });
58
+ });
59
+ });
60
+ });
61
+ ranges.sort((a, b) => {
62
+ if (a.priority !== b.priority) {
63
+ return b.priority - a.priority;
64
+ }
65
+ return a.startIndex - b.startIndex;
66
+ });
67
+ return this.resolveOverlappingHighlights(ranges);
68
+ }
69
+ findTextMatchesForCoordinate(coord, textItems) {
70
+ const matches = [];
71
+ let globalIndex = 0;
72
+ textItems.forEach((item) => {
73
+ const itemBounds = this.getTextItemBounds(item);
74
+ if (this.boundsIntersect(itemBounds, coord)) {
75
+ const intersectionArea = this.calculateIntersectionArea(itemBounds, coord);
76
+ const itemArea = (itemBounds.x2 - itemBounds.x1) * (itemBounds.y2 - itemBounds.y1);
77
+ const overlapPercent = intersectionArea / itemArea;
78
+ if (overlapPercent > 0.5) {
79
+ matches.push({
80
+ startIndex: globalIndex,
81
+ endIndex: globalIndex + item.str.length,
82
+ });
83
+ }
84
+ }
85
+ globalIndex += item.str.length;
86
+ });
87
+ return this.mergeAdjacentMatches(matches);
88
+ }
89
+ calculateIntersectionArea(bounds1, bounds2) {
90
+ const left = Math.max(bounds1.x1, bounds2.x1);
91
+ const right = Math.min(bounds1.x2, bounds2.x2);
92
+ const top = Math.max(bounds1.y1, bounds2.y1);
93
+ const bottom = Math.min(bounds1.y2, bounds2.y2);
94
+ if (left >= right || top >= bottom) {
95
+ return 0;
96
+ }
97
+ return (right - left) * (bottom - top);
98
+ }
99
+ mergeAdjacentMatches(matches) {
100
+ if (matches.length <= 1)
101
+ return matches;
102
+ const merged = [];
103
+ let current = matches[0];
104
+ for (let i = 1; i < matches.length; i++) {
105
+ const next = matches[i];
106
+ if (current.endIndex >= next.startIndex) {
107
+ current.endIndex = Math.max(current.endIndex, next.endIndex);
108
+ }
109
+ else {
110
+ merged.push(current);
111
+ current = next;
112
+ }
113
+ }
114
+ merged.push(current);
115
+ return merged;
116
+ }
117
+ resolveOverlappingHighlights(ranges) {
118
+ const resolved = [];
119
+ for (const range of ranges) {
120
+ const overlapping = resolved.filter((existing) => this.rangesOverlap(range, existing));
121
+ if (overlapping.length === 0) {
122
+ resolved.push(range);
123
+ }
124
+ else {
125
+ const splitRanges = this.splitRangeAroundOverlaps(range, overlapping);
126
+ resolved.push(...splitRanges);
127
+ }
128
+ }
129
+ return resolved;
130
+ }
131
+ rangesOverlap(range1, range2) {
132
+ return !(range1.endIndex <= range2.startIndex || range1.startIndex >= range2.endIndex);
133
+ }
134
+ splitRangeAroundOverlaps(range, overlapping) {
135
+ const splits = [];
136
+ let currentStart = range.startIndex;
137
+ overlapping.sort((a, b) => a.startIndex - b.startIndex);
138
+ for (const overlap of overlapping) {
139
+ if (currentStart < overlap.startIndex) {
140
+ splits.push({
141
+ ...range,
142
+ startIndex: currentStart,
143
+ endIndex: Math.min(range.endIndex, overlap.startIndex),
144
+ });
145
+ }
146
+ currentStart = Math.max(currentStart, overlap.endIndex);
147
+ }
148
+ if (currentStart < range.endIndex) {
149
+ splits.push({
150
+ ...range,
151
+ startIndex: currentStart,
152
+ endIndex: range.endIndex,
153
+ });
154
+ }
155
+ return splits.filter((split) => split.startIndex < split.endIndex);
156
+ }
157
+ calculateHighlightPriority(category, occurrenceIndex) {
158
+ const categoryPriorities = {
159
+ protein: 100,
160
+ gene: 90,
161
+ disease: 80,
162
+ chemical: 70,
163
+ species: 60,
164
+ default: 50,
165
+ };
166
+ const basePriority = categoryPriorities[category] || categoryPriorities['default'];
167
+ return basePriority - occurrenceIndex;
168
+ }
169
+ findSegmentationPoints(textItems, highlightRanges) {
170
+ const points = [];
171
+ let globalIndex = 0;
172
+ textItems.forEach((item, itemIndex) => {
173
+ if (itemIndex > 0) {
174
+ points.push({
175
+ globalIndex,
176
+ itemIndex,
177
+ charIndex: 0,
178
+ reason: 'font-change',
179
+ });
180
+ }
181
+ globalIndex += item.str.length;
182
+ });
183
+ highlightRanges.forEach((range) => {
184
+ points.push({
185
+ globalIndex: range.startIndex,
186
+ itemIndex: this.getItemIndexForGlobalIndex(range.startIndex, textItems),
187
+ charIndex: this.getCharIndexForGlobalIndex(range.startIndex, textItems),
188
+ reason: 'highlight-start',
189
+ });
190
+ points.push({
191
+ globalIndex: range.endIndex,
192
+ itemIndex: this.getItemIndexForGlobalIndex(range.endIndex, textItems),
193
+ charIndex: this.getCharIndexForGlobalIndex(range.endIndex, textItems),
194
+ reason: 'highlight-end',
195
+ });
196
+ });
197
+ points.sort((a, b) => a.globalIndex - b.globalIndex);
198
+ return this.removeDuplicatePoints(points);
199
+ }
200
+ getItemIndexForGlobalIndex(globalIndex, textItems) {
201
+ let currentIndex = 0;
202
+ for (let i = 0; i < textItems.length; i++) {
203
+ if (globalIndex < currentIndex + textItems[i].str.length) {
204
+ return i;
205
+ }
206
+ currentIndex += textItems[i].str.length;
207
+ }
208
+ return textItems.length - 1;
209
+ }
210
+ getCharIndexForGlobalIndex(globalIndex, textItems) {
211
+ let currentIndex = 0;
212
+ for (let i = 0; i < textItems.length; i++) {
213
+ if (globalIndex < currentIndex + textItems[i].str.length) {
214
+ return globalIndex - currentIndex;
215
+ }
216
+ currentIndex += textItems[i].str.length;
217
+ }
218
+ return 0;
219
+ }
220
+ removeDuplicatePoints(points) {
221
+ const unique = [];
222
+ let lastIndex = -1;
223
+ for (const point of points) {
224
+ if (point.globalIndex !== lastIndex) {
225
+ unique.push(point);
226
+ lastIndex = point.globalIndex;
227
+ }
228
+ }
229
+ return unique;
230
+ }
231
+ createSegments(textItems, characterIndex, segmentationPoints, highlightRanges) {
232
+ const segments = [];
233
+ for (let i = 0; i < segmentationPoints.length - 1; i++) {
234
+ const startPoint = segmentationPoints[i];
235
+ const endPoint = segmentationPoints[i + 1];
236
+ const segment = this.createSegment(startPoint.globalIndex, endPoint.globalIndex, textItems, characterIndex, highlightRanges);
237
+ if (segment) {
238
+ segments.push(segment);
239
+ }
240
+ }
241
+ return segments;
242
+ }
243
+ createSegment(startIndex, endIndex, textItems, characterIndex, highlightRanges) {
244
+ if (startIndex >= endIndex || startIndex >= characterIndex.length) {
245
+ return null;
246
+ }
247
+ const startChar = characterIndex[startIndex];
248
+ const endIdx = Math.min(endIndex - 1, characterIndex.length - 1);
249
+ const endChar = characterIndex[endIdx];
250
+ const text = characterIndex
251
+ .slice(startIndex, endIndex)
252
+ .map((char) => char.char)
253
+ .join('');
254
+ const bounds = {
255
+ x1: startChar.bounds.x1,
256
+ y1: Math.min(startChar.bounds.y1, endChar.bounds.y1),
257
+ x2: endChar.bounds.x2,
258
+ y2: Math.max(startChar.bounds.y2, endChar.bounds.y2),
259
+ };
260
+ const overlappingHighlight = highlightRanges.find((range) => startIndex >= range.startIndex && endIndex <= range.endIndex);
261
+ const textItem = textItems[startChar.itemIndex];
262
+ return {
263
+ text,
264
+ bounds,
265
+ hasHighlight: !!overlappingHighlight,
266
+ highlightInfo: overlappingHighlight
267
+ ? {
268
+ termId: overlappingHighlight.termId,
269
+ category: overlappingHighlight.category,
270
+ }
271
+ : undefined,
272
+ transform: textItem.transform,
273
+ fontName: textItem.fontName,
274
+ };
275
+ }
276
+ optimizeSegments(segments) {
277
+ const optimized = [];
278
+ let current = null;
279
+ for (const segment of segments) {
280
+ if (!current) {
281
+ current = segment;
282
+ continue;
283
+ }
284
+ if (this.canMergeSegments(current, segment)) {
285
+ current = this.mergeSegments(current, segment);
286
+ }
287
+ else {
288
+ optimized.push(current);
289
+ current = segment;
290
+ }
291
+ }
292
+ if (current) {
293
+ optimized.push(current);
294
+ }
295
+ return optimized;
296
+ }
297
+ canMergeSegments(segment1, segment2) {
298
+ if (segment1.hasHighlight !== segment2.hasHighlight) {
299
+ return false;
300
+ }
301
+ if (segment1.hasHighlight && segment2.hasHighlight) {
302
+ return (segment1.highlightInfo?.termId === segment2.highlightInfo?.termId &&
303
+ segment1.highlightInfo?.category === segment2.highlightInfo?.category);
304
+ }
305
+ return segment1.fontName === segment2.fontName;
306
+ }
307
+ mergeSegments(segment1, segment2) {
308
+ return {
309
+ text: segment1.text + segment2.text,
310
+ bounds: {
311
+ x1: Math.min(segment1.bounds.x1, segment2.bounds.x1),
312
+ y1: Math.min(segment1.bounds.y1, segment2.bounds.y1),
313
+ x2: Math.max(segment1.bounds.x2, segment2.bounds.x2),
314
+ y2: Math.max(segment1.bounds.y2, segment2.bounds.y2),
315
+ },
316
+ hasHighlight: segment1.hasHighlight,
317
+ highlightInfo: segment1.highlightInfo,
318
+ transform: segment1.transform,
319
+ fontName: segment1.fontName,
320
+ };
321
+ }
322
+ getTextItemBounds(item) {
323
+ const transform = item.transform;
324
+ return {
325
+ x1: transform[4],
326
+ y1: transform[5] - item.height,
327
+ x2: transform[4] + item.width,
328
+ y2: transform[5],
329
+ };
330
+ }
331
+ boundsIntersect(bounds1, bounds2) {
332
+ return !(bounds1.x2 < bounds2.x1 ||
333
+ bounds1.x1 > bounds2.x2 ||
334
+ bounds1.y2 < bounds2.y1 ||
335
+ bounds1.y1 > bounds2.y2);
336
+ }
337
+ }
338
+ //# sourceMappingURL=text-segmentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-segmentation.js","sourceRoot":"","sources":["../../core/text-segmentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { TextContent, HighlightData } from '../types';
2
+ export declare class UnifiedLayerBuilder {
3
+ private pageContainer;
4
+ private unifiedLayer;
5
+ constructor();
6
+ buildUnifiedLayer(pageContainer: HTMLElement, textContent: TextContent, highlights: HighlightData, pageNumber: number, scale?: number): Promise<HTMLElement>;
7
+ private analyzeContent;
8
+ private findIntersectingTextItems;
9
+ private getTextItemBounds;
10
+ private boundsIntersect;
11
+ private segmentTextWithHighlights;
12
+ private getHighlightsForTextItem;
13
+ private createHighlightedSegments;
14
+ private mergeAdjacentSegments;
15
+ private canMergeSegments;
16
+ private mergeSegments;
17
+ private buildDOM;
18
+ private createTextElement;
19
+ private createHighlightElement;
20
+ private applyTextPositioning;
21
+ private positionLayer;
22
+ updateHighlights(highlights: HighlightData, pageNumber: number, textContent?: TextContent): void;
23
+ private updateExistingHighlights;
24
+ clear(): void;
25
+ getUnifiedLayer(): HTMLElement | null;
26
+ }
27
+ //# sourceMappingURL=unified-layer-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-layer-builder.d.ts","sourceRoot":"","sources":["../../core/unified-layer-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EAMd,MAAM,UAAU,CAAC;AAElB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,YAAY,CAA4B;;IAK1C,iBAAiB,CACrB,aAAa,EAAE,WAAW,EAC1B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,SAAM,GACV,OAAO,CAAC,WAAW,CAAC;IAevB,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,yBAAyB;IA8BjC,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,yBAAyB;IAmCjC,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,aAAa;IAyDrB,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAYhG,OAAO,CAAC,wBAAwB;IAyBhC,KAAK,IAAI,IAAI;IAQb,eAAe,IAAI,WAAW,GAAG,IAAI;CAGtC"}