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

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 (112) hide show
  1. package/dist/components/ItemToolBar.custom-element.js +425 -93
  2. package/dist/components/PieAssessmentToolkit.custom-element.js +200 -46
  3. package/dist/components/SectionToolBar.custom-element.js +162 -0
  4. package/dist/components/section-toolbar-element.d.ts +3 -0
  5. package/dist/components/section-toolbar-element.d.ts.map +1 -0
  6. package/dist/components/section-toolbar-element.js +2 -0
  7. package/dist/components/section-toolbar-element.js.map +1 -0
  8. package/dist/context/assessment-toolkit-context.d.ts +1 -1
  9. package/dist/context/assessment-toolkit-context.d.ts.map +1 -1
  10. package/dist/index.d.ts +5 -3
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/runtime/SectionRuntimeEngine.d.ts +57 -1
  15. package/dist/runtime/SectionRuntimeEngine.d.ts.map +1 -1
  16. package/dist/runtime/SectionRuntimeEngine.js +23 -0
  17. package/dist/runtime/SectionRuntimeEngine.js.map +1 -1
  18. package/dist/runtime/registration-events.d.ts +19 -0
  19. package/dist/runtime/registration-events.d.ts.map +1 -1
  20. package/dist/runtime/registration-events.js +3 -0
  21. package/dist/runtime/registration-events.js.map +1 -1
  22. package/dist/runtime/runtime-event-guards.d.ts +0 -1
  23. package/dist/runtime/runtime-event-guards.d.ts.map +1 -1
  24. package/dist/runtime/runtime-event-guards.js +0 -5
  25. package/dist/runtime/runtime-event-guards.js.map +1 -1
  26. package/dist/runtime/session-event-emitter-policy.d.ts +12 -0
  27. package/dist/runtime/session-event-emitter-policy.d.ts.map +1 -0
  28. package/dist/runtime/session-event-emitter-policy.js +57 -0
  29. package/dist/runtime/session-event-emitter-policy.js.map +1 -0
  30. package/dist/services/HighlightCoordinator.d.ts +9 -0
  31. package/dist/services/HighlightCoordinator.d.ts.map +1 -1
  32. package/dist/services/HighlightCoordinator.js +196 -55
  33. package/dist/services/HighlightCoordinator.js.map +1 -1
  34. package/dist/services/TTSService.d.ts +18 -0
  35. package/dist/services/TTSService.d.ts.map +1 -1
  36. package/dist/services/TTSService.js +343 -105
  37. package/dist/services/TTSService.js.map +1 -1
  38. package/dist/services/ToolRegistry.d.ts +40 -2
  39. package/dist/services/ToolRegistry.d.ts.map +1 -1
  40. package/dist/services/ToolRegistry.js +22 -1
  41. package/dist/services/ToolRegistry.js.map +1 -1
  42. package/dist/services/ToolkitCoordinator.d.ts +34 -1
  43. package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
  44. package/dist/services/ToolkitCoordinator.js +203 -2
  45. package/dist/services/ToolkitCoordinator.js.map +1 -1
  46. package/dist/services/createDefaultToolRegistry.d.ts +5 -11
  47. package/dist/services/createDefaultToolRegistry.d.ts.map +1 -1
  48. package/dist/services/createDefaultToolRegistry.js +5 -48
  49. package/dist/services/createDefaultToolRegistry.js.map +1 -1
  50. package/dist/services/interfaces.d.ts +7 -2
  51. package/dist/services/interfaces.d.ts.map +1 -1
  52. package/dist/services/interfaces.js.map +1 -1
  53. package/dist/services/pnp-standard-features.d.ts +1 -1
  54. package/dist/services/section-controller-types.d.ts +5 -0
  55. package/dist/services/section-controller-types.d.ts.map +1 -1
  56. package/dist/services/tool-config-defaults.d.ts +14 -0
  57. package/dist/services/tool-config-defaults.d.ts.map +1 -0
  58. package/dist/services/tool-config-defaults.js +23 -0
  59. package/dist/services/tool-config-defaults.js.map +1 -0
  60. package/dist/services/tool-context.d.ts.map +1 -1
  61. package/dist/services/tool-context.js +50 -3
  62. package/dist/services/tool-context.js.map +1 -1
  63. package/dist/services/tool-instance-id.d.ts +1 -3
  64. package/dist/services/tool-instance-id.d.ts.map +1 -1
  65. package/dist/services/tool-instance-id.js +4 -10
  66. package/dist/services/tool-instance-id.js.map +1 -1
  67. package/dist/services/toolbar-items.d.ts +26 -0
  68. package/dist/services/toolbar-items.d.ts.map +1 -0
  69. package/dist/services/toolbar-items.js +10 -0
  70. package/dist/services/toolbar-items.js.map +1 -0
  71. package/dist/services/tools-config-normalizer.d.ts.map +1 -1
  72. package/dist/services/tools-config-normalizer.js +5 -6
  73. package/dist/services/tools-config-normalizer.js.map +1 -1
  74. package/dist/services/tts/browser-provider.d.ts.map +1 -1
  75. package/dist/services/tts/browser-provider.js +201 -34
  76. package/dist/services/tts/browser-provider.js.map +1 -1
  77. package/dist/services/tts/text-processing.d.ts +17 -0
  78. package/dist/services/tts/text-processing.d.ts.map +1 -0
  79. package/dist/services/tts/text-processing.js +144 -0
  80. package/dist/services/tts/text-processing.js.map +1 -0
  81. package/dist/tools/default-tool-module-loaders.d.ts.map +1 -1
  82. package/dist/tools/default-tool-module-loaders.js +1 -7
  83. package/dist/tools/default-tool-module-loaders.js.map +1 -1
  84. package/dist/tools/registrations/accessibility-tools.d.ts +7 -2
  85. package/dist/tools/registrations/accessibility-tools.d.ts.map +1 -1
  86. package/dist/tools/registrations/accessibility-tools.js +23 -15
  87. package/dist/tools/registrations/accessibility-tools.js.map +1 -1
  88. package/dist/tools/registrations/calculator.d.ts.map +1 -1
  89. package/dist/tools/registrations/calculator.js +18 -10
  90. package/dist/tools/registrations/calculator.js.map +1 -1
  91. package/dist/tools/registrations/interaction-tools.d.ts.map +1 -1
  92. package/dist/tools/registrations/interaction-tools.js +5 -4
  93. package/dist/tools/registrations/interaction-tools.js.map +1 -1
  94. package/dist/tools/registrations/measurement-tools.js +4 -4
  95. package/dist/tools/registrations/measurement-tools.js.map +1 -1
  96. package/dist/tools/registrations/subject-specific-tools.js +4 -4
  97. package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
  98. package/dist/tools/registrations/tts.d.ts.map +1 -1
  99. package/dist/tools/registrations/tts.js +161 -17
  100. package/dist/tools/registrations/tts.js.map +1 -1
  101. package/dist/tools/tool-tag-map.d.ts.map +1 -1
  102. package/dist/tools/tool-tag-map.js +2 -1
  103. package/dist/tools/tool-tag-map.js.map +1 -1
  104. package/package.json +12 -8
  105. package/src/components/ItemToolBar.svelte +275 -47
  106. package/src/components/PieAssessmentToolkit.svelte +217 -53
  107. package/src/components/SectionToolBar.svelte +58 -0
  108. package/dist/services/tts/provider-interface.d.ts +0 -131
  109. package/dist/services/tts/provider-interface.d.ts.map +0 -1
  110. package/dist/services/tts/provider-interface.js +0 -10
  111. package/dist/services/tts/provider-interface.js.map +0 -1
  112. package/src/components/PNPProvenanceViewer.svelte +0 -270
@@ -1,270 +0,0 @@
1
- <script lang="ts">
2
- import type { PNPResolutionProvenance } from '../services/pnp-provenance.js';
3
-
4
- // PNP Provenance Viewer Component
5
- // Visualizes how PNP resolution decisions were made.
6
-
7
- interface Props {
8
- provenance: PNPResolutionProvenance;
9
- compact?: boolean;
10
- }
11
-
12
- let { provenance, compact = false }: Props = $props();
13
-
14
- let features = $derived(Array.from(provenance.features.values()));
15
- let enabledFeatures = $derived(features.filter((f) => f.finalState === 'enabled'));
16
- let blockedFeatures = $derived(features.filter((f) => f.finalState === 'blocked'));
17
-
18
- function getRuleBadgeClass(rule: string): string {
19
- const classes: Record<string, string> = {
20
- 'district-block': 'badge-error',
21
- 'test-admin-override': 'badge-warning',
22
- 'item-restriction': 'badge-info',
23
- 'item-requirement': 'badge-success',
24
- 'district-requirement': 'badge-success',
25
- 'pnp-support': 'badge-primary',
26
- 'system-default': 'badge-ghost'
27
- };
28
- return classes[rule] || 'badge-ghost';
29
- }
30
-
31
- function getActionIcon(action: string): string {
32
- const icons: Record<string, string> = {
33
- enable: '✓',
34
- block: '✗',
35
- skip: '○'
36
- };
37
- return icons[action] || '?';
38
- }
39
-
40
- function getSourceName(source: unknown): string | undefined {
41
- if (!source || typeof source !== 'object') return undefined;
42
- if ('name' in source && typeof (source as any).name === 'string') {
43
- return (source as any).name;
44
- }
45
- if ('title' in source && typeof (source as any).title === 'string') {
46
- return (source as any).title;
47
- }
48
- return undefined;
49
- }
50
- </script>
51
-
52
- <div class="pnp-provenance-viewer" class:compact>
53
- <!-- Summary -->
54
- <div class="card bg-base-100 shadow-sm mb-4">
55
- <div class="card-body">
56
- <h3 class="card-title text-sm">Resolution Summary</h3>
57
- <div class="stats stats-vertical lg:stats-horizontal shadow">
58
- <div class="stat">
59
- <div class="stat-title">Total Features</div>
60
- <div class="stat-value text-2xl">{provenance.summary.totalFeatures}</div>
61
- </div>
62
- <div class="stat">
63
- <div class="stat-title">Enabled</div>
64
- <div class="stat-value text-2xl text-success">{provenance.summary.enabled}</div>
65
- </div>
66
- <div class="stat">
67
- <div class="stat-title">Blocked</div>
68
- <div class="stat-value text-2xl text-error">{provenance.summary.blocked}</div>
69
- </div>
70
- </div>
71
-
72
- <div class="text-xs text-base-content/70 mt-2">
73
- Resolved at: {provenance.resolvedAt.toLocaleString()}
74
- </div>
75
- </div>
76
- </div>
77
-
78
- <!-- Configuration Sources -->
79
- {#if !compact}
80
- <div class="card bg-base-100 shadow-sm mb-4">
81
- <div class="card-body">
82
- <h3 class="card-title text-sm">Configuration Sources</h3>
83
- <div class="space-y-2">
84
- {#each Object.entries(provenance.sources) as [type, source]}
85
- <div class="flex items-center gap-2">
86
- <div class="badge badge-outline">{type}</div>
87
- <div class="text-sm">
88
- {getSourceName(source) || source.id}
89
- <span class="text-xs text-base-content/50">({source.id})</span>
90
- </div>
91
- </div>
92
- {/each}
93
- </div>
94
- </div>
95
- </div>
96
- {/if}
97
-
98
- <!-- Feature Resolution -->
99
- <div class="space-y-4">
100
- <!-- Enabled Features -->
101
- {#if enabledFeatures.length > 0}
102
- <div class="card bg-base-100 shadow-sm">
103
- <div class="card-body">
104
- <h3 class="card-title text-sm text-success">
105
- Enabled Features ({enabledFeatures.length})
106
- </h3>
107
- <div class="space-y-3">
108
- {#each enabledFeatures as feature}
109
- <div class="border-l-4 border-success pl-3">
110
- <div class="flex items-center gap-2 mb-1">
111
- <code class="text-sm font-semibold">{feature.featureId}</code>
112
- {#if feature.winningDecision}
113
- <div class="badge {getRuleBadgeClass(feature.winningDecision.rule)} badge-sm">
114
- {feature.winningDecision.rule}
115
- </div>
116
- {/if}
117
- </div>
118
-
119
- {#if !compact}
120
- <div class="text-sm text-base-content/80 whitespace-pre-wrap">
121
- {feature.explanation}
122
- </div>
123
- {:else if feature.winningDecision}
124
- <div class="text-xs text-base-content/70">
125
- {feature.winningDecision.reason}
126
- </div>
127
- {/if}
128
-
129
- {#if !compact && feature.allDecisions.length > 1}
130
- <details class="mt-2">
131
- <summary class="text-xs cursor-pointer text-base-content/60 hover:text-base-content">
132
- Show all decisions ({feature.allDecisions.length})
133
- </summary>
134
- <div class="ml-4 mt-2 space-y-1">
135
- {#each feature.allDecisions as decision}
136
- <div class="text-xs flex items-center gap-2">
137
- <span class="opacity-50">{decision.step}.</span>
138
- <span class="badge badge-xs {getRuleBadgeClass(decision.rule)}">
139
- {decision.rule}
140
- </span>
141
- <span>{getActionIcon(decision.action)}</span>
142
- <span class="opacity-70">{decision.reason}</span>
143
- </div>
144
- {/each}
145
- </div>
146
- </details>
147
- {/if}
148
- </div>
149
- {/each}
150
- </div>
151
- </div>
152
- </div>
153
- {/if}
154
-
155
- <!-- Blocked Features -->
156
- {#if blockedFeatures.length > 0}
157
- <div class="card bg-base-100 shadow-sm">
158
- <div class="card-body">
159
- <h3 class="card-title text-sm text-error">
160
- Blocked Features ({blockedFeatures.length})
161
- </h3>
162
- <div class="space-y-3">
163
- {#each blockedFeatures as feature}
164
- <div class="border-l-4 border-error pl-3">
165
- <div class="flex items-center gap-2 mb-1">
166
- <code class="text-sm font-semibold">{feature.featureId}</code>
167
- {#if feature.winningDecision}
168
- <div class="badge {getRuleBadgeClass(feature.winningDecision.rule)} badge-sm">
169
- {feature.winningDecision.rule}
170
- </div>
171
- {/if}
172
- </div>
173
-
174
- {#if !compact}
175
- <div class="text-sm text-base-content/80 whitespace-pre-wrap">
176
- {feature.explanation}
177
- </div>
178
- {:else if feature.winningDecision}
179
- <div class="text-xs text-base-content/70">
180
- {feature.winningDecision.reason}
181
- </div>
182
- {/if}
183
-
184
- {#if !compact && feature.allDecisions.length > 1}
185
- <details class="mt-2">
186
- <summary class="text-xs cursor-pointer text-base-content/60 hover:text-base-content">
187
- Show all decisions ({feature.allDecisions.length})
188
- </summary>
189
- <div class="ml-4 mt-2 space-y-1">
190
- {#each feature.allDecisions as decision}
191
- <div class="text-xs flex items-center gap-2">
192
- <span class="opacity-50">{decision.step}.</span>
193
- <span class="badge badge-xs {getRuleBadgeClass(decision.rule)}">
194
- {decision.rule}
195
- </span>
196
- <span>{getActionIcon(decision.action)}</span>
197
- <span class="opacity-70">{decision.reason}</span>
198
- </div>
199
- {/each}
200
- </div>
201
- </details>
202
- {/if}
203
- </div>
204
- {/each}
205
- </div>
206
- </div>
207
- </div>
208
- {/if}
209
- </div>
210
-
211
- <!-- Decision Log (collapsed by default) -->
212
- {#if !compact && provenance.decisionLog.length > 0}
213
- <details class="mt-4">
214
- <summary class="cursor-pointer text-sm font-semibold text-base-content/80 hover:text-base-content">
215
- Complete Decision Log ({provenance.decisionLog.length} steps)
216
- </summary>
217
- <div class="card bg-base-100 shadow-sm mt-2">
218
- <div class="card-body">
219
- <div class="space-y-2">
220
- {#each provenance.decisionLog as decision}
221
- <div class="flex items-start gap-3 text-xs">
222
- <div class="font-mono text-base-content/50 w-8">
223
- {decision.step}.
224
- </div>
225
- <div class="flex-1">
226
- <div class="flex items-center gap-2 mb-1">
227
- <span class="badge {getRuleBadgeClass(decision.rule)} badge-sm">
228
- {decision.rule}
229
- </span>
230
- <span class="font-semibold">{decision.featureId}</span>
231
- <span class={decision.action === 'enable' ? 'text-success' : decision.action === 'block' ? 'text-error' : 'text-base-content/50'}>
232
- {getActionIcon(decision.action)} {decision.action}
233
- </span>
234
- </div>
235
- <div class="text-base-content/70">
236
- {decision.reason}
237
- </div>
238
- <div class="text-base-content/50 mt-1">
239
- Source: {getSourceName(decision.source) || decision.source.type}
240
- </div>
241
- </div>
242
- </div>
243
- {/each}
244
- </div>
245
- </div>
246
- </div>
247
- </details>
248
- {/if}
249
- </div>
250
-
251
- <style>
252
- .pnp-provenance-viewer {
253
- font-family: system-ui, -apple-system, sans-serif;
254
- }
255
-
256
- .pnp-provenance-viewer code {
257
- background-color: hsl(var(--b2));
258
- padding: 0.125rem 0.375rem;
259
- border-radius: 0.25rem;
260
- font-size: 0.875em;
261
- }
262
-
263
- .pnp-provenance-viewer.compact {
264
- font-size: 0.875rem;
265
- }
266
-
267
- .pnp-provenance-viewer.compact .card-body {
268
- padding: 1rem;
269
- }
270
- </style>