@pie-players/pie-section-player 0.2.12 → 0.2.13
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 +28 -568
- package/dist/component-definitions.d.ts +0 -3
- package/dist/component-definitions.d.ts.map +1 -1
- package/dist/components/section-player-vertical-element.d.ts +2 -0
- package/dist/components/section-player-vertical-element.d.ts.map +1 -0
- package/dist/components/shared/composition.d.ts +9 -0
- package/dist/components/shared/composition.d.ts.map +1 -0
- package/dist/components/shared/player-action.d.ts +18 -0
- package/dist/components/shared/player-action.d.ts.map +1 -0
- package/dist/components/shared/player-preload.d.ts +37 -0
- package/dist/components/shared/player-preload.d.ts.map +1 -0
- package/dist/components/shared/section-player-runtime.d.ts +104 -0
- package/dist/components/shared/section-player-runtime.d.ts.map +1 -0
- package/dist/components/shared/section-player-view-state.d.ts +24 -0
- package/dist/components/shared/section-player-view-state.d.ts.map +1 -0
- package/dist/controllers/SectionContentService.d.ts.map +1 -1
- package/dist/controllers/SectionController.d.ts +5 -1
- package/dist/controllers/SectionController.d.ts.map +1 -1
- package/dist/controllers/SectionSessionService.d.ts +0 -1
- package/dist/controllers/SectionSessionService.d.ts.map +1 -1
- package/dist/controllers/toolkit-section-contracts.d.ts +2 -28
- package/dist/controllers/toolkit-section-contracts.d.ts.map +1 -1
- package/dist/controllers/types.d.ts +28 -1
- package/dist/controllers/types.d.ts.map +1 -1
- package/dist/pie-item-player-B1iGN63e.js +6189 -0
- package/dist/pie-section-player.d.ts +0 -8
- package/dist/pie-section-player.d.ts.map +1 -1
- package/dist/pie-section-player.js +56558 -11
- package/dist/player-preload-CQVG0Bih.js +705 -0
- package/dist/utils/player-preload.d.ts +2 -0
- package/dist/utils/player-preload.d.ts.map +1 -0
- package/dist/utils/player-preload.js +8 -0
- package/package.json +23 -32
- package/src/components/ItemShellElement.svelte +10 -1
- package/src/components/PieSectionPlayerBaseElement.svelte +21 -78
- package/src/components/PieSectionPlayerSplitPaneElement.svelte +236 -295
- package/src/components/PieSectionPlayerVerticalElement.svelte +424 -0
- package/src/components/shared/SectionItemCard.svelte +92 -0
- package/src/components/shared/SectionPassageCard.svelte +88 -0
- package/dist/ItemRenderer-MsjF_Beu.js +0 -467
- package/dist/PieItemModeLayoutElement-D7oTzA9T.js +0 -316
- package/dist/PieSplitPanelLayoutElement-GUtJ_NlF.js +0 -246
- package/dist/PieVerticalLayoutElement-BoA3FO5g.js +0 -194
- package/dist/controllers/SectionToolkitService.d.ts +0 -24
- package/dist/controllers/SectionToolkitService.d.ts.map +0 -1
- package/dist/controllers/SessionPersistenceStrategy.d.ts +0 -15
- package/dist/controllers/SessionPersistenceStrategy.d.ts.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/pie-section-player-DJ5NcwdT.js +0 -17078
- package/dist/runtime/runtime-event-guards.d.ts +0 -4
- package/dist/runtime/runtime-event-guards.d.ts.map +0 -1
- package/src/PieSectionPlayer.svelte +0 -826
- package/src/components/ItemModeLayout.svelte +0 -172
- package/src/components/ItemNavigation.svelte +0 -96
- package/src/components/ItemPlayerBridge.svelte +0 -110
- package/src/components/ItemRenderer.svelte +0 -248
- package/src/components/ItemShell.svelte +0 -86
- package/src/components/layout-elements/PieItemModeLayoutElement.svelte +0 -47
- package/src/components/layout-elements/PieSplitPanelLayoutElement.svelte +0 -62
- package/src/components/layout-elements/PieVerticalLayoutElement.svelte +0 -41
- package/src/components/layouts/SplitPanelLayout.svelte +0 -385
- package/src/components/layouts/VerticalLayout.svelte +0 -193
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-preload.d.ts","sourceRoot":"","sources":["../../src/utils/player-preload.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EACrB,aAAa,EACb,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,EACrB,KAAK,kBAAkB,GACvB,MAAM,wCAAwC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-players/pie-section-player",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Web component for rendering QTI 3.0 assessment sections with passages and items",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,35 +15,23 @@
|
|
|
15
15
|
"unpkg": "./dist/pie-section-player.js",
|
|
16
16
|
"jsdelivr": "./dist/pie-section-player.js",
|
|
17
17
|
"main": "./dist/pie-section-player.js",
|
|
18
|
-
"types": "./dist/
|
|
18
|
+
"types": "./dist/pie-section-player.d.ts",
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
21
|
-
"types": "./dist/index.d.ts",
|
|
22
|
-
"import": "./dist/pie-section-player.js"
|
|
23
|
-
},
|
|
24
|
-
"./components/ItemShellElement.svelte": {
|
|
25
|
-
"types": "./dist/pie-section-player.d.ts",
|
|
26
|
-
"import": "./dist/pie-section-player.js"
|
|
27
|
-
},
|
|
28
|
-
"./components/PassageShellElement.svelte": {
|
|
29
|
-
"types": "./dist/pie-section-player.d.ts",
|
|
30
|
-
"import": "./dist/pie-section-player.js"
|
|
31
|
-
},
|
|
32
|
-
"./components/section-player-base-element": {
|
|
33
21
|
"types": "./dist/pie-section-player.d.ts",
|
|
34
22
|
"import": "./dist/pie-section-player.js"
|
|
35
23
|
},
|
|
36
|
-
"./components/
|
|
24
|
+
"./components/section-player-splitpane-element": {
|
|
37
25
|
"types": "./dist/pie-section-player.d.ts",
|
|
38
26
|
"import": "./dist/pie-section-player.js"
|
|
39
27
|
},
|
|
40
|
-
"./components/
|
|
28
|
+
"./components/section-player-vertical-element": {
|
|
41
29
|
"types": "./dist/pie-section-player.d.ts",
|
|
42
30
|
"import": "./dist/pie-section-player.js"
|
|
43
31
|
},
|
|
44
|
-
"./
|
|
45
|
-
"types": "./dist/
|
|
46
|
-
"import": "./dist/
|
|
32
|
+
"./utils/player-preload": {
|
|
33
|
+
"types": "./dist/utils/player-preload.d.ts",
|
|
34
|
+
"import": "./dist/utils/player-preload.js"
|
|
47
35
|
}
|
|
48
36
|
},
|
|
49
37
|
"files": [
|
|
@@ -61,22 +49,25 @@
|
|
|
61
49
|
"svelte": "^5.51.0"
|
|
62
50
|
},
|
|
63
51
|
"dependencies": {
|
|
64
|
-
"@pie-players/pie-assessment-toolkit": "0.2.
|
|
65
|
-
"@pie-players/pie-
|
|
66
|
-
"@pie-players/pie-
|
|
67
|
-
"@pie-players/pie-
|
|
68
|
-
"@pie-players/pie-
|
|
69
|
-
"@pie-players/pie-
|
|
70
|
-
"@pie-players/pie-
|
|
71
|
-
"@pie-players/pie-
|
|
72
|
-
"@pie-players/pie-tool-
|
|
73
|
-
"@pie-players/pie-tool-
|
|
74
|
-
"@pie-players/pie-tool-
|
|
75
|
-
"@pie-players/pie-tool-
|
|
76
|
-
"@pie-players/
|
|
52
|
+
"@pie-players/pie-assessment-toolkit": "0.2.10",
|
|
53
|
+
"@pie-players/pie-item-player": "0.1.1",
|
|
54
|
+
"@pie-players/pie-context": "0.1.2",
|
|
55
|
+
"@pie-players/pie-players-shared": "0.2.6",
|
|
56
|
+
"@pie-players/pie-toolbars": "0.1.1",
|
|
57
|
+
"@pie-players/pie-tool-answer-eliminator": "0.2.10",
|
|
58
|
+
"@pie-players/pie-tool-calculator": "0.1.10",
|
|
59
|
+
"@pie-players/pie-tool-theme": "0.1.10",
|
|
60
|
+
"@pie-players/pie-tool-graph": "0.1.10",
|
|
61
|
+
"@pie-players/pie-tool-line-reader": "0.1.10",
|
|
62
|
+
"@pie-players/pie-tool-periodic-table": "0.1.10",
|
|
63
|
+
"@pie-players/pie-tool-protractor": "0.1.10",
|
|
64
|
+
"@pie-players/pie-tool-ruler": "0.1.10",
|
|
65
|
+
"@pie-players/pie-tool-text-to-speech": "0.1.10",
|
|
66
|
+
"@pie-players/tts-client-server": "0.2.5",
|
|
77
67
|
"daisyui": "^5.5.18"
|
|
78
68
|
},
|
|
79
69
|
"devDependencies": {
|
|
70
|
+
"@axe-core/playwright": "^4.11.1",
|
|
80
71
|
"@biomejs/biome": "^2.3.13",
|
|
81
72
|
"@playwright/test": "^1.58.2",
|
|
82
73
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
@@ -113,11 +113,20 @@
|
|
|
113
113
|
if (!host) return;
|
|
114
114
|
dispatchRegistration(PIE_REGISTER_EVENT);
|
|
115
115
|
|
|
116
|
-
const
|
|
116
|
+
const seenSessionEvents = new WeakSet<Event>();
|
|
117
|
+
const onSessionChanged = (event: Event) => {
|
|
118
|
+
// Some players emit `session-changed`, others emit `sessionchanged`.
|
|
119
|
+
// Guard against duplicate forwarding when both fire for the same original event.
|
|
120
|
+
if (seenSessionEvents.has(event)) return;
|
|
121
|
+
seenSessionEvents.add(event);
|
|
122
|
+
normalizeAndDispatchSession(event);
|
|
123
|
+
};
|
|
117
124
|
host.addEventListener("sessionchanged", onSessionChanged);
|
|
125
|
+
host.addEventListener("session-changed", onSessionChanged);
|
|
118
126
|
|
|
119
127
|
return () => {
|
|
120
128
|
host?.removeEventListener("sessionchanged", onSessionChanged);
|
|
129
|
+
host?.removeEventListener("session-changed", onSessionChanged);
|
|
121
130
|
dispatchRegistration(PIE_UNREGISTER_EVENT);
|
|
122
131
|
};
|
|
123
132
|
});
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
section: { type: "Object", reflect: false },
|
|
9
9
|
sectionId: { attribute: "section-id", type: "String" },
|
|
10
10
|
attemptId: { attribute: "attempt-id", type: "String" },
|
|
11
|
-
view: { type: "String" },
|
|
12
11
|
playerType: { attribute: "player-type", type: "String" },
|
|
13
12
|
player: { type: "Object", reflect: false },
|
|
14
13
|
lazyInit: { attribute: "lazy-init", type: "Boolean" },
|
|
@@ -31,45 +30,21 @@
|
|
|
31
30
|
import { SectionController } from "../controllers/SectionController.js";
|
|
32
31
|
import type { SectionCompositionModel } from "../controllers/types.js";
|
|
33
32
|
import type { AssessmentSection } from "@pie-players/pie-players-shared/types";
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
currentItem: null,
|
|
44
|
-
isPageMode: false,
|
|
45
|
-
itemSessionsByItemId: {},
|
|
46
|
-
testAttemptSession: null,
|
|
47
|
-
};
|
|
48
|
-
const DEFAULT_ASSESSMENT_ID = "section-demo-direct";
|
|
49
|
-
const DEFAULT_PLAYER_TYPE = "iife";
|
|
50
|
-
const DEFAULT_LAZY_INIT = true;
|
|
51
|
-
const DEFAULT_ISOLATION = "inherit";
|
|
52
|
-
const LEGACY_RUNTIME_WARNING_KEY = "pie-section-player-base:legacy-runtime-props";
|
|
53
|
-
const warnedKeys = new Set<string>();
|
|
54
|
-
type RuntimeConfig = {
|
|
55
|
-
assessmentId?: string;
|
|
56
|
-
playerType?: string;
|
|
57
|
-
player?: Record<string, unknown> | null;
|
|
58
|
-
lazyInit?: boolean;
|
|
59
|
-
tools?: Record<string, unknown> | null;
|
|
60
|
-
accessibility?: Record<string, unknown> | null;
|
|
61
|
-
coordinator?: unknown;
|
|
62
|
-
createSectionController?: unknown;
|
|
63
|
-
isolation?: string;
|
|
64
|
-
env?: Record<string, unknown>;
|
|
65
|
-
};
|
|
33
|
+
import { EMPTY_COMPOSITION } from "./shared/composition.js";
|
|
34
|
+
import {
|
|
35
|
+
DEFAULT_ASSESSMENT_ID,
|
|
36
|
+
DEFAULT_ENV,
|
|
37
|
+
DEFAULT_ISOLATION,
|
|
38
|
+
DEFAULT_LAZY_INIT,
|
|
39
|
+
DEFAULT_PLAYER_TYPE,
|
|
40
|
+
type RuntimeConfig,
|
|
41
|
+
} from "./shared/section-player-runtime.js";
|
|
66
42
|
let {
|
|
67
43
|
assessmentId = DEFAULT_ASSESSMENT_ID,
|
|
68
44
|
runtime = null as RuntimeConfig | null,
|
|
69
45
|
section = null as AssessmentSection | null,
|
|
70
46
|
sectionId = "",
|
|
71
47
|
attemptId = "",
|
|
72
|
-
view = "candidate",
|
|
73
48
|
playerType = DEFAULT_PLAYER_TYPE,
|
|
74
49
|
player = null as Record<string, unknown> | null,
|
|
75
50
|
lazyInit = DEFAULT_LAZY_INIT,
|
|
@@ -82,7 +57,7 @@
|
|
|
82
57
|
} = $props();
|
|
83
58
|
|
|
84
59
|
let toolkitElement = $state<any>(null);
|
|
85
|
-
let
|
|
60
|
+
let lastCompositionVersion = $state(-1);
|
|
86
61
|
type BaseSectionPlayerEvents = {
|
|
87
62
|
"composition-changed": { composition: SectionCompositionModel };
|
|
88
63
|
"toolkit-ready": Record<string, unknown>;
|
|
@@ -106,7 +81,7 @@
|
|
|
106
81
|
() => runtime?.createSectionController ?? createSectionController,
|
|
107
82
|
);
|
|
108
83
|
const effectiveIsolation = $derived.by(() => runtime?.isolation ?? isolation);
|
|
109
|
-
const effectiveEnv = $derived.by(() => runtime?.env ?? env ??
|
|
84
|
+
const effectiveEnv = $derived.by(() => runtime?.env ?? env ?? DEFAULT_ENV);
|
|
110
85
|
let resolvedSection = $derived.by(() => {
|
|
111
86
|
if (!section) return null;
|
|
112
87
|
const sectionAny = section as any;
|
|
@@ -127,27 +102,18 @@
|
|
|
127
102
|
dispatch(name, detail);
|
|
128
103
|
}
|
|
129
104
|
|
|
130
|
-
function getCompositionSignature(
|
|
131
|
-
model: SectionCompositionModel | null | undefined,
|
|
132
|
-
): string {
|
|
133
|
-
if (!model) return "";
|
|
134
|
-
return JSON.stringify({
|
|
135
|
-
sectionId: model.section?.identifier || "",
|
|
136
|
-
currentItemIndex: model.currentItemIndex ?? -1,
|
|
137
|
-
itemIds: (model.items || []).map((item) => item?.id || ""),
|
|
138
|
-
passageIds: (model.passages || []).map((passage) => passage?.id || ""),
|
|
139
|
-
sessionByItem: Object.entries(model.itemSessionsByItemId || {})
|
|
140
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
141
|
-
.map(([itemId, session]) => [itemId, JSON.stringify(session ?? null)]),
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
105
|
function handleCompositionChanged(event: Event): void {
|
|
146
|
-
const detail = (event as CustomEvent<{
|
|
106
|
+
const detail = (event as CustomEvent<{
|
|
107
|
+
composition?: SectionCompositionModel;
|
|
108
|
+
version?: number;
|
|
109
|
+
}>).detail;
|
|
147
110
|
const nextComposition = detail?.composition || EMPTY_COMPOSITION;
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
111
|
+
const nextVersion =
|
|
112
|
+
typeof detail?.version === "number"
|
|
113
|
+
? detail.version
|
|
114
|
+
: lastCompositionVersion + 1;
|
|
115
|
+
if (nextVersion === lastCompositionVersion) return;
|
|
116
|
+
lastCompositionVersion = nextVersion;
|
|
151
117
|
emit("composition-changed", {
|
|
152
118
|
composition: nextComposition,
|
|
153
119
|
});
|
|
@@ -167,28 +133,6 @@
|
|
|
167
133
|
effectiveCreateSectionController || (() => new SectionController());
|
|
168
134
|
});
|
|
169
135
|
|
|
170
|
-
$effect(() => {
|
|
171
|
-
if (typeof window === "undefined" || runtime) return;
|
|
172
|
-
const usedLegacyProps: string[] = [];
|
|
173
|
-
if (assessmentId !== DEFAULT_ASSESSMENT_ID) usedLegacyProps.push("assessmentId");
|
|
174
|
-
if (playerType !== DEFAULT_PLAYER_TYPE) usedLegacyProps.push("playerType");
|
|
175
|
-
if (player !== null) usedLegacyProps.push("player");
|
|
176
|
-
if (lazyInit !== DEFAULT_LAZY_INIT) usedLegacyProps.push("lazyInit");
|
|
177
|
-
if (tools !== null) usedLegacyProps.push("tools");
|
|
178
|
-
if (accessibility !== null) usedLegacyProps.push("accessibility");
|
|
179
|
-
if (coordinator !== null) usedLegacyProps.push("coordinator");
|
|
180
|
-
if (createSectionController !== null) usedLegacyProps.push("createSectionController");
|
|
181
|
-
if (isolation !== DEFAULT_ISOLATION) usedLegacyProps.push("isolation");
|
|
182
|
-
if (env !== null) usedLegacyProps.push("env");
|
|
183
|
-
if (usedLegacyProps.length === 0) return;
|
|
184
|
-
const key = `${LEGACY_RUNTIME_WARNING_KEY}:${usedLegacyProps.sort().join(",")}`;
|
|
185
|
-
if (warnedKeys.has(key)) return;
|
|
186
|
-
warnedKeys.add(key);
|
|
187
|
-
console.warn(
|
|
188
|
-
`[pie-section-player-base] Runtime props (${usedLegacyProps.join(", ")}) are deprecated. Prefer the \`runtime\` object prop.`,
|
|
189
|
-
);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
136
|
</script>
|
|
193
137
|
|
|
194
138
|
<pie-assessment-toolkit
|
|
@@ -199,7 +143,6 @@
|
|
|
199
143
|
attempt-id={attemptId}
|
|
200
144
|
player-type={effectivePlayerType}
|
|
201
145
|
player={effectivePlayer}
|
|
202
|
-
{view}
|
|
203
146
|
env={effectiveEnv}
|
|
204
147
|
lazy-init={effectiveLazyInit}
|
|
205
148
|
tools={effectiveTools}
|