@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,587 @@
1
+ /**
2
+ * TI Calculator Provider
3
+ * Implementation of CalculatorProvider for TI calculator emulators
4
+ *
5
+ * Supports: TI-84, TI-108, TI-34 MV
6
+ * Based on production TI calculator implementation patterns
7
+ *
8
+ * NOTE: Requires licensed TI emulator libraries from Texas Instruments
9
+ */
10
+ /**
11
+ * TI Calculator library version
12
+ * Matches version embedded in TI emulator libraries: 2.8.0.50
13
+ * Update this when upgrading to a new version of TI emulator libraries
14
+ */
15
+ const TI_VERSION = "v2.8.0";
16
+ /**
17
+ * TI Calculator Provider Implementation
18
+ */
19
+ export class TICalculatorProvider {
20
+ providerId = "ti";
21
+ providerName = "Texas Instruments";
22
+ supportedTypes = ["ti-84", "ti-108", "ti-34-mv"];
23
+ version = "1.0.0";
24
+ initialized = false;
25
+ loadedEmulators = new Set();
26
+ /**
27
+ * Initialize TI emulator libraries
28
+ * Loads the shared ELG library that all TI calculators depend on
29
+ */
30
+ async initialize() {
31
+ if (this.initialized)
32
+ return;
33
+ // SSR guard: TI calculators should NEVER run on the server
34
+ if (typeof window === "undefined") {
35
+ throw new Error("TI calculators can only be initialized in the browser");
36
+ }
37
+ console.log("[TIProvider] Initializing TI calculator emulators...");
38
+ // Load ELG library first (shared library for all TI calculators)
39
+ if (!window.TI_ELG_Ready) {
40
+ await this._loadELGLibrary();
41
+ }
42
+ this.initialized = true;
43
+ console.log("[TIProvider] Initialized");
44
+ }
45
+ /**
46
+ * Load the ELG (TI Emulator Library) shared library
47
+ */
48
+ async _loadELGLibrary() {
49
+ if (window.TI_ELG_Ready)
50
+ return;
51
+ return new Promise((resolve, reject) => {
52
+ // Check if script is already loaded
53
+ const existingScript = document.querySelector('script[src*="ELG"]');
54
+ if (existingScript) {
55
+ window.TI_ELG_Ready = true;
56
+ resolve();
57
+ return;
58
+ }
59
+ const script = document.createElement("script");
60
+ script.src = `/lib/ti/${TI_VERSION}/ELG-min.js`; // Versioned path for better cache control
61
+ script.onload = () => {
62
+ window.TI_ELG_Ready = true;
63
+ console.log("[TIProvider] ELG library loaded successfully");
64
+ resolve();
65
+ };
66
+ script.onerror = () => {
67
+ console.error("[TIProvider] Failed to load ELG library");
68
+ reject(new Error("Failed to load required TI calculator library (ELG)"));
69
+ };
70
+ document.head.appendChild(script);
71
+ });
72
+ }
73
+ /**
74
+ * Create a calculator instance
75
+ */
76
+ async createCalculator(type, container, config) {
77
+ if (!this.initialized) {
78
+ await this.initialize();
79
+ }
80
+ if (!this.supportsType(type)) {
81
+ throw new Error(`TI Provider does not support calculator type: ${type}`);
82
+ }
83
+ // Load specific emulator library if not already loaded
84
+ if (!this.loadedEmulators.has(type)) {
85
+ await this._loadEmulator(type);
86
+ this.loadedEmulators.add(type);
87
+ }
88
+ return new TICalculator(this, type, container, config);
89
+ }
90
+ /**
91
+ * Load specific TI emulator library
92
+ */
93
+ async _loadEmulator(type) {
94
+ console.log(`[TIProvider] Loading ${type} emulator...`);
95
+ // Determine library files based on calculator type
96
+ const libraryConfig = this._getLibraryConfig(type);
97
+ // Load CSS and JS in parallel
98
+ await Promise.all([
99
+ this._loadScript(libraryConfig.js),
100
+ this._loadCSS(libraryConfig.css),
101
+ ]);
102
+ // Add a small delay to ensure everything is initialized
103
+ await new Promise((resolve) => setTimeout(resolve, 100));
104
+ console.log(`[TIProvider] ${type} emulator loaded successfully`);
105
+ }
106
+ /**
107
+ * Get library configuration for calculator type
108
+ * Uses versioned paths similar to Desmos implementation
109
+ */
110
+ _getLibraryConfig(type) {
111
+ const basePath = `/lib/ti/${TI_VERSION}`;
112
+ switch (type) {
113
+ case "ti-84":
114
+ return {
115
+ js: `${basePath}/ti84p-min.js`,
116
+ css: `${basePath}/css/ti84pce-min.css`,
117
+ };
118
+ case "ti-108":
119
+ return {
120
+ js: `${basePath}/ti108-min.js`,
121
+ css: `${basePath}/css/ti108-min.css`,
122
+ };
123
+ case "ti-34-mv":
124
+ return {
125
+ js: `${basePath}/ti34mv-min.js`,
126
+ css: `${basePath}/css/ti34mv-min.css`,
127
+ };
128
+ default:
129
+ throw new Error(`Unknown TI calculator type: ${type}`);
130
+ }
131
+ }
132
+ /**
133
+ * Load a JavaScript script
134
+ */
135
+ _loadScript(src) {
136
+ return new Promise((resolve, reject) => {
137
+ // Check if script is already loaded
138
+ if (document.querySelector(`script[src="${src}"]`)) {
139
+ resolve();
140
+ return;
141
+ }
142
+ const script = document.createElement("script");
143
+ script.src = src;
144
+ script.onload = () => resolve();
145
+ script.onerror = () => reject(new Error(`Failed to load script: ${src}`));
146
+ document.head.appendChild(script);
147
+ });
148
+ }
149
+ /**
150
+ * Load a CSS stylesheet
151
+ */
152
+ _loadCSS(href) {
153
+ return new Promise((resolve, reject) => {
154
+ // Check if CSS is already loaded
155
+ if (document.querySelector(`link[href="${href}"]`)) {
156
+ resolve();
157
+ return;
158
+ }
159
+ const link = document.createElement("link");
160
+ link.rel = "stylesheet";
161
+ link.type = "text/css";
162
+ link.href = href;
163
+ link.onload = () => resolve();
164
+ link.onerror = () => reject(new Error(`Failed to load CSS: ${href}`));
165
+ document.head.appendChild(link);
166
+ });
167
+ }
168
+ /**
169
+ * Check if type is supported
170
+ */
171
+ supportsType(type) {
172
+ return this.supportedTypes.includes(type);
173
+ }
174
+ /**
175
+ * Cleanup
176
+ */
177
+ destroy() {
178
+ this.initialized = false;
179
+ this.loadedEmulators.clear();
180
+ }
181
+ /**
182
+ * Get provider capabilities
183
+ */
184
+ getCapabilities() {
185
+ return {
186
+ supportsHistory: true,
187
+ supportsGraphing: true, // TI-84 supports graphing
188
+ supportsExpressions: true,
189
+ canExport: true,
190
+ maxPrecision: 14, // TI calculator precision
191
+ inputMethods: ["keyboard", "mouse", "touch"],
192
+ };
193
+ }
194
+ }
195
+ /**
196
+ * TI Calculator Instance Implementation
197
+ * Based on production implementation patterns
198
+ */
199
+ class TICalculator {
200
+ provider;
201
+ type;
202
+ container;
203
+ config;
204
+ tiInstance = null;
205
+ containerId;
206
+ currentValue = "";
207
+ history = [];
208
+ constructor(provider, type, container, config) {
209
+ this.provider = provider;
210
+ this.type = type;
211
+ this.container = container;
212
+ this.config = config;
213
+ // Generate unique container ID for the calculator
214
+ this.containerId = `ti-calculator-${type.replace("-", "")}-${Date.now()}`;
215
+ // Initialize asynchronously
216
+ this._initializeCalculator();
217
+ }
218
+ /**
219
+ * Initialize TI calculator instance
220
+ * Based on production implementation patterns with settings
221
+ */
222
+ async _initializeCalculator() {
223
+ console.log(`[TICalculator] Creating ${this.type} calculator`);
224
+ // Clean up any existing container content first
225
+ this.container.innerHTML = "";
226
+ // Create calculator div (TI calculators require a specific div ID)
227
+ const calculatorDiv = document.createElement("div");
228
+ calculatorDiv.id = this.containerId;
229
+ this.container.appendChild(calculatorDiv);
230
+ // Verify the element is in the DOM before initializing
231
+ // Some TI libraries (especially TI-34) querySelector immediately on initialization
232
+ const element = document.getElementById(this.containerId);
233
+ if (!element || !element.isConnected) {
234
+ throw new Error(`Calculator container element ${this.containerId} not found in DOM`);
235
+ }
236
+ // Get TI configuration (merge defaults with provided config)
237
+ const tiConfig = this._getTIConfig();
238
+ // Add a small delay to ensure DOM is ready and previous instances are cleaned up
239
+ // Double check element still exists after delay
240
+ await new Promise((resolve) => setTimeout(resolve, 150));
241
+ const elementAfterDelay = document.getElementById(this.containerId);
242
+ if (!elementAfterDelay || !elementAfterDelay.isConnected) {
243
+ throw new Error(`Calculator container element ${this.containerId} was removed before initialization`);
244
+ }
245
+ // Initialize calculator based on type
246
+ try {
247
+ switch (this.type) {
248
+ case "ti-84":
249
+ if (!window.TI84PCE) {
250
+ throw new Error("TI84PCE constructor not available. Ensure ti84p-min.js is loaded.");
251
+ }
252
+ this.tiInstance = new window.TI84PCE(tiConfig, 60000);
253
+ console.log("[TICalculator] TI-84 calculator instance created successfully");
254
+ break;
255
+ case "ti-108":
256
+ if (!window.TI108) {
257
+ throw new Error("TI108 constructor not available. Ensure ti108-min.js is loaded.");
258
+ }
259
+ this.tiInstance = new window.TI108(tiConfig, 60000);
260
+ console.log("[TICalculator] TI-108 calculator instance created successfully");
261
+ break;
262
+ case "ti-34-mv":
263
+ if (!window.TI34) {
264
+ throw new Error("TI34 constructor not available. Ensure ti34mv-min.js is loaded.");
265
+ }
266
+ this.tiInstance = new window.TI34(tiConfig, 60000);
267
+ console.log("[TICalculator] TI-34MV calculator instance created successfully");
268
+ break;
269
+ default:
270
+ throw new Error(`Unsupported TI calculator type: ${this.type}`);
271
+ }
272
+ }
273
+ catch (error) {
274
+ console.error(`[TICalculator] Failed to initialize ${this.type} calculator:`, error);
275
+ // Render error message instead of crashing
276
+ this.container.innerHTML = `
277
+ <div style="padding: 20px; border: 2px solid #d32f2f; border-radius: 8px; background: #ffebee; text-align: center;">
278
+ <h3 style="margin: 0 0 10px 0; color: #d32f2f;">${this._getCalculatorName()}</h3>
279
+ <p style="margin: 0; color: #666;">
280
+ Failed to initialize calculator.<br>
281
+ Error: ${error instanceof Error ? error.message : "Unknown error"}
282
+ </p>
283
+ </div>
284
+ `;
285
+ throw error;
286
+ }
287
+ }
288
+ /**
289
+ * Get TI configuration with defaults based on production implementation patterns
290
+ */
291
+ _getTIConfig() {
292
+ const tiConfig = this.config?.ti || {};
293
+ const defaults = this._getDefaultConfig(this.type);
294
+ // Merge defaults with provided config
295
+ return {
296
+ ...defaults,
297
+ ...tiConfig,
298
+ // Ensure elementId is always set
299
+ elementId: this.containerId,
300
+ };
301
+ }
302
+ /**
303
+ * Get default configuration for calculator type
304
+ * Based on production settings with versioned paths
305
+ */
306
+ _getDefaultConfig(type) {
307
+ const basePath = `/lib/ti/${TI_VERSION}`;
308
+ switch (type) {
309
+ case "ti-84":
310
+ return {
311
+ elementId: this.containerId,
312
+ ROMLocation: `${basePath}/roms/No_AppsCE.h84statej`,
313
+ FaceplateLocation: `${basePath}/faceplates/TI84CE_touch.svg`,
314
+ KeyMappingFile: "",
315
+ KeyHistBufferLength: "10",
316
+ DisplayMode: "CLASSIC",
317
+ AngleMode: "RAD",
318
+ setTabOrder: 0,
319
+ setScreenReaderAria: true,
320
+ setAccessibleDisplay: true,
321
+ setupAPIs: {
322
+ resetEmulator: true,
323
+ },
324
+ };
325
+ case "ti-108":
326
+ return {
327
+ elementId: this.containerId,
328
+ ROMLocation: `${basePath}/roms/ti108.h84state`,
329
+ FaceplateLocation: `${basePath}/faceplates/TI108_touch.svg`,
330
+ KeyHistBufferLength: "10",
331
+ };
332
+ case "ti-34-mv":
333
+ return {
334
+ elementId: this.containerId,
335
+ ROMLocation: `${basePath}/roms/ti34mv.h84state`,
336
+ FaceplateLocation: `${basePath}/faceplates/TI34MV.svg`,
337
+ KeyMappingFile: "",
338
+ KeyHistBufferLength: "10",
339
+ DisplayMode: "CLASSIC",
340
+ AngleMode: "DEG",
341
+ };
342
+ default:
343
+ return {
344
+ elementId: this.containerId,
345
+ KeyHistBufferLength: "10",
346
+ };
347
+ }
348
+ }
349
+ /**
350
+ * Get human-readable calculator name
351
+ */
352
+ _getCalculatorName() {
353
+ switch (this.type) {
354
+ case "ti-84":
355
+ return "TI-84 Plus CE";
356
+ case "ti-108":
357
+ return "TI-108 Elementary";
358
+ case "ti-34-mv":
359
+ return "TI-34 MultiView";
360
+ default:
361
+ return "TI Calculator";
362
+ }
363
+ }
364
+ /**
365
+ * Get current value
366
+ */
367
+ getValue() {
368
+ return this.currentValue;
369
+ }
370
+ /**
371
+ * Set value
372
+ */
373
+ setValue(value) {
374
+ this.currentValue = value;
375
+ console.log(`[TICalculator] setValue: ${value}`);
376
+ }
377
+ /**
378
+ * Clear calculator
379
+ */
380
+ clear() {
381
+ this.currentValue = "";
382
+ console.log("[TICalculator] clear");
383
+ }
384
+ /**
385
+ * Get calculation history
386
+ */
387
+ getHistory() {
388
+ return [...this.history];
389
+ }
390
+ /**
391
+ * Clear history
392
+ */
393
+ clearHistory() {
394
+ this.history = [];
395
+ }
396
+ /**
397
+ * Evaluate expression
398
+ */
399
+ async evaluate(expression) {
400
+ console.log(`[TICalculator] evaluate: ${expression}`);
401
+ // Stub: Simple evaluation using JavaScript
402
+ try {
403
+ // WARNING: This is unsafe for production - only for stub
404
+ // eslint-disable-next-line no-eval
405
+ const result = eval(expression.replace(/×/g, "*").replace(/÷/g, "/"));
406
+ const resultStr = String(result);
407
+ this.history.push({
408
+ expression,
409
+ result: resultStr,
410
+ timestamp: Date.now(),
411
+ });
412
+ return resultStr;
413
+ }
414
+ catch (error) {
415
+ throw new Error(`Evaluation error: ${error}`);
416
+ }
417
+ }
418
+ /**
419
+ * Resize calculator when container dimensions change
420
+ */
421
+ resize() {
422
+ // Check if the container element still exists in the DOM
423
+ const element = document.getElementById(this.containerId);
424
+ if (!element || !element.isConnected) {
425
+ console.warn("[TICalculator] Cannot resize - element no longer in DOM");
426
+ return;
427
+ }
428
+ try {
429
+ if (this.tiInstance?.resize) {
430
+ this.tiInstance.resize();
431
+ }
432
+ console.log("[TICalculator] resize");
433
+ }
434
+ catch (error) {
435
+ console.warn("[TICalculator] Error during resize:", error);
436
+ }
437
+ }
438
+ /**
439
+ * Export state
440
+ */
441
+ exportState() {
442
+ return {
443
+ type: this.type,
444
+ provider: "ti",
445
+ value: this.currentValue,
446
+ history: this.history,
447
+ };
448
+ }
449
+ /**
450
+ * Import state
451
+ */
452
+ importState(state) {
453
+ if (state.provider !== "ti") {
454
+ throw new Error(`Cannot import state from provider: ${state.provider}`);
455
+ }
456
+ this.currentValue = state.value;
457
+ if (state.history) {
458
+ this.history = [...state.history];
459
+ }
460
+ }
461
+ /**
462
+ * Destroy calculator
463
+ * Properly cleans up TI calculator instance
464
+ */
465
+ destroy() {
466
+ // Check if the calculator element still exists in DOM before destroying
467
+ // The TI library's killInstance needs the element to exist and be connected
468
+ const calculatorDiv = document.getElementById(this.containerId);
469
+ const elementExists = calculatorDiv && calculatorDiv.isConnected;
470
+ if (this.tiInstance?.killInstance && elementExists) {
471
+ try {
472
+ // Only call killInstance if element is still in DOM
473
+ // This must be called BEFORE clearing DOM to allow library cleanup
474
+ // For TI-34, the library may querySelector during killInstance, so element must exist
475
+ const result = this.tiInstance.killInstance();
476
+ console.log(`[TICalculator] ${this.type} calculator destroyed:`, result);
477
+ // Give the library time to complete cleanup operations before removing elements
478
+ // The TI library (especially TI-34) may need to access DOM elements during cleanup
479
+ // Use multiple requestAnimationFrame calls to ensure all async cleanup completes
480
+ requestAnimationFrame(() => {
481
+ // Wait one more frame to ensure all cleanup is complete
482
+ requestAnimationFrame(() => {
483
+ // Verify element still exists before cleaning up (library might have removed it)
484
+ const stillExists = document.getElementById(this.containerId);
485
+ if (stillExists || this.container.isConnected) {
486
+ this._cleanupDOM();
487
+ }
488
+ });
489
+ });
490
+ }
491
+ catch (error) {
492
+ // If killInstance fails, log but don't throw - cleanup should continue
493
+ console.warn(`[TICalculator] Error destroying ${this.type} calculator (element may already be removed):`, error);
494
+ // Still clean up DOM even if killInstance failed, but with a delay
495
+ requestAnimationFrame(() => {
496
+ // Only cleanup if container still exists
497
+ if (this.container && this.container.isConnected) {
498
+ this._cleanupDOM();
499
+ }
500
+ });
501
+ }
502
+ }
503
+ else if (this.tiInstance?.killInstance && !elementExists) {
504
+ console.log(`[TICalculator] Skipping killInstance - element no longer in DOM for ${this.type}`);
505
+ // Element already removed, just clean up references
506
+ this._cleanupDOM();
507
+ }
508
+ else {
509
+ // No instance to destroy, just clean up DOM
510
+ this._cleanupDOM();
511
+ }
512
+ this.tiInstance = null;
513
+ console.log("[TICalculator] destroyed");
514
+ }
515
+ /**
516
+ * Internal method to clean up DOM elements
517
+ * Called after killInstance completes to prevent library accessing removed elements
518
+ * Note: Only clears the specific calculator div, not the entire container
519
+ * The container persists and can be reused when switching between TI calculators
520
+ */
521
+ _cleanupDOM() {
522
+ // Get reference to calculator div before cleaning up
523
+ // Only clear the specific calculator div with our containerId, not the entire container
524
+ // This allows the container to be reused when switching calculator types
525
+ const calculatorDiv = document.getElementById(this.containerId);
526
+ // Clean up only the calculator div with our specific ID
527
+ // Don't clear the entire container - it may be reused for a new calculator
528
+ if (calculatorDiv) {
529
+ try {
530
+ // Check if still connected and matches our containerId before clearing
531
+ if (calculatorDiv.isConnected &&
532
+ calculatorDiv.id === this.containerId) {
533
+ // Clear only this calculator div's children
534
+ calculatorDiv.replaceChildren();
535
+ }
536
+ }
537
+ catch (error) {
538
+ console.warn("[TICalculator] Error clearing calculator div:", error);
539
+ }
540
+ }
541
+ // Note: We intentionally don't clear this.container here
542
+ // The container is managed by the tool-calculator component and may be reused
543
+ // for a new calculator instance. Only clear the specific calculator div above.
544
+ }
545
+ }
546
+ /**
547
+ * Singleton provider instance (deprecated)
548
+ * @deprecated Instantiate TICalculatorProvider directly instead:
549
+ * const provider = new TICalculatorProvider();
550
+ * await provider.initialize();
551
+ */
552
+ export const tiProvider = new TICalculatorProvider();
553
+ /**
554
+ * NOTE: TI Calculator Emulator Integration
555
+ *
556
+ * To complete this implementation, you need:
557
+ *
558
+ * 1. Licensed TI Emulator Libraries:
559
+ * - TI-84 Plus CE Emulator SDK
560
+ * - TI-108 Emulator SDK
561
+ * - TI-34 MultiView Emulator SDK
562
+ *
563
+ * 2. API Documentation:
564
+ * - Initialize emulator in iframe or container
565
+ * - Send keypress events
566
+ * - Read display state
567
+ * - Export/import calculator memory
568
+ *
569
+ * 3. Licensing:
570
+ * - Obtain appropriate licenses from Texas Instruments
571
+ * - Comply with TI's terms of service
572
+ * - May require per-student or site licenses
573
+ *
574
+ * 4. References:
575
+ * - Various assessment platforms use TI emulators via Learnosity
576
+ * - Production implementations exist with TI emulator support
577
+ * - Some platforms use only Desmos calculators
578
+ *
579
+ * 5. Alternative Approach:
580
+ * - Embed TI emulator iframes from TI Education
581
+ * - Use postMessage API for communication
582
+ * - Handle cross-origin restrictions
583
+ *
584
+ * For now, this stub allows the architecture to support TI calculators
585
+ * without blocking development of other features.
586
+ */
587
+ //# sourceMappingURL=ti-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ti-provider.js","sourceRoot":"","sources":["../../../src/tools/calculators/ti-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Client-only tool system exports
3
+ *
4
+ * This entry point exports only browser-safe code for use in custom elements.
5
+ * It excludes server-side services like accommodationResolver, variantResolver, etc.
6
+ *
7
+ * Tools should import from '$lib/assessment-toolkit/tools/client' instead of '$lib/assessment-toolkit/tools' to ensure
8
+ * they don't accidentally pull in server-side dependencies.
9
+ */
10
+ export { DesmosCalculatorProvider, desmosProvider, } from "./calculators/desmos-provider";
11
+ export { MathJsCalculatorProvider, mathjsProvider, } from "./calculators/mathjs-provider";
12
+ export { TICalculatorProvider, tiProvider } from "./calculators/ti-provider";
13
+ export { COMMON_LIBRARIES, LibraryLoaderImpl, libraryLoader, } from "./library-loader";
14
+ export { ResponseDiscoveryServiceImpl, responseDiscovery, } from "./response-discovery";
15
+ export * from "./tool-coordinator";
16
+ export * from "./types";
17
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/tools/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EACN,wBAAwB,EACxB,cAAc,GACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,wBAAwB,EACxB,cAAc,GACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,4BAA4B,EAC5B,iBAAiB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,oBAAoB,CAAC;AAEnC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Client-only tool system exports
3
+ *
4
+ * This entry point exports only browser-safe code for use in custom elements.
5
+ * It excludes server-side services like accommodationResolver, variantResolver, etc.
6
+ *
7
+ * Tools should import from '$lib/assessment-toolkit/tools/client' instead of '$lib/assessment-toolkit/tools' to ensure
8
+ * they don't accidentally pull in server-side dependencies.
9
+ */
10
+ // Calculator providers (client-safe, have SSR guards)
11
+ // Deprecated singleton exports (kept for backward compatibility)
12
+ // @deprecated Instantiate providers directly instead
13
+ export { DesmosCalculatorProvider, desmosProvider, } from "./calculators/desmos-provider";
14
+ // @deprecated Instantiate providers directly instead
15
+ export { MathJsCalculatorProvider, mathjsProvider, } from "./calculators/mathjs-provider";
16
+ // @deprecated Instantiate providers directly instead
17
+ export { TICalculatorProvider, tiProvider } from "./calculators/ti-provider";
18
+ // Library loader (client-safe, has SSR guards)
19
+ export { COMMON_LIBRARIES, LibraryLoaderImpl, libraryLoader, } from "./library-loader";
20
+ // Response discovery (client-safe, browser-only)
21
+ export { ResponseDiscoveryServiceImpl, responseDiscovery, } from "./response-discovery";
22
+ // Tool coordinator (client-safe, uses Svelte stores)
23
+ export * from "./tool-coordinator";
24
+ // Core types (client-safe)
25
+ export * from "./types";
26
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tools/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sDAAsD;AACtD,iEAAiE;AACjE,qDAAqD;AACrD,OAAO,EACN,wBAAwB,EACxB,cAAc,GACd,MAAM,+BAA+B,CAAC;AACvC,qDAAqD;AACrD,OAAO,EACN,wBAAwB,EACxB,cAAc,GACd,MAAM,+BAA+B,CAAC;AACvC,qDAAqD;AACrD,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC7E,+CAA+C;AAC/C,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAC1B,iDAAiD;AACjD,OAAO,EACN,4BAA4B,EAC5B,iBAAiB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,qDAAqD;AACrD,cAAc,oBAAoB,CAAC;AACnC,2BAA2B;AAC3B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tool system exports
3
+ *
4
+ * For custom elements and client-side code, use '$lib/assessment-toolkit/tools/client' instead.
5
+ */
6
+ export * from "./client";
7
+ export { VariantResolverImpl, variantResolver } from "./variant-resolver";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}