@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.
Files changed (62) hide show
  1. package/README.md +28 -568
  2. package/dist/component-definitions.d.ts +0 -3
  3. package/dist/component-definitions.d.ts.map +1 -1
  4. package/dist/components/section-player-vertical-element.d.ts +2 -0
  5. package/dist/components/section-player-vertical-element.d.ts.map +1 -0
  6. package/dist/components/shared/composition.d.ts +9 -0
  7. package/dist/components/shared/composition.d.ts.map +1 -0
  8. package/dist/components/shared/player-action.d.ts +18 -0
  9. package/dist/components/shared/player-action.d.ts.map +1 -0
  10. package/dist/components/shared/player-preload.d.ts +37 -0
  11. package/dist/components/shared/player-preload.d.ts.map +1 -0
  12. package/dist/components/shared/section-player-runtime.d.ts +104 -0
  13. package/dist/components/shared/section-player-runtime.d.ts.map +1 -0
  14. package/dist/components/shared/section-player-view-state.d.ts +24 -0
  15. package/dist/components/shared/section-player-view-state.d.ts.map +1 -0
  16. package/dist/controllers/SectionContentService.d.ts.map +1 -1
  17. package/dist/controllers/SectionController.d.ts +5 -1
  18. package/dist/controllers/SectionController.d.ts.map +1 -1
  19. package/dist/controllers/SectionSessionService.d.ts +0 -1
  20. package/dist/controllers/SectionSessionService.d.ts.map +1 -1
  21. package/dist/controllers/toolkit-section-contracts.d.ts +2 -28
  22. package/dist/controllers/toolkit-section-contracts.d.ts.map +1 -1
  23. package/dist/controllers/types.d.ts +28 -1
  24. package/dist/controllers/types.d.ts.map +1 -1
  25. package/dist/pie-item-player-B1iGN63e.js +6189 -0
  26. package/dist/pie-section-player.d.ts +0 -8
  27. package/dist/pie-section-player.d.ts.map +1 -1
  28. package/dist/pie-section-player.js +56558 -11
  29. package/dist/player-preload-CQVG0Bih.js +705 -0
  30. package/dist/utils/player-preload.d.ts +2 -0
  31. package/dist/utils/player-preload.d.ts.map +1 -0
  32. package/dist/utils/player-preload.js +8 -0
  33. package/package.json +23 -32
  34. package/src/components/ItemShellElement.svelte +10 -1
  35. package/src/components/PieSectionPlayerBaseElement.svelte +21 -78
  36. package/src/components/PieSectionPlayerSplitPaneElement.svelte +236 -295
  37. package/src/components/PieSectionPlayerVerticalElement.svelte +424 -0
  38. package/src/components/shared/SectionItemCard.svelte +92 -0
  39. package/src/components/shared/SectionPassageCard.svelte +88 -0
  40. package/dist/ItemRenderer-MsjF_Beu.js +0 -467
  41. package/dist/PieItemModeLayoutElement-D7oTzA9T.js +0 -316
  42. package/dist/PieSplitPanelLayoutElement-GUtJ_NlF.js +0 -246
  43. package/dist/PieVerticalLayoutElement-BoA3FO5g.js +0 -194
  44. package/dist/controllers/SectionToolkitService.d.ts +0 -24
  45. package/dist/controllers/SectionToolkitService.d.ts.map +0 -1
  46. package/dist/controllers/SessionPersistenceStrategy.d.ts +0 -15
  47. package/dist/controllers/SessionPersistenceStrategy.d.ts.map +0 -1
  48. package/dist/index.d.ts +0 -2
  49. package/dist/pie-section-player-DJ5NcwdT.js +0 -17078
  50. package/dist/runtime/runtime-event-guards.d.ts +0 -4
  51. package/dist/runtime/runtime-event-guards.d.ts.map +0 -1
  52. package/src/PieSectionPlayer.svelte +0 -826
  53. package/src/components/ItemModeLayout.svelte +0 -172
  54. package/src/components/ItemNavigation.svelte +0 -96
  55. package/src/components/ItemPlayerBridge.svelte +0 -110
  56. package/src/components/ItemRenderer.svelte +0 -248
  57. package/src/components/ItemShell.svelte +0 -86
  58. package/src/components/layout-elements/PieItemModeLayoutElement.svelte +0 -47
  59. package/src/components/layout-elements/PieSplitPanelLayoutElement.svelte +0 -62
  60. package/src/components/layout-elements/PieVerticalLayoutElement.svelte +0 -41
  61. package/src/components/layouts/SplitPanelLayout.svelte +0 -385
  62. package/src/components/layouts/VerticalLayout.svelte +0 -193
@@ -1,467 +0,0 @@
1
- var fe = Object.defineProperty;
2
- var pe = (b, e, n) => e in b ? fe(b, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : b[e] = n;
3
- var te = (b, e, n) => pe(b, typeof e != "symbol" ? e + "" : e, n);
4
- import { y as W, p as X, b as f, D as ae, u as K, g as t, s as w, E as re, F as U, A as q, i as J, k as S, l as Z, n as p, G as ve, H as he, I as Ce, h as V, m as M, a as oe, J as ie, K as le, f as O, d as B, r as z, c as Q, L as ne, t as D, v as be, q as H, o as N, C as ye, M as se, z as P, N as _e } from "./pie-section-player-DJ5NcwdT.js";
5
- import "@pie-players/pie-calculator-desmos";
6
- class ke {
7
- constructor() {
8
- te(this, "catalogCounter", 0);
9
- }
10
- /**
11
- * Extract SSML from entire item config (markup + models)
12
- *
13
- * @param config Item configuration with potential embedded SSML
14
- * @returns Extracted catalogs and cleaned config
15
- */
16
- extractFromItemConfig(e) {
17
- const n = [], d = {
18
- ...e,
19
- models: e.models ? [...e.models] : []
20
- };
21
- if (e.markup) {
22
- const o = this.extractFromMarkup(e.markup, "markup");
23
- n.push(...o.catalogs), d.markup = o.cleanedMarkup;
24
- }
25
- return e.models && e.models.length > 0 && (d.models = e.models.map((o) => {
26
- const i = { ...o }, u = [];
27
- if (o.prompt && typeof o.prompt == "string") {
28
- const r = this.extractFromMarkup(o.prompt, `prompt-${o.id}`);
29
- u.push(...r.catalogs), i.prompt = r.cleanedMarkup;
30
- }
31
- return o.choices && Array.isArray(o.choices) && (i.choices = o.choices.map((r) => {
32
- if (r.label && typeof r.label == "string") {
33
- const l = this.extractFromMarkup(r.label, `choice-${o.id}-${r.value}`);
34
- return u.push(...l.catalogs), {
35
- ...r,
36
- label: l.cleanedMarkup
37
- };
38
- }
39
- return r;
40
- })), n.push(...u), i;
41
- })), {
42
- catalogs: n,
43
- cleanedConfig: d
44
- };
45
- }
46
- /**
47
- * Extract SSML from markup string
48
- *
49
- * @param markup HTML markup potentially containing <speak> elements
50
- * @param idPrefix Prefix for generating catalog IDs
51
- * @returns Extracted catalogs and cleaned markup
52
- */
53
- extractFromMarkup(e, n) {
54
- if (!e || e.trim() === "")
55
- return { catalogs: [], cleanedMarkup: e };
56
- if (typeof window > "u" || typeof DOMParser > "u")
57
- return console.warn("[SSMLExtractor] DOMParser not available (SSR?), skipping extraction"), { catalogs: [], cleanedMarkup: e };
58
- const d = [];
59
- try {
60
- const i = new DOMParser().parseFromString(e, "text/html"), u = Array.from(i.querySelectorAll("speak"));
61
- if (u.length === 0)
62
- return { catalogs: [], cleanedMarkup: e };
63
- for (const l of u)
64
- try {
65
- const k = this.generateCatalogId(n), c = l.outerHTML, m = l.getAttribute("xml:lang") || l.getAttribute("lang") || "en-US", h = l.textContent || "";
66
- let v = l.parentElement;
67
- if (!v || v.tagName === "BODY") {
68
- const E = i.createElement("span");
69
- l.parentNode?.insertBefore(E, l), E.appendChild(i.createTextNode(h)), v = E, l.remove();
70
- } else
71
- l.remove();
72
- v && v.setAttribute("data-catalog-id", k), d.push({
73
- identifier: k,
74
- cards: [
75
- {
76
- catalog: "spoken",
77
- language: m,
78
- content: c
79
- }
80
- ]
81
- });
82
- } catch (k) {
83
- console.error("[SSMLExtractor] Error processing <speak> element:", k);
84
- }
85
- const r = i.body.innerHTML;
86
- return { catalogs: d, cleanedMarkup: r };
87
- } catch (o) {
88
- return console.error("[SSMLExtractor] Error parsing markup:", o), { catalogs: [], cleanedMarkup: e };
89
- }
90
- }
91
- /**
92
- * Generate unique catalog ID
93
- *
94
- * @param prefix Context prefix (e.g., 'prompt-q1', 'choice-q1-a')
95
- * @returns Unique catalog ID (e.g., 'auto-prompt-q1-0')
96
- */
97
- generateCatalogId(e) {
98
- const n = `auto-${e}-${this.catalogCounter}`;
99
- return this.catalogCounter++, n;
100
- }
101
- /**
102
- * Reset counter (useful for testing or new extraction contexts)
103
- */
104
- reset() {
105
- this.catalogCounter = 0;
106
- }
107
- }
108
- function ce(b, e) {
109
- X(e, !0);
110
- let n = f(e, "item", 7), d = f(e, "env", 7), o = f(e, "session", 7), i = f(e, "hasElements", 7), u = f(e, "resolvedPlayerTag", 7), r = f(e, "resolvedPlayerDefinition", 7), l = f(e, "skipElementLoading", 7, !0), k = f(e, "onsessionchanged", 7), c = w(null), m = null, h = null;
111
- ae(() => {
112
- (async () => i() && await r()?.ensureDefined?.())();
113
- }), K(() => {
114
- const a = n().config, C = d(), x = o();
115
- if (!t(c) || !a || !i()) return;
116
- const F = !h || h.mode !== C.mode || h.role !== C.role;
117
- a === m && !F || (re(() => {
118
- if (t(c).config = a, t(c).session = x, t(c).env = C, r()?.attributes)
119
- for (const [T, I] of Object.entries(r().attributes))
120
- t(c).setAttribute(T, I);
121
- if (r()?.props)
122
- for (const [T, I] of Object.entries(r().props))
123
- t(c)[T] = I;
124
- l() && (t(c).setAttribute("skip-element-loading", "true"), t(c).skipElementLoading = !0);
125
- }), m = a, h = C);
126
- }), K(() => {
127
- if (!t(c) || !k()) return;
128
- const a = (C) => {
129
- const x = C;
130
- console.debug("[ItemPlayerBridge][SessionTrace] session-changed received", {
131
- itemId: n()?.id || null,
132
- envMode: d()?.mode,
133
- envRole: d()?.role,
134
- detailKeys: x?.detail && typeof x.detail == "object" ? Object.keys(x.detail) : []
135
- }), k()(C);
136
- };
137
- return t(c).addEventListener("session-changed", a), () => {
138
- t(c).removeEventListener("session-changed", a);
139
- };
140
- });
141
- var v = {
142
- get item() {
143
- return n();
144
- },
145
- set item(a) {
146
- n(a), p();
147
- },
148
- get env() {
149
- return d();
150
- },
151
- set env(a) {
152
- d(a), p();
153
- },
154
- get session() {
155
- return o();
156
- },
157
- set session(a) {
158
- o(a), p();
159
- },
160
- get hasElements() {
161
- return i();
162
- },
163
- set hasElements(a) {
164
- i(a), p();
165
- },
166
- get resolvedPlayerTag() {
167
- return u();
168
- },
169
- set resolvedPlayerTag(a) {
170
- u(a), p();
171
- },
172
- get resolvedPlayerDefinition() {
173
- return r();
174
- },
175
- set resolvedPlayerDefinition(a) {
176
- r(a), p();
177
- },
178
- get skipElementLoading() {
179
- return l();
180
- },
181
- set skipElementLoading(a = !0) {
182
- l(a), p();
183
- },
184
- get onsessionchanged() {
185
- return k();
186
- },
187
- set onsessionchanged(a) {
188
- k(a), p();
189
- }
190
- }, E = U(), A = q(E);
191
- {
192
- var L = (a) => {
193
- var C = U(), x = q(C);
194
- ve(x, u, (F) => {
195
- var T = U(), I = q(T);
196
- Ce(I, u, !1, (Y, $) => {
197
- V(Y, (s) => M(c, s, !0), () => t(c));
198
- }), S(F, T);
199
- }), S(a, C);
200
- }, g = (a) => {
201
- var C = U(), x = q(C);
202
- he(x, () => n().config.markup), S(a, C);
203
- };
204
- J(A, (a) => {
205
- i() ? a(L) : a(g, !1);
206
- });
207
- }
208
- return S(b, E), Z(v);
209
- }
210
- W(
211
- ce,
212
- {
213
- item: {},
214
- env: {},
215
- session: {},
216
- hasElements: {},
217
- resolvedPlayerTag: {},
218
- resolvedPlayerDefinition: {},
219
- skipElementLoading: {},
220
- onsessionchanged: {}
221
- },
222
- [],
223
- [],
224
- { mode: "open" }
225
- );
226
- var Ee = O('<div><div class="pie-section-player__item-header svelte-1ur6297"><h4 class="pie-section-player__item-title svelte-1ur6297"> </h4> <!></div> <!></div>');
227
- const xe = {
228
- hash: "svelte-1ur6297",
229
- code: ".pie-section-player__item-renderer.svelte-1ur6297 {display:block;margin-bottom:0;}.pie-section-player__item-header.svelte-1ur6297 {display:flex;align-items:center;justify-content:space-between;padding:0.75rem 0;margin-bottom:0.5rem;}.pie-section-player__item-title.svelte-1ur6297 {margin:0;font-size:0.95rem;font-weight:600;color:var(--pie-primary, #1976d2);}"
230
- };
231
- function de(b, e) {
232
- X(e, !0), oe(b, xe);
233
- let n = f(e, "item", 7), d = f(e, "contentKind", 7, "assessment-item"), o = f(e, "customClassName", 7, ""), i = w(null), u = w(null), r = null;
234
- const l = N(() => t(u)?.assessmentId ?? ""), k = N(() => t(u)?.sectionId ?? "");
235
- K(() => {
236
- if (t(i))
237
- return r = new ie(t(i), {
238
- context: le,
239
- subscribe: !0,
240
- onValue: (g) => {
241
- M(u, g, !0);
242
- }
243
- }), r.connect(), () => {
244
- r?.disconnect(), r = null;
245
- };
246
- });
247
- var c = {
248
- get item() {
249
- return n();
250
- },
251
- set item(g) {
252
- n(g), p();
253
- },
254
- get contentKind() {
255
- return d();
256
- },
257
- set contentKind(g = "assessment-item") {
258
- d(g), p();
259
- },
260
- get customClassName() {
261
- return o();
262
- },
263
- set customClassName(g = "") {
264
- o(g), p();
265
- }
266
- }, m = Ee(), h = B(m), v = B(h), E = B(v, !0);
267
- z(v);
268
- var A = Q(v, 2);
269
- ne(A, e, "toolbar", {}), z(h);
270
- var L = Q(h, 2);
271
- return ne(L, e, "default", {}), z(m), V(m, (g) => M(i, g), () => t(i)), D(() => {
272
- be(m, 1, `pie-section-player__item-renderer ${o() ?? ""}`, "svelte-1ur6297"), H(m, "data-assessment-id", t(l)), H(m, "data-section-id", t(k)), H(m, "data-item-id", n().id), H(m, "data-content-kind", d()), ye(E, n().name || "Question");
273
- }), S(b, m), Z(c);
274
- }
275
- W(de, { item: {}, contentKind: {}, customClassName: {} }, ["toolbar", "default"], [], { mode: "open" });
276
- var Ie = O('<div class="pie-section-player__item-content svelte-eq5dt0"><!></div>'), Se = O("<pie-item-toolbar></pie-item-toolbar>", 2), Pe = O("<pie-tool-calculator></pie-tool-calculator>", 2), Me = O("<!> <!>", 1), Le = O("<div><!></div>");
277
- const Te = {
278
- hash: "svelte-eq5dt0",
279
- code: ".pie-section-player__item-content.svelte-eq5dt0 {padding:1rem;border:1px solid var(--pie-border-light, #e5e7eb);border-radius:4px;}"
280
- };
281
- function Ne(b, e) {
282
- X(e, !0), oe(b, Te);
283
- let n = f(e, "item", 7), d = f(e, "env", 23, () => ({ mode: "gather", role: "student" })), o = f(e, "session", 23, () => ({ id: "", data: [] })), i = f(e, "contentKind", 7, "assessment-item"), u = f(e, "skipElementLoading", 7, !0), r = f(e, "customClassName", 7, ""), l = f(e, "onsessionchanged", 7);
284
- function k(s) {
285
- if (console.debug("[ItemRenderer][SessionTrace] handlePlayerSessionChanged", {
286
- itemId: n()?.id || null,
287
- contentKind: i(),
288
- hasRuntimeReporter: !!t(v)?.reportSessionChanged,
289
- hasOnSessionChangedProp: !!l(),
290
- detailKeys: s?.detail && typeof s.detail == "object" ? Object.keys(s.detail) : []
291
- }), i() === "assessment-item") {
292
- const y = n().id || "";
293
- if (y && t(v)?.reportSessionChanged) {
294
- console.debug("[ItemRenderer][SessionTrace] forwarding via runtimeContext", { itemId: y }), s.stopPropagation(), t(v).reportSessionChanged(y, s.detail);
295
- return;
296
- }
297
- }
298
- l() && (console.debug("[ItemRenderer][SessionTrace] forwarding via onsessionchanged prop", { itemId: n()?.id || null }), s.stopPropagation(), l()(s));
299
- }
300
- let c = w(null), m = w(null), h = w(null), v = w(null), E = null;
301
- const A = N(() => t(v)?.toolkitCoordinator), L = N(() => t(A)?.toolCoordinator), g = N(() => t(A)?.catalogResolver);
302
- K(() => {
303
- if (t(c))
304
- return E = new ie(t(c), {
305
- context: le,
306
- subscribe: !0,
307
- onValue: (s) => {
308
- M(v, s, !0);
309
- }
310
- }), E.connect(), () => {
311
- E?.disconnect(), E = null;
312
- };
313
- });
314
- let a = w(!1), C = N(() => !!(n()?.config?.elements && Object.keys(n().config.elements).length > 0)), x = N(() => _e.iife), F = N(() => t(x)?.tagName || "pie-iife-player");
315
- ae(() => () => {
316
- t(g) && t(g).clearItemCatalogs();
317
- }), K(() => {
318
- if (n()?.config && t(g)) {
319
- if (n().config.extractedCatalogs) {
320
- t(g).clearItemCatalogs(), t(g).addItemCatalogs(n().config.extractedCatalogs);
321
- return;
322
- }
323
- const y = new ke().extractFromItemConfig(n().config);
324
- re(() => {
325
- n().config = y.cleanedConfig, n().config.extractedCatalogs = y.catalogs;
326
- }), y.catalogs.length > 0 && (t(
327
- g
328
- // Clear previous item's catalogs
329
- ).clearItemCatalogs(), t(g).addItemCatalogs(y.catalogs), console.debug(`[ItemRenderer] Extracted ${y.catalogs.length} SSML catalogs for item ${n().id}`));
330
- }
331
- }), K(() => {
332
- t(h) && (t(m) && (t(h).scopeElement = t(m)), n() && (t(h).item = n()));
333
- }), K(() => {
334
- if (!t(L) || !n()) return;
335
- const s = se("calculator", "item", n().id || "unknown-item"), y = t(L).subscribe(() => {
336
- M(a, t(L).isToolVisible(s), !0);
337
- });
338
- return M(a, t(L).isToolVisible(s), !0), y;
339
- });
340
- var T = {
341
- get item() {
342
- return n();
343
- },
344
- set item(s) {
345
- n(s), p();
346
- },
347
- get env() {
348
- return d();
349
- },
350
- set env(s = { mode: "gather", role: "student" }) {
351
- d(s), p();
352
- },
353
- get session() {
354
- return o();
355
- },
356
- set session(s = { id: "", data: [] }) {
357
- o(s), p();
358
- },
359
- get contentKind() {
360
- return i();
361
- },
362
- set contentKind(s = "assessment-item") {
363
- i(s), p();
364
- },
365
- get skipElementLoading() {
366
- return u();
367
- },
368
- set skipElementLoading(s = !0) {
369
- u(s), p();
370
- },
371
- get customClassName() {
372
- return r();
373
- },
374
- set customClassName(s = "") {
375
- r(s), p();
376
- },
377
- get onsessionchanged() {
378
- return l();
379
- },
380
- set onsessionchanged(s) {
381
- l(s), p();
382
- }
383
- }, I = Le(), Y = B(I);
384
- {
385
- var $ = (s) => {
386
- var y = Me(), ee = q(y);
387
- de(ee, {
388
- get item() {
389
- return n();
390
- },
391
- get contentKind() {
392
- return i();
393
- },
394
- get customClassName() {
395
- return r();
396
- },
397
- children: (R, j) => {
398
- var _ = Ie(), G = B(_);
399
- ce(G, {
400
- get item() {
401
- return n();
402
- },
403
- get env() {
404
- return d();
405
- },
406
- get session() {
407
- return o();
408
- },
409
- get hasElements() {
410
- return t(C);
411
- },
412
- get resolvedPlayerTag() {
413
- return t(F);
414
- },
415
- get resolvedPlayerDefinition() {
416
- return t(x);
417
- },
418
- get skipElementLoading() {
419
- return u();
420
- },
421
- onsessionchanged: k
422
- }), z(_), V(_, (ge) => M(m, ge), () => t(m)), S(R, _);
423
- },
424
- $$slots: {
425
- default: !0,
426
- toolbar: (R, j) => {
427
- var _ = Se();
428
- P(_, "slot", "toolbar"), D(() => P(_, "item-id", n().id)), D(() => P(_, "catalog-id", n().id)), P(_, "tools", "calculator,tts,answerEliminator"), D(() => P(_, "content-kind", i())), P(_, "size", "md"), P(_, "language", "en-US"), V(_, (G) => M(h, G), () => t(h)), S(R, _);
429
- }
430
- }
431
- });
432
- var ue = Q(ee, 2);
433
- {
434
- var me = (R) => {
435
- var j = Pe();
436
- D(() => P(j, "visible", t(a))), D(() => P(j, "tool-id", se("calculator", "item", n().id || "unknown-item"))), S(R, j);
437
- };
438
- J(ue, (R) => {
439
- n() && R(me);
440
- });
441
- }
442
- S(s, y);
443
- };
444
- J(Y, (s) => {
445
- n().config && s($);
446
- });
447
- }
448
- return z(I), V(I, (s) => M(c, s), () => t(c)), D(() => H(I, "data-item-id", n().id || "")), S(b, I), Z(T);
449
- }
450
- W(
451
- Ne,
452
- {
453
- item: {},
454
- env: {},
455
- session: {},
456
- contentKind: {},
457
- skipElementLoading: {},
458
- customClassName: {},
459
- onsessionchanged: {}
460
- },
461
- [],
462
- [],
463
- { mode: "open" }
464
- );
465
- export {
466
- Ne as I
467
- };