hyperbook 0.113.0 → 0.113.2

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 (56) hide show
  1. package/README.md +18 -3
  2. package/dist/asset-manifest.json +9 -9
  3. package/dist/assets/directive-bitflow/{EditorElement-zyz99U6n.js → EditorElement-CE3Yr86b.js} +155 -155
  4. package/dist/assets/directive-bitflow/{ReportElements-BnX14NtV.js → ReportElements-eYGRtw6N.js} +1 -1
  5. package/dist/assets/directive-bitflow/{bitLoaders-DIGwTcpd.js → bitLoaders-CxvZkGrY.js} +1138 -1073
  6. package/dist/assets/directive-bitflow/editor.js +3 -3
  7. package/dist/assets/directive-bitflow/flow.js +3 -3
  8. package/dist/assets/directive-bitflow/{index-IQHOi2fr.js → index-88c3K20U.js} +31 -31
  9. package/dist/assets/directive-bitflow/{index-Bqf-kixT.js → index-B61LKxr1.js} +45 -45
  10. package/dist/assets/directive-bitflow/{index-CFcRAa3F.js → index-BG0PL-Z6.js} +30 -30
  11. package/dist/assets/directive-bitflow/{index-B3jMTk1o.js → index-BNdpL6Ss.js} +78 -78
  12. package/dist/assets/directive-bitflow/{index-Fq7njn6_.js → index-BO-d4HVC.js} +48 -48
  13. package/dist/assets/directive-bitflow/{index-Bf_NXJjq.js → index-BZhNY0lo.js} +12 -12
  14. package/dist/assets/directive-bitflow/{index-COndsSPW.js → index-BadyFTU5.js} +8 -8
  15. package/dist/assets/directive-bitflow/{index-CvCZVgKv.js → index-BlT1EcFH.js} +34 -34
  16. package/dist/assets/directive-bitflow/{index-CW9iev-_.js → index-BuQ-K_tR.js} +7 -7
  17. package/dist/assets/directive-bitflow/{index-DjWNEPDL.js → index-Bw0pL0hW.js} +28 -28
  18. package/dist/assets/directive-bitflow/{index-BQ5h4nDN.js → index-BwBVUdJ9.js} +94 -94
  19. package/dist/assets/directive-bitflow/{index-CjscG0z6.js → index-BydYlLy4.js} +73 -73
  20. package/dist/assets/directive-bitflow/{index-BpG316Ls.js → index-C7RJxxAx.js} +63 -63
  21. package/dist/assets/directive-bitflow/{index-eN2S_MLj.js → index-CERSJ9uS.js} +70 -70
  22. package/dist/assets/directive-bitflow/{index-DtsDy2By.js → index-CLHtOGrW.js} +11 -11
  23. package/dist/assets/directive-bitflow/{index-Bf_FQRbK.js → index-CWe2GjBK.js} +14 -14
  24. package/dist/assets/directive-bitflow/{index-CzdZQibq.js → index-CfKpkSVC.js} +72 -72
  25. package/dist/assets/directive-bitflow/{index-Fr7yl4Vn.js → index-CjKhq7gY.js} +23 -23
  26. package/dist/assets/directive-bitflow/{index-DoKlIgCD.js → index-Cm4w1Zyc.js} +38 -38
  27. package/dist/assets/directive-bitflow/{index-D5yZNeIg.js → index-D0U3nepG.js} +52 -52
  28. package/dist/assets/directive-bitflow/{index-C5czXkRd.js → index-D4PdXMcj.js} +33 -33
  29. package/dist/assets/directive-bitflow/{index-BLcJNyog.js → index-D9LOuqr2.js} +99 -99
  30. package/dist/assets/directive-bitflow/{index-BIJ7VfD2.js → index-DIb3CXwC.js} +42 -42
  31. package/dist/assets/directive-bitflow/{index-CZyaFdD2.js → index-DQP0cUsP.js} +70 -70
  32. package/dist/assets/directive-bitflow/{index-ChgzyMHe.js → index-DUOrQfVe.js} +27 -27
  33. package/dist/assets/directive-bitflow/{index-kRpwcprB.js → index-DW3cUBvZ.js} +1 -1
  34. package/dist/assets/directive-bitflow/{index-C_ZTSeqv.js → index-DYWo0PUv.js} +24 -24
  35. package/dist/assets/directive-bitflow/{index-xapm2BQE.js → index-D_QhyFcx.js} +101 -91
  36. package/dist/assets/directive-bitflow/{index-BdBBCZSy.js → index-Dn5hHVuT.js} +226 -193
  37. package/dist/assets/directive-bitflow/{index-D7m-hJZ9.js → index-DruC5d43.js} +69 -69
  38. package/dist/assets/directive-bitflow/{index-e_8twLaN.js → index-EKIgFddO.js} +105 -105
  39. package/dist/assets/directive-bitflow/{index-8jTO-NJA.js → index-HXNGIC7K.js} +70 -70
  40. package/dist/assets/directive-bitflow/{index-DnVYIuen.js → index-ISbOe239.js} +42 -42
  41. package/dist/assets/directive-bitflow/{index-cnRM_JDB.js → index-IsMJtrUT.js} +31 -31
  42. package/dist/assets/directive-bitflow/{index-B7Z6Q-PQ.js → index-TUXuIR22.js} +6 -6
  43. package/dist/assets/directive-bitflow/{index-CK1UMcfT.js → index-WbE9UOFa.js} +24 -24
  44. package/dist/assets/directive-bitflow/{index-YPMWh-1B.js → index-d5ebPDeY.js} +13 -13
  45. package/dist/assets/directive-bitflow/{index-NyNuXp4C.js → index-ledofrbo.js} +33 -33
  46. package/dist/assets/directive-bitflow/{index-BseSaQlX.js → index-oNmOArKu.js} +1 -1
  47. package/dist/assets/directive-bitflow/{index-ivI25bnR.js → index-rp4UTV85.js} +84 -84
  48. package/dist/assets/directive-bitflow/{index-XxGfBwJe.js → index-xTX3CXJW.js} +23 -23
  49. package/dist/assets/directive-bitflow/index.js +6 -6
  50. package/dist/assets/directive-bitflow/katex-DSLAjWZH-CHGN3Pr6.js +11314 -0
  51. package/dist/assets/directive-bitflow/katex-Dv-tcU2S-Dv-tcU2S.js +4 -0
  52. package/dist/assets/directive-bitflow/report.js +1 -1
  53. package/dist/assets/directive-bitflow/{shareableReport-ArQU1XjG.js → shareableReport-vjEU4OvA.js} +2 -2
  54. package/dist/index.js +6351 -3340
  55. package/dist/schemas/hyperbook.schema.json +4 -4
  56. package/package.json +5 -5
@@ -1,8 +1,8 @@
1
- import { L as M, a9 as A, a4 as F, a as g, j as a, ac as q, ad as I, P as w, a2 as H, a5 as G, b as j, aa as U, s as V } from "./dom-uYx_3K1r.js";
2
- import { s as _, v as J, A as $, e as E, t as T, P as Q, M as ee, E as te, L as ae, R as se } from "./bitLoaders-DIGwTcpd.js";
3
- const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-space-xsmall)}.bitflow-mouse-touch-notice.bitflow-alert-warning{display:none}@media(pointer:coarse){.bitflow-mouse-touch-notice.bitflow-alert-warning{display:flex}}.bitflow-mouse-area{position:relative;width:100%;overflow:hidden;background:var(--bitflow-color-neutral-100);border:var(--bitflow-border-width) solid var(--bitflow-color-border);border-radius:var(--bitflow-radius-standard);-webkit-user-select:none;user-select:none;touch-action:none;cursor:crosshair}.bitflow-mouse-target{position:absolute;transform:translate(-50%,-50%);border-radius:var(--bitflow-radius-full);background:var(--bitflow-color-primary)}.bitflow-mouse-target-past{background:none;border:var(--bitflow-border-width) dashed var(--bitflow-color-neutral-400)}.bitflow-mouse-target-editing{display:flex;align-items:center;justify-content:center;font-size:var(--bitflow-font-size-small);font-weight:var(--bitflow-font-weight-bold);color:var(--bitflow-color-on-primary);cursor:grab}.bitflow-mouse-area-editing{cursor:copy}.bitflow-mouse-mark{position:absolute;width:.75rem;height:.75rem;transform:translate(-50%,-50%);border-radius:var(--bitflow-radius-full);border:2px solid var(--bitflow-color-white)}.bitflow-mouse-mark-hit{background:var(--bitflow-color-correct)}.bitflow-mouse-mark-miss{background:var(--bitflow-color-wrong)}.bitflow-mouse-rounds{width:100%;border-collapse:collapse;font-size:var(--bitflow-font-size-small)}.bitflow-mouse-rounds th,.bitflow-mouse-rounds td{padding:var(--bitflow-space-xxsmall);text-align:start;border-bottom:var(--bitflow-border-width) solid var(--bitflow-color-border)}.bitflow-mouse-rounds th{color:var(--bitflow-color-text-muted);font-weight:var(--bitflow-font-weight-medium)}", ne = M({
1
+ import { L as M, a9 as H, a4 as E, a as g, j as a, ac as q, ad as I, P as w, a2 as A, a5 as G, b as j, aa as U, s as V } from "./dom-uYx_3K1r.js";
2
+ import { y as _, e as J, g as P, P as $, r as T, M as Q, F as ee, B as te, U as ae, H as se } from "./bitLoaders-CxvZkGrY.js";
3
+ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-space-small)}.bitflow-mouse-touch-notice.bitflow-alert-warning{display:none}@media(pointer:coarse){.bitflow-mouse-touch-notice.bitflow-alert-warning{display:flex}}.bitflow-mouse-area{position:relative;width:100%;overflow:hidden;background:var(--bitflow-color-neutral-100);border:var(--bitflow-border-width) solid var(--bitflow-color-border);border-radius:var(--bitflow-radius-standard);-webkit-user-select:none;user-select:none;touch-action:none;cursor:crosshair}.bitflow-mouse-target{position:absolute;transform:translate(-50%,-50%);border-radius:var(--bitflow-radius-full);background:var(--bitflow-color-primary)}.bitflow-mouse-target-past{background:none;border:var(--bitflow-border-width) dashed var(--bitflow-color-neutral-400)}.bitflow-mouse-target-editing{display:flex;align-items:center;justify-content:center;font-size:var(--bitflow-font-size-small);font-weight:var(--bitflow-font-weight-bold);color:var(--bitflow-color-on-primary);cursor:grab}.bitflow-mouse-area-editing{cursor:copy}.bitflow-mouse-mark{position:absolute;width:.75rem;height:.75rem;transform:translate(-50%,-50%);border-radius:var(--bitflow-radius-full);border:2px solid var(--bitflow-color-white)}.bitflow-mouse-mark-hit{background:var(--bitflow-color-correct)}.bitflow-mouse-mark-miss{background:var(--bitflow-color-wrong)}.bitflow-mouse-rounds{width:100%;border-collapse:collapse;font-size:var(--bitflow-font-size-small)}.bitflow-mouse-rounds th,.bitflow-mouse-rounds td{padding:var(--bitflow-space-xxsmall);text-align:start;border-bottom:var(--bitflow-border-width) solid var(--bitflow-color-border)}.bitflow-mouse-rounds th{color:var(--bitflow-color-text-muted);font-weight:var(--bitflow-font-weight-medium)}", ne = M({
4
4
  /** Stable across edits, so an answer keeps pointing at the same target. */
5
- id: H().min(1),
5
+ id: A().min(1),
6
6
  /** The centre, as a fraction of the play area, so it lands the same on any screen. */
7
7
  x: w().min(0).max(1).default(0.5),
8
8
  y: w().min(0).max(1).default(0.5),
@@ -13,8 +13,8 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
13
13
  */
14
14
  radius: w().min(0.01).max(0.5).default(0.06)
15
15
  }), oe = G(["hits", "hitsAndSpeed"]), re = M({
16
- instruction: H().default(""),
17
- targets: F(ne).default([]),
16
+ instruction: A().default(""),
17
+ targets: E(ne).default([]),
18
18
  /** How tall the play area is, as a fraction of its width. */
19
19
  aspectRatio: w().min(0.2).max(3).default(0.6),
20
20
  scoring: oe.default("hits"),
@@ -29,7 +29,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
29
29
  * device. On by default, because the alternative is asking someone to
30
30
  * fail at something they were never able to do.
31
31
  */
32
- allowOptOut: A().default(!0),
32
+ allowOptOut: H().default(!0),
33
33
  evaluation: q.default(I)
34
34
  }).check((e) => {
35
35
  const { targets: s } = e.value, n = s.map((r) => r.id);
@@ -53,11 +53,11 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
53
53
  });
54
54
  }));
55
55
  }), le = M({
56
- targetId: H().min(1),
56
+ targetId: A().min(1),
57
57
  /** Where the click landed, in the same fractions the targets use. */
58
58
  x: w(),
59
59
  y: w(),
60
- hit: A(),
60
+ hit: H(),
61
61
  /** Milliseconds from the target appearing to the click, measured monotonically. */
62
62
  ms: w().min(0)
63
63
  }), ye = M({
@@ -69,9 +69,9 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
69
69
  * coordinates, no pointer type, no device or input trace — the task measures
70
70
  * a person's aim, and has no business describing their hardware.
71
71
  */
72
- rounds: F(le).default([]),
72
+ rounds: E(le).default([]),
73
73
  /** Set when the learner stood down from a task that needs a pointing device. */
74
- optedOut: A().default(!1)
74
+ optedOut: H().default(!1)
75
75
  }), ce = (e, s, n) => Math.hypot(s.x - e.x, (s.y - e.y) * n), de = (e, s) => s > 0 ? Math.log2(2 * e / s + 1) : 0, Y = (e, s) => {
76
76
  const n = new Map(e.targets.map((i) => [i.id, i]));
77
77
  let r = { x: 0.5, y: 0.5 };
@@ -189,16 +189,16 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
189
189
  readonly: i,
190
190
  onChange: c
191
191
  }) => {
192
- const o = (u, h) => j(O, u, r, h), m = g.useRef(null), p = g.useRef(0), [v, y] = g.useState(!1), [R, k] = g.useState(""), b = s.rounds, x = b.length >= e.targets.length, f = e.targets[b.length], t = i || s.optedOut || x, l = g.useRef(!1);
192
+ const o = (u, h) => j(O, u, r, h), m = g.useRef(null), p = g.useRef(0), [v, y] = g.useState(!1), [N, k] = g.useState(""), b = s.rounds, x = b.length >= e.targets.length, f = e.targets[b.length], t = i || s.optedOut || x, l = g.useRef(!1);
193
193
  g.useEffect(() => {
194
194
  const u = i === !0;
195
195
  l.current && !u && x && !s.optedOut && (y(!1), c({ rounds: [], optedOut: !1 })), l.current = u;
196
196
  });
197
197
  const d = () => {
198
198
  y(!0), p.current = performance.now(), k(o("started", { total: e.targets.length }));
199
- }, N = () => {
199
+ }, R = () => {
200
200
  c({ rounds: [], optedOut: !0 }), k(o("stoodDown"));
201
- }, X = (u) => {
201
+ }, W = (u) => {
202
202
  if (t || !v || !f) return;
203
203
  const h = m.current?.getBoundingClientRect();
204
204
  if (!h || h.width === 0) return;
@@ -220,13 +220,13 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
220
220
  };
221
221
  if (s.optedOut)
222
222
  return /* @__PURE__ */ a.jsx("div", { className: "bitflow-mouse", children: /* @__PURE__ */ a.jsx("p", { className: "bitflow-hint", children: o("stoodDownNotice") }) });
223
- const B = (u) => /* @__PURE__ */ a.jsx(
223
+ const X = (u) => /* @__PURE__ */ a.jsx(
224
224
  "div",
225
225
  {
226
226
  ref: m,
227
227
  className: "bitflow-mouse-area",
228
228
  style: { aspectRatio: `1 / ${e.aspectRatio}` },
229
- onPointerDown: X,
229
+ onPointerDown: W,
230
230
  children: u
231
231
  }
232
232
  );
@@ -244,7 +244,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
244
244
  {
245
245
  type: "button",
246
246
  className: "bitflow-button bitflow-button-secondary",
247
- onClick: N,
247
+ onClick: R,
248
248
  children: o("optOut")
249
249
  }
250
250
  )
@@ -252,13 +252,13 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
252
252
  e.allowOptOut && /* @__PURE__ */ a.jsx("p", { className: "bitflow-hint", children: o("optOutHint") })
253
253
  ] }) : /* @__PURE__ */ a.jsxs("div", { className: "bitflow-mouse", children: [
254
254
  /* @__PURE__ */ a.jsx("p", { className: "bitflow-hint", children: t ? o("allDone", { total: e.targets.length }) : o("progress", { round: b.length + 1, total: e.targets.length }) }),
255
- B(
255
+ X(
256
256
  /* @__PURE__ */ a.jsxs(a.Fragment, { children: [
257
257
  !t && f && /* @__PURE__ */ a.jsx(
258
258
  "span",
259
259
  {
260
260
  className: "bitflow-mouse-target",
261
- style: P(f, e),
261
+ style: F(f, e),
262
262
  "aria-hidden": "true"
263
263
  }
264
264
  ),
@@ -275,7 +275,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
275
275
  "span",
276
276
  {
277
277
  className: "bitflow-mouse-target bitflow-mouse-target-past",
278
- style: P(u, e),
278
+ style: F(u, e),
279
279
  "aria-hidden": "true"
280
280
  },
281
281
  u.id
@@ -297,9 +297,9 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
297
297
  /* @__PURE__ */ a.jsx("td", { children: u.difficulty.toFixed(2) })
298
298
  ] }, `${u.targetId}-${h}`)) })
299
299
  ] }),
300
- /* @__PURE__ */ a.jsx("div", { className: "bitflow-visually-hidden", role: "status", "aria-live": "polite", children: R })
300
+ /* @__PURE__ */ a.jsx("div", { className: "bitflow-visually-hidden", role: "status", "aria-live": "polite", children: N })
301
301
  ] });
302
- }, P = (e, s) => {
302
+ }, F = (e, s) => {
303
303
  const n = e.radius * Math.min(1, s.aspectRatio);
304
304
  return {
305
305
  left: `${e.x * 100}%`,
@@ -398,7 +398,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
398
398
  targets: e.targets.map(
399
399
  (d) => d.id === t ? { ...d, ...l } : d
400
400
  )
401
- }), R = (t, l) => {
401
+ }), N = (t, l) => {
402
402
  t.button === 0 && (t.stopPropagation(), m.current = { id: l, moved: !1, fromX: t.clientX, fromY: t.clientY }, p());
403
403
  }, k = (t) => {
404
404
  const l = m.current;
@@ -446,7 +446,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
446
446
  /* @__PURE__ */ a.jsxs("fieldset", { className: "bitflow-field", children: [
447
447
  /* @__PURE__ */ a.jsx("legend", { className: "bitflow-label", children: i("targetsLabel") }),
448
448
  /* @__PURE__ */ a.jsx("span", { className: "bitflow-hint", children: i("targetsHint") }),
449
- $(r, "targets") && /* @__PURE__ */ a.jsx("span", { className: "bitflow-field-error", role: "alert", children: $(r, "targets") }),
449
+ P(r, "targets") && /* @__PURE__ */ a.jsx("span", { className: "bitflow-field-error", role: "alert", children: P(r, "targets") }),
450
450
  /* @__PURE__ */ a.jsx(
451
451
  "div",
452
452
  {
@@ -464,7 +464,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
464
464
  width: `${t.radius * Math.min(1, e.aspectRatio) * 200}%`,
465
465
  aspectRatio: "1"
466
466
  },
467
- onPointerDown: (d) => R(d, t.id),
467
+ onPointerDown: (d) => N(d, t.id),
468
468
  children: l + 1
469
469
  },
470
470
  t.id
@@ -472,7 +472,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
472
472
  }
473
473
  ),
474
474
  e.targets.length === 0 ? /* @__PURE__ */ a.jsx("p", { className: "bitflow-text-muted", children: i("noTargets") }) : e.targets.map((t, l) => /* @__PURE__ */ a.jsx("div", { className: "bitflow-rule", children: /* @__PURE__ */ a.jsxs(
475
- E,
475
+ $,
476
476
  {
477
477
  summary: i("targetAt", {
478
478
  number: l + 1,
@@ -491,8 +491,8 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
491
491
  max: 25,
492
492
  step: 1,
493
493
  value: Math.round(t.radius * 100),
494
- onChange: (N) => y(t.id, {
495
- radius: Number(N.target.value) / 100
494
+ onChange: (R) => y(t.id, {
495
+ radius: Number(R.target.value) / 100
496
496
  })
497
497
  }
498
498
  ) }),
@@ -511,7 +511,7 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
511
511
  }
512
512
  ) }, t.id))
513
513
  ] }),
514
- /* @__PURE__ */ a.jsxs(E, { summary: i("advanced"), children: [
514
+ /* @__PURE__ */ a.jsxs($, { summary: i("advanced"), children: [
515
515
  /* @__PURE__ */ a.jsx(T, { label: i("aspectLabel"), hint: i("aspectHint"), children: (t) => /* @__PURE__ */ a.jsx(
516
516
  "input",
517
517
  {
@@ -575,9 +575,9 @@ const ie = ".bitflow-mouse{display:flex;flex-direction:column;gap:var(--bitflow-
575
575
  )
576
576
  ] })
577
577
  ] });
578
- }, W = "task-mouse-accuracy";
578
+ }, B = "task-mouse-accuracy";
579
579
  U({
580
- type: W,
580
+ type: B,
581
581
  kind: "task",
582
582
  schema: re,
583
583
  evaluate: me,
@@ -597,7 +597,7 @@ U({
597
597
  evaluation: I()
598
598
  })
599
599
  });
600
- se(W);
600
+ se(B);
601
601
  V("bitflow-styles-task-mouse-accuracy", ie);
602
602
  export {
603
603
  ye as AnswerSchema,
@@ -606,7 +606,7 @@ export {
606
606
  pe as Form,
607
607
  le as RoundSchema,
608
608
  oe as ScoringSchema,
609
- W as TYPE,
609
+ B as TYPE,
610
610
  ne as TargetSchema,
611
611
  be as Task,
612
612
  ce as distanceBetween,