@pie-players/pie-assessment-toolkit 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -67
- package/dist/attempt/TestSession.d.ts +23 -21
- package/dist/attempt/TestSession.d.ts.map +1 -1
- package/dist/attempt/TestSession.js +17 -15
- package/dist/attempt/TestSession.js.map +1 -1
- package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts +50 -0
- package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts.map +1 -0
- package/dist/attempt/adapters/activity-to-test-attempt-session.js +135 -0
- package/dist/attempt/adapters/activity-to-test-attempt-session.js.map +1 -0
- package/dist/components/ItemToolBar.custom-element.js +628 -0
- package/dist/components/PieAssessmentToolkit.custom-element.js +670 -0
- package/dist/components/item-toolbar-element.d.ts +3 -0
- package/dist/components/item-toolbar-element.d.ts.map +1 -0
- package/dist/components/item-toolbar-element.js +2 -0
- package/dist/components/item-toolbar-element.js.map +1 -0
- package/dist/components/pie-assessment-toolkit-element.d.ts +3 -0
- package/dist/components/pie-assessment-toolkit-element.d.ts.map +1 -0
- package/dist/components/pie-assessment-toolkit-element.js +2 -0
- package/dist/components/pie-assessment-toolkit-element.js.map +1 -0
- package/dist/context/assessment-toolkit-context.d.ts +52 -0
- package/dist/context/assessment-toolkit-context.d.ts.map +1 -0
- package/dist/context/assessment-toolkit-context.js +6 -0
- package/dist/context/assessment-toolkit-context.js.map +1 -0
- package/dist/context/runtime-context-consumer.d.ts +14 -0
- package/dist/context/runtime-context-consumer.d.ts.map +1 -0
- package/dist/context/runtime-context-consumer.js +52 -0
- package/dist/context/runtime-context-consumer.js.map +1 -0
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/runtime/RuntimeRegistry.d.ts +13 -0
- package/dist/runtime/RuntimeRegistry.d.ts.map +1 -0
- package/dist/runtime/RuntimeRegistry.js +50 -0
- package/dist/runtime/RuntimeRegistry.js.map +1 -0
- package/dist/runtime/SectionRuntimeEngine.d.ts +45 -0
- package/dist/runtime/SectionRuntimeEngine.d.ts.map +1 -0
- package/dist/runtime/SectionRuntimeEngine.js +81 -0
- package/dist/runtime/SectionRuntimeEngine.js.map +1 -0
- package/dist/runtime/registration-events.d.ts +19 -0
- package/dist/runtime/registration-events.d.ts.map +1 -0
- package/dist/runtime/registration-events.js +4 -0
- package/dist/runtime/registration-events.js.map +1 -0
- package/dist/runtime/runtime-event-guards.d.ts +3 -0
- package/dist/runtime/runtime-event-guards.d.ts.map +1 -0
- package/dist/runtime/runtime-event-guards.js +9 -0
- package/dist/runtime/runtime-event-guards.js.map +1 -0
- package/dist/runtime/tool-host-contract.d.ts +30 -0
- package/dist/runtime/tool-host-contract.d.ts.map +1 -0
- package/dist/runtime/tool-host-contract.js +48 -0
- package/dist/runtime/tool-host-contract.js.map +1 -0
- package/dist/services/TTSService.d.ts +3 -1
- package/dist/services/TTSService.d.ts.map +1 -1
- package/dist/services/TTSService.js +13 -12
- package/dist/services/TTSService.js.map +1 -1
- package/dist/services/ThemeProvider.d.ts +1 -0
- package/dist/services/ThemeProvider.d.ts.map +1 -1
- package/dist/services/ThemeProvider.js +82 -46
- package/dist/services/ThemeProvider.js.map +1 -1
- package/dist/services/ToolConfigResolver.d.ts +1 -1
- package/dist/services/ToolConfigResolver.js +1 -1
- package/dist/services/ToolCoordinator.d.ts +1 -1
- package/dist/services/ToolCoordinator.d.ts.map +1 -1
- package/dist/services/ToolRegistry.d.ts +64 -67
- package/dist/services/ToolRegistry.d.ts.map +1 -1
- package/dist/services/ToolRegistry.js +72 -22
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +106 -8
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
- package/dist/services/ToolkitCoordinator.js +502 -71
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/createDefaultToolRegistry.d.ts +12 -7
- package/dist/services/createDefaultToolRegistry.d.ts.map +1 -1
- package/dist/services/createDefaultToolRegistry.js +6 -10
- package/dist/services/createDefaultToolRegistry.js.map +1 -1
- package/dist/services/defaultPersonalNeedsProfile.d.ts +4 -0
- package/dist/services/defaultPersonalNeedsProfile.d.ts.map +1 -0
- package/dist/services/defaultPersonalNeedsProfile.js +25 -0
- package/dist/services/defaultPersonalNeedsProfile.js.map +1 -0
- package/dist/services/interfaces.d.ts +61 -1
- package/dist/services/interfaces.d.ts.map +1 -1
- package/dist/services/interfaces.js.map +1 -1
- package/dist/services/pnp-standard-features.d.ts +3 -4
- package/dist/services/pnp-standard-features.d.ts.map +1 -1
- package/dist/services/pnp-standard-features.js +0 -3
- package/dist/services/pnp-standard-features.js.map +1 -1
- package/dist/services/section-controller-types.d.ts +32 -0
- package/dist/services/section-controller-types.d.ts.map +1 -0
- package/dist/services/section-controller-types.js +2 -0
- package/dist/services/section-controller-types.js.map +1 -0
- package/dist/services/tool-context.d.ts +4 -4
- package/dist/services/tool-context.d.ts.map +1 -1
- package/dist/services/tool-context.js +106 -17
- package/dist/services/tool-context.js.map +1 -1
- package/dist/services/tool-instance-id.d.ts +17 -0
- package/dist/services/tool-instance-id.d.ts.map +1 -0
- package/dist/services/tool-instance-id.js +61 -0
- package/dist/services/tool-instance-id.js.map +1 -0
- package/dist/services/tool-providers/IToolProvider.d.ts +2 -3
- package/dist/services/tool-providers/IToolProvider.d.ts.map +1 -1
- package/dist/services/tool-providers/IToolProvider.js +1 -2
- package/dist/services/tool-providers/IToolProvider.js.map +1 -1
- package/dist/services/tool-providers/MathJsToolProvider.d.ts +25 -0
- package/dist/services/tool-providers/MathJsToolProvider.d.ts.map +1 -0
- package/dist/services/tool-providers/MathJsToolProvider.js +53 -0
- package/dist/services/tool-providers/MathJsToolProvider.js.map +1 -0
- package/dist/services/tool-providers/index.d.ts +2 -0
- package/dist/services/tool-providers/index.d.ts.map +1 -1
- package/dist/services/tool-providers/index.js +1 -0
- package/dist/services/tool-providers/index.js.map +1 -1
- package/dist/services/tools-config-normalizer.d.ts +26 -0
- package/dist/services/tools-config-normalizer.d.ts.map +1 -0
- package/dist/services/tools-config-normalizer.js +63 -0
- package/dist/services/tools-config-normalizer.js.map +1 -0
- package/dist/tools/calculators/ti-provider.d.ts.map +1 -1
- package/dist/tools/calculators/ti-provider.js +127 -4
- package/dist/tools/calculators/ti-provider.js.map +1 -1
- package/dist/tools/client.d.ts +2 -1
- package/dist/tools/client.d.ts.map +1 -1
- package/dist/tools/client.js +2 -1
- package/dist/tools/client.js.map +1 -1
- package/dist/tools/default-tool-module-loaders.d.ts +9 -0
- package/dist/tools/default-tool-module-loaders.d.ts.map +1 -0
- package/dist/tools/default-tool-module-loaders.js +17 -0
- package/dist/tools/default-tool-module-loaders.js.map +1 -0
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/library-loader.d.ts +1 -1
- package/dist/tools/library-loader.d.ts.map +1 -1
- package/dist/tools/library-loader.js +7 -2
- package/dist/tools/library-loader.js.map +1 -1
- package/dist/tools/registrations/accessibility-tools.d.ts +1 -9
- package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
- package/dist/tools/registrations/accessibility-tools.js +95 -113
- package/dist/tools/registrations/accessibility-tools.js.map +1 -1
- package/dist/tools/registrations/calculator.d.ts +2 -2
- package/dist/tools/registrations/calculator.d.ts.map +1 -1
- package/dist/tools/registrations/calculator.js +34 -55
- package/dist/tools/registrations/calculator.js.map +1 -1
- package/dist/tools/registrations/interaction-tools.d.ts.map +1 -1
- package/dist/tools/registrations/interaction-tools.js +77 -52
- package/dist/tools/registrations/interaction-tools.js.map +1 -1
- package/dist/tools/registrations/measurement-tools.d.ts.map +1 -1
- package/dist/tools/registrations/measurement-tools.js +63 -38
- package/dist/tools/registrations/measurement-tools.js.map +1 -1
- package/dist/tools/registrations/subject-specific-tools.d.ts.map +1 -1
- package/dist/tools/registrations/subject-specific-tools.js +63 -38
- package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
- package/dist/tools/registrations/tts.d.ts +1 -1
- package/dist/tools/registrations/tts.d.ts.map +1 -1
- package/dist/tools/registrations/tts.js +27 -41
- package/dist/tools/registrations/tts.js.map +1 -1
- package/dist/tools/response-discovery.d.ts +12 -14
- package/dist/tools/response-discovery.d.ts.map +1 -1
- package/dist/tools/response-discovery.js +23 -80
- package/dist/tools/response-discovery.js.map +1 -1
- package/dist/tools/tool-tag-map.d.ts +3 -3
- package/dist/tools/tool-tag-map.d.ts.map +1 -1
- package/dist/tools/tool-tag-map.js +2 -3
- package/dist/tools/tool-tag-map.js.map +1 -1
- package/dist/tools/types.d.ts +3 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/package.json +25 -28
- package/src/README.md +16 -32
- package/src/components/ItemToolBar.svelte +489 -0
- package/src/components/PNPProvenanceViewer.svelte +14 -4
- package/src/components/PieAssessmentToolkit.svelte +517 -0
- package/src/components/ToolButton.svelte +11 -11
- package/src/components/ToolButtonGroup.svelte +27 -11
- package/src/tools/README.md +6 -5
- package/src/tools/calculators/README.md +4 -4
- package/dist/player/AssessmentPlayer.d.ts +0 -397
- package/dist/player/AssessmentPlayer.d.ts.map +0 -1
- package/dist/player/AssessmentPlayer.js +0 -974
- package/dist/player/AssessmentPlayer.js.map +0 -1
- package/dist/player/index.d.ts +0 -17
- package/dist/player/index.d.ts.map +0 -1
- package/dist/player/index.js +0 -15
- package/dist/player/index.js.map +0 -1
- package/dist/player/navigation-types.d.ts +0 -63
- package/dist/player/navigation-types.d.ts.map +0 -1
- package/dist/player/navigation-types.js +0 -7
- package/dist/player/navigation-types.js.map +0 -1
- package/dist/player/qti-navigation.d.ts +0 -29
- package/dist/player/qti-navigation.d.ts.map +0 -1
- package/dist/player/qti-navigation.js +0 -160
- package/dist/player/qti-navigation.js.map +0 -1
- package/dist/reference-layout/index.d.ts +0 -19
- package/dist/reference-layout/index.d.ts.map +0 -1
- package/dist/reference-layout/index.js +0 -20
- package/dist/reference-layout/index.js.map +0 -1
- package/dist/services/AnnotationToolbarConfig.d.ts +0 -134
- package/dist/services/AnnotationToolbarConfig.d.ts.map +0 -1
- package/dist/services/AnnotationToolbarConfig.js +0 -100
- package/dist/services/AnnotationToolbarConfig.js.map +0 -1
- package/dist/services/AssessmentAuthoringService.d.ts +0 -60
- package/dist/services/AssessmentAuthoringService.d.ts.map +0 -1
- package/dist/services/AssessmentAuthoringService.js +0 -183
- package/dist/services/AssessmentAuthoringService.js.map +0 -1
- package/dist/services/PNPMapper.d.ts +0 -81
- package/dist/services/PNPMapper.d.ts.map +0 -1
- package/dist/services/PNPMapper.js +0 -108
- package/dist/services/PNPMapper.js.map +0 -1
- package/src/components/PNPProfileTester.example.svelte +0 -188
- package/src/components/PNPProfileTester.svelte +0 -397
- package/src/components/QuestionToolBar.svelte +0 -483
- package/src/player/AssessmentLayout.svelte +0 -68
- package/src/player/README.md +0 -154
- package/src/reference-layout/README.md +0 -135
- package/src/reference-layout/ReferenceLayout.svelte +0 -201
- package/src/reference-layout/components/AssessmentContent.svelte +0 -259
- package/src/reference-layout/components/AssessmentFooter.svelte +0 -89
- package/src/reference-layout/components/AssessmentHeader.svelte +0 -250
- package/src/reference-layout/components/AssessmentNavigation.svelte +0 -134
- package/src/reference-layout/components/AssessmentToolsBar.svelte +0 -176
- package/src/reference-layout/components/ItemPanel.svelte +0 -200
- package/src/reference-layout/components/NotesPanel.svelte +0 -179
- package/src/reference-layout/components/PassagePanel.svelte +0 -76
|
@@ -2,71 +2,17 @@
|
|
|
2
2
|
* Accessibility Tools Registrations
|
|
3
3
|
*
|
|
4
4
|
* Registers tools for visual accessibility and reading support:
|
|
5
|
-
* - Magnifier (zoom lens)
|
|
6
5
|
* - Line Reader (reading guide)
|
|
7
6
|
* - Color Scheme (theme/contrast)
|
|
8
7
|
* - Annotation Toolbar (text highlighting)
|
|
9
8
|
*
|
|
10
9
|
* Maps to QTI 3.0 standard access features from:
|
|
11
|
-
* - visual category:
|
|
10
|
+
* - visual category: highContrastDisplay, colorContrast
|
|
12
11
|
* - reading category: readingMask, readingGuide, highlighting
|
|
13
12
|
*/
|
|
14
13
|
import { hasReadableText } from "../../services/tool-context.js";
|
|
14
|
+
import { createScopedToolId } from "../../services/tool-instance-id.js";
|
|
15
15
|
import { createToolElement, } from "../tool-tag-map.js";
|
|
16
|
-
/**
|
|
17
|
-
* Magnifier tool registration
|
|
18
|
-
*
|
|
19
|
-
* Provides a draggable zoom lens for visual accessibility.
|
|
20
|
-
* Global tool that works across entire assessment.
|
|
21
|
-
*/
|
|
22
|
-
export const magnifierToolRegistration = {
|
|
23
|
-
toolId: "magnifier",
|
|
24
|
-
name: "Magnifier",
|
|
25
|
-
description: "Zoom lens for visual accessibility",
|
|
26
|
-
icon: "magnifying-glass",
|
|
27
|
-
// Magnifier is assessment-wide (global)
|
|
28
|
-
supportedLevels: ["assessment", "section"],
|
|
29
|
-
// PNP support IDs
|
|
30
|
-
// Maps to QTI 3.0 standard features: magnification, screenMagnifier, zoomable
|
|
31
|
-
pnpSupportIds: [
|
|
32
|
-
"magnification", // QTI 3.0 standard (visual.magnification)
|
|
33
|
-
"screenMagnifier", // QTI 3.0 standard (visual.screenMagnifier)
|
|
34
|
-
"zoomable", // QTI 3.0 standard (visual.zoomable)
|
|
35
|
-
"magnifier", // Common variant
|
|
36
|
-
"zoom", // Common variant
|
|
37
|
-
"visualZoom", // Common variant
|
|
38
|
-
],
|
|
39
|
-
/**
|
|
40
|
-
* Pass 2: Magnifier is always relevant when allowed
|
|
41
|
-
*/
|
|
42
|
-
isVisibleInContext(context) {
|
|
43
|
-
return true; // Always show if allowed by orchestrator
|
|
44
|
-
},
|
|
45
|
-
createButton(context, options) {
|
|
46
|
-
return {
|
|
47
|
-
toolId: this.toolId,
|
|
48
|
-
label: this.name,
|
|
49
|
-
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
50
|
-
disabled: options.disabled || false,
|
|
51
|
-
ariaLabel: options.ariaLabel || "Magnifier - Zoom in on content",
|
|
52
|
-
tooltip: options.tooltip || "Magnifier",
|
|
53
|
-
onClick: options.onClick || (() => { }),
|
|
54
|
-
className: options.className,
|
|
55
|
-
};
|
|
56
|
-
},
|
|
57
|
-
createToolInstance(context, options) {
|
|
58
|
-
const componentOverrides = options.config ?? {};
|
|
59
|
-
const magnifier = createToolElement(this.toolId, context, options, componentOverrides);
|
|
60
|
-
magnifier.visible = true;
|
|
61
|
-
if (options.config?.toolkitCoordinator) {
|
|
62
|
-
magnifier.toolkitCoordinator = options.config.toolkitCoordinator;
|
|
63
|
-
}
|
|
64
|
-
if (options.onClose) {
|
|
65
|
-
magnifier.addEventListener("close", options.onClose);
|
|
66
|
-
}
|
|
67
|
-
return magnifier;
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
16
|
/**
|
|
71
17
|
* Line Reader tool registration
|
|
72
18
|
*
|
|
@@ -95,29 +41,41 @@ export const lineReaderToolRegistration = {
|
|
|
95
41
|
isVisibleInContext(context) {
|
|
96
42
|
return hasReadableText(context);
|
|
97
43
|
},
|
|
98
|
-
|
|
99
|
-
|
|
44
|
+
renderToolbar(context, toolbarContext) {
|
|
45
|
+
const fullToolId = createScopedToolId(this.toolId, "item", toolbarContext.itemId);
|
|
46
|
+
const button = {
|
|
100
47
|
toolId: this.toolId,
|
|
101
48
|
label: this.name,
|
|
102
49
|
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
103
|
-
disabled:
|
|
104
|
-
ariaLabel:
|
|
105
|
-
tooltip:
|
|
106
|
-
onClick:
|
|
107
|
-
|
|
50
|
+
disabled: false,
|
|
51
|
+
ariaLabel: "Line reader - Reading guide",
|
|
52
|
+
tooltip: "Line Reader",
|
|
53
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
54
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
55
|
+
};
|
|
56
|
+
const componentOverrides = toolbarContext.componentOverrides ?? {};
|
|
57
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
58
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
59
|
+
return {
|
|
60
|
+
toolId: this.toolId,
|
|
61
|
+
button,
|
|
62
|
+
overlayElement: overlay,
|
|
63
|
+
sync: () => {
|
|
64
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
65
|
+
button.active = active;
|
|
66
|
+
overlay.visible = active;
|
|
67
|
+
if (toolbarContext.toolkitCoordinator) {
|
|
68
|
+
overlay.toolkitCoordinator = toolbarContext.toolkitCoordinator;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
subscribeActive: (callback) => {
|
|
72
|
+
if (!toolbarContext.subscribeVisibility)
|
|
73
|
+
return () => { };
|
|
74
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
75
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
76
|
+
});
|
|
77
|
+
},
|
|
108
78
|
};
|
|
109
|
-
},
|
|
110
|
-
createToolInstance(context, options) {
|
|
111
|
-
const componentOverrides = options.config ?? {};
|
|
112
|
-
const lineReader = createToolElement(this.toolId, context, options, componentOverrides);
|
|
113
|
-
lineReader.visible = true;
|
|
114
|
-
if (options.config?.toolkitCoordinator) {
|
|
115
|
-
lineReader.toolkitCoordinator = options.config.toolkitCoordinator;
|
|
116
|
-
}
|
|
117
|
-
if (options.onClose) {
|
|
118
|
-
lineReader.addEventListener("close", options.onClose);
|
|
119
|
-
}
|
|
120
|
-
return lineReader;
|
|
121
79
|
},
|
|
122
80
|
};
|
|
123
81
|
/**
|
|
@@ -149,29 +107,41 @@ export const colorSchemeToolRegistration = {
|
|
|
149
107
|
isVisibleInContext(context) {
|
|
150
108
|
return true; // Always show if allowed by orchestrator
|
|
151
109
|
},
|
|
152
|
-
|
|
153
|
-
|
|
110
|
+
renderToolbar(context, toolbarContext) {
|
|
111
|
+
const fullToolId = createScopedToolId(this.toolId, "item", toolbarContext.itemId);
|
|
112
|
+
const button = {
|
|
154
113
|
toolId: this.toolId,
|
|
155
114
|
label: this.name,
|
|
156
115
|
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
157
|
-
disabled:
|
|
158
|
-
ariaLabel:
|
|
159
|
-
tooltip:
|
|
160
|
-
onClick:
|
|
161
|
-
|
|
116
|
+
disabled: false,
|
|
117
|
+
ariaLabel: "Color scheme - Change colors and contrast",
|
|
118
|
+
tooltip: "Color Scheme",
|
|
119
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
120
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
121
|
+
};
|
|
122
|
+
const componentOverrides = toolbarContext.componentOverrides ?? {};
|
|
123
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
124
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
125
|
+
return {
|
|
126
|
+
toolId: this.toolId,
|
|
127
|
+
button,
|
|
128
|
+
overlayElement: overlay,
|
|
129
|
+
sync: () => {
|
|
130
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
131
|
+
button.active = active;
|
|
132
|
+
overlay.visible = active;
|
|
133
|
+
if (toolbarContext.toolkitCoordinator) {
|
|
134
|
+
overlay.toolkitCoordinator = toolbarContext.toolkitCoordinator;
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
subscribeActive: (callback) => {
|
|
138
|
+
if (!toolbarContext.subscribeVisibility)
|
|
139
|
+
return () => { };
|
|
140
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
141
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
142
|
+
});
|
|
143
|
+
},
|
|
162
144
|
};
|
|
163
|
-
},
|
|
164
|
-
createToolInstance(context, options) {
|
|
165
|
-
const componentOverrides = options.config ?? {};
|
|
166
|
-
const colorScheme = createToolElement(this.toolId, context, options, componentOverrides);
|
|
167
|
-
colorScheme.visible = true;
|
|
168
|
-
if (options.config?.toolkitCoordinator) {
|
|
169
|
-
colorScheme.toolkitCoordinator = options.config.toolkitCoordinator;
|
|
170
|
-
}
|
|
171
|
-
if (options.onClose) {
|
|
172
|
-
colorScheme.addEventListener("close", options.onClose);
|
|
173
|
-
}
|
|
174
|
-
return colorScheme;
|
|
175
145
|
},
|
|
176
146
|
};
|
|
177
147
|
/**
|
|
@@ -202,29 +172,41 @@ export const annotationToolbarRegistration = {
|
|
|
202
172
|
isVisibleInContext(context) {
|
|
203
173
|
return hasReadableText(context);
|
|
204
174
|
},
|
|
205
|
-
|
|
206
|
-
|
|
175
|
+
renderToolbar(context, toolbarContext) {
|
|
176
|
+
const fullToolId = createScopedToolId(this.toolId, "item", toolbarContext.itemId);
|
|
177
|
+
const button = {
|
|
207
178
|
toolId: this.toolId,
|
|
208
179
|
label: this.name,
|
|
209
180
|
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
210
|
-
disabled:
|
|
211
|
-
ariaLabel:
|
|
212
|
-
tooltip:
|
|
213
|
-
onClick:
|
|
214
|
-
|
|
181
|
+
disabled: false,
|
|
182
|
+
ariaLabel: "Annotation toolbar - Highlight text",
|
|
183
|
+
tooltip: "Highlight",
|
|
184
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
185
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
186
|
+
};
|
|
187
|
+
const componentOverrides = toolbarContext.componentOverrides ?? {};
|
|
188
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
189
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
190
|
+
return {
|
|
191
|
+
toolId: this.toolId,
|
|
192
|
+
button,
|
|
193
|
+
overlayElement: overlay,
|
|
194
|
+
sync: () => {
|
|
195
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
196
|
+
button.active = active;
|
|
197
|
+
overlay.visible = active;
|
|
198
|
+
if (toolbarContext.toolkitCoordinator) {
|
|
199
|
+
overlay.toolkitCoordinator = toolbarContext.toolkitCoordinator;
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
subscribeActive: (callback) => {
|
|
203
|
+
if (!toolbarContext.subscribeVisibility)
|
|
204
|
+
return () => { };
|
|
205
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
206
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
207
|
+
});
|
|
208
|
+
},
|
|
215
209
|
};
|
|
216
|
-
},
|
|
217
|
-
createToolInstance(context, options) {
|
|
218
|
-
const componentOverrides = options.config ?? {};
|
|
219
|
-
const toolbar = createToolElement(this.toolId, context, options, componentOverrides);
|
|
220
|
-
toolbar.visible = true;
|
|
221
|
-
if (options.config?.toolkitCoordinator) {
|
|
222
|
-
toolbar.toolkitCoordinator = options.config.toolkitCoordinator;
|
|
223
|
-
}
|
|
224
|
-
if (options.onClose) {
|
|
225
|
-
toolbar.addEventListener("close", options.onClose);
|
|
226
|
-
}
|
|
227
|
-
return toolbar;
|
|
228
210
|
},
|
|
229
211
|
};
|
|
230
212
|
//# sourceMappingURL=accessibility-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility-tools.js","sourceRoot":"","sources":["../../../src/tools/registrations/accessibility-tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"accessibility-tools.js","sourceRoot":"","sources":["../../../src/tools/registrations/accessibility-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,8 @@ import type { ToolRegistration } from "../../services/ToolRegistry.js";
|
|
|
14
14
|
*
|
|
15
15
|
* Supports:
|
|
16
16
|
* - Basic, scientific, and graphing calculators via Desmos
|
|
17
|
-
* - Context-aware visibility (shows when math content is detected)
|
|
18
|
-
* -
|
|
17
|
+
* - Context-aware visibility (shows only when math content is detected)
|
|
18
|
+
* - Item level only
|
|
19
19
|
*/
|
|
20
20
|
export declare const calculatorToolRegistration: ToolRegistration;
|
|
21
21
|
//# sourceMappingURL=calculator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACX,gBAAgB,
|
|
1
|
+
{"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAGhB,MAAM,gCAAgC,CAAC;AAMxC;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,EAAE,gBA6ExC,CAAC"}
|
|
@@ -9,22 +9,23 @@
|
|
|
9
9
|
* - graphingCalculator (assessment tool)
|
|
10
10
|
*/
|
|
11
11
|
import { hasMathContent } from "../../services/tool-context.js";
|
|
12
|
-
import {
|
|
12
|
+
import { createScopedToolId } from "../../services/tool-instance-id.js";
|
|
13
|
+
import { createToolElement } from "../tool-tag-map.js";
|
|
13
14
|
/**
|
|
14
15
|
* Calculator tool registration
|
|
15
16
|
*
|
|
16
17
|
* Supports:
|
|
17
18
|
* - Basic, scientific, and graphing calculators via Desmos
|
|
18
|
-
* - Context-aware visibility (shows when math content is detected)
|
|
19
|
-
* -
|
|
19
|
+
* - Context-aware visibility (shows only when math content is detected)
|
|
20
|
+
* - Item level only
|
|
20
21
|
*/
|
|
21
22
|
export const calculatorToolRegistration = {
|
|
22
23
|
toolId: "calculator",
|
|
23
24
|
name: "Calculator",
|
|
24
25
|
description: "Multi-type calculator (basic, scientific, graphing)",
|
|
25
26
|
icon: "calculator",
|
|
26
|
-
// Calculator
|
|
27
|
-
supportedLevels: ["
|
|
27
|
+
// Calculator is item-level in this player architecture.
|
|
28
|
+
supportedLevels: ["item"],
|
|
28
29
|
// PNP support IDs that enable this tool
|
|
29
30
|
// Maps to QTI 3.0 standard features: calculator, graphingCalculator
|
|
30
31
|
pnpSupportIds: [
|
|
@@ -36,63 +37,41 @@ export const calculatorToolRegistration = {
|
|
|
36
37
|
/**
|
|
37
38
|
* Pass 2: Determine if calculator is relevant in this context
|
|
38
39
|
*
|
|
39
|
-
* Calculator is relevant when
|
|
40
|
-
*
|
|
41
|
-
* - Section/item level (always show - student might need for any problem)
|
|
40
|
+
* Calculator is relevant when context contains mathematical content
|
|
41
|
+
* (MathML, LaTeX, arithmetic markers).
|
|
42
42
|
*/
|
|
43
43
|
isVisibleInContext(context) {
|
|
44
|
-
//
|
|
45
|
-
if (context.level === "section" || context.level === "item") {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
// At passage/rubric/element level, show if math content detected
|
|
44
|
+
// Show only when math is present in item content.
|
|
49
45
|
return hasMathContent(context);
|
|
50
46
|
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
renderToolbar(context, toolbarContext) {
|
|
48
|
+
const fullToolId = createScopedToolId(this.toolId, "item", toolbarContext.itemId);
|
|
49
|
+
const componentOverrides = toolbarContext.componentOverrides;
|
|
50
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
51
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
52
|
+
const inline = document.createElement("pie-tool-calculator-inline");
|
|
53
|
+
inline.setAttribute("tool-id", createScopedToolId(this.toolId, "item", toolbarContext.itemId, "inline"));
|
|
54
|
+
inline.setAttribute("target-tool-id", fullToolId);
|
|
55
|
+
inline.setAttribute("calculator-type", "scientific");
|
|
56
|
+
inline.setAttribute("available-types", "basic,scientific,graphing");
|
|
57
|
+
inline.setAttribute("size", toolbarContext.ui?.size || "md");
|
|
56
58
|
return {
|
|
57
59
|
toolId: this.toolId,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
inlineElement: inline,
|
|
61
|
+
overlayElement: overlay,
|
|
62
|
+
button: null,
|
|
63
|
+
sync: () => {
|
|
64
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
65
|
+
overlay.visible = active;
|
|
66
|
+
},
|
|
67
|
+
subscribeActive: (callback) => {
|
|
68
|
+
if (!toolbarContext.subscribeVisibility)
|
|
69
|
+
return () => { };
|
|
70
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
71
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
72
|
+
});
|
|
73
|
+
},
|
|
66
74
|
};
|
|
67
75
|
},
|
|
68
|
-
/**
|
|
69
|
-
* Create calculator tool instance
|
|
70
|
-
*
|
|
71
|
-
* Creates a <pie-tool-calculator> web component and initializes it.
|
|
72
|
-
*/
|
|
73
|
-
createToolInstance(context, options) {
|
|
74
|
-
const componentOverrides = options.config ?? {};
|
|
75
|
-
const calculator = createToolElement(this.toolId, context, options, componentOverrides);
|
|
76
|
-
// Set default calculator type (can be overridden via config)
|
|
77
|
-
const calculatorType = options.config?.calculatorType || "scientific";
|
|
78
|
-
const availableTypes = options.config?.availableTypes || [
|
|
79
|
-
"basic",
|
|
80
|
-
"scientific",
|
|
81
|
-
"graphing",
|
|
82
|
-
];
|
|
83
|
-
// Configure calculator
|
|
84
|
-
calculator.visible = true;
|
|
85
|
-
calculator.calculatorType = calculatorType;
|
|
86
|
-
calculator.availableTypes = availableTypes;
|
|
87
|
-
// Pass toolkit coordinator if available from context
|
|
88
|
-
if (options.config?.toolkitCoordinator) {
|
|
89
|
-
calculator.toolkitCoordinator = options.config.toolkitCoordinator;
|
|
90
|
-
}
|
|
91
|
-
// Handle close callback
|
|
92
|
-
if (options.onClose) {
|
|
93
|
-
calculator.addEventListener("close", options.onClose);
|
|
94
|
-
}
|
|
95
|
-
return calculator;
|
|
96
|
-
},
|
|
97
76
|
};
|
|
98
77
|
//# sourceMappingURL=calculator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC3D,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,qDAAqD;IAClE,IAAI,EAAE,YAAY;IAElB,wDAAwD;IACxD,eAAe,EAAE,CAAC,MAAM,CAAC;IAEzB,wCAAwC;IACxC,oEAAoE;IACpE,aAAa,EAAE;QACd,YAAY,EAAE,0CAA0C;QACxD,oBAAoB,EAAE,mDAAmD;QACzE,iBAAiB,EAAE,iBAAiB;QACpC,sBAAsB,EAAE,iBAAiB;KACzC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,OAAoB;QACtC,kDAAkD;QAClD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,aAAa,CACZ,OAAoB,EACpB,cAA8B;QAE9B,MAAM,UAAU,GAAG,kBAAkB,CACpC,IAAI,CAAC,MAAM,EACX,MAAM,EACN,cAAc,CAAC,MAAM,CACrB,CAAC;QACF,MAAM,kBAAkB,GAAG,cAAc,CAAC,kBAAkB,CAAC;QAC7D,MAAM,OAAO,GAAG,iBAAiB,CAChC,IAAI,CAAC,MAAM,EACX,OAAO,EACP,cAAc,EACd,kBAAkB,CAIlB,CAAC;QACF,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;QACpE,MAAM,CAAC,YAAY,CAClB,SAAS,EACT,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CACxE,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;QACpE,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;QAE7D,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,MAAM;YACrB,cAAc,EAAE,OAAO;YACvB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACxD,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;YAC1B,CAAC;YACD,eAAe,EAAE,CAAC,QAAmC,EAAE,EAAE;gBACxD,IAAI,CAAC,cAAc,CAAC,mBAAmB;oBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;gBACzD,OAAO,cAAc,CAAC,mBAAmB,CAAC,GAAG,EAAE;oBAC9C,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/registrations/interaction-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAIhB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"interaction-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/registrations/interaction-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAIhB,MAAM,gCAAgC,CAAC;AAYxC;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,gBA4F9C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,gBA0EzC,CAAC"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - highlighting (cognitive/reading support)
|
|
12
12
|
*/
|
|
13
13
|
import { hasChoiceInteraction, hasReadableText, } from "../../services/tool-context.js";
|
|
14
|
+
import { createScopedToolId } from "../../services/tool-instance-id.js";
|
|
14
15
|
import { createToolElement, } from "../tool-tag-map.js";
|
|
15
16
|
/**
|
|
16
17
|
* Answer Eliminator tool registration
|
|
@@ -23,8 +24,8 @@ export const answerEliminatorToolRegistration = {
|
|
|
23
24
|
name: "Answer Eliminator",
|
|
24
25
|
description: "Strike through answer choices",
|
|
25
26
|
icon: "strikethrough",
|
|
26
|
-
// Answer eliminator appears at item
|
|
27
|
-
supportedLevels: ["item"
|
|
27
|
+
// Answer eliminator appears at item level only
|
|
28
|
+
supportedLevels: ["item"],
|
|
28
29
|
// PNP support IDs
|
|
29
30
|
// Maps to QTI 3.0 standard feature: answerMasking
|
|
30
31
|
pnpSupportIds: [
|
|
@@ -39,37 +40,51 @@ export const answerEliminatorToolRegistration = {
|
|
|
39
40
|
isVisibleInContext(context) {
|
|
40
41
|
return hasChoiceInteraction(context);
|
|
41
42
|
},
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
renderToolbar(context, toolbarContext) {
|
|
44
|
+
const fullToolId = createScopedToolId(this.toolId, "item", toolbarContext.itemId);
|
|
45
|
+
const componentOverrides = toolbarContext.componentOverrides ?? {};
|
|
46
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
47
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
48
|
+
overlay.setAttribute("strategy", "strikethrough");
|
|
49
|
+
overlay.setAttribute("button-alignment", "inline");
|
|
50
|
+
const button = {
|
|
44
51
|
toolId: this.toolId,
|
|
45
52
|
label: this.name,
|
|
46
|
-
icon:
|
|
47
|
-
disabled:
|
|
48
|
-
ariaLabel:
|
|
49
|
-
tooltip:
|
|
50
|
-
onClick:
|
|
51
|
-
|
|
53
|
+
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20" fill="currentColor" aria-hidden="true"><path d="M19,3H16.3H7.7H5A2,2 0 0,0 3,5V7.7V16.4V19A2,2 0 0,0 5,21H7.7H16.4H19A2,2 0 0,0 21,19V16.3V7.7V5A2,2 0 0,0 19,3M15.6,17L12,13.4L8.4,17L7,15.6L10.6,12L7,8.4L8.4,7L12,10.6L15.6,7L17,8.4L13.4,12L17,15.6L15.6,17Z"/></svg>',
|
|
54
|
+
disabled: false,
|
|
55
|
+
ariaLabel: "Answer eliminator - Strike through choices",
|
|
56
|
+
tooltip: "Strike Through",
|
|
57
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
58
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
toolId: this.toolId,
|
|
62
|
+
button,
|
|
63
|
+
overlayElement: overlay,
|
|
64
|
+
sync: () => {
|
|
65
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
66
|
+
button.active = active;
|
|
67
|
+
overlay.visible = active;
|
|
68
|
+
if (toolbarContext.toolCoordinator) {
|
|
69
|
+
overlay.coordinator = toolbarContext.toolCoordinator;
|
|
70
|
+
}
|
|
71
|
+
overlay.scopeElement = toolbarContext.getScopeElement?.() || null;
|
|
72
|
+
if (toolbarContext.elementToolStateStore) {
|
|
73
|
+
overlay.elementToolStateStore = toolbarContext.elementToolStateStore;
|
|
74
|
+
}
|
|
75
|
+
const globalElementId = toolbarContext.getGlobalElementId?.();
|
|
76
|
+
if (globalElementId) {
|
|
77
|
+
overlay.globalElementId = globalElementId;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
subscribeActive: (callback) => {
|
|
81
|
+
if (!toolbarContext.subscribeVisibility)
|
|
82
|
+
return () => { };
|
|
83
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
84
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
85
|
+
});
|
|
86
|
+
},
|
|
52
87
|
};
|
|
53
|
-
},
|
|
54
|
-
createToolInstance(context, options) {
|
|
55
|
-
const componentOverrides = options.config ?? {};
|
|
56
|
-
const answerEliminator = createToolElement(this.toolId, context, options, componentOverrides);
|
|
57
|
-
answerEliminator.visible = true;
|
|
58
|
-
answerEliminator.toolId = this.toolId;
|
|
59
|
-
if (options.config?.toolkitCoordinator) {
|
|
60
|
-
answerEliminator.coordinator = options.config.toolkitCoordinator;
|
|
61
|
-
}
|
|
62
|
-
if (options.config?.elementToolStateStore) {
|
|
63
|
-
answerEliminator.elementToolStateStore =
|
|
64
|
-
options.config.elementToolStateStore;
|
|
65
|
-
}
|
|
66
|
-
if (typeof options.config?.globalElementId === "string") {
|
|
67
|
-
answerEliminator.globalElementId = options.config.globalElementId;
|
|
68
|
-
}
|
|
69
|
-
if (options.onClose) {
|
|
70
|
-
answerEliminator.addEventListener("close", options.onClose);
|
|
71
|
-
}
|
|
72
|
-
return answerEliminator;
|
|
73
88
|
},
|
|
74
89
|
};
|
|
75
90
|
/**
|
|
@@ -93,32 +108,42 @@ export const highlighterToolRegistration = {
|
|
|
93
108
|
isVisibleInContext(context) {
|
|
94
109
|
return hasReadableText(context);
|
|
95
110
|
},
|
|
96
|
-
|
|
97
|
-
|
|
111
|
+
renderToolbar(context, toolbarContext) {
|
|
112
|
+
const fullToolId = createScopedToolId(this.toolId, "item", toolbarContext.itemId);
|
|
113
|
+
const button = {
|
|
98
114
|
toolId: this.toolId,
|
|
99
115
|
label: this.name,
|
|
100
116
|
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
101
|
-
disabled:
|
|
102
|
-
ariaLabel:
|
|
103
|
-
tooltip:
|
|
104
|
-
onClick:
|
|
105
|
-
|
|
117
|
+
disabled: false,
|
|
118
|
+
ariaLabel: "Highlighter - Highlight text",
|
|
119
|
+
tooltip: "Highlight",
|
|
120
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
121
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
122
|
+
};
|
|
123
|
+
const componentOverrides = toolbarContext.componentOverrides ?? {};
|
|
124
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
125
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
126
|
+
return {
|
|
127
|
+
toolId: this.toolId,
|
|
128
|
+
button,
|
|
129
|
+
overlayElement: overlay,
|
|
130
|
+
sync: () => {
|
|
131
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
132
|
+
button.active = active;
|
|
133
|
+
overlay.enabled = active;
|
|
134
|
+
overlay.visible = active;
|
|
135
|
+
if (toolbarContext.ttsService) {
|
|
136
|
+
overlay.ttsService = toolbarContext.ttsService;
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
subscribeActive: (callback) => {
|
|
140
|
+
if (!toolbarContext.subscribeVisibility)
|
|
141
|
+
return () => { };
|
|
142
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
143
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
144
|
+
});
|
|
145
|
+
},
|
|
106
146
|
};
|
|
107
|
-
},
|
|
108
|
-
createToolInstance(context, options) {
|
|
109
|
-
const componentOverrides = options.config ?? {};
|
|
110
|
-
const highlighter = createToolElement(this.toolId, context, options, componentOverrides);
|
|
111
|
-
highlighter.enabled = true;
|
|
112
|
-
if (options.config?.highlightCoordinator) {
|
|
113
|
-
highlighter.highlightCoordinator = options.config.highlightCoordinator;
|
|
114
|
-
}
|
|
115
|
-
if (options.config?.ttsService) {
|
|
116
|
-
highlighter.ttsService = options.config.ttsService;
|
|
117
|
-
}
|
|
118
|
-
if (options.onClose) {
|
|
119
|
-
highlighter.addEventListener("close", options.onClose);
|
|
120
|
-
}
|
|
121
|
-
return highlighter;
|
|
122
147
|
},
|
|
123
148
|
};
|
|
124
149
|
//# sourceMappingURL=interaction-tools.js.map
|