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,6 +1,6 @@
1
- import { L as R, a4 as z, a9 as re, ac as ge, ad as oe, a2 as x, a as N, j as c, a5 as D, b as F, aa as we, s as ve } from "./dom-uYx_3K1r.js";
2
- import { v as ye, P as Q, t as ke, _ as xe, A as H, y as Z, e as Ne, M as je, E as Ke, L as Se, R as Le } from "./bitLoaders-DIGwTcpd.js";
3
- const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e) => {
1
+ import { L as R, a4 as E, a9 as re, ac as ge, ad as oe, a2 as x, a as N, j as c, a5 as D, b as P, aa as we, s as ve } from "./dom-uYx_3K1r.js";
2
+ import { e as ye, M as Q, r as ke, i as xe, g as O, C as Z, P as Ne, F as je, B as Ke, U as Se, H as Le } from "./bitLoaders-CxvZkGrY.js";
3
+ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), $ = (e) => {
4
4
  const t = e.mode === "search" ? [e.searchKey] : e.mode === "insert" ? e.insertKeys : [], o = [...e.tree.nodes.map((n) => n.label), ...t].filter(
5
5
  (n) => n.trim() !== ""
6
6
  );
@@ -9,7 +9,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
9
9
  for (let o = 0; o < e.length; o++)
10
10
  for (let n = o + 1; n < e.length; n++)
11
11
  if (L(e[o], e[n], t) === 0) return e[n];
12
- }, X = (e) => e.split(/[,\s]+/).map((t) => t.trim()).filter((t) => t !== ""), Pe = (e) => {
12
+ }, X = (e) => e.split(/[,\s]+/).map((t) => t.trim()).filter((t) => t !== ""), Fe = (e) => {
13
13
  const t = /* @__PURE__ */ new Set();
14
14
  for (const o of e)
15
15
  for (const n of [o.left, o.right])
@@ -17,7 +17,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
17
17
  if (t.has(n)) return n;
18
18
  t.add(n);
19
19
  }
20
- }, Fe = (e, t) => {
20
+ }, Pe = (e, t) => {
21
21
  if (e.length === 0) return t === void 0;
22
22
  if (t === void 0) return !1;
23
23
  const o = new Map(e.map((s) => [s.id, s])), n = /* @__PURE__ */ new Set(), r = [t];
@@ -94,13 +94,13 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
94
94
  n.push(Be(s, r, o));
95
95
  }
96
96
  return n;
97
- }, Ee = (e, t) => {
97
+ }, ze = (e, t) => {
98
98
  const o = [];
99
99
  for (const r of e)
100
100
  r.trim() !== "" && (o.some((s) => L(s, r, t) === 0) || o.push(r));
101
101
  const n = { nodes: [], root: void 0 };
102
102
  return q(n, ne(n, o, t));
103
- }, ze = (e) => {
103
+ }, Ee = (e) => {
104
104
  const t = [];
105
105
  let o = 0;
106
106
  for (; o < e.length; ) {
@@ -121,7 +121,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
121
121
  }, ee = (e) => {
122
122
  const t = e.trim();
123
123
  if (t === "") return { tree: { nodes: [], root: void 0 } };
124
- const o = ze(t);
124
+ const o = Ee(t);
125
125
  let n = 0;
126
126
  const r = [];
127
127
  let s = 0;
@@ -154,7 +154,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
154
154
  return { error: "parseTrailing", vars: { token: i.kind === "key" ? i.value : i.kind } };
155
155
  }
156
156
  return { tree: { nodes: r, root: d } };
157
- }, P = (e) => {
157
+ }, F = (e) => {
158
158
  const t = new Map(e.nodes.map((n) => [n.id, n])), o = (n) => {
159
159
  if (n === void 0) return "";
160
160
  const r = t.get(n), s = r.left !== void 0, a = r.right !== void 0;
@@ -164,7 +164,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
164
164
  return `${r.label} (${d}) (${o(r.right)})`;
165
165
  };
166
166
  return e.root === void 0 ? "" : o(e.root);
167
- }, Ae = (e, t, o = !0) => {
167
+ }, $e = (e, t, o = !0) => {
168
168
  const n = new Map(e.map((u) => [u.id, u])), r = [];
169
169
  let s = 0;
170
170
  const a = (u, b, p, f) => {
@@ -202,7 +202,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
202
202
  for (; o < e.length && o < t.length && e[o] === t[o]; )
203
203
  o += 1;
204
204
  return o;
205
- }, ie = (e, t, o) => e < t.length ? "wrongOrder" : t.length < o.length ? "missesPlaces" : "extraSteps", $e = (e, t) => {
205
+ }, ie = (e, t, o) => e < t.length ? "wrongOrder" : t.length < o.length ? "missesPlaces" : "extraSteps", Ae = (e, t) => {
206
206
  const o = Me(e.tree.nodes, e.tree.root, e.traversal), n = new Set(e.tree.nodes.map((b) => b.id)), r = (t?.sequence ?? []).filter((b) => n.has(b)), s = ae(r, o), a = s === o.length && r.length === o.length, d = r.length === 0 ? "empty" : a ? "correct" : ie(s, r, o), i = o.length, u = e.partialCredit && i > 0 ? { earned: s, possible: i } : { earned: a ? 1 : 0, possible: 1 };
207
207
  return {
208
208
  state: a ? "correct" : "wrong",
@@ -210,8 +210,8 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
210
210
  allowRetry: e.evaluation.enableRetry,
211
211
  detail: { reason: d, correctPrefix: s }
212
212
  };
213
- }, Oe = (e, t) => {
214
- const o = A(e), { path: n, found: r } = Ie(e.tree.nodes, e.tree.root, e.searchKey, o), s = new Set(e.tree.nodes.map((h) => h.id)), a = (t?.sequence ?? []).filter((h) => s.has(h)), d = t?.notFound ?? !1, i = ae(a, n), u = i === n.length && a.length === n.length, b = d === !r, p = u && b;
213
+ }, He = (e, t) => {
214
+ const o = $(e), { path: n, found: r } = Ie(e.tree.nodes, e.tree.root, e.searchKey, o), s = new Set(e.tree.nodes.map((h) => h.id)), a = (t?.sequence ?? []).filter((h) => s.has(h)), d = t?.notFound ?? !1, i = ae(a, n), u = i === n.length && a.length === n.length, b = d === !r, p = u && b;
215
215
  let f;
216
216
  a.length === 0 && !d ? f = "empty" : u ? b ? f = "correct" : f = r ? "saidNotFoundButFound" : "missedNotFound" : f = ie(i, a, n);
217
217
  const m = n.length + (r ? 0 : 1), w = r ? 0 : d ? 1 : 0, v = e.partialCredit && m > 0 ? { earned: i + w, possible: m } : { earned: p ? 1 : 0, possible: 1 };
@@ -221,8 +221,8 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
221
221
  allowRetry: e.evaluation.enableRetry,
222
222
  detail: { reason: f, correctPrefix: i }
223
223
  };
224
- }, He = (e, t) => {
225
- const o = A(e), n = ne(e.tree, e.insertKeys, o), r = t?.placements ?? [], s = e.insertKeys.map((p, f) => {
224
+ }, Oe = (e, t) => {
225
+ const o = $(e), n = ne(e.tree, e.insertKeys, o), r = t?.placements ?? [], s = e.insertKeys.map((p, f) => {
226
226
  if (f >= r.length) return "pending";
227
227
  const m = r[f];
228
228
  return m.parent === n[f].parent && m.side === n[f].side ? "correct" : "wrong";
@@ -241,13 +241,13 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
241
241
  return { state: "unknown", allowRetry: !1 };
242
242
  switch (e.mode) {
243
243
  case "search":
244
- return Oe(e, t);
245
- case "insert":
246
244
  return He(e, t);
245
+ case "insert":
246
+ return Oe(e, t);
247
247
  default:
248
- return $e(e, t);
248
+ return Ae(e, t);
249
249
  }
250
- }, $ = {
250
+ }, A = {
251
251
  en: {
252
252
  name: "Binary tree",
253
253
  description: "A binary tree the learner walks in a traversal order, searches, or grows by inserting keys.",
@@ -343,20 +343,20 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
343
343
  left: x().optional(),
344
344
  right: x().optional()
345
345
  }), qe = R({
346
- nodes: z(De).max(31).default([]),
346
+ nodes: E(De).max(31).default([]),
347
347
  /** Omitted only when `nodes` is empty — "insert" is the only mode that
348
348
  * starts with nothing to insert into. */
349
349
  root: x().optional()
350
- }), We = ["traversal", "search", "insert"], Ve = D(We), le = ["preorder", "inorder", "postorder", "levelorder"], Ge = D(le), Ue = R({
350
+ }), We = ["traversal", "search", "insert"], Ue = D(We), le = ["preorder", "inorder", "postorder", "levelorder"], Ve = D(le), Ge = R({
351
351
  instruction: x().default(""),
352
- mode: Ve.default("traversal"),
352
+ mode: Ue.default("traversal"),
353
353
  /** Only read in "traversal" mode. */
354
- traversal: Ge.default("inorder"),
354
+ traversal: Ve.default("inorder"),
355
355
  tree: qe.default({ nodes: [], root: void 0 }),
356
356
  /** Only read in "search" mode. */
357
357
  searchKey: x().default(""),
358
358
  /** Only read in "insert" mode, inserted in this order. */
359
- insertKeys: z(x()).max(12).default([]),
359
+ insertKeys: E(x()).max(12).default([]),
360
360
  /**
361
361
  * A point per place named in the right order, or per key placed where it
362
362
  * belongs, rather than the whole task passing or failing as one. Off for
@@ -384,7 +384,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
384
384
  }));
385
385
  }
386
386
  });
387
- const u = !d && !i ? Pe(t.nodes) : void 0;
387
+ const u = !d && !i ? Fe(t.nodes) : void 0;
388
388
  u && e.issues.push({
389
389
  code: "custom",
390
390
  input: t.nodes,
@@ -416,7 +416,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
416
416
  message: "The root has to be the one place with no parent."
417
417
  }));
418
418
  }
419
- if (b && !Fe(t.nodes, t.root) && (e.issues.push({
419
+ if (b && !Pe(t.nodes, t.root) && (e.issues.push({
420
420
  code: "custom",
421
421
  input: t.nodes,
422
422
  path: ["tree", "nodes"],
@@ -443,7 +443,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
443
443
  path: ["insertKeys"],
444
444
  message: "Add at least one key to insert."
445
445
  }), (o === "search" || o === "insert") && b && t.root !== void 0) {
446
- const p = A(e.value);
446
+ const p = $(e.value);
447
447
  Re(t.nodes, t.root, p) || e.issues.push({
448
448
  code: "custom",
449
449
  input: t.nodes,
@@ -452,7 +452,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
452
452
  });
453
453
  }
454
454
  if (o === "insert" && r.length > 0) {
455
- const p = A(e.value), f = Ce(r, p);
455
+ const p = $(e.value), f = Ce(r, p);
456
456
  if (f !== void 0)
457
457
  e.issues.push({
458
458
  code: "custom",
@@ -480,11 +480,11 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
480
480
  side: D(["left", "right", "root"])
481
481
  }), lt = R({
482
482
  /** "traversal"/"search": the places tapped, in order. */
483
- sequence: z(x()).default([]),
483
+ sequence: E(x()).default([]),
484
484
  /** "search" only: whether the learner also said the key was not there. */
485
485
  notFound: re().optional(),
486
486
  /** "insert" only: where each key in turn was tapped. */
487
- placements: z(Ye).default([])
487
+ placements: E(Ye).default([])
488
488
  }), Je = (e, t) => e.nodes.find((o) => o.id === t), dt = (e, t) => Je(e, t)?.label || t, Qe = '.bitflow-tree{display:flex;flex-direction:column;gap:var(--bitflow-space-small)}.bitflow-tree-scroll{overflow-x:auto}.bitflow-tree-diagram{display:block;width:100%;min-width:calc(var(--bitflow-tree-columns, 1) * 2.5rem);height:auto;background:var(--bitflow-color-surface);border:1px solid var(--bitflow-color-border);border-radius:var(--bitflow-radius-standard)}.bitflow-tree-edge{stroke:var(--bitflow-color-neutral-400);stroke-width:calc(3 * var(--bitflow-tree-scale, 1))}.bitflow-tree-edge-empty{stroke-dasharray:8 6}.bitflow-tree-node circle{fill:var(--bitflow-color-surface);stroke:var(--bitflow-color-neutral-700);stroke-width:calc(3 * var(--bitflow-tree-scale, 1))}.bitflow-tree-node text{fill:var(--bitflow-color-text);font-family:var(--bitflow-font-family);font-size:calc(28px * var(--bitflow-tree-scale, 1));font-weight:var(--bitflow-font-weight-medium);-webkit-user-select:none;user-select:none}.bitflow-tree-node-live{cursor:pointer}.bitflow-tree-node-chosen circle{fill:var(--bitflow-color-primary-light);stroke:var(--bitflow-color-primary)}.bitflow-tree-node-right circle{fill:var(--bitflow-color-correct-surface);stroke:var(--bitflow-color-correct)}.bitflow-tree-node-wrong circle{fill:var(--bitflow-color-wrong-surface);stroke:var(--bitflow-color-wrong);stroke-dasharray:10 6}.bitflow-tree-node text.bitflow-tree-step{fill:var(--bitflow-color-primary-dark);font-size:calc(22px * var(--bitflow-tree-scale, 1));font-weight:var(--bitflow-font-weight-bold)}.bitflow-tree-node text.bitflow-tree-verdict{font-size:calc(22px * var(--bitflow-tree-scale, 1));font-weight:var(--bitflow-font-weight-bold)}.bitflow-tree-node-right text.bitflow-tree-verdict{fill:var(--bitflow-color-correct)}.bitflow-tree-node-wrong text.bitflow-tree-verdict{fill:var(--bitflow-color-wrong)}.bitflow-tree-slot{fill:transparent;stroke:var(--bitflow-color-neutral-400);stroke-width:calc(2 * var(--bitflow-tree-scale, 1));stroke-dasharray:6 5}.bitflow-tree-slot-live{cursor:pointer;stroke:var(--bitflow-color-primary)}.bitflow-tree-slot-live:hover{fill:var(--bitflow-color-primary-light)}.bitflow-tree-next{margin:0;font-weight:var(--bitflow-font-weight-medium)}.bitflow-tree-chosen{display:flex;flex-wrap:wrap;gap:var(--bitflow-space-xxsmall);margin:0;padding:0;list-style:none;counter-reset:bitflow-tree-step}.bitflow-tree-chip{counter-increment:bitflow-tree-step;padding:var(--bitflow-space-xxsmall) var(--bitflow-space-xsmall);border-radius:var(--bitflow-radius-full);background:var(--bitflow-color-primary-light);color:var(--bitflow-color-primary-dark);font-size:var(--bitflow-font-size-small)}.bitflow-tree-chip:before{content:counter(bitflow-tree-step) ". ";font-weight:var(--bitflow-font-weight-bold)}.bitflow-tree-chip-correct{background:var(--bitflow-color-correct-surface);color:var(--bitflow-color-correct)}.bitflow-tree-chip-wrong{background:var(--bitflow-color-wrong-surface);color:var(--bitflow-color-wrong);text-decoration:line-through}.bitflow-tree-text{font-family:var(--bitflow-font-family-mono)}.bitflow-tree-keys{flex:1 1 12rem;width:auto;min-width:0}', Ze = {
489
489
  en: {
490
490
  instructionLabel: "Instruction",
@@ -571,15 +571,15 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
571
571
  onChange: a,
572
572
  diagramOnly: d
573
573
  }) => {
574
- const i = (l, g) => F($, l, o, g), u = N.useRef(null), b = rt(u), [p, f] = N.useState(""), m = !n && a !== void 0, w = e.mode === "insert", v = t?.sequence ?? [], h = t?.placements ?? [], k = r !== void 0 || s !== void 0, M = w ? q(e.tree, h) : e.tree, j = Ae(M.nodes, M.root, w), W = Xe * (j.depth + 1), O = (l) => ({
574
+ const i = (l, g) => P(A, l, o, g), u = N.useRef(null), b = rt(u), [p, f] = N.useState(""), m = !n && a !== void 0, w = e.mode === "insert", v = t?.sequence ?? [], h = t?.placements ?? [], k = r !== void 0 || s !== void 0, M = w ? q(e.tree, h) : e.tree, j = $e(M.nodes, M.root, w), W = Xe * (j.depth + 1), H = (l) => ({
575
575
  x: l.x * _,
576
576
  y: l.y * W
577
- }), I = new Map(j.nodes.map((l) => [l.id, O(l)])), V = j.nodes.length + j.slots.length, K = Math.min(te * b, 0.42 * _ / Math.max(V, 1)), B = (l) => M.nodes.find((g) => g.id === l)?.label || l, S = w ? e.insertKeys[h.length] : void 0, T = (l) => a?.({
577
+ }), I = new Map(j.nodes.map((l) => [l.id, H(l)])), U = j.nodes.length + j.slots.length, K = Math.min(te * b, 0.42 * _ / Math.max(U, 1)), B = (l) => M.nodes.find((g) => g.id === l)?.label || l, S = w ? e.insertKeys[h.length] : void 0, T = (l) => a?.({
578
578
  sequence: v,
579
579
  placements: h,
580
580
  ...t?.notFound !== void 0 ? { notFound: t.notFound } : {},
581
581
  ...l
582
- }), G = (l) => {
582
+ }), V = (l) => {
583
583
  if (m) {
584
584
  if (v.includes(l)) {
585
585
  f(i("alreadyChosen", { key: B(l) }));
@@ -587,12 +587,12 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
587
587
  }
588
588
  T({ sequence: [...v, l] }), f(i("added", { key: B(l), step: v.length + 1 }));
589
589
  }
590
- }, U = (l) => l.side === "root" ? i("slotRoot") : i(l.side === "left" ? "slotLeft" : "slotRight", {
590
+ }, G = (l) => l.side === "root" ? i("slotRoot") : i(l.side === "left" ? "slotLeft" : "slotRight", {
591
591
  key: B(l.parentId)
592
592
  }), Y = (l) => {
593
593
  !m || S === void 0 || (T({
594
594
  placements: [...h, { key: S, parent: l.parentId, side: l.side }]
595
- }), f(i("placed", { key: S, where: U(l) })));
595
+ }), f(i("placed", { key: S, where: G(l) })));
596
596
  }, ue = () => {
597
597
  m && (w ? T({ placements: h.slice(0, -1) }) : t?.notFound ? T({ notFound: !1 }) : T({ sequence: v.slice(0, -1) }), f(i("undone")));
598
598
  }, fe = () => {
@@ -615,7 +615,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
615
615
  "aria-label": i("diagramLabel"),
616
616
  style: {
617
617
  "--bitflow-tree-scale": Math.min(b, K / te),
618
- "--bitflow-tree-columns": V
618
+ "--bitflow-tree-columns": U
619
619
  },
620
620
  children: [
621
621
  me.map((l) => {
@@ -633,7 +633,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
633
633
  );
634
634
  }),
635
635
  w && j.slots.map((l) => {
636
- const g = O(l), y = l.parentId ? I.get(l.parentId) : void 0;
636
+ const g = H(l), y = l.parentId ? I.get(l.parentId) : void 0;
637
637
  return /* @__PURE__ */ c.jsxs("g", { children: [
638
638
  y && /* @__PURE__ */ c.jsx(
639
639
  "line",
@@ -658,13 +658,13 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
658
658
  ] }, `${l.parentId}-${l.side}`);
659
659
  }),
660
660
  j.nodes.map((l) => {
661
- const g = O(l), y = be(l.id), E = w ? pe(l.id) : y > 0 ? J(y) : void 0, C = ["bitflow-tree-node"];
662
- return y > 0 && C.push("bitflow-tree-node-chosen"), E === "correct" && C.push("bitflow-tree-node-right"), E === "wrong" && C.push("bitflow-tree-node-wrong"), m && !w && C.push("bitflow-tree-node-live"), /* @__PURE__ */ c.jsxs(
661
+ const g = H(l), y = be(l.id), z = w ? pe(l.id) : y > 0 ? J(y) : void 0, C = ["bitflow-tree-node"];
662
+ return y > 0 && C.push("bitflow-tree-node-chosen"), z === "correct" && C.push("bitflow-tree-node-right"), z === "wrong" && C.push("bitflow-tree-node-wrong"), m && !w && C.push("bitflow-tree-node-live"), /* @__PURE__ */ c.jsxs(
663
663
  "g",
664
664
  {
665
665
  className: C.join(" "),
666
666
  transform: `translate(${g.x} ${g.y})`,
667
- onClick: () => !w && G(l.id),
667
+ onClick: () => !w && V(l.id),
668
668
  children: [
669
669
  /* @__PURE__ */ c.jsx("circle", { r: K }),
670
670
  /* @__PURE__ */ c.jsx("text", { dominantBaseline: "central", textAnchor: "middle", children: l.label }),
@@ -678,14 +678,14 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
678
678
  children: y
679
679
  }
680
680
  ),
681
- E && /* @__PURE__ */ c.jsx(
681
+ z && /* @__PURE__ */ c.jsx(
682
682
  "text",
683
683
  {
684
684
  className: "bitflow-tree-verdict",
685
685
  x: -K * 0.9,
686
686
  y: -K * 0.9,
687
687
  textAnchor: "end",
688
- children: E === "correct" ? "✓" : "✗"
688
+ children: z === "correct" ? "✓" : "✗"
689
689
  }
690
690
  )
691
691
  ]
@@ -728,7 +728,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
728
728
  type: "button",
729
729
  className: "bitflow-button bitflow-button-secondary",
730
730
  onClick: () => Y(l),
731
- children: U(l)
731
+ children: G(l)
732
732
  },
733
733
  `${l.parentId}-${l.side}`
734
734
  )) : j.nodes.map((l) => /* @__PURE__ */ c.jsx(
@@ -737,7 +737,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
737
737
  type: "button",
738
738
  className: "bitflow-button bitflow-button-secondary",
739
739
  disabled: v.includes(l.id),
740
- onClick: () => G(l.id),
740
+ onClick: () => V(l.id),
741
741
  children: i("addNode", { key: l.label })
742
742
  },
743
743
  l.id
@@ -807,7 +807,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
807
807
  locale: r,
808
808
  onAnswerChange: s
809
809
  }) => {
810
- const a = (u, b) => F($, u, r, b), d = o?.detail, i = n ? a("howToReadonly") : e.mode === "search" ? a("howToSearch", { key: e.searchKey }) : e.mode === "insert" ? a("howToInsert") : a("howToTraversal", { order: a(ce[e.traversal]) });
810
+ const a = (u, b) => P(A, u, r, b), d = o?.detail, i = n ? a("howToReadonly") : e.mode === "search" ? a("howToSearch", { key: e.searchKey }) : e.mode === "insert" ? a("howToInsert") : a("howToTraversal", { order: a(ce[e.traversal]) });
811
811
  return /* @__PURE__ */ c.jsxs("div", { className: "bitflow-stack", children: [
812
812
  /* @__PURE__ */ c.jsx(Se, { markdown: e.instruction }),
813
813
  /* @__PURE__ */ c.jsx("p", { className: "bitflow-hint", children: i }),
@@ -831,10 +831,10 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
831
831
  onChange: o,
832
832
  errors: n
833
833
  }) => {
834
- const r = (h, k) => F(Ze, h, t, k), s = (h) => o({ ...e, ...h }), [a, d] = N.useState(() => P(e.tree)), [i, u] = N.useState(void 0), [b, p] = N.useState(""), [f, m] = N.useState(() => e.insertKeys.join(", "));
834
+ const r = (h, k) => P(Ze, h, t, k), s = (h) => o({ ...e, ...h }), [a, d] = N.useState(() => F(e.tree)), [i, u] = N.useState(void 0), [b, p] = N.useState(""), [f, m] = N.useState(() => e.insertKeys.join(", "));
835
835
  N.useEffect(() => {
836
836
  const h = ee(a);
837
- "tree" in h && P(h.tree) === P(e.tree) || (d(P(e.tree)), u(void 0));
837
+ "tree" in h && F(h.tree) === F(e.tree) || (d(F(e.tree)), u(void 0));
838
838
  }, [e.tree]);
839
839
  const w = (h) => {
840
840
  d(h);
@@ -845,8 +845,8 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
845
845
  }
846
846
  u(void 0), s({ tree: k.tree });
847
847
  }, v = () => {
848
- const h = X(b), k = Ee(h, h.length > 0 && h.every(se));
849
- d(P(k)), u(void 0), s({ tree: k });
848
+ const h = X(b), k = ze(h, h.length > 0 && h.every(se));
849
+ d(F(k)), u(void 0), s({ tree: k });
850
850
  };
851
851
  return /* @__PURE__ */ c.jsxs("div", { className: "bitflow-stack", children: [
852
852
  /* @__PURE__ */ c.jsx(
@@ -887,7 +887,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
887
887
  {
888
888
  label: r("treeLabel"),
889
889
  hint: r("treeHint"),
890
- error: i ?? xe(n, "tree.nodes") ?? H(n, "tree.root"),
890
+ error: i ?? xe(n, "tree.nodes") ?? O(n, "tree.root"),
891
891
  children: (h) => /* @__PURE__ */ c.jsx(
892
892
  "textarea",
893
893
  {
@@ -939,7 +939,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
939
939
  label: r("searchKeyLabel"),
940
940
  hint: r("searchKeyHint"),
941
941
  value: e.searchKey,
942
- error: H(n, "searchKey"),
942
+ error: O(n, "searchKey"),
943
943
  onChange: (h) => s({ searchKey: h.trim() })
944
944
  }
945
945
  ),
@@ -949,7 +949,7 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
949
949
  label: r("insertKeysLabel"),
950
950
  hint: r("insertKeysHint"),
951
951
  value: f,
952
- error: H(n, "insertKeys"),
952
+ error: O(n, "insertKeys"),
953
953
  onChange: (h) => {
954
954
  m(h), s({ insertKeys: X(h) });
955
955
  }
@@ -979,13 +979,13 @@ const Te = /^[+-]?(?:\d+\.?\d*|\.\d+)$/, se = (e) => Te.test(e.trim()), A = (e)
979
979
  we({
980
980
  type: he,
981
981
  kind: "task",
982
- schema: Ue,
982
+ schema: Ge,
983
983
  evaluate: _e,
984
984
  Task: ot,
985
985
  Form: st,
986
986
  info: (e) => ({
987
- name: F($, "name", e),
988
- description: F($, "description", e)
987
+ name: P(A, "name", e),
988
+ description: P(A, "description", e)
989
989
  }),
990
990
  defaultData: () => ({
991
991
  instruction: "",
@@ -1002,34 +1002,34 @@ Le(he);
1002
1002
  ve("bitflow-styles-task-binary-tree", Qe);
1003
1003
  export {
1004
1004
  lt as AnswerSchema,
1005
- Ue as DataSchema,
1005
+ Ge as DataSchema,
1006
1006
  st as Form,
1007
1007
  We as MODES,
1008
- Ve as ModeSchema,
1008
+ Ue as ModeSchema,
1009
1009
  Ye as PlacementSchema,
1010
1010
  it as REASONS,
1011
1011
  le as TRAVERSAL_KINDS,
1012
1012
  he as TYPE,
1013
1013
  ot as Task,
1014
- Ge as TraversalKindSchema,
1014
+ Ve as TraversalKindSchema,
1015
1015
  De as TreeNodeSchema,
1016
1016
  qe as TreeSchema,
1017
1017
  de as TreeView,
1018
- Ee as buildBstFromKeys,
1018
+ ze as buildBstFromKeys,
1019
1019
  L as compareKeys,
1020
1020
  _e as evaluate,
1021
1021
  ne as expectedPlacements,
1022
1022
  Ze as formMessages,
1023
1023
  Re as isBst,
1024
- A as isNumericMode,
1025
- Ae as layoutTree,
1026
- $ as messages,
1024
+ $ as isNumericMode,
1025
+ $e as layoutTree,
1026
+ A as messages,
1027
1027
  dt as nameOf,
1028
1028
  Je as nodeById,
1029
1029
  X as parseKeyList,
1030
1030
  ee as parseTreeText,
1031
1031
  Ie as searchPath,
1032
1032
  Me as traversalOrder,
1033
- P as treeToText,
1033
+ F as treeToText,
1034
1034
  q as treeWithPlacements
1035
1035
  };