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