@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,95 @@
1
+ /**
2
+ * ThemeProvider
3
+ *
4
+ * Applies consistent accessibility theming across items and tools.
5
+ * Uses CSS custom properties and classes for framework-agnostic theming.
6
+ *
7
+ * Features:
8
+ * - High contrast mode
9
+ * - Font size scaling (small, normal, large, xlarge)
10
+ * - Color customization (background, foreground, accent)
11
+ * - Consistent theming across shadow DOM boundaries
12
+ * - No framework dependencies
13
+ *
14
+ * Part of PIE Assessment Toolkit.
15
+ */
16
+ import type { IThemeProvider } from "./interfaces";
17
+ /**
18
+ * Font size options
19
+ */
20
+ export type FontSize = "small" | "normal" | "large" | "xlarge";
21
+ /**
22
+ * Theme configuration
23
+ */
24
+ export interface ThemeConfig {
25
+ highContrast?: boolean;
26
+ fontSize?: FontSize;
27
+ backgroundColor?: string;
28
+ foregroundColor?: string;
29
+ accentColor?: string;
30
+ linkColor?: string;
31
+ errorColor?: string;
32
+ successColor?: string;
33
+ warningColor?: string;
34
+ }
35
+ export declare class ThemeProvider implements IThemeProvider {
36
+ private currentTheme;
37
+ private styleElement;
38
+ private rootElement;
39
+ constructor(rootElement?: HTMLElement | null);
40
+ /**
41
+ * Initialize theme styles
42
+ */
43
+ private initializeStyles;
44
+ /**
45
+ * Apply theme configuration
46
+ *
47
+ * @param config Partial theme configuration (merged with current theme)
48
+ */
49
+ applyTheme(config: ThemeConfig): void;
50
+ /**
51
+ * Apply CSS custom properties to root element
52
+ */
53
+ private applyCSSVariables;
54
+ /**
55
+ * Apply CSS classes to root element
56
+ */
57
+ private applyCSSClasses;
58
+ /**
59
+ * Update global theme styles
60
+ */
61
+ private updateGlobalStyles;
62
+ /**
63
+ * Set high contrast mode
64
+ */
65
+ setHighContrast(enabled: boolean): void;
66
+ /**
67
+ * Set font size
68
+ */
69
+ setFontSize(size: FontSize): void;
70
+ /**
71
+ * Set color scheme
72
+ */
73
+ setColors(colors: {
74
+ backgroundColor?: string;
75
+ foregroundColor?: string;
76
+ accentColor?: string;
77
+ }): void;
78
+ /**
79
+ * Get current theme configuration
80
+ */
81
+ getCurrentTheme(): Required<ThemeConfig>;
82
+ /**
83
+ * Reset to default theme
84
+ */
85
+ reset(): void;
86
+ /**
87
+ * Adjust color opacity (helper)
88
+ */
89
+ private adjustOpacity;
90
+ /**
91
+ * Cleanup - remove theme styles
92
+ */
93
+ destroy(): void;
94
+ }
95
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/services/ThemeProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAwCD,qBAAa,aAAc,YAAW,cAAc;IACnD,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,WAAW,CAAqB;gBAGvC,WAAW,GAAE,WAAW,GAAG,IAEpB;IAaR;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA0BrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6CzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmF1B;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIvC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAIjC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAIR;;OAEG;IACH,eAAe,IAAI,QAAQ,CAAC,WAAW,CAAC;IAIxC;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,IAAI,IAAI;CA+Bf"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * ThemeProvider
3
+ *
4
+ * Applies consistent accessibility theming across items and tools.
5
+ * Uses CSS custom properties and classes for framework-agnostic theming.
6
+ *
7
+ * Features:
8
+ * - High contrast mode
9
+ * - Font size scaling (small, normal, large, xlarge)
10
+ * - Color customization (background, foreground, accent)
11
+ * - Consistent theming across shadow DOM boundaries
12
+ * - No framework dependencies
13
+ *
14
+ * Part of PIE Assessment Toolkit.
15
+ */
16
+ /**
17
+ * Font size scale (in rem units)
18
+ */
19
+ const FONT_SIZE_SCALE = {
20
+ small: 0.875, // 14px at 16px base
21
+ normal: 1.0, // 16px at 16px base
22
+ large: 1.25, // 20px at 16px base
23
+ xlarge: 1.5, // 24px at 16px base
24
+ };
25
+ /**
26
+ * Default theme values
27
+ */
28
+ const DEFAULT_THEME = {
29
+ highContrast: false,
30
+ fontSize: "normal",
31
+ backgroundColor: "#ffffff",
32
+ foregroundColor: "#333333",
33
+ accentColor: "#007bff",
34
+ linkColor: "#007bff",
35
+ errorColor: "#dc3545",
36
+ successColor: "#28a745",
37
+ warningColor: "#ffc107",
38
+ };
39
+ /**
40
+ * High contrast theme overrides
41
+ */
42
+ const HIGH_CONTRAST_THEME = {
43
+ backgroundColor: "#000000",
44
+ foregroundColor: "#ffffff",
45
+ accentColor: "#ffff00",
46
+ linkColor: "#00ffff",
47
+ errorColor: "#ff0000",
48
+ successColor: "#00ff00",
49
+ warningColor: "#ffff00",
50
+ };
51
+ export class ThemeProvider {
52
+ currentTheme = { ...DEFAULT_THEME };
53
+ styleElement = null;
54
+ rootElement;
55
+ constructor(rootElement = typeof document !== "undefined"
56
+ ? document.documentElement
57
+ : null) {
58
+ this.rootElement = rootElement;
59
+ // SSR guard
60
+ if (typeof document === "undefined") {
61
+ console.warn("ThemeProvider: document not available (SSR context)");
62
+ return;
63
+ }
64
+ this.initializeStyles();
65
+ }
66
+ /**
67
+ * Initialize theme styles
68
+ */
69
+ initializeStyles() {
70
+ if (!this.rootElement)
71
+ return;
72
+ // Create style element if it doesn't exist
73
+ this.styleElement = document.getElementById("pie-theme-styles");
74
+ if (!this.styleElement) {
75
+ this.styleElement = document.createElement("style");
76
+ this.styleElement.id = "pie-theme-styles";
77
+ document.head.appendChild(this.styleElement);
78
+ }
79
+ // Apply default theme
80
+ this.applyTheme({});
81
+ }
82
+ /**
83
+ * Apply theme configuration
84
+ *
85
+ * @param config Partial theme configuration (merged with current theme)
86
+ */
87
+ applyTheme(config) {
88
+ if (!this.rootElement)
89
+ return;
90
+ // Merge with current theme
91
+ const newTheme = {
92
+ ...this.currentTheme,
93
+ ...config,
94
+ };
95
+ // Apply high contrast overrides if enabled
96
+ if (newTheme.highContrast) {
97
+ Object.assign(newTheme, HIGH_CONTRAST_THEME);
98
+ }
99
+ this.currentTheme = newTheme;
100
+ // Apply CSS custom properties
101
+ this.applyCSSVariables();
102
+ // Apply CSS classes
103
+ this.applyCSSClasses();
104
+ // Update global styles
105
+ this.updateGlobalStyles();
106
+ }
107
+ /**
108
+ * Apply CSS custom properties to root element
109
+ */
110
+ applyCSSVariables() {
111
+ if (!this.rootElement)
112
+ return;
113
+ const { fontSize, backgroundColor, foregroundColor, accentColor, linkColor, errorColor, successColor, warningColor, } = this.currentTheme;
114
+ // Font sizing
115
+ this.rootElement.style.setProperty("--pie-font-size-scale", String(FONT_SIZE_SCALE[fontSize]));
116
+ this.rootElement.style.setProperty("--pie-font-size-base", "1rem");
117
+ // Colors
118
+ this.rootElement.style.setProperty("--pie-bg-color", backgroundColor);
119
+ this.rootElement.style.setProperty("--pie-fg-color", foregroundColor);
120
+ this.rootElement.style.setProperty("--pie-accent-color", accentColor);
121
+ this.rootElement.style.setProperty("--pie-link-color", linkColor);
122
+ this.rootElement.style.setProperty("--pie-error-color", errorColor);
123
+ this.rootElement.style.setProperty("--pie-success-color", successColor);
124
+ this.rootElement.style.setProperty("--pie-warning-color", warningColor);
125
+ // Derived colors (with transparency)
126
+ this.rootElement.style.setProperty("--pie-bg-color-secondary", this.adjustOpacity(backgroundColor, 0.95));
127
+ this.rootElement.style.setProperty("--pie-border-color", this.adjustOpacity(foregroundColor, 0.2));
128
+ this.rootElement.style.setProperty("--pie-hover-color", this.adjustOpacity(accentColor, 0.1));
129
+ }
130
+ /**
131
+ * Apply CSS classes to root element
132
+ */
133
+ applyCSSClasses() {
134
+ if (!this.rootElement)
135
+ return;
136
+ const { highContrast, fontSize } = this.currentTheme;
137
+ // High contrast class
138
+ this.rootElement.classList.toggle("pie-high-contrast", highContrast);
139
+ // Font size classes
140
+ this.rootElement.classList.remove("pie-font-small", "pie-font-normal", "pie-font-large", "pie-font-xlarge");
141
+ this.rootElement.classList.add(`pie-font-${fontSize}`);
142
+ }
143
+ /**
144
+ * Update global theme styles
145
+ */
146
+ updateGlobalStyles() {
147
+ if (!this.styleElement)
148
+ return;
149
+ const { fontSize } = this.currentTheme;
150
+ const scale = FONT_SIZE_SCALE[fontSize];
151
+ this.styleElement.textContent = `
152
+ /* PIE Assessment Toolkit - Theme Styles */
153
+
154
+ /* Font scaling */
155
+ .pie-themed,
156
+ .pie-themed * {
157
+ font-size: calc(var(--pie-font-size-base) * var(--pie-font-size-scale, 1));
158
+ }
159
+
160
+ /* Color theming */
161
+ .pie-themed {
162
+ background-color: var(--pie-bg-color);
163
+ color: var(--pie-fg-color);
164
+ }
165
+
166
+ .pie-themed a {
167
+ color: var(--pie-link-color);
168
+ }
169
+
170
+ .pie-themed a:hover {
171
+ opacity: 0.8;
172
+ }
173
+
174
+ /* High contrast mode */
175
+ .pie-high-contrast .pie-themed {
176
+ border: 2px solid var(--pie-fg-color);
177
+ }
178
+
179
+ .pie-high-contrast .pie-themed a {
180
+ text-decoration: underline;
181
+ font-weight: bold;
182
+ }
183
+
184
+ .pie-high-contrast .pie-themed button {
185
+ border: 2px solid var(--pie-fg-color);
186
+ background-color: var(--pie-bg-color);
187
+ color: var(--pie-fg-color);
188
+ }
189
+
190
+ .pie-high-contrast .pie-themed button:hover {
191
+ background-color: var(--pie-fg-color);
192
+ color: var(--pie-bg-color);
193
+ }
194
+
195
+ /* Error/Success/Warning states */
196
+ .pie-themed .pie-error {
197
+ color: var(--pie-error-color);
198
+ }
199
+
200
+ .pie-themed .pie-success {
201
+ color: var(--pie-success-color);
202
+ }
203
+
204
+ .pie-themed .pie-warning {
205
+ color: var(--pie-warning-color);
206
+ }
207
+
208
+ /* Focus indicators (accessibility) */
209
+ .pie-themed *:focus-visible {
210
+ outline: 3px solid var(--pie-accent-color);
211
+ outline-offset: 2px;
212
+ }
213
+
214
+ .pie-high-contrast *:focus-visible {
215
+ outline-width: 4px;
216
+ }
217
+
218
+ /* Responsive font scaling */
219
+ @media (max-width: 768px) {
220
+ .pie-themed,
221
+ .pie-themed * {
222
+ font-size: calc(var(--pie-font-size-base) * var(--pie-font-size-scale, 1) * 0.9);
223
+ }
224
+ }
225
+ `;
226
+ }
227
+ /**
228
+ * Set high contrast mode
229
+ */
230
+ setHighContrast(enabled) {
231
+ this.applyTheme({ highContrast: enabled });
232
+ }
233
+ /**
234
+ * Set font size
235
+ */
236
+ setFontSize(size) {
237
+ this.applyTheme({ fontSize: size });
238
+ }
239
+ /**
240
+ * Set color scheme
241
+ */
242
+ setColors(colors) {
243
+ this.applyTheme(colors);
244
+ }
245
+ /**
246
+ * Get current theme configuration
247
+ */
248
+ getCurrentTheme() {
249
+ return { ...this.currentTheme };
250
+ }
251
+ /**
252
+ * Reset to default theme
253
+ */
254
+ reset() {
255
+ this.currentTheme = { ...DEFAULT_THEME };
256
+ this.applyTheme({});
257
+ }
258
+ /**
259
+ * Adjust color opacity (helper)
260
+ */
261
+ adjustOpacity(color, opacity) {
262
+ // Simple hex to rgba conversion
263
+ if (color.startsWith("#")) {
264
+ const r = parseInt(color.slice(1, 3), 16);
265
+ const g = parseInt(color.slice(3, 5), 16);
266
+ const b = parseInt(color.slice(5, 7), 16);
267
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
268
+ }
269
+ // If already rgba/rgb, just return as-is (simplified)
270
+ return color;
271
+ }
272
+ /**
273
+ * Cleanup - remove theme styles
274
+ */
275
+ destroy() {
276
+ if (this.styleElement) {
277
+ this.styleElement.remove();
278
+ this.styleElement = null;
279
+ }
280
+ if (!this.rootElement)
281
+ return;
282
+ // Remove CSS classes
283
+ this.rootElement.classList.remove("pie-high-contrast", "pie-font-small", "pie-font-normal", "pie-font-large", "pie-font-xlarge");
284
+ // Remove CSS custom properties
285
+ this.rootElement.style.removeProperty("--pie-font-size-scale");
286
+ this.rootElement.style.removeProperty("--pie-font-size-base");
287
+ this.rootElement.style.removeProperty("--pie-bg-color");
288
+ this.rootElement.style.removeProperty("--pie-fg-color");
289
+ this.rootElement.style.removeProperty("--pie-accent-color");
290
+ this.rootElement.style.removeProperty("--pie-link-color");
291
+ this.rootElement.style.removeProperty("--pie-error-color");
292
+ this.rootElement.style.removeProperty("--pie-success-color");
293
+ this.rootElement.style.removeProperty("--pie-warning-color");
294
+ this.rootElement.style.removeProperty("--pie-bg-color-secondary");
295
+ this.rootElement.style.removeProperty("--pie-border-color");
296
+ this.rootElement.style.removeProperty("--pie-hover-color");
297
+ }
298
+ }
299
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/services/ThemeProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * ToolConfigResolver
3
+ *
4
+ * Implements 3-tier hierarchy for tool configuration:
5
+ * Item requirements > Roster allowances > Student accommodations
6
+ *
7
+ * Ensures IEP/504 compliance by properly handling accommodation requirements
8
+ * while respecting item-level and test-level restrictions.
9
+ *
10
+ * Features:
11
+ * - 3-tier configuration hierarchy
12
+ * - IEP/504 accommodation support
13
+ * - Item-specific tool requirements
14
+ * - Test-level tool restrictions
15
+ * - Type-safe configuration
16
+ *
17
+ * Part of PIE Assessment Toolkit.
18
+ */
19
+ /**
20
+ * Tool allowance: "0" = blocked, "1" = allowed
21
+ */
22
+ export type ToolAllowance = "0" | "1";
23
+ /**
24
+ * Item-level tool configuration (most specific)
25
+ */
26
+ export interface ItemToolConfig {
27
+ [toolId: string]: {
28
+ type?: string;
29
+ required?: boolean;
30
+ settings?: any;
31
+ };
32
+ }
33
+ /**
34
+ * Roster/Test-level tool allowances (assessment-wide rules)
35
+ */
36
+ export interface RosterToolConfig {
37
+ [toolId: string]: ToolAllowance;
38
+ }
39
+ /**
40
+ * Student accommodation profile (least specific)
41
+ */
42
+ export interface StudentAccommodations {
43
+ accommodations: string[];
44
+ }
45
+ /**
46
+ * Resolved tool configuration
47
+ */
48
+ export interface ResolvedToolConfig {
49
+ enabled: boolean;
50
+ type?: string;
51
+ required?: boolean;
52
+ settings?: any;
53
+ source: "item" | "roster" | "student" | "default";
54
+ }
55
+ /**
56
+ * Full configuration input
57
+ */
58
+ export interface ToolConfigInput {
59
+ itemConfig?: ItemToolConfig;
60
+ rosterConfig?: RosterToolConfig;
61
+ studentProfile?: StudentAccommodations;
62
+ }
63
+ export declare class ToolConfigResolver {
64
+ /**
65
+ * Resolve configuration for a specific tool
66
+ *
67
+ * Hierarchy (highest to lowest priority):
68
+ * 1. Item level: Item requires scientific calculator → must provide
69
+ * 2. Roster level: Test blocks dictionary → blocked regardless of accommodation
70
+ * 3. Student level: IEP requires TTS → enabled unless blocked above
71
+ *
72
+ * @param toolId Tool identifier
73
+ * @param itemConfig Item-level tool configuration
74
+ * @param rosterConfig Roster-level tool allowances
75
+ * @param studentProfile Student accommodation profile
76
+ * @returns Resolved configuration or null if tool not available
77
+ */
78
+ resolveTool(toolId: string, itemConfig?: ItemToolConfig, rosterConfig?: RosterToolConfig, studentProfile?: StudentAccommodations): ResolvedToolConfig | null;
79
+ /**
80
+ * Resolve all tools from configuration
81
+ *
82
+ * @param input Configuration input
83
+ * @returns Map of tool ID to resolved configuration
84
+ */
85
+ resolveAll(input: ToolConfigInput): Map<string, ResolvedToolConfig>;
86
+ /**
87
+ * Check if a tool is enabled
88
+ *
89
+ * @param toolId Tool identifier
90
+ * @param input Configuration input
91
+ * @returns true if tool is enabled
92
+ */
93
+ isToolEnabled(toolId: string, input: ToolConfigInput): boolean;
94
+ /**
95
+ * Check if a tool is required
96
+ *
97
+ * @param toolId Tool identifier
98
+ * @param input Configuration input
99
+ * @returns true if tool is required
100
+ */
101
+ isToolRequired(toolId: string, input: ToolConfigInput): boolean;
102
+ /**
103
+ * Get tool type (e.g., 'scientific' for calculator)
104
+ *
105
+ * @param toolId Tool identifier
106
+ * @param input Configuration input
107
+ * @returns Tool type or null
108
+ */
109
+ getToolType(toolId: string, input: ToolConfigInput): string | null;
110
+ /**
111
+ * Get tool settings
112
+ *
113
+ * @param toolId Tool identifier
114
+ * @param input Configuration input
115
+ * @returns Tool settings or null
116
+ */
117
+ getToolSettings(toolId: string, input: ToolConfigInput): any | null;
118
+ /**
119
+ * Get list of all enabled tools
120
+ *
121
+ * @param input Configuration input
122
+ * @returns Array of enabled tool IDs
123
+ */
124
+ getEnabledTools(input: ToolConfigInput): string[];
125
+ /**
126
+ * Get list of required tools
127
+ *
128
+ * @param input Configuration input
129
+ * @returns Array of required tool IDs
130
+ */
131
+ getRequiredTools(input: ToolConfigInput): string[];
132
+ /**
133
+ * Validate that all required tools are available
134
+ *
135
+ * @param availableTools Set of available tool IDs
136
+ * @param input Configuration input
137
+ * @returns Object with validation result
138
+ */
139
+ validate(availableTools: Set<string>, input: ToolConfigInput): {
140
+ valid: boolean;
141
+ missingTools: string[];
142
+ };
143
+ /**
144
+ * Merge multiple roster configurations (for complex assessments)
145
+ *
146
+ * More restrictive settings win (blocked > allowed).
147
+ *
148
+ * @param configs Array of roster configurations
149
+ * @returns Merged configuration
150
+ */
151
+ mergeRosterConfigs(...configs: RosterToolConfig[]): RosterToolConfig;
152
+ /**
153
+ * Merge multiple student accommodation profiles
154
+ *
155
+ * Union of all accommodations.
156
+ *
157
+ * @param profiles Array of student profiles
158
+ * @returns Merged profile
159
+ */
160
+ mergeStudentProfiles(...profiles: StudentAccommodations[]): StudentAccommodations;
161
+ }
162
+ //# sourceMappingURL=ToolConfigResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolConfigResolver.d.ts","sourceRoot":"","sources":["../../src/services/ToolConfigResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,CAAC,MAAM,EAAE,MAAM,GAAG;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED,qBAAa,kBAAkB;IAC9B;;;;;;;;;;;;;OAaG;IACH,WAAW,CACV,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,cAAc,EAC3B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,cAAc,CAAC,EAAE,qBAAqB,GACpC,kBAAkB,GAAG,IAAI;IA8C5B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAsCnE;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO;IAU9D;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO;IAU/D;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI;IAUlE;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,GAAG,GAAG,IAAI;IAUnE;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAOjD;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAOlD;;;;;;OAMG;IACH,QAAQ,CACP,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,KAAK,EAAE,eAAe,GACpB;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE;IAY7C;;;;;;;OAOG;IACH,kBAAkB,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB;IAkBpE;;;;;;;OAOG;IACH,oBAAoB,CACnB,GAAG,QAAQ,EAAE,qBAAqB,EAAE,GAClC,qBAAqB;CAWxB"}