@pie-element/simple-cloze 0.1.6-next.20261006160832 → 0.1.6

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 (28) hide show
  1. package/dist/browser/delivery/index.js +51 -51
  2. package/dist/browser/delivery/index.js.map +1 -1
  3. package/dist/browser/editor-runtime/delivery/index.js +51 -51
  4. package/dist/browser/editor-runtime/delivery/index.js.map +1 -1
  5. package/dist/browser/editor-runtime/{i18n-CL6Kt4aa.js → i18n-BbU-JKL9.js} +1494 -437
  6. package/dist/browser/editor-runtime/i18n-BbU-JKL9.js.map +1 -0
  7. package/dist/browser/{mathjax-D2JHb_R_-CnSar24F.js → editor-runtime/mathjax-BKrHE4xs-CGJhSJcl.js} +3901 -3864
  8. package/dist/browser/editor-runtime/mathjax-BKrHE4xs-CGJhSJcl.js.map +1 -0
  9. package/dist/browser/editor-runtime/print/index.js +36 -36
  10. package/dist/browser/editor-runtime/print/index.js.map +1 -1
  11. package/dist/browser/{i18n-CL6Kt4aa.js → i18n-BbU-JKL9.js} +1494 -437
  12. package/dist/browser/i18n-BbU-JKL9.js.map +1 -0
  13. package/dist/browser/{editor-runtime/mathjax-D2JHb_R_-CnSar24F.js → mathjax-BKrHE4xs-CGJhSJcl.js} +3901 -3864
  14. package/dist/browser/mathjax-BKrHE4xs-CGJhSJcl.js.map +1 -0
  15. package/dist/browser/print/index.js +36 -36
  16. package/dist/browser/print/index.js.map +1 -1
  17. package/dist/delivery/index.js +2944 -284
  18. package/dist/delivery/index.js.map +1 -1
  19. package/dist/index.iife.js +21 -19
  20. package/dist/print/index.js +2941 -281
  21. package/dist/print/index.js.map +1 -1
  22. package/module/print.js +2164 -1115
  23. package/module/print.js.map +1 -1
  24. package/package.json +4 -3
  25. package/dist/browser/editor-runtime/i18n-CL6Kt4aa.js.map +0 -1
  26. package/dist/browser/editor-runtime/mathjax-D2JHb_R_-CnSar24F.js.map +0 -1
  27. package/dist/browser/i18n-CL6Kt4aa.js.map +0 -1
  28. package/dist/browser/mathjax-D2JHb_R_-CnSar24F.js.map +0 -1
@@ -1,14 +1,14 @@
1
- import { C as e, E as t, F as n, I as r, M as i, N as a, O as o, P as s, R as c, S as l, T as u, _ as d, a as f, b as p, c as m, f as h, g, j as _, k as v, l as y, n as b, r as x, t as S, u as C, w, x as T, y as E } from "../client-e4ZTphpa.js";
2
- import { n as D, r as O, t as k } from "../i18n-CL6Kt4aa.js";
1
+ import { C as e, E as t, F as n, I as r, M as i, N as a, O as o, P as s, R as c, S as l, T as u, _ as d, a as f, b as p, c as m, f as h, g, j as _, k as v, l as ee, n as y, r as b, t as x, u as S, w as C, x as w, y as T } from "../client-e4ZTphpa.js";
2
+ import { l as E, n as D, r as O, t as k } from "../i18n-BbU-JKL9.js";
3
3
  //#region src/delivery/TeacherInstructions.svelte
4
- var A = E("<div class=\"teacher-instructions pie-teacher-instructions svelte-1jhejbv\"><button type=\"button\" class=\"teacher-instructions-toggle pie-teacher-instructions-toggle svelte-1jhejbv\"> </button> <div class=\"teacher-instructions-content pie-teacher-instructions-content svelte-1jhejbv\"></div></div>"), j = {
4
+ var A = T("<div class=\"teacher-instructions pie-teacher-instructions svelte-1jhejbv\"><button type=\"button\" class=\"teacher-instructions-toggle pie-teacher-instructions-toggle svelte-1jhejbv\"> </button> <div class=\"teacher-instructions-content pie-teacher-instructions-content svelte-1jhejbv\"></div></div>"), j = {
5
5
  hash: "svelte-1jhejbv",
6
6
  code: ".teacher-instructions.svelte-1jhejbv {margin-bottom:1rem;}.teacher-instructions-toggle.svelte-1jhejbv {padding:0;border:0;border-bottom:1px dotted currentColor;background:transparent;font:inherit;color:var(--pie-primary, #3f51b5);cursor:pointer;}.teacher-instructions-toggle.svelte-1jhejbv:focus-visible {outline:2px solid var(--pie-button-focus-outline, #3b82f6);outline-offset:2px;}.teacher-instructions-content.svelte-1jhejbv {padding-top:1rem;}"
7
7
  };
8
8
  function M(s, u) {
9
- r(u, !0), y(s, j);
10
- let p = b(u, "html", 7), m = b(u, "language", 7), h = i(!1), x = `simple-cloze-teacher-instructions-${Math.random().toString(36).slice(2, 10)}`;
11
- var S = {
9
+ r(u, !0), ee(s, j);
10
+ let p = y(u, "html", 7), m = y(u, "language", 7), h = i(!1), b = `simple-cloze-teacher-instructions-${Math.random().toString(36).slice(2, 10)}`;
11
+ var x = {
12
12
  get html() {
13
13
  return p();
14
14
  },
@@ -21,29 +21,29 @@ function M(s, u) {
21
21
  set language(e) {
22
22
  m(e), a();
23
23
  }
24
- }, T = A(), E = t(T), O = o(E, !0), k = v(E, 2);
25
- return C(k, p, !0), c(k), c(T), w((t) => {
26
- f(E, "aria-expanded", e(h)), f(E, "aria-controls", x), g(O, t), f(k, "id", x), f(k, "hidden", !e(h));
27
- }, [() => D(e(h) ? "hideTeacherInstructions" : "showTeacherInstructions", m())]), l("click", E, () => _(h, !e(h))), d(s, T), n(S);
24
+ }, w = A(), T = t(w), O = o(T, !0), k = v(T, 2);
25
+ return S(k, () => E(p()), !0), c(k), c(w), C((t) => {
26
+ f(T, "aria-expanded", e(h)), f(T, "aria-controls", b), g(O, t), f(k, "id", b), f(k, "hidden", !e(h));
27
+ }, [() => D(e(h) ? "hideTeacherInstructions" : "showTeacherInstructions", m())]), l("click", T, () => _(h, !e(h))), d(s, w), n(x);
28
28
  }
29
- T(["click"]), S(M, {
29
+ w(["click"]), x(M, {
30
30
  html: {},
31
31
  language: {}
32
32
  }, [], [], { mode: "open" });
33
33
  //#endregion
34
34
  //#region src/delivery/SimpleCloze.svelte
35
- var ee = E("<div class=\"simple-cloze-prompt svelte-1glps5n\"></div>"), te = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-283 359 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></circle><path d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), ne = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-129.5 127 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><path style=\"fill: var(--pie-border-light, #D0CAC5); stroke: var(--pie-border-light, #E6E3E0); stroke-width: 0.75; stroke-miterlimit: 10;\" d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\"></path><path style=\"fill: var(--pie-border-light, #B3ABA4); stroke: var(--pie-border-light, #CDC7C2); stroke-width: 0.5; stroke-miterlimit: 10;\" d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\"></path><circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"var(--pie-background, white)\"></circle><path d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), re = E("<button type=\"button\" class=\"simple-cloze-toggle svelte-1glps5n\"><span class=\"simple-cloze-toggle-icon svelte-1glps5n\" aria-hidden=\"true\"><!></span> <span class=\"simple-cloze-toggle-label svelte-1glps5n\"> </span></button>"), ie = E("<span class=\"correctness-icon correctness-icon--correct svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"></path></svg></span>"), ae = E("<span class=\"correctness-icon correctness-icon--incorrect svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"></path></svg></span>"), oe = E("<div class=\"simple-cloze-root svelte-1glps5n\"><!> <!> <!> <div class=\"simple-cloze-response svelte-1glps5n\"><!> <input type=\"text\" spellcheck=\"false\"/> <span class=\"sr-only svelte-1glps5n\" role=\"status\"> </span></div></div>"), se = {
35
+ var te = T("<div class=\"simple-cloze-prompt svelte-1glps5n\"></div>"), ne = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-283 359 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></circle><path d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), re = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-129.5 127 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><path style=\"fill: var(--pie-border-light, #D0CAC5); stroke: var(--pie-border-light, #E6E3E0); stroke-width: 0.75; stroke-miterlimit: 10;\" d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\"></path><path style=\"fill: var(--pie-border-light, #B3ABA4); stroke: var(--pie-border-light, #CDC7C2); stroke-width: 0.5; stroke-miterlimit: 10;\" d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\"></path><circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"var(--pie-background, white)\"></circle><path d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), ie = T("<button type=\"button\" class=\"simple-cloze-toggle svelte-1glps5n\"><span class=\"simple-cloze-toggle-icon svelte-1glps5n\" aria-hidden=\"true\"><!></span> <span class=\"simple-cloze-toggle-label svelte-1glps5n\"> </span></button>"), ae = T("<span class=\"correctness-icon correctness-icon--correct svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"></path></svg></span>"), oe = T("<span class=\"correctness-icon correctness-icon--incorrect svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"></path></svg></span>"), se = T("<div class=\"simple-cloze-root svelte-1glps5n\"><!> <!> <!> <div class=\"simple-cloze-response svelte-1glps5n\"><!> <input type=\"text\" spellcheck=\"false\"/> <span class=\"sr-only svelte-1glps5n\" role=\"status\"> </span></div></div>"), ce = {
36
36
  hash: "svelte-1glps5n",
37
37
  code: "\n /*\n * Self-contained: players ship no Tailwind, so nothing here relies on host\n * utility classes or a CSS reset. Colours are `--pie-*` theme variables with\n * the fallbacks `@pie-lib/render-ui`'s `color` module uses.\n */.simple-cloze-root.svelte-1glps5n {padding:1rem;color:var(--pie-text, black);}.simple-cloze-prompt.svelte-1glps5n {margin-bottom:1rem;}.simple-cloze-prompt.svelte-1glps5n p {margin:0.5em 0;}.simple-cloze-prompt.svelte-1glps5n strong {font-weight:600;}.simple-cloze-toggle.svelte-1glps5n {display:flex;align-items:center;gap:0.5rem;margin:0 0 0.75rem;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;user-select:none;}.simple-cloze-toggle.svelte-1glps5n:hover .simple-cloze-toggle-label:where(.svelte-1glps5n) {text-decoration:underline;}.simple-cloze-toggle.svelte-1glps5n:focus-visible {outline:2px solid var(--pie-button-focus-outline, #3b82f6);outline-offset:2px;}.simple-cloze-toggle-icon.svelte-1glps5n {display:inline-flex;}.simple-cloze-toggle-icon.svelte-1glps5n svg:where(.svelte-1glps5n) {width:25px;height:25px;}.simple-cloze-toggle-label.svelte-1glps5n {font-size:0.875rem;line-height:1.25rem;}.simple-cloze-response.svelte-1glps5n {position:relative;display:inline-block;}.simple-cloze-input.svelte-1glps5n {box-sizing:border-box;margin:0;padding:0.5rem 0.75rem;\n /* The text colour, as ECR's input border: a light grey fails 3:1 (WCAG 1.4.11). */border:1px solid var(--pie-text, black);border-radius:0.25rem;background-color:transparent;color:var(--pie-text, black);font:inherit;}.simple-cloze-input.svelte-1glps5n:disabled {opacity:1;color:var(--pie-text, black);-webkit-text-fill-color:currentColor;}.simple-cloze-input.svelte-1glps5n:focus-visible {outline:2px solid var(--pie-button-focus-outline, #3b82f6);outline-offset:2px;}.simple-cloze-input--correct.svelte-1glps5n {border:2px solid var(--pie-correct-tertiary, #0ea449);}.simple-cloze-input--incorrect.svelte-1glps5n {border:2px solid var(--pie-incorrect-icon, #bf0d00);}.simple-cloze-input[readonly].svelte-1glps5n {font-weight:600;}.correctness-icon.svelte-1glps5n {position:absolute;top:-8px;left:-8px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:2px;color:var(--pie-background, #ffffff);}.correctness-icon.svelte-1glps5n svg:where(.svelte-1glps5n) {width:12px;height:12px;}.correctness-icon--correct.svelte-1glps5n {background-color:var(--pie-correct-tertiary, #0ea449);}.correctness-icon--incorrect.svelte-1glps5n {background-color:var(--pie-incorrect-icon, #bf0d00);}.sr-only.svelte-1glps5n {position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;}"
38
38
  };
39
- function N(p, S) {
40
- r(S, !0), y(p, se);
41
- let T = b(S, "model", 7, null), E = b(S, "session", 7, null), A = b(S, "onSessionChange", 7), j = `simple-cloze-${Math.random().toString(36).slice(2, 10)}`, N = `${j}-prompt`, P = `${j}-feedback`, F = i(null), I = i(null), L = i(!1), R = s(() => T()?.mode === "evaluate"), z = s(() => T()?.correctness), B = s(() => e(z) === "correct"), V = s(() => e(z) === "incorrect"), ce = s(() => e(z) === "unanswered"), H = s(() => typeof T()?.prompt == "string" ? T().prompt : ""), U = s(() => typeof T()?.correctAnswer == "string" ? T().correctAnswer : ""), le = s(() => typeof E()?.value == "string" ? E().value : ""), W = s(() => e(R) && !e(B) && !!e(U).trim()), G = s(() => e(L) && e(W)), K = s(() => e(R) ? e(G) ? k("correctAnswerShown", T()?.language) : e(B) ? k("correct", T()?.language) : e(V) ? k("incorrect", T()?.language) : e(ce) ? k("unanswered", T()?.language) : "" : "");
39
+ function N(p, x) {
40
+ r(x, !0), ee(p, ce);
41
+ let w = y(x, "model", 7, null), T = y(x, "session", 7, null), A = y(x, "onSessionChange", 7), j = `simple-cloze-${Math.random().toString(36).slice(2, 10)}`, N = `${j}-prompt`, P = `${j}-feedback`, F = i(null), I = i(null), L = i(!1), R = s(() => w()?.mode === "evaluate"), z = s(() => w()?.correctness), B = s(() => e(z) === "correct"), V = s(() => e(z) === "incorrect"), le = s(() => e(z) === "unanswered"), H = s(() => typeof w()?.prompt == "string" ? w().prompt : ""), U = s(() => typeof w()?.correctAnswer == "string" ? w().correctAnswer : ""), ue = s(() => typeof T()?.value == "string" ? T().value : ""), W = s(() => e(R) && !e(B) && !!e(U).trim()), G = s(() => e(L) && e(W)), K = s(() => e(R) ? e(G) ? k("correctAnswerShown", w()?.language) : e(B) ? k("correct", w()?.language) : e(V) ? k("incorrect", w()?.language) : e(le) ? k("unanswered", w()?.language) : "" : "");
42
42
  u(() => {
43
43
  e(W) || _(L, !1);
44
44
  }), u(() => {
45
45
  if (!e(I)) return;
46
- let t = e(G) ? e(U) : e(le);
46
+ let t = e(G) ? e(U) : e(ue);
47
47
  e(I).value !== t && (e(I).value = t);
48
48
  }), u(() => {
49
49
  if (!e(F) || !e(H)) return;
@@ -54,28 +54,28 @@ function N(p, S) {
54
54
  t(e);
55
55
  }
56
56
  });
57
- function ue(e) {
57
+ function de(e) {
58
58
  let t = e.target.value;
59
59
  A()?.({
60
- ...E(),
60
+ ...T(),
61
61
  value: t
62
62
  });
63
63
  }
64
- function de() {
64
+ function fe() {
65
65
  e(W) && _(L, !e(L));
66
66
  }
67
- var fe = {
67
+ var pe = {
68
68
  get model() {
69
- return T();
69
+ return w();
70
70
  },
71
71
  set model(e = null) {
72
- T(e), a();
72
+ w(e), a();
73
73
  },
74
74
  get session() {
75
- return E();
75
+ return T();
76
76
  },
77
77
  set session(e = null) {
78
- E(e), a();
78
+ T(e), a();
79
79
  },
80
80
  get onSessionChange() {
81
81
  return A();
@@ -83,12 +83,12 @@ function N(p, S) {
83
83
  set onSessionChange(e) {
84
84
  A(e), a();
85
85
  }
86
- }, q = oe(), J = t(q), pe = (t) => {
86
+ }, q = se(), J = t(q), me = (t) => {
87
87
  {
88
- let n = s(() => T()?.language);
88
+ let n = s(() => w()?.language);
89
89
  M(t, {
90
90
  get html() {
91
- return T().teacherInstructions;
91
+ return w().teacherInstructions;
92
92
  },
93
93
  get language() {
94
94
  return e(n);
@@ -97,52 +97,52 @@ function N(p, S) {
97
97
  }
98
98
  };
99
99
  h(J, (e) => {
100
- T()?.teacherInstructions && e(pe);
100
+ w()?.teacherInstructions && e(me);
101
101
  });
102
- var Y = v(J, 2), me = (t) => {
103
- var n = ee();
104
- C(n, () => e(H), !0), c(n), x(n, (e) => _(F, e), () => e(F)), w(() => f(n, "id", N)), d(t, n);
102
+ var Y = v(J, 2), he = (t) => {
103
+ var n = te();
104
+ S(n, () => E(e(H)), !0), c(n), b(n, (e) => _(F, e), () => e(F)), C(() => f(n, "id", N)), d(t, n);
105
105
  };
106
106
  h(Y, (t) => {
107
- e(H) && t(me);
107
+ e(H) && t(he);
108
108
  });
109
- var X = v(Y, 2), he = (n) => {
110
- var r = re(), i = t(r), a = t(i), s = (e) => {
111
- d(e, te());
112
- }, u = (e) => {
109
+ var X = v(Y, 2), ge = (n) => {
110
+ var r = ie(), i = t(r), a = t(i), s = (e) => {
113
111
  d(e, ne());
112
+ }, u = (e) => {
113
+ d(e, re());
114
114
  };
115
115
  h(a, (t) => {
116
116
  e(G) ? t(s) : t(u, -1);
117
117
  }), c(i);
118
118
  var p = o(v(i, 2), !0);
119
- c(r), w((t) => {
119
+ c(r), C((t) => {
120
120
  f(r, "aria-pressed", e(G)), g(p, t);
121
- }, [() => D(e(G) ? "hideCorrectAnswer" : "showCorrectAnswer", T()?.language)]), l("click", r, de), d(n, r);
121
+ }, [() => D(e(G) ? "hideCorrectAnswer" : "showCorrectAnswer", w()?.language)]), l("click", r, fe), d(n, r);
122
122
  };
123
123
  h(X, (t) => {
124
- e(W) && t(he);
124
+ e(W) && t(ge);
125
125
  });
126
- var Z = v(X, 2), Q = t(Z), ge = (e) => {
127
- d(e, ie());
128
- }, _e = (e) => {
126
+ var Z = v(X, 2), Q = t(Z), _e = (e) => {
129
127
  d(e, ae());
128
+ }, ve = (e) => {
129
+ d(e, oe());
130
130
  };
131
131
  h(Q, (t) => {
132
- e(R) && (e(B) || e(G)) ? t(ge) : e(R) && e(V) && t(_e, 1);
132
+ e(R) && (e(B) || e(G)) ? t(_e) : e(R) && e(V) && t(ve, 1);
133
133
  });
134
134
  var $ = v(Q, 2);
135
- let ve;
136
- x($, (e) => _(I, e), () => e(I));
137
- var ye = v($, 2), be = o(ye, !0);
138
- return c(Z), c(q), w((t, n) => {
139
- ve = m($, 1, "simple-cloze-input svelte-1glps5n", null, ve, {
135
+ let ye;
136
+ b($, (e) => _(I, e), () => e(I));
137
+ var be = v($, 2), xe = o(be, !0);
138
+ return c(Z), c(q), C((t, n) => {
139
+ ye = m($, 1, "simple-cloze-input svelte-1glps5n", null, ye, {
140
140
  "simple-cloze-input--correct": e(R) && (e(B) || e(G)),
141
141
  "simple-cloze-input--incorrect": e(R) && e(V) && !e(G)
142
- }), f($, "placeholder", t), f($, "aria-labelledby", e(H) ? N : void 0), f($, "aria-label", n), f($, "aria-describedby", e(K) ? P : void 0), $.disabled = T()?.disabled, $.readOnly = e(G), f(ye, "id", P), g(be, e(K));
143
- }, [() => k("placeholder", T()?.language), () => e(H) ? void 0 : k("answerInput", T()?.language)]), l("input", $, ue), d(p, q), n(fe);
142
+ }), f($, "placeholder", t), f($, "aria-labelledby", e(H) ? N : void 0), f($, "aria-label", n), f($, "aria-describedby", e(K) ? P : void 0), $.disabled = w()?.disabled, $.readOnly = e(G), f(be, "id", P), g(xe, e(K));
143
+ }, [() => k("placeholder", w()?.language), () => e(H) ? void 0 : k("answerInput", w()?.language)]), l("input", $, de), d(p, q), n(pe);
144
144
  }
145
- T(["click", "input"]), S(N, {
145
+ w(["click", "input"]), x(N, {
146
146
  model: { type: "Object" },
147
147
  session: { type: "Object" },
148
148
  onSessionChange: {}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#e","t","#t","e","n"],"sources":["../../../src/delivery/TeacherInstructions.svelte","../../../src/delivery/SimpleCloze.svelte","../../../../../lib-svelte/delivery-events/dist/index2.js","../../../../../shared/player-events/dist/index.js","../../../../../lib-svelte/delivery-events/dist/index3.js","../../../src/delivery/index.ts"],"sourcesContent":["<script lang=\"ts\">\nimport { tCommon } from '../i18n';\n\nlet { html, language }: { html: string; language?: string } = $props();\n\nlet expanded = $state(false);\nconst panelId = `simple-cloze-teacher-instructions-${Math.random().toString(36).slice(2, 10)}`;\n</script>\n\n<!-- Collapsed by default, as multiple-choice shows them; the controller sends them to instructors only. -->\n<div class=\"teacher-instructions pie-teacher-instructions\">\n <button\n type=\"button\"\n class=\"teacher-instructions-toggle pie-teacher-instructions-toggle\"\n aria-expanded={expanded}\n aria-controls={panelId}\n onclick={() => (expanded = !expanded)}\n >\n {tCommon(expanded ? 'hideTeacherInstructions' : 'showTeacherInstructions', language)}\n </button>\n <div id={panelId} class=\"teacher-instructions-content pie-teacher-instructions-content\" hidden={!expanded}>\n {@html html}\n </div>\n</div>\n\n<style>\n .teacher-instructions {\n margin-bottom: 1rem;\n }\n\n .teacher-instructions-toggle {\n padding: 0;\n border: 0;\n border-bottom: 1px dotted currentColor;\n background: transparent;\n font: inherit;\n color: var(--pie-primary, #3f51b5);\n cursor: pointer;\n }\n\n .teacher-instructions-toggle:focus-visible {\n outline: 2px solid var(--pie-button-focus-outline, #3b82f6);\n outline-offset: 2px;\n }\n\n .teacher-instructions-content {\n padding-top: 1rem;\n }\n</style>\n","<svelte:options\n customElement={{\n shadow: 'none',\n props: {\n model: { type: 'Object' },\n session: { type: 'Object' },\n onSessionChange: {}\n }\n }}\n/>\n\n<script lang=\"ts\">\nimport { renderMath } from '@pie-element/shared-math-rendering-mathjax';\nimport { t, tCommon } from '../i18n';\nimport TeacherInstructions from './TeacherInstructions.svelte';\n\nlet {\n model = null,\n session = null,\n onSessionChange,\n}: { model?: any; session?: any; onSessionChange?: (session: any) => void } = $props();\n\n// Per-instance ids: a page can hold several instances, and several versions of\n// this element, each with its own Svelte runtime.\nconst instanceId = `simple-cloze-${Math.random().toString(36).slice(2, 10)}`;\nconst promptId = `${instanceId}-prompt`;\nconst feedbackId = `${instanceId}-feedback`;\n\nlet promptElement: HTMLDivElement | null = $state(null);\nlet inputElement: HTMLInputElement | null = $state(null);\nlet showCorrectAnswer = $state(false);\n\nconst isEvaluateMode = $derived(model?.mode === 'evaluate');\nconst correctness = $derived(model?.correctness);\nconst isCorrect = $derived(correctness === 'correct');\nconst isIncorrect = $derived(correctness === 'incorrect');\nconst isUnanswered = $derived(correctness === 'unanswered');\nconst prompt = $derived(typeof model?.prompt === 'string' ? model.prompt : '');\nconst correctAnswer = $derived(typeof model?.correctAnswer === 'string' ? model.correctAnswer : '');\nconst sessionValue = $derived(typeof session?.value === 'string' ? session.value : '');\n// As in multiple-choice, any response short of correct can be revealed,\n// including none.\nconst canShowCorrectAnswer = $derived(isEvaluateMode && !isCorrect && !!correctAnswer.trim());\nconst showingCorrectAnswer = $derived(showCorrectAnswer && canShowCorrectAnswer);\n\nconst feedbackText = $derived.by(() => {\n if (!isEvaluateMode) return '';\n if (showingCorrectAnswer) return t('correctAnswerShown', model?.language);\n if (isCorrect) return t('correct', model?.language);\n if (isIncorrect) return t('incorrect', model?.language);\n if (isUnanswered) return t('unanswered', model?.language);\n return '';\n});\n\n// Leaving evaluate mode, or a response that turned correct, turns the reveal\n// off, so gather mode never starts on the answer key.\n$effect(() => {\n if (!canShowCorrectAnswer) {\n showCorrectAnswer = false;\n }\n});\n\n// The input shows the session value, or the answer key while it is revealed.\n// A player that resets or replaces the session clears or restores it.\n$effect(() => {\n if (!inputElement) return;\n const next = showingCorrectAnswer ? correctAnswer : sessionValue;\n if (inputElement.value !== next) {\n inputElement.value = next;\n }\n});\n\n// Typesets the prompt's math each time it renders. `renderMath` resolves once\n// MathJax has run, so a load failure arrives as a rejection.\n$effect(() => {\n if (!promptElement || !prompt) return;\n const warn = (err: unknown) => console.warn('simple-cloze: MathJax render failed', err);\n try {\n Promise.resolve(renderMath(promptElement)).catch(warn);\n } catch (err) {\n warn(err);\n }\n});\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const newValue = target.value;\n\n // The player owns the session's `id` and `element` (the versioned tag it\n // registered this element under), so neither is written here.\n onSessionChange?.({ ...session, value: newValue });\n}\n\nfunction toggleCorrectAnswer() {\n if (!canShowCorrectAnswer) return;\n showCorrectAnswer = !showCorrectAnswer;\n}\n</script>\n\n<div class=\"simple-cloze-root\">\n {#if model?.teacherInstructions}\n <TeacherInstructions html={model.teacherInstructions} language={model?.language} />\n {/if}\n\n {#if prompt}\n <div bind:this={promptElement} id={promptId} class=\"simple-cloze-prompt\">{@html prompt}</div>\n {/if}\n\n {#if canShowCorrectAnswer}\n <button\n type=\"button\"\n class=\"simple-cloze-toggle\"\n onclick={toggleCorrectAnswer}\n aria-pressed={showingCorrectAnswer}\n >\n <span class=\"simple-cloze-toggle-icon\" aria-hidden=\"true\">\n {#if showingCorrectAnswer}\n <svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-283 359 34 35\" focusable=\"false\">\n <circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-tertiary-light, #bce2ff)\" />\n <path d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\" fill=\"var(--pie-tertiary-light, #bce2ff)\" />\n <polygon points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\" fill=\"var(--pie-tertiary, #1a9cff)\" />\n </svg>\n {:else}\n <svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-129.5 127 34 35\" focusable=\"false\">\n <path style=\"fill: var(--pie-border-light, #D0CAC5); stroke: var(--pie-border-light, #E6E3E0); stroke-width: 0.75; stroke-miterlimit: 10;\" d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\" />\n <path style=\"fill: var(--pie-border-light, #B3ABA4); stroke: var(--pie-border-light, #CDC7C2); stroke-width: 0.5; stroke-miterlimit: 10;\" d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\" />\n <circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"var(--pie-background, white)\" />\n <path d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\" fill=\"var(--pie-tertiary-light, #bce2ff)\" />\n <polygon points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\" fill=\"var(--pie-tertiary, #1a9cff)\" />\n </svg>\n {/if}\n </span>\n <span class=\"simple-cloze-toggle-label\">\n {tCommon(showingCorrectAnswer ? 'hideCorrectAnswer' : 'showCorrectAnswer', model?.language)}\n </span>\n </button>\n {/if}\n\n <div class=\"simple-cloze-response\">\n {#if isEvaluateMode && (isCorrect || showingCorrectAnswer)}\n <span class=\"correctness-icon correctness-icon--correct\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/>\n </svg>\n </span>\n {:else if isEvaluateMode && isIncorrect}\n <span class=\"correctness-icon correctness-icon--incorrect\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/>\n </svg>\n </span>\n {/if}\n <input\n bind:this={inputElement}\n type=\"text\"\n class=\"simple-cloze-input\"\n class:simple-cloze-input--correct={isEvaluateMode && (isCorrect || showingCorrectAnswer)}\n class:simple-cloze-input--incorrect={isEvaluateMode && isIncorrect && !showingCorrectAnswer}\n placeholder={t('placeholder', model?.language)}\n spellcheck=\"false\"\n aria-labelledby={prompt ? promptId : undefined}\n aria-label={prompt ? undefined : t('answerInput', model?.language)}\n aria-describedby={feedbackText ? feedbackId : undefined}\n disabled={model?.disabled}\n readonly={showingCorrectAnswer}\n oninput={handleInput}\n />\n <span id={feedbackId} class=\"sr-only\" role=\"status\">{feedbackText}</span>\n </div>\n</div>\n\n<style>\n /*\n * Self-contained: players ship no Tailwind, so nothing here relies on host\n * utility classes or a CSS reset. Colours are `--pie-*` theme variables with\n * the fallbacks `@pie-lib/render-ui`'s `color` module uses.\n */\n .simple-cloze-root {\n padding: 1rem;\n color: var(--pie-text, black);\n }\n\n .simple-cloze-prompt {\n margin-bottom: 1rem;\n }\n\n .simple-cloze-prompt :global(p) {\n margin: 0.5em 0;\n }\n\n .simple-cloze-prompt :global(strong) {\n font-weight: 600;\n }\n\n .simple-cloze-toggle {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 0 0 0.75rem;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: pointer;\n user-select: none;\n }\n\n .simple-cloze-toggle:hover .simple-cloze-toggle-label {\n text-decoration: underline;\n }\n\n .simple-cloze-toggle:focus-visible {\n outline: 2px solid var(--pie-button-focus-outline, #3b82f6);\n outline-offset: 2px;\n }\n\n .simple-cloze-toggle-icon {\n display: inline-flex;\n }\n\n .simple-cloze-toggle-icon svg {\n width: 25px;\n height: 25px;\n }\n\n .simple-cloze-toggle-label {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .simple-cloze-response {\n position: relative;\n display: inline-block;\n }\n\n .simple-cloze-input {\n box-sizing: border-box;\n margin: 0;\n padding: 0.5rem 0.75rem;\n /* The text colour, as ECR's input border: a light grey fails 3:1 (WCAG 1.4.11). */\n border: 1px solid var(--pie-text, black);\n border-radius: 0.25rem;\n background-color: transparent;\n color: var(--pie-text, black);\n font: inherit;\n }\n\n .simple-cloze-input:disabled {\n opacity: 1;\n color: var(--pie-text, black);\n -webkit-text-fill-color: currentColor;\n }\n\n .simple-cloze-input:focus-visible {\n outline: 2px solid var(--pie-button-focus-outline, #3b82f6);\n outline-offset: 2px;\n }\n\n .simple-cloze-input--correct {\n border: 2px solid var(--pie-correct-tertiary, #0ea449);\n }\n\n .simple-cloze-input--incorrect {\n border: 2px solid var(--pie-incorrect-icon, #bf0d00);\n }\n\n .simple-cloze-input[readonly] {\n font-weight: 600;\n }\n\n .correctness-icon {\n position: absolute;\n top: -8px;\n left: -8px;\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px;\n color: var(--pie-background, #ffffff);\n }\n\n .correctness-icon svg {\n width: 12px;\n height: 12px;\n }\n\n .correctness-icon--correct {\n background-color: var(--pie-correct-tertiary, #0ea449);\n }\n\n .correctness-icon--incorrect {\n background-color: var(--pie-incorrect-icon, #bf0d00);\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n</style>\n","//#region src/write-session-in-place.ts\nfunction e(e) {\n\treturn !!e && typeof e == \"object\" && !Array.isArray(e);\n}\nfunction t(t, n) {\n\tif (t === n) return t;\n\tif (!e(t) || !e(n) || Object.isFrozen(t) || !Object.isExtensible(t)) return n;\n\ttry {\n\t\tfor (let e of Object.keys(t)) e in n || delete t[e];\n\t\tObject.assign(t, n);\n\t} catch {\n\t\treturn n;\n\t}\n\treturn t;\n}\n//#endregion\nexport { t as writeSessionInPlace };\n","//#region src/session-notifier.ts\nvar e = \"commitPendingSession\", t = /* @__PURE__ */ new WeakMap();\nfunction n(e, n) {\n\tlet r = t.get(e);\n\tr || (r = /* @__PURE__ */ new Set(), t.set(e, r)), r.add(n);\n}\nfunction r(t) {\n\treturn Object.getOwnPropertyDescriptor(t, e) !== void 0;\n}\nfunction i(t) {\n\tif (r(t)) return;\n\tlet n = t[e];\n\tObject.defineProperty(t, e, {\n\t\tvalue: () => {\n\t\t\tif (typeof n == \"function\") try {\n\t\t\t\tn.call(t);\n\t\t\t} catch {}\n\t\t\to(t);\n\t\t},\n\t\tconfigurable: !0,\n\t\tenumerable: !1,\n\t\twritable: !0\n\t});\n}\nfunction a(e, t, r = {}) {\n\tlet a = r.delayMs, o = typeof a == \"function\" ? a : () => a ?? 0, s = r.maxWaitMs, c = null, l = null, u = !1, d = () => {\n\t\tc !== null && (clearTimeout(c), c = null), l !== null && (clearTimeout(l), l = null);\n\t}, f = () => {\n\t\td(), u && (u = !1, t());\n\t}, p = {\n\t\tnotify() {\n\t\t\tu = !0, c !== null && clearTimeout(c), c = setTimeout(f, Math.max(0, o())), s !== void 0 && l === null && (l = setTimeout(f, Math.max(0, s)));\n\t\t},\n\t\tflush() {\n\t\t\tif (!u) {\n\t\t\t\td();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tf();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(\"[session-notifier] a committed session-changed dispatch threw\", e);\n\t\t\t}\n\t\t}\n\t};\n\treturn n(e, p), i(e), p;\n}\nfunction o(e) {\n\tlet n = t.get(e);\n\tif (n) for (let e of [...n]) e.flush();\n}\n//#endregion\n//#region src/index.ts\nvar s = class e extends CustomEvent {\n\tstatic {\n\t\tthis.TYPE = \"model-set\";\n\t}\n\tconstructor(t, n, r) {\n\t\tsuper(e.TYPE, {\n\t\t\tbubbles: !0,\n\t\t\tcomposed: !0,\n\t\t\tdetail: {\n\t\t\t\tcomplete: n,\n\t\t\t\tcomponent: t,\n\t\t\t\thasModel: r\n\t\t\t}\n\t\t}), this.component = t, this.complete = n;\n\t}\n}, c = class e extends CustomEvent {\n\tstatic {\n\t\tthis.TYPE = \"session-changed\";\n\t}\n\tconstructor(t, n) {\n\t\tsuper(e.TYPE, {\n\t\t\tbubbles: !0,\n\t\t\tcomposed: !0,\n\t\t\tdetail: {\n\t\t\t\tcomplete: n,\n\t\t\t\tcomponent: t\n\t\t\t}\n\t\t}), this.component = t, this.complete = n;\n\t}\n};\n//#endregion\nexport { s as ModelSetEvent, e as SESSION_COMMIT_METHOD, c as SessionChangedEvent, a as createSessionNotifier, o as flushSessionNotifiers };\n","import { writeSessionInPlace as e } from \"./index2.js\";\nimport { ModelSetEvent as t, SessionChangedEvent as n } from \"@pie-element/shared-player-events\";\n//#region src/delivery-element.ts\nfunction r(r, i) {\n\tlet a = r.element;\n\tif (!a) throw TypeError(\"defineDeliveryElement: the component was not compiled with `customElement`\");\n\tclass o extends a {\n\t\t#e;\n\t\t#t;\n\t\tconstructor() {\n\t\t\tsuper(), this.onSessionChange = (e) => {\n\t\t\t\tthis.writeSession(e), this.dispatchSessionChanged();\n\t\t\t};\n\t\t}\n\t\tset model(e) {\n\t\t\tthis.#e = e, super.model = e, queueMicrotask(() => {\n\t\t\t\tthis.dispatchEvent(new t(this.tagName.toLowerCase(), this.isComplete(), this.#e !== void 0));\n\t\t\t});\n\t\t}\n\t\tget model() {\n\t\t\treturn this.#e;\n\t\t}\n\t\tset session(e) {\n\t\t\tthis.#t = e, super.session = e, this.dispatchSessionChanged();\n\t\t}\n\t\tget session() {\n\t\t\treturn this.#t;\n\t\t}\n\t\tisComplete() {\n\t\t\treturn i.isComplete(this.#e, this.#t);\n\t\t}\n\t\twriteSession(t) {\n\t\t\tthis.#t = e(this.#t, t), super.session = t;\n\t\t}\n\t\tdispatchSessionChanged() {\n\t\t\tthis.dispatchEvent(new n(this.tagName.toLowerCase(), this.isComplete()));\n\t\t}\n\t}\n\treturn o;\n}\n//#endregion\nexport { r as defineDeliveryElement };\n","import SimpleClozeComponent from './SimpleCloze.svelte';\nimport { defineDeliveryElement } from '@pie-lib/delivery-events-svelte';\nimport type { SimpleClozeQuestion, SimpleClozeSession } from '../controller/index.js';\n\n// The demo loader and players register it with customElements.define().\nconst SimpleClozeElement = defineDeliveryElement<SimpleClozeQuestion, SimpleClozeSession>(\n SimpleClozeComponent,\n {\n isComplete: (_model, session) =>\n typeof session?.value === 'string' && session.value.trim().length > 0,\n }\n);\n\nexport default SimpleClozeElement;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["#e","t","#t","e","n"],"sources":["../../../src/delivery/TeacherInstructions.svelte","../../../src/delivery/SimpleCloze.svelte","../../../../../lib-svelte/delivery-events/dist/index2.js","../../../../../shared/player-events/dist/index.js","../../../../../lib-svelte/delivery-events/dist/index3.js","../../../src/delivery/index.ts"],"sourcesContent":["<script lang=\"ts\">\nimport { sanitizeModelHtml } from '@pie-element/shared-utils';\nimport { tCommon } from '../i18n';\n\nlet { html, language }: { html: string; language?: string } = $props();\n\nlet expanded = $state(false);\nconst panelId = `simple-cloze-teacher-instructions-${Math.random().toString(36).slice(2, 10)}`;\n</script>\n\n<!-- Collapsed by default, as multiple-choice shows them; the controller sends them to instructors only. -->\n<div class=\"teacher-instructions pie-teacher-instructions\">\n <button\n type=\"button\"\n class=\"teacher-instructions-toggle pie-teacher-instructions-toggle\"\n aria-expanded={expanded}\n aria-controls={panelId}\n onclick={() => (expanded = !expanded)}\n >\n {tCommon(expanded ? 'hideTeacherInstructions' : 'showTeacherInstructions', language)}\n </button>\n <div id={panelId} class=\"teacher-instructions-content pie-teacher-instructions-content\" hidden={!expanded}>\n {@html sanitizeModelHtml(html)}\n </div>\n</div>\n\n<style>\n .teacher-instructions {\n margin-bottom: 1rem;\n }\n\n .teacher-instructions-toggle {\n padding: 0;\n border: 0;\n border-bottom: 1px dotted currentColor;\n background: transparent;\n font: inherit;\n color: var(--pie-primary, #3f51b5);\n cursor: pointer;\n }\n\n .teacher-instructions-toggle:focus-visible {\n outline: 2px solid var(--pie-button-focus-outline, #3b82f6);\n outline-offset: 2px;\n }\n\n .teacher-instructions-content {\n padding-top: 1rem;\n }\n</style>\n","<svelte:options\n customElement={{\n shadow: 'none',\n props: {\n model: { type: 'Object' },\n session: { type: 'Object' },\n onSessionChange: {}\n }\n }}\n/>\n\n<script lang=\"ts\">\nimport { sanitizeModelHtml } from '@pie-element/shared-utils';\nimport { renderMath } from '@pie-element/shared-math-rendering-mathjax';\nimport { t, tCommon } from '../i18n';\nimport TeacherInstructions from './TeacherInstructions.svelte';\n\nlet {\n model = null,\n session = null,\n onSessionChange,\n}: { model?: any; session?: any; onSessionChange?: (session: any) => void } = $props();\n\n// Per-instance ids: a page can hold several instances, and several versions of\n// this element, each with its own Svelte runtime.\nconst instanceId = `simple-cloze-${Math.random().toString(36).slice(2, 10)}`;\nconst promptId = `${instanceId}-prompt`;\nconst feedbackId = `${instanceId}-feedback`;\n\nlet promptElement: HTMLDivElement | null = $state(null);\nlet inputElement: HTMLInputElement | null = $state(null);\nlet showCorrectAnswer = $state(false);\n\nconst isEvaluateMode = $derived(model?.mode === 'evaluate');\nconst correctness = $derived(model?.correctness);\nconst isCorrect = $derived(correctness === 'correct');\nconst isIncorrect = $derived(correctness === 'incorrect');\nconst isUnanswered = $derived(correctness === 'unanswered');\nconst prompt = $derived(typeof model?.prompt === 'string' ? model.prompt : '');\nconst correctAnswer = $derived(typeof model?.correctAnswer === 'string' ? model.correctAnswer : '');\nconst sessionValue = $derived(typeof session?.value === 'string' ? session.value : '');\n// As in multiple-choice, any response short of correct can be revealed,\n// including none.\nconst canShowCorrectAnswer = $derived(isEvaluateMode && !isCorrect && !!correctAnswer.trim());\nconst showingCorrectAnswer = $derived(showCorrectAnswer && canShowCorrectAnswer);\n\nconst feedbackText = $derived.by(() => {\n if (!isEvaluateMode) return '';\n if (showingCorrectAnswer) return t('correctAnswerShown', model?.language);\n if (isCorrect) return t('correct', model?.language);\n if (isIncorrect) return t('incorrect', model?.language);\n if (isUnanswered) return t('unanswered', model?.language);\n return '';\n});\n\n// Leaving evaluate mode, or a response that turned correct, turns the reveal\n// off, so gather mode never starts on the answer key.\n$effect(() => {\n if (!canShowCorrectAnswer) {\n showCorrectAnswer = false;\n }\n});\n\n// The input shows the session value, or the answer key while it is revealed.\n// A player that resets or replaces the session clears or restores it.\n$effect(() => {\n if (!inputElement) return;\n const next = showingCorrectAnswer ? correctAnswer : sessionValue;\n if (inputElement.value !== next) {\n inputElement.value = next;\n }\n});\n\n// Typesets the prompt's math each time it renders. `renderMath` resolves once\n// MathJax has run, so a load failure arrives as a rejection.\n$effect(() => {\n if (!promptElement || !prompt) return;\n const warn = (err: unknown) => console.warn('simple-cloze: MathJax render failed', err);\n try {\n Promise.resolve(renderMath(promptElement)).catch(warn);\n } catch (err) {\n warn(err);\n }\n});\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const newValue = target.value;\n\n // The player owns the session's `id` and `element` (the versioned tag it\n // registered this element under), so neither is written here.\n onSessionChange?.({ ...session, value: newValue });\n}\n\nfunction toggleCorrectAnswer() {\n if (!canShowCorrectAnswer) return;\n showCorrectAnswer = !showCorrectAnswer;\n}\n</script>\n\n<div class=\"simple-cloze-root\">\n {#if model?.teacherInstructions}\n <TeacherInstructions html={model.teacherInstructions} language={model?.language} />\n {/if}\n\n {#if prompt}\n <div bind:this={promptElement} id={promptId} class=\"simple-cloze-prompt\">{@html sanitizeModelHtml(prompt)}</div>\n {/if}\n\n {#if canShowCorrectAnswer}\n <button\n type=\"button\"\n class=\"simple-cloze-toggle\"\n onclick={toggleCorrectAnswer}\n aria-pressed={showingCorrectAnswer}\n >\n <span class=\"simple-cloze-toggle-icon\" aria-hidden=\"true\">\n {#if showingCorrectAnswer}\n <svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-283 359 34 35\" focusable=\"false\">\n <circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-tertiary-light, #bce2ff)\" />\n <path d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\" fill=\"var(--pie-tertiary-light, #bce2ff)\" />\n <polygon points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\" fill=\"var(--pie-tertiary, #1a9cff)\" />\n </svg>\n {:else}\n <svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-129.5 127 34 35\" focusable=\"false\">\n <path style=\"fill: var(--pie-border-light, #D0CAC5); stroke: var(--pie-border-light, #E6E3E0); stroke-width: 0.75; stroke-miterlimit: 10;\" d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\" />\n <path style=\"fill: var(--pie-border-light, #B3ABA4); stroke: var(--pie-border-light, #CDC7C2); stroke-width: 0.5; stroke-miterlimit: 10;\" d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\" />\n <circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"var(--pie-background, white)\" />\n <path d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\" fill=\"var(--pie-tertiary-light, #bce2ff)\" />\n <polygon points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\" fill=\"var(--pie-tertiary, #1a9cff)\" />\n </svg>\n {/if}\n </span>\n <span class=\"simple-cloze-toggle-label\">\n {tCommon(showingCorrectAnswer ? 'hideCorrectAnswer' : 'showCorrectAnswer', model?.language)}\n </span>\n </button>\n {/if}\n\n <div class=\"simple-cloze-response\">\n {#if isEvaluateMode && (isCorrect || showingCorrectAnswer)}\n <span class=\"correctness-icon correctness-icon--correct\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/>\n </svg>\n </span>\n {:else if isEvaluateMode && isIncorrect}\n <span class=\"correctness-icon correctness-icon--incorrect\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/>\n </svg>\n </span>\n {/if}\n <input\n bind:this={inputElement}\n type=\"text\"\n class=\"simple-cloze-input\"\n class:simple-cloze-input--correct={isEvaluateMode && (isCorrect || showingCorrectAnswer)}\n class:simple-cloze-input--incorrect={isEvaluateMode && isIncorrect && !showingCorrectAnswer}\n placeholder={t('placeholder', model?.language)}\n spellcheck=\"false\"\n aria-labelledby={prompt ? promptId : undefined}\n aria-label={prompt ? undefined : t('answerInput', model?.language)}\n aria-describedby={feedbackText ? feedbackId : undefined}\n disabled={model?.disabled}\n readonly={showingCorrectAnswer}\n oninput={handleInput}\n />\n <span id={feedbackId} class=\"sr-only\" role=\"status\">{feedbackText}</span>\n </div>\n</div>\n\n<style>\n /*\n * Self-contained: players ship no Tailwind, so nothing here relies on host\n * utility classes or a CSS reset. Colours are `--pie-*` theme variables with\n * the fallbacks `@pie-lib/render-ui`'s `color` module uses.\n */\n .simple-cloze-root {\n padding: 1rem;\n color: var(--pie-text, black);\n }\n\n .simple-cloze-prompt {\n margin-bottom: 1rem;\n }\n\n .simple-cloze-prompt :global(p) {\n margin: 0.5em 0;\n }\n\n .simple-cloze-prompt :global(strong) {\n font-weight: 600;\n }\n\n .simple-cloze-toggle {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 0 0 0.75rem;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n cursor: pointer;\n user-select: none;\n }\n\n .simple-cloze-toggle:hover .simple-cloze-toggle-label {\n text-decoration: underline;\n }\n\n .simple-cloze-toggle:focus-visible {\n outline: 2px solid var(--pie-button-focus-outline, #3b82f6);\n outline-offset: 2px;\n }\n\n .simple-cloze-toggle-icon {\n display: inline-flex;\n }\n\n .simple-cloze-toggle-icon svg {\n width: 25px;\n height: 25px;\n }\n\n .simple-cloze-toggle-label {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .simple-cloze-response {\n position: relative;\n display: inline-block;\n }\n\n .simple-cloze-input {\n box-sizing: border-box;\n margin: 0;\n padding: 0.5rem 0.75rem;\n /* The text colour, as ECR's input border: a light grey fails 3:1 (WCAG 1.4.11). */\n border: 1px solid var(--pie-text, black);\n border-radius: 0.25rem;\n background-color: transparent;\n color: var(--pie-text, black);\n font: inherit;\n }\n\n .simple-cloze-input:disabled {\n opacity: 1;\n color: var(--pie-text, black);\n -webkit-text-fill-color: currentColor;\n }\n\n .simple-cloze-input:focus-visible {\n outline: 2px solid var(--pie-button-focus-outline, #3b82f6);\n outline-offset: 2px;\n }\n\n .simple-cloze-input--correct {\n border: 2px solid var(--pie-correct-tertiary, #0ea449);\n }\n\n .simple-cloze-input--incorrect {\n border: 2px solid var(--pie-incorrect-icon, #bf0d00);\n }\n\n .simple-cloze-input[readonly] {\n font-weight: 600;\n }\n\n .correctness-icon {\n position: absolute;\n top: -8px;\n left: -8px;\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px;\n color: var(--pie-background, #ffffff);\n }\n\n .correctness-icon svg {\n width: 12px;\n height: 12px;\n }\n\n .correctness-icon--correct {\n background-color: var(--pie-correct-tertiary, #0ea449);\n }\n\n .correctness-icon--incorrect {\n background-color: var(--pie-incorrect-icon, #bf0d00);\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n</style>\n","//#region src/write-session-in-place.ts\nfunction e(e) {\n\treturn !!e && typeof e == \"object\" && !Array.isArray(e);\n}\nfunction t(t, n) {\n\tif (t === n) return t;\n\tif (!e(t) || !e(n) || Object.isFrozen(t) || !Object.isExtensible(t)) return n;\n\ttry {\n\t\tfor (let e of Object.keys(t)) e in n || delete t[e];\n\t\tObject.assign(t, n);\n\t} catch {\n\t\treturn n;\n\t}\n\treturn t;\n}\n//#endregion\nexport { t as writeSessionInPlace };\n","//#region src/session-notifier.ts\nvar e = \"commitPendingSession\", t = /* @__PURE__ */ new WeakMap();\nfunction n(e, n) {\n\tlet r = t.get(e);\n\tr || (r = /* @__PURE__ */ new Set(), t.set(e, r)), r.add(n);\n}\nfunction r(t) {\n\treturn Object.getOwnPropertyDescriptor(t, e) !== void 0;\n}\nfunction i(t) {\n\tif (r(t)) return;\n\tlet n = t[e];\n\tObject.defineProperty(t, e, {\n\t\tvalue: () => {\n\t\t\tif (typeof n == \"function\") try {\n\t\t\t\tn.call(t);\n\t\t\t} catch {}\n\t\t\to(t);\n\t\t},\n\t\tconfigurable: !0,\n\t\tenumerable: !1,\n\t\twritable: !0\n\t});\n}\nfunction a(e, t, r = {}) {\n\tlet a = r.delayMs, o = typeof a == \"function\" ? a : () => a ?? 0, s = r.maxWaitMs, c = null, l = null, u = !1, d = () => {\n\t\tc !== null && (clearTimeout(c), c = null), l !== null && (clearTimeout(l), l = null);\n\t}, f = () => {\n\t\td(), u && (u = !1, t());\n\t}, p = {\n\t\tnotify() {\n\t\t\tu = !0, c !== null && clearTimeout(c), c = setTimeout(f, Math.max(0, o())), s !== void 0 && l === null && (l = setTimeout(f, Math.max(0, s)));\n\t\t},\n\t\tflush() {\n\t\t\tif (!u) {\n\t\t\t\td();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tf();\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(\"[session-notifier] a committed session-changed dispatch threw\", e);\n\t\t\t}\n\t\t}\n\t};\n\treturn n(e, p), i(e), p;\n}\nfunction o(e) {\n\tlet n = t.get(e);\n\tif (n) for (let e of [...n]) e.flush();\n}\n//#endregion\n//#region src/index.ts\nvar s = class e extends CustomEvent {\n\tstatic {\n\t\tthis.TYPE = \"model-set\";\n\t}\n\tconstructor(t, n, r) {\n\t\tsuper(e.TYPE, {\n\t\t\tbubbles: !0,\n\t\t\tcomposed: !0,\n\t\t\tdetail: {\n\t\t\t\tcomplete: n,\n\t\t\t\tcomponent: t,\n\t\t\t\thasModel: r\n\t\t\t}\n\t\t}), this.component = t, this.complete = n;\n\t}\n}, c = class e extends CustomEvent {\n\tstatic {\n\t\tthis.TYPE = \"session-changed\";\n\t}\n\tconstructor(t, n) {\n\t\tsuper(e.TYPE, {\n\t\t\tbubbles: !0,\n\t\t\tcomposed: !0,\n\t\t\tdetail: {\n\t\t\t\tcomplete: n,\n\t\t\t\tcomponent: t\n\t\t\t}\n\t\t}), this.component = t, this.complete = n;\n\t}\n};\n//#endregion\nexport { s as ModelSetEvent, e as SESSION_COMMIT_METHOD, c as SessionChangedEvent, a as createSessionNotifier, o as flushSessionNotifiers };\n","import { writeSessionInPlace as e } from \"./index2.js\";\nimport { ModelSetEvent as t, SessionChangedEvent as n } from \"@pie-element/shared-player-events\";\n//#region src/delivery-element.ts\nfunction r(r, i) {\n\tlet a = r.element;\n\tif (!a) throw TypeError(\"defineDeliveryElement: the component was not compiled with `customElement`\");\n\tclass o extends a {\n\t\t#e;\n\t\t#t;\n\t\tconstructor() {\n\t\t\tsuper(), this.onSessionChange = (e) => {\n\t\t\t\tthis.writeSession(e), this.dispatchSessionChanged();\n\t\t\t};\n\t\t}\n\t\tset model(e) {\n\t\t\tthis.#e = e, super.model = e, queueMicrotask(() => {\n\t\t\t\tthis.dispatchEvent(new t(this.tagName.toLowerCase(), this.isComplete(), this.#e !== void 0));\n\t\t\t});\n\t\t}\n\t\tget model() {\n\t\t\treturn this.#e;\n\t\t}\n\t\tset session(e) {\n\t\t\tthis.#t = e, super.session = e, this.dispatchSessionChanged();\n\t\t}\n\t\tget session() {\n\t\t\treturn this.#t;\n\t\t}\n\t\tisComplete() {\n\t\t\treturn i.isComplete(this.#e, this.#t);\n\t\t}\n\t\twriteSession(t) {\n\t\t\tthis.#t = e(this.#t, t), super.session = t;\n\t\t}\n\t\tdispatchSessionChanged() {\n\t\t\tthis.dispatchEvent(new n(this.tagName.toLowerCase(), this.isComplete()));\n\t\t}\n\t}\n\treturn o;\n}\n//#endregion\nexport { r as defineDeliveryElement };\n","import SimpleClozeComponent from './SimpleCloze.svelte';\nimport { defineDeliveryElement } from '@pie-lib/delivery-events-svelte';\nimport type { SimpleClozeQuestion, SimpleClozeSession } from '../controller/index.js';\n\n// The demo loader and players register it with customElements.define().\nconst SimpleClozeElement = defineDeliveryElement<SimpleClozeQuestion, SimpleClozeSession>(\n SimpleClozeComponent,\n {\n isComplete: (_model, session) =>\n typeof session?.value === 'string' && session.value.trim().length > 0,\n }\n);\n\nexport default SimpleClozeElement;\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { C as e, E as t, F as n, I as r, M as i, N as a, O as o, P as s, R as c, S as l, T as u, _ as d, a as f, b as p, c as m, f as h, g, j as _, k as v, l as y, n as b, r as x, t as S, u as C, w, x as T, y as E } from "../client-e4ZTphpa.js";
2
- import { n as D, r as O, t as k } from "../i18n-CL6Kt4aa.js";
1
+ import { C as e, E as t, F as n, I as r, M as i, N as a, O as o, P as s, R as c, S as l, T as u, _ as d, a as f, b as p, c as m, f as h, g, j as _, k as v, l as ee, n as y, r as b, t as x, u as S, w as C, x as w, y as T } from "../client-e4ZTphpa.js";
2
+ import { l as E, n as D, r as O, t as k } from "../i18n-BbU-JKL9.js";
3
3
  //#region src/delivery/TeacherInstructions.svelte
4
- var A = E("<div class=\"teacher-instructions pie-teacher-instructions svelte-1jhejbv\"><button type=\"button\" class=\"teacher-instructions-toggle pie-teacher-instructions-toggle svelte-1jhejbv\"> </button> <div class=\"teacher-instructions-content pie-teacher-instructions-content svelte-1jhejbv\"></div></div>"), j = {
4
+ var A = T("<div class=\"teacher-instructions pie-teacher-instructions svelte-1jhejbv\"><button type=\"button\" class=\"teacher-instructions-toggle pie-teacher-instructions-toggle svelte-1jhejbv\"> </button> <div class=\"teacher-instructions-content pie-teacher-instructions-content svelte-1jhejbv\"></div></div>"), j = {
5
5
  hash: "svelte-1jhejbv",
6
6
  code: ".teacher-instructions.svelte-1jhejbv {margin-bottom:1rem;}.teacher-instructions-toggle.svelte-1jhejbv {padding:0;border:0;border-bottom:1px dotted currentColor;background:transparent;font:inherit;color:var(--pie-primary, #3f51b5);cursor:pointer;}.teacher-instructions-toggle.svelte-1jhejbv:focus-visible {outline:2px solid var(--pie-button-focus-outline, #3b82f6);outline-offset:2px;}.teacher-instructions-content.svelte-1jhejbv {padding-top:1rem;}"
7
7
  };
8
8
  function M(s, u) {
9
- r(u, !0), y(s, j);
10
- let p = b(u, "html", 7), m = b(u, "language", 7), h = i(!1), x = `simple-cloze-teacher-instructions-${Math.random().toString(36).slice(2, 10)}`;
11
- var S = {
9
+ r(u, !0), ee(s, j);
10
+ let p = y(u, "html", 7), m = y(u, "language", 7), h = i(!1), b = `simple-cloze-teacher-instructions-${Math.random().toString(36).slice(2, 10)}`;
11
+ var x = {
12
12
  get html() {
13
13
  return p();
14
14
  },
@@ -21,29 +21,29 @@ function M(s, u) {
21
21
  set language(e) {
22
22
  m(e), a();
23
23
  }
24
- }, T = A(), E = t(T), O = o(E, !0), k = v(E, 2);
25
- return C(k, p, !0), c(k), c(T), w((t) => {
26
- f(E, "aria-expanded", e(h)), f(E, "aria-controls", x), g(O, t), f(k, "id", x), f(k, "hidden", !e(h));
27
- }, [() => D(e(h) ? "hideTeacherInstructions" : "showTeacherInstructions", m())]), l("click", E, () => _(h, !e(h))), d(s, T), n(S);
24
+ }, w = A(), T = t(w), O = o(T, !0), k = v(T, 2);
25
+ return S(k, () => E(p()), !0), c(k), c(w), C((t) => {
26
+ f(T, "aria-expanded", e(h)), f(T, "aria-controls", b), g(O, t), f(k, "id", b), f(k, "hidden", !e(h));
27
+ }, [() => D(e(h) ? "hideTeacherInstructions" : "showTeacherInstructions", m())]), l("click", T, () => _(h, !e(h))), d(s, w), n(x);
28
28
  }
29
- T(["click"]), S(M, {
29
+ w(["click"]), x(M, {
30
30
  html: {},
31
31
  language: {}
32
32
  }, [], [], { mode: "open" });
33
33
  //#endregion
34
34
  //#region src/delivery/SimpleCloze.svelte
35
- var ee = E("<div class=\"simple-cloze-prompt svelte-1glps5n\"></div>"), te = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-283 359 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></circle><path d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), ne = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-129.5 127 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><path style=\"fill: var(--pie-border-light, #D0CAC5); stroke: var(--pie-border-light, #E6E3E0); stroke-width: 0.75; stroke-miterlimit: 10;\" d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\"></path><path style=\"fill: var(--pie-border-light, #B3ABA4); stroke: var(--pie-border-light, #CDC7C2); stroke-width: 0.5; stroke-miterlimit: 10;\" d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\"></path><circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"var(--pie-background, white)\"></circle><path d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), re = E("<button type=\"button\" class=\"simple-cloze-toggle svelte-1glps5n\"><span class=\"simple-cloze-toggle-icon svelte-1glps5n\" aria-hidden=\"true\"><!></span> <span class=\"simple-cloze-toggle-label svelte-1glps5n\"> </span></button>"), ie = E("<span class=\"correctness-icon correctness-icon--correct svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"></path></svg></span>"), ae = E("<span class=\"correctness-icon correctness-icon--incorrect svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"></path></svg></span>"), oe = E("<div class=\"simple-cloze-root svelte-1glps5n\"><!> <!> <!> <div class=\"simple-cloze-response svelte-1glps5n\"><!> <input type=\"text\" spellcheck=\"false\"/> <span class=\"sr-only svelte-1glps5n\" role=\"status\"> </span></div></div>"), se = {
35
+ var te = T("<div class=\"simple-cloze-prompt svelte-1glps5n\"></div>"), ne = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-283 359 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></circle><path d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), re = p("<svg preserveAspectRatio=\"xMinYMin meet\" version=\"1.1\" viewBox=\"-129.5 127 34 35\" focusable=\"false\" class=\"svelte-1glps5n\"><path style=\"fill: var(--pie-border-light, #D0CAC5); stroke: var(--pie-border-light, #E6E3E0); stroke-width: 0.75; stroke-miterlimit: 10;\" d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\"></path><path style=\"fill: var(--pie-border-light, #B3ABA4); stroke: var(--pie-border-light, #CDC7C2); stroke-width: 0.5; stroke-miterlimit: 10;\" d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\"></path><circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"var(--pie-background, white)\"></circle><path d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\" fill=\"var(--pie-tertiary-light, #bce2ff)\"></path><polygon points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\" fill=\"var(--pie-tertiary, #1a9cff)\"></polygon></svg>"), ie = T("<button type=\"button\" class=\"simple-cloze-toggle svelte-1glps5n\"><span class=\"simple-cloze-toggle-icon svelte-1glps5n\" aria-hidden=\"true\"><!></span> <span class=\"simple-cloze-toggle-label svelte-1glps5n\"> </span></button>"), ae = T("<span class=\"correctness-icon correctness-icon--correct svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"></path></svg></span>"), oe = T("<span class=\"correctness-icon correctness-icon--incorrect svelte-1glps5n\" aria-hidden=\"true\"><svg fill=\"currentColor\" viewBox=\"0 0 24 24\" focusable=\"false\" class=\"svelte-1glps5n\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"></path></svg></span>"), se = T("<div class=\"simple-cloze-root svelte-1glps5n\"><!> <!> <!> <div class=\"simple-cloze-response svelte-1glps5n\"><!> <input type=\"text\" spellcheck=\"false\"/> <span class=\"sr-only svelte-1glps5n\" role=\"status\"> </span></div></div>"), ce = {
36
36
  hash: "svelte-1glps5n",
37
37
  code: "\n /*\n * Self-contained: players ship no Tailwind, so nothing here relies on host\n * utility classes or a CSS reset. Colours are `--pie-*` theme variables with\n * the fallbacks `@pie-lib/render-ui`'s `color` module uses.\n */.simple-cloze-root.svelte-1glps5n {padding:1rem;color:var(--pie-text, black);}.simple-cloze-prompt.svelte-1glps5n {margin-bottom:1rem;}.simple-cloze-prompt.svelte-1glps5n p {margin:0.5em 0;}.simple-cloze-prompt.svelte-1glps5n strong {font-weight:600;}.simple-cloze-toggle.svelte-1glps5n {display:flex;align-items:center;gap:0.5rem;margin:0 0 0.75rem;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;user-select:none;}.simple-cloze-toggle.svelte-1glps5n:hover .simple-cloze-toggle-label:where(.svelte-1glps5n) {text-decoration:underline;}.simple-cloze-toggle.svelte-1glps5n:focus-visible {outline:2px solid var(--pie-button-focus-outline, #3b82f6);outline-offset:2px;}.simple-cloze-toggle-icon.svelte-1glps5n {display:inline-flex;}.simple-cloze-toggle-icon.svelte-1glps5n svg:where(.svelte-1glps5n) {width:25px;height:25px;}.simple-cloze-toggle-label.svelte-1glps5n {font-size:0.875rem;line-height:1.25rem;}.simple-cloze-response.svelte-1glps5n {position:relative;display:inline-block;}.simple-cloze-input.svelte-1glps5n {box-sizing:border-box;margin:0;padding:0.5rem 0.75rem;\n /* The text colour, as ECR's input border: a light grey fails 3:1 (WCAG 1.4.11). */border:1px solid var(--pie-text, black);border-radius:0.25rem;background-color:transparent;color:var(--pie-text, black);font:inherit;}.simple-cloze-input.svelte-1glps5n:disabled {opacity:1;color:var(--pie-text, black);-webkit-text-fill-color:currentColor;}.simple-cloze-input.svelte-1glps5n:focus-visible {outline:2px solid var(--pie-button-focus-outline, #3b82f6);outline-offset:2px;}.simple-cloze-input--correct.svelte-1glps5n {border:2px solid var(--pie-correct-tertiary, #0ea449);}.simple-cloze-input--incorrect.svelte-1glps5n {border:2px solid var(--pie-incorrect-icon, #bf0d00);}.simple-cloze-input[readonly].svelte-1glps5n {font-weight:600;}.correctness-icon.svelte-1glps5n {position:absolute;top:-8px;left:-8px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:2px;color:var(--pie-background, #ffffff);}.correctness-icon.svelte-1glps5n svg:where(.svelte-1glps5n) {width:12px;height:12px;}.correctness-icon--correct.svelte-1glps5n {background-color:var(--pie-correct-tertiary, #0ea449);}.correctness-icon--incorrect.svelte-1glps5n {background-color:var(--pie-incorrect-icon, #bf0d00);}.sr-only.svelte-1glps5n {position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;}"
38
38
  };
39
- function N(p, S) {
40
- r(S, !0), y(p, se);
41
- let T = b(S, "model", 7, null), E = b(S, "session", 7, null), A = b(S, "onSessionChange", 7), j = `simple-cloze-${Math.random().toString(36).slice(2, 10)}`, N = `${j}-prompt`, P = `${j}-feedback`, F = i(null), I = i(null), L = i(!1), R = s(() => T()?.mode === "evaluate"), z = s(() => T()?.correctness), B = s(() => e(z) === "correct"), V = s(() => e(z) === "incorrect"), ce = s(() => e(z) === "unanswered"), H = s(() => typeof T()?.prompt == "string" ? T().prompt : ""), U = s(() => typeof T()?.correctAnswer == "string" ? T().correctAnswer : ""), le = s(() => typeof E()?.value == "string" ? E().value : ""), W = s(() => e(R) && !e(B) && !!e(U).trim()), G = s(() => e(L) && e(W)), K = s(() => e(R) ? e(G) ? k("correctAnswerShown", T()?.language) : e(B) ? k("correct", T()?.language) : e(V) ? k("incorrect", T()?.language) : e(ce) ? k("unanswered", T()?.language) : "" : "");
39
+ function N(p, x) {
40
+ r(x, !0), ee(p, ce);
41
+ let w = y(x, "model", 7, null), T = y(x, "session", 7, null), A = y(x, "onSessionChange", 7), j = `simple-cloze-${Math.random().toString(36).slice(2, 10)}`, N = `${j}-prompt`, P = `${j}-feedback`, F = i(null), I = i(null), L = i(!1), R = s(() => w()?.mode === "evaluate"), z = s(() => w()?.correctness), B = s(() => e(z) === "correct"), V = s(() => e(z) === "incorrect"), le = s(() => e(z) === "unanswered"), H = s(() => typeof w()?.prompt == "string" ? w().prompt : ""), U = s(() => typeof w()?.correctAnswer == "string" ? w().correctAnswer : ""), ue = s(() => typeof T()?.value == "string" ? T().value : ""), W = s(() => e(R) && !e(B) && !!e(U).trim()), G = s(() => e(L) && e(W)), K = s(() => e(R) ? e(G) ? k("correctAnswerShown", w()?.language) : e(B) ? k("correct", w()?.language) : e(V) ? k("incorrect", w()?.language) : e(le) ? k("unanswered", w()?.language) : "" : "");
42
42
  u(() => {
43
43
  e(W) || _(L, !1);
44
44
  }), u(() => {
45
45
  if (!e(I)) return;
46
- let t = e(G) ? e(U) : e(le);
46
+ let t = e(G) ? e(U) : e(ue);
47
47
  e(I).value !== t && (e(I).value = t);
48
48
  }), u(() => {
49
49
  if (!e(F) || !e(H)) return;
@@ -54,28 +54,28 @@ function N(p, S) {
54
54
  t(e);
55
55
  }
56
56
  });
57
- function ue(e) {
57
+ function de(e) {
58
58
  let t = e.target.value;
59
59
  A()?.({
60
- ...E(),
60
+ ...T(),
61
61
  value: t
62
62
  });
63
63
  }
64
- function de() {
64
+ function fe() {
65
65
  e(W) && _(L, !e(L));
66
66
  }
67
- var fe = {
67
+ var pe = {
68
68
  get model() {
69
- return T();
69
+ return w();
70
70
  },
71
71
  set model(e = null) {
72
- T(e), a();
72
+ w(e), a();
73
73
  },
74
74
  get session() {
75
- return E();
75
+ return T();
76
76
  },
77
77
  set session(e = null) {
78
- E(e), a();
78
+ T(e), a();
79
79
  },
80
80
  get onSessionChange() {
81
81
  return A();
@@ -83,12 +83,12 @@ function N(p, S) {
83
83
  set onSessionChange(e) {
84
84
  A(e), a();
85
85
  }
86
- }, q = oe(), J = t(q), pe = (t) => {
86
+ }, q = se(), J = t(q), me = (t) => {
87
87
  {
88
- let n = s(() => T()?.language);
88
+ let n = s(() => w()?.language);
89
89
  M(t, {
90
90
  get html() {
91
- return T().teacherInstructions;
91
+ return w().teacherInstructions;
92
92
  },
93
93
  get language() {
94
94
  return e(n);
@@ -97,52 +97,52 @@ function N(p, S) {
97
97
  }
98
98
  };
99
99
  h(J, (e) => {
100
- T()?.teacherInstructions && e(pe);
100
+ w()?.teacherInstructions && e(me);
101
101
  });
102
- var Y = v(J, 2), me = (t) => {
103
- var n = ee();
104
- C(n, () => e(H), !0), c(n), x(n, (e) => _(F, e), () => e(F)), w(() => f(n, "id", N)), d(t, n);
102
+ var Y = v(J, 2), he = (t) => {
103
+ var n = te();
104
+ S(n, () => E(e(H)), !0), c(n), b(n, (e) => _(F, e), () => e(F)), C(() => f(n, "id", N)), d(t, n);
105
105
  };
106
106
  h(Y, (t) => {
107
- e(H) && t(me);
107
+ e(H) && t(he);
108
108
  });
109
- var X = v(Y, 2), he = (n) => {
110
- var r = re(), i = t(r), a = t(i), s = (e) => {
111
- d(e, te());
112
- }, u = (e) => {
109
+ var X = v(Y, 2), ge = (n) => {
110
+ var r = ie(), i = t(r), a = t(i), s = (e) => {
113
111
  d(e, ne());
112
+ }, u = (e) => {
113
+ d(e, re());
114
114
  };
115
115
  h(a, (t) => {
116
116
  e(G) ? t(s) : t(u, -1);
117
117
  }), c(i);
118
118
  var p = o(v(i, 2), !0);
119
- c(r), w((t) => {
119
+ c(r), C((t) => {
120
120
  f(r, "aria-pressed", e(G)), g(p, t);
121
- }, [() => D(e(G) ? "hideCorrectAnswer" : "showCorrectAnswer", T()?.language)]), l("click", r, de), d(n, r);
121
+ }, [() => D(e(G) ? "hideCorrectAnswer" : "showCorrectAnswer", w()?.language)]), l("click", r, fe), d(n, r);
122
122
  };
123
123
  h(X, (t) => {
124
- e(W) && t(he);
124
+ e(W) && t(ge);
125
125
  });
126
- var Z = v(X, 2), Q = t(Z), ge = (e) => {
127
- d(e, ie());
128
- }, _e = (e) => {
126
+ var Z = v(X, 2), Q = t(Z), _e = (e) => {
129
127
  d(e, ae());
128
+ }, ve = (e) => {
129
+ d(e, oe());
130
130
  };
131
131
  h(Q, (t) => {
132
- e(R) && (e(B) || e(G)) ? t(ge) : e(R) && e(V) && t(_e, 1);
132
+ e(R) && (e(B) || e(G)) ? t(_e) : e(R) && e(V) && t(ve, 1);
133
133
  });
134
134
  var $ = v(Q, 2);
135
- let ve;
136
- x($, (e) => _(I, e), () => e(I));
137
- var ye = v($, 2), be = o(ye, !0);
138
- return c(Z), c(q), w((t, n) => {
139
- ve = m($, 1, "simple-cloze-input svelte-1glps5n", null, ve, {
135
+ let ye;
136
+ b($, (e) => _(I, e), () => e(I));
137
+ var be = v($, 2), xe = o(be, !0);
138
+ return c(Z), c(q), C((t, n) => {
139
+ ye = m($, 1, "simple-cloze-input svelte-1glps5n", null, ye, {
140
140
  "simple-cloze-input--correct": e(R) && (e(B) || e(G)),
141
141
  "simple-cloze-input--incorrect": e(R) && e(V) && !e(G)
142
- }), f($, "placeholder", t), f($, "aria-labelledby", e(H) ? N : void 0), f($, "aria-label", n), f($, "aria-describedby", e(K) ? P : void 0), $.disabled = T()?.disabled, $.readOnly = e(G), f(ye, "id", P), g(be, e(K));
143
- }, [() => k("placeholder", T()?.language), () => e(H) ? void 0 : k("answerInput", T()?.language)]), l("input", $, ue), d(p, q), n(fe);
142
+ }), f($, "placeholder", t), f($, "aria-labelledby", e(H) ? N : void 0), f($, "aria-label", n), f($, "aria-describedby", e(K) ? P : void 0), $.disabled = w()?.disabled, $.readOnly = e(G), f(be, "id", P), g(xe, e(K));
143
+ }, [() => k("placeholder", w()?.language), () => e(H) ? void 0 : k("answerInput", w()?.language)]), l("input", $, de), d(p, q), n(pe);
144
144
  }
145
- T(["click", "input"]), S(N, {
145
+ w(["click", "input"]), x(N, {
146
146
  model: { type: "Object" },
147
147
  session: { type: "Object" },
148
148
  onSessionChange: {}