@pie-players/pie-assessment-toolkit 0.3.51 → 0.3.52
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/dist/components/PieAssessmentToolkit.custom-element.js +174 -19
- package/dist/context/assessment-toolkit-context.d.ts +2 -0
- package/dist/context/assessment-toolkit-context.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/HighlightCoordinator.d.ts +6 -0
- package/dist/services/HighlightCoordinator.js +20 -5
- package/dist/services/HighlightCoordinator.js.map +1 -1
- package/dist/services/TTSService.d.ts +15 -0
- package/dist/services/TTSService.js +184 -15
- package/dist/services/TTSService.js.map +1 -1
- package/dist/services/createDefaultToolRegistry.d.ts +2 -1
- package/dist/services/createDefaultToolRegistry.js +2 -1
- package/dist/services/createDefaultToolRegistry.js.map +1 -1
- package/dist/services/interfaces.d.ts +11 -0
- package/dist/services/interfaces.js.map +1 -1
- package/dist/services/tool-config-defaults.d.ts +11 -0
- package/dist/services/tool-config-defaults.js +18 -0
- package/dist/services/tool-config-defaults.js.map +1 -1
- package/dist/services/tts/highlight-target-resolver.d.ts +17 -0
- package/dist/services/tts/highlight-target-resolver.js +2 -0
- package/dist/services/tts/highlight-target-resolver.js.map +1 -0
- package/package.json +7 -7
|
@@ -21066,27 +21066,27 @@ class HighlightCoordinator {
|
|
|
21066
21066
|
|
|
21067
21067
|
/* Annotation highlights - persistent */
|
|
21068
21068
|
::highlight(annotation-yellow) {
|
|
21069
|
-
background-color:
|
|
21069
|
+
background-color: var(--pie-annotation-yellow-highlight, rgba(253, 233, 149, 0.5));
|
|
21070
21070
|
color: inherit;
|
|
21071
21071
|
}
|
|
21072
21072
|
|
|
21073
21073
|
::highlight(annotation-green) {
|
|
21074
|
-
background-color:
|
|
21074
|
+
background-color: var(--pie-annotation-green-highlight, rgba(166, 225, 197, 0.5));
|
|
21075
21075
|
color: inherit;
|
|
21076
21076
|
}
|
|
21077
21077
|
|
|
21078
21078
|
::highlight(annotation-blue) {
|
|
21079
|
-
background-color:
|
|
21079
|
+
background-color: var(--pie-annotation-blue-highlight, rgba(167, 224, 246, 0.5));
|
|
21080
21080
|
color: inherit;
|
|
21081
21081
|
}
|
|
21082
21082
|
|
|
21083
21083
|
::highlight(annotation-pink) {
|
|
21084
|
-
background-color:
|
|
21084
|
+
background-color: var(--pie-annotation-pink-highlight, rgba(255, 159, 174, 0.5));
|
|
21085
21085
|
color: inherit;
|
|
21086
21086
|
}
|
|
21087
21087
|
|
|
21088
21088
|
::highlight(annotation-orange) {
|
|
21089
|
-
background-color:
|
|
21089
|
+
background-color: var(--pie-annotation-orange-highlight, rgba(255, 165, 0, 0.5));
|
|
21090
21090
|
color: inherit;
|
|
21091
21091
|
}
|
|
21092
21092
|
|
|
@@ -21129,6 +21129,16 @@ class HighlightCoordinator {
|
|
|
21129
21129
|
}
|
|
21130
21130
|
this.highlightTTSElementFallbacks(ranges);
|
|
21131
21131
|
}
|
|
21132
|
+
highlightTTSSentenceElements(elements) {
|
|
21133
|
+
if (!this.ttsSentenceHighlight)
|
|
21134
|
+
return;
|
|
21135
|
+
this.applyAdaptiveTTSStyle(elements[0] || null);
|
|
21136
|
+
this.clearTTSSentence();
|
|
21137
|
+
for (const element2 of elements) {
|
|
21138
|
+
element2.setAttribute("data-pie-tts-sentence-element", "true");
|
|
21139
|
+
this.ttsSentenceElementHighlights.add(element2);
|
|
21140
|
+
}
|
|
21141
|
+
}
|
|
21132
21142
|
static SENTENCE_FALLBACK_SELECTOR = "math, mjx-container, svg, img, canvas, [role='img']";
|
|
21133
21143
|
static WORD_FALLBACK_SELECTOR = "svg, img, canvas, [role='img']";
|
|
21134
21144
|
highlightTTSElementFallbacks(ranges) {
|
|
@@ -23888,6 +23898,7 @@ class TTSService {
|
|
|
23888
23898
|
currentProvider = null;
|
|
23889
23899
|
provider = null;
|
|
23890
23900
|
highlightCoordinator = null;
|
|
23901
|
+
highlightTargetResolverProvider = null;
|
|
23891
23902
|
catalogResolver = null;
|
|
23892
23903
|
state = PlaybackState.IDLE;
|
|
23893
23904
|
ttsConfig = {};
|
|
@@ -23978,9 +23989,137 @@ class TTSService {
|
|
|
23978
23989
|
setHighlightCoordinator(coordinator) {
|
|
23979
23990
|
this.highlightCoordinator = coordinator;
|
|
23980
23991
|
}
|
|
23992
|
+
setHighlightTargetResolverProvider(provider) {
|
|
23993
|
+
this.highlightTargetResolverProvider = provider;
|
|
23994
|
+
return () => {
|
|
23995
|
+
if (this.highlightTargetResolverProvider === provider) {
|
|
23996
|
+
this.highlightTargetResolverProvider = null;
|
|
23997
|
+
}
|
|
23998
|
+
};
|
|
23999
|
+
}
|
|
23981
24000
|
setCatalogResolver(resolver) {
|
|
23982
24001
|
this.catalogResolver = resolver;
|
|
23983
24002
|
}
|
|
24003
|
+
getHighlightResolverRuntime() {
|
|
24004
|
+
let provided = null;
|
|
24005
|
+
try {
|
|
24006
|
+
provided = this.highlightTargetResolverProvider?.() ?? null;
|
|
24007
|
+
} catch {
|
|
24008
|
+
provided = null;
|
|
24009
|
+
}
|
|
24010
|
+
const providedContext = provided?.context ?? {};
|
|
24011
|
+
const fallbackScope = typeof HTMLElement !== "undefined" && this.currentContentElement instanceof HTMLElement ? this.currentContentElement : null;
|
|
24012
|
+
return {
|
|
24013
|
+
context: {
|
|
24014
|
+
...providedContext,
|
|
24015
|
+
scopeElement: providedContext.scopeElement ?? fallbackScope
|
|
24016
|
+
},
|
|
24017
|
+
resolver: provided?.resolver ?? null
|
|
24018
|
+
};
|
|
24019
|
+
}
|
|
24020
|
+
getNodeElement(node) {
|
|
24021
|
+
if (!node)
|
|
24022
|
+
return null;
|
|
24023
|
+
return node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
|
|
24024
|
+
}
|
|
24025
|
+
isElementWithinScope(element2, scope) {
|
|
24026
|
+
if (!scope)
|
|
24027
|
+
return true;
|
|
24028
|
+
return element2 === scope || scope.contains(element2);
|
|
24029
|
+
}
|
|
24030
|
+
isRangeWithinScope(range, scope) {
|
|
24031
|
+
const startElement = this.getNodeElement(range.startContainer);
|
|
24032
|
+
const endElement = this.getNodeElement(range.endContainer);
|
|
24033
|
+
if (!startElement || !endElement)
|
|
24034
|
+
return false;
|
|
24035
|
+
return this.isElementWithinScope(startElement, scope) && this.isElementWithinScope(endElement, scope);
|
|
24036
|
+
}
|
|
24037
|
+
resolveWordHighlightRange(nativeRange) {
|
|
24038
|
+
const { context, resolver } = this.getHighlightResolverRuntime();
|
|
24039
|
+
const scope = context.scopeElement ?? this.currentContentElement;
|
|
24040
|
+
try {
|
|
24041
|
+
const resolved = resolver?.resolveWordRange?.(nativeRange, context);
|
|
24042
|
+
if (resolved && this.isRangeWithinScope(resolved, scope)) {
|
|
24043
|
+
return { range: resolved, remapped: !sameRange(nativeRange, resolved) };
|
|
24044
|
+
}
|
|
24045
|
+
} catch {}
|
|
24046
|
+
return { range: nativeRange, remapped: false };
|
|
24047
|
+
}
|
|
24048
|
+
resolveSentenceHighlightTargets(nativeRanges) {
|
|
24049
|
+
const { context, resolver } = this.getHighlightResolverRuntime();
|
|
24050
|
+
const scope = context.scopeElement ?? this.currentContentElement;
|
|
24051
|
+
try {
|
|
24052
|
+
const resolved = resolver?.resolveSentenceRanges?.(nativeRanges, context);
|
|
24053
|
+
if (!resolved)
|
|
24054
|
+
return { ranges: nativeRanges, elements: [] };
|
|
24055
|
+
const ranges = [];
|
|
24056
|
+
const elements = [];
|
|
24057
|
+
for (const target of resolved) {
|
|
24058
|
+
if (typeof Range !== "undefined" && target instanceof Range) {
|
|
24059
|
+
if (!this.isRangeWithinScope(target, scope)) {
|
|
24060
|
+
return { ranges: nativeRanges, elements: [] };
|
|
24061
|
+
}
|
|
24062
|
+
ranges.push(target);
|
|
24063
|
+
continue;
|
|
24064
|
+
}
|
|
24065
|
+
if (typeof Element !== "undefined" && target instanceof Element) {
|
|
24066
|
+
if (!this.isElementWithinScope(target, scope)) {
|
|
24067
|
+
return { ranges: nativeRanges, elements: [] };
|
|
24068
|
+
}
|
|
24069
|
+
elements.push(target);
|
|
24070
|
+
continue;
|
|
24071
|
+
}
|
|
24072
|
+
return { ranges: nativeRanges, elements: [] };
|
|
24073
|
+
}
|
|
24074
|
+
return { ranges, elements };
|
|
24075
|
+
} catch {
|
|
24076
|
+
return { ranges: nativeRanges, elements: [] };
|
|
24077
|
+
}
|
|
24078
|
+
}
|
|
24079
|
+
createTextRange(node, startOffset, endOffset) {
|
|
24080
|
+
if (typeof document === "undefined")
|
|
24081
|
+
return null;
|
|
24082
|
+
if (typeof document.createRange !== "function")
|
|
24083
|
+
return null;
|
|
24084
|
+
try {
|
|
24085
|
+
const range = document.createRange();
|
|
24086
|
+
range.setStart(node, startOffset);
|
|
24087
|
+
range.setEnd(node, endOffset);
|
|
24088
|
+
if (range.startContainer !== node || range.endContainer !== node) {
|
|
24089
|
+
return null;
|
|
24090
|
+
}
|
|
24091
|
+
return range;
|
|
24092
|
+
} catch {
|
|
24093
|
+
return null;
|
|
24094
|
+
}
|
|
24095
|
+
}
|
|
24096
|
+
paintTTSWordRange(range) {
|
|
24097
|
+
if (!this.highlightCoordinator)
|
|
24098
|
+
return;
|
|
24099
|
+
try {
|
|
24100
|
+
if (range.startContainer === range.endContainer && range.startContainer.nodeType === Node.TEXT_NODE) {
|
|
24101
|
+
this.highlightCoordinator.highlightTTSWord(range.startContainer, range.startOffset, range.endOffset);
|
|
24102
|
+
return;
|
|
24103
|
+
}
|
|
24104
|
+
} catch {}
|
|
24105
|
+
this.highlightCoordinator.highlightRange(range, HighlightType.TTS_WORD, HighlightColor.YELLOW);
|
|
24106
|
+
}
|
|
24107
|
+
paintTTSSentenceRanges(nativeRanges) {
|
|
24108
|
+
if (!this.highlightCoordinator)
|
|
24109
|
+
return;
|
|
24110
|
+
const { ranges, elements } = this.resolveSentenceHighlightTargets(nativeRanges);
|
|
24111
|
+
if (elements.length > 0 && ranges.length === 0 && this.highlightCoordinator.highlightTTSSentenceElements) {
|
|
24112
|
+
this.highlightCoordinator.highlightTTSSentenceElements(elements);
|
|
24113
|
+
return;
|
|
24114
|
+
}
|
|
24115
|
+
const paintedRanges = [...ranges];
|
|
24116
|
+
for (const element2 of elements) {
|
|
24117
|
+
const elementRange = document.createRange();
|
|
24118
|
+
elementRange.selectNodeContents(element2);
|
|
24119
|
+
paintedRanges.push(elementRange);
|
|
24120
|
+
}
|
|
24121
|
+
this.highlightCoordinator.highlightTTSSentence(paintedRanges);
|
|
24122
|
+
}
|
|
23984
24123
|
getCapabilities() {
|
|
23985
24124
|
return this.currentProvider?.getCapabilities() || null;
|
|
23986
24125
|
}
|
|
@@ -24342,7 +24481,7 @@ class TTSService {
|
|
|
24342
24481
|
const range = document.createRange();
|
|
24343
24482
|
range.setStart(start.node, start.offset);
|
|
24344
24483
|
range.setEnd(end.node, end.offset + 1);
|
|
24345
|
-
this.
|
|
24484
|
+
this.paintTTSSentenceRanges([range]);
|
|
24346
24485
|
this.activeSentenceStartOffset = startOffset;
|
|
24347
24486
|
}
|
|
24348
24487
|
getSegmentIndexForOffset(segments, offset) {
|
|
@@ -24808,7 +24947,7 @@ class TTSService {
|
|
|
24808
24947
|
try {
|
|
24809
24948
|
const range = document.createRange();
|
|
24810
24949
|
range.selectNodeContents(this.currentContentElement);
|
|
24811
|
-
this.
|
|
24950
|
+
this.paintTTSSentenceRanges([range]);
|
|
24812
24951
|
} catch {}
|
|
24813
24952
|
}
|
|
24814
24953
|
}
|
|
@@ -24824,7 +24963,12 @@ class TTSService {
|
|
|
24824
24963
|
if (highlightRange && this.highlightCoordinator) {
|
|
24825
24964
|
const highlightText = highlightRange.node.textContent?.substring(highlightRange.start, highlightRange.end) || "";
|
|
24826
24965
|
this.debugLog(`[TTSService] Highlighting "${highlightText}" (word: "${word}") at position ${globalIndex}`);
|
|
24827
|
-
this.
|
|
24966
|
+
const nativeRange = this.createTextRange(highlightRange.node, highlightRange.start, highlightRange.end);
|
|
24967
|
+
if (nativeRange) {
|
|
24968
|
+
this.paintTTSWordRange(this.resolveWordHighlightRange(nativeRange).range);
|
|
24969
|
+
} else {
|
|
24970
|
+
this.highlightCoordinator.highlightTTSWord(highlightRange.node, highlightRange.start, highlightRange.end);
|
|
24971
|
+
}
|
|
24828
24972
|
} else {
|
|
24829
24973
|
console.warn(`[TTSService] Could not find highlight range for position ${globalIndex}, length ${wordLength}`);
|
|
24830
24974
|
}
|
|
@@ -24843,7 +24987,7 @@ class TTSService {
|
|
|
24843
24987
|
this.lastRenderedRegionTarget = null;
|
|
24844
24988
|
if (chunk.regionRange) {
|
|
24845
24989
|
this.highlightCoordinator.clearHighlights?.(HighlightType.TTS_WORD);
|
|
24846
|
-
this.
|
|
24990
|
+
this.paintTTSSentenceRanges([chunk.regionRange]);
|
|
24847
24991
|
return;
|
|
24848
24992
|
}
|
|
24849
24993
|
if (!element2)
|
|
@@ -24851,23 +24995,19 @@ class TTSService {
|
|
|
24851
24995
|
const range = document.createRange();
|
|
24852
24996
|
range.selectNodeContents(element2);
|
|
24853
24997
|
this.highlightCoordinator.clearHighlights?.(HighlightType.TTS_WORD);
|
|
24854
|
-
this.
|
|
24998
|
+
this.paintTTSSentenceRanges([range]);
|
|
24855
24999
|
} catch {}
|
|
24856
25000
|
}
|
|
24857
25001
|
highlightCatalogActiveRange(range) {
|
|
24858
25002
|
if (!this.highlightCoordinator)
|
|
24859
25003
|
return;
|
|
24860
|
-
|
|
24861
|
-
this.highlightCoordinator.highlightTTSWord(range.startContainer, range.startOffset, range.endOffset);
|
|
24862
|
-
return;
|
|
24863
|
-
}
|
|
24864
|
-
this.highlightCoordinator.highlightRange(range, HighlightType.TTS_WORD, HighlightColor.YELLOW);
|
|
25004
|
+
this.paintTTSWordRange(this.resolveWordHighlightRange(range).range);
|
|
24865
25005
|
}
|
|
24866
25006
|
highlightRenderableRegionTarget(target) {
|
|
24867
25007
|
if (!this.highlightCoordinator || !target || typeof document === "undefined") {
|
|
24868
25008
|
return;
|
|
24869
25009
|
}
|
|
24870
|
-
if (sameRenderableHighlightTarget(this.lastRenderedRegionTarget, target)) {
|
|
25010
|
+
if (!this.highlightTargetResolverProvider && sameRenderableHighlightTarget(this.lastRenderedRegionTarget, target)) {
|
|
24871
25011
|
return;
|
|
24872
25012
|
}
|
|
24873
25013
|
try {
|
|
@@ -24875,14 +25015,14 @@ class TTSService {
|
|
|
24875
25015
|
if (target.type === "element") {
|
|
24876
25016
|
range.selectNodeContents(target.element);
|
|
24877
25017
|
} else if (target.type === "range") {
|
|
24878
|
-
this.
|
|
25018
|
+
this.paintTTSSentenceRanges([target.range]);
|
|
24879
25019
|
this.lastRenderedRegionTarget = target;
|
|
24880
25020
|
return;
|
|
24881
25021
|
} else {
|
|
24882
25022
|
range.setStart(target.node, target.startOffset);
|
|
24883
25023
|
range.setEnd(target.node, target.endOffset);
|
|
24884
25024
|
}
|
|
24885
|
-
this.
|
|
25025
|
+
this.paintTTSSentenceRanges([range]);
|
|
24886
25026
|
this.lastRenderedRegionTarget = target;
|
|
24887
25027
|
} catch {}
|
|
24888
25028
|
}
|
|
@@ -24895,13 +25035,25 @@ class TTSService {
|
|
|
24895
25035
|
return;
|
|
24896
25036
|
}
|
|
24897
25037
|
if (target.type === "text-range") {
|
|
24898
|
-
this.
|
|
25038
|
+
const nativeRange = this.createTextRange(target.node, target.startOffset, target.endOffset);
|
|
25039
|
+
if (nativeRange) {
|
|
25040
|
+
this.paintTTSWordRange(this.resolveWordHighlightRange(nativeRange).range);
|
|
25041
|
+
} else {
|
|
25042
|
+
this.highlightCoordinator.highlightTTSWord(target.node, target.startOffset, target.endOffset);
|
|
25043
|
+
}
|
|
24899
25044
|
return;
|
|
24900
25045
|
}
|
|
24901
25046
|
if (target.type === "range") {
|
|
24902
25047
|
this.highlightCatalogActiveRange(target.range);
|
|
24903
25048
|
return;
|
|
24904
25049
|
}
|
|
25050
|
+
const elementNativeRange = document.createRange();
|
|
25051
|
+
elementNativeRange.selectNodeContents(target.element);
|
|
25052
|
+
const resolvedElementRange = this.resolveWordHighlightRange(elementNativeRange);
|
|
25053
|
+
if (resolvedElementRange.remapped) {
|
|
25054
|
+
this.paintTTSWordRange(resolvedElementRange.range);
|
|
25055
|
+
return;
|
|
25056
|
+
}
|
|
24905
25057
|
const onlyChild = target.element.childNodes.length === 1 ? target.element.firstChild : null;
|
|
24906
25058
|
if (target.quality === "semantic-token" && onlyChild?.nodeType === Node.TEXT_NODE) {
|
|
24907
25059
|
this.highlightCoordinator.highlightTTSWord(onlyChild, 0, onlyChild.textContent?.length || 0);
|
|
@@ -25099,12 +25251,14 @@ class TTSService {
|
|
|
25099
25251
|
return;
|
|
25100
25252
|
this.setState(PlaybackState.IDLE);
|
|
25101
25253
|
this.clearHighlightsAndTracking();
|
|
25254
|
+
this.highlightTargetResolverProvider = null;
|
|
25102
25255
|
} catch (error) {
|
|
25103
25256
|
if (runId !== this.speakRunId)
|
|
25104
25257
|
return;
|
|
25105
25258
|
this.lastError = error instanceof Error ? error.message : String(error);
|
|
25106
25259
|
this.setState(PlaybackState.ERROR);
|
|
25107
25260
|
this.clearHighlightsAndTracking();
|
|
25261
|
+
this.highlightTargetResolverProvider = null;
|
|
25108
25262
|
throw error;
|
|
25109
25263
|
}
|
|
25110
25264
|
}
|
|
@@ -25149,6 +25303,7 @@ class TTSService {
|
|
|
25149
25303
|
this.speakRunId += 1;
|
|
25150
25304
|
this.provider.onWordBoundary = undefined;
|
|
25151
25305
|
this.provider.stop();
|
|
25306
|
+
this.highlightTargetResolverProvider = null;
|
|
25152
25307
|
this.setState(PlaybackState.IDLE);
|
|
25153
25308
|
this.currentText = null;
|
|
25154
25309
|
if (this.highlightCoordinator) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { LoaderConfig } from "@pie-players/pie-players-shared/loader-config";
|
|
2
2
|
import type { AccessibilityCatalogResolverApi, ElementToolStateStoreApi, HighlightCoordinatorApi, ToolCoordinatorApi, ToolkitCoordinatorApi, TtsServiceApi } from "../services/interfaces.js";
|
|
3
|
+
import type { TTSHighlightTargetResolver } from "../services/tts/highlight-target-resolver.js";
|
|
3
4
|
export type ItemPlayerType = "iife" | "esm" | "preloaded" | "custom";
|
|
4
5
|
export interface ItemPlayerConfig {
|
|
5
6
|
type: ItemPlayerType;
|
|
@@ -48,6 +49,7 @@ export declare const assessmentToolkitShellContext: {
|
|
|
48
49
|
};
|
|
49
50
|
export interface AssessmentToolkitRegionScopeContext {
|
|
50
51
|
scopeElement: HTMLElement | null;
|
|
52
|
+
ttsHighlightTargetResolver?: TTSHighlightTargetResolver | null;
|
|
51
53
|
}
|
|
52
54
|
export declare const assessmentToolkitRegionScopeContext: {
|
|
53
55
|
__context__: AssessmentToolkitRegionScopeContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assessment-toolkit-context.js","sourceRoot":"","sources":["../../src/context/assessment-toolkit-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"assessment-toolkit-context.js","sourceRoot":"","sources":["../../src/context/assessment-toolkit-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqCzD,MAAM,CAAC,MAAM,+BAA+B,GAC3C,aAAa,CACZ,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAClD,CAAC;AAOH,MAAM,CAAC,MAAM,mCAAmC,GAC/C,aAAa,CACZ,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CACtD,CAAC;AAeH,MAAM,CAAC,MAAM,6BAA6B,GACzC,aAAa,CACZ,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAChD,CAAC;AAOH,MAAM,CAAC,MAAM,mCAAmC,GAC/C,aAAa,CACZ,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CACtD,CAAC","sourcesContent":["import { createContext } from \"@pie-players/pie-context\";\nimport type { LoaderConfig } from \"@pie-players/pie-players-shared/loader-config\";\nimport type {\n\tAccessibilityCatalogResolverApi,\n\tElementToolStateStoreApi,\n\tHighlightCoordinatorApi,\n\tToolCoordinatorApi,\n\tToolkitCoordinatorApi,\n\tTtsServiceApi,\n} from \"../services/interfaces.js\";\nimport type { TTSHighlightTargetResolver } from \"../services/tts/highlight-target-resolver.js\";\n\nexport type ItemPlayerType = \"iife\" | \"esm\" | \"preloaded\" | \"custom\";\n\nexport interface ItemPlayerConfig {\n\ttype: ItemPlayerType;\n\ttagName: string;\n\tversion?: string;\n\tsource?: string;\n\tloaderConfig?: LoaderConfig;\n\tloaderOptions?: Record<string, unknown>;\n\tisDefault: boolean;\n}\n\nexport interface AssessmentToolkitRuntimeContext {\n\ttoolkitCoordinator: ToolkitCoordinatorApi;\n\ttoolCoordinator: ToolCoordinatorApi;\n\tttsService: TtsServiceApi;\n\thighlightCoordinator: HighlightCoordinatorApi;\n\tcatalogResolver: AccessibilityCatalogResolverApi;\n\telementToolStateStore: ElementToolStateStoreApi;\n\tassessmentId: string;\n\tsectionId: string;\n\titemPlayer: ItemPlayerConfig;\n\treportSessionChanged?: (itemId: string, detail: unknown) => void;\n}\n\nexport const assessmentToolkitRuntimeContext =\n\tcreateContext<AssessmentToolkitRuntimeContext>(\n\t\tSymbol.for(\"pie.assessmentToolkit.runtimeContext\"),\n\t);\n\nexport interface AssessmentToolkitHostRuntimeContext {\n\truntimeId: string;\n\tcoordinator: ToolkitCoordinatorApi;\n}\n\nexport const assessmentToolkitHostRuntimeContext =\n\tcreateContext<AssessmentToolkitHostRuntimeContext>(\n\t\tSymbol.for(\"pie.assessmentToolkit.hostRuntimeContext\"),\n\t);\n\nexport type ShellContextKind = \"item\" | \"passage\";\n\nexport interface AssessmentToolkitShellContext {\n\tkind: ShellContextKind;\n\titemId: string;\n\tcanonicalItemId: string;\n\tcontentKind: string;\n\tregionPolicy: string;\n\tscopeElement: HTMLElement | null;\n\titem: unknown;\n\tcontextVersion: number;\n}\n\nexport const assessmentToolkitShellContext =\n\tcreateContext<AssessmentToolkitShellContext>(\n\t\tSymbol.for(\"pie.assessmentToolkit.shellContext\"),\n\t);\n\nexport interface AssessmentToolkitRegionScopeContext {\n\tscopeElement: HTMLElement | null;\n\tttsHighlightTargetResolver?: TTSHighlightTargetResolver | null;\n}\n\nexport const assessmentToolkitRegionScopeContext =\n\tcreateContext<AssessmentToolkitRegionScopeContext>(\n\t\tSymbol.for(\"pie.assessmentToolkit.regionScopeContext\"),\n\t);\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
export type { AssessmentToolkitHostRuntimeContext, AssessmentToolkitRegionScopeContext, AssessmentToolkitRuntimeContext, AssessmentToolkitShellContext, ItemPlayerConfig, ItemPlayerType, ShellContextKind, } from "./context/assessment-toolkit-context.js";
|
|
10
|
+
export type { TTSHighlightContext, TTSHighlightTargetResolver, TTSHighlightTargetResolverProvider, TTSHighlightTargetResolverRuntime, } from "./services/tts/highlight-target-resolver.js";
|
|
10
11
|
export { assessmentToolkitHostRuntimeContext, assessmentToolkitRegionScopeContext, assessmentToolkitRuntimeContext, assessmentToolkitShellContext, } from "./context/assessment-toolkit-context.js";
|
|
11
12
|
export { connectAssessmentToolkitHostRuntimeContext, connectAssessmentToolkitRegionScopeContext, connectAssessmentToolkitRuntimeContext, connectAssessmentToolkitShellContext, } from "./context/runtime-context-consumer.js";
|
|
12
13
|
export { PIE_INTERNAL_CONTENT_LOADED_EVENT, PIE_INTERNAL_ITEM_SESSION_CHANGED_EVENT, PIE_INTERNAL_ITEM_PLAYER_ERROR_EVENT, PIE_ITEM_SESSION_CHANGED_EVENT, PIE_REGISTER_EVENT, PIE_UNREGISTER_EVENT, type InternalContentLoadedDetail, type InternalItemSessionChangedDetail, type InternalItemPlayerErrorDetail, type ItemSessionChangedDetail, type RuntimeRegistrationDetail, type RuntimeRegistrationKind, } from "./runtime/registration-events.js";
|
|
@@ -26,7 +27,7 @@ export type { ResolvedToolContext, ToolbarContext, ToolContextResolver, ToolCont
|
|
|
26
27
|
export { ToolRegistry } from "./services/ToolRegistry.js";
|
|
27
28
|
export type { AssessmentToolContext, BaseToolContext, ElementToolContext, ItemToolContext, PassageToolContext, RubricToolContext, SectionToolContext, ToolContext, ToolLevel, } from "./services/tool-context.js";
|
|
28
29
|
export { extractTextContent, hasChoiceInteraction, hasMathContent, hasReadableText, isAssessmentContext, isElementContext, isItemContext, isPassageContext, isRubricContext, isSectionContext, } from "./services/tool-context.js";
|
|
29
|
-
export { DEFAULT_TOOL_PLACEMENT, DEFAULT_TOOL_ORDER, createPackagedToolRegistry, PACKAGED_TOOL_PLACEMENT, registerPackagedTools, } from "./services/createDefaultToolRegistry.js";
|
|
30
|
+
export { DEFAULT_TOOL_PLACEMENT, DEFAULT_TOOL_ORDER, createPackagedToolRegistry, PACKAGED_TOOL_PLACEMENT, registerPackagedTools, SECTION_PLAYER_PREFERRED_TOOL_PLACEMENT, } from "./services/createDefaultToolRegistry.js";
|
|
30
31
|
export type { CreateToolsConfigArgs } from "./services/create-tools-config.js";
|
|
31
32
|
export { createToolsConfig } from "./services/create-tools-config.js";
|
|
32
33
|
export { DEFAULT_PERSONAL_NEEDS_PROFILE, createDefaultPersonalNeedsProfile, } from "./services/defaultPersonalNeedsProfile.js";
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ export { RangeSerializer } from "./services/RangeSerializer.js";
|
|
|
20
20
|
export { I18nService } from "./services/I18nService.js";
|
|
21
21
|
export { ToolRegistry } from "./services/ToolRegistry.js";
|
|
22
22
|
export { extractTextContent, hasChoiceInteraction, hasMathContent, hasReadableText, isAssessmentContext, isElementContext, isItemContext, isPassageContext, isRubricContext, isSectionContext, } from "./services/tool-context.js";
|
|
23
|
-
export { DEFAULT_TOOL_PLACEMENT, DEFAULT_TOOL_ORDER, createPackagedToolRegistry, PACKAGED_TOOL_PLACEMENT, registerPackagedTools, } from "./services/createDefaultToolRegistry.js";
|
|
23
|
+
export { DEFAULT_TOOL_PLACEMENT, DEFAULT_TOOL_ORDER, createPackagedToolRegistry, PACKAGED_TOOL_PLACEMENT, registerPackagedTools, SECTION_PLAYER_PREFERRED_TOOL_PLACEMENT, } from "./services/createDefaultToolRegistry.js";
|
|
24
24
|
export { createToolsConfig } from "./services/create-tools-config.js";
|
|
25
25
|
export { DEFAULT_PERSONAL_NEEDS_PROFILE, createDefaultPersonalNeedsProfile, } from "./services/defaultPersonalNeedsProfile.js";
|
|
26
26
|
export { createToolElement, DEFAULT_TOOL_TAG_MAP, resolveToolTag, toToolIdFromTag, } from "./tools/tool-tag-map.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PIE Assessment Toolkit\n *\n * Independent, composable services for coordinating tools, accommodations,\n * and item players in assessment applications.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Core Infrastructure\n// ============================================================================\n\nexport type {\n\tAssessmentToolkitHostRuntimeContext,\n\tAssessmentToolkitRegionScopeContext,\n\tAssessmentToolkitRuntimeContext,\n\tAssessmentToolkitShellContext,\n\tItemPlayerConfig,\n\tItemPlayerType,\n\tShellContextKind,\n} from \"./context/assessment-toolkit-context.js\";\nexport {\n\tassessmentToolkitHostRuntimeContext,\n\tassessmentToolkitRegionScopeContext,\n\tassessmentToolkitRuntimeContext,\n\tassessmentToolkitShellContext,\n} from \"./context/assessment-toolkit-context.js\";\nexport {\n\tconnectAssessmentToolkitHostRuntimeContext,\n\tconnectAssessmentToolkitRegionScopeContext,\n\tconnectAssessmentToolkitRuntimeContext,\n\tconnectAssessmentToolkitShellContext,\n} from \"./context/runtime-context-consumer.js\";\nexport {\n\tPIE_INTERNAL_CONTENT_LOADED_EVENT,\n\tPIE_INTERNAL_ITEM_SESSION_CHANGED_EVENT,\n\tPIE_INTERNAL_ITEM_PLAYER_ERROR_EVENT,\n\tPIE_ITEM_SESSION_CHANGED_EVENT,\n\tPIE_REGISTER_EVENT,\n\tPIE_UNREGISTER_EVENT,\n\ttype InternalContentLoadedDetail,\n\ttype InternalItemSessionChangedDetail,\n\ttype InternalItemPlayerErrorDetail,\n\ttype ItemSessionChangedDetail,\n\ttype RuntimeRegistrationDetail,\n\ttype RuntimeRegistrationKind,\n} from \"./runtime/registration-events.js\";\nexport {\n\tconnectToolRegionScopeContext,\n\tconnectToolRuntimeContext,\n\tconnectToolShellContext,\n\tcreateCrossBoundaryEvent,\n\tdispatchCrossBoundaryEvent,\n\tisContextValueDefined,\n} from \"./runtime/tool-host-contract.js\";\n\n// ============================================================================\n// Service Interfaces\n// ============================================================================\n\nexport type {\n\tAccessibilityCatalogResolverApi,\n\tElementToolStateStoreApi,\n\tHighlightCoordinatorApi,\n\tI18nServiceApi,\n\tThemeProviderApi,\n\tToolCoordinatorApi,\n\tToolkitCoordinatorApi,\n\tTtsServiceApi,\n\tToolState,\n} from \"./services/interfaces.js\";\n\n// ============================================================================\n// Toolkit Services\n// ============================================================================\n\n// Accessibility Catalog Resolver (QTI 3.0 Accessibility Catalogs)\nexport type {\n\tCatalogLookupContext,\n\tCatalogLookupOptions,\n\tCatalogOwnerContext,\n\tCatalogOwnerKind,\n\tCatalogStatistics,\n\tCatalogType,\n\tResolvedCatalog,\n} from \"./services/AccessibilityCatalogResolver.js\";\nexport { AccessibilityCatalogResolver } from \"./services/AccessibilityCatalogResolver.js\";\n// Context Variable Store (QTI 3.0 Context Declarations)\nexport { ContextVariableStore } from \"./services/ContextVariableStore.js\";\n// Element Tool State Store (Element-level ephemeral tool state)\nexport { ElementToolStateStore } from \"./services/ElementToolStateStore.js\";\n// Highlight Coordinator\nexport type { Annotation } from \"./services/HighlightCoordinator.js\";\nexport {\n\tHighlightColor,\n\tHighlightCoordinator,\n\tHighlightType,\n} from \"./services/HighlightCoordinator.js\";\n// Range Serializer (for annotation persistence)\nexport type { SerializedRange } from \"./services/RangeSerializer.js\";\nexport { RangeSerializer } from \"./services/RangeSerializer.js\";\n// I18n Service\nexport type {\n\tI18nConfig,\n\tPluralTranslation,\n\tTranslationBundle,\n} from \"./services/I18nService.js\";\nexport { I18nService } from \"./services/I18nService.js\";\n// Tool Registry (Registry-based tool system)\nexport type {\n\tResolvedToolContext,\n\tToolbarContext,\n\tToolContextResolver,\n\tToolContextResolverContext,\n\tToolContextResolverMap,\n\tToolContextResolverResult,\n\tToolModuleLoader,\n\tToolToolbarButtonDefinition,\n\tToolToolbarRenderResult,\n\tToolRegistration,\n} from \"./services/ToolRegistry.js\";\nexport { ToolRegistry } from \"./services/ToolRegistry.js\";\nexport type {\n\tAssessmentToolContext,\n\tBaseToolContext,\n\tElementToolContext,\n\tItemToolContext,\n\tPassageToolContext,\n\tRubricToolContext,\n\tSectionToolContext,\n\tToolContext,\n\tToolLevel,\n} from \"./services/tool-context.js\";\nexport {\n\textractTextContent,\n\thasChoiceInteraction,\n\thasMathContent,\n\thasReadableText,\n\tisAssessmentContext,\n\tisElementContext,\n\tisItemContext,\n\tisPassageContext,\n\tisRubricContext,\n\tisSectionContext,\n} from \"./services/tool-context.js\";\nexport {\n\tDEFAULT_TOOL_PLACEMENT,\n\tDEFAULT_TOOL_ORDER,\n\tcreatePackagedToolRegistry,\n\tPACKAGED_TOOL_PLACEMENT,\n\tregisterPackagedTools,\n} from \"./services/createDefaultToolRegistry.js\";\nexport type { CreateToolsConfigArgs } from \"./services/create-tools-config.js\";\nexport { createToolsConfig } from \"./services/create-tools-config.js\";\nexport {\n\tDEFAULT_PERSONAL_NEEDS_PROFILE,\n\tcreateDefaultPersonalNeedsProfile,\n} from \"./services/defaultPersonalNeedsProfile.js\";\nexport type {\n\tToolComponentFactory,\n\tToolComponentFactoryMap,\n\tToolComponentOverrides,\n\tToolTagMap,\n} from \"./tools/tool-tag-map.js\";\nexport {\n\tcreateToolElement,\n\tDEFAULT_TOOL_TAG_MAP,\n\tresolveToolTag,\n\ttoToolIdFromTag,\n} from \"./tools/tool-tag-map.js\";\n// QTI 3.0 Standard Access Features\nexport {\n\tALL_STANDARD_ACCESS_FEATURES,\n\tEXAMPLE_PNP_CONFIGURATIONS,\n\tgetFeatureCategory,\n\tgetFeaturesInCategory,\n\tisStandardAccessFeature,\n\tQTI_STANDARD_ACCESS_FEATURES,\n} from \"./services/pnp-standard-features.js\";\n// SSML Extractor (Auto-generates catalogs from embedded SSML)\nexport type { ExtractionResult } from \"./services/SSMLExtractor.js\";\nexport { SSMLExtractor } from \"./services/SSMLExtractor.js\";\n// Theme Provider\nexport type { FontSize, ThemeConfig } from \"./services/ThemeProvider.js\";\nexport { ThemeProvider } from \"./services/ThemeProvider.js\";\n// Tool Coordinator\nexport { ToolCoordinator, ZIndexLayer } from \"./services/ToolCoordinator.js\";\n// Toolkit Coordinator (Centralized service management)\nexport type {\n\tAnswerEliminatorToolConfig,\n\tProviderLifecycleContext,\n\tSectionControllerContext,\n\tSectionControllerEvent,\n\tSectionControllerEventType,\n\tSectionItemEvent,\n\tSectionItemEventType,\n\tSectionControllerFactoryDefaults,\n\tSectionControllerHandle,\n\tSectionControllerKey,\n\tSectionScopedEvent,\n\tSectionScopedEventType,\n\tSectionSessionPersistenceConfig,\n\tSectionItemEventSubscriptionArgs,\n\tSectionScopedEventSubscriptionArgs,\n\tSectionEventSubscriptionArgs,\n\tSectionSessionPersistenceStrategy,\n\tSectionControllerLoadedRenderable,\n\tSectionControllerRuntimeState,\n\tSectionControllerSessionState,\n\tSectionPersistenceFactoryDefaults,\n\tToolConfig,\n\tToolkitCoordinatorConfig,\n\tToolkitCoordinatorHooks,\n\tToolkitErrorContext,\n\tToolkitInitStatus,\n\tToolkitServiceBundle,\n\tToolkitToolsConfig,\n\tTTSToolConfig,\n} from \"./services/ToolkitCoordinator.js\";\nexport { ToolkitCoordinator } from \"./services/ToolkitCoordinator.js\";\nexport type {\n\tCanonicalToolsConfig,\n\tToolPlacementConfig,\n\tToolPlacementLevel,\n\tToolPolicyConfig,\n\tToolProvidersConfig,\n} from \"./services/tools-config-normalizer.js\";\nexport type {\n\tFrameworkErrorKind,\n\tFrameworkErrorModel,\n\tFrameworkErrorSeverity,\n} from \"./services/framework-error.js\";\nexport {\n\tformatFrameworkErrorForConsole,\n\tframeworkErrorFromToolConfigDiagnostics,\n\tframeworkErrorFromUnknown,\n\ttoFrameworkErrorModel,\n} from \"./services/framework-error.js\";\nexport type { FrameworkErrorListener } from \"./services/framework-error-bus.js\";\nexport type {\n\tToolConfigDiagnostic,\n\tToolConfigDiagnosticSeverity,\n\tToolConfigStrictness,\n\tToolConfigValidationOptions,\n\tToolConfigValidationResult,\n} from \"./services/tool-config-validation.js\";\nexport type {\n\tToolbarButtonItem,\n\tToolbarItem,\n\tToolbarItemBase,\n\tToolbarLinkItem,\n} from \"./services/toolbar-items.js\";\nexport {\n\tisExternalIconUrl,\n\tisInlineSvgIcon,\n\tisToolbarLinkItem,\n\tisValidToolbarItemShape,\n} from \"./services/toolbar-items.js\";\nexport {\n\tnormalizeToolsConfig,\n\tnormalizeToolAlias,\n\tnormalizeToolList,\n\tparseToolList,\n} from \"./services/tools-config-normalizer.js\";\nexport {\n\tframeworkErrorFromToolConfigValidation,\n\tnormalizeAndValidateToolsConfig,\n} from \"./services/tool-config-validation.js\";\nexport type {\n\tParsedToolInstanceId,\n\tToolScopeLevel,\n} from \"./services/tool-instance-id.js\";\nexport {\n\tcreateScopedToolId,\n\tparseScopedToolId,\n\ttoOverlayToolId,\n} from \"./services/tool-instance-id.js\";\n// Text-to-Speech Service\nexport type { TTSConfig } from \"./services/TTSService.js\";\nexport { PlaybackState, TTSService } from \"./services/TTSService.js\";\nexport {\n\tPIE_TTS_CONTROL_HANDOFF_EVENT,\n\ttype TTSControlHandoffDetail,\n} from \"./services/tts-control-events.js\";\nexport { BrowserTTSProvider } from \"./services/tts/browser-provider.js\";\nexport type { SREMathSpeechOptions } from \"./services/tts/math-speech.js\";\nexport type {\n\tNormalizedTTSSpeedOption,\n\tTTSHostToolbarLayout,\n\tTTSLayoutMode,\n\tTTSRuntimeSettings,\n\tTTSSpeedOption,\n\tTTSSpeedOptionConfig,\n} from \"./services/tts-runtime-config.js\";\nexport {\n\tDEFAULT_TTS_SPEED_OPTIONS,\n\tformatTTSSpeedOptionsAsText,\n\tnormalizeTTSLayoutMode,\n\tnormalizeTTSSpeedControlOptions,\n\tnormalizeTTSSpeedOptionConfigs,\n\tnormalizeTTSSpeedOptions,\n\tparseTTSSpeedOptionsFromText,\n\tresolveTTSHostToolbarLayout,\n\tresolveTTSLayoutMode,\n\tresolveTTSRuntimeSettings,\n} from \"./services/tts-runtime-config.js\";\n// TTS Provider System\nexport type {\n\tITTSProvider,\n\tITTSProviderImplementation,\n\tTTSSpeechSegment,\n\tTTSFeature,\n\tTTSProviderCapabilities,\n} from \"@pie-players/pie-tts\";\n\n// ============================================================================\n// Item loading (client-resolvable default; optional backend hook)\n// ============================================================================\n\nexport type {\n\tCreateLoadItemOptions,\n\tLoadItem,\n\tLoadItemOptions,\n} from \"./item-loader.js\";\nexport {\n\tcreateFetchItemLoader,\n\tcreateLoadItem,\n\tItemLoadError,\n} from \"./item-loader.js\";\n\n// ============================================================================\n// Attempt Session\n// ============================================================================\n\nexport type {\n\tStorageLike,\n\tTestAttemptItemSession,\n\tTestAttemptSession,\n\tTestAttemptSessionNavigationState,\n\tTestAttemptSessionRealization,\n} from \"./attempt/TestSession.js\";\nexport {\n\tcreateMemoryStorage,\n\tcreateTestAttemptSessionIdentifier,\n\tcreateNewTestAttemptSession,\n\tgetBrowserLocalStorage,\n\tgetOrCreateAnonymousDeviceId,\n\tgetTestAttemptSessionStorageKey,\n\tloadTestAttemptSession,\n\tsaveTestAttemptSession,\n\tsetCurrentPosition,\n\tupsertItemSessionFromPieSessionChange,\n\tupsertVisitedItem,\n} from \"./attempt/TestSession.js\";\nexport type {\n\tAssessmentSession,\n\tAssessmentSectionSessionState,\n\tAssessmentSessionNavigationState,\n\tAssessmentSessionRealization,\n} from \"./attempt/AssessmentSession.js\";\nexport {\n\tcreateNewAssessmentSession,\n\tgetAssessmentSessionStorageKey,\n\tloadAssessmentSession,\n\tsaveAssessmentSession,\n\tsetCurrentSectionPosition,\n\tupsertSectionSession,\n} from \"./attempt/AssessmentSession.js\";\nexport type {\n\tActivitySessionPatchPayload,\n\tMapActivityToTestAttemptSessionArgs,\n\tPieBackendActivityDefinition,\n\tPieBackendActivityItemRef,\n\tPieBackendActivitySession,\n} from \"./attempt/adapters/activity-to-test-attempt-session.js\";\nexport {\n\tbuildActivitySessionItemUpdate,\n\tbuildActivitySessionPatchFromTestAttemptSession,\n\tmapActivityToTestAttemptSession,\n\ttoItemSessionsRecord,\n} from \"./attempt/adapters/activity-to-test-attempt-session.js\";\n\n// Section Player - Use @pie-players/pie-section-player web component\n\n// ============================================================================\n// Shared Components\n// ============================================================================\n\n// ItemToolBar custom element registration helper is exported via package.json exports field\n// Import using: import '@pie-players/pie-assessment-toolkit/components/item-toolbar-element';\n// PieAssessmentToolkit custom element registration helper is exported via package.json exports field\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PIE Assessment Toolkit\n *\n * Independent, composable services for coordinating tools, accommodations,\n * and item players in assessment applications.\n *\n * @packageDocumentation\n */\n\n// ============================================================================\n// Core Infrastructure\n// ============================================================================\n\nexport type {\n\tAssessmentToolkitHostRuntimeContext,\n\tAssessmentToolkitRegionScopeContext,\n\tAssessmentToolkitRuntimeContext,\n\tAssessmentToolkitShellContext,\n\tItemPlayerConfig,\n\tItemPlayerType,\n\tShellContextKind,\n} from \"./context/assessment-toolkit-context.js\";\nexport type {\n\tTTSHighlightContext,\n\tTTSHighlightTargetResolver,\n\tTTSHighlightTargetResolverProvider,\n\tTTSHighlightTargetResolverRuntime,\n} from \"./services/tts/highlight-target-resolver.js\";\nexport {\n\tassessmentToolkitHostRuntimeContext,\n\tassessmentToolkitRegionScopeContext,\n\tassessmentToolkitRuntimeContext,\n\tassessmentToolkitShellContext,\n} from \"./context/assessment-toolkit-context.js\";\nexport {\n\tconnectAssessmentToolkitHostRuntimeContext,\n\tconnectAssessmentToolkitRegionScopeContext,\n\tconnectAssessmentToolkitRuntimeContext,\n\tconnectAssessmentToolkitShellContext,\n} from \"./context/runtime-context-consumer.js\";\nexport {\n\tPIE_INTERNAL_CONTENT_LOADED_EVENT,\n\tPIE_INTERNAL_ITEM_SESSION_CHANGED_EVENT,\n\tPIE_INTERNAL_ITEM_PLAYER_ERROR_EVENT,\n\tPIE_ITEM_SESSION_CHANGED_EVENT,\n\tPIE_REGISTER_EVENT,\n\tPIE_UNREGISTER_EVENT,\n\ttype InternalContentLoadedDetail,\n\ttype InternalItemSessionChangedDetail,\n\ttype InternalItemPlayerErrorDetail,\n\ttype ItemSessionChangedDetail,\n\ttype RuntimeRegistrationDetail,\n\ttype RuntimeRegistrationKind,\n} from \"./runtime/registration-events.js\";\nexport {\n\tconnectToolRegionScopeContext,\n\tconnectToolRuntimeContext,\n\tconnectToolShellContext,\n\tcreateCrossBoundaryEvent,\n\tdispatchCrossBoundaryEvent,\n\tisContextValueDefined,\n} from \"./runtime/tool-host-contract.js\";\n\n// ============================================================================\n// Service Interfaces\n// ============================================================================\n\nexport type {\n\tAccessibilityCatalogResolverApi,\n\tElementToolStateStoreApi,\n\tHighlightCoordinatorApi,\n\tI18nServiceApi,\n\tThemeProviderApi,\n\tToolCoordinatorApi,\n\tToolkitCoordinatorApi,\n\tTtsServiceApi,\n\tToolState,\n} from \"./services/interfaces.js\";\n\n// ============================================================================\n// Toolkit Services\n// ============================================================================\n\n// Accessibility Catalog Resolver (QTI 3.0 Accessibility Catalogs)\nexport type {\n\tCatalogLookupContext,\n\tCatalogLookupOptions,\n\tCatalogOwnerContext,\n\tCatalogOwnerKind,\n\tCatalogStatistics,\n\tCatalogType,\n\tResolvedCatalog,\n} from \"./services/AccessibilityCatalogResolver.js\";\nexport { AccessibilityCatalogResolver } from \"./services/AccessibilityCatalogResolver.js\";\n// Context Variable Store (QTI 3.0 Context Declarations)\nexport { ContextVariableStore } from \"./services/ContextVariableStore.js\";\n// Element Tool State Store (Element-level ephemeral tool state)\nexport { ElementToolStateStore } from \"./services/ElementToolStateStore.js\";\n// Highlight Coordinator\nexport type { Annotation } from \"./services/HighlightCoordinator.js\";\nexport {\n\tHighlightColor,\n\tHighlightCoordinator,\n\tHighlightType,\n} from \"./services/HighlightCoordinator.js\";\n// Range Serializer (for annotation persistence)\nexport type { SerializedRange } from \"./services/RangeSerializer.js\";\nexport { RangeSerializer } from \"./services/RangeSerializer.js\";\n// I18n Service\nexport type {\n\tI18nConfig,\n\tPluralTranslation,\n\tTranslationBundle,\n} from \"./services/I18nService.js\";\nexport { I18nService } from \"./services/I18nService.js\";\n// Tool Registry (Registry-based tool system)\nexport type {\n\tResolvedToolContext,\n\tToolbarContext,\n\tToolContextResolver,\n\tToolContextResolverContext,\n\tToolContextResolverMap,\n\tToolContextResolverResult,\n\tToolModuleLoader,\n\tToolToolbarButtonDefinition,\n\tToolToolbarRenderResult,\n\tToolRegistration,\n} from \"./services/ToolRegistry.js\";\nexport { ToolRegistry } from \"./services/ToolRegistry.js\";\nexport type {\n\tAssessmentToolContext,\n\tBaseToolContext,\n\tElementToolContext,\n\tItemToolContext,\n\tPassageToolContext,\n\tRubricToolContext,\n\tSectionToolContext,\n\tToolContext,\n\tToolLevel,\n} from \"./services/tool-context.js\";\nexport {\n\textractTextContent,\n\thasChoiceInteraction,\n\thasMathContent,\n\thasReadableText,\n\tisAssessmentContext,\n\tisElementContext,\n\tisItemContext,\n\tisPassageContext,\n\tisRubricContext,\n\tisSectionContext,\n} from \"./services/tool-context.js\";\nexport {\n\tDEFAULT_TOOL_PLACEMENT,\n\tDEFAULT_TOOL_ORDER,\n\tcreatePackagedToolRegistry,\n\tPACKAGED_TOOL_PLACEMENT,\n\tregisterPackagedTools,\n\tSECTION_PLAYER_PREFERRED_TOOL_PLACEMENT,\n} from \"./services/createDefaultToolRegistry.js\";\nexport type { CreateToolsConfigArgs } from \"./services/create-tools-config.js\";\nexport { createToolsConfig } from \"./services/create-tools-config.js\";\nexport {\n\tDEFAULT_PERSONAL_NEEDS_PROFILE,\n\tcreateDefaultPersonalNeedsProfile,\n} from \"./services/defaultPersonalNeedsProfile.js\";\nexport type {\n\tToolComponentFactory,\n\tToolComponentFactoryMap,\n\tToolComponentOverrides,\n\tToolTagMap,\n} from \"./tools/tool-tag-map.js\";\nexport {\n\tcreateToolElement,\n\tDEFAULT_TOOL_TAG_MAP,\n\tresolveToolTag,\n\ttoToolIdFromTag,\n} from \"./tools/tool-tag-map.js\";\n// QTI 3.0 Standard Access Features\nexport {\n\tALL_STANDARD_ACCESS_FEATURES,\n\tEXAMPLE_PNP_CONFIGURATIONS,\n\tgetFeatureCategory,\n\tgetFeaturesInCategory,\n\tisStandardAccessFeature,\n\tQTI_STANDARD_ACCESS_FEATURES,\n} from \"./services/pnp-standard-features.js\";\n// SSML Extractor (Auto-generates catalogs from embedded SSML)\nexport type { ExtractionResult } from \"./services/SSMLExtractor.js\";\nexport { SSMLExtractor } from \"./services/SSMLExtractor.js\";\n// Theme Provider\nexport type { FontSize, ThemeConfig } from \"./services/ThemeProvider.js\";\nexport { ThemeProvider } from \"./services/ThemeProvider.js\";\n// Tool Coordinator\nexport { ToolCoordinator, ZIndexLayer } from \"./services/ToolCoordinator.js\";\n// Toolkit Coordinator (Centralized service management)\nexport type {\n\tAnswerEliminatorToolConfig,\n\tProviderLifecycleContext,\n\tSectionControllerContext,\n\tSectionControllerEvent,\n\tSectionControllerEventType,\n\tSectionItemEvent,\n\tSectionItemEventType,\n\tSectionControllerFactoryDefaults,\n\tSectionControllerHandle,\n\tSectionControllerKey,\n\tSectionScopedEvent,\n\tSectionScopedEventType,\n\tSectionSessionPersistenceConfig,\n\tSectionItemEventSubscriptionArgs,\n\tSectionScopedEventSubscriptionArgs,\n\tSectionEventSubscriptionArgs,\n\tSectionSessionPersistenceStrategy,\n\tSectionControllerLoadedRenderable,\n\tSectionControllerRuntimeState,\n\tSectionControllerSessionState,\n\tSectionPersistenceFactoryDefaults,\n\tToolConfig,\n\tToolkitCoordinatorConfig,\n\tToolkitCoordinatorHooks,\n\tToolkitErrorContext,\n\tToolkitInitStatus,\n\tToolkitServiceBundle,\n\tToolkitToolsConfig,\n\tTTSToolConfig,\n} from \"./services/ToolkitCoordinator.js\";\nexport { ToolkitCoordinator } from \"./services/ToolkitCoordinator.js\";\nexport type {\n\tCanonicalToolsConfig,\n\tToolPlacementConfig,\n\tToolPlacementLevel,\n\tToolPolicyConfig,\n\tToolProvidersConfig,\n} from \"./services/tools-config-normalizer.js\";\nexport type {\n\tFrameworkErrorKind,\n\tFrameworkErrorModel,\n\tFrameworkErrorSeverity,\n} from \"./services/framework-error.js\";\nexport {\n\tformatFrameworkErrorForConsole,\n\tframeworkErrorFromToolConfigDiagnostics,\n\tframeworkErrorFromUnknown,\n\ttoFrameworkErrorModel,\n} from \"./services/framework-error.js\";\nexport type { FrameworkErrorListener } from \"./services/framework-error-bus.js\";\nexport type {\n\tToolConfigDiagnostic,\n\tToolConfigDiagnosticSeverity,\n\tToolConfigStrictness,\n\tToolConfigValidationOptions,\n\tToolConfigValidationResult,\n} from \"./services/tool-config-validation.js\";\nexport type {\n\tToolbarButtonItem,\n\tToolbarItem,\n\tToolbarItemBase,\n\tToolbarLinkItem,\n} from \"./services/toolbar-items.js\";\nexport {\n\tisExternalIconUrl,\n\tisInlineSvgIcon,\n\tisToolbarLinkItem,\n\tisValidToolbarItemShape,\n} from \"./services/toolbar-items.js\";\nexport {\n\tnormalizeToolsConfig,\n\tnormalizeToolAlias,\n\tnormalizeToolList,\n\tparseToolList,\n} from \"./services/tools-config-normalizer.js\";\nexport {\n\tframeworkErrorFromToolConfigValidation,\n\tnormalizeAndValidateToolsConfig,\n} from \"./services/tool-config-validation.js\";\nexport type {\n\tParsedToolInstanceId,\n\tToolScopeLevel,\n} from \"./services/tool-instance-id.js\";\nexport {\n\tcreateScopedToolId,\n\tparseScopedToolId,\n\ttoOverlayToolId,\n} from \"./services/tool-instance-id.js\";\n// Text-to-Speech Service\nexport type { TTSConfig } from \"./services/TTSService.js\";\nexport { PlaybackState, TTSService } from \"./services/TTSService.js\";\nexport {\n\tPIE_TTS_CONTROL_HANDOFF_EVENT,\n\ttype TTSControlHandoffDetail,\n} from \"./services/tts-control-events.js\";\nexport { BrowserTTSProvider } from \"./services/tts/browser-provider.js\";\nexport type { SREMathSpeechOptions } from \"./services/tts/math-speech.js\";\nexport type {\n\tNormalizedTTSSpeedOption,\n\tTTSHostToolbarLayout,\n\tTTSLayoutMode,\n\tTTSRuntimeSettings,\n\tTTSSpeedOption,\n\tTTSSpeedOptionConfig,\n} from \"./services/tts-runtime-config.js\";\nexport {\n\tDEFAULT_TTS_SPEED_OPTIONS,\n\tformatTTSSpeedOptionsAsText,\n\tnormalizeTTSLayoutMode,\n\tnormalizeTTSSpeedControlOptions,\n\tnormalizeTTSSpeedOptionConfigs,\n\tnormalizeTTSSpeedOptions,\n\tparseTTSSpeedOptionsFromText,\n\tresolveTTSHostToolbarLayout,\n\tresolveTTSLayoutMode,\n\tresolveTTSRuntimeSettings,\n} from \"./services/tts-runtime-config.js\";\n// TTS Provider System\nexport type {\n\tITTSProvider,\n\tITTSProviderImplementation,\n\tTTSSpeechSegment,\n\tTTSFeature,\n\tTTSProviderCapabilities,\n} from \"@pie-players/pie-tts\";\n\n// ============================================================================\n// Item loading (client-resolvable default; optional backend hook)\n// ============================================================================\n\nexport type {\n\tCreateLoadItemOptions,\n\tLoadItem,\n\tLoadItemOptions,\n} from \"./item-loader.js\";\nexport {\n\tcreateFetchItemLoader,\n\tcreateLoadItem,\n\tItemLoadError,\n} from \"./item-loader.js\";\n\n// ============================================================================\n// Attempt Session\n// ============================================================================\n\nexport type {\n\tStorageLike,\n\tTestAttemptItemSession,\n\tTestAttemptSession,\n\tTestAttemptSessionNavigationState,\n\tTestAttemptSessionRealization,\n} from \"./attempt/TestSession.js\";\nexport {\n\tcreateMemoryStorage,\n\tcreateTestAttemptSessionIdentifier,\n\tcreateNewTestAttemptSession,\n\tgetBrowserLocalStorage,\n\tgetOrCreateAnonymousDeviceId,\n\tgetTestAttemptSessionStorageKey,\n\tloadTestAttemptSession,\n\tsaveTestAttemptSession,\n\tsetCurrentPosition,\n\tupsertItemSessionFromPieSessionChange,\n\tupsertVisitedItem,\n} from \"./attempt/TestSession.js\";\nexport type {\n\tAssessmentSession,\n\tAssessmentSectionSessionState,\n\tAssessmentSessionNavigationState,\n\tAssessmentSessionRealization,\n} from \"./attempt/AssessmentSession.js\";\nexport {\n\tcreateNewAssessmentSession,\n\tgetAssessmentSessionStorageKey,\n\tloadAssessmentSession,\n\tsaveAssessmentSession,\n\tsetCurrentSectionPosition,\n\tupsertSectionSession,\n} from \"./attempt/AssessmentSession.js\";\nexport type {\n\tActivitySessionPatchPayload,\n\tMapActivityToTestAttemptSessionArgs,\n\tPieBackendActivityDefinition,\n\tPieBackendActivityItemRef,\n\tPieBackendActivitySession,\n} from \"./attempt/adapters/activity-to-test-attempt-session.js\";\nexport {\n\tbuildActivitySessionItemUpdate,\n\tbuildActivitySessionPatchFromTestAttemptSession,\n\tmapActivityToTestAttemptSession,\n\ttoItemSessionsRecord,\n} from \"./attempt/adapters/activity-to-test-attempt-session.js\";\n\n// Section Player - Use @pie-players/pie-section-player web component\n\n// ============================================================================\n// Shared Components\n// ============================================================================\n\n// ItemToolBar custom element registration helper is exported via package.json exports field\n// Import using: import '@pie-players/pie-assessment-toolkit/components/item-toolbar-element';\n// PieAssessmentToolkit custom element registration helper is exported via package.json exports field\n"]}
|
|
@@ -118,6 +118,12 @@ export declare class HighlightCoordinator implements HighlightCoordinatorApi {
|
|
|
118
118
|
* @param ranges Line (or sentence) ranges to paint with `--pie-tts-line-highlight`
|
|
119
119
|
*/
|
|
120
120
|
highlightTTSSentence(ranges: Range[]): void;
|
|
121
|
+
/**
|
|
122
|
+
* Highlight sentence/block elements for TTS (background layer).
|
|
123
|
+
*
|
|
124
|
+
* @param elements Visible elements to paint with `--pie-tts-line-highlight`
|
|
125
|
+
*/
|
|
126
|
+
highlightTTSSentenceElements(elements: Element[]): void;
|
|
121
127
|
private static readonly SENTENCE_FALLBACK_SELECTOR;
|
|
122
128
|
private static readonly WORD_FALLBACK_SELECTOR;
|
|
123
129
|
private highlightTTSElementFallbacks;
|
|
@@ -309,27 +309,27 @@ export class HighlightCoordinator {
|
|
|
309
309
|
|
|
310
310
|
/* Annotation highlights - persistent */
|
|
311
311
|
::highlight(annotation-yellow) {
|
|
312
|
-
background-color:
|
|
312
|
+
background-color: var(--pie-annotation-yellow-highlight, rgba(253, 233, 149, 0.5));
|
|
313
313
|
color: inherit;
|
|
314
314
|
}
|
|
315
315
|
|
|
316
316
|
::highlight(annotation-green) {
|
|
317
|
-
background-color:
|
|
317
|
+
background-color: var(--pie-annotation-green-highlight, rgba(166, 225, 197, 0.5));
|
|
318
318
|
color: inherit;
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
::highlight(annotation-blue) {
|
|
322
|
-
background-color:
|
|
322
|
+
background-color: var(--pie-annotation-blue-highlight, rgba(167, 224, 246, 0.5));
|
|
323
323
|
color: inherit;
|
|
324
324
|
}
|
|
325
325
|
|
|
326
326
|
::highlight(annotation-pink) {
|
|
327
|
-
background-color:
|
|
327
|
+
background-color: var(--pie-annotation-pink-highlight, rgba(255, 159, 174, 0.5));
|
|
328
328
|
color: inherit;
|
|
329
329
|
}
|
|
330
330
|
|
|
331
331
|
::highlight(annotation-orange) {
|
|
332
|
-
background-color:
|
|
332
|
+
background-color: var(--pie-annotation-orange-highlight, rgba(255, 165, 0, 0.5));
|
|
333
333
|
color: inherit;
|
|
334
334
|
}
|
|
335
335
|
|
|
@@ -410,6 +410,21 @@ export class HighlightCoordinator {
|
|
|
410
410
|
}
|
|
411
411
|
this.highlightTTSElementFallbacks(ranges);
|
|
412
412
|
}
|
|
413
|
+
/**
|
|
414
|
+
* Highlight sentence/block elements for TTS (background layer).
|
|
415
|
+
*
|
|
416
|
+
* @param elements Visible elements to paint with `--pie-tts-line-highlight`
|
|
417
|
+
*/
|
|
418
|
+
highlightTTSSentenceElements(elements) {
|
|
419
|
+
if (!this.ttsSentenceHighlight)
|
|
420
|
+
return;
|
|
421
|
+
this.applyAdaptiveTTSStyle(elements[0] || null);
|
|
422
|
+
this.clearTTSSentence();
|
|
423
|
+
for (const element of elements) {
|
|
424
|
+
element.setAttribute("data-pie-tts-sentence-element", "true");
|
|
425
|
+
this.ttsSentenceElementHighlights.add(element);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
413
428
|
// The read-along (sentence) band legitimately covers whole equations and
|
|
414
429
|
// replaced elements, so it escalates to them.
|
|
415
430
|
static SENTENCE_FALLBACK_SELECTOR = "math, mjx-container, svg, img, canvas, [role='img']";
|