@pie-players/pie-assessment-toolkit 0.2.3 → 0.2.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.
Files changed (100) hide show
  1. package/README.md +159 -1
  2. package/dist/index.d.ts +16 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +9 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/player/AssessmentPlayer.d.ts +9 -0
  7. package/dist/player/AssessmentPlayer.d.ts.map +1 -1
  8. package/dist/player/AssessmentPlayer.js +13 -4
  9. package/dist/player/AssessmentPlayer.js.map +1 -1
  10. package/dist/services/AnnotationToolbarConfig.d.ts +134 -0
  11. package/dist/services/AnnotationToolbarConfig.d.ts.map +1 -0
  12. package/dist/services/AnnotationToolbarConfig.js +100 -0
  13. package/dist/services/AnnotationToolbarConfig.js.map +1 -0
  14. package/dist/services/HighlightCoordinator.d.ts +23 -10
  15. package/dist/services/HighlightCoordinator.d.ts.map +1 -1
  16. package/dist/services/HighlightCoordinator.js +87 -40
  17. package/dist/services/HighlightCoordinator.js.map +1 -1
  18. package/dist/services/PNPToolResolver.d.ts +171 -15
  19. package/dist/services/PNPToolResolver.d.ts.map +1 -1
  20. package/dist/services/PNPToolResolver.js +324 -32
  21. package/dist/services/PNPToolResolver.js.map +1 -1
  22. package/dist/services/RangeSerializer.d.ts +119 -0
  23. package/dist/services/RangeSerializer.d.ts.map +1 -0
  24. package/dist/services/RangeSerializer.js +199 -0
  25. package/dist/services/RangeSerializer.js.map +1 -0
  26. package/dist/services/TTSService.d.ts +4 -1
  27. package/dist/services/TTSService.d.ts.map +1 -1
  28. package/dist/services/TTSService.js +58 -3
  29. package/dist/services/TTSService.js.map +1 -1
  30. package/dist/services/ToolRegistry.d.ts +225 -0
  31. package/dist/services/ToolRegistry.d.ts.map +1 -0
  32. package/dist/services/ToolRegistry.js +248 -0
  33. package/dist/services/ToolRegistry.js.map +1 -0
  34. package/dist/services/ToolkitCoordinator.d.ts +22 -0
  35. package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
  36. package/dist/services/ToolkitCoordinator.js +44 -0
  37. package/dist/services/ToolkitCoordinator.js.map +1 -1
  38. package/dist/services/createDefaultToolRegistry.d.ts +72 -0
  39. package/dist/services/createDefaultToolRegistry.d.ts.map +1 -0
  40. package/dist/services/createDefaultToolRegistry.js +147 -0
  41. package/dist/services/createDefaultToolRegistry.js.map +1 -0
  42. package/dist/services/interfaces.d.ts +8 -0
  43. package/dist/services/interfaces.d.ts.map +1 -1
  44. package/dist/services/interfaces.js.map +1 -1
  45. package/dist/services/pnp-provenance.d.ts +167 -0
  46. package/dist/services/pnp-provenance.d.ts.map +1 -0
  47. package/dist/services/pnp-provenance.js +230 -0
  48. package/dist/services/pnp-provenance.js.map +1 -0
  49. package/dist/services/pnp-standard-features.d.ts +240 -0
  50. package/dist/services/pnp-standard-features.d.ts.map +1 -0
  51. package/dist/services/pnp-standard-features.js +342 -0
  52. package/dist/services/pnp-standard-features.js.map +1 -0
  53. package/dist/services/tool-context.d.ts +150 -0
  54. package/dist/services/tool-context.d.ts.map +1 -0
  55. package/dist/services/tool-context.js +157 -0
  56. package/dist/services/tool-context.js.map +1 -0
  57. package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +1 -1
  58. package/dist/services/tool-providers/ToolProviderRegistry.js +7 -7
  59. package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -1
  60. package/dist/tools/registrations/accessibility-tools.d.ts +43 -0
  61. package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -0
  62. package/dist/tools/registrations/accessibility-tools.js +230 -0
  63. package/dist/tools/registrations/accessibility-tools.js.map +1 -0
  64. package/dist/tools/registrations/calculator.d.ts +21 -0
  65. package/dist/tools/registrations/calculator.d.ts.map +1 -0
  66. package/dist/tools/registrations/calculator.js +98 -0
  67. package/dist/tools/registrations/calculator.js.map +1 -0
  68. package/dist/tools/registrations/interaction-tools.d.ts +28 -0
  69. package/dist/tools/registrations/interaction-tools.d.ts.map +1 -0
  70. package/dist/tools/registrations/interaction-tools.js +124 -0
  71. package/dist/tools/registrations/interaction-tools.js.map +1 -0
  72. package/dist/tools/registrations/measurement-tools.d.ts +25 -0
  73. package/dist/tools/registrations/measurement-tools.d.ts.map +1 -0
  74. package/dist/tools/registrations/measurement-tools.js +112 -0
  75. package/dist/tools/registrations/measurement-tools.js.map +1 -0
  76. package/dist/tools/registrations/subject-specific-tools.d.ts +28 -0
  77. package/dist/tools/registrations/subject-specific-tools.d.ts.map +1 -0
  78. package/dist/tools/registrations/subject-specific-tools.js +118 -0
  79. package/dist/tools/registrations/subject-specific-tools.js.map +1 -0
  80. package/dist/tools/registrations/tts.d.ts +20 -0
  81. package/dist/tools/registrations/tts.d.ts.map +1 -0
  82. package/dist/tools/registrations/tts.js +86 -0
  83. package/dist/tools/registrations/tts.js.map +1 -0
  84. package/dist/tools/tool-tag-map.d.ts +24 -0
  85. package/dist/tools/tool-tag-map.d.ts.map +1 -0
  86. package/dist/tools/tool-tag-map.js +38 -0
  87. package/dist/tools/tool-tag-map.js.map +1 -0
  88. package/package.json +15 -7
  89. package/src/README.md +25 -11
  90. package/src/components/PNPProfileTester.example.svelte +188 -0
  91. package/src/components/PNPProfileTester.svelte +397 -0
  92. package/src/components/PNPProvenanceViewer.svelte +260 -0
  93. package/src/components/QuestionToolBar.svelte +160 -83
  94. package/src/components/ToolButton.svelte +146 -0
  95. package/src/components/ToolButtonGroup.svelte +109 -0
  96. package/src/reference-layout/ReferenceLayout.svelte +5 -13
  97. package/dist/services/PNPMapper.d.ts +0 -71
  98. package/dist/services/PNPMapper.d.ts.map +0 -1
  99. package/dist/services/PNPMapper.js +0 -98
  100. package/dist/services/PNPMapper.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Annotation Toolbar Configuration
3
+ *
4
+ * Configures backend API endpoints for dictionary, picture dictionary, and translation features.
5
+ * These can be pointed to different backends in different environments:
6
+ * - Development: Local stub routes in section-demos
7
+ * - Production: pie-api-aws endpoints with authentication
8
+ *
9
+ * Part of PIE Assessment Toolkit.
10
+ */
11
+ /**
12
+ * Annotation Toolbar API Client
13
+ *
14
+ * Handles API calls to backend services for dictionary, picture dictionary, and translation.
15
+ * Automatically adds authentication and custom headers based on configuration.
16
+ */
17
+ export class AnnotationToolbarAPIClient {
18
+ config;
19
+ constructor(config) {
20
+ this.config = config;
21
+ }
22
+ /**
23
+ * Look up a word in the dictionary
24
+ */
25
+ async lookupDictionary(keyword, language) {
26
+ if (!this.config.dictionaryEndpoint) {
27
+ throw new Error("Dictionary endpoint not configured. Set dictionaryEndpoint in AnnotationToolbarConfig.");
28
+ }
29
+ const body = {
30
+ keyword,
31
+ language: language || this.config.defaultLanguage || "en-us",
32
+ };
33
+ const response = await this.fetch(this.config.dictionaryEndpoint, body);
34
+ return response.json();
35
+ }
36
+ /**
37
+ * Look up images in the picture dictionary
38
+ */
39
+ async lookupPictureDictionary(keyword, language, max) {
40
+ if (!this.config.pictureDictionaryEndpoint) {
41
+ throw new Error("Picture dictionary endpoint not configured. Set pictureDictionaryEndpoint in AnnotationToolbarConfig.");
42
+ }
43
+ const body = {
44
+ keyword,
45
+ language: language || this.config.defaultLanguage || "en-us",
46
+ max,
47
+ };
48
+ const response = await this.fetch(this.config.pictureDictionaryEndpoint, body);
49
+ return response.json();
50
+ }
51
+ /**
52
+ * Translate text
53
+ */
54
+ async translate(text, targetLanguage, sourceLanguage) {
55
+ if (!this.config.translationEndpoint) {
56
+ throw new Error("Translation endpoint not configured. Set translationEndpoint in AnnotationToolbarConfig.");
57
+ }
58
+ const body = {
59
+ text,
60
+ targetLanguage,
61
+ sourceLanguage: sourceLanguage || "auto",
62
+ };
63
+ const response = await this.fetch(this.config.translationEndpoint, body);
64
+ return response.json();
65
+ }
66
+ /**
67
+ * Internal fetch helper with auth and custom headers
68
+ */
69
+ async fetch(endpoint, body) {
70
+ const headers = {
71
+ "Content-Type": "application/json",
72
+ ...(this.config.headers || {}),
73
+ };
74
+ // Add auth token if configured
75
+ if (this.config.authToken) {
76
+ headers["Authorization"] = `Bearer ${this.config.authToken}`;
77
+ }
78
+ // Add organization ID if configured
79
+ if (this.config.organizationId) {
80
+ headers["X-Organization-ID"] = this.config.organizationId;
81
+ }
82
+ const response = await window.fetch(endpoint, {
83
+ method: "POST",
84
+ headers,
85
+ body: JSON.stringify(body),
86
+ });
87
+ if (!response.ok) {
88
+ const errorText = await response.text();
89
+ throw new Error(`API request failed (${response.status}): ${errorText}`);
90
+ }
91
+ return response;
92
+ }
93
+ /**
94
+ * Update configuration (useful for refreshing auth tokens)
95
+ */
96
+ updateConfig(config) {
97
+ this.config = { ...this.config, ...config };
98
+ }
99
+ }
100
+ //# sourceMappingURL=AnnotationToolbarConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationToolbarConfig.js","sourceRoot":"","sources":["../../src/services/AnnotationToolbarConfig.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@
9
9
  * - CSS Custom Highlight API (no DOM mutation)
10
10
  * - Full accessibility support (screen readers see original text)
11
11
  * - Configurable colors and styles
12
+ * - Annotation persistence via RangeSerializer
12
13
  *
13
14
  * Part of PIE Assessment Toolkit.
14
15
  *
@@ -20,6 +21,7 @@
20
21
  * @see https://developer.mozilla.org/en-US/docs/Web/API/CSS_Custom_Highlight_API
21
22
  */
22
23
  import type { IHighlightCoordinator } from "./interfaces";
24
+ import { type SerializedRange } from "./RangeSerializer";
23
25
  /**
24
26
  * Highlight types
25
27
  */
@@ -36,7 +38,8 @@ export declare enum HighlightColor {
36
38
  GREEN = "green",
37
39
  BLUE = "blue",
38
40
  PINK = "pink",
39
- ORANGE = "orange"
41
+ ORANGE = "orange",
42
+ UNDERLINE = "underline"
40
43
  }
41
44
  /**
42
45
  * Annotation data
@@ -58,9 +61,10 @@ export declare class HighlightCoordinator implements IHighlightCoordinator {
58
61
  private ttsWordHighlight;
59
62
  private ttsSentenceHighlight;
60
63
  private annotations;
61
- private annotationHighlights;
64
+ private colorHighlights;
62
65
  private nextAnnotationId;
63
66
  private supported;
67
+ private rangeSerializer;
64
68
  constructor(config?: HighlightCoordinatorConfig);
65
69
  /**
66
70
  * Initialize CSS Custom Highlights
@@ -130,21 +134,30 @@ export declare class HighlightCoordinator implements IHighlightCoordinator {
130
134
  */
131
135
  changeAnnotationColor(id: string, newColor: HighlightColor): void;
132
136
  /**
133
- * Export annotations as serializable data
137
+ * Export annotations as serializable data for persistence.
138
+ * Uses RangeSerializer for robust DOM range serialization.
139
+ *
140
+ * @param root Root element for serialization (typically document.body or content container)
141
+ * @returns Array of serialized annotations
134
142
  */
135
- exportAnnotations(): Array<{
143
+ exportAnnotations(root?: Element): Array<SerializedRange & {
136
144
  id: string;
137
- startContainer: string;
138
- startOffset: number;
139
- endContainer: string;
140
- endOffset: number;
141
145
  color: HighlightColor;
142
146
  timestamp: number;
143
147
  }>;
144
148
  /**
145
- * Get XPath-like path for a node (simplified)
149
+ * Import annotations from serialized data.
150
+ * Restores annotations after page navigation or refresh.
151
+ *
152
+ * @param data Array of serialized annotations
153
+ * @param root Root element for deserialization (same as used in export)
154
+ * @returns Number of successfully restored annotations
146
155
  */
147
- private getNodePath;
156
+ importAnnotations(data: Array<SerializedRange & {
157
+ id?: string;
158
+ color: HighlightColor;
159
+ timestamp?: number;
160
+ }>, root?: Element): number;
148
161
  /**
149
162
  * Highlight a text range (interface method)
150
163
  *
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightCoordinator.d.ts","sourceRoot":"","sources":["../../src/services/HighlightCoordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HighlightCoordinator.d.ts","sourceRoot":"","sources":["../../src/services/HighlightCoordinator.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@
9
9
  * - CSS Custom Highlight API (no DOM mutation)
10
10
  * - Full accessibility support (screen readers see original text)
11
11
  * - Configurable colors and styles
12
+ * - Annotation persistence via RangeSerializer
12
13
  *
13
14
  * Part of PIE Assessment Toolkit.
14
15
  *
@@ -19,6 +20,7 @@
19
20
  *
20
21
  * @see https://developer.mozilla.org/en-US/docs/Web/API/CSS_Custom_Highlight_API
21
22
  */
23
+ import { RangeSerializer } from "./RangeSerializer";
22
24
  /**
23
25
  * Highlight types
24
26
  */
@@ -38,17 +40,21 @@ export var HighlightColor;
38
40
  HighlightColor["BLUE"] = "blue";
39
41
  HighlightColor["PINK"] = "pink";
40
42
  HighlightColor["ORANGE"] = "orange";
43
+ HighlightColor["UNDERLINE"] = "underline";
41
44
  })(HighlightColor || (HighlightColor = {}));
42
45
  export class HighlightCoordinator {
43
46
  config;
44
47
  ttsWordHighlight = null;
45
48
  ttsSentenceHighlight = null;
46
49
  annotations = new Map();
47
- annotationHighlights = new Map();
50
+ // Shared highlights per color (one Highlight object per color, contains all ranges)
51
+ colorHighlights = new Map();
48
52
  nextAnnotationId = 1;
49
53
  supported = false;
54
+ rangeSerializer;
50
55
  constructor(config = {}) {
51
56
  this.config = config;
57
+ this.rangeSerializer = new RangeSerializer();
52
58
  // SSR guard
53
59
  if (typeof CSS === "undefined" || !("highlights" in CSS)) {
54
60
  console.warn("CSS Custom Highlight API not supported (SSR or unsupported browser)");
@@ -64,12 +70,18 @@ export class HighlightCoordinator {
64
70
  initializeHighlights() {
65
71
  if (!this.supported)
66
72
  return;
67
- // Create highlight registries
73
+ // Create highlight registries for TTS
68
74
  this.ttsWordHighlight = new Highlight();
69
75
  this.ttsSentenceHighlight = new Highlight();
70
- // Register with CSS
76
+ // Register TTS highlights with CSS
71
77
  CSS.highlights.set("tts-word", this.ttsWordHighlight);
72
78
  CSS.highlights.set("tts-sentence", this.ttsSentenceHighlight);
79
+ // Create shared highlights for each annotation color
80
+ for (const color of Object.values(HighlightColor)) {
81
+ const highlight = new Highlight();
82
+ this.colorHighlights.set(color, highlight);
83
+ CSS.highlights.set(`annotation-${color}`, highlight);
84
+ }
73
85
  }
74
86
  /**
75
87
  * Register CSS styles for highlights
@@ -121,6 +133,13 @@ export class HighlightCoordinator {
121
133
  background-color: rgba(255, 165, 0, 0.3);
122
134
  color: inherit;
123
135
  }
136
+
137
+ ::highlight(annotation-underline) {
138
+ background-color: transparent;
139
+ text-decoration: underline 2px solid #0066cc;
140
+ text-underline-offset: 2px;
141
+ color: inherit;
142
+ }
124
143
  `;
125
144
  document.head.appendChild(style);
126
145
  }
@@ -190,20 +209,23 @@ export class HighlightCoordinator {
190
209
  */
191
210
  addAnnotation(range, color = HighlightColor.YELLOW) {
192
211
  const id = `annotation-${this.nextAnnotationId++}`;
212
+ // Clone the range to store
213
+ const clonedRange = range.cloneRange();
193
214
  // Store annotation data
194
215
  const annotation = {
195
216
  id,
196
- range: range.cloneRange(),
217
+ range: clonedRange,
197
218
  type: HighlightType.ANNOTATION,
198
219
  color,
199
220
  timestamp: Date.now(),
200
221
  };
201
222
  this.annotations.set(id, annotation);
202
- // Create highlight for this annotation
203
- const highlight = new Highlight(range);
204
- this.annotationHighlights.set(id, highlight);
205
- // Register with CSS
206
- CSS.highlights.set(`annotation-${color}-${id}`, highlight);
223
+ // Add the SAME range object to the shared color highlight
224
+ // This ensures we can later delete it by reference
225
+ const colorHighlight = this.colorHighlights.get(color);
226
+ if (colorHighlight) {
227
+ colorHighlight.add(clonedRange);
228
+ }
207
229
  return id;
208
230
  }
209
231
  /**
@@ -213,21 +235,31 @@ export class HighlightCoordinator {
213
235
  */
214
236
  removeAnnotation(id) {
215
237
  const annotation = this.annotations.get(id);
216
- if (!annotation)
238
+ if (!annotation) {
239
+ console.warn(`[HighlightCoordinator] Annotation ${id} not found`);
217
240
  return;
218
- // Remove from CSS highlights
219
- CSS.highlights.delete(`annotation-${annotation.color}-${id}`);
241
+ }
242
+ console.log(`[HighlightCoordinator] Removing annotation ${id} (color: ${annotation.color})`);
243
+ // Remove range from the shared color highlight
244
+ const colorHighlight = this.colorHighlights.get(annotation.color);
245
+ if (colorHighlight) {
246
+ const deleted = colorHighlight.delete(annotation.range);
247
+ console.log(`[HighlightCoordinator] Highlight.delete() returned:`, deleted);
248
+ }
220
249
  // Clean up
221
- this.annotationHighlights.delete(id);
222
250
  this.annotations.delete(id);
251
+ console.log(`[HighlightCoordinator] Annotation ${id} removed from map. Remaining:`, this.annotations.size);
223
252
  }
224
253
  /**
225
254
  * Remove all annotations
226
255
  */
227
256
  clearAnnotations() {
228
- for (const id of this.annotations.keys()) {
229
- this.removeAnnotation(id);
257
+ // Clear all color highlights
258
+ for (const colorHighlight of this.colorHighlights.values()) {
259
+ colorHighlight.clear();
230
260
  }
261
+ // Clear annotation data
262
+ this.annotations.clear();
231
263
  }
232
264
  /**
233
265
  * Get all annotations
@@ -251,47 +283,55 @@ export class HighlightCoordinator {
251
283
  const annotation = this.annotations.get(id);
252
284
  if (!annotation)
253
285
  return;
254
- // Remove old highlight
255
- CSS.highlights.delete(`annotation-${annotation.color}-${id}`);
286
+ const oldColor = annotation.color;
287
+ if (oldColor === newColor)
288
+ return;
289
+ // Remove from old color highlight
290
+ const oldColorHighlight = this.colorHighlights.get(oldColor);
291
+ if (oldColorHighlight) {
292
+ oldColorHighlight.delete(annotation.range);
293
+ }
256
294
  // Update color
257
295
  annotation.color = newColor;
258
- // Re-register with new color
259
- const highlight = this.annotationHighlights.get(id);
260
- if (highlight) {
261
- CSS.highlights.set(`annotation-${newColor}-${id}`, highlight);
296
+ // Add to new color highlight
297
+ const newColorHighlight = this.colorHighlights.get(newColor);
298
+ if (newColorHighlight) {
299
+ newColorHighlight.add(annotation.range);
262
300
  }
263
301
  }
264
302
  /**
265
- * Export annotations as serializable data
303
+ * Export annotations as serializable data for persistence.
304
+ * Uses RangeSerializer for robust DOM range serialization.
305
+ *
306
+ * @param root Root element for serialization (typically document.body or content container)
307
+ * @returns Array of serialized annotations
266
308
  */
267
- exportAnnotations() {
268
- // Note: This is a simplified export. Production implementation
269
- // would need a robust way to serialize DOM ranges.
309
+ exportAnnotations(root = document.body) {
270
310
  return this.getAnnotations().map((annotation) => ({
311
+ ...this.rangeSerializer.serialize(annotation.range, root),
271
312
  id: annotation.id,
272
- startContainer: this.getNodePath(annotation.range.startContainer),
273
- startOffset: annotation.range.startOffset,
274
- endContainer: this.getNodePath(annotation.range.endContainer),
275
- endOffset: annotation.range.endOffset,
276
313
  color: annotation.color,
277
314
  timestamp: annotation.timestamp,
278
315
  }));
279
316
  }
280
317
  /**
281
- * Get XPath-like path for a node (simplified)
318
+ * Import annotations from serialized data.
319
+ * Restores annotations after page navigation or refresh.
320
+ *
321
+ * @param data Array of serialized annotations
322
+ * @param root Root element for deserialization (same as used in export)
323
+ * @returns Number of successfully restored annotations
282
324
  */
283
- getNodePath(node) {
284
- const path = [];
285
- let current = node;
286
- while (current && current !== document.body) {
287
- if (current.parentNode) {
288
- const siblings = Array.from(current.parentNode.childNodes);
289
- const index = siblings.indexOf(current);
290
- path.unshift(`${current.nodeName}[${index}]`);
325
+ importAnnotations(data, root = document.body) {
326
+ let restored = 0;
327
+ for (const item of data) {
328
+ const range = this.rangeSerializer.deserialize(item, root);
329
+ if (range) {
330
+ this.addAnnotation(range, item.color);
331
+ restored++;
291
332
  }
292
- current = current.parentNode;
293
333
  }
294
- return "/" + path.join("/");
334
+ return restored;
295
335
  }
296
336
  // ============================================================================
297
337
  // IHighlightCoordinator Interface Implementation
@@ -424,6 +464,13 @@ export class HighlightCoordinator {
424
464
  background-color: rgba(255, 165, 0, 0.3);
425
465
  color: inherit;
426
466
  }
467
+
468
+ ::highlight(annotation-underline) {
469
+ background-color: transparent;
470
+ text-decoration: underline 2px solid #0066cc;
471
+ text-underline-offset: 2px;
472
+ color: inherit;
473
+ }
427
474
  `;
428
475
  }
429
476
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightCoordinator.js","sourceRoot":"","sources":["../../src/services/HighlightCoordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HighlightCoordinator.js","sourceRoot":"","sources":["../../src/services/HighlightCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,eAAe,EAAwB,MAAM,mBAAmB,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,sCAAqB,CAAA;IACrB,8CAA6B,CAAA;IAC7B,0CAAyB,CAAA;AAC1B,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACzB,mCAAiB,CAAA;IACjB,iCAAe,CAAA;IACf,+BAAa,CAAA;IACb,+BAAa,CAAA;IACb,mCAAiB,CAAA;IACjB,yCAAuB,CAAA;AACxB,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB;AAmBD,MAAM,OAAO,oBAAoB;IACxB,MAAM,CAA6B;IACnC,gBAAgB,GAAqB,IAAI,CAAC;IAC1C,oBAAoB,GAAqB,IAAI,CAAC;IAC9C,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;IACpD,oFAAoF;IAC5E,eAAe,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,gBAAgB,GAAG,CAAC,CAAC;IACrB,SAAS,GAAG,KAAK,CAAC;IAClB,eAAe,CAAkB;IAEzC,YAAY,SAAqC,EAAE;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE7C,YAAY;QACZ,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CACX,qEAAqE,CACrE,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,sCAAsC;QACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,oBAAoB,GAAG,IAAI,SAAS,EAAE,CAAC;QAE5C,mCAAmC;QACnC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtD,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAE9D,qDAAqD;QACrD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC3C,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;IAED;;OAEG;IACK,cAAc;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO,CAAC,YAAY;QAEzD,gCAAgC;QAChC,IAAI,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;YAAE,OAAO;QAE5D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,GAAG,sBAAsB,CAAC;QAClC,KAAK,CAAC,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4CjB,CAAC;QACJ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CACf,QAAc,EACd,WAAmB,EACnB,SAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAEnC,gCAAgC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,wBAAwB;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAElC,mBAAmB;QACnB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,MAAe;QACnC,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE,OAAO;QAEvC,oCAAoC;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED;;OAEG;IACH,YAAY;QACX,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACf,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE,OAAO;QACvC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CACZ,KAAY,EACZ,QAAwB,cAAc,CAAC,MAAM;QAE7C,MAAM,EAAE,GAAG,cAAc,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAEnD,2BAA2B;QAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAEvC,wBAAwB;QACxB,MAAM,UAAU,GAAe;YAC9B,EAAE;YACF,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,aAAa,CAAC,UAAU;YAC9B,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAErC,0DAA0D;QAC1D,mDAAmD;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,cAAc,EAAE,CAAC;YACpB,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,EAAU;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,YAAY,CAAC,CAAC;YAClE,OAAO;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CACV,8CAA8C,EAAE,YAAY,UAAU,CAAC,KAAK,GAAG,CAC/E,CAAC;QAEF,+CAA+C;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CACV,qDAAqD,EACrD,OAAO,CACP,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CACV,qCAAqC,EAAE,+BAA+B,EACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB;QACf,6BAA6B;QAC7B,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5D,cAAc,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,cAAc;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,qBAAqB,CAAC,EAAU,EAAE,QAAwB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;QAClC,IAAI,QAAQ,KAAK,QAAQ;YAAE,OAAO;QAElC,kCAAkC;QAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,iBAAiB,EAAE,CAAC;YACvB,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,eAAe;QACf,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;QAE5B,6BAA6B;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,iBAAiB,EAAE,CAAC;YACvB,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAChB,OAAgB,QAAQ,CAAC,IAAI;QAI7B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;YACzD,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,SAAS,EAAE,UAAU,CAAC,SAAS;SAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CAChB,IAMC,EACD,OAAgB,QAAQ,CAAC,IAAI;QAE7B,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,IAAI,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,QAAQ,EAAE,CAAC;YACZ,CAAC;QACF,CAAC;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,iDAAiD;IACjD,+EAA+E;IAE/E;;;;;OAKG;IACH,cAAc,CACb,KAAY,EACZ,IAAmB,EACnB,QAAwB,cAAc,CAAC,MAAM;QAE7C,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,QAAQ,CAAC;YAC5B,KAAK,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;gBACjC,wCAAwC;gBACxC,MAAM,SAAS,GACd,IAAI,KAAK,aAAa,CAAC,QAAQ;oBAC9B,CAAC,CAAC,IAAI,CAAC,gBAAgB;oBACvB,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBAC9B,IAAI,SAAS,EAAE,CAAC;oBACf,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,aAAa,CAAC,UAAU;gBAC5B,2CAA2C;gBAC3C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjC,MAAM;QACR,CAAC;IACF,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAmB;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,QAAQ;gBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM;YACP,KAAK,aAAa,CAAC,YAAY;gBAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,MAAM;YACP,KAAK,aAAa,CAAC,UAAU;gBAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,MAAM;QACR,CAAC;IACF,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,WAAW;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,KAAa,EAAE,OAAe;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAE5C,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,sBAAsB;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrE,OAAO,MAAM;gBACZ,CAAC,CAAC;oBACA,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;iBAC1B;gBACF,CAAC,CAAC,IAAI,CAAC;QACT,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC;QAEnE,2BAA2B;QAC3B,OAAO,CAAC,WAAW,GAAG;;;4BAGI,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyChC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACN,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,uBAAuB;QACvB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;YAChE,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;QACF,CAAC;IACF,CAAC;CACD"}