@pie-players/pie-assessment-toolkit 0.3.29 → 0.3.31
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 +313 -5
- package/dist/components/ItemToolBar.custom-element.js +362 -176
- package/dist/components/PieAssessmentToolkit.custom-element.js +604 -107
- package/dist/components/SectionToolBar.custom-element.js +0 -36
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/policy/core/PolicySource.d.ts +64 -0
- package/dist/policy/core/PolicySource.d.ts.map +1 -0
- package/dist/policy/core/PolicySource.js +17 -0
- package/dist/policy/core/PolicySource.js.map +1 -0
- package/dist/policy/core/ToolPolicyEngine.d.ts +123 -0
- package/dist/policy/core/ToolPolicyEngine.d.ts.map +1 -0
- package/dist/policy/core/ToolPolicyEngine.js +217 -0
- package/dist/policy/core/ToolPolicyEngine.js.map +1 -0
- package/dist/policy/core/compose-decision.d.ts +37 -0
- package/dist/policy/core/compose-decision.d.ts.map +1 -0
- package/dist/policy/core/compose-decision.js +332 -0
- package/dist/policy/core/compose-decision.js.map +1 -0
- package/dist/policy/core/decision-types.d.ts +142 -0
- package/dist/policy/core/decision-types.d.ts.map +1 -0
- package/dist/policy/core/decision-types.js +13 -0
- package/dist/policy/core/decision-types.js.map +1 -0
- package/dist/policy/core/engine-context.d.ts +30 -0
- package/dist/policy/core/engine-context.d.ts.map +1 -0
- package/dist/policy/core/engine-context.js +28 -0
- package/dist/policy/core/engine-context.js.map +1 -0
- package/dist/policy/core/policy-source-tag.d.ts +32 -0
- package/dist/policy/core/policy-source-tag.d.ts.map +1 -0
- package/dist/policy/core/policy-source-tag.js +29 -0
- package/dist/policy/core/policy-source-tag.js.map +1 -0
- package/dist/policy/core/provenance.d.ts +163 -0
- package/dist/policy/core/provenance.d.ts.map +1 -0
- package/dist/policy/core/provenance.js +232 -0
- package/dist/policy/core/provenance.js.map +1 -0
- package/dist/policy/core/qti-inputs.d.ts +67 -0
- package/dist/policy/core/qti-inputs.d.ts.map +1 -0
- package/dist/policy/core/qti-inputs.js +139 -0
- package/dist/policy/core/qti-inputs.js.map +1 -0
- package/dist/policy/engine.d.ts +28 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +24 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/internal.d.ts +26 -0
- package/dist/policy/internal.d.ts.map +1 -0
- package/dist/policy/internal.js +26 -0
- package/dist/policy/internal.js.map +1 -0
- package/dist/policy/sources/QtiPolicySource.d.ts +146 -0
- package/dist/policy/sources/QtiPolicySource.d.ts.map +1 -0
- package/dist/policy/sources/QtiPolicySource.js +270 -0
- package/dist/policy/sources/QtiPolicySource.js.map +1 -0
- package/dist/runtime/SectionRuntimeEngine.d.ts +145 -0
- package/dist/runtime/SectionRuntimeEngine.d.ts.map +1 -1
- package/dist/runtime/SectionRuntimeEngine.js +164 -3
- package/dist/runtime/SectionRuntimeEngine.js.map +1 -1
- package/dist/runtime/adapter/SectionEngineAdapter.d.ts +144 -0
- package/dist/runtime/adapter/SectionEngineAdapter.d.ts.map +1 -0
- package/dist/runtime/adapter/SectionEngineAdapter.js +183 -0
- package/dist/runtime/adapter/SectionEngineAdapter.js.map +1 -0
- package/dist/runtime/adapter/coordinator-bridge.d.ts +93 -0
- package/dist/runtime/adapter/coordinator-bridge.d.ts.map +1 -0
- package/dist/runtime/adapter/coordinator-bridge.js +127 -0
- package/dist/runtime/adapter/coordinator-bridge.js.map +1 -0
- package/dist/runtime/adapter/dom-event-bridge.d.ts +63 -0
- package/dist/runtime/adapter/dom-event-bridge.d.ts.map +1 -0
- package/dist/runtime/adapter/dom-event-bridge.js +95 -0
- package/dist/runtime/adapter/dom-event-bridge.js.map +1 -0
- package/dist/runtime/adapter/framework-error-bridge.d.ts +37 -0
- package/dist/runtime/adapter/framework-error-bridge.d.ts.map +1 -0
- package/dist/runtime/adapter/framework-error-bridge.js +47 -0
- package/dist/runtime/adapter/framework-error-bridge.js.map +1 -0
- package/dist/runtime/adapter/instrumentation-bridge.d.ts +32 -0
- package/dist/runtime/adapter/instrumentation-bridge.d.ts.map +1 -0
- package/dist/runtime/adapter/instrumentation-bridge.js +39 -0
- package/dist/runtime/adapter/instrumentation-bridge.js.map +1 -0
- package/dist/runtime/adapter/subscriber-fanout.d.ts +35 -0
- package/dist/runtime/adapter/subscriber-fanout.d.ts.map +1 -0
- package/dist/runtime/adapter/subscriber-fanout.js +60 -0
- package/dist/runtime/adapter/subscriber-fanout.js.map +1 -0
- package/dist/runtime/core/SectionEngineCore.d.ts +52 -0
- package/dist/runtime/core/SectionEngineCore.d.ts.map +1 -0
- package/dist/runtime/core/SectionEngineCore.js +81 -0
- package/dist/runtime/core/SectionEngineCore.js.map +1 -0
- package/dist/runtime/core/cohort.d.ts +40 -0
- package/dist/runtime/core/cohort.d.ts.map +1 -0
- package/dist/runtime/core/cohort.js +49 -0
- package/dist/runtime/core/cohort.js.map +1 -0
- package/dist/runtime/core/engine-input.d.ts +114 -0
- package/dist/runtime/core/engine-input.d.ts.map +1 -0
- package/dist/runtime/core/engine-input.js +19 -0
- package/dist/runtime/core/engine-input.js.map +1 -0
- package/dist/runtime/core/engine-output.d.ts +62 -0
- package/dist/runtime/core/engine-output.d.ts.map +1 -0
- package/dist/runtime/core/engine-output.js +27 -0
- package/dist/runtime/core/engine-output.js.map +1 -0
- package/dist/runtime/core/engine-readiness.d.ts +49 -0
- package/dist/runtime/core/engine-readiness.d.ts.map +1 -0
- package/dist/runtime/core/engine-readiness.js +47 -0
- package/dist/runtime/core/engine-readiness.js.map +1 -0
- package/dist/runtime/core/engine-resolver.d.ts +172 -0
- package/dist/runtime/core/engine-resolver.d.ts.map +1 -0
- package/dist/runtime/core/engine-resolver.js +170 -0
- package/dist/runtime/core/engine-resolver.js.map +1 -0
- package/dist/runtime/core/engine-stage-derivation.d.ts +19 -0
- package/dist/runtime/core/engine-stage-derivation.d.ts.map +1 -0
- package/dist/runtime/core/engine-stage-derivation.js +30 -0
- package/dist/runtime/core/engine-stage-derivation.js.map +1 -0
- package/dist/runtime/core/engine-state.d.ts +83 -0
- package/dist/runtime/core/engine-state.d.ts.map +1 -0
- package/dist/runtime/core/engine-state.js +49 -0
- package/dist/runtime/core/engine-state.js.map +1 -0
- package/dist/runtime/core/engine-transition.d.ts +49 -0
- package/dist/runtime/core/engine-transition.d.ts.map +1 -0
- package/dist/runtime/core/engine-transition.js +261 -0
- package/dist/runtime/core/engine-transition.js.map +1 -0
- package/dist/runtime/engine-context.d.ts +40 -0
- package/dist/runtime/engine-context.d.ts.map +1 -0
- package/dist/runtime/engine-context.js +32 -0
- package/dist/runtime/engine-context.js.map +1 -0
- package/dist/runtime/engine.d.ts +24 -0
- package/dist/runtime/engine.d.ts.map +1 -0
- package/dist/runtime/engine.js +24 -0
- package/dist/runtime/engine.js.map +1 -0
- package/dist/runtime/internal.d.ts +44 -0
- package/dist/runtime/internal.d.ts.map +1 -0
- package/dist/runtime/internal.js +46 -0
- package/dist/runtime/internal.js.map +1 -0
- package/dist/runtime/runtime-id.d.ts +8 -0
- package/dist/runtime/runtime-id.d.ts.map +1 -0
- package/dist/runtime/runtime-id.js +10 -0
- package/dist/runtime/runtime-id.js.map +1 -0
- package/dist/runtime/section-runtime-engine-host-context.d.ts +74 -0
- package/dist/runtime/section-runtime-engine-host-context.d.ts.map +1 -0
- package/dist/runtime/section-runtime-engine-host-context.js +96 -0
- package/dist/runtime/section-runtime-engine-host-context.js.map +1 -0
- package/dist/runtime/stage-emit-gate.d.ts +93 -0
- package/dist/runtime/stage-emit-gate.d.ts.map +1 -0
- package/dist/runtime/stage-emit-gate.js +83 -0
- package/dist/runtime/stage-emit-gate.js.map +1 -0
- package/dist/services/SSMLExtractor.d.ts.map +1 -1
- package/dist/services/SSMLExtractor.js +189 -2
- package/dist/services/SSMLExtractor.js.map +1 -1
- package/dist/services/TTSService.d.ts +7 -0
- package/dist/services/TTSService.d.ts.map +1 -1
- package/dist/services/TTSService.js +15 -0
- package/dist/services/TTSService.js.map +1 -1
- package/dist/services/ToolRegistry.d.ts.map +1 -1
- package/dist/services/ToolRegistry.js +30 -0
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +264 -6
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
- package/dist/services/ToolkitCoordinator.js +350 -32
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/framework-error-bus.d.ts +73 -0
- package/dist/services/framework-error-bus.d.ts.map +1 -0
- package/dist/services/framework-error-bus.js +68 -0
- package/dist/services/framework-error-bus.js.map +1 -0
- package/dist/services/framework-error.d.ts +36 -1
- package/dist/services/framework-error.d.ts.map +1 -1
- package/dist/services/framework-error.js +37 -0
- package/dist/services/framework-error.js.map +1 -1
- package/dist/services/interfaces.d.ts +85 -0
- package/dist/services/interfaces.d.ts.map +1 -1
- package/dist/services/interfaces.js.map +1 -1
- package/dist/services/tool-config-validation.js +1 -1
- package/dist/services/tool-config-validation.js.map +1 -1
- package/dist/services/tools-config-normalizer.d.ts +24 -1
- package/dist/services/tools-config-normalizer.d.ts.map +1 -1
- package/dist/services/tools-config-normalizer.js +13 -1
- package/dist/services/tools-config-normalizer.js.map +1 -1
- package/dist/services/tts-control-events.d.ts +14 -0
- package/dist/services/tts-control-events.d.ts.map +1 -0
- package/dist/services/tts-control-events.js +8 -0
- package/dist/services/tts-control-events.js.map +1 -0
- package/dist/tools/calculators/desmos-provider.js +18 -0
- package/dist/tools/calculators/desmos-provider.js.map +1 -1
- package/dist/tools/client.d.ts +0 -1
- package/dist/tools/client.d.ts.map +1 -1
- package/dist/tools/client.js +0 -2
- package/dist/tools/client.js.map +1 -1
- package/dist/tools/default-tool-module-loaders.d.ts.map +1 -1
- package/dist/tools/default-tool-module-loaders.js +2 -0
- package/dist/tools/default-tool-module-loaders.js.map +1 -1
- package/dist/tools/types.d.ts +0 -26
- package/dist/tools/types.d.ts.map +1 -1
- package/package.json +25 -8
- package/dist/runtime/runtime-event-guards.d.ts +0 -2
- package/dist/runtime/runtime-event-guards.d.ts.map +0 -1
- package/dist/runtime/runtime-event-guards.js +0 -4
- package/dist/runtime/runtime-event-guards.js.map +0 -1
- package/dist/tools/tool-coordinator.d.ts +0 -72
- package/dist/tools/tool-coordinator.d.ts.map +0 -1
- package/dist/tools/tool-coordinator.js +0 -194
- package/dist/tools/tool-coordinator.js.map +0 -1
- package/dist/types/events.d.ts +0 -157
- package/dist/types/events.d.ts.map +0 -1
- package/dist/types/events.js +0 -11
- package/dist/types/events.js.map +0 -1
|
@@ -29,25 +29,31 @@ import {
|
|
|
29
29
|
isValidToolbarItemShape
|
|
30
30
|
} from '../services/toolbar-items.js';
|
|
31
31
|
|
|
32
|
+
import { sanitizeSvgIcon } from '@pie-players/pie-players-shared/security';
|
|
33
|
+
import { createFocusTrap } from '@pie-players/pie-players-shared';
|
|
32
34
|
import { createPackagedToolRegistry } from '../services/createDefaultToolRegistry.js';
|
|
33
35
|
import { DEFAULT_TOOL_MODULE_LOADERS } from '../tools/default-tool-module-loaders.js';
|
|
34
|
-
import {
|
|
36
|
+
import { parseToolList } from '../services/tools-config-normalizer.js';
|
|
35
37
|
import { createScopedToolId, parseScopedToolId } from '../services/tool-instance-id.js';
|
|
36
38
|
|
|
37
|
-
var root_3 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
|
|
38
39
|
var root_4 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
|
|
39
|
-
var
|
|
40
|
-
var
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
40
|
+
var root_5 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
|
|
41
|
+
var root_9 = $.from_html(`<span aria-hidden="true"></span>`);
|
|
42
|
+
var root_10 = $.from_html(`<img class="item-toolbar__icon-image svelte-rnx3ie" alt=""/>`);
|
|
43
|
+
var root_12 = $.from_html(`<span aria-hidden="true"></span>`);
|
|
44
|
+
var root_13 = $.from_html(`<i aria-hidden="true"></i>`);
|
|
45
|
+
var root_7 = $.from_html(`<a><!></a>`);
|
|
46
|
+
var root_16 = $.from_html(`<span aria-hidden="true"></span>`);
|
|
47
|
+
var root_17 = $.from_html(`<img class="item-toolbar__icon-image svelte-rnx3ie" alt=""/>`);
|
|
48
|
+
var root_19 = $.from_html(`<span aria-hidden="true"></span>`);
|
|
49
|
+
var root_20 = $.from_html(`<i aria-hidden="true"></i>`);
|
|
50
|
+
var root_14 = $.from_html(`<button type="button"><!></button>`);
|
|
46
51
|
var root_22 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
|
|
47
|
-
var
|
|
52
|
+
var root_23 = $.from_html(`<span class="item-toolbar__element-host svelte-rnx3ie"></span>`);
|
|
48
53
|
var root_26 = $.from_html(`<span class="item-toolbar__controls-host svelte-rnx3ie"></span>`);
|
|
49
|
-
var
|
|
50
|
-
var
|
|
54
|
+
var root_27 = $.from_html(`<span class="item-toolbar__controls-host svelte-rnx3ie"></span>`);
|
|
55
|
+
var root_24 = $.from_html(`<div></div>`);
|
|
56
|
+
var root_2 = $.from_html(`<div><div class="item-toolbar__tools-row svelte-rnx3ie"><!> <!> <!></div> <!></div>`);
|
|
51
57
|
|
|
52
58
|
const $$css = {
|
|
53
59
|
hash: 'svelte-rnx3ie',
|
|
@@ -73,9 +79,6 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
73
79
|
position = $.prop($$props, 'position', 7, 'bottom'),
|
|
74
80
|
scopeElement = $.prop($$props, 'scopeElement', 7, null),
|
|
75
81
|
toolRegistry = $.prop($$props, 'toolRegistry', 7, null),
|
|
76
|
-
pnpResolver = $.prop($$props, 'pnpResolver', 7, null),
|
|
77
|
-
assessment = $.prop($$props, 'assessment', 7, null),
|
|
78
|
-
itemRef = $.prop($$props, 'itemRef', 7, null),
|
|
79
82
|
item = $.prop($$props, 'item', 7, null),
|
|
80
83
|
hostButtons = $.prop($$props, 'hostButtons', 23, () => []),
|
|
81
84
|
className = $.prop($$props, 'class', 7, ''),
|
|
@@ -87,6 +90,14 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
87
90
|
let shellContext = $.state(null);
|
|
88
91
|
let moduleLoadVersion = $.state(0);
|
|
89
92
|
|
|
93
|
+
// Bumped from `coordinator.onPolicyChange(...)` so the engine-driven
|
|
94
|
+
// `policyDecision` / `policyInputs` derivations rerun on input
|
|
95
|
+
// changes (`updateAssessment`, `setQtiEnforcement`, custom source
|
|
96
|
+
// register / remove). The decision itself is computed by the
|
|
97
|
+
// coordinator's policy engine — this counter is just the reactive
|
|
98
|
+
// fanout that lets Svelte know the engine answer may have changed.
|
|
99
|
+
let policyChangeVersion = $.state(0);
|
|
100
|
+
|
|
90
101
|
$.user_effect(() => {
|
|
91
102
|
if (!$.get(toolbarRootElement)) return;
|
|
92
103
|
|
|
@@ -103,6 +114,25 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
103
114
|
});
|
|
104
115
|
});
|
|
105
116
|
|
|
117
|
+
$.user_effect(() => {
|
|
118
|
+
const coord = $.get(runtimeContext)?.toolkitCoordinator;
|
|
119
|
+
|
|
120
|
+
if (!coord || typeof coord.onPolicyChange !== 'function') return;
|
|
121
|
+
|
|
122
|
+
const unsubscribe = coord.onPolicyChange(() => {
|
|
123
|
+
$.set(policyChangeVersion, $.get(policyChangeVersion) + 1);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
return () => {
|
|
127
|
+
try {
|
|
128
|
+
unsubscribe?.();
|
|
129
|
+
} catch {
|
|
130
|
+
// detach errors are non-fatal: the coordinator may already
|
|
131
|
+
// be torn down, in which case the listener set is GC-eligible.
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
|
|
106
136
|
const effectiveToolCoordinator = $.derived(() => $.get(runtimeContext)?.toolCoordinator);
|
|
107
137
|
const effectiveTTSService = $.derived(() => $.get(runtimeContext)?.ttsService);
|
|
108
138
|
const effectiveElementToolStateStore = $.derived(() => $.get(runtimeContext)?.elementToolStateStore);
|
|
@@ -136,12 +166,6 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
136
166
|
const explicitTools = $.derived(() => parseToolList(tools()));
|
|
137
167
|
const normalizedExplicitTools = $.derived(() => $.get(effectiveToolRegistry).normalizeToolIds($.get(explicitTools)).filter(Boolean));
|
|
138
168
|
|
|
139
|
-
const effectiveToolsConfig = $.derived(() => {
|
|
140
|
-
const coordinatorConfig = $.get(runtimeContext)?.toolkitCoordinator?.config?.tools;
|
|
141
|
-
|
|
142
|
-
return normalizeToolsConfig(coordinatorConfig || {});
|
|
143
|
-
});
|
|
144
|
-
|
|
145
169
|
const placementLevel = $.derived(() => {
|
|
146
170
|
if ($.get(effectiveLevel) === 'section') return 'section';
|
|
147
171
|
if ($.get(effectiveLevel) === 'passage' || $.get(effectiveContentKind) === 'rubric-block-stimulus') return 'passage';
|
|
@@ -149,48 +173,58 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
149
173
|
return 'item';
|
|
150
174
|
});
|
|
151
175
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
176
|
+
// Pass 1 — single source of truth via the ToolPolicyEngine
|
|
177
|
+
// (M8 PR 3). When the toolbar is mounted under
|
|
178
|
+
// `<pie-assessment-toolkit>` the coordinator owns the engine and
|
|
179
|
+
// applies `placement → policy.allowed → policy.blocked →
|
|
180
|
+
// providers → QTI` plus any custom `PolicySource`s the host has
|
|
181
|
+
// registered. The toolbar trusts that decision verbatim — the
|
|
182
|
+
// `tools=` prop is *not* applied as a downstream filter.
|
|
183
|
+
//
|
|
184
|
+
// The `tools=` attribute is only consulted in the standalone
|
|
185
|
+
// fallback path (no coordinator in scope, e.g. fixtures that
|
|
186
|
+
// mount `<pie-item-toolbar>` directly). Hosts that want to
|
|
187
|
+
// restrict the engine's visible set should configure
|
|
188
|
+
// `tools.policy` / `tools.providers` on the assessment-toolkit
|
|
189
|
+
// inputs, or register a custom `PolicySource`, rather than
|
|
190
|
+
// passing `tools=` here.
|
|
191
|
+
const policyDecision = $.derived(() => {
|
|
192
|
+
// Read `policyChangeVersion` so we re-derive whenever the
|
|
193
|
+
// coordinator emits a policy change (assessment binding,
|
|
194
|
+
// QTI enforcement override, custom source registration).
|
|
195
|
+
void $.get(policyChangeVersion);
|
|
196
|
+
|
|
197
|
+
const coord = $.get(runtimeContext)?.toolkitCoordinator;
|
|
198
|
+
|
|
199
|
+
if (!coord || typeof coord.decideToolPolicy !== 'function') {
|
|
200
|
+
return null;
|
|
169
201
|
}
|
|
170
202
|
|
|
171
|
-
return
|
|
203
|
+
return coord.decideToolPolicy({
|
|
204
|
+
level: $.get(placementLevel),
|
|
205
|
+
scope: {
|
|
206
|
+
level: $.get(effectiveLevel),
|
|
207
|
+
scopeId: $.get(effectiveScopeId),
|
|
208
|
+
assessmentId: $.get(runtimeContext)?.assessmentId,
|
|
209
|
+
sectionId: $.get(effectiveSectionId) || undefined,
|
|
210
|
+
itemId: $.get(effectiveItemId) || undefined,
|
|
211
|
+
canonicalItemId: $.get(effectiveCanonicalItemId) || undefined,
|
|
212
|
+
contentKind: $.get(effectiveContentKind)
|
|
213
|
+
}
|
|
214
|
+
});
|
|
172
215
|
});
|
|
173
216
|
|
|
174
|
-
const isProviderEnabled = (toolId) => $.get(normalizedProviderConfig)[toolId]?.enabled !== false;
|
|
175
|
-
|
|
176
|
-
// Pass 1: determine allowed tools
|
|
177
217
|
const allowedToolIds = $.derived(() => {
|
|
178
|
-
const configuredTools = $.get(normalizedExplicitTools).length > 0
|
|
179
|
-
? $.get(normalizedExplicitTools)
|
|
180
|
-
: $.get(placementAllowedToolIds);
|
|
181
|
-
|
|
182
|
-
const providerEnabledConfiguredTools = configuredTools.filter((toolId) => isProviderEnabled(toolId));
|
|
183
218
|
const dedupe = (toolIds) => Array.from(new Set(toolIds));
|
|
184
219
|
|
|
185
|
-
if (
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (providerEnabledConfiguredTools.length === 0) return allowedByPnp;
|
|
189
|
-
|
|
190
|
-
return dedupe(allowedByPnp.filter((toolId) => providerEnabledConfiguredTools.includes(toolId)));
|
|
220
|
+
if ($.get(policyDecision)) {
|
|
221
|
+
return dedupe($.get(effectiveToolRegistry).normalizeToolIds($.get(policyDecision).visibleTools.map((entry) => entry.toolId)).filter(Boolean));
|
|
191
222
|
}
|
|
192
223
|
|
|
193
|
-
|
|
224
|
+
// Standalone fallback: no coordinator in scope. Honour the
|
|
225
|
+
// explicit `tools=` prop verbatim so demo fixtures keep
|
|
226
|
+
// working without a `<pie-assessment-toolkit>` ancestor.
|
|
227
|
+
return dedupe($.get(normalizedExplicitTools));
|
|
194
228
|
});
|
|
195
229
|
|
|
196
230
|
const contentReady = $.derived(() => {
|
|
@@ -201,17 +235,41 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
201
235
|
return !!($.get(effectiveItem) && config && typeof config === 'object');
|
|
202
236
|
});
|
|
203
237
|
|
|
238
|
+
// QTI inputs (`assessment`, `currentItemRef`) live on the
|
|
239
|
+
// coordinator after M8 PR 2; the toolbar reads them through
|
|
240
|
+
// `getPolicyInputs()` so it can build the correct Pass-2 context
|
|
241
|
+
// without re-binding props. Standalone (no-coordinator) usage
|
|
242
|
+
// falls back to the empty / canonical-id-derived contexts that
|
|
243
|
+
// satisfy the `ToolContext` shape for `isVisibleInContext` calls.
|
|
244
|
+
const policyInputs = $.derived(() => {
|
|
245
|
+
void $.get(policyChangeVersion);
|
|
246
|
+
|
|
247
|
+
const coord = $.get(runtimeContext)?.toolkitCoordinator;
|
|
248
|
+
|
|
249
|
+
if (!coord || typeof coord.getPolicyInputs !== 'function') {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return coord.getPolicyInputs();
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
const effectiveAssessment = $.derived(() => $.get(policyInputs)?.assessment ?? null);
|
|
257
|
+
const effectiveItemRef = $.derived(() => $.get(policyInputs)?.currentItemRef ?? null);
|
|
258
|
+
|
|
204
259
|
const toolContext = $.derived(() => {
|
|
205
260
|
if ($.get(effectiveLevel) === 'section') {
|
|
206
261
|
return {
|
|
207
262
|
level: 'section',
|
|
208
|
-
assessment:
|
|
263
|
+
assessment: $.get(effectiveAssessment) || {},
|
|
209
264
|
section: {}
|
|
210
265
|
};
|
|
211
266
|
}
|
|
212
267
|
|
|
213
268
|
if ($.get(effectiveLevel) === 'assessment') {
|
|
214
|
-
return {
|
|
269
|
+
return {
|
|
270
|
+
level: 'assessment',
|
|
271
|
+
assessment: $.get(effectiveAssessment) || {}
|
|
272
|
+
};
|
|
215
273
|
}
|
|
216
274
|
|
|
217
275
|
if (!$.get(contentReady) || !$.get(effectiveItem)) {
|
|
@@ -221,16 +279,16 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
221
279
|
if ($.get(effectiveLevel) === 'passage') {
|
|
222
280
|
return {
|
|
223
281
|
level: 'passage',
|
|
224
|
-
assessment:
|
|
225
|
-
itemRef:
|
|
282
|
+
assessment: $.get(effectiveAssessment) || {},
|
|
283
|
+
itemRef: $.get(effectiveItemRef) || { id: $.get(effectiveCanonicalItemId) },
|
|
226
284
|
passage: $.get(effectiveItem)
|
|
227
285
|
};
|
|
228
286
|
}
|
|
229
287
|
|
|
230
288
|
return {
|
|
231
289
|
level: 'item',
|
|
232
|
-
assessment:
|
|
233
|
-
itemRef:
|
|
290
|
+
assessment: $.get(effectiveAssessment) || {},
|
|
291
|
+
itemRef: $.get(effectiveItemRef) || { id: $.get(effectiveCanonicalItemId) },
|
|
234
292
|
item: $.get(effectiveItem)
|
|
235
293
|
};
|
|
236
294
|
});
|
|
@@ -240,8 +298,8 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
240
298
|
|
|
241
299
|
return {
|
|
242
300
|
level: 'item',
|
|
243
|
-
assessment:
|
|
244
|
-
itemRef:
|
|
301
|
+
assessment: $.get(effectiveAssessment) || {},
|
|
302
|
+
itemRef: $.get(effectiveItemRef) || { id: $.get(effectiveCanonicalItemId) },
|
|
245
303
|
item: $.get(effectiveItem) || { id: $.get(effectiveCanonicalItemId), config: {} }
|
|
246
304
|
};
|
|
247
305
|
});
|
|
@@ -258,8 +316,8 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
258
316
|
|
|
259
317
|
return models.filter((model) => model && typeof model === 'object' && typeof model.id === 'string').map((model) => ({
|
|
260
318
|
level: 'element',
|
|
261
|
-
assessment:
|
|
262
|
-
itemRef:
|
|
319
|
+
assessment: $.get(effectiveAssessment) || {},
|
|
320
|
+
itemRef: $.get(effectiveItemRef) || { id: $.get(effectiveCanonicalItemId) },
|
|
263
321
|
item: $.get(effectiveItem),
|
|
264
322
|
elementId: model.id
|
|
265
323
|
}));
|
|
@@ -533,12 +591,32 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
533
591
|
|
|
534
592
|
for (const renderedTool of $.get(renderedTools)) {
|
|
535
593
|
if (renderedTool.subscribeActive) {
|
|
594
|
+
let disposed = false;
|
|
595
|
+
|
|
536
596
|
const unsubscribe = renderedTool.subscribeActive((active) => {
|
|
537
|
-
|
|
538
|
-
|
|
597
|
+
// Tools may dispatch their active-change signal from inside
|
|
598
|
+
// a tracked Svelte $effect (e.g. tool-tts-inline does this
|
|
599
|
+
// on mount). When the toolbar synchronously creates / re-
|
|
600
|
+
// connects the tool element during its own template/
|
|
601
|
+
// derivation pass — for example when the section player
|
|
602
|
+
// collapses on resize — that dispatch lands back here while
|
|
603
|
+
// our parent derivation is still running, and Svelte
|
|
604
|
+
// rejects the `activeToolState` write with
|
|
605
|
+
// `state_unsafe_mutation`. Queue the update on a
|
|
606
|
+
// microtask so the mutation happens after the current
|
|
607
|
+
// reactive flush settles.
|
|
608
|
+
queueMicrotask(() => {
|
|
609
|
+
if (disposed) return;
|
|
610
|
+
|
|
611
|
+
$.set(activeToolState, { ...$.get(activeToolState), [renderedTool.toolId]: active }, true);
|
|
612
|
+
renderedTool.sync?.();
|
|
613
|
+
});
|
|
539
614
|
});
|
|
540
615
|
|
|
541
|
-
unsubs.push(
|
|
616
|
+
unsubs.push(() => {
|
|
617
|
+
disposed = true;
|
|
618
|
+
unsubscribe();
|
|
619
|
+
});
|
|
542
620
|
}
|
|
543
621
|
}
|
|
544
622
|
|
|
@@ -550,9 +628,25 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
550
628
|
$.user_effect(() => {
|
|
551
629
|
if (!$.get(toolbarContext).subscribeVisibility) return;
|
|
552
630
|
|
|
553
|
-
|
|
554
|
-
|
|
631
|
+
let disposed = false;
|
|
632
|
+
|
|
633
|
+
const unsubscribe = $.get(toolbarContext).subscribeVisibility(() => {
|
|
634
|
+
// Defense-in-depth: defer the state write so a synchronous
|
|
635
|
+
// visibility broadcast from the coordinator never lands inside
|
|
636
|
+
// an active parent derivation/template flush. See the
|
|
637
|
+
// `subscribeActive` handler above for the failure mode this
|
|
638
|
+
// pattern prevents.
|
|
639
|
+
queueMicrotask(() => {
|
|
640
|
+
if (disposed) return;
|
|
641
|
+
|
|
642
|
+
syncRenderedToolsState();
|
|
643
|
+
});
|
|
555
644
|
});
|
|
645
|
+
|
|
646
|
+
return () => {
|
|
647
|
+
disposed = true;
|
|
648
|
+
unsubscribe?.();
|
|
649
|
+
};
|
|
556
650
|
});
|
|
557
651
|
|
|
558
652
|
$.user_effect(() => {
|
|
@@ -560,13 +654,28 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
560
654
|
|
|
561
655
|
if (typeof toolkitCoordinator?.subscribeTelemetry !== 'function') return;
|
|
562
656
|
|
|
563
|
-
|
|
564
|
-
|
|
657
|
+
let disposed = false;
|
|
658
|
+
|
|
659
|
+
const unsubscribe = toolkitCoordinator.subscribeTelemetry(({ eventName, payload }) => {
|
|
660
|
+
if (eventName !== 'pie-toolkit-tool-config-updated') return;
|
|
565
661
|
if (payload?.toolId && !$.get(toolbarVisibleToolIds).includes(payload.toolId)) return;
|
|
566
662
|
|
|
567
|
-
|
|
568
|
-
|
|
663
|
+
// Defense-in-depth: telemetry can be emitted from anywhere in
|
|
664
|
+
// the toolkit lifecycle, including paths that flush
|
|
665
|
+
// synchronously while this component's deriveds are running.
|
|
666
|
+
// Defer the writes so the parent flush always settles first.
|
|
667
|
+
queueMicrotask(() => {
|
|
668
|
+
if (disposed) return;
|
|
669
|
+
|
|
670
|
+
$.set(moduleLoadVersion, $.get(moduleLoadVersion) + 1);
|
|
671
|
+
syncRenderedToolsState();
|
|
672
|
+
});
|
|
569
673
|
});
|
|
674
|
+
|
|
675
|
+
return () => {
|
|
676
|
+
disposed = true;
|
|
677
|
+
unsubscribe?.();
|
|
678
|
+
};
|
|
570
679
|
});
|
|
571
680
|
|
|
572
681
|
function mountElement(node, element) {
|
|
@@ -639,6 +748,9 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
639
748
|
let y = 0;
|
|
640
749
|
let width = currentArgs.mounted.entry.shell?.initialWidth ?? 720;
|
|
641
750
|
let height = currentArgs.mounted.entry.shell?.initialHeight ?? 560;
|
|
751
|
+
let focusTrapCleanup = null;
|
|
752
|
+
let openerEl = null;
|
|
753
|
+
let previousActive = false;
|
|
642
754
|
|
|
643
755
|
const invokeElementUnmount = (value) => {
|
|
644
756
|
if (!value) return;
|
|
@@ -823,6 +935,75 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
823
935
|
applyPositionAndSize();
|
|
824
936
|
};
|
|
825
937
|
|
|
938
|
+
const restoreOpenerFocus = () => {
|
|
939
|
+
const target = openerEl;
|
|
940
|
+
|
|
941
|
+
if (!target) return;
|
|
942
|
+
|
|
943
|
+
queueMicrotask(() => {
|
|
944
|
+
if (!target.isConnected) return;
|
|
945
|
+
|
|
946
|
+
try {
|
|
947
|
+
target.focus();
|
|
948
|
+
} catch {
|
|
949
|
+
// ignore
|
|
950
|
+
}
|
|
951
|
+
});
|
|
952
|
+
};
|
|
953
|
+
|
|
954
|
+
const getDeepActiveElement = () => {
|
|
955
|
+
if (typeof document === 'undefined') return null;
|
|
956
|
+
|
|
957
|
+
let active = document.activeElement;
|
|
958
|
+
|
|
959
|
+
while (active) {
|
|
960
|
+
const root = active.shadowRoot;
|
|
961
|
+
|
|
962
|
+
if (root && root.activeElement && root.activeElement !== active) {
|
|
963
|
+
active = root.activeElement;
|
|
964
|
+
} else {
|
|
965
|
+
break;
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
return active ?? null;
|
|
970
|
+
};
|
|
971
|
+
|
|
972
|
+
const installFocusTrap = () => {
|
|
973
|
+
if (!shellEl || focusTrapCleanup) return;
|
|
974
|
+
|
|
975
|
+
const active = getDeepActiveElement();
|
|
976
|
+
|
|
977
|
+
// Only update opener if we don't already have one (survives re-open within a
|
|
978
|
+
// single mount lifecycle) and the active element isn't inside the shell itself.
|
|
979
|
+
if (!openerEl && active && !shellEl.contains(active)) {
|
|
980
|
+
openerEl = active;
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
focusTrapCleanup = createFocusTrap(shellEl, {
|
|
984
|
+
initialFocus: closeButtonEl,
|
|
985
|
+
onEscape: () => {
|
|
986
|
+
closeShell();
|
|
987
|
+
}
|
|
988
|
+
});
|
|
989
|
+
};
|
|
990
|
+
|
|
991
|
+
const removeFocusTrap = () => {
|
|
992
|
+
if (!focusTrapCleanup) return;
|
|
993
|
+
|
|
994
|
+
const cleanup = focusTrapCleanup;
|
|
995
|
+
|
|
996
|
+
focusTrapCleanup = null;
|
|
997
|
+
|
|
998
|
+
try {
|
|
999
|
+
cleanup();
|
|
1000
|
+
} catch {
|
|
1001
|
+
// ignore
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
restoreOpenerFocus();
|
|
1005
|
+
};
|
|
1006
|
+
|
|
826
1007
|
const closeShell = () => {
|
|
827
1008
|
$.get(toolbarContext).toggleTool(currentArgs.mounted.toolId);
|
|
828
1009
|
syncRenderedToolsState();
|
|
@@ -953,17 +1134,31 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
953
1134
|
closeButtonEl.type = 'button';
|
|
954
1135
|
closeButtonEl.className = 'pie-tool-shell__close';
|
|
955
1136
|
closeButtonEl.setAttribute('aria-label', 'Close tool');
|
|
956
|
-
closeButtonEl.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" aria-hidden="true"><path d="M3.5 3.5L12.5 12.5M12.5 3.5L3.5 12.5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>';
|
|
957
1137
|
|
|
958
|
-
const
|
|
1138
|
+
const svgNs = 'http://www.w3.org/2000/svg';
|
|
1139
|
+
const closeIconEl = document.createElementNS(svgNs, 'svg');
|
|
959
1140
|
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
1141
|
+
closeIconEl.setAttribute('xmlns', svgNs);
|
|
1142
|
+
closeIconEl.setAttribute('viewBox', '0 0 16 16');
|
|
1143
|
+
closeIconEl.setAttribute('aria-hidden', 'true');
|
|
1144
|
+
|
|
1145
|
+
const closeIconPath = document.createElementNS(svgNs, 'path');
|
|
1146
|
+
|
|
1147
|
+
closeIconPath.setAttribute('d', 'M3.5 3.5L12.5 12.5M12.5 3.5L3.5 12.5');
|
|
1148
|
+
closeIconPath.setAttribute('stroke', 'currentColor');
|
|
1149
|
+
closeIconPath.setAttribute('stroke-width', '1.8');
|
|
1150
|
+
closeIconPath.setAttribute('stroke-linecap', 'round');
|
|
1151
|
+
closeIconEl.appendChild(closeIconPath);
|
|
1152
|
+
closeButtonEl.appendChild(closeIconEl);
|
|
1153
|
+
|
|
1154
|
+
// SVGElement.style exists but is readonly in DOM types; cast once.
|
|
1155
|
+
const closeIconStyle = closeIconEl.style;
|
|
1156
|
+
|
|
1157
|
+
closeIconStyle.width = '16px';
|
|
1158
|
+
closeIconStyle.height = '16px';
|
|
1159
|
+
closeIconStyle.display = 'block';
|
|
1160
|
+
closeIconStyle.flexShrink = '0';
|
|
1161
|
+
closeIconStyle.pointerEvents = 'none';
|
|
967
1162
|
|
|
968
1163
|
const closeButtonBaseBackground = 'color-mix(in srgb, var(--pie-white, #fff) 8%, transparent)';
|
|
969
1164
|
const closeButtonHoverBackground = 'color-mix(in srgb, var(--pie-white, #fff) 18%, transparent)';
|
|
@@ -1081,6 +1276,12 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1081
1276
|
applyShellStyle();
|
|
1082
1277
|
mountContent();
|
|
1083
1278
|
notifyHostedResize();
|
|
1279
|
+
|
|
1280
|
+
if (currentArgs.active) {
|
|
1281
|
+
installFocusTrap();
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
previousActive = currentArgs.active;
|
|
1084
1285
|
}
|
|
1085
1286
|
|
|
1086
1287
|
return {
|
|
@@ -1094,11 +1295,26 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1094
1295
|
mountContent();
|
|
1095
1296
|
applyShellStyle();
|
|
1096
1297
|
notifyHostedResize();
|
|
1298
|
+
|
|
1299
|
+
if (!previousActive && currentArgs.active) {
|
|
1300
|
+
installFocusTrap();
|
|
1301
|
+
} else if (previousActive && !currentArgs.active) {
|
|
1302
|
+
removeFocusTrap();
|
|
1303
|
+
openerEl = null;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
previousActive = currentArgs.active;
|
|
1097
1307
|
},
|
|
1098
1308
|
|
|
1099
1309
|
destroy() {
|
|
1100
1310
|
notifyHostedUnmount();
|
|
1101
1311
|
|
|
1312
|
+
if (focusTrapCleanup) {
|
|
1313
|
+
removeFocusTrap();
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
openerEl = null;
|
|
1317
|
+
|
|
1102
1318
|
if (resizeHandleEl) {
|
|
1103
1319
|
resizeHandleEl.removeEventListener('pointerdown', onResizePointerDown);
|
|
1104
1320
|
}
|
|
@@ -1221,33 +1437,6 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1221
1437
|
$.flush();
|
|
1222
1438
|
},
|
|
1223
1439
|
|
|
1224
|
-
get pnpResolver() {
|
|
1225
|
-
return pnpResolver();
|
|
1226
|
-
},
|
|
1227
|
-
|
|
1228
|
-
set pnpResolver($$value) {
|
|
1229
|
-
pnpResolver($$value);
|
|
1230
|
-
$.flush();
|
|
1231
|
-
},
|
|
1232
|
-
|
|
1233
|
-
get assessment() {
|
|
1234
|
-
return assessment();
|
|
1235
|
-
},
|
|
1236
|
-
|
|
1237
|
-
set assessment($$value) {
|
|
1238
|
-
assessment($$value);
|
|
1239
|
-
$.flush();
|
|
1240
|
-
},
|
|
1241
|
-
|
|
1242
|
-
get itemRef() {
|
|
1243
|
-
return itemRef();
|
|
1244
|
-
},
|
|
1245
|
-
|
|
1246
|
-
set itemRef($$value) {
|
|
1247
|
-
itemRef($$value);
|
|
1248
|
-
$.flush();
|
|
1249
|
-
},
|
|
1250
|
-
|
|
1251
1440
|
get item() {
|
|
1252
1441
|
return item();
|
|
1253
1442
|
},
|
|
@@ -1299,7 +1488,7 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1299
1488
|
|
|
1300
1489
|
{
|
|
1301
1490
|
var consequent_13 = ($$anchor) => {
|
|
1302
|
-
var div =
|
|
1491
|
+
var div = root_2();
|
|
1303
1492
|
let classes;
|
|
1304
1493
|
var div_1 = $.child(div);
|
|
1305
1494
|
var node_2 = $.child(div_1);
|
|
@@ -1310,7 +1499,7 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1310
1499
|
|
|
1311
1500
|
{
|
|
1312
1501
|
var consequent = ($$anchor) => {
|
|
1313
|
-
var span =
|
|
1502
|
+
var span = root_4();
|
|
1314
1503
|
|
|
1315
1504
|
$.action(span, ($$node, $$action_arg) => mountElementWithShell?.($$node, $$action_arg), () => ({
|
|
1316
1505
|
mounted: $.get(mounted),
|
|
@@ -1321,7 +1510,7 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1321
1510
|
};
|
|
1322
1511
|
|
|
1323
1512
|
var alternate = ($$anchor) => {
|
|
1324
|
-
var span_1 =
|
|
1513
|
+
var span_1 = root_5();
|
|
1325
1514
|
|
|
1326
1515
|
$.action(span_1, ($$node, $$action_arg) => mountElement?.($$node, $$action_arg), () => $.get(mounted).entry.element);
|
|
1327
1516
|
$.append($$anchor, span_1);
|
|
@@ -1343,7 +1532,7 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1343
1532
|
|
|
1344
1533
|
{
|
|
1345
1534
|
var consequent_5 = ($$anchor) => {
|
|
1346
|
-
var a =
|
|
1535
|
+
var a = root_7();
|
|
1347
1536
|
let classes_1;
|
|
1348
1537
|
var node_6 = $.child(a);
|
|
1349
1538
|
|
|
@@ -1354,17 +1543,17 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1354
1543
|
|
|
1355
1544
|
{
|
|
1356
1545
|
var consequent_1 = ($$anchor) => {
|
|
1357
|
-
var
|
|
1358
|
-
var node_8 = $.first_child(fragment_4);
|
|
1546
|
+
var span_2 = root_9();
|
|
1359
1547
|
|
|
1360
|
-
$.html(
|
|
1361
|
-
$.
|
|
1548
|
+
$.html(span_2, () => sanitizeSvgIcon($.get(item).icon), true);
|
|
1549
|
+
$.reset(span_2);
|
|
1550
|
+
$.append($$anchor, span_2);
|
|
1362
1551
|
};
|
|
1363
1552
|
|
|
1364
1553
|
var d = $.derived(() => isInlineSvgIcon($.get(item).icon));
|
|
1365
1554
|
|
|
1366
1555
|
var consequent_2 = ($$anchor) => {
|
|
1367
|
-
var img =
|
|
1556
|
+
var img = root_10();
|
|
1368
1557
|
|
|
1369
1558
|
$.template_effect(() => $.set_attribute(img, 'src', $.get(item).icon));
|
|
1370
1559
|
$.append($$anchor, img);
|
|
@@ -1374,31 +1563,31 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1374
1563
|
|
|
1375
1564
|
var alternate_2 = ($$anchor) => {
|
|
1376
1565
|
const fallbackIcon = $.derived(() => getFallbackIconSvg($.get(item).icon));
|
|
1377
|
-
var
|
|
1378
|
-
var
|
|
1566
|
+
var fragment_4 = $.comment();
|
|
1567
|
+
var node_8 = $.first_child(fragment_4);
|
|
1379
1568
|
|
|
1380
1569
|
{
|
|
1381
1570
|
var consequent_3 = ($$anchor) => {
|
|
1382
|
-
var
|
|
1383
|
-
var node_10 = $.first_child(fragment_6);
|
|
1571
|
+
var span_3 = root_12();
|
|
1384
1572
|
|
|
1385
|
-
$.html(
|
|
1386
|
-
$.
|
|
1573
|
+
$.html(span_3, () => sanitizeSvgIcon($.get(fallbackIcon)), true);
|
|
1574
|
+
$.reset(span_3);
|
|
1575
|
+
$.append($$anchor, span_3);
|
|
1387
1576
|
};
|
|
1388
1577
|
|
|
1389
1578
|
var alternate_1 = ($$anchor) => {
|
|
1390
|
-
var i =
|
|
1579
|
+
var i = root_13();
|
|
1391
1580
|
|
|
1392
1581
|
$.template_effect(() => $.set_class(i, 1, `icon icon-${$.get(item).icon}`, 'svelte-rnx3ie'));
|
|
1393
1582
|
$.append($$anchor, i);
|
|
1394
1583
|
};
|
|
1395
1584
|
|
|
1396
|
-
$.if(
|
|
1585
|
+
$.if(node_8, ($$render) => {
|
|
1397
1586
|
if ($.get(fallbackIcon)) $$render(consequent_3); else $$render(alternate_1, -1);
|
|
1398
1587
|
});
|
|
1399
1588
|
}
|
|
1400
1589
|
|
|
1401
|
-
$.append($$anchor,
|
|
1590
|
+
$.append($$anchor, fragment_4);
|
|
1402
1591
|
};
|
|
1403
1592
|
|
|
1404
1593
|
$.if(node_7, ($$render) => {
|
|
@@ -1445,28 +1634,28 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1445
1634
|
var d_2 = $.derived(() => isToolbarLinkItem($.get(item)));
|
|
1446
1635
|
|
|
1447
1636
|
var alternate_5 = ($$anchor) => {
|
|
1448
|
-
var button_1 =
|
|
1637
|
+
var button_1 = root_14();
|
|
1449
1638
|
let classes_2;
|
|
1450
|
-
var
|
|
1639
|
+
var node_9 = $.child(button_1);
|
|
1451
1640
|
|
|
1452
1641
|
{
|
|
1453
1642
|
var consequent_9 = ($$anchor) => {
|
|
1454
|
-
var
|
|
1455
|
-
var
|
|
1643
|
+
var fragment_5 = $.comment();
|
|
1644
|
+
var node_10 = $.first_child(fragment_5);
|
|
1456
1645
|
|
|
1457
1646
|
{
|
|
1458
1647
|
var consequent_6 = ($$anchor) => {
|
|
1459
|
-
var
|
|
1460
|
-
var node_13 = $.first_child(fragment_8);
|
|
1648
|
+
var span_4 = root_16();
|
|
1461
1649
|
|
|
1462
|
-
$.html(
|
|
1463
|
-
$.
|
|
1650
|
+
$.html(span_4, () => sanitizeSvgIcon($.get(item).icon), true);
|
|
1651
|
+
$.reset(span_4);
|
|
1652
|
+
$.append($$anchor, span_4);
|
|
1464
1653
|
};
|
|
1465
1654
|
|
|
1466
1655
|
var d_3 = $.derived(() => isInlineSvgIcon($.get(item).icon));
|
|
1467
1656
|
|
|
1468
1657
|
var consequent_7 = ($$anchor) => {
|
|
1469
|
-
var img_1 =
|
|
1658
|
+
var img_1 = root_17();
|
|
1470
1659
|
|
|
1471
1660
|
$.template_effect(() => $.set_attribute(img_1, 'src', $.get(item).icon));
|
|
1472
1661
|
$.append($$anchor, img_1);
|
|
@@ -1476,42 +1665,42 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1476
1665
|
|
|
1477
1666
|
var alternate_4 = ($$anchor) => {
|
|
1478
1667
|
const fallbackIcon = $.derived(() => getFallbackIconSvg($.get(item).icon));
|
|
1479
|
-
var
|
|
1480
|
-
var
|
|
1668
|
+
var fragment_6 = $.comment();
|
|
1669
|
+
var node_11 = $.first_child(fragment_6);
|
|
1481
1670
|
|
|
1482
1671
|
{
|
|
1483
1672
|
var consequent_8 = ($$anchor) => {
|
|
1484
|
-
var
|
|
1485
|
-
var node_15 = $.first_child(fragment_10);
|
|
1673
|
+
var span_5 = root_19();
|
|
1486
1674
|
|
|
1487
|
-
$.html(
|
|
1488
|
-
$.
|
|
1675
|
+
$.html(span_5, () => sanitizeSvgIcon($.get(fallbackIcon)), true);
|
|
1676
|
+
$.reset(span_5);
|
|
1677
|
+
$.append($$anchor, span_5);
|
|
1489
1678
|
};
|
|
1490
1679
|
|
|
1491
1680
|
var alternate_3 = ($$anchor) => {
|
|
1492
|
-
var i_1 =
|
|
1681
|
+
var i_1 = root_20();
|
|
1493
1682
|
|
|
1494
1683
|
$.template_effect(() => $.set_class(i_1, 1, `icon icon-${$.get(item).icon}`, 'svelte-rnx3ie'));
|
|
1495
1684
|
$.append($$anchor, i_1);
|
|
1496
1685
|
};
|
|
1497
1686
|
|
|
1498
|
-
$.if(
|
|
1687
|
+
$.if(node_11, ($$render) => {
|
|
1499
1688
|
if ($.get(fallbackIcon)) $$render(consequent_8); else $$render(alternate_3, -1);
|
|
1500
1689
|
});
|
|
1501
1690
|
}
|
|
1502
1691
|
|
|
1503
|
-
$.append($$anchor,
|
|
1692
|
+
$.append($$anchor, fragment_6);
|
|
1504
1693
|
};
|
|
1505
1694
|
|
|
1506
|
-
$.if(
|
|
1695
|
+
$.if(node_10, ($$render) => {
|
|
1507
1696
|
if ($.get(d_3)) $$render(consequent_6); else if ($.get(d_4)) $$render(consequent_7, 1); else $$render(alternate_4, -1);
|
|
1508
1697
|
});
|
|
1509
1698
|
}
|
|
1510
1699
|
|
|
1511
|
-
$.append($$anchor,
|
|
1700
|
+
$.append($$anchor, fragment_5);
|
|
1512
1701
|
};
|
|
1513
1702
|
|
|
1514
|
-
$.if(
|
|
1703
|
+
$.if(node_9, ($$render) => {
|
|
1515
1704
|
if ($.get(item).icon) $$render(consequent_9);
|
|
1516
1705
|
});
|
|
1517
1706
|
}
|
|
@@ -1549,77 +1738,77 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1549
1738
|
$.append($$anchor, fragment_2);
|
|
1550
1739
|
});
|
|
1551
1740
|
|
|
1552
|
-
var
|
|
1741
|
+
var node_12 = $.sibling(node_4, 2);
|
|
1553
1742
|
|
|
1554
|
-
$.each(
|
|
1555
|
-
var
|
|
1556
|
-
var
|
|
1743
|
+
$.each(node_12, 17, () => $.get(mountedElementsAfterButtons), (mounted) => mounted.key, ($$anchor, mounted) => {
|
|
1744
|
+
var fragment_7 = $.comment();
|
|
1745
|
+
var node_13 = $.first_child(fragment_7);
|
|
1557
1746
|
|
|
1558
1747
|
{
|
|
1559
1748
|
var consequent_10 = ($$anchor) => {
|
|
1560
|
-
var
|
|
1749
|
+
var span_6 = root_22();
|
|
1561
1750
|
|
|
1562
|
-
$.action(
|
|
1751
|
+
$.action(span_6, ($$node, $$action_arg) => mountElementWithShell?.($$node, $$action_arg), () => ({
|
|
1563
1752
|
mounted: $.get(mounted),
|
|
1564
1753
|
active: $.get(renderedToolActiveById)[$.get(mounted).toolId] ?? false
|
|
1565
1754
|
}));
|
|
1566
1755
|
|
|
1567
|
-
$.append($$anchor,
|
|
1756
|
+
$.append($$anchor, span_6);
|
|
1568
1757
|
};
|
|
1569
1758
|
|
|
1570
1759
|
var alternate_6 = ($$anchor) => {
|
|
1571
|
-
var
|
|
1760
|
+
var span_7 = root_23();
|
|
1572
1761
|
|
|
1573
|
-
$.action(
|
|
1574
|
-
$.append($$anchor,
|
|
1762
|
+
$.action(span_7, ($$node, $$action_arg) => mountElement?.($$node, $$action_arg), () => $.get(mounted).entry.element);
|
|
1763
|
+
$.append($$anchor, span_7);
|
|
1575
1764
|
};
|
|
1576
1765
|
|
|
1577
|
-
$.if(
|
|
1766
|
+
$.if(node_13, ($$render) => {
|
|
1578
1767
|
if ($.get(mounted).entry.shell) $$render(consequent_10); else $$render(alternate_6, -1);
|
|
1579
1768
|
});
|
|
1580
1769
|
}
|
|
1581
1770
|
|
|
1582
|
-
$.append($$anchor,
|
|
1771
|
+
$.append($$anchor, fragment_7);
|
|
1583
1772
|
});
|
|
1584
1773
|
|
|
1585
1774
|
$.reset(div_1);
|
|
1586
1775
|
|
|
1587
|
-
var
|
|
1776
|
+
var node_14 = $.sibling(div_1, 2);
|
|
1588
1777
|
|
|
1589
1778
|
{
|
|
1590
1779
|
var consequent_12 = ($$anchor) => {
|
|
1591
|
-
var div_2 =
|
|
1780
|
+
var div_2 = root_24();
|
|
1592
1781
|
let classes_3;
|
|
1593
1782
|
|
|
1594
1783
|
$.each(div_2, 21, () => $.get(mountedElementsControlsRow), (mounted) => mounted.key, ($$anchor, mounted) => {
|
|
1595
|
-
var
|
|
1596
|
-
var
|
|
1784
|
+
var fragment_8 = $.comment();
|
|
1785
|
+
var node_15 = $.first_child(fragment_8);
|
|
1597
1786
|
|
|
1598
1787
|
{
|
|
1599
1788
|
var consequent_11 = ($$anchor) => {
|
|
1600
|
-
var
|
|
1789
|
+
var span_8 = root_26();
|
|
1601
1790
|
|
|
1602
|
-
$.action(
|
|
1791
|
+
$.action(span_8, ($$node, $$action_arg) => mountElementWithShell?.($$node, $$action_arg), () => ({
|
|
1603
1792
|
mounted: $.get(mounted),
|
|
1604
1793
|
active: $.get(renderedToolActiveById)[$.get(mounted).toolId] ?? false
|
|
1605
1794
|
}));
|
|
1606
1795
|
|
|
1607
|
-
$.append($$anchor,
|
|
1796
|
+
$.append($$anchor, span_8);
|
|
1608
1797
|
};
|
|
1609
1798
|
|
|
1610
1799
|
var alternate_7 = ($$anchor) => {
|
|
1611
|
-
var
|
|
1800
|
+
var span_9 = root_27();
|
|
1612
1801
|
|
|
1613
|
-
$.action(
|
|
1614
|
-
$.append($$anchor,
|
|
1802
|
+
$.action(span_9, ($$node, $$action_arg) => mountElement?.($$node, $$action_arg), () => $.get(mounted).entry.element);
|
|
1803
|
+
$.append($$anchor, span_9);
|
|
1615
1804
|
};
|
|
1616
1805
|
|
|
1617
|
-
$.if(
|
|
1806
|
+
$.if(node_15, ($$render) => {
|
|
1618
1807
|
if ($.get(mounted).entry.shell) $$render(consequent_11); else $$render(alternate_7, -1);
|
|
1619
1808
|
});
|
|
1620
1809
|
}
|
|
1621
1810
|
|
|
1622
|
-
$.append($$anchor,
|
|
1811
|
+
$.append($$anchor, fragment_8);
|
|
1623
1812
|
});
|
|
1624
1813
|
|
|
1625
1814
|
$.reset(div_2);
|
|
@@ -1633,7 +1822,7 @@ export default function ItemToolBar($$anchor, $$props) {
|
|
|
1633
1822
|
$.append($$anchor, div_2);
|
|
1634
1823
|
};
|
|
1635
1824
|
|
|
1636
|
-
$.if(
|
|
1825
|
+
$.if(node_14, ($$render) => {
|
|
1637
1826
|
if ($.get(shouldRenderControlsRow)) $$render(consequent_12);
|
|
1638
1827
|
});
|
|
1639
1828
|
}
|
|
@@ -1683,9 +1872,6 @@ __pieDefineSafely('pie-item-toolbar', $.create_custom_element(
|
|
|
1683
1872
|
language: { attribute: 'language', type: 'String' },
|
|
1684
1873
|
scopeElement: { type: 'Object' },
|
|
1685
1874
|
toolRegistry: { type: 'Object' },
|
|
1686
|
-
pnpResolver: { type: 'Object' },
|
|
1687
|
-
assessment: { type: 'Object' },
|
|
1688
|
-
itemRef: { type: 'Object' },
|
|
1689
1875
|
item: { type: 'Object' },
|
|
1690
1876
|
hostButtons: { type: 'Object' },
|
|
1691
1877
|
class: {}
|