@pie-players/pie-assessment-toolkit 0.2.7 → 0.2.10
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 +953 -0
- package/dist/components/PieAssessmentToolkit.custom-element.js +757 -0
- package/dist/components/SectionToolBar.custom-element.js +162 -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/components/section-toolbar-element.d.ts +3 -0
- package/dist/components/section-toolbar-element.d.ts.map +1 -0
- package/dist/components/section-toolbar-element.js +2 -0
- package/dist/components/section-toolbar-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 +19 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -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/HighlightCoordinator.d.ts +9 -0
- package/dist/services/HighlightCoordinator.d.ts.map +1 -1
- package/dist/services/HighlightCoordinator.js +196 -55
- package/dist/services/HighlightCoordinator.js.map +1 -1
- package/dist/services/TTSService.d.ts +21 -1
- package/dist/services/TTSService.d.ts.map +1 -1
- package/dist/services/TTSService.js +356 -117
- 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 +76 -67
- package/dist/services/ToolRegistry.d.ts.map +1 -1
- package/dist/services/ToolRegistry.js +73 -22
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +126 -8
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
- package/dist/services/ToolkitCoordinator.js +607 -72
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/createDefaultToolRegistry.d.ts +11 -12
- package/dist/services/createDefaultToolRegistry.d.ts.map +1 -1
- package/dist/services/createDefaultToolRegistry.js +9 -56
- 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 +62 -2
- 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 +37 -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-config-defaults.d.ts +14 -0
- package/dist/services/tool-config-defaults.d.ts.map +1 -0
- package/dist/services/tool-config-defaults.js +23 -0
- package/dist/services/tool-config-defaults.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 +156 -20
- package/dist/services/tool-context.js.map +1 -1
- package/dist/services/tool-instance-id.d.ts +15 -0
- package/dist/services/tool-instance-id.d.ts.map +1 -0
- package/dist/services/tool-instance-id.js +55 -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/toolbar-items.d.ts +26 -0
- package/dist/services/toolbar-items.d.ts.map +1 -0
- package/dist/services/toolbar-items.js +10 -0
- package/dist/services/toolbar-items.js.map +1 -0
- 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 +62 -0
- package/dist/services/tools-config-normalizer.js.map +1 -0
- package/dist/services/tts/browser-provider.d.ts.map +1 -1
- package/dist/services/tts/browser-provider.js +201 -34
- package/dist/services/tts/browser-provider.js.map +1 -1
- package/dist/services/tts/text-processing.d.ts +17 -0
- package/dist/services/tts/text-processing.d.ts.map +1 -0
- package/dist/services/tts/text-processing.js +144 -0
- package/dist/services/tts/text-processing.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 +11 -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 +8 -11
- package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
- package/dist/tools/registrations/accessibility-tools.js +108 -120
- 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 +42 -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 +171 -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 +4 -4
- 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 +28 -27
- package/src/README.md +16 -32
- package/src/components/ItemToolBar.svelte +701 -0
- package/src/components/PieAssessmentToolkit.svelte +610 -0
- package/src/components/SectionToolBar.svelte +58 -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/dist/services/tts/provider-interface.d.ts +0 -131
- package/dist/services/tts/provider-interface.d.ts.map +0 -1
- package/dist/services/tts/provider-interface.js +0 -10
- package/dist/services/tts/provider-interface.js.map +0 -1
- package/src/components/PNPProfileTester.example.svelte +0 -188
- package/src/components/PNPProfileTester.svelte +0 -397
- package/src/components/PNPProvenanceViewer.svelte +0 -260
- 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,41 +41,53 @@ 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, toolbarContext.scope.level, toolbarContext.scope.scopeId);
|
|
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
|
+
elements: [{ element: overlay, mount: "after-buttons" }],
|
|
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
|
/**
|
|
124
|
-
*
|
|
82
|
+
* Theme tool registration
|
|
125
83
|
*
|
|
126
|
-
* Provides
|
|
84
|
+
* Provides accessible theme and contrast controls.
|
|
127
85
|
* Global tool that affects entire assessment.
|
|
128
86
|
*/
|
|
129
|
-
export const
|
|
130
|
-
toolId: "
|
|
131
|
-
name: "
|
|
132
|
-
description: "Accessible
|
|
87
|
+
export const themeToolRegistration = {
|
|
88
|
+
toolId: "theme",
|
|
89
|
+
name: "Theme",
|
|
90
|
+
description: "Accessible themes and contrast",
|
|
133
91
|
icon: "swatch",
|
|
134
92
|
// Color scheme is assessment-wide
|
|
135
93
|
supportedLevels: ["assessment", "section"],
|
|
@@ -139,7 +97,8 @@ export const colorSchemeToolRegistration = {
|
|
|
139
97
|
"highContrastDisplay", // QTI 3.0 standard (visual.highContrastDisplay)
|
|
140
98
|
"colorContrast", // QTI 3.0 standard (visual.colorContrast)
|
|
141
99
|
"invertColors", // QTI 3.0 standard (visual.invertColors)
|
|
142
|
-
"colorScheme", //
|
|
100
|
+
"colorScheme", // Legacy alias
|
|
101
|
+
"theme", // Canonical id
|
|
143
102
|
"highContrast", // Common variant
|
|
144
103
|
"customColors", // Common variant
|
|
145
104
|
],
|
|
@@ -149,31 +108,48 @@ export const colorSchemeToolRegistration = {
|
|
|
149
108
|
isVisibleInContext(context) {
|
|
150
109
|
return true; // Always show if allowed by orchestrator
|
|
151
110
|
},
|
|
152
|
-
|
|
153
|
-
|
|
111
|
+
renderToolbar(context, toolbarContext) {
|
|
112
|
+
const fullToolId = createScopedToolId(this.toolId, toolbarContext.scope.level, toolbarContext.scope.scopeId);
|
|
113
|
+
const button = {
|
|
154
114
|
toolId: this.toolId,
|
|
155
115
|
label: this.name,
|
|
156
116
|
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
157
|
-
disabled:
|
|
158
|
-
ariaLabel:
|
|
159
|
-
tooltip:
|
|
160
|
-
onClick:
|
|
161
|
-
|
|
117
|
+
disabled: false,
|
|
118
|
+
ariaLabel: "Theme - Change colors and contrast",
|
|
119
|
+
tooltip: "Theme",
|
|
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
|
+
elements: [{ element: overlay, mount: "after-buttons" }],
|
|
130
|
+
sync: () => {
|
|
131
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
132
|
+
button.active = active;
|
|
133
|
+
overlay.visible = active;
|
|
134
|
+
if (toolbarContext.toolkitCoordinator) {
|
|
135
|
+
overlay.toolkitCoordinator = toolbarContext.toolkitCoordinator;
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
subscribeActive: (callback) => {
|
|
139
|
+
if (!toolbarContext.subscribeVisibility)
|
|
140
|
+
return () => { };
|
|
141
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
142
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
143
|
+
});
|
|
144
|
+
},
|
|
162
145
|
};
|
|
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
146
|
},
|
|
176
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* Backward-compatible export name used by existing imports.
|
|
150
|
+
* Canonical toolId is `theme`; `colorScheme` remains an alias at config level.
|
|
151
|
+
*/
|
|
152
|
+
export const colorSchemeToolRegistration = themeToolRegistration;
|
|
177
153
|
/**
|
|
178
154
|
* Annotation Toolbar registration
|
|
179
155
|
*
|
|
@@ -202,29 +178,41 @@ export const annotationToolbarRegistration = {
|
|
|
202
178
|
isVisibleInContext(context) {
|
|
203
179
|
return hasReadableText(context);
|
|
204
180
|
},
|
|
205
|
-
|
|
206
|
-
|
|
181
|
+
renderToolbar(context, toolbarContext) {
|
|
182
|
+
const fullToolId = createScopedToolId(this.toolId, toolbarContext.scope.level, toolbarContext.scope.scopeId);
|
|
183
|
+
const button = {
|
|
207
184
|
toolId: this.toolId,
|
|
208
185
|
label: this.name,
|
|
209
186
|
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
210
|
-
disabled:
|
|
211
|
-
ariaLabel:
|
|
212
|
-
tooltip:
|
|
213
|
-
onClick:
|
|
214
|
-
|
|
187
|
+
disabled: false,
|
|
188
|
+
ariaLabel: "Annotation toolbar - Highlight text",
|
|
189
|
+
tooltip: "Highlight",
|
|
190
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
191
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
192
|
+
};
|
|
193
|
+
const componentOverrides = toolbarContext.componentOverrides ?? {};
|
|
194
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
195
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
196
|
+
return {
|
|
197
|
+
toolId: this.toolId,
|
|
198
|
+
button,
|
|
199
|
+
elements: [{ element: overlay, mount: "after-buttons" }],
|
|
200
|
+
sync: () => {
|
|
201
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
202
|
+
button.active = active;
|
|
203
|
+
overlay.visible = active;
|
|
204
|
+
if (toolbarContext.toolkitCoordinator) {
|
|
205
|
+
overlay.toolkitCoordinator = toolbarContext.toolkitCoordinator;
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
subscribeActive: (callback) => {
|
|
209
|
+
if (!toolbarContext.subscribeVisibility)
|
|
210
|
+
return () => { };
|
|
211
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
212
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
213
|
+
});
|
|
214
|
+
},
|
|
215
215
|
};
|
|
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
216
|
},
|
|
229
217
|
};
|
|
230
218
|
//# 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,EAIhB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"calculator.d.ts","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAIhB,MAAM,gCAAgC,CAAC;AAMxC;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,EAAE,gBAiFxC,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,49 @@ 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
|
-
|
|
56
|
-
|
|
47
|
+
renderToolbar(context, toolbarContext) {
|
|
48
|
+
const fullToolId = createScopedToolId(this.toolId, toolbarContext.scope.level, toolbarContext.scope.scopeId);
|
|
49
|
+
const componentOverrides = toolbarContext.componentOverrides;
|
|
50
|
+
const overlay = createToolElement(this.toolId, context, toolbarContext, componentOverrides);
|
|
51
|
+
overlay.setAttribute("tool-id", fullToolId);
|
|
52
|
+
const button = {
|
|
57
53
|
toolId: this.toolId,
|
|
58
54
|
label: this.name,
|
|
59
|
-
icon: icon,
|
|
60
|
-
disabled:
|
|
61
|
-
ariaLabel:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
icon: typeof this.icon === "function" ? this.icon(context) : this.icon,
|
|
56
|
+
disabled: false,
|
|
57
|
+
ariaLabel: "Open scientific calculator",
|
|
58
|
+
tooltip: "Calculator",
|
|
59
|
+
onClick: () => toolbarContext.toggleTool(this.toolId),
|
|
60
|
+
active: toolbarContext.isToolVisible(fullToolId),
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
toolId: this.toolId,
|
|
64
|
+
elements: [{ element: overlay, mount: "after-buttons" }],
|
|
65
|
+
button,
|
|
66
|
+
sync: () => {
|
|
67
|
+
const active = toolbarContext.isToolVisible(fullToolId);
|
|
68
|
+
button.active = active;
|
|
69
|
+
button.ariaLabel = active
|
|
70
|
+
? "Close scientific calculator"
|
|
71
|
+
: "Open scientific calculator";
|
|
72
|
+
button.tooltip = active ? "Close calculator" : "Calculator";
|
|
73
|
+
overlay.visible = active;
|
|
74
|
+
},
|
|
75
|
+
subscribeActive: (callback) => {
|
|
76
|
+
if (!toolbarContext.subscribeVisibility)
|
|
77
|
+
return () => { };
|
|
78
|
+
return toolbarContext.subscribeVisibility(() => {
|
|
79
|
+
callback(toolbarContext.isToolVisible(fullToolId));
|
|
80
|
+
});
|
|
81
|
+
},
|
|
66
82
|
};
|
|
67
|
-
},
|
|
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
83
|
},
|
|
97
84
|
};
|
|
98
85
|
//# sourceMappingURL=calculator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"calculator.js","sourceRoot":"","sources":["../../../src/tools/registrations/calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,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,cAAc,CAAC,KAAK,CAAC,KAAK,EAC1B,cAAc,CAAC,KAAK,CAAC,OAAO,CAC5B,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;QAC5C,MAAM,MAAM,GAAgC;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;YACtE,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,4BAA4B;YACvC,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YACrD,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC;SAChD,CAAC;QAEF,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YACxD,MAAM;YACN,IAAI,EAAE,GAAG,EAAE;gBACV,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACxD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC,SAAS,GAAG,MAAM;oBACxB,CAAC,CAAC,6BAA6B;oBAC/B,CAAC,CAAC,4BAA4B,CAAC;gBAChC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC;gBAC5D,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"}
|