@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,174 @@
1
+ const TEST_SESSION_VERSION = 1;
2
+ const STORAGE_PREFIX = "pieoneer:testSession:v1:";
3
+ const ANON_DEVICE_ID_KEY = "pieoneer:anonymousDeviceId:v1";
4
+ export function createMemoryStorage(initial = {}) {
5
+ const store = new Map(Object.entries(initial));
6
+ return {
7
+ getItem: (k) => (store.has(k) ? store.get(k) : null),
8
+ setItem: (k, v) => {
9
+ store.set(k, v);
10
+ },
11
+ removeItem: (k) => {
12
+ store.delete(k);
13
+ },
14
+ };
15
+ }
16
+ export function getBrowserLocalStorage() {
17
+ try {
18
+ // eslint-disable-next-line no-undef
19
+ if (typeof window === "undefined")
20
+ return null;
21
+ // eslint-disable-next-line no-undef
22
+ if (!window.localStorage)
23
+ return null;
24
+ // eslint-disable-next-line no-undef
25
+ return window.localStorage;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function nowIso() {
32
+ return new Date().toISOString();
33
+ }
34
+ // Lightweight, deterministic hash for IDs (no crypto dependency).
35
+ function fnv1a32Hex(input) {
36
+ let hash = 0x811c9dc5; // offset basis
37
+ for (let i = 0; i < input.length; i++) {
38
+ hash ^= input.charCodeAt(i);
39
+ // hash *= 16777619 (with 32-bit overflow)
40
+ hash =
41
+ (hash +
42
+ ((hash << 1) +
43
+ (hash << 4) +
44
+ (hash << 7) +
45
+ (hash << 8) +
46
+ (hash << 24))) >>>
47
+ 0;
48
+ }
49
+ return hash.toString(16).padStart(8, "0");
50
+ }
51
+ function randomId() {
52
+ const cryptoAny = globalThis?.crypto;
53
+ const uuid = cryptoAny?.randomUUID?.();
54
+ if (typeof uuid === "string" && uuid.length > 0) {
55
+ return uuid;
56
+ }
57
+ return `anon_${Math.random().toString(16).slice(2)}_${Date.now().toString(16)}`;
58
+ }
59
+ export function getOrCreateAnonymousDeviceId(storage) {
60
+ const existing = storage.getItem(ANON_DEVICE_ID_KEY);
61
+ if (existing)
62
+ return existing;
63
+ const created = randomId();
64
+ storage.setItem(ANON_DEVICE_ID_KEY, created);
65
+ return created;
66
+ }
67
+ export function createTestSessionIdentifier(args) {
68
+ const { assessmentId, assignmentId, userId, storage } = args;
69
+ if (!assessmentId) {
70
+ throw new Error("assessmentId is required to create a TestSession identifier");
71
+ }
72
+ const subject = userId || getOrCreateAnonymousDeviceId(storage);
73
+ const source = `v1|${assessmentId}|${assignmentId || ""}|${subject}`;
74
+ const seed = fnv1a32Hex(source);
75
+ return { testSessionIdentifier: `ts_v1_${seed}`, seed };
76
+ }
77
+ export function getTestSessionStorageKey(testSessionIdentifier) {
78
+ return `${STORAGE_PREFIX}${testSessionIdentifier}`;
79
+ }
80
+ export function loadTestSession(storage, testSessionIdentifier) {
81
+ const raw = storage.getItem(getTestSessionStorageKey(testSessionIdentifier));
82
+ if (!raw)
83
+ return null;
84
+ try {
85
+ const parsed = JSON.parse(raw);
86
+ if (!parsed || parsed.version !== TEST_SESSION_VERSION)
87
+ return null;
88
+ if (parsed.testSessionIdentifier !== testSessionIdentifier)
89
+ return null;
90
+ return parsed;
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ export function saveTestSession(storage, session) {
97
+ const updated = {
98
+ ...session,
99
+ updatedAt: nowIso(),
100
+ };
101
+ storage.setItem(getTestSessionStorageKey(session.testSessionIdentifier), JSON.stringify(updated));
102
+ }
103
+ export function createNewTestSession(args) {
104
+ const startedAt = nowIso();
105
+ return {
106
+ version: TEST_SESSION_VERSION,
107
+ testSessionIdentifier: args.testSessionIdentifier,
108
+ assessmentId: args.assessmentId,
109
+ startedAt,
110
+ updatedAt: startedAt,
111
+ navigationState: {
112
+ currentItemIndex: -1,
113
+ visitedItemIdentifiers: [],
114
+ },
115
+ realization: {
116
+ seed: args.seed,
117
+ itemIdentifiers: args.itemIdentifiers,
118
+ },
119
+ itemSessions: {},
120
+ };
121
+ }
122
+ export function upsertVisitedItem(session, itemIdentifier) {
123
+ if (!itemIdentifier)
124
+ return session;
125
+ const visited = new Set(session.navigationState.visitedItemIdentifiers || []);
126
+ visited.add(itemIdentifier);
127
+ return {
128
+ ...session,
129
+ navigationState: {
130
+ ...session.navigationState,
131
+ visitedItemIdentifiers: Array.from(visited),
132
+ },
133
+ };
134
+ }
135
+ export function setCurrentPosition(session, args) {
136
+ return {
137
+ ...session,
138
+ navigationState: {
139
+ ...session.navigationState,
140
+ currentItemIndex: args.currentItemIndex,
141
+ currentSectionIdentifier: args.currentSectionIdentifier,
142
+ },
143
+ };
144
+ }
145
+ export function upsertItemSessionFromPieSessionChange(session, args) {
146
+ const { itemIdentifier, pieSessionId, isCompleted } = args;
147
+ if (!itemIdentifier || !pieSessionId)
148
+ return session;
149
+ const now = nowIso();
150
+ const existing = session.itemSessions[itemIdentifier];
151
+ const attemptCount = existing && existing.pieSessionId && existing.pieSessionId !== pieSessionId
152
+ ? existing.attemptCount + 1
153
+ : existing
154
+ ? existing.attemptCount
155
+ : 1;
156
+ const completed = !!(isCompleted ?? existing?.isCompleted);
157
+ const next = {
158
+ itemIdentifier,
159
+ pieSessionId,
160
+ attemptCount,
161
+ isCompleted: completed,
162
+ startedAt: existing?.startedAt || now,
163
+ updatedAt: now,
164
+ completedAt: completed ? existing?.completedAt || now : undefined,
165
+ };
166
+ return {
167
+ ...session,
168
+ itemSessions: {
169
+ ...session.itemSessions,
170
+ [itemIdentifier]: next,
171
+ },
172
+ };
173
+ }
174
+ //# sourceMappingURL=TestSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestSession.js","sourceRoot":"","sources":["../../src/attempt/TestSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * TypedEventBus
3
+ *
4
+ * Type-safe event bus built on native EventTarget.
5
+ * Provides zero-dependency, standards-based event communication
6
+ * between assessment components (items, tools, navigation, etc.).
7
+ *
8
+ * Features:
9
+ * - Type safety via TypeScript discriminated unions
10
+ * - Standard DOM CustomEvent with bubbles and composed
11
+ * - Framework-agnostic (works across shadow DOM boundaries)
12
+ * - No third-party dependencies
13
+ *
14
+ * Part of PIE Assessment Toolkit.
15
+ */
16
+ export declare class TypedEventBus<EventMap extends Record<string, any>> extends EventTarget {
17
+ /**
18
+ * Emit a typed event
19
+ *
20
+ * @param type Event type (must be key of EventMap)
21
+ * @param detail Event payload
22
+ * @returns true if event was dispatched successfully
23
+ */
24
+ emit<K extends keyof EventMap>(type: K, detail: EventMap[K]): boolean;
25
+ /**
26
+ * Listen for typed events
27
+ *
28
+ * @param type Event type to listen for
29
+ * @param listener Callback function receiving typed event
30
+ * @param options Standard addEventListener options
31
+ */
32
+ on<K extends keyof EventMap>(type: K, listener: (event: CustomEvent<EventMap[K]>) => void, options?: AddEventListenerOptions): void;
33
+ /**
34
+ * Remove event listener
35
+ *
36
+ * @param type Event type
37
+ * @param listener Callback to remove
38
+ */
39
+ off<K extends keyof EventMap>(type: K, listener: (event: CustomEvent<EventMap[K]>) => void): void;
40
+ /**
41
+ * Listen for event once (automatically removes listener after first trigger)
42
+ *
43
+ * @param type Event type to listen for
44
+ * @param listener Callback function
45
+ */
46
+ once<K extends keyof EventMap>(type: K, listener: (event: CustomEvent<EventMap[K]>) => void): void;
47
+ }
48
+ //# sourceMappingURL=TypedEventBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedEventBus.d.ts","sourceRoot":"","sources":["../../src/core/TypedEventBus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,qBAAa,aAAa,CACzB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACnC,SAAQ,WAAW;IACpB;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO;IAUrE;;;;;;OAMG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAC1B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EACnD,OAAO,CAAC,EAAE,uBAAuB,GAC/B,IAAI;IAIP;;;;;OAKG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAC3B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GACjD,IAAI;IAIP;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAC5B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GACjD,IAAI;CAKP"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * TypedEventBus
3
+ *
4
+ * Type-safe event bus built on native EventTarget.
5
+ * Provides zero-dependency, standards-based event communication
6
+ * between assessment components (items, tools, navigation, etc.).
7
+ *
8
+ * Features:
9
+ * - Type safety via TypeScript discriminated unions
10
+ * - Standard DOM CustomEvent with bubbles and composed
11
+ * - Framework-agnostic (works across shadow DOM boundaries)
12
+ * - No third-party dependencies
13
+ *
14
+ * Part of PIE Assessment Toolkit.
15
+ */
16
+ export class TypedEventBus extends EventTarget {
17
+ /**
18
+ * Emit a typed event
19
+ *
20
+ * @param type Event type (must be key of EventMap)
21
+ * @param detail Event payload
22
+ * @returns true if event was dispatched successfully
23
+ */
24
+ emit(type, detail) {
25
+ const event = new CustomEvent(String(type), {
26
+ detail,
27
+ bubbles: true,
28
+ composed: true,
29
+ });
30
+ return this.dispatchEvent(event);
31
+ }
32
+ /**
33
+ * Listen for typed events
34
+ *
35
+ * @param type Event type to listen for
36
+ * @param listener Callback function receiving typed event
37
+ * @param options Standard addEventListener options
38
+ */
39
+ on(type, listener, options) {
40
+ this.addEventListener(String(type), listener, options);
41
+ }
42
+ /**
43
+ * Remove event listener
44
+ *
45
+ * @param type Event type
46
+ * @param listener Callback to remove
47
+ */
48
+ off(type, listener) {
49
+ this.removeEventListener(String(type), listener);
50
+ }
51
+ /**
52
+ * Listen for event once (automatically removes listener after first trigger)
53
+ *
54
+ * @param type Event type to listen for
55
+ * @param listener Callback function
56
+ */
57
+ once(type, listener) {
58
+ this.addEventListener(String(type), listener, {
59
+ once: true,
60
+ });
61
+ }
62
+ }
63
+ //# sourceMappingURL=TypedEventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedEventBus.js","sourceRoot":"","sources":["../../src/core/TypedEventBus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,OAAO,aAEX,SAAQ,WAAW;IACpB;;;;;;OAMG;IACH,IAAI,CAA2B,IAAO,EAAE,MAAmB;QAC1D,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC3C,MAAM;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACH,EAAE,CACD,IAAO,EACP,QAAmD,EACnD,OAAiC;QAEjC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAyB,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACH,GAAG,CACF,IAAO,EACP,QAAmD;QAEnD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAyB,CAAC,CAAC;IACnE,CAAC;IAED;;;;;OAKG;IACH,IAAI,CACH,IAAO,EACP,QAAmD;QAEnD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAyB,EAAE;YAC9D,IAAI,EAAE,IAAI;SACV,CAAC,CAAC;IACJ,CAAC;CACD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * PIE Assessment Toolkit
3
+ *
4
+ * Independent, composable services for coordinating tools, accommodations,
5
+ * and item players in assessment applications.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export { TypedEventBus } from "./core/TypedEventBus";
10
+ export type { IAccessibilityCatalogResolver, IElementToolStateStore, IHighlightCoordinator, II18nService, IThemeProvider, IToolCoordinator, IToolkitCoordinator, ITTSService, ToolState, } from "./services/interfaces";
11
+ export type { CatalogLookupOptions, CatalogStatistics, CatalogType, ResolvedCatalog, } from "./services/AccessibilityCatalogResolver";
12
+ export { AccessibilityCatalogResolver } from "./services/AccessibilityCatalogResolver";
13
+ export { AssessmentAuthoringService } from "./services/AssessmentAuthoringService";
14
+ export { ContextVariableStore } from "./services/ContextVariableStore";
15
+ export { ElementToolStateStore } from "./services/ElementToolStateStore";
16
+ export type { Annotation } from "./services/HighlightCoordinator";
17
+ export { HighlightColor, HighlightCoordinator, HighlightType, } from "./services/HighlightCoordinator";
18
+ export type { I18nConfig, PluralTranslation, TranslationBundle, } from "./services/I18nService";
19
+ export { I18nService } from "./services/I18nService";
20
+ export { getAllPNPSupports, isPNPSupportRegistered, mapPNPSupportToToolId, mapToolIdToPNPSupport, PIE_TOOL_TO_PNP_MAP, PNP_TO_PIE_TOOL_MAP, registerCustomPNPMapping, } from "./services/PNPMapper";
21
+ export type { ResolvedToolConfig } from "./services/PNPToolResolver";
22
+ export { PNPToolResolver } from "./services/PNPToolResolver";
23
+ export type { ExtractionResult } from "./services/SSMLExtractor";
24
+ export { SSMLExtractor } from "./services/SSMLExtractor";
25
+ export type { FontSize, ThemeConfig } from "./services/ThemeProvider";
26
+ export { ThemeProvider } from "./services/ThemeProvider";
27
+ export { ToolCoordinator, ZIndexLayer } from "./services/ToolCoordinator";
28
+ export type { AnswerEliminatorToolConfig, ToolConfig, ToolkitCoordinatorConfig, ToolkitServiceBundle, TTSToolConfig, } from "./services/ToolkitCoordinator";
29
+ export { ToolkitCoordinator } from "./services/ToolkitCoordinator";
30
+ export type { TTSConfig } from "./services/TTSService";
31
+ export { PlaybackState, TTSService } from "./services/TTSService";
32
+ export { BrowserTTSProvider } from "./services/tts/browser-provider";
33
+ export type { ITTSProvider, ITTSProviderImplementation, TTSFeature, TTSProviderCapabilities, } from "./services/tts/provider-interface";
34
+ export type { CreateLoadItemOptions, LoadItem, LoadItemOptions, } from "./item-loader";
35
+ export { createFetchItemLoader, createLoadItem, ItemLoadError, } from "./item-loader";
36
+ export type { AssessmentCompletedEvent, AssessmentPausedEvent, AssessmentResumedEvent, AssessmentStartedEvent, AssessmentToolkitEvents, CanNavigateChangedEvent, InteractionEvent, InteractionType, ItemChangedEvent, ItemMetadata, LoadCompleteEvent, LocaleChangedEvent, LocaleLoadingCompleteEvent, LocaleLoadingErrorEvent, LocaleLoadingStartEvent, NavigationRequestEvent, PlayerErrorEvent, SessionChangedEvent, StateRestoredEvent, StateSavedEvent, SyncFailedEvent, ToolActivatedEvent, ToolDeactivatedEvent, ToolStateChangedEvent, } from "./types/events";
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrD,YAAY,EACX,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,SAAS,GACT,MAAM,uBAAuB,CAAC;AAO/B,YAAY,EACX,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,eAAe,GACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,YAAY,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EACN,cAAc,EACd,oBAAoB,EACpB,aAAa,GACb,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EACX,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACN,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE1E,YAAY,EACX,0BAA0B,EAC1B,UAAU,EACV,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,YAAY,EACX,YAAY,EACZ,0BAA0B,EAC1B,UAAU,EACV,uBAAuB,GACvB,MAAM,mCAAmC,CAAC;AAY3C,YAAY,EACX,qBAAqB,EACrB,QAAQ,EACR,eAAe,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,aAAa,GACb,MAAM,eAAe,CAAC;AAMvB,YAAY,EACX,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EAEtB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAEhB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACrB,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * PIE Assessment Toolkit
3
+ *
4
+ * Independent, composable services for coordinating tools, accommodations,
5
+ * and item players in assessment applications.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ // ============================================================================
10
+ // Core Infrastructure
11
+ // ============================================================================
12
+ export { TypedEventBus } from "./core/TypedEventBus";
13
+ export { AccessibilityCatalogResolver } from "./services/AccessibilityCatalogResolver";
14
+ export { AssessmentAuthoringService } from "./services/AssessmentAuthoringService";
15
+ // Context Variable Store (QTI 3.0 Context Declarations)
16
+ export { ContextVariableStore } from "./services/ContextVariableStore";
17
+ // Element Tool State Store (Element-level ephemeral tool state)
18
+ export { ElementToolStateStore } from "./services/ElementToolStateStore";
19
+ export { HighlightColor, HighlightCoordinator, HighlightType, } from "./services/HighlightCoordinator";
20
+ export { I18nService } from "./services/I18nService";
21
+ // PNP Mapper
22
+ export { getAllPNPSupports, isPNPSupportRegistered, mapPNPSupportToToolId, mapToolIdToPNPSupport, PIE_TOOL_TO_PNP_MAP, PNP_TO_PIE_TOOL_MAP, registerCustomPNPMapping, } from "./services/PNPMapper";
23
+ export { PNPToolResolver } from "./services/PNPToolResolver";
24
+ export { SSMLExtractor } from "./services/SSMLExtractor";
25
+ export { ThemeProvider } from "./services/ThemeProvider";
26
+ // Tool Coordinator
27
+ export { ToolCoordinator, ZIndexLayer } from "./services/ToolCoordinator";
28
+ export { ToolkitCoordinator } from "./services/ToolkitCoordinator";
29
+ export { PlaybackState, TTSService } from "./services/TTSService";
30
+ export { BrowserTTSProvider } from "./services/tts/browser-provider";
31
+ export { createFetchItemLoader, createLoadItem, ItemLoadError, } from "./item-loader";
32
+ // ============================================================================
33
+ // Players (Optional Reference Implementations)
34
+ // ============================================================================
35
+ // Assessment Player - Full assessment with navigation
36
+ // Note: Assessment player is optional and not exported by default.
37
+ // Products can import from './player/AssessmentPlayer' if desired.
38
+ // Section Player - Use @pie-players/pie-section-player web component instead
39
+ // ============================================================================
40
+ // Shared Components
41
+ // ============================================================================
42
+ // QuestionToolBar is exported via package.json exports field
43
+ // Import using: import QuestionToolBar from '@pie-players/pie-assessment-toolkit/components/QuestionToolBar.svelte';
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA6BrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,wDAAwD;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,gEAAgE;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EACN,cAAc,EACd,oBAAoB,EACpB,aAAa,GACb,MAAM,iCAAiC,CAAC;AAOzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,aAAa;AACb,OAAO,EACN,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAS1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAwBrE,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,aAAa,GACb,MAAM,eAAe,CAAC;AAmCvB,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,sDAAsD;AACtD,mEAAmE;AACnE,mEAAmE;AAEnE,6EAA6E;AAE7E,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,6DAA6D;AAC7D,qHAAqH"}
@@ -0,0 +1,45 @@
1
+ import type { ItemEntity } from "@pie-players/pie-players-shared";
2
+ export type LoadItemOptions = {
3
+ organizationId?: string | null;
4
+ };
5
+ export type LoadItem = (itemVId: string, opts?: LoadItemOptions) => Promise<ItemEntity>;
6
+ export declare class ItemLoadError extends Error {
7
+ readonly code: "ITEM_NOT_FOUND" | "NO_ITEM_BANK_OR_FETCH_CONFIG" | "FETCH_NOT_AVAILABLE" | "FETCH_FAILED";
8
+ constructor(code: ItemLoadError["code"], message: string);
9
+ }
10
+ export type CreateLoadItemOptions = {
11
+ /**
12
+ * Optional in-memory item bank. Keys are itemVId.
13
+ * This enables a no-backend default for demos/tests.
14
+ */
15
+ itemBank?: Record<string, ItemEntity>;
16
+ /**
17
+ * Optional base URL for an item API. If set, `createLoadItem` will fetch when
18
+ * an item is not present in `itemBank`.
19
+ *
20
+ * Example: `https://host.example.com`
21
+ */
22
+ fetchBaseUrl?: string;
23
+ /**
24
+ * Optional endpoint builder.
25
+ * Defaults to `/api/item/:itemVId` (and appends `?organizationId=...` if provided).
26
+ */
27
+ itemEndpoint?: string | ((itemVId: string, opts?: LoadItemOptions) => string);
28
+ /**
29
+ * Custom fetch implementation (useful for tests or hosts).
30
+ * Defaults to `globalThis.fetch`.
31
+ */
32
+ fetchImpl?: typeof fetch;
33
+ };
34
+ export declare function createFetchItemLoader(opts: {
35
+ baseUrl: string;
36
+ itemEndpoint?: CreateLoadItemOptions["itemEndpoint"];
37
+ fetchImpl?: typeof fetch;
38
+ }): LoadItem;
39
+ /**
40
+ * Client-resolvable default loader:
41
+ * - resolve from `itemBank` first (no backend required)
42
+ * - optionally fallback to fetch (encouraged backend hook)
43
+ */
44
+ export declare function createLoadItem(opts: CreateLoadItemOptions): LoadItem;
45
+ //# sourceMappingURL=item-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-loader.d.ts","sourceRoot":"","sources":["../src/item-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,eAAe,KAClB,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,qBAAa,aAAc,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EACV,gBAAgB,GAChB,8BAA8B,GAC9B,qBAAqB,GACrB,cAAc,CAAC;gBAEN,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM;CAKxD;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC,CAAC;IAE9E;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,CAAC;AASF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB,GAAG,QAAQ,CA6BX;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAgCpE"}
@@ -0,0 +1,62 @@
1
+ export class ItemLoadError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "ItemLoadError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ function defaultItemEndpoint(itemVId, opts) {
10
+ const url = new URL(`/api/item/${itemVId}`, "https://placeholder.invalid");
11
+ if (opts?.organizationId)
12
+ url.searchParams.set("organizationId", opts.organizationId);
13
+ return url.pathname + url.search;
14
+ }
15
+ export function createFetchItemLoader(opts) {
16
+ const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
17
+ if (!fetchImpl) {
18
+ throw new ItemLoadError("FETCH_NOT_AVAILABLE", "globalThis.fetch is not available in this environment");
19
+ }
20
+ return async (itemVId, loadOpts) => {
21
+ const endpointBuilder = typeof opts.itemEndpoint === "function"
22
+ ? opts.itemEndpoint
23
+ : typeof opts.itemEndpoint === "string"
24
+ ? () => opts.itemEndpoint
25
+ : defaultItemEndpoint;
26
+ const endpoint = endpointBuilder(itemVId, loadOpts);
27
+ const url = new URL(endpoint, opts.baseUrl);
28
+ const res = await fetchImpl(url.toString());
29
+ if (!res.ok) {
30
+ throw new ItemLoadError("FETCH_FAILED", `Failed to load item ${itemVId}: ${res.status} ${res.statusText}`);
31
+ }
32
+ return (await res.json());
33
+ };
34
+ }
35
+ /**
36
+ * Client-resolvable default loader:
37
+ * - resolve from `itemBank` first (no backend required)
38
+ * - optionally fallback to fetch (encouraged backend hook)
39
+ */
40
+ export function createLoadItem(opts) {
41
+ const itemBank = opts.itemBank;
42
+ const fetchBaseUrl = opts.fetchBaseUrl;
43
+ const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
44
+ const fetchLoader = fetchBaseUrl && typeof fetchImpl === "function"
45
+ ? createFetchItemLoader({
46
+ baseUrl: fetchBaseUrl,
47
+ itemEndpoint: opts.itemEndpoint,
48
+ fetchImpl,
49
+ })
50
+ : null;
51
+ return async (itemVId, loadOpts) => {
52
+ if (itemBank?.[itemVId])
53
+ return itemBank[itemVId];
54
+ if (fetchLoader)
55
+ return await fetchLoader(itemVId, loadOpts);
56
+ if (fetchBaseUrl && typeof fetchImpl !== "function") {
57
+ throw new ItemLoadError("FETCH_NOT_AVAILABLE", "fetchBaseUrl was provided but globalThis.fetch is not available");
58
+ }
59
+ throw new ItemLoadError("NO_ITEM_BANK_OR_FETCH_CONFIG", "No itemBank entry and no fetchBaseUrl configured for item loading");
60
+ };
61
+ }
62
+ //# sourceMappingURL=item-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-loader.js","sourceRoot":"","sources":["../src/item-loader.ts"],"names":[],"mappings":"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"}