@pie-players/pie-assessment-toolkit 0.2.0

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 (194) hide show
  1. package/README.md +520 -0
  2. package/dist/attempt/TestSession.d.ts +90 -0
  3. package/dist/attempt/TestSession.d.ts.map +1 -0
  4. package/dist/attempt/TestSession.js +174 -0
  5. package/dist/attempt/TestSession.js.map +1 -0
  6. package/dist/core/TypedEventBus.d.ts +48 -0
  7. package/dist/core/TypedEventBus.d.ts.map +1 -0
  8. package/dist/core/TypedEventBus.js +63 -0
  9. package/dist/core/TypedEventBus.js.map +1 -0
  10. package/dist/index.d.ts +37 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +44 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/item-loader.d.ts +45 -0
  15. package/dist/item-loader.d.ts.map +1 -0
  16. package/dist/item-loader.js +62 -0
  17. package/dist/item-loader.js.map +1 -0
  18. package/dist/player/AssessmentPlayer.d.ts +388 -0
  19. package/dist/player/AssessmentPlayer.d.ts.map +1 -0
  20. package/dist/player/AssessmentPlayer.js +965 -0
  21. package/dist/player/AssessmentPlayer.js.map +1 -0
  22. package/dist/player/index.d.ts +17 -0
  23. package/dist/player/index.d.ts.map +1 -0
  24. package/dist/player/index.js +15 -0
  25. package/dist/player/index.js.map +1 -0
  26. package/dist/player/navigation-types.d.ts +63 -0
  27. package/dist/player/navigation-types.d.ts.map +1 -0
  28. package/dist/player/navigation-types.js +7 -0
  29. package/dist/player/navigation-types.js.map +1 -0
  30. package/dist/player/qti-navigation.d.ts +29 -0
  31. package/dist/player/qti-navigation.d.ts.map +1 -0
  32. package/dist/player/qti-navigation.js +160 -0
  33. package/dist/player/qti-navigation.js.map +1 -0
  34. package/dist/reference-layout/index.d.ts +19 -0
  35. package/dist/reference-layout/index.d.ts.map +1 -0
  36. package/dist/reference-layout/index.js +20 -0
  37. package/dist/reference-layout/index.js.map +1 -0
  38. package/dist/services/AccessibilityCatalogResolver.d.ts +141 -0
  39. package/dist/services/AccessibilityCatalogResolver.d.ts.map +1 -0
  40. package/dist/services/AccessibilityCatalogResolver.js +249 -0
  41. package/dist/services/AccessibilityCatalogResolver.js.map +1 -0
  42. package/dist/services/AssessmentAuthoringService.d.ts +60 -0
  43. package/dist/services/AssessmentAuthoringService.d.ts.map +1 -0
  44. package/dist/services/AssessmentAuthoringService.js +183 -0
  45. package/dist/services/AssessmentAuthoringService.js.map +1 -0
  46. package/dist/services/ContextVariableStore.d.ts +114 -0
  47. package/dist/services/ContextVariableStore.d.ts.map +1 -0
  48. package/dist/services/ContextVariableStore.js +207 -0
  49. package/dist/services/ContextVariableStore.js.map +1 -0
  50. package/dist/services/ElementToolStateStore.d.ts +125 -0
  51. package/dist/services/ElementToolStateStore.d.ts.map +1 -0
  52. package/dist/services/ElementToolStateStore.js +200 -0
  53. package/dist/services/ElementToolStateStore.js.map +1 -0
  54. package/dist/services/HighlightCoordinator.d.ts +179 -0
  55. package/dist/services/HighlightCoordinator.d.ts.map +1 -0
  56. package/dist/services/HighlightCoordinator.js +446 -0
  57. package/dist/services/HighlightCoordinator.js.map +1 -0
  58. package/dist/services/I18nService.d.ts +121 -0
  59. package/dist/services/I18nService.d.ts.map +1 -0
  60. package/dist/services/I18nService.js +276 -0
  61. package/dist/services/I18nService.js.map +1 -0
  62. package/dist/services/PNPMapper.d.ts +71 -0
  63. package/dist/services/PNPMapper.d.ts.map +1 -0
  64. package/dist/services/PNPMapper.js +98 -0
  65. package/dist/services/PNPMapper.js.map +1 -0
  66. package/dist/services/PNPToolResolver.d.ts +127 -0
  67. package/dist/services/PNPToolResolver.d.ts.map +1 -0
  68. package/dist/services/PNPToolResolver.js +222 -0
  69. package/dist/services/PNPToolResolver.js.map +1 -0
  70. package/dist/services/SSMLExtractor.d.ts +61 -0
  71. package/dist/services/SSMLExtractor.d.ts.map +1 -0
  72. package/dist/services/SSMLExtractor.js +181 -0
  73. package/dist/services/SSMLExtractor.js.map +1 -0
  74. package/dist/services/TTSService.d.ts +162 -0
  75. package/dist/services/TTSService.d.ts.map +1 -0
  76. package/dist/services/TTSService.js +465 -0
  77. package/dist/services/TTSService.js.map +1 -0
  78. package/dist/services/ThemeProvider.d.ts +95 -0
  79. package/dist/services/ThemeProvider.d.ts.map +1 -0
  80. package/dist/services/ThemeProvider.js +299 -0
  81. package/dist/services/ThemeProvider.js.map +1 -0
  82. package/dist/services/ToolConfigResolver.d.ts +162 -0
  83. package/dist/services/ToolConfigResolver.d.ts.map +1 -0
  84. package/dist/services/ToolConfigResolver.js +230 -0
  85. package/dist/services/ToolConfigResolver.js.map +1 -0
  86. package/dist/services/ToolCoordinator.d.ts +137 -0
  87. package/dist/services/ToolCoordinator.d.ts.map +1 -0
  88. package/dist/services/ToolCoordinator.js +318 -0
  89. package/dist/services/ToolCoordinator.js.map +1 -0
  90. package/dist/services/ToolkitCoordinator.d.ts +188 -0
  91. package/dist/services/ToolkitCoordinator.d.ts.map +1 -0
  92. package/dist/services/ToolkitCoordinator.js +252 -0
  93. package/dist/services/ToolkitCoordinator.js.map +1 -0
  94. package/dist/services/interfaces.d.ts +391 -0
  95. package/dist/services/interfaces.d.ts.map +1 -0
  96. package/dist/services/interfaces.js +12 -0
  97. package/dist/services/interfaces.js.map +1 -0
  98. package/dist/services/tool-providers/DesmosToolProvider.d.ts +103 -0
  99. package/dist/services/tool-providers/DesmosToolProvider.d.ts.map +1 -0
  100. package/dist/services/tool-providers/DesmosToolProvider.js +127 -0
  101. package/dist/services/tool-providers/DesmosToolProvider.js.map +1 -0
  102. package/dist/services/tool-providers/IToolProvider.d.ts +137 -0
  103. package/dist/services/tool-providers/IToolProvider.d.ts.map +1 -0
  104. package/dist/services/tool-providers/IToolProvider.js +13 -0
  105. package/dist/services/tool-providers/IToolProvider.js.map +1 -0
  106. package/dist/services/tool-providers/TIToolProvider.d.ts +107 -0
  107. package/dist/services/tool-providers/TIToolProvider.d.ts.map +1 -0
  108. package/dist/services/tool-providers/TIToolProvider.js +123 -0
  109. package/dist/services/tool-providers/TIToolProvider.js.map +1 -0
  110. package/dist/services/tool-providers/TTSToolProvider.d.ts +143 -0
  111. package/dist/services/tool-providers/TTSToolProvider.d.ts.map +1 -0
  112. package/dist/services/tool-providers/TTSToolProvider.js +168 -0
  113. package/dist/services/tool-providers/TTSToolProvider.js.map +1 -0
  114. package/dist/services/tool-providers/ToolProviderRegistry.d.ts +165 -0
  115. package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +1 -0
  116. package/dist/services/tool-providers/ToolProviderRegistry.js +240 -0
  117. package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -0
  118. package/dist/services/tool-providers/index.d.ts +18 -0
  119. package/dist/services/tool-providers/index.d.ts.map +1 -0
  120. package/dist/services/tool-providers/index.js +15 -0
  121. package/dist/services/tool-providers/index.js.map +1 -0
  122. package/dist/services/tts/browser-provider.d.ts +24 -0
  123. package/dist/services/tts/browser-provider.d.ts.map +1 -0
  124. package/dist/services/tts/browser-provider.js +177 -0
  125. package/dist/services/tts/browser-provider.js.map +1 -0
  126. package/dist/services/tts/provider-interface.d.ts +131 -0
  127. package/dist/services/tts/provider-interface.d.ts.map +1 -0
  128. package/dist/services/tts/provider-interface.js +10 -0
  129. package/dist/services/tts/provider-interface.js.map +1 -0
  130. package/dist/tools/calculators/desmos-provider.d.ts +54 -0
  131. package/dist/tools/calculators/desmos-provider.d.ts.map +1 -0
  132. package/dist/tools/calculators/desmos-provider.js +384 -0
  133. package/dist/tools/calculators/desmos-provider.js.map +1 -0
  134. package/dist/tools/calculators/mathjs-provider.d.ts +50 -0
  135. package/dist/tools/calculators/mathjs-provider.d.ts.map +1 -0
  136. package/dist/tools/calculators/mathjs-provider.js +660 -0
  137. package/dist/tools/calculators/mathjs-provider.js.map +1 -0
  138. package/dist/tools/calculators/ti-provider.d.ts +122 -0
  139. package/dist/tools/calculators/ti-provider.d.ts.map +1 -0
  140. package/dist/tools/calculators/ti-provider.js +587 -0
  141. package/dist/tools/calculators/ti-provider.js.map +1 -0
  142. package/dist/tools/client.d.ts +17 -0
  143. package/dist/tools/client.d.ts.map +1 -0
  144. package/dist/tools/client.js +26 -0
  145. package/dist/tools/client.js.map +1 -0
  146. package/dist/tools/index.d.ts +8 -0
  147. package/dist/tools/index.d.ts.map +1 -0
  148. package/dist/tools/index.js +10 -0
  149. package/dist/tools/index.js.map +1 -0
  150. package/dist/tools/library-loader.d.ts +63 -0
  151. package/dist/tools/library-loader.d.ts.map +1 -0
  152. package/dist/tools/library-loader.js +292 -0
  153. package/dist/tools/library-loader.js.map +1 -0
  154. package/dist/tools/response-discovery.d.ts +72 -0
  155. package/dist/tools/response-discovery.d.ts.map +1 -0
  156. package/dist/tools/response-discovery.js +183 -0
  157. package/dist/tools/response-discovery.js.map +1 -0
  158. package/dist/tools/tool-coordinator.d.ts +76 -0
  159. package/dist/tools/tool-coordinator.d.ts.map +1 -0
  160. package/dist/tools/tool-coordinator.js +197 -0
  161. package/dist/tools/tool-coordinator.js.map +1 -0
  162. package/dist/tools/types.d.ts +427 -0
  163. package/dist/tools/types.d.ts.map +1 -0
  164. package/dist/tools/types.js +13 -0
  165. package/dist/tools/types.js.map +1 -0
  166. package/dist/tools/variant-resolver.d.ts +48 -0
  167. package/dist/tools/variant-resolver.d.ts.map +1 -0
  168. package/dist/tools/variant-resolver.js +214 -0
  169. package/dist/tools/variant-resolver.js.map +1 -0
  170. package/dist/types/events.d.ts +157 -0
  171. package/dist/types/events.d.ts.map +1 -0
  172. package/dist/types/events.js +11 -0
  173. package/dist/types/events.js.map +1 -0
  174. package/dist/utils/logger.d.ts +7 -0
  175. package/dist/utils/logger.d.ts.map +1 -0
  176. package/dist/utils/logger.js +11 -0
  177. package/dist/utils/logger.js.map +1 -0
  178. package/package.json +71 -0
  179. package/src/README.md +626 -0
  180. package/src/components/QuestionToolBar.svelte +406 -0
  181. package/src/player/AssessmentLayout.svelte +68 -0
  182. package/src/player/README.md +154 -0
  183. package/src/reference-layout/README.md +135 -0
  184. package/src/reference-layout/ReferenceLayout.svelte +209 -0
  185. package/src/reference-layout/components/AssessmentContent.svelte +259 -0
  186. package/src/reference-layout/components/AssessmentFooter.svelte +89 -0
  187. package/src/reference-layout/components/AssessmentHeader.svelte +250 -0
  188. package/src/reference-layout/components/AssessmentNavigation.svelte +134 -0
  189. package/src/reference-layout/components/AssessmentToolsBar.svelte +176 -0
  190. package/src/reference-layout/components/ItemPanel.svelte +200 -0
  191. package/src/reference-layout/components/NotesPanel.svelte +179 -0
  192. package/src/reference-layout/components/PassagePanel.svelte +76 -0
  193. package/src/tools/README.md +616 -0
  194. package/src/tools/calculators/README.md +395 -0
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Service Interfaces
3
+ *
4
+ * Public interfaces for all core assessment toolkit services.
5
+ * These interfaces define the contracts that service implementations must fulfill,
6
+ * enabling dependency injection, testing, and custom implementations.
7
+ *
8
+ * Part of PIE Assessment Toolkit.
9
+ */
10
+ import type { II18nService } from "@pie-players/pie-players-shared/i18n";
11
+ import type { AccessibilityCatalogResolver, CatalogLookupOptions, CatalogStatistics, CatalogType, ResolvedCatalog } from "./AccessibilityCatalogResolver";
12
+ import type { HighlightColor, HighlightType } from "./HighlightCoordinator";
13
+ import type { ThemeConfig } from "./ThemeProvider";
14
+ import type { ZIndexLayer } from "./ToolCoordinator";
15
+ import type { PlaybackState, TTSConfig } from "./TTSService";
16
+ import type { ITTSProvider, TTSProviderCapabilities } from "./tts/provider-interface";
17
+ export type { II18nService };
18
+ /**
19
+ * Theme provider interface
20
+ *
21
+ * Applies consistent accessibility theming across items and tools.
22
+ */
23
+ export interface IThemeProvider {
24
+ /**
25
+ * Apply theme configuration
26
+ */
27
+ applyTheme(config: ThemeConfig): void;
28
+ /**
29
+ * Get current theme configuration
30
+ */
31
+ getCurrentTheme(): Required<ThemeConfig>;
32
+ /**
33
+ * Reset to default theme
34
+ */
35
+ reset(): void;
36
+ /**
37
+ * Clean up and remove theme styles
38
+ */
39
+ destroy(): void;
40
+ }
41
+ /**
42
+ * Highlight coordinator interface
43
+ *
44
+ * Manages content highlighting for TTS, annotations, and selections.
45
+ */
46
+ export interface IHighlightCoordinator {
47
+ /**
48
+ * Highlight a text range
49
+ */
50
+ highlightRange(range: Range, type: HighlightType, color: HighlightColor): void;
51
+ /**
52
+ * Highlight a word for TTS (temporary)
53
+ */
54
+ highlightTTSWord(textNode: Text, startOffset: number, endOffset: number): void;
55
+ /**
56
+ * Highlight sentence(s) for TTS (background layer)
57
+ */
58
+ highlightTTSSentence(ranges: Range[]): void;
59
+ /**
60
+ * Clear all TTS highlights (word and sentence)
61
+ */
62
+ clearTTS(): void;
63
+ /**
64
+ * Clear highlights of a specific type
65
+ */
66
+ clearHighlights(type: HighlightType): void;
67
+ /**
68
+ * Clear all highlights
69
+ */
70
+ clearAll(): void;
71
+ /**
72
+ * Check if highlighting is supported in current environment
73
+ */
74
+ isSupported(): boolean;
75
+ /**
76
+ * Update TTS highlight style dynamically
77
+ */
78
+ updateTTSHighlightStyle(color: string, opacity: number): void;
79
+ }
80
+ /**
81
+ * Tool state interface
82
+ */
83
+ export interface ToolState {
84
+ id: string;
85
+ name: string;
86
+ isVisible: boolean;
87
+ element: HTMLElement | null;
88
+ layer: ZIndexLayer;
89
+ }
90
+ /**
91
+ * Tool coordinator interface
92
+ *
93
+ * Manages z-index layering and visibility for floating tools.
94
+ */
95
+ export interface IToolCoordinator {
96
+ /**
97
+ * Register a tool with the coordinator
98
+ */
99
+ registerTool(id: string, name: string, element?: HTMLElement, layer?: ZIndexLayer): void;
100
+ /**
101
+ * Unregister a tool
102
+ */
103
+ unregisterTool(id: string): void;
104
+ /**
105
+ * Show a tool
106
+ */
107
+ showTool(id: string): void;
108
+ /**
109
+ * Hide a tool
110
+ */
111
+ hideTool(id: string): void;
112
+ /**
113
+ * Bring an element to the front of its layer
114
+ */
115
+ bringToFront(element: HTMLElement): void;
116
+ /**
117
+ * Update the element reference for a tool
118
+ */
119
+ updateToolElement(id: string, element: HTMLElement): void;
120
+ /**
121
+ * Get state for a specific tool
122
+ */
123
+ getToolState(id: string): ToolState | undefined;
124
+ /**
125
+ * Get all visible tools
126
+ */
127
+ getVisibleTools(): ToolState[];
128
+ /**
129
+ * Subscribe to tool state changes
130
+ */
131
+ subscribe(listener: () => void): () => void;
132
+ }
133
+ /**
134
+ * TTS service interface
135
+ *
136
+ * Provides text-to-speech functionality with provider-based architecture.
137
+ * Supports QTI 3.0 accessibility catalogs for pre-authored spoken content.
138
+ */
139
+ export interface ITTSService {
140
+ /**
141
+ * Initialize TTS with a provider
142
+ */
143
+ initialize(provider: ITTSProvider, config?: Partial<TTSConfig>): Promise<void>;
144
+ /**
145
+ * Speak text with optional catalog support
146
+ */
147
+ speak(text: string, options?: {
148
+ catalogId?: string;
149
+ language?: string;
150
+ }): Promise<void>;
151
+ /**
152
+ * Speak a text range
153
+ */
154
+ speakRange(range: Range): Promise<void>;
155
+ /**
156
+ * Pause playback
157
+ */
158
+ pause(): void;
159
+ /**
160
+ * Resume playback
161
+ */
162
+ resume(): void;
163
+ /**
164
+ * Stop playback
165
+ */
166
+ stop(): void;
167
+ /**
168
+ * Check if currently playing
169
+ */
170
+ isPlaying(): boolean;
171
+ /**
172
+ * Check if paused
173
+ */
174
+ isPaused(): boolean;
175
+ /**
176
+ * Get current playback state
177
+ */
178
+ getState(): PlaybackState;
179
+ /**
180
+ * Get currently speaking text
181
+ */
182
+ getCurrentText(): string | null;
183
+ /**
184
+ * Subscribe to state changes
185
+ */
186
+ onStateChange(id: string, callback: (state: PlaybackState) => void): void;
187
+ /**
188
+ * Unsubscribe from state changes
189
+ */
190
+ offStateChange(id: string, callback: (state: PlaybackState) => void): void;
191
+ /**
192
+ * Get capabilities of current provider
193
+ */
194
+ getCapabilities(): TTSProviderCapabilities | null;
195
+ /**
196
+ * Update TTS settings dynamically (rate, pitch, voice)
197
+ */
198
+ updateSettings(settings: Partial<TTSConfig>): Promise<void>;
199
+ /**
200
+ * Set highlight coordinator for word highlighting
201
+ */
202
+ setHighlightCoordinator(coordinator: IHighlightCoordinator): void;
203
+ /**
204
+ * Set accessibility catalog resolver for spoken content
205
+ */
206
+ setCatalogResolver(resolver: AccessibilityCatalogResolver): void;
207
+ }
208
+ /**
209
+ * Accessibility catalog resolver interface
210
+ *
211
+ * Manages QTI 3.0 accessibility catalogs at assessment and item levels.
212
+ * Provides lookup and resolution services for alternative content representations.
213
+ */
214
+ export interface IAccessibilityCatalogResolver {
215
+ /**
216
+ * Set the default language for fallback resolution
217
+ */
218
+ setDefaultLanguage(language: string): void;
219
+ /**
220
+ * Get the default language
221
+ */
222
+ getDefaultLanguage(): string;
223
+ /**
224
+ * Add item-level catalogs (called when rendering a new item)
225
+ */
226
+ addItemCatalogs(catalogs: any[]): void;
227
+ /**
228
+ * Clear item-level catalogs (called when leaving an item)
229
+ */
230
+ clearItemCatalogs(): void;
231
+ /**
232
+ * Check if a catalog exists
233
+ */
234
+ hasCatalog(catalogId: string): boolean;
235
+ /**
236
+ * Get alternative content for a catalog identifier
237
+ */
238
+ getAlternative(catalogId: string, options: CatalogLookupOptions): ResolvedCatalog | null;
239
+ /**
240
+ * Get all available alternatives for a catalog identifier
241
+ */
242
+ getAllAlternatives(catalogId: string): ResolvedCatalog[];
243
+ /**
244
+ * Get all catalog identifiers available
245
+ */
246
+ getAllCatalogIds(): string[];
247
+ /**
248
+ * Get statistics about available catalogs
249
+ */
250
+ getStatistics(): CatalogStatistics;
251
+ /**
252
+ * Check if a specific catalog type is available
253
+ */
254
+ hasAlternativeType(catalogId: string, type: CatalogType): boolean;
255
+ /**
256
+ * Get all catalog IDs that have a specific type of alternative
257
+ */
258
+ getCatalogsByType(type: CatalogType): string[];
259
+ /**
260
+ * Reset all catalogs
261
+ */
262
+ reset(): void;
263
+ /**
264
+ * Destroy and cleanup
265
+ */
266
+ destroy(): void;
267
+ }
268
+ /**
269
+ * Element tool state store interface
270
+ *
271
+ * Manages element-level ephemeral tool state using composite keys for global uniqueness.
272
+ * Tool state is client-only and separate from PIE session data (which is sent to server for scoring).
273
+ */
274
+ export interface IElementToolStateStore {
275
+ /**
276
+ * Generate a globally unique element ID from components
277
+ */
278
+ getGlobalElementId(assessmentId: string, sectionId: string, itemId: string, elementId: string): string;
279
+ /**
280
+ * Parse a global element ID into its components
281
+ */
282
+ parseGlobalElementId(globalElementId: string): {
283
+ assessmentId: string;
284
+ sectionId: string;
285
+ itemId: string;
286
+ elementId: string;
287
+ } | null;
288
+ /**
289
+ * Set state for a specific tool on an element
290
+ */
291
+ setState(globalElementId: string, toolId: string, state: any): void;
292
+ /**
293
+ * Get state for a specific tool on an element
294
+ */
295
+ getState(globalElementId: string, toolId: string): any | undefined;
296
+ /**
297
+ * Get all tool states for a specific element
298
+ */
299
+ getElementState(globalElementId: string): Record<string, any>;
300
+ /**
301
+ * Get all element states
302
+ */
303
+ getAllState(): Record<string, Record<string, any>>;
304
+ /**
305
+ * Subscribe to state changes
306
+ */
307
+ subscribe(callback: (state: Map<string, Map<string, any>>) => void): () => void;
308
+ /**
309
+ * Set callback for persistence integration
310
+ */
311
+ setOnStateChange(callback: (state: Record<string, Record<string, any>>) => void): void;
312
+ /**
313
+ * Load state from persistence
314
+ */
315
+ loadState(state: Record<string, Record<string, any>>): void;
316
+ /**
317
+ * Clear state for a specific element
318
+ */
319
+ clearElement(globalElementId: string): void;
320
+ /**
321
+ * Clear state for a specific tool across all elements
322
+ */
323
+ clearTool(toolId: string): void;
324
+ /**
325
+ * Clear all elements in a specific section
326
+ */
327
+ clearSection(assessmentId: string, sectionId: string): void;
328
+ /**
329
+ * Clear all state
330
+ */
331
+ clearAll(): void;
332
+ }
333
+ /**
334
+ * Toolkit coordinator interface
335
+ *
336
+ * Orchestrates all toolkit services (TTS, tools, accessibility, state management) from a single entry point.
337
+ * Provides centralized configuration for tool availability and settings.
338
+ */
339
+ export interface IToolkitCoordinator {
340
+ /**
341
+ * Assessment identifier
342
+ */
343
+ readonly assessmentId: string;
344
+ /**
345
+ * Configuration
346
+ */
347
+ readonly config: any;
348
+ /**
349
+ * TTS service
350
+ */
351
+ readonly ttsService: ITTSService;
352
+ /**
353
+ * Tool coordinator
354
+ */
355
+ readonly toolCoordinator: IToolCoordinator;
356
+ /**
357
+ * Highlight coordinator
358
+ */
359
+ readonly highlightCoordinator: IHighlightCoordinator;
360
+ /**
361
+ * Element tool state store
362
+ */
363
+ readonly elementToolStateStore: IElementToolStateStore;
364
+ /**
365
+ * Catalog resolver
366
+ */
367
+ readonly catalogResolver: IAccessibilityCatalogResolver;
368
+ /**
369
+ * Get all services as a bundle
370
+ */
371
+ getServiceBundle(): {
372
+ ttsService: ITTSService;
373
+ toolCoordinator: IToolCoordinator;
374
+ highlightCoordinator: IHighlightCoordinator;
375
+ elementToolStateStore: IElementToolStateStore;
376
+ catalogResolver: IAccessibilityCatalogResolver;
377
+ };
378
+ /**
379
+ * Check if a tool is enabled
380
+ */
381
+ isToolEnabled(toolId: string): boolean;
382
+ /**
383
+ * Get tool configuration
384
+ */
385
+ getToolConfig(toolId: string): any | null;
386
+ /**
387
+ * Update tool configuration
388
+ */
389
+ updateToolConfig(toolId: string, updates: any): void;
390
+ }
391
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/services/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Service Interfaces
3
+ *
4
+ * Public interfaces for all core assessment toolkit services.
5
+ * These interfaces define the contracts that service implementations must fulfill,
6
+ * enabling dependency injection, testing, and custom implementations.
7
+ *
8
+ * Part of PIE Assessment Toolkit.
9
+ */
10
+ export {};
11
+ // II18nService is re-exported from @pie-players/pie-players-shared/i18n
12
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/services/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;;AAkfH,wEAAwE"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Desmos Calculator Tool Provider
3
+ *
4
+ * Provides Desmos calculators (basic, scientific, graphing)
5
+ * with authentication and proxy support.
6
+ *
7
+ * SECURITY BEST PRACTICE:
8
+ * - Development: Pass apiKey directly for local testing
9
+ * - Production: Use proxyEndpoint or authFetcher to keep API key server-side
10
+ *
11
+ * Part of PIE Assessment Toolkit.
12
+ */
13
+ import type { CalculatorProvider, DesmosCalculatorConfig } from "@pie-players/pie-calculator";
14
+ import type { IToolProvider, ToolProviderCapabilities } from "./IToolProvider";
15
+ /**
16
+ * Desmos tool provider configuration
17
+ */
18
+ export interface DesmosToolProviderConfig {
19
+ /**
20
+ * Desmos API key (DEVELOPMENT ONLY)
21
+ * Never expose in production client code!
22
+ *
23
+ * Obtain from: https://www.desmos.com/api
24
+ */
25
+ apiKey?: string;
26
+ /**
27
+ * Server proxy endpoint (PRODUCTION RECOMMENDED)
28
+ * Backend handles API key securely
29
+ *
30
+ * @example '/api/desmos/token'
31
+ * @example 'https://api.myapp.com/tools/desmos/auth'
32
+ */
33
+ proxyEndpoint?: string;
34
+ /**
35
+ * Default calculator configuration applied to all instances
36
+ */
37
+ defaultConfig?: DesmosCalculatorConfig;
38
+ }
39
+ /**
40
+ * Desmos Calculator Tool Provider
41
+ *
42
+ * Wraps DesmosCalculatorProvider with the IToolProvider interface
43
+ * for use in the ToolProviderRegistry.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const provider = new DesmosToolProvider();
48
+ *
49
+ * await provider.initialize({
50
+ * apiKey: 'your-api-key', // Development only
51
+ * proxyEndpoint: '/api/desmos/token', // Production
52
+ * });
53
+ *
54
+ * const calculatorProvider = await provider.createInstance();
55
+ * ```
56
+ */
57
+ export declare class DesmosToolProvider implements IToolProvider<DesmosToolProviderConfig, CalculatorProvider> {
58
+ readonly providerId = "desmos-calculator";
59
+ readonly providerName = "Desmos Calculator";
60
+ readonly category: "calculator";
61
+ readonly version = "1.10";
62
+ readonly requiresAuth = true;
63
+ private desmosProvider;
64
+ private config;
65
+ /**
66
+ * Initialize Desmos calculator provider
67
+ *
68
+ * Loads the Desmos API library and authenticates with provided credentials.
69
+ *
70
+ * @param config Configuration with API key or proxy endpoint
71
+ * @throws Error if initialization fails
72
+ */
73
+ initialize(config: DesmosToolProviderConfig): Promise<void>;
74
+ /**
75
+ * Create a calculator provider instance
76
+ *
77
+ * Returns the initialized Desmos calculator provider.
78
+ *
79
+ * @param config Optional instance-specific configuration (currently unused)
80
+ * @returns Desmos calculator provider
81
+ * @throws Error if provider not initialized
82
+ */
83
+ createInstance(config?: Partial<DesmosToolProviderConfig>): Promise<CalculatorProvider>;
84
+ /**
85
+ * Get provider capabilities
86
+ *
87
+ * @returns Desmos calculator capabilities
88
+ */
89
+ getCapabilities(): ToolProviderCapabilities;
90
+ /**
91
+ * Check if provider is ready
92
+ *
93
+ * @returns true if provider is initialized
94
+ */
95
+ isReady(): boolean;
96
+ /**
97
+ * Clean up provider resources
98
+ *
99
+ * Destroys the Desmos calculator provider and releases resources.
100
+ */
101
+ destroy(): void;
102
+ }
103
+ //# sourceMappingURL=DesmosToolProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesmosToolProvider.d.ts","sourceRoot":"","sources":["../../../src/services/tool-providers/DesmosToolProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACX,kBAAkB,EAClB,sBAAsB,EACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACxC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBACZ,YAAW,aAAa,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;IAEtE,QAAQ,CAAC,UAAU,uBAAuB;IAC1C,QAAQ,CAAC,YAAY,uBAAuB;IAC5C,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;IAC1C,QAAQ,CAAC,OAAO,UAAU;IAC1B,QAAQ,CAAC,YAAY,QAAQ;IAE7B,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,MAAM,CAAyC;IAEvD;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCjE;;;;;;;;OAQG;IACG,cAAc,CACnB,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAU9B;;;;OAIG;IACH,eAAe,IAAI,wBAAwB;IAc3C;;;;OAIG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAQf"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Desmos Calculator Tool Provider
3
+ *
4
+ * Provides Desmos calculators (basic, scientific, graphing)
5
+ * with authentication and proxy support.
6
+ *
7
+ * SECURITY BEST PRACTICE:
8
+ * - Development: Pass apiKey directly for local testing
9
+ * - Production: Use proxyEndpoint or authFetcher to keep API key server-side
10
+ *
11
+ * Part of PIE Assessment Toolkit.
12
+ */
13
+ import { DesmosCalculatorProvider } from "@pie-players/pie-calculator-desmos";
14
+ /**
15
+ * Desmos Calculator Tool Provider
16
+ *
17
+ * Wraps DesmosCalculatorProvider with the IToolProvider interface
18
+ * for use in the ToolProviderRegistry.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const provider = new DesmosToolProvider();
23
+ *
24
+ * await provider.initialize({
25
+ * apiKey: 'your-api-key', // Development only
26
+ * proxyEndpoint: '/api/desmos/token', // Production
27
+ * });
28
+ *
29
+ * const calculatorProvider = await provider.createInstance();
30
+ * ```
31
+ */
32
+ export class DesmosToolProvider {
33
+ providerId = "desmos-calculator";
34
+ providerName = "Desmos Calculator";
35
+ category = "calculator";
36
+ version = "1.10";
37
+ requiresAuth = true;
38
+ desmosProvider = null;
39
+ config = null;
40
+ /**
41
+ * Initialize Desmos calculator provider
42
+ *
43
+ * Loads the Desmos API library and authenticates with provided credentials.
44
+ *
45
+ * @param config Configuration with API key or proxy endpoint
46
+ * @throws Error if initialization fails
47
+ */
48
+ async initialize(config) {
49
+ if (this.desmosProvider) {
50
+ console.warn("[DesmosToolProvider] Already initialized, skipping reinitialization");
51
+ return;
52
+ }
53
+ this.config = config;
54
+ this.desmosProvider = new DesmosCalculatorProvider();
55
+ // Initialize with API key or proxy
56
+ try {
57
+ await this.desmosProvider.initialize({
58
+ apiKey: config.apiKey,
59
+ proxyEndpoint: config.proxyEndpoint,
60
+ });
61
+ console.log(`[DesmosToolProvider] Initialized successfully ${config.proxyEndpoint
62
+ ? "(using proxy)"
63
+ : config.apiKey
64
+ ? "(direct API key)"
65
+ : "(no auth)"}`);
66
+ }
67
+ catch (error) {
68
+ console.error("[DesmosToolProvider] Initialization failed:", error);
69
+ throw new Error("Failed to initialize Desmos calculator provider. Check API key or proxy endpoint.");
70
+ }
71
+ }
72
+ /**
73
+ * Create a calculator provider instance
74
+ *
75
+ * Returns the initialized Desmos calculator provider.
76
+ *
77
+ * @param config Optional instance-specific configuration (currently unused)
78
+ * @returns Desmos calculator provider
79
+ * @throws Error if provider not initialized
80
+ */
81
+ async createInstance(config) {
82
+ if (!this.desmosProvider) {
83
+ throw new Error("[DesmosToolProvider] Provider not initialized. Call initialize() first.");
84
+ }
85
+ return this.desmosProvider;
86
+ }
87
+ /**
88
+ * Get provider capabilities
89
+ *
90
+ * @returns Desmos calculator capabilities
91
+ */
92
+ getCapabilities() {
93
+ return {
94
+ supportsOffline: false, // Requires Desmos CDN
95
+ requiresAuth: true,
96
+ maxInstances: null, // Unlimited calculator instances
97
+ features: {
98
+ basic: true,
99
+ scientific: true,
100
+ graphing: true,
101
+ fourFunction: true,
102
+ },
103
+ };
104
+ }
105
+ /**
106
+ * Check if provider is ready
107
+ *
108
+ * @returns true if provider is initialized
109
+ */
110
+ isReady() {
111
+ return this.desmosProvider !== null;
112
+ }
113
+ /**
114
+ * Clean up provider resources
115
+ *
116
+ * Destroys the Desmos calculator provider and releases resources.
117
+ */
118
+ destroy() {
119
+ if (this.desmosProvider) {
120
+ this.desmosProvider.destroy();
121
+ this.desmosProvider = null;
122
+ }
123
+ this.config = null;
124
+ console.log("[DesmosToolProvider] Destroyed");
125
+ }
126
+ }
127
+ //# sourceMappingURL=DesmosToolProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesmosToolProvider.js","sourceRoot":"","sources":["../../../src/services/tool-providers/DesmosToolProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AA8B9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,kBAAkB;IAGrB,UAAU,GAAG,mBAAmB,CAAC;IACjC,YAAY,GAAG,mBAAmB,CAAC;IACnC,QAAQ,GAAG,YAAqB,CAAC;IACjC,OAAO,GAAG,MAAM,CAAC;IACjB,YAAY,GAAG,IAAI,CAAC;IAErB,cAAc,GAAoC,IAAI,CAAC;IACvD,MAAM,GAAoC,IAAI,CAAC;IAEvD;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,MAAgC;QAChD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CACX,qEAAqE,CACrE,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAErD,mCAAmC;QACnC,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;gBACpC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,aAAa,EAAE,MAAM,CAAC,aAAa;aACnC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CACV,iDACC,MAAM,CAAC,aAAa;gBACnB,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,MAAM,CAAC,MAAM;oBACd,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,WACL,EAAE,CACF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;YACpE,MAAM,IAAI,KAAK,CACd,mFAAmF,CACnF,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CACnB,MAA0C;QAE1C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACd,yEAAyE,CACzE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,eAAe;QACd,OAAO;YACN,eAAe,EAAE,KAAK,EAAE,sBAAsB;YAC9C,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,IAAI,EAAE,iCAAiC;YACrD,QAAQ,EAAE;gBACT,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;aAClB;SACD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,OAAO;QACN,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,OAAO;QACN,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;CACD"}