@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,660 @@
1
+ /**
2
+ * Math.js Calculator Provider
3
+ * Implementation of CalculatorProvider for Math.js-based calculators
4
+ *
5
+ * Supports: Basic and Scientific calculators
6
+ * License: Apache 2.0 (Math.js) - Commercial-friendly, no licensing fees
7
+ * Based on: https://mathjs.org/
8
+ *
9
+ * NOTE: This is a working implementation that provides basic/scientific
10
+ * calculator functionality without requiring external licenses.
11
+ */
12
+ import { COMMON_LIBRARIES, libraryLoader } from "../library-loader";
13
+ /**
14
+ * Math.js Calculator Provider Implementation
15
+ */
16
+ export class MathJsCalculatorProvider {
17
+ providerId = "mathjs";
18
+ providerName = "Math.js";
19
+ supportedTypes = ["basic", "scientific"];
20
+ version = "12.0.0";
21
+ initialized = false;
22
+ /**
23
+ * Initialize Math.js library
24
+ */
25
+ async initialize() {
26
+ if (this.initialized)
27
+ return;
28
+ // SSR guard: Math.js calculators should NEVER run on the server
29
+ if (typeof window === "undefined") {
30
+ throw new Error("Math.js calculators can only be initialized in the browser");
31
+ }
32
+ // Load Math.js library
33
+ await libraryLoader.loadScript(COMMON_LIBRARIES.mathjs);
34
+ // Verify Math.js API is available
35
+ if (!window.math) {
36
+ throw new Error("Math.js library not loaded");
37
+ }
38
+ this.initialized = true;
39
+ console.log("[MathJsProvider] Initialized successfully");
40
+ }
41
+ /**
42
+ * Create a calculator instance
43
+ */
44
+ async createCalculator(type, container, config) {
45
+ if (!this.initialized) {
46
+ await this.initialize();
47
+ }
48
+ if (!this.supportsType(type)) {
49
+ throw new Error(`Math.js provider does not support calculator type: ${type}`);
50
+ }
51
+ return new MathJsCalculator(this, type, container, config);
52
+ }
53
+ /**
54
+ * Check if type is supported
55
+ */
56
+ supportsType(type) {
57
+ return this.supportedTypes.includes(type);
58
+ }
59
+ /**
60
+ * Cleanup
61
+ */
62
+ destroy() {
63
+ this.initialized = false;
64
+ }
65
+ /**
66
+ * Get provider capabilities
67
+ */
68
+ getCapabilities() {
69
+ return {
70
+ supportsHistory: true,
71
+ supportsGraphing: false,
72
+ supportsExpressions: true,
73
+ canExport: true,
74
+ maxPrecision: 64, // Math.js supports arbitrary precision with bignumbers
75
+ inputMethods: ["keyboard", "mouse", "touch"],
76
+ };
77
+ }
78
+ }
79
+ /**
80
+ * Math.js Calculator Instance
81
+ */
82
+ class MathJsCalculator {
83
+ provider;
84
+ type;
85
+ math;
86
+ container;
87
+ currentExpression = "";
88
+ currentValue = "0";
89
+ history = [];
90
+ angleMode = "deg"; // Default to degrees
91
+ memory = 0;
92
+ theme = "dark";
93
+ // UI elements
94
+ displayEl;
95
+ historyEl;
96
+ // Event handler references for cleanup
97
+ boundKeyboardHandler = null;
98
+ buttonListeners = [];
99
+ styleElement;
100
+ constructor(provider, type, container, config) {
101
+ this.provider = provider;
102
+ this.type = type;
103
+ this.container = container;
104
+ this.math = window.math;
105
+ // Apply config settings
106
+ if (config?.theme) {
107
+ this.theme = config.theme;
108
+ }
109
+ this._initializeCalculator();
110
+ }
111
+ /**
112
+ * Initialize calculator UI
113
+ */
114
+ _initializeCalculator() {
115
+ // Create calculator structure
116
+ this.container.innerHTML = `
117
+ <div class="mathjs-calculator mathjs-calculator--${this.type}">
118
+ <div class="mathjs-calculator__display-container">
119
+ <div class="mathjs-calculator__history"></div>
120
+ <div class="mathjs-calculator__display">0</div>
121
+ </div>
122
+ <div class="mathjs-calculator__buttons">
123
+ ${this._generateButtons()}
124
+ </div>
125
+ </div>
126
+ `;
127
+ // Apply styles
128
+ this._applyStyles();
129
+ // Get references
130
+ this.displayEl = this.container.querySelector(".mathjs-calculator__display");
131
+ this.historyEl = this.container.querySelector(".mathjs-calculator__history");
132
+ // Attach event listeners
133
+ this._attachEventListeners();
134
+ console.log(`[MathJsCalculator] Created ${this.type} calculator`);
135
+ }
136
+ /**
137
+ * Generate button layout based on calculator type
138
+ */
139
+ _generateButtons() {
140
+ if (this.type === "scientific") {
141
+ return this._generateScientificButtons();
142
+ }
143
+ return this._generateBasicButtons();
144
+ }
145
+ /**
146
+ * Generate basic calculator buttons
147
+ */
148
+ _generateBasicButtons() {
149
+ return `
150
+ <div class="mathjs-calculator__row">
151
+ <button data-action="clear" class="mathjs-btn mathjs-btn--function">C</button>
152
+ <button data-action="clearEntry" class="mathjs-btn mathjs-btn--function">CE</button>
153
+ <button data-action="backspace" class="mathjs-btn mathjs-btn--function">⌫</button>
154
+ <button data-input="/" class="mathjs-btn mathjs-btn--operator">÷</button>
155
+ </div>
156
+ <div class="mathjs-calculator__row">
157
+ <button data-input="7" class="mathjs-btn mathjs-btn--number">7</button>
158
+ <button data-input="8" class="mathjs-btn mathjs-btn--number">8</button>
159
+ <button data-input="9" class="mathjs-btn mathjs-btn--number">9</button>
160
+ <button data-input="*" class="mathjs-btn mathjs-btn--operator">×</button>
161
+ </div>
162
+ <div class="mathjs-calculator__row">
163
+ <button data-input="4" class="mathjs-btn mathjs-btn--number">4</button>
164
+ <button data-input="5" class="mathjs-btn mathjs-btn--number">5</button>
165
+ <button data-input="6" class="mathjs-btn mathjs-btn--number">6</button>
166
+ <button data-input="-" class="mathjs-btn mathjs-btn--operator">−</button>
167
+ </div>
168
+ <div class="mathjs-calculator__row">
169
+ <button data-input="1" class="mathjs-btn mathjs-btn--number">1</button>
170
+ <button data-input="2" class="mathjs-btn mathjs-btn--number">2</button>
171
+ <button data-input="3" class="mathjs-btn mathjs-btn--number">3</button>
172
+ <button data-input="+" class="mathjs-btn mathjs-btn--operator">+</button>
173
+ </div>
174
+ <div class="mathjs-calculator__row">
175
+ <button data-input="0" class="mathjs-btn mathjs-btn--number mathjs-btn--wide">0</button>
176
+ <button data-input="." class="mathjs-btn mathjs-btn--number">.</button>
177
+ <button data-action="equals" class="mathjs-btn mathjs-btn--equals">=</button>
178
+ </div>
179
+ `;
180
+ }
181
+ /**
182
+ * Generate scientific calculator buttons
183
+ */
184
+ _generateScientificButtons() {
185
+ return `
186
+ <div class="mathjs-calculator__row">
187
+ <button data-action="toggleAngle" class="mathjs-btn mathjs-btn--function" title="Toggle angle mode">DEG</button>
188
+ <button data-action="clear" class="mathjs-btn mathjs-btn--function">C</button>
189
+ <button data-action="clearEntry" class="mathjs-btn mathjs-btn--function">CE</button>
190
+ <button data-action="backspace" class="mathjs-btn mathjs-btn--function">⌫</button>
191
+ <button data-input="/" class="mathjs-btn mathjs-btn--operator">÷</button>
192
+ </div>
193
+ <div class="mathjs-calculator__row">
194
+ <button data-function="sin" class="mathjs-btn mathjs-btn--function">sin</button>
195
+ <button data-input="7" class="mathjs-btn mathjs-btn--number">7</button>
196
+ <button data-input="8" class="mathjs-btn mathjs-btn--number">8</button>
197
+ <button data-input="9" class="mathjs-btn mathjs-btn--number">9</button>
198
+ <button data-input="*" class="mathjs-btn mathjs-btn--operator">×</button>
199
+ </div>
200
+ <div class="mathjs-calculator__row">
201
+ <button data-function="cos" class="mathjs-btn mathjs-btn--function">cos</button>
202
+ <button data-input="4" class="mathjs-btn mathjs-btn--number">4</button>
203
+ <button data-input="5" class="mathjs-btn mathjs-btn--number">5</button>
204
+ <button data-input="6" class="mathjs-btn mathjs-btn--number">6</button>
205
+ <button data-input="-" class="mathjs-btn mathjs-btn--operator">−</button>
206
+ </div>
207
+ <div class="mathjs-calculator__row">
208
+ <button data-function="tan" class="mathjs-btn mathjs-btn--function">tan</button>
209
+ <button data-input="1" class="mathjs-btn mathjs-btn--number">1</button>
210
+ <button data-input="2" class="mathjs-btn mathjs-btn--number">2</button>
211
+ <button data-input="3" class="mathjs-btn mathjs-btn--number">3</button>
212
+ <button data-input="+" class="mathjs-btn mathjs-btn--operator">+</button>
213
+ </div>
214
+ <div class="mathjs-calculator__row">
215
+ <button data-function="sqrt" class="mathjs-btn mathjs-btn--function">√</button>
216
+ <button data-input="0" class="mathjs-btn mathjs-btn--number mathjs-btn--wide">0</button>
217
+ <button data-input="." class="mathjs-btn mathjs-btn--number">.</button>
218
+ <button data-action="equals" class="mathjs-btn mathjs-btn--equals">=</button>
219
+ </div>
220
+ <div class="mathjs-calculator__row">
221
+ <button data-function="log" class="mathjs-btn mathjs-btn--function">log</button>
222
+ <button data-function="ln" class="mathjs-btn mathjs-btn--function">ln</button>
223
+ <button data-function="pow" class="mathjs-btn mathjs-btn--function">x^y</button>
224
+ <button data-input="pi" class="mathjs-btn mathjs-btn--constant">π</button>
225
+ <button data-input="e" class="mathjs-btn mathjs-btn--constant">e</button>
226
+ </div>
227
+ `;
228
+ }
229
+ /**
230
+ * Apply inline styles (in production, use external stylesheet)
231
+ */
232
+ _applyStyles() {
233
+ this.styleElement = document.createElement("style");
234
+ // Theme colors
235
+ const isDark = this.theme === "dark" ||
236
+ (this.theme === "auto" &&
237
+ window.matchMedia("(prefers-color-scheme: dark)").matches);
238
+ const colors = isDark
239
+ ? {
240
+ bg: "#2c3e50",
241
+ displayBg: "#34495e",
242
+ text: "#ecf0f1",
243
+ historyText: "#95a5a6",
244
+ buttonBg: "#34495e",
245
+ }
246
+ : {
247
+ bg: "#ecf0f1",
248
+ displayBg: "#ffffff",
249
+ text: "#2c3e50",
250
+ historyText: "#7f8c8d",
251
+ buttonBg: "#ffffff",
252
+ };
253
+ this.styleElement.textContent = `
254
+ .mathjs-calculator {
255
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
256
+ background: ${colors.bg};
257
+ border-radius: 12px;
258
+ padding: 20px;
259
+ box-shadow: 0 8px 32px rgba(0,0,0,0.3);
260
+ max-width: 400px;
261
+ }
262
+ .mathjs-calculator__display-container {
263
+ background: ${colors.displayBg};
264
+ border-radius: 8px;
265
+ padding: 15px;
266
+ margin-bottom: 15px;
267
+ min-height: 80px;
268
+ box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
269
+ }
270
+ .mathjs-calculator__history {
271
+ font-size: 14px;
272
+ color: ${colors.historyText};
273
+ text-align: right;
274
+ min-height: 20px;
275
+ margin-bottom: 5px;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ white-space: nowrap;
279
+ }
280
+ .mathjs-calculator__display {
281
+ font-size: 32px;
282
+ font-weight: 600;
283
+ color: ${colors.text};
284
+ text-align: right;
285
+ word-break: break-all;
286
+ }
287
+ .mathjs-calculator__buttons {
288
+ display: flex;
289
+ flex-direction: column;
290
+ gap: 8px;
291
+ }
292
+ .mathjs-calculator__row {
293
+ display: grid;
294
+ grid-template-columns: repeat(5, 1fr);
295
+ gap: 8px;
296
+ }
297
+ .mathjs-calculator--basic .mathjs-calculator__row {
298
+ grid-template-columns: repeat(4, 1fr);
299
+ }
300
+ .mathjs-btn {
301
+ padding: 18px 12px;
302
+ font-size: 18px;
303
+ font-weight: 500;
304
+ border: ${isDark ? "none" : "1px solid #bdc3c7"};
305
+ border-radius: 8px;
306
+ cursor: pointer;
307
+ transition: all 0.15s ease;
308
+ background: ${colors.buttonBg};
309
+ color: ${colors.text};
310
+ }
311
+ .mathjs-btn:hover {
312
+ transform: translateY(-2px);
313
+ box-shadow: 0 4px 12px rgba(0,0,0,0.2);
314
+ }
315
+ .mathjs-btn:active {
316
+ transform: translateY(0);
317
+ }
318
+ .mathjs-btn--number {
319
+ background: ${colors.buttonBg};
320
+ }
321
+ .mathjs-btn--operator {
322
+ background: #e67e22;
323
+ color: white;
324
+ }
325
+ .mathjs-btn--function {
326
+ background: #3498db;
327
+ color: white;
328
+ font-size: 14px;
329
+ }
330
+ .mathjs-btn--constant {
331
+ background: #9b59b6;
332
+ color: white;
333
+ }
334
+ .mathjs-btn--equals {
335
+ background: #27ae60;
336
+ color: white;
337
+ }
338
+ .mathjs-btn--wide {
339
+ grid-column: span 2;
340
+ }
341
+ `;
342
+ this.container.appendChild(this.styleElement);
343
+ }
344
+ /**
345
+ * Attach event listeners to buttons
346
+ */
347
+ _attachEventListeners() {
348
+ const buttons = this.container.querySelectorAll(".mathjs-btn");
349
+ buttons.forEach((button) => {
350
+ const handler = (e) => {
351
+ const target = e.currentTarget;
352
+ const input = target.dataset.input;
353
+ const action = target.dataset.action;
354
+ const func = target.dataset.function;
355
+ if (input) {
356
+ this._handleInput(input);
357
+ }
358
+ else if (action) {
359
+ this._handleAction(action);
360
+ }
361
+ else if (func) {
362
+ this._handleFunction(func);
363
+ }
364
+ };
365
+ button.addEventListener("click", handler);
366
+ // Store reference for cleanup
367
+ this.buttonListeners.push({ element: button, handler });
368
+ });
369
+ // Keyboard support - store bound reference for cleanup
370
+ this.boundKeyboardHandler = this._handleKeyboard.bind(this);
371
+ document.addEventListener("keydown", this.boundKeyboardHandler);
372
+ }
373
+ /**
374
+ * Handle input button clicks
375
+ */
376
+ _handleInput(input) {
377
+ // Handle special inputs
378
+ if (input === "pi") {
379
+ this.currentExpression += "pi";
380
+ this._updateDisplay();
381
+ return;
382
+ }
383
+ if (input === "e") {
384
+ this.currentExpression += "e";
385
+ this._updateDisplay();
386
+ return;
387
+ }
388
+ // Clear display if showing result
389
+ if (this.currentValue !== "0" && this.currentExpression === "") {
390
+ this.currentExpression = this.currentValue;
391
+ }
392
+ this.currentExpression += input;
393
+ this._updateDisplay();
394
+ }
395
+ /**
396
+ * Handle action button clicks
397
+ */
398
+ _handleAction(action) {
399
+ switch (action) {
400
+ case "clear":
401
+ this.clear();
402
+ break;
403
+ case "clearEntry":
404
+ this.currentExpression = "";
405
+ this._updateDisplay();
406
+ break;
407
+ case "backspace":
408
+ this.currentExpression = this.currentExpression.slice(0, -1);
409
+ this._updateDisplay();
410
+ break;
411
+ case "equals":
412
+ this._calculate();
413
+ break;
414
+ case "toggleAngle":
415
+ this._toggleAngleMode();
416
+ break;
417
+ }
418
+ }
419
+ /**
420
+ * Handle function button clicks
421
+ */
422
+ _handleFunction(func) {
423
+ // Get current value or expression
424
+ const value = this.currentExpression || this.currentValue;
425
+ switch (func) {
426
+ case "sin":
427
+ case "cos":
428
+ case "tan":
429
+ this.currentExpression = `${func}(${value} ${this.angleMode})`;
430
+ break;
431
+ case "sqrt":
432
+ this.currentExpression = `sqrt(${value})`;
433
+ break;
434
+ case "log":
435
+ this.currentExpression = `log10(${value})`;
436
+ break;
437
+ case "ln":
438
+ this.currentExpression = `log(${value})`;
439
+ break;
440
+ case "pow":
441
+ this.currentExpression = `${value}^`;
442
+ break;
443
+ }
444
+ this._updateDisplay();
445
+ }
446
+ /**
447
+ * Handle keyboard input
448
+ */
449
+ _handleKeyboard(e) {
450
+ // Only handle if calculator is focused
451
+ if (!this.container.contains(document.activeElement))
452
+ return;
453
+ const key = e.key;
454
+ if (/[0-9\+\-\*\/\.\(\)]/.test(key)) {
455
+ this._handleInput(key);
456
+ }
457
+ else if (key === "Enter") {
458
+ e.preventDefault();
459
+ this._calculate();
460
+ }
461
+ else if (key === "Escape") {
462
+ this.clear();
463
+ }
464
+ else if (key === "Backspace") {
465
+ e.preventDefault();
466
+ this.currentExpression = this.currentExpression.slice(0, -1);
467
+ this._updateDisplay();
468
+ }
469
+ }
470
+ /**
471
+ * Toggle angle mode (degrees/radians)
472
+ */
473
+ _toggleAngleMode() {
474
+ this.angleMode = this.angleMode === "deg" ? "rad" : "deg";
475
+ const btn = this.container.querySelector('[data-action="toggleAngle"]');
476
+ if (btn) {
477
+ btn.textContent = this.angleMode.toUpperCase();
478
+ }
479
+ }
480
+ /**
481
+ * Calculate expression
482
+ */
483
+ _calculate() {
484
+ if (!this.currentExpression)
485
+ return;
486
+ try {
487
+ // Evaluate expression
488
+ const result = this.math.evaluate(this.currentExpression);
489
+ const resultStr = this._formatResult(result);
490
+ // Add to history
491
+ this.history.push({
492
+ expression: this.currentExpression,
493
+ result: resultStr,
494
+ timestamp: Date.now(),
495
+ });
496
+ // Update display
497
+ this.currentValue = resultStr;
498
+ if (this.historyEl) {
499
+ this.historyEl.textContent = this.currentExpression;
500
+ }
501
+ this.currentExpression = "";
502
+ this._updateDisplay();
503
+ console.log("[MathJsCalculator] Calculated:", this.currentValue);
504
+ }
505
+ catch (error) {
506
+ // More descriptive error handling
507
+ const errorMessage = error instanceof Error ? error.message : "Invalid expression";
508
+ this.currentValue = "Error";
509
+ if (this.historyEl) {
510
+ this.historyEl.textContent = errorMessage;
511
+ }
512
+ this._updateDisplay();
513
+ console.error("[MathJsCalculator] Calculation error:", errorMessage, error);
514
+ // Clear error after 3 seconds
515
+ setTimeout(() => {
516
+ if (this.currentValue === "Error" && this.historyEl) {
517
+ this.historyEl.textContent = "";
518
+ }
519
+ }, 3000);
520
+ }
521
+ }
522
+ /**
523
+ * Format result for display
524
+ */
525
+ _formatResult(result) {
526
+ if (typeof result === "number") {
527
+ // Round to reasonable precision
528
+ return result.toPrecision(10).replace(/\.?0+$/, "");
529
+ }
530
+ return String(result);
531
+ }
532
+ /**
533
+ * Update display
534
+ */
535
+ _updateDisplay() {
536
+ if (this.displayEl) {
537
+ this.displayEl.textContent = this.currentExpression || this.currentValue;
538
+ }
539
+ }
540
+ /**
541
+ * Get current value
542
+ */
543
+ getValue() {
544
+ return this.currentValue;
545
+ }
546
+ /**
547
+ * Set value
548
+ */
549
+ setValue(value) {
550
+ this.currentValue = value;
551
+ this.currentExpression = "";
552
+ this._updateDisplay();
553
+ }
554
+ /**
555
+ * Clear calculator
556
+ */
557
+ clear() {
558
+ this.currentExpression = "";
559
+ this.currentValue = "0";
560
+ if (this.historyEl) {
561
+ this.historyEl.textContent = "";
562
+ }
563
+ this._updateDisplay();
564
+ }
565
+ /**
566
+ * Get calculation history
567
+ */
568
+ getHistory() {
569
+ return [...this.history];
570
+ }
571
+ /**
572
+ * Clear history
573
+ */
574
+ clearHistory() {
575
+ this.history = [];
576
+ if (this.historyEl) {
577
+ this.historyEl.textContent = "";
578
+ }
579
+ }
580
+ /**
581
+ * Evaluate expression
582
+ */
583
+ async evaluate(expression) {
584
+ try {
585
+ const result = this.math.evaluate(expression);
586
+ return this._formatResult(result);
587
+ }
588
+ catch (error) {
589
+ throw new Error(`Evaluation error: ${error}`);
590
+ }
591
+ }
592
+ /**
593
+ * Export state
594
+ */
595
+ exportState() {
596
+ return {
597
+ type: this.type,
598
+ provider: "mathjs",
599
+ value: this.currentValue,
600
+ history: this.history,
601
+ providerState: {
602
+ expression: this.currentExpression,
603
+ angleMode: this.angleMode,
604
+ memory: this.memory,
605
+ },
606
+ };
607
+ }
608
+ /**
609
+ * Import state
610
+ */
611
+ importState(state) {
612
+ if (state.provider !== "mathjs") {
613
+ throw new Error(`Cannot import state from provider: ${state.provider}`);
614
+ }
615
+ this.currentValue = state.value;
616
+ if (state.history) {
617
+ this.history = [...state.history];
618
+ }
619
+ if (state.providerState) {
620
+ this.currentExpression = state.providerState.expression || "";
621
+ this.angleMode = state.providerState.angleMode || "deg";
622
+ this.memory = state.providerState.memory || 0;
623
+ }
624
+ this._updateDisplay();
625
+ }
626
+ /**
627
+ * Destroy calculator
628
+ */
629
+ destroy() {
630
+ // Remove keyboard listener (using stored bound reference)
631
+ if (this.boundKeyboardHandler) {
632
+ document.removeEventListener("keydown", this.boundKeyboardHandler);
633
+ this.boundKeyboardHandler = null;
634
+ }
635
+ // Remove button listeners
636
+ for (const { element, handler } of this.buttonListeners) {
637
+ element.removeEventListener("click", handler);
638
+ }
639
+ this.buttonListeners = [];
640
+ // Remove style element
641
+ if (this.styleElement && this.styleElement.parentNode) {
642
+ this.styleElement.parentNode.removeChild(this.styleElement);
643
+ this.styleElement = undefined;
644
+ }
645
+ // Clear container using modern API
646
+ this.container.replaceChildren();
647
+ // Clear references
648
+ this.displayEl = undefined;
649
+ this.historyEl = undefined;
650
+ console.log("[MathJsCalculator] destroyed");
651
+ }
652
+ }
653
+ /**
654
+ * Singleton provider instance (deprecated)
655
+ * @deprecated Instantiate MathJsCalculatorProvider directly instead:
656
+ * const provider = new MathJsCalculatorProvider();
657
+ * await provider.initialize();
658
+ */
659
+ export const mathjsProvider = new MathJsCalculatorProvider();
660
+ //# sourceMappingURL=mathjs-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mathjs-provider.js","sourceRoot":"","sources":["../../../src/tools/calculators/mathjs-provider.ts"],"names":[],"mappings":"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"}