@pie-players/pie-assessment-toolkit 0.2.5 → 0.2.9

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 (257) hide show
  1. package/README.md +200 -67
  2. package/dist/attempt/TestSession.d.ts +23 -21
  3. package/dist/attempt/TestSession.d.ts.map +1 -1
  4. package/dist/attempt/TestSession.js +17 -15
  5. package/dist/attempt/TestSession.js.map +1 -1
  6. package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts +50 -0
  7. package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts.map +1 -0
  8. package/dist/attempt/adapters/activity-to-test-attempt-session.js +135 -0
  9. package/dist/attempt/adapters/activity-to-test-attempt-session.js.map +1 -0
  10. package/dist/components/ItemToolBar.custom-element.js +628 -0
  11. package/dist/components/PieAssessmentToolkit.custom-element.js +670 -0
  12. package/dist/components/item-toolbar-element.d.ts +3 -0
  13. package/dist/components/item-toolbar-element.d.ts.map +1 -0
  14. package/dist/components/item-toolbar-element.js +2 -0
  15. package/dist/components/item-toolbar-element.js.map +1 -0
  16. package/dist/components/pie-assessment-toolkit-element.d.ts +3 -0
  17. package/dist/components/pie-assessment-toolkit-element.d.ts.map +1 -0
  18. package/dist/components/pie-assessment-toolkit-element.js +2 -0
  19. package/dist/components/pie-assessment-toolkit-element.js.map +1 -0
  20. package/dist/context/assessment-toolkit-context.d.ts +52 -0
  21. package/dist/context/assessment-toolkit-context.d.ts.map +1 -0
  22. package/dist/context/assessment-toolkit-context.js +6 -0
  23. package/dist/context/assessment-toolkit-context.js.map +1 -0
  24. package/dist/context/runtime-context-consumer.d.ts +14 -0
  25. package/dist/context/runtime-context-consumer.d.ts.map +1 -0
  26. package/dist/context/runtime-context-consumer.js +52 -0
  27. package/dist/context/runtime-context-consumer.js.map +1 -0
  28. package/dist/index.d.ts +53 -42
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +34 -32
  31. package/dist/index.js.map +1 -1
  32. package/dist/runtime/RuntimeRegistry.d.ts +13 -0
  33. package/dist/runtime/RuntimeRegistry.d.ts.map +1 -0
  34. package/dist/runtime/RuntimeRegistry.js +50 -0
  35. package/dist/runtime/RuntimeRegistry.js.map +1 -0
  36. package/dist/runtime/SectionRuntimeEngine.d.ts +45 -0
  37. package/dist/runtime/SectionRuntimeEngine.d.ts.map +1 -0
  38. package/dist/runtime/SectionRuntimeEngine.js +81 -0
  39. package/dist/runtime/SectionRuntimeEngine.js.map +1 -0
  40. package/dist/runtime/registration-events.d.ts +19 -0
  41. package/dist/runtime/registration-events.d.ts.map +1 -0
  42. package/dist/runtime/registration-events.js +4 -0
  43. package/dist/runtime/registration-events.js.map +1 -0
  44. package/dist/runtime/runtime-event-guards.d.ts +3 -0
  45. package/dist/runtime/runtime-event-guards.d.ts.map +1 -0
  46. package/dist/runtime/runtime-event-guards.js +9 -0
  47. package/dist/runtime/runtime-event-guards.js.map +1 -0
  48. package/dist/runtime/tool-host-contract.d.ts +30 -0
  49. package/dist/runtime/tool-host-contract.d.ts.map +1 -0
  50. package/dist/runtime/tool-host-contract.js +48 -0
  51. package/dist/runtime/tool-host-contract.js.map +1 -0
  52. package/dist/services/HighlightCoordinator.d.ts +2 -2
  53. package/dist/services/HighlightCoordinator.d.ts.map +1 -1
  54. package/dist/services/HighlightCoordinator.js +1 -1
  55. package/dist/services/HighlightCoordinator.js.map +1 -1
  56. package/dist/services/I18nService.js +1 -1
  57. package/dist/services/I18nService.js.map +1 -1
  58. package/dist/services/PNPToolResolver.d.ts +2 -2
  59. package/dist/services/PNPToolResolver.d.ts.map +1 -1
  60. package/dist/services/PNPToolResolver.js +1 -1
  61. package/dist/services/PNPToolResolver.js.map +1 -1
  62. package/dist/services/TTSService.d.ts +5 -3
  63. package/dist/services/TTSService.d.ts.map +1 -1
  64. package/dist/services/TTSService.js +13 -12
  65. package/dist/services/TTSService.js.map +1 -1
  66. package/dist/services/ThemeProvider.d.ts +2 -1
  67. package/dist/services/ThemeProvider.d.ts.map +1 -1
  68. package/dist/services/ThemeProvider.js +82 -46
  69. package/dist/services/ThemeProvider.js.map +1 -1
  70. package/dist/services/ToolConfigResolver.d.ts +1 -1
  71. package/dist/services/ToolConfigResolver.js +1 -1
  72. package/dist/services/ToolCoordinator.d.ts +2 -2
  73. package/dist/services/ToolCoordinator.d.ts.map +1 -1
  74. package/dist/services/ToolCoordinator.js +1 -1
  75. package/dist/services/ToolCoordinator.js.map +1 -1
  76. package/dist/services/ToolRegistry.d.ts +66 -69
  77. package/dist/services/ToolRegistry.d.ts.map +1 -1
  78. package/dist/services/ToolRegistry.js +72 -22
  79. package/dist/services/ToolRegistry.js.map +1 -1
  80. package/dist/services/ToolkitCoordinator.d.ts +112 -14
  81. package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
  82. package/dist/services/ToolkitCoordinator.js +508 -77
  83. package/dist/services/ToolkitCoordinator.js.map +1 -1
  84. package/dist/services/createDefaultToolRegistry.d.ts +15 -10
  85. package/dist/services/createDefaultToolRegistry.d.ts.map +1 -1
  86. package/dist/services/createDefaultToolRegistry.js +13 -17
  87. package/dist/services/createDefaultToolRegistry.js.map +1 -1
  88. package/dist/services/defaultPersonalNeedsProfile.d.ts +4 -0
  89. package/dist/services/defaultPersonalNeedsProfile.d.ts.map +1 -0
  90. package/dist/services/defaultPersonalNeedsProfile.js +25 -0
  91. package/dist/services/defaultPersonalNeedsProfile.js.map +1 -0
  92. package/dist/services/interfaces.d.ts +67 -7
  93. package/dist/services/interfaces.d.ts.map +1 -1
  94. package/dist/services/interfaces.js.map +1 -1
  95. package/dist/services/pnp-standard-features.d.ts +3 -4
  96. package/dist/services/pnp-standard-features.d.ts.map +1 -1
  97. package/dist/services/pnp-standard-features.js +0 -3
  98. package/dist/services/pnp-standard-features.js.map +1 -1
  99. package/dist/services/section-controller-types.d.ts +32 -0
  100. package/dist/services/section-controller-types.d.ts.map +1 -0
  101. package/dist/services/section-controller-types.js +2 -0
  102. package/dist/services/section-controller-types.js.map +1 -0
  103. package/dist/services/tool-context.d.ts +4 -4
  104. package/dist/services/tool-context.d.ts.map +1 -1
  105. package/dist/services/tool-context.js +106 -17
  106. package/dist/services/tool-context.js.map +1 -1
  107. package/dist/services/tool-instance-id.d.ts +17 -0
  108. package/dist/services/tool-instance-id.d.ts.map +1 -0
  109. package/dist/services/tool-instance-id.js +61 -0
  110. package/dist/services/tool-instance-id.js.map +1 -0
  111. package/dist/services/tool-providers/DesmosToolProvider.d.ts +1 -1
  112. package/dist/services/tool-providers/DesmosToolProvider.d.ts.map +1 -1
  113. package/dist/services/tool-providers/IToolProvider.d.ts +2 -3
  114. package/dist/services/tool-providers/IToolProvider.d.ts.map +1 -1
  115. package/dist/services/tool-providers/IToolProvider.js +1 -2
  116. package/dist/services/tool-providers/IToolProvider.js.map +1 -1
  117. package/dist/services/tool-providers/MathJsToolProvider.d.ts +25 -0
  118. package/dist/services/tool-providers/MathJsToolProvider.d.ts.map +1 -0
  119. package/dist/services/tool-providers/MathJsToolProvider.js +53 -0
  120. package/dist/services/tool-providers/MathJsToolProvider.js.map +1 -0
  121. package/dist/services/tool-providers/TIToolProvider.d.ts +1 -1
  122. package/dist/services/tool-providers/TIToolProvider.d.ts.map +1 -1
  123. package/dist/services/tool-providers/TIToolProvider.js +1 -1
  124. package/dist/services/tool-providers/TIToolProvider.js.map +1 -1
  125. package/dist/services/tool-providers/TTSToolProvider.d.ts +1 -1
  126. package/dist/services/tool-providers/TTSToolProvider.d.ts.map +1 -1
  127. package/dist/services/tool-providers/TTSToolProvider.js +1 -1
  128. package/dist/services/tool-providers/TTSToolProvider.js.map +1 -1
  129. package/dist/services/tool-providers/ToolProviderRegistry.d.ts +1 -1
  130. package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +1 -1
  131. package/dist/services/tool-providers/index.d.ts +11 -9
  132. package/dist/services/tool-providers/index.d.ts.map +1 -1
  133. package/dist/services/tool-providers/index.js +5 -4
  134. package/dist/services/tool-providers/index.js.map +1 -1
  135. package/dist/services/tools-config-normalizer.d.ts +26 -0
  136. package/dist/services/tools-config-normalizer.d.ts.map +1 -0
  137. package/dist/services/tools-config-normalizer.js +63 -0
  138. package/dist/services/tools-config-normalizer.js.map +1 -0
  139. package/dist/services/tts/provider-interface.d.ts +1 -1
  140. package/dist/services/tts/provider-interface.d.ts.map +1 -1
  141. package/dist/tools/calculators/desmos-provider.js +1 -1
  142. package/dist/tools/calculators/desmos-provider.js.map +1 -1
  143. package/dist/tools/calculators/mathjs-provider.js +1 -1
  144. package/dist/tools/calculators/mathjs-provider.js.map +1 -1
  145. package/dist/tools/calculators/ti-provider.d.ts.map +1 -1
  146. package/dist/tools/calculators/ti-provider.js +127 -4
  147. package/dist/tools/calculators/ti-provider.js.map +1 -1
  148. package/dist/tools/client.d.ts +9 -8
  149. package/dist/tools/client.d.ts.map +1 -1
  150. package/dist/tools/client.js +9 -8
  151. package/dist/tools/client.js.map +1 -1
  152. package/dist/tools/default-tool-module-loaders.d.ts +9 -0
  153. package/dist/tools/default-tool-module-loaders.d.ts.map +1 -0
  154. package/dist/tools/default-tool-module-loaders.js +17 -0
  155. package/dist/tools/default-tool-module-loaders.js.map +1 -0
  156. package/dist/tools/index.d.ts +4 -3
  157. package/dist/tools/index.d.ts.map +1 -1
  158. package/dist/tools/index.js +4 -3
  159. package/dist/tools/index.js.map +1 -1
  160. package/dist/tools/library-loader.d.ts +2 -2
  161. package/dist/tools/library-loader.d.ts.map +1 -1
  162. package/dist/tools/library-loader.js +7 -2
  163. package/dist/tools/library-loader.js.map +1 -1
  164. package/dist/tools/registrations/accessibility-tools.d.ts +2 -10
  165. package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
  166. package/dist/tools/registrations/accessibility-tools.js +97 -115
  167. package/dist/tools/registrations/accessibility-tools.js.map +1 -1
  168. package/dist/tools/registrations/calculator.d.ts +3 -3
  169. package/dist/tools/registrations/calculator.d.ts.map +1 -1
  170. package/dist/tools/registrations/calculator.js +35 -56
  171. package/dist/tools/registrations/calculator.js.map +1 -1
  172. package/dist/tools/registrations/interaction-tools.d.ts +1 -1
  173. package/dist/tools/registrations/interaction-tools.d.ts.map +1 -1
  174. package/dist/tools/registrations/interaction-tools.js +79 -54
  175. package/dist/tools/registrations/interaction-tools.js.map +1 -1
  176. package/dist/tools/registrations/measurement-tools.d.ts +1 -1
  177. package/dist/tools/registrations/measurement-tools.d.ts.map +1 -1
  178. package/dist/tools/registrations/measurement-tools.js +65 -40
  179. package/dist/tools/registrations/measurement-tools.js.map +1 -1
  180. package/dist/tools/registrations/subject-specific-tools.d.ts +1 -1
  181. package/dist/tools/registrations/subject-specific-tools.d.ts.map +1 -1
  182. package/dist/tools/registrations/subject-specific-tools.js +65 -40
  183. package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
  184. package/dist/tools/registrations/tts.d.ts +2 -2
  185. package/dist/tools/registrations/tts.d.ts.map +1 -1
  186. package/dist/tools/registrations/tts.js +28 -42
  187. package/dist/tools/registrations/tts.js.map +1 -1
  188. package/dist/tools/response-discovery.d.ts +13 -15
  189. package/dist/tools/response-discovery.d.ts.map +1 -1
  190. package/dist/tools/response-discovery.js +23 -80
  191. package/dist/tools/response-discovery.js.map +1 -1
  192. package/dist/tools/tool-coordinator.d.ts +1 -1
  193. package/dist/tools/tool-coordinator.d.ts.map +1 -1
  194. package/dist/tools/tool-tag-map.d.ts +4 -4
  195. package/dist/tools/tool-tag-map.d.ts.map +1 -1
  196. package/dist/tools/tool-tag-map.js +2 -3
  197. package/dist/tools/tool-tag-map.js.map +1 -1
  198. package/dist/tools/types.d.ts +3 -1
  199. package/dist/tools/types.d.ts.map +1 -1
  200. package/dist/tools/variant-resolver.d.ts +1 -1
  201. package/dist/tools/variant-resolver.d.ts.map +1 -1
  202. package/package.json +25 -28
  203. package/src/README.md +16 -32
  204. package/src/components/ItemToolBar.svelte +489 -0
  205. package/src/components/PNPProvenanceViewer.svelte +14 -4
  206. package/src/components/PieAssessmentToolkit.svelte +517 -0
  207. package/src/components/ToolButton.svelte +11 -11
  208. package/src/components/ToolButtonGroup.svelte +27 -11
  209. package/src/tools/README.md +6 -5
  210. package/src/tools/calculators/README.md +4 -4
  211. package/dist/player/AssessmentPlayer.d.ts +0 -397
  212. package/dist/player/AssessmentPlayer.d.ts.map +0 -1
  213. package/dist/player/AssessmentPlayer.js +0 -974
  214. package/dist/player/AssessmentPlayer.js.map +0 -1
  215. package/dist/player/index.d.ts +0 -17
  216. package/dist/player/index.d.ts.map +0 -1
  217. package/dist/player/index.js +0 -15
  218. package/dist/player/index.js.map +0 -1
  219. package/dist/player/navigation-types.d.ts +0 -63
  220. package/dist/player/navigation-types.d.ts.map +0 -1
  221. package/dist/player/navigation-types.js +0 -7
  222. package/dist/player/navigation-types.js.map +0 -1
  223. package/dist/player/qti-navigation.d.ts +0 -29
  224. package/dist/player/qti-navigation.d.ts.map +0 -1
  225. package/dist/player/qti-navigation.js +0 -160
  226. package/dist/player/qti-navigation.js.map +0 -1
  227. package/dist/reference-layout/index.d.ts +0 -19
  228. package/dist/reference-layout/index.d.ts.map +0 -1
  229. package/dist/reference-layout/index.js +0 -20
  230. package/dist/reference-layout/index.js.map +0 -1
  231. package/dist/services/AnnotationToolbarConfig.d.ts +0 -134
  232. package/dist/services/AnnotationToolbarConfig.d.ts.map +0 -1
  233. package/dist/services/AnnotationToolbarConfig.js +0 -100
  234. package/dist/services/AnnotationToolbarConfig.js.map +0 -1
  235. package/dist/services/AssessmentAuthoringService.d.ts +0 -60
  236. package/dist/services/AssessmentAuthoringService.d.ts.map +0 -1
  237. package/dist/services/AssessmentAuthoringService.js +0 -183
  238. package/dist/services/AssessmentAuthoringService.js.map +0 -1
  239. package/dist/services/PNPMapper.d.ts +0 -81
  240. package/dist/services/PNPMapper.d.ts.map +0 -1
  241. package/dist/services/PNPMapper.js +0 -108
  242. package/dist/services/PNPMapper.js.map +0 -1
  243. package/src/components/PNPProfileTester.example.svelte +0 -188
  244. package/src/components/PNPProfileTester.svelte +0 -397
  245. package/src/components/QuestionToolBar.svelte +0 -483
  246. package/src/player/AssessmentLayout.svelte +0 -68
  247. package/src/player/README.md +0 -154
  248. package/src/reference-layout/README.md +0 -135
  249. package/src/reference-layout/ReferenceLayout.svelte +0 -201
  250. package/src/reference-layout/components/AssessmentContent.svelte +0 -259
  251. package/src/reference-layout/components/AssessmentFooter.svelte +0 -89
  252. package/src/reference-layout/components/AssessmentHeader.svelte +0 -250
  253. package/src/reference-layout/components/AssessmentNavigation.svelte +0 -134
  254. package/src/reference-layout/components/AssessmentToolsBar.svelte +0 -176
  255. package/src/reference-layout/components/ItemPanel.svelte +0 -200
  256. package/src/reference-layout/components/NotesPanel.svelte +0 -179
  257. package/src/reference-layout/components/PassagePanel.svelte +0 -76
@@ -0,0 +1,628 @@
1
+ // @ts-nocheck
2
+ import 'svelte/internal/disclose-version';
3
+ import * as $ from 'svelte/internal/client';
4
+
5
+ import {
6
+ connectAssessmentToolkitRuntimeContext,
7
+ connectAssessmentToolkitShellContext
8
+ } from '../context/runtime-context-consumer.js';
9
+
10
+ import { createDefaultToolRegistry } from '../services/createDefaultToolRegistry.js';
11
+ import { DEFAULT_TOOL_MODULE_LOADERS } from '../tools/default-tool-module-loaders.js';
12
+ import { normalizeToolsConfig, parseToolList, resolveToolsForLevel } from '../services/tools-config-normalizer.js';
13
+ import { createScopedToolId, parseScopedToolId } from '../services/tool-instance-id.js';
14
+
15
+ var root_3 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
16
+ var root_6 = $.from_html(`<img class="item-toolbar__icon-image svelte-rnx3ie" alt=""/>`);
17
+ var root_7 = $.from_html(`<i aria-hidden="true"></i>`);
18
+ var root_4 = $.from_html(`<button type="button"><!></button>`);
19
+ var root_8 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
20
+ var root_2 = $.from_html(`<!> <!> <!>`, 1);
21
+ var root_1 = $.from_html(`<div></div>`);
22
+
23
+ const $$css = {
24
+ hash: 'svelte-rnx3ie',
25
+ code: '.item-toolbar.svelte-rnx3ie {display:flex;align-items:center;gap:0.5rem;}.item-toolbar__button.svelte-rnx3ie {display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0.25rem;border:1px solid var(--pie-border, #ccc);border-radius:0.25rem;background-color:var(--pie-background, white);color:var(--pie-text, #333);cursor:pointer;transition:all 0.15s ease;}.item-toolbar__element-host.svelte-rnx3ie {display:contents;}.item-toolbar--sm.svelte-rnx3ie .item-toolbar__button:where(.svelte-rnx3ie) {width:2.75rem;height:2.75rem;}.item-toolbar--lg.svelte-rnx3ie .item-toolbar__button:where(.svelte-rnx3ie) {width:2.5rem;height:2.5rem;}.item-toolbar__button.svelte-rnx3ie:hover:not(:disabled) {background-color:var(--pie-secondary-background, #f5f5f5);transform:translateY(-1px);box-shadow:0 2px 4px rgba(0, 0, 0, 0.1);}.item-toolbar__button.svelte-rnx3ie:active:not(:disabled) {transform:translateY(0);box-shadow:none;}.item-toolbar__button--active.svelte-rnx3ie {background-color:var(--pie-primary, #1976d2);color:white;border-color:var(--pie-primary, #1976d2);}.item-toolbar__button--active.svelte-rnx3ie:hover:not(:disabled) {background-color:var(--pie-primary-dark, #1565c0);}.item-toolbar__button.svelte-rnx3ie:focus-visible {outline:2px solid var(--pie-primary, #1976d2);outline-offset:2px;}.item-toolbar__button.svelte-rnx3ie:disabled {opacity:0.5;cursor:not-allowed;}.item-toolbar__button.svelte-rnx3ie svg {width:100%;height:100%;}.item-toolbar__icon-image.svelte-rnx3ie {width:100%;height:100%;object-fit:contain;}'
26
+ };
27
+
28
+ export default function ItemToolBar($$anchor, $$props) {
29
+ $.push($$props, true);
30
+ $.append_styles($$anchor, $$css);
31
+
32
+ const isBrowser = typeof window !== 'undefined';
33
+ const fallbackToolRegistry = createDefaultToolRegistry({ toolModuleLoaders: DEFAULT_TOOL_MODULE_LOADERS });
34
+ let activeToolState = $.state($.proxy({}));
35
+
36
+ // Props
37
+ let itemId = $.prop($$props, 'itemId', 7, ''),
38
+ catalogId = $.prop($$props, 'catalogId', 7, ''),
39
+ tools = $.prop($$props, 'tools', 7, 'calculator,textToSpeech,answerEliminator'),
40
+ contentKind = $.prop($$props, 'contentKind', 7, 'assessment-item'),
41
+ scopeElement = $.prop($$props, 'scopeElement', 7, null),
42
+ toolRegistry = $.prop($$props, 'toolRegistry', 7, null),
43
+ pnpResolver = $.prop($$props, 'pnpResolver', 7, null),
44
+ assessment = $.prop($$props, 'assessment', 7, null),
45
+ itemRef = $.prop($$props, 'itemRef', 7, null),
46
+ item = $.prop($$props, 'item', 7, null),
47
+ className = $.prop($$props, 'class', 7, ''),
48
+ size = $.prop($$props, 'size', 7, 'md'),
49
+ language = $.prop($$props, 'language', 7, 'en-US');
50
+
51
+ let toolbarRootElement = $.state(null);
52
+ let runtimeContext = $.state(null);
53
+ let shellContext = $.state(null);
54
+ let moduleLoadVersion = $.state(0);
55
+
56
+ $.user_effect(() => {
57
+ if (!$.get(toolbarRootElement)) return;
58
+
59
+ return connectAssessmentToolkitRuntimeContext($.get(toolbarRootElement), (value) => {
60
+ $.set(runtimeContext, value, true);
61
+ });
62
+ });
63
+
64
+ $.user_effect(() => {
65
+ if (!$.get(toolbarRootElement)) return;
66
+
67
+ return connectAssessmentToolkitShellContext($.get(toolbarRootElement), (value) => {
68
+ $.set(shellContext, value, true);
69
+ });
70
+ });
71
+
72
+ const effectiveToolCoordinator = $.derived(() => $.get(runtimeContext)?.toolCoordinator);
73
+ const effectiveTTSService = $.derived(() => $.get(runtimeContext)?.ttsService);
74
+ const effectiveElementToolStateStore = $.derived(() => $.get(runtimeContext)?.elementToolStateStore);
75
+ const effectiveAssessmentId = $.derived(() => $.get(runtimeContext)?.assessmentId ?? '');
76
+ const effectiveSectionId = $.derived(() => $.get(runtimeContext)?.sectionId ?? '');
77
+ const effectiveItemId = $.derived(() => itemId() || $.get(shellContext)?.itemId || '');
78
+ const effectiveCanonicalItemId = $.derived(() => $.get(shellContext)?.canonicalItemId || $.get(effectiveItemId));
79
+ const effectiveCatalogId = $.derived(() => catalogId() || $.get(effectiveItemId));
80
+ const effectiveContentKind = $.derived(() => contentKind() || $.get(shellContext)?.contentKind || 'assessment-item');
81
+ const effectiveItem = $.derived(() => item() || $.get(shellContext)?.item || null);
82
+
83
+ // Effective registry for visibility and metadata ownership.
84
+ const effectiveToolRegistry = $.derived(() => toolRegistry() || fallbackToolRegistry);
85
+
86
+ const explicitTools = $.derived(() => parseToolList(tools()));
87
+ const normalizedExplicitTools = $.derived(() => $.get(effectiveToolRegistry).normalizeToolIds($.get(explicitTools)).filter(Boolean));
88
+
89
+ const effectiveToolsConfig = $.derived(() => {
90
+ const coordinatorConfig = $.get(runtimeContext)?.toolkitCoordinator?.config?.tools;
91
+
92
+ return normalizeToolsConfig(coordinatorConfig || {});
93
+ });
94
+
95
+ const placementLevel = $.derived(() => $.get(effectiveContentKind) === 'rubric-block-stimulus' ? 'passage' : 'item');
96
+
97
+ const placementAllowedToolIds = $.derived(() => {
98
+ const resolved = resolveToolsForLevel($.get(effectiveToolsConfig), $.get(placementLevel));
99
+
100
+ return $.get(effectiveToolRegistry).normalizeToolIds(resolved).filter(Boolean);
101
+ });
102
+
103
+ // Pass 1: determine allowed tools
104
+ const allowedToolIds = $.derived(() => {
105
+ const configuredTools = $.get(normalizedExplicitTools).length > 0
106
+ ? $.get(normalizedExplicitTools)
107
+ : $.get(placementAllowedToolIds);
108
+
109
+ if (pnpResolver() && assessment() && itemRef()) {
110
+ const allowedByPnp = pnpResolver().getAllowedToolIds(assessment(), itemRef());
111
+
112
+ if (configuredTools.length === 0) return allowedByPnp;
113
+
114
+ return allowedByPnp.filter((toolId) => configuredTools.includes(toolId));
115
+ }
116
+
117
+ return configuredTools;
118
+ });
119
+
120
+ const contentReady = $.derived(() => {
121
+ const config = $.get(effectiveItem)?.config;
122
+
123
+ return !!($.get(effectiveItem) && config && typeof config === 'object');
124
+ });
125
+
126
+ const toolContext = $.derived(() => {
127
+ if (!$.get(contentReady) || !$.get(effectiveItem)) {
128
+ return null;
129
+ }
130
+
131
+ return {
132
+ level: 'item',
133
+ assessment: assessment() || {},
134
+ itemRef: itemRef() || { id: $.get(effectiveCanonicalItemId) },
135
+ item: $.get(effectiveItem)
136
+ };
137
+ });
138
+
139
+ const renderContext = $.derived(() => {
140
+ if ($.get(toolContext)) return $.get(toolContext);
141
+
142
+ return {
143
+ level: 'item',
144
+ assessment: assessment() || {},
145
+ itemRef: itemRef() || { id: $.get(effectiveCanonicalItemId) },
146
+ item: $.get(effectiveItem) || { id: $.get(effectiveCanonicalItemId), config: {} }
147
+ };
148
+ });
149
+
150
+ const elementContexts = $.derived(() => {
151
+ if (!$.get(contentReady) || !$.get(effectiveItem)) return [];
152
+
153
+ const modelsRaw = $.get(effectiveItem)?.config?.models;
154
+
155
+ const models = Array.isArray(modelsRaw)
156
+ ? modelsRaw
157
+ : modelsRaw && typeof modelsRaw === 'object' ? Object.values(modelsRaw) : [];
158
+
159
+ return models.filter((model) => model && typeof model === 'object' && typeof model.id === 'string').map((model) => ({
160
+ level: 'element',
161
+ assessment: assessment() || {},
162
+ itemRef: itemRef() || { id: $.get(effectiveCanonicalItemId) },
163
+ item: $.get(effectiveItem),
164
+ elementId: model.id
165
+ }));
166
+ });
167
+
168
+ // Pass 2: tool-owned context filtering (item + element aggregation)
169
+ const visibleToolIds = $.derived(() => {
170
+ if (!$.get(contentReady)) {
171
+ // Stage 1: orchestrator-level allow-list only.
172
+ return $.get(allowedToolIds);
173
+ }
174
+
175
+ if (!$.get(toolContext) && $.get(elementContexts).length === 0) {
176
+ return $.get(allowedToolIds);
177
+ }
178
+
179
+ const visible = new Set();
180
+
181
+ if ($.get(toolContext)) {
182
+ $.get(effectiveToolRegistry).filterVisibleInContext($.get(allowedToolIds), $.get(toolContext)).forEach((tool) => visible.add(tool.toolId));
183
+ }
184
+
185
+ for (const context of $.get(elementContexts)) {
186
+ $.get(effectiveToolRegistry).filterVisibleInContext($.get(allowedToolIds), context).forEach((tool) => visible.add(tool.toolId));
187
+ }
188
+
189
+ return Array.from(visible);
190
+ });
191
+
192
+ // Dynamically load whatever tools are currently visible.
193
+ // The registry owns module loader configuration by toolId.
194
+ $.user_effect(() => {
195
+ if (!isBrowser) return;
196
+
197
+ let cancelled = false;
198
+
199
+ void $.get(effectiveToolRegistry).ensureToolModulesLoaded($.get(visibleToolIds)).then(() => {
200
+ if (!cancelled) $.set(moduleLoadVersion, $.get(moduleLoadVersion) + 1);
201
+ }).catch((error) => {
202
+ console.error('[ItemToolBar] Failed to load one or more tool modules:', error);
203
+ });
204
+
205
+ return () => {
206
+ cancelled = true;
207
+ };
208
+ });
209
+
210
+ function resolveScopeElement() {
211
+ if (scopeElement()) return scopeElement();
212
+
213
+ return $.get(shellContext)?.scopeElement || null;
214
+ }
215
+
216
+ function resolveGlobalElementId() {
217
+ if (!$.get(effectiveElementToolStateStore) || !$.get(effectiveAssessmentId) || !$.get(effectiveSectionId) || !$.get(effectiveCanonicalItemId)) return null;
218
+
219
+ return $.get(effectiveElementToolStateStore).getGlobalElementId($.get(effectiveAssessmentId), $.get(effectiveSectionId), $.get(effectiveCanonicalItemId), $.get(effectiveCanonicalItemId));
220
+ }
221
+
222
+ const toolbarContext = $.derived(() => {
223
+ const toolkitCoordinator = $.get(runtimeContext)?.toolkitCoordinator || null;
224
+
225
+ const toInstanceToolId = (toolId) => {
226
+ // Accept either base tool IDs (e.g. "calculator") or already-scoped IDs.
227
+ // This keeps toolbar contracts stable across mixed registration implementations.
228
+ return parseScopedToolId(toolId)
229
+ ? toolId
230
+ : createScopedToolId(toolId, 'item', $.get(effectiveCanonicalItemId));
231
+ };
232
+
233
+ return {
234
+ itemId: $.get(effectiveCanonicalItemId),
235
+ catalogId: $.get(effectiveCatalogId),
236
+ language: language(),
237
+ ui: { size: size() },
238
+ getScopeElement: resolveScopeElement,
239
+ getGlobalElementId: resolveGlobalElementId,
240
+ toolCoordinator: $.get(effectiveToolCoordinator) || null,
241
+ toolkitCoordinator,
242
+ ttsService: $.get(effectiveTTSService) || null,
243
+ elementToolStateStore: $.get(effectiveElementToolStateStore) || null,
244
+ toggleTool: (toolId) => {
245
+ if (!$.get(effectiveToolCoordinator)) return;
246
+
247
+ $.get(effectiveToolCoordinator).toggleTool(toInstanceToolId(toolId));
248
+ },
249
+
250
+ isToolVisible: (toolId) => {
251
+ if (!$.get(effectiveToolCoordinator)) return false;
252
+
253
+ return $.get(effectiveToolCoordinator).isToolVisible(toInstanceToolId(toolId));
254
+ },
255
+
256
+ subscribeVisibility: $.get(effectiveToolCoordinator)
257
+ ? (listener) => $.get(effectiveToolCoordinator).subscribe(listener)
258
+ : null,
259
+ ensureTTSReady: toolkitCoordinator ? () => toolkitCoordinator.ensureTTSReady() : null
260
+ };
261
+ });
262
+
263
+ let renderedTools = $.derived(() => {
264
+ if (!isBrowser) return [];
265
+
266
+ $.get(moduleLoadVersion);
267
+
268
+ const rendered = [];
269
+
270
+ for (const toolId of $.get(visibleToolIds)) {
271
+ const result = $.get(effectiveToolRegistry).renderForToolbar(toolId, $.get(renderContext), $.get(toolbarContext));
272
+
273
+ if (result) {
274
+ rendered.push(result);
275
+ }
276
+ }
277
+
278
+ return rendered;
279
+ });
280
+
281
+ function syncRenderedToolsState() {
282
+ const nextActiveState = {};
283
+
284
+ for (const renderedTool of $.get(renderedTools)) {
285
+ renderedTool.sync?.();
286
+
287
+ if (renderedTool.button) {
288
+ nextActiveState[renderedTool.toolId] = renderedTool.button.active ?? false;
289
+ }
290
+ }
291
+
292
+ $.set(activeToolState, nextActiveState, true);
293
+ }
294
+
295
+ $.user_effect(() => {
296
+ const unsubs = [];
297
+
298
+ syncRenderedToolsState();
299
+
300
+ for (const renderedTool of $.get(renderedTools)) {
301
+ if (renderedTool.subscribeActive) {
302
+ const unsubscribe = renderedTool.subscribeActive((active) => {
303
+ $.set(activeToolState, { ...$.get(activeToolState), [renderedTool.toolId]: active }, true);
304
+ renderedTool.sync?.();
305
+ });
306
+
307
+ unsubs.push(unsubscribe);
308
+ }
309
+ }
310
+
311
+ return () => {
312
+ unsubs.forEach((unsub) => unsub());
313
+ };
314
+ });
315
+
316
+ $.user_effect(() => {
317
+ if (!$.get(toolbarContext).subscribeVisibility) return;
318
+
319
+ return $.get(toolbarContext).subscribeVisibility(() => {
320
+ syncRenderedToolsState();
321
+ });
322
+ });
323
+
324
+ function mountElement(node, element) {
325
+ let mountedElement = null;
326
+
327
+ const updateMountedElement = (nextElement) => {
328
+ if (mountedElement === nextElement) return;
329
+
330
+ if (mountedElement && mountedElement.parentNode === node) {
331
+ node.removeChild(mountedElement);
332
+ }
333
+
334
+ mountedElement = nextElement;
335
+
336
+ if (mountedElement) {
337
+ if (mountedElement.parentNode && mountedElement.parentNode !== node) {
338
+ mountedElement.parentNode.removeChild(mountedElement);
339
+ }
340
+
341
+ node.appendChild(mountedElement);
342
+ }
343
+ };
344
+
345
+ updateMountedElement(element);
346
+
347
+ return {
348
+ update(nextElement) {
349
+ updateMountedElement(nextElement);
350
+ },
351
+
352
+ destroy() {
353
+ updateMountedElement(null);
354
+ }
355
+ };
356
+ }
357
+
358
+ var $$exports = {
359
+ get itemId() {
360
+ return itemId();
361
+ },
362
+
363
+ set itemId($$value) {
364
+ itemId($$value);
365
+ $.flush();
366
+ },
367
+
368
+ get catalogId() {
369
+ return catalogId();
370
+ },
371
+
372
+ set catalogId($$value) {
373
+ catalogId($$value);
374
+ $.flush();
375
+ },
376
+
377
+ get tools() {
378
+ return tools();
379
+ },
380
+
381
+ set tools($$value) {
382
+ tools($$value);
383
+ $.flush();
384
+ },
385
+
386
+ get contentKind() {
387
+ return contentKind();
388
+ },
389
+
390
+ set contentKind($$value) {
391
+ contentKind($$value);
392
+ $.flush();
393
+ },
394
+
395
+ get scopeElement() {
396
+ return scopeElement();
397
+ },
398
+
399
+ set scopeElement($$value) {
400
+ scopeElement($$value);
401
+ $.flush();
402
+ },
403
+
404
+ get toolRegistry() {
405
+ return toolRegistry();
406
+ },
407
+
408
+ set toolRegistry($$value) {
409
+ toolRegistry($$value);
410
+ $.flush();
411
+ },
412
+
413
+ get pnpResolver() {
414
+ return pnpResolver();
415
+ },
416
+
417
+ set pnpResolver($$value) {
418
+ pnpResolver($$value);
419
+ $.flush();
420
+ },
421
+
422
+ get assessment() {
423
+ return assessment();
424
+ },
425
+
426
+ set assessment($$value) {
427
+ assessment($$value);
428
+ $.flush();
429
+ },
430
+
431
+ get itemRef() {
432
+ return itemRef();
433
+ },
434
+
435
+ set itemRef($$value) {
436
+ itemRef($$value);
437
+ $.flush();
438
+ },
439
+
440
+ get item() {
441
+ return item();
442
+ },
443
+
444
+ set item($$value) {
445
+ item($$value);
446
+ $.flush();
447
+ },
448
+
449
+ get class() {
450
+ return className();
451
+ },
452
+
453
+ set class($$value) {
454
+ className($$value);
455
+ $.flush();
456
+ },
457
+
458
+ get size() {
459
+ return size();
460
+ },
461
+
462
+ set size($$value) {
463
+ size($$value);
464
+ $.flush();
465
+ },
466
+
467
+ get language() {
468
+ return language();
469
+ },
470
+
471
+ set language($$value) {
472
+ language($$value);
473
+ $.flush();
474
+ }
475
+ };
476
+
477
+ var fragment = $.comment();
478
+ var node_1 = $.first_child(fragment);
479
+
480
+ {
481
+ var consequent_5 = ($$anchor) => {
482
+ var div = root_1();
483
+
484
+ $.each(div, 21, () => $.get(renderedTools), (renderedTool) => renderedTool.toolId, ($$anchor, renderedTool) => {
485
+ var fragment_1 = root_2();
486
+ var node_2 = $.first_child(fragment_1);
487
+
488
+ {
489
+ var consequent = ($$anchor) => {
490
+ var span = root_3();
491
+
492
+ $.action(span, ($$node, $$action_arg) => mountElement?.($$node, $$action_arg), () => $.get(renderedTool).inlineElement);
493
+ $.append($$anchor, span);
494
+ };
495
+
496
+ $.if(node_2, ($$render) => {
497
+ if ($.get(renderedTool).inlineElement) $$render(consequent);
498
+ });
499
+ }
500
+
501
+ var node_3 = $.sibling(node_2, 2);
502
+
503
+ {
504
+ var consequent_3 = ($$anchor) => {
505
+ var button = root_4();
506
+ let classes;
507
+ var node_4 = $.child(button);
508
+
509
+ {
510
+ var consequent_1 = ($$anchor) => {
511
+ var fragment_2 = $.comment();
512
+ var node_5 = $.first_child(fragment_2);
513
+
514
+ $.html(node_5, () => $.get(renderedTool).button.icon);
515
+ $.append($$anchor, fragment_2);
516
+ };
517
+
518
+ var d = $.derived(() => $.get(renderedTool).button.icon.startsWith('<svg'));
519
+
520
+ var consequent_2 = ($$anchor) => {
521
+ var img = root_6();
522
+
523
+ $.template_effect(() => $.set_attribute(img, 'src', $.get(renderedTool).button.icon));
524
+ $.append($$anchor, img);
525
+ };
526
+
527
+ var d_1 = $.derived(() => $.get(renderedTool).button.icon.startsWith('http'));
528
+
529
+ var alternate = ($$anchor) => {
530
+ var i = root_7();
531
+
532
+ $.template_effect(() => $.set_class(i, 1, `icon icon-${$.get(renderedTool).button.icon}`, 'svelte-rnx3ie'));
533
+ $.append($$anchor, i);
534
+ };
535
+
536
+ $.if(node_4, ($$render) => {
537
+ if ($.get(d)) $$render(consequent_1); else if ($.get(d_1)) $$render(consequent_2, 1); else $$render(alternate, false);
538
+ });
539
+ }
540
+
541
+ $.reset(button);
542
+
543
+ $.template_effect(() => {
544
+ classes = $.set_class(button, 1, `item-toolbar__button ${($.get(renderedTool).button.className || '') ?? ''}`, 'svelte-rnx3ie', classes, {
545
+ 'item-toolbar__button--active': $.get(activeToolState)[$.get(renderedTool).toolId] ?? $.get(renderedTool).button.active ?? false
546
+ });
547
+
548
+ $.set_attribute(button, 'aria-label', $.get(renderedTool).button.ariaLabel || $.get(renderedTool).button.label);
549
+ $.set_attribute(button, 'aria-pressed', $.get(activeToolState)[$.get(renderedTool).toolId] ?? $.get(renderedTool).button.active ?? false);
550
+ $.set_attribute(button, 'title', $.get(renderedTool).button.tooltip || $.get(renderedTool).button.label);
551
+ button.disabled = $.get(renderedTool).button.disabled;
552
+ });
553
+
554
+ $.delegated('click', button, () => {
555
+ $.get(renderedTool).button?.onClick();
556
+ syncRenderedToolsState();
557
+ });
558
+
559
+ $.append($$anchor, button);
560
+ };
561
+
562
+ $.if(node_3, ($$render) => {
563
+ if ($.get(renderedTool).button) $$render(consequent_3);
564
+ });
565
+ }
566
+
567
+ var node_6 = $.sibling(node_3, 2);
568
+
569
+ {
570
+ var consequent_4 = ($$anchor) => {
571
+ var span_1 = root_8();
572
+
573
+ $.action(span_1, ($$node, $$action_arg) => mountElement?.($$node, $$action_arg), () => $.get(renderedTool).overlayElement);
574
+ $.append($$anchor, span_1);
575
+ };
576
+
577
+ $.if(node_6, ($$render) => {
578
+ if ($.get(renderedTool).overlayElement) $$render(consequent_4);
579
+ });
580
+ }
581
+
582
+ $.append($$anchor, fragment_1);
583
+ });
584
+
585
+ $.reset(div);
586
+ $.bind_this(div, ($$value) => $.set(toolbarRootElement, $$value), () => $.get(toolbarRootElement));
587
+
588
+ $.template_effect(() => {
589
+ $.set_class(div, 1, `item-toolbar ${className() ?? ''} item-toolbar--${size() ?? ''}`, 'svelte-rnx3ie');
590
+ $.set_attribute(div, 'data-content-kind', $.get(effectiveContentKind));
591
+ });
592
+
593
+ $.append($$anchor, div);
594
+ };
595
+
596
+ $.if(node_1, ($$render) => {
597
+ if (isBrowser) $$render(consequent_5);
598
+ });
599
+ }
600
+
601
+ $.append($$anchor, fragment);
602
+
603
+ return $.pop($$exports);
604
+ }
605
+
606
+ $.delegate(['click']);
607
+
608
+ customElements.define('pie-item-toolbar', $.create_custom_element(
609
+ ItemToolBar,
610
+ {
611
+ itemId: { attribute: 'item-id', type: 'String' },
612
+ catalogId: { attribute: 'catalog-id', type: 'String' },
613
+ tools: { attribute: 'tools', type: 'String' },
614
+ contentKind: { attribute: 'content-kind', type: 'String' },
615
+ size: { attribute: 'size', type: 'String' },
616
+ language: { attribute: 'language', type: 'String' },
617
+ scopeElement: { type: 'Object' },
618
+ toolRegistry: { type: 'Object' },
619
+ pnpResolver: { type: 'Object' },
620
+ assessment: { type: 'Object' },
621
+ itemRef: { type: 'Object' },
622
+ item: { type: 'Object' },
623
+ class: {}
624
+ },
625
+ [],
626
+ [],
627
+ { mode: 'open' }
628
+ ));