@pie-players/pie-assessment-toolkit 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +159 -1
  2. package/dist/index.d.ts +16 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +9 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/player/AssessmentPlayer.d.ts +9 -0
  7. package/dist/player/AssessmentPlayer.d.ts.map +1 -1
  8. package/dist/player/AssessmentPlayer.js +13 -4
  9. package/dist/player/AssessmentPlayer.js.map +1 -1
  10. package/dist/services/AnnotationToolbarConfig.d.ts +134 -0
  11. package/dist/services/AnnotationToolbarConfig.d.ts.map +1 -0
  12. package/dist/services/AnnotationToolbarConfig.js +100 -0
  13. package/dist/services/AnnotationToolbarConfig.js.map +1 -0
  14. package/dist/services/HighlightCoordinator.d.ts +23 -10
  15. package/dist/services/HighlightCoordinator.d.ts.map +1 -1
  16. package/dist/services/HighlightCoordinator.js +87 -40
  17. package/dist/services/HighlightCoordinator.js.map +1 -1
  18. package/dist/services/PNPToolResolver.d.ts +171 -15
  19. package/dist/services/PNPToolResolver.d.ts.map +1 -1
  20. package/dist/services/PNPToolResolver.js +324 -32
  21. package/dist/services/PNPToolResolver.js.map +1 -1
  22. package/dist/services/RangeSerializer.d.ts +119 -0
  23. package/dist/services/RangeSerializer.d.ts.map +1 -0
  24. package/dist/services/RangeSerializer.js +199 -0
  25. package/dist/services/RangeSerializer.js.map +1 -0
  26. package/dist/services/TTSService.d.ts +4 -1
  27. package/dist/services/TTSService.d.ts.map +1 -1
  28. package/dist/services/TTSService.js +58 -3
  29. package/dist/services/TTSService.js.map +1 -1
  30. package/dist/services/ToolRegistry.d.ts +225 -0
  31. package/dist/services/ToolRegistry.d.ts.map +1 -0
  32. package/dist/services/ToolRegistry.js +248 -0
  33. package/dist/services/ToolRegistry.js.map +1 -0
  34. package/dist/services/ToolkitCoordinator.d.ts +22 -0
  35. package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
  36. package/dist/services/ToolkitCoordinator.js +44 -0
  37. package/dist/services/ToolkitCoordinator.js.map +1 -1
  38. package/dist/services/createDefaultToolRegistry.d.ts +72 -0
  39. package/dist/services/createDefaultToolRegistry.d.ts.map +1 -0
  40. package/dist/services/createDefaultToolRegistry.js +147 -0
  41. package/dist/services/createDefaultToolRegistry.js.map +1 -0
  42. package/dist/services/interfaces.d.ts +8 -0
  43. package/dist/services/interfaces.d.ts.map +1 -1
  44. package/dist/services/interfaces.js.map +1 -1
  45. package/dist/services/pnp-provenance.d.ts +167 -0
  46. package/dist/services/pnp-provenance.d.ts.map +1 -0
  47. package/dist/services/pnp-provenance.js +230 -0
  48. package/dist/services/pnp-provenance.js.map +1 -0
  49. package/dist/services/pnp-standard-features.d.ts +240 -0
  50. package/dist/services/pnp-standard-features.d.ts.map +1 -0
  51. package/dist/services/pnp-standard-features.js +342 -0
  52. package/dist/services/pnp-standard-features.js.map +1 -0
  53. package/dist/services/tool-context.d.ts +150 -0
  54. package/dist/services/tool-context.d.ts.map +1 -0
  55. package/dist/services/tool-context.js +157 -0
  56. package/dist/services/tool-context.js.map +1 -0
  57. package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +1 -1
  58. package/dist/services/tool-providers/ToolProviderRegistry.js +7 -7
  59. package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -1
  60. package/dist/tools/registrations/accessibility-tools.d.ts +43 -0
  61. package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -0
  62. package/dist/tools/registrations/accessibility-tools.js +230 -0
  63. package/dist/tools/registrations/accessibility-tools.js.map +1 -0
  64. package/dist/tools/registrations/calculator.d.ts +21 -0
  65. package/dist/tools/registrations/calculator.d.ts.map +1 -0
  66. package/dist/tools/registrations/calculator.js +98 -0
  67. package/dist/tools/registrations/calculator.js.map +1 -0
  68. package/dist/tools/registrations/interaction-tools.d.ts +28 -0
  69. package/dist/tools/registrations/interaction-tools.d.ts.map +1 -0
  70. package/dist/tools/registrations/interaction-tools.js +124 -0
  71. package/dist/tools/registrations/interaction-tools.js.map +1 -0
  72. package/dist/tools/registrations/measurement-tools.d.ts +25 -0
  73. package/dist/tools/registrations/measurement-tools.d.ts.map +1 -0
  74. package/dist/tools/registrations/measurement-tools.js +112 -0
  75. package/dist/tools/registrations/measurement-tools.js.map +1 -0
  76. package/dist/tools/registrations/subject-specific-tools.d.ts +28 -0
  77. package/dist/tools/registrations/subject-specific-tools.d.ts.map +1 -0
  78. package/dist/tools/registrations/subject-specific-tools.js +118 -0
  79. package/dist/tools/registrations/subject-specific-tools.js.map +1 -0
  80. package/dist/tools/registrations/tts.d.ts +20 -0
  81. package/dist/tools/registrations/tts.d.ts.map +1 -0
  82. package/dist/tools/registrations/tts.js +86 -0
  83. package/dist/tools/registrations/tts.js.map +1 -0
  84. package/dist/tools/tool-tag-map.d.ts +24 -0
  85. package/dist/tools/tool-tag-map.d.ts.map +1 -0
  86. package/dist/tools/tool-tag-map.js +38 -0
  87. package/dist/tools/tool-tag-map.js.map +1 -0
  88. package/package.json +15 -7
  89. package/src/README.md +25 -11
  90. package/src/components/PNPProfileTester.example.svelte +188 -0
  91. package/src/components/PNPProfileTester.svelte +397 -0
  92. package/src/components/PNPProvenanceViewer.svelte +260 -0
  93. package/src/components/QuestionToolBar.svelte +160 -83
  94. package/src/components/ToolButton.svelte +146 -0
  95. package/src/components/ToolButtonGroup.svelte +109 -0
  96. package/src/reference-layout/ReferenceLayout.svelte +5 -13
  97. package/dist/services/PNPMapper.d.ts +0 -71
  98. package/dist/services/PNPMapper.d.ts.map +0 -1
  99. package/dist/services/PNPMapper.js +0 -98
  100. package/dist/services/PNPMapper.js.map +0 -1
@@ -0,0 +1,240 @@
1
+ /**
2
+ * QTI 3.0 / IMS Access for All (AfA) 3.0 Standard Access Features
3
+ *
4
+ * This file contains standardized accessibility feature identifiers from:
5
+ * - IMS Global Access for All (AfA) 3.0 specification
6
+ * - QTI 3.0 Personal Needs and Preferences (PNP)
7
+ * - Schema.org accessibility features vocabulary
8
+ * - WCAG 2.x accessibility guidelines
9
+ *
10
+ * These are the officially recognized values for QTI 3.0's accessibilityInfo.accessFeature
11
+ * and can be used as a reference for PNP profile configuration and tool mapping.
12
+ *
13
+ * References:
14
+ * - IMS AfA 3.0: https://www.imsglobal.org/spec/afa/v3p0
15
+ * - QTI 3.0: https://www.imsglobal.org/spec/qti/v3p0
16
+ * - Schema.org: https://schema.org/accessibilityFeature
17
+ */
18
+ /**
19
+ * Standard QTI 3.0 accessibility features organized by category
20
+ */
21
+ export declare const QTI_STANDARD_ACCESS_FEATURES: {
22
+ /**
23
+ * Visual accessibility features
24
+ * For students with low vision, color blindness, or visual processing needs
25
+ */
26
+ readonly visual: {
27
+ readonly magnification: "magnification";
28
+ readonly screenMagnifier: "screenMagnifier";
29
+ readonly zoomable: "zoomable";
30
+ readonly highContrastDisplay: "highContrastDisplay";
31
+ readonly highContrastAudio: "highContrastAudio";
32
+ readonly colorContrast: "colorContrast";
33
+ readonly invertColors: "invertColors";
34
+ readonly displayTransformability: "displayTransformability";
35
+ readonly largePrint: "largePrint";
36
+ readonly fontEnlargement: "fontEnlargement";
37
+ readonly resizeText: "resizeText";
38
+ readonly alternativeText: "alternativeText";
39
+ readonly longDescription: "longDescription";
40
+ readonly describedMath: "describedMath";
41
+ readonly tactileGraphic: "tactileGraphic";
42
+ readonly tactileObject: "tactileObject";
43
+ };
44
+ /**
45
+ * Auditory accessibility features
46
+ * For students who are deaf, hard of hearing, or benefit from audio
47
+ */
48
+ readonly auditory: {
49
+ readonly audioDescription: "audioDescription";
50
+ readonly textToSpeech: "textToSpeech";
51
+ readonly readAloud: "readAloud";
52
+ readonly humanVoice: "humanVoice";
53
+ readonly syntheticVoice: "syntheticVoice";
54
+ readonly speechRate: "speechRate";
55
+ readonly speechVolume: "speechVolume";
56
+ readonly voicePitch: "voicePitch";
57
+ readonly captions: "captions";
58
+ readonly closedCaptions: "closedCaptions";
59
+ readonly openCaptions: "openCaptions";
60
+ readonly transcript: "transcript";
61
+ readonly signLanguage: "signLanguage";
62
+ readonly subtitles: "subtitles";
63
+ readonly audioControl: "audioControl";
64
+ readonly noBackgroundAudio: "noBackgroundAudio";
65
+ };
66
+ /**
67
+ * Motor/physical accessibility features
68
+ * For students with limited mobility or motor control
69
+ */
70
+ readonly motor: {
71
+ readonly keyboardControl: "keyboardControl";
72
+ readonly mouseControl: "mouseControl";
73
+ readonly touchControl: "touchControl";
74
+ readonly voiceControl: "voiceControl";
75
+ readonly switchControl: "switchControl";
76
+ readonly eyeGazeControl: "eyeGazeControl";
77
+ readonly singleSwitchAccess: "singleSwitchAccess";
78
+ readonly stickyKeys: "stickyKeys";
79
+ readonly keyboardShortcuts: "keyboardShortcuts";
80
+ readonly timingControl: "timingControl";
81
+ readonly unlimitedTime: "unlimitedTime";
82
+ readonly extendedTime: "extendedTime";
83
+ readonly pauseControl: "pauseControl";
84
+ };
85
+ /**
86
+ * Cognitive/learning accessibility features
87
+ * For students with learning disabilities, ADHD, autism, etc.
88
+ */
89
+ readonly cognitive: {
90
+ readonly simplifiedLanguage: "simplifiedLanguage";
91
+ readonly reducedComplexity: "reducedComplexity";
92
+ readonly structuralNavigation: "structuralNavigation";
93
+ readonly tableOfContents: "tableOfContents";
94
+ readonly reducedDistraction: "reducedDistraction";
95
+ readonly noFlashing: "noFlashing";
96
+ readonly pauseAnimation: "pauseAnimation";
97
+ readonly annotations: "annotations";
98
+ readonly bookmarking: "bookmarking";
99
+ readonly highlighting: "highlighting";
100
+ readonly guidedNavigation: "guidedNavigation";
101
+ readonly calculator: "calculator";
102
+ readonly dictionary: "dictionary";
103
+ readonly thesaurus: "thesaurus";
104
+ readonly spellingAssistance: "spellingAssistance";
105
+ readonly grammarAssistance: "grammarAssistance";
106
+ };
107
+ /**
108
+ * Reading support features
109
+ * For students with dyslexia or reading challenges
110
+ */
111
+ readonly reading: {
112
+ readonly lineSpacing: "lineSpacing";
113
+ readonly wordSpacing: "wordSpacing";
114
+ readonly letterSpacing: "letterSpacing";
115
+ readonly fontFamily: "fontFamily";
116
+ readonly readingMask: "readingMask";
117
+ readonly readingGuide: "readingGuide";
118
+ readonly readingRuler: "readingRuler";
119
+ readonly wordHighlighting: "wordHighlighting";
120
+ readonly lineHighlighting: "lineHighlighting";
121
+ readonly focusIndicator: "focusIndicator";
122
+ readonly printableResource: "printableResource";
123
+ readonly braille: "braille";
124
+ readonly nemeth: "nemeth";
125
+ readonly refreshableBraille: "refreshableBraille";
126
+ };
127
+ /**
128
+ * Navigation features
129
+ * For efficient content navigation
130
+ */
131
+ readonly navigation: {
132
+ readonly index: "index";
133
+ readonly pageNavigation: "pageNavigation";
134
+ readonly skipContent: "skipContent";
135
+ readonly breadcrumbs: "breadcrumbs";
136
+ readonly searchable: "searchable";
137
+ readonly fullTextSearch: "fullTextSearch";
138
+ };
139
+ /**
140
+ * Linguistic features
141
+ * For language support
142
+ */
143
+ readonly linguistic: {
144
+ readonly multilingualText: "multilingualText";
145
+ readonly translatedText: "translatedText";
146
+ readonly glossary: "glossary";
147
+ readonly signLanguageInterpretation: "signLanguageInterpretation";
148
+ readonly visualLanguage: "visualLanguage";
149
+ };
150
+ /**
151
+ * Assessment-specific features
152
+ * Features specific to test-taking environments
153
+ */
154
+ readonly assessment: {
155
+ readonly protractor: "protractor";
156
+ readonly ruler: "ruler";
157
+ readonly graph: "graph";
158
+ readonly graphingCalculator: "graphingCalculator";
159
+ readonly periodicTable: "periodicTable";
160
+ readonly formulaSheet: "formulaSheet";
161
+ readonly answerMasking: "answerMasking";
162
+ readonly answerEliminator: "answerEliminator";
163
+ readonly strikethrough: "strikethrough";
164
+ readonly itemGlossary: "itemGlossary";
165
+ readonly tutorialAvailable: "tutorialAvailable";
166
+ };
167
+ };
168
+ /**
169
+ * Flat list of all standard access features for validation
170
+ */
171
+ export declare const ALL_STANDARD_ACCESS_FEATURES: ("braille" | "calculator" | "textToSpeech" | "ruler" | "protractor" | "answerEliminator" | "graph" | "periodicTable" | "graphingCalculator" | "readAloud" | "strikethrough" | "answerMasking" | "magnification" | "screenMagnifier" | "zoomable" | "readingMask" | "readingGuide" | "readingRuler" | "highContrastDisplay" | "colorContrast" | "invertColors" | "highlighting" | "annotations" | "highContrastAudio" | "displayTransformability" | "largePrint" | "fontEnlargement" | "resizeText" | "alternativeText" | "longDescription" | "describedMath" | "tactileGraphic" | "tactileObject" | "audioDescription" | "humanVoice" | "syntheticVoice" | "speechRate" | "speechVolume" | "voicePitch" | "captions" | "closedCaptions" | "openCaptions" | "transcript" | "signLanguage" | "subtitles" | "audioControl" | "noBackgroundAudio" | "keyboardControl" | "mouseControl" | "touchControl" | "voiceControl" | "switchControl" | "eyeGazeControl" | "singleSwitchAccess" | "stickyKeys" | "keyboardShortcuts" | "timingControl" | "unlimitedTime" | "extendedTime" | "pauseControl" | "simplifiedLanguage" | "reducedComplexity" | "structuralNavigation" | "tableOfContents" | "reducedDistraction" | "noFlashing" | "pauseAnimation" | "bookmarking" | "guidedNavigation" | "dictionary" | "thesaurus" | "spellingAssistance" | "grammarAssistance" | "lineSpacing" | "wordSpacing" | "letterSpacing" | "fontFamily" | "wordHighlighting" | "lineHighlighting" | "focusIndicator" | "printableResource" | "nemeth" | "refreshableBraille" | "index" | "pageNavigation" | "skipContent" | "breadcrumbs" | "searchable" | "fullTextSearch" | "multilingualText" | "translatedText" | "glossary" | "signLanguageInterpretation" | "visualLanguage" | "formulaSheet" | "itemGlossary" | "tutorialAvailable")[];
172
+ /**
173
+ * Example PNP configurations for common accessibility needs
174
+ * These are NOT official profiles but illustrative examples showing
175
+ * how standard features can be combined for different student needs.
176
+ */
177
+ export declare const EXAMPLE_PNP_CONFIGURATIONS: {
178
+ /**
179
+ * Example: Student with low vision
180
+ */
181
+ readonly lowVision: {
182
+ readonly label: "Example: Low Vision Support";
183
+ readonly features: readonly ["magnification", "screenMagnifier", "highContrastDisplay", "colorContrast", "fontEnlargement", "textToSpeech", "alternativeText", "describedMath"];
184
+ };
185
+ /**
186
+ * Example: Student who is blind
187
+ */
188
+ readonly blind: {
189
+ readonly label: "Example: Blind Student Support";
190
+ readonly features: readonly ["textToSpeech", "screenReader", "alternativeText", "longDescription", "describedMath", "braille", "refreshableBraille", "keyboardControl", "structuralNavigation"];
191
+ };
192
+ /**
193
+ * Example: Student who is deaf or hard of hearing
194
+ */
195
+ readonly deafHardOfHearing: {
196
+ readonly label: "Example: Deaf/Hard of Hearing Support";
197
+ readonly features: readonly ["captions", "closedCaptions", "signLanguage", "transcript", "visualLanguage", "noBackgroundAudio"];
198
+ };
199
+ /**
200
+ * Example: Student with dyslexia
201
+ */
202
+ readonly dyslexia: {
203
+ readonly label: "Example: Dyslexia Support";
204
+ readonly features: readonly ["textToSpeech", "readAloud", "highlighting", "wordHighlighting", "lineHighlighting", "readingMask", "readingGuide", "fontFamily", "lineSpacing", "wordSpacing", "simplifiedLanguage", "dictionary"];
205
+ };
206
+ /**
207
+ * Example: Student with ADHD
208
+ */
209
+ readonly adhd: {
210
+ readonly label: "Example: ADHD Support";
211
+ readonly features: readonly ["reducedDistraction", "noFlashing", "pauseAnimation", "timingControl", "extendedTime", "highlighting", "annotations", "guidedNavigation", "structuralNavigation"];
212
+ };
213
+ /**
214
+ * Example: Student with motor limitations
215
+ */
216
+ readonly motorLimitations: {
217
+ readonly label: "Example: Motor Limitations Support";
218
+ readonly features: readonly ["keyboardControl", "stickyKeys", "keyboardShortcuts", "voiceControl", "switchControl", "timingControl", "extendedTime", "unlimitedTime"];
219
+ };
220
+ /**
221
+ * Example: English language learner
222
+ */
223
+ readonly englishLearner: {
224
+ readonly label: "Example: English Language Learner Support";
225
+ readonly features: readonly ["textToSpeech", "translatedText", "glossary", "dictionary", "simplifiedLanguage", "readAloud", "highlighting"];
226
+ };
227
+ };
228
+ /**
229
+ * Helper to validate if a feature ID is a standard QTI 3.0 feature
230
+ */
231
+ export declare function isStandardAccessFeature(featureId: string): boolean;
232
+ /**
233
+ * Helper to get category for a feature
234
+ */
235
+ export declare function getFeatureCategory(featureId: string): keyof typeof QTI_STANDARD_ACCESS_FEATURES | null;
236
+ /**
237
+ * Helper to get all features in a category
238
+ */
239
+ export declare function getFeaturesInCategory(category: keyof typeof QTI_STANDARD_ACCESS_FEATURES): string[];
240
+ //# sourceMappingURL=pnp-standard-features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnp-standard-features.d.ts","sourceRoot":"","sources":["../../src/services/pnp-standard-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;IACxC;;;OAGG;;;;;;;;;;;;;;;;;;;IA2BH;;;OAGG;;;;;;;;;;;;;;;;;;;IA2BH;;;OAGG;;;;;;;;;;;;;;;;IAsBH;;;OAGG;;;;;;;;;;;;;;;;;;;IA2BH;;;OAGG;;;;;;;;;;;;;;;;;IAuBH;;;OAGG;;;;;;;;;IAaH;;;OAGG;;;;;;;;IAYH;;;OAGG;;;;;;;;;;;;;;CAmBM,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,4BAA4B,stDAEO,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B;IACtC;;OAEG;;;;;IAeH;;OAEG;;;;;IAgBH;;OAEG;;;;;IAaH;;OAEG;;;;;IAmBH;;OAEG;;;;;IAgBH;;OAEG;;;;;IAeH;;OAEG;;;;;CAaM,CAAC;AAEX;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,MAAM,GACf,MAAM,OAAO,4BAA4B,GAAG,IAAI,CASlD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,MAAM,OAAO,4BAA4B,GACjD,MAAM,EAAE,CAEV"}
@@ -0,0 +1,342 @@
1
+ /**
2
+ * QTI 3.0 / IMS Access for All (AfA) 3.0 Standard Access Features
3
+ *
4
+ * This file contains standardized accessibility feature identifiers from:
5
+ * - IMS Global Access for All (AfA) 3.0 specification
6
+ * - QTI 3.0 Personal Needs and Preferences (PNP)
7
+ * - Schema.org accessibility features vocabulary
8
+ * - WCAG 2.x accessibility guidelines
9
+ *
10
+ * These are the officially recognized values for QTI 3.0's accessibilityInfo.accessFeature
11
+ * and can be used as a reference for PNP profile configuration and tool mapping.
12
+ *
13
+ * References:
14
+ * - IMS AfA 3.0: https://www.imsglobal.org/spec/afa/v3p0
15
+ * - QTI 3.0: https://www.imsglobal.org/spec/qti/v3p0
16
+ * - Schema.org: https://schema.org/accessibilityFeature
17
+ */
18
+ /**
19
+ * Standard QTI 3.0 accessibility features organized by category
20
+ */
21
+ export const QTI_STANDARD_ACCESS_FEATURES = {
22
+ /**
23
+ * Visual accessibility features
24
+ * For students with low vision, color blindness, or visual processing needs
25
+ */
26
+ visual: {
27
+ // Magnification and zoom
28
+ magnification: "magnification",
29
+ screenMagnifier: "screenMagnifier",
30
+ zoomable: "zoomable",
31
+ // Color and contrast
32
+ highContrastDisplay: "highContrastDisplay",
33
+ highContrastAudio: "highContrastAudio",
34
+ colorContrast: "colorContrast",
35
+ invertColors: "invertColors",
36
+ // Display customization
37
+ displayTransformability: "displayTransformability",
38
+ largePrint: "largePrint",
39
+ fontEnlargement: "fontEnlargement",
40
+ resizeText: "resizeText",
41
+ // Visual alternatives
42
+ alternativeText: "alternativeText",
43
+ longDescription: "longDescription",
44
+ describedMath: "describedMath",
45
+ tactileGraphic: "tactileGraphic",
46
+ tactileObject: "tactileObject",
47
+ },
48
+ /**
49
+ * Auditory accessibility features
50
+ * For students who are deaf, hard of hearing, or benefit from audio
51
+ */
52
+ auditory: {
53
+ // Audio output
54
+ audioDescription: "audioDescription",
55
+ textToSpeech: "textToSpeech",
56
+ readAloud: "readAloud",
57
+ humanVoice: "humanVoice",
58
+ syntheticVoice: "syntheticVoice",
59
+ // Speech control
60
+ speechRate: "speechRate",
61
+ speechVolume: "speechVolume",
62
+ voicePitch: "voicePitch",
63
+ // Visual alternatives for audio
64
+ captions: "captions",
65
+ closedCaptions: "closedCaptions",
66
+ openCaptions: "openCaptions",
67
+ transcript: "transcript",
68
+ signLanguage: "signLanguage",
69
+ subtitles: "subtitles",
70
+ // Audio adjustments
71
+ audioControl: "audioControl",
72
+ noBackgroundAudio: "noBackgroundAudio",
73
+ },
74
+ /**
75
+ * Motor/physical accessibility features
76
+ * For students with limited mobility or motor control
77
+ */
78
+ motor: {
79
+ // Input alternatives
80
+ keyboardControl: "keyboardControl",
81
+ mouseControl: "mouseControl",
82
+ touchControl: "touchControl",
83
+ voiceControl: "voiceControl",
84
+ switchControl: "switchControl",
85
+ eyeGazeControl: "eyeGazeControl",
86
+ // Keyboard features
87
+ singleSwitchAccess: "singleSwitchAccess",
88
+ stickyKeys: "stickyKeys",
89
+ keyboardShortcuts: "keyboardShortcuts",
90
+ // Timing
91
+ timingControl: "timingControl",
92
+ unlimitedTime: "unlimitedTime",
93
+ extendedTime: "extendedTime",
94
+ pauseControl: "pauseControl",
95
+ },
96
+ /**
97
+ * Cognitive/learning accessibility features
98
+ * For students with learning disabilities, ADHD, autism, etc.
99
+ */
100
+ cognitive: {
101
+ // Content simplification
102
+ simplifiedLanguage: "simplifiedLanguage",
103
+ reducedComplexity: "reducedComplexity",
104
+ structuralNavigation: "structuralNavigation",
105
+ tableOfContents: "tableOfContents",
106
+ // Focus and attention
107
+ reducedDistraction: "reducedDistraction",
108
+ noFlashing: "noFlashing",
109
+ pauseAnimation: "pauseAnimation",
110
+ // Organization and support
111
+ annotations: "annotations",
112
+ bookmarking: "bookmarking",
113
+ highlighting: "highlighting",
114
+ guidedNavigation: "guidedNavigation",
115
+ // Tools
116
+ calculator: "calculator",
117
+ dictionary: "dictionary",
118
+ thesaurus: "thesaurus",
119
+ spellingAssistance: "spellingAssistance",
120
+ grammarAssistance: "grammarAssistance",
121
+ },
122
+ /**
123
+ * Reading support features
124
+ * For students with dyslexia or reading challenges
125
+ */
126
+ reading: {
127
+ // Text presentation
128
+ lineSpacing: "lineSpacing",
129
+ wordSpacing: "wordSpacing",
130
+ letterSpacing: "letterSpacing",
131
+ fontFamily: "fontFamily",
132
+ readingMask: "readingMask",
133
+ readingGuide: "readingGuide",
134
+ readingRuler: "readingRuler",
135
+ // Highlighting and emphasis
136
+ wordHighlighting: "wordHighlighting",
137
+ lineHighlighting: "lineHighlighting",
138
+ focusIndicator: "focusIndicator",
139
+ // Content support
140
+ printableResource: "printableResource",
141
+ braille: "braille",
142
+ nemeth: "nemeth",
143
+ refreshableBraille: "refreshableBraille",
144
+ },
145
+ /**
146
+ * Navigation features
147
+ * For efficient content navigation
148
+ */
149
+ navigation: {
150
+ // Structure
151
+ index: "index",
152
+ pageNavigation: "pageNavigation",
153
+ skipContent: "skipContent",
154
+ breadcrumbs: "breadcrumbs",
155
+ // Search
156
+ searchable: "searchable",
157
+ fullTextSearch: "fullTextSearch",
158
+ },
159
+ /**
160
+ * Linguistic features
161
+ * For language support
162
+ */
163
+ linguistic: {
164
+ // Languages
165
+ multilingualText: "multilingualText",
166
+ translatedText: "translatedText",
167
+ glossary: "glossary",
168
+ // Sign language
169
+ signLanguageInterpretation: "signLanguageInterpretation",
170
+ visualLanguage: "visualLanguage",
171
+ },
172
+ /**
173
+ * Assessment-specific features
174
+ * Features specific to test-taking environments
175
+ */
176
+ assessment: {
177
+ // Tools
178
+ protractor: "protractor",
179
+ ruler: "ruler",
180
+ graph: "graph",
181
+ graphingCalculator: "graphingCalculator",
182
+ periodicTable: "periodicTable",
183
+ formulaSheet: "formulaSheet",
184
+ // Answer support
185
+ answerMasking: "answerMasking",
186
+ answerEliminator: "answerEliminator",
187
+ strikethrough: "strikethrough",
188
+ // Item features
189
+ itemGlossary: "itemGlossary",
190
+ tutorialAvailable: "tutorialAvailable",
191
+ },
192
+ };
193
+ /**
194
+ * Flat list of all standard access features for validation
195
+ */
196
+ export const ALL_STANDARD_ACCESS_FEATURES = Object.values(QTI_STANDARD_ACCESS_FEATURES).flatMap((category) => Object.values(category));
197
+ /**
198
+ * Example PNP configurations for common accessibility needs
199
+ * These are NOT official profiles but illustrative examples showing
200
+ * how standard features can be combined for different student needs.
201
+ */
202
+ export const EXAMPLE_PNP_CONFIGURATIONS = {
203
+ /**
204
+ * Example: Student with low vision
205
+ */
206
+ lowVision: {
207
+ label: "Example: Low Vision Support",
208
+ features: [
209
+ "magnification",
210
+ "screenMagnifier",
211
+ "highContrastDisplay",
212
+ "colorContrast",
213
+ "fontEnlargement",
214
+ "textToSpeech",
215
+ "alternativeText",
216
+ "describedMath",
217
+ ],
218
+ },
219
+ /**
220
+ * Example: Student who is blind
221
+ */
222
+ blind: {
223
+ label: "Example: Blind Student Support",
224
+ features: [
225
+ "textToSpeech",
226
+ "screenReader",
227
+ "alternativeText",
228
+ "longDescription",
229
+ "describedMath",
230
+ "braille",
231
+ "refreshableBraille",
232
+ "keyboardControl",
233
+ "structuralNavigation",
234
+ ],
235
+ },
236
+ /**
237
+ * Example: Student who is deaf or hard of hearing
238
+ */
239
+ deafHardOfHearing: {
240
+ label: "Example: Deaf/Hard of Hearing Support",
241
+ features: [
242
+ "captions",
243
+ "closedCaptions",
244
+ "signLanguage",
245
+ "transcript",
246
+ "visualLanguage",
247
+ "noBackgroundAudio",
248
+ ],
249
+ },
250
+ /**
251
+ * Example: Student with dyslexia
252
+ */
253
+ dyslexia: {
254
+ label: "Example: Dyslexia Support",
255
+ features: [
256
+ "textToSpeech",
257
+ "readAloud",
258
+ "highlighting",
259
+ "wordHighlighting",
260
+ "lineHighlighting",
261
+ "readingMask",
262
+ "readingGuide",
263
+ "fontFamily",
264
+ "lineSpacing",
265
+ "wordSpacing",
266
+ "simplifiedLanguage",
267
+ "dictionary",
268
+ ],
269
+ },
270
+ /**
271
+ * Example: Student with ADHD
272
+ */
273
+ adhd: {
274
+ label: "Example: ADHD Support",
275
+ features: [
276
+ "reducedDistraction",
277
+ "noFlashing",
278
+ "pauseAnimation",
279
+ "timingControl",
280
+ "extendedTime",
281
+ "highlighting",
282
+ "annotations",
283
+ "guidedNavigation",
284
+ "structuralNavigation",
285
+ ],
286
+ },
287
+ /**
288
+ * Example: Student with motor limitations
289
+ */
290
+ motorLimitations: {
291
+ label: "Example: Motor Limitations Support",
292
+ features: [
293
+ "keyboardControl",
294
+ "stickyKeys",
295
+ "keyboardShortcuts",
296
+ "voiceControl",
297
+ "switchControl",
298
+ "timingControl",
299
+ "extendedTime",
300
+ "unlimitedTime",
301
+ ],
302
+ },
303
+ /**
304
+ * Example: English language learner
305
+ */
306
+ englishLearner: {
307
+ label: "Example: English Language Learner Support",
308
+ features: [
309
+ "textToSpeech",
310
+ "translatedText",
311
+ "glossary",
312
+ "dictionary",
313
+ "simplifiedLanguage",
314
+ "readAloud",
315
+ "highlighting",
316
+ ],
317
+ },
318
+ };
319
+ /**
320
+ * Helper to validate if a feature ID is a standard QTI 3.0 feature
321
+ */
322
+ export function isStandardAccessFeature(featureId) {
323
+ return ALL_STANDARD_ACCESS_FEATURES.includes(featureId);
324
+ }
325
+ /**
326
+ * Helper to get category for a feature
327
+ */
328
+ export function getFeatureCategory(featureId) {
329
+ for (const [category, features] of Object.entries(QTI_STANDARD_ACCESS_FEATURES)) {
330
+ if (Object.values(features).includes(featureId)) {
331
+ return category;
332
+ }
333
+ }
334
+ return null;
335
+ }
336
+ /**
337
+ * Helper to get all features in a category
338
+ */
339
+ export function getFeaturesInCategory(category) {
340
+ return Object.values(QTI_STANDARD_ACCESS_FEATURES[category]);
341
+ }
342
+ //# sourceMappingURL=pnp-standard-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnp-standard-features.js","sourceRoot":"","sources":["../../src/services/pnp-standard-features.ts"],"names":[],"mappings":"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"}