@vue-skuilder/common-ui 0.2.30 → 0.2.31

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.
@@ -1,8 +1,8 @@
1
1
  import { Fragment as e, computed as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createTextVNode as o, createVNode as s, defineComponent as c, nextTick as l, normalizeClass as u, normalizeStyle as d, onMounted as f, openBlock as p, ref as m, renderList as h, resolveComponent as g, shallowRef as _, toDisplayString as v, unref as y, watch as b, withCtx as x, withKeys as S } from "vue";
2
- import { SESSION_FLAGS as C, cardDossiers as w, dumpFileName as T, eloLedger as E, fetchLearnerDump as D, fmtAnswer as O, fmtDelta as k, fmtDuration as A, fromDump as j, isSkillTag as M, parseLearnerDump as N, pipelineRunStats as P, recordPerformance as F, regulatorText as I, runText as L, scoredTagDeltas as R, servedTags as z, sessionDetail as B, sessionText as V, shortTag as H, summarizeSessions as U } from "@vue-skuilder/db/diagnostics";
3
- import { PIPELINE_STAGES as W, planPipeline as ee } from "@vue-skuilder/db";
2
+ import { SESSION_FLAGS as C, cardDossiers as w, dumpFileName as T, eloLedger as E, fetchLearnerDump as D, fmtAnswer as O, fmtDelta as k, fmtDuration as A, fmtScore as j, fromDump as M, isSkillTag as N, parseLearnerDump as P, pipelineRunStats as F, recordPerformance as I, regulatorText as L, runCardSource as R, runText as ee, scoredTagDeltas as te, selectedBySource as z, servedTags as B, sessionDetail as V, sessionText as ne, shortTag as H, summarizeSessions as re } from "@vue-skuilder/db/diagnostics";
3
+ import { PIPELINE_STAGES as U, planPipeline as ie } from "@vue-skuilder/db";
4
4
  //#region \0rolldown/runtime.js
5
- var te = Object.defineProperty, __name = (e, t) => te(e, "name", {
5
+ var ae = Object.defineProperty, __name = (e, t) => ae(e, "name", {
6
6
  value: t,
7
7
  configurable: !0
8
8
  });
@@ -14,7 +14,7 @@ function useLearnerDataset() {
14
14
  n.value = !0, r.value = null;
15
15
  try {
16
16
  let n = await i();
17
- t.value = j(n, a), e.value = n;
17
+ t.value = M(n, a), e.value = n;
18
18
  } catch (e) {
19
19
  r.value = e instanceof Error ? e.message : String(e);
20
20
  } finally {
@@ -28,7 +28,7 @@ function useLearnerDataset() {
28
28
  }), e.courseId);
29
29
  }
30
30
  function loadFromFile(e, t) {
31
- return load(async () => N(await e.text()), t);
31
+ return load(async () => P(await e.text()), t);
32
32
  }
33
33
  return {
34
34
  dump: e,
@@ -45,10 +45,10 @@ function downloadLearnerDump(e) {
45
45
  }
46
46
  //#endregion
47
47
  //#region src/admin/components/LearnerDatasetSource.vue?vue&type=script&setup=true&lang.ts
48
- var ne = { class: "d-flex flex-wrap align-center ga-2" }, re = {
48
+ var oe = { class: "d-flex flex-wrap align-center ga-2" }, se = {
49
49
  key: 1,
50
50
  class: "d-flex flex-wrap align-center ga-2 mt-3"
51
- }, ie = /* @__PURE__ */ c({
51
+ }, ce = /* @__PURE__ */ c({
52
52
  __name: "LearnerDatasetSource",
53
53
  props: {
54
54
  couchUrl: {},
@@ -82,7 +82,7 @@ var ne = { class: "d-flex flex-wrap align-center ga-2" }, re = {
82
82
  return p(), n(b, { variant: "outlined" }, {
83
83
  default: x(() => [s(m, null, {
84
84
  default: x(() => [
85
- a("div", ne, [
85
+ a("div", oe, [
86
86
  s(l, {
87
87
  modelValue: D.value,
88
88
  "onUpdate:modelValue": c[0] || (c[0] = (e) => D.value = e),
@@ -130,7 +130,7 @@ var ne = { class: "d-flex flex-wrap align-center ga-2" }, re = {
130
130
  default: x(() => [o(v(y(w)), 1)]),
131
131
  _: 1
132
132
  })) : r("", !0),
133
- y(_) && y(h) ? (p(), i("div", re, [
133
+ y(_) && y(h) ? (p(), i("div", se, [
134
134
  a("span", null, [
135
135
  a("strong", null, v(y(_).username), 1),
136
136
  o(" · " + v(y(_).sessions.length) + " sessions ", 1),
@@ -156,7 +156,7 @@ var ne = { class: "d-flex flex-wrap align-center ga-2" }, re = {
156
156
  });
157
157
  };
158
158
  }
159
- }), G = {
159
+ }), W = {
160
160
  churned: {
161
161
  icon: "mdi-autorenew",
162
162
  color: "warning"
@@ -218,22 +218,22 @@ function useCopy() {
218
218
  }
219
219
  //#endregion
220
220
  //#region src/admin/components/CardDossierDetail.vue?vue&type=script&setup=true&lang.ts
221
- var ae = {
221
+ var G = {
222
222
  key: 0,
223
223
  class: "text-caption mb-2"
224
- }, oe = { class: "text-medium-emphasis" }, se = { class: "d-flex flex-wrap mb-2 ga-1" }, ce = {
224
+ }, le = { class: "text-medium-emphasis" }, ue = { class: "d-flex flex-wrap mb-2 ga-1" }, de = {
225
225
  key: 0,
226
226
  class: "text-caption text-disabled"
227
- }, le = { class: "text-caption text-medium-emphasis mb-2" }, ue = {
227
+ }, fe = { class: "text-caption text-medium-emphasis mb-2" }, pe = {
228
228
  key: 0,
229
229
  class: "text-error"
230
- }, de = { class: "text-no-wrap" }, fe = {
230
+ }, me = { class: "text-no-wrap" }, he = {
231
231
  key: 2,
232
232
  class: "text-disabled"
233
- }, pe = {
233
+ }, ge = {
234
234
  class: "text-truncate",
235
235
  style: { "max-width": "200px" }
236
- }, me = /* @__PURE__ */ c({
236
+ }, _e = /* @__PURE__ */ c({
237
237
  __name: "CardDossierDetail",
238
238
  props: {
239
239
  dossier: {},
@@ -241,7 +241,7 @@ var ae = {
241
241
  },
242
242
  setup(t) {
243
243
  function perf(e) {
244
- let t = F(e);
244
+ let t = I(e);
245
245
  return t === null ? "—" : t.toFixed(2);
246
246
  }
247
247
  function fmtInterval(e) {
@@ -250,20 +250,20 @@ var ae = {
250
250
  return (t, c) => {
251
251
  let l = g("v-chip"), d = g("v-icon"), f = g("v-table");
252
252
  return p(), i("div", null, [
253
- t.dossier.card && Object.keys(t.dossier.card.data).length ? (p(), i("div", ae, [(p(!0), i(e, null, h(t.dossier.card.data, (e, t) => (p(), i("span", {
253
+ t.dossier.card && Object.keys(t.dossier.card.data).length ? (p(), i("div", G, [(p(!0), i(e, null, h(t.dossier.card.data, (e, t) => (p(), i("span", {
254
254
  key: t,
255
255
  class: "mr-3"
256
- }, [a("span", oe, v(t) + ":", 1), o(" " + v(y(O)(e, 60)), 1)]))), 128))])) : r("", !0),
257
- a("div", se, [(p(!0), i(e, null, h(t.dossier.card?.tags ?? [], (e) => (p(), n(l, {
256
+ }, [a("span", le, v(t) + ":", 1), o(" " + v(y(O)(e, 60)), 1)]))), 128))])) : r("", !0),
257
+ a("div", ue, [(p(!0), i(e, null, h(t.dossier.card?.tags ?? [], (e) => (p(), n(l, {
258
258
  key: e,
259
259
  size: "x-small",
260
260
  variant: "outlined",
261
- color: y(M)(t.interpreters, e) ? "primary" : void 0
261
+ color: y(N)(t.interpreters, e) ? "primary" : void 0
262
262
  }, {
263
263
  default: x(() => [o(v(e), 1)]),
264
264
  _: 2
265
- }, 1032, ["color"]))), 128)), t.dossier.card ? r("", !0) : (p(), i("span", ce, "no course data in this dataset"))]),
266
- a("div", le, [o(" lapses " + v(t.dossier.lapses) + " · streak " + v(t.dossier.streak) + " · best interval " + v(fmtInterval(t.dossier.bestIntervalSeconds)) + " · ", 1), t.dossier.pendingReview ? (p(), i(e, { key: 0 }, [o(" next review " + v(y(fmtTime)(t.dossier.pendingReview.reviewTime)) + " ", 1), t.dossier.pendingReview.overdue ? (p(), i("span", ue, "(overdue)")) : r("", !0)], 64)) : (p(), i(e, { key: 1 }, [o("no review scheduled")], 64))]),
265
+ }, 1032, ["color"]))), 128)), t.dossier.card ? r("", !0) : (p(), i("span", de, "no course data in this dataset"))]),
266
+ a("div", fe, [o(" lapses " + v(t.dossier.lapses) + " · streak " + v(t.dossier.streak) + " · best interval " + v(fmtInterval(t.dossier.bestIntervalSeconds)) + " · ", 1), t.dossier.pendingReview ? (p(), i(e, { key: 0 }, [o(" next review " + v(y(fmtTime)(t.dossier.pendingReview.reviewTime)) + " ", 1), t.dossier.pendingReview.overdue ? (p(), i("span", pe, "(overdue)")) : r("", !0)], 64)) : (p(), i(e, { key: 1 }, [o("no review scheduled")], 64))]),
267
267
  s(f, {
268
268
  density: "compact",
269
269
  class: "sk-record-table"
@@ -281,7 +281,7 @@ var ae = {
281
281
  class: u(e.isCorrect === !1 ? "sk-fail-row" : "")
282
282
  }, [
283
283
  a("td", null, v(t + 1), 1),
284
- a("td", de, v(y(fmtTime)(e.timeStamp)), 1),
284
+ a("td", me, v(y(fmtTime)(e.timeStamp)), 1),
285
285
  a("td", null, [e.isCorrect === !0 ? (p(), n(d, {
286
286
  key: 0,
287
287
  size: "small",
@@ -296,11 +296,11 @@ var ae = {
296
296
  }, {
297
297
  default: x(() => c[1] || (c[1] = [o("mdi-close")])),
298
298
  _: 1
299
- })) : (p(), i("span", fe, "—"))]),
299
+ })) : (p(), i("span", he, "—"))]),
300
300
  a("td", null, v(perf(e)), 1),
301
301
  a("td", null, v(e.priorAttemps ?? "—"), 1),
302
302
  a("td", null, v(((e.timeSpent ?? 0) / 1e3).toFixed(1)) + "s", 1),
303
- a("td", pe, v(y(O)(e.userAnswer)), 1)
303
+ a("td", ge, v(y(O)(e.userAnswer)), 1)
304
304
  ], 2))), 128))])]),
305
305
  _: 1
306
306
  })
@@ -311,13 +311,13 @@ var ae = {
311
311
  let n = e.__vccOpts || e;
312
312
  for (let [e, r] of t) n[e] = r;
313
313
  return n;
314
- }, "default"), q = /* @__PURE__ */ K(me, [["__scopeId", "data-v-76b0a622"]]), he = { class: "text-caption text-medium-emphasis mb-4" }, ge = { class: "text-h6" }, _e = { class: "text-caption" }, ve = { class: "d-flex align-center flex-wrap mb-3 ga-3" }, ye = {
314
+ }, "default"), q = /* @__PURE__ */ K(_e, [["__scopeId", "data-v-76b0a622"]]), ve = { class: "text-caption text-medium-emphasis mb-4" }, ye = { class: "text-h6" }, be = { class: "text-caption" }, xe = { class: "d-flex align-center flex-wrap mb-3 ga-3" }, Se = {
315
315
  class: "d-flex align-center flex-wrap ga-2",
316
316
  style: { width: "100%" }
317
- }, be = { class: "text-body-2 font-weight-medium" }, xe = { class: "text-caption text-medium-emphasis" }, Se = {
317
+ }, Ce = { class: "text-body-2 font-weight-medium" }, we = { class: "text-caption text-medium-emphasis" }, Te = {
318
318
  key: 2,
319
319
  class: "text-caption"
320
- }, Ce = {
320
+ }, Ee = {
321
321
  key: 0,
322
322
  class: "ml-1 text-disabled"
323
323
  }, J = /* @__PURE__ */ K(/* @__PURE__ */ c({
@@ -384,7 +384,7 @@ var ae = {
384
384
  return b(() => d.focus, (e) => void applyFocus(e), { immediate: !0 }), (t, c) => {
385
385
  let l = g("v-icon"), d = g("v-card"), m = g("v-col"), b = g("v-row"), w = g("v-btn"), k = g("v-btn-toggle"), j = g("v-text-field"), M = g("v-alert"), N = g("v-spacer"), P = g("v-chip"), F = g("v-expansion-panel-title"), I = g("v-expansion-panel-text"), L = g("v-expansion-panel"), R = g("v-expansion-panels");
386
386
  return p(), i("div", null, [
387
- a("p", he, [
387
+ a("p", ve, [
388
388
  c[5] || (c[5] = o(" Every card the learner has met, most painful first (time sunk × failures), with its pending review and current card ELO. ")),
389
389
  s(l, {
390
390
  size: "x-small",
@@ -418,14 +418,14 @@ var ae = {
418
418
  color: e.color,
419
419
  class: "pa-2 text-center"
420
420
  }, {
421
- default: x(() => [a("div", ge, v(e.value), 1), a("div", _e, v(e.label), 1)]),
421
+ default: x(() => [a("div", ye, v(e.value), 1), a("div", be, v(e.label), 1)]),
422
422
  _: 2
423
423
  }, 1032, ["color"])]),
424
424
  _: 2
425
425
  }, 1024))), 128))]),
426
426
  _: 1
427
427
  }),
428
- a("div", ve, [s(k, {
428
+ a("div", xe, [s(k, {
429
429
  modelValue: _.value,
430
430
  "onUpdate:modelValue": c[0] || (c[0] = (e) => _.value = e),
431
431
  density: "compact",
@@ -509,7 +509,7 @@ var ae = {
509
509
  class: u(e.cardId === T.value ? "sk-card-flash" : "")
510
510
  }, {
511
511
  default: x(() => [s(F, null, {
512
- default: x(() => [a("div", ye, [
512
+ default: x(() => [a("div", Se, [
513
513
  e.stuck ? (p(), n(l, {
514
514
  key: 0,
515
515
  color: "error",
@@ -528,9 +528,9 @@ var ae = {
528
528
  default: x(() => c[12] || (c[12] = [o(" mdi-snowflake ")])),
529
529
  _: 1
530
530
  })) : r("", !0),
531
- a("span", be, v(e.card?.questionType ?? "card"), 1),
532
- a("code", xe, v(y(shortId)(e.cardId, 24)), 1),
533
- headline(e) ? (p(), i("span", Se, v(headline(e)), 1)) : r("", !0),
531
+ a("span", Ce, v(e.card?.questionType ?? "card"), 1),
532
+ a("code", we, v(y(shortId)(e.cardId, 24)), 1),
533
+ headline(e) ? (p(), i("span", Te, v(headline(e)), 1)) : r("", !0),
534
534
  s(N),
535
535
  e.fails > 0 ? (p(), n(P, {
536
536
  key: 3,
@@ -570,7 +570,7 @@ var ae = {
570
570
  variant: "tonal",
571
571
  color: e.frozenElo ? "warning" : void 0
572
572
  }, {
573
- default: x(() => [o(" ELO " + v(e.cardElo === null ? "?" : Math.round(e.cardElo)) + " ", 1), e.cardEloCount === null ? r("", !0) : (p(), i("span", Ce, "/" + v(e.cardEloCount), 1))]),
573
+ default: x(() => [o(" ELO " + v(e.cardElo === null ? "?" : Math.round(e.cardElo)) + " ", 1), e.cardEloCount === null ? r("", !0) : (p(), i("span", Ee, "/" + v(e.cardEloCount), 1))]),
574
574
  _: 2
575
575
  }, 1032, ["color"])
576
576
  ])]),
@@ -593,28 +593,31 @@ var ae = {
593
593
  ]);
594
594
  };
595
595
  }
596
- }), [["__scopeId", "data-v-bb6b302b"]]), we = { class: "sk-run-detail" }, Te = {
596
+ }), [["__scopeId", "data-v-bb6b302b"]]), De = { class: "sk-run-detail" }, Oe = {
597
597
  key: 0,
598
598
  class: "mb-2"
599
- }, Ee = { class: "text-right" }, De = { class: "text-right" }, Oe = { class: "text-right" }, ke = { class: "text-right" }, Ae = {
599
+ }, ke = { class: "text-right" }, Ae = { class: "text-right" }, je = { class: "text-right" }, Me = { class: "text-right" }, Ne = {
600
600
  key: 1,
601
601
  class: "mb-2"
602
- }, je = { class: "text-right" }, Me = { class: "text-right" }, Ne = { class: "text-right" }, Pe = {
602
+ }, Pe = { class: "text-right" }, Fe = { class: "text-right" }, Ie = { class: "text-right" }, Le = {
603
603
  key: 2,
604
604
  class: "mb-2"
605
- }, Fe = {
605
+ }, Re = {
606
606
  key: 3,
607
607
  class: "mb-2"
608
- }, Ie = {
608
+ }, ze = { class: "text-caption font-weight-medium" }, Be = {
609
+ key: 0,
610
+ class: "text-medium-emphasis font-weight-regular"
611
+ }, Ve = {
609
612
  key: 1,
610
613
  title: "runner-up"
611
- }, Le = ["onClick"], Re = { class: "text-right" }, ze = { class: "text-caption font-weight-medium" }, Be = ["onClick"], Ve = { class: "text-medium-emphasis" }, He = { class: "text-no-wrap" }, Ue = { class: "text-no-wrap" }, We = { class: "text-right text-no-wrap" }, Ge = { class: "text-caption" }, Ke = {
614
+ }, He = ["onClick"], Ue = { class: "text-right" }, We = { class: "text-caption font-weight-medium" }, Ge = ["onClick"], Ke = { class: "text-medium-emphasis" }, qe = { class: "text-no-wrap" }, Je = { class: "text-no-wrap" }, Ye = { class: "text-right text-no-wrap" }, Xe = { class: "text-caption" }, Ze = {
612
615
  key: 4,
613
616
  class: "mb-2"
614
- }, qe = { class: "sk-hint-block" }, Je = {
617
+ }, Qe = { class: "sk-hint-block" }, $e = {
615
618
  key: 5,
616
619
  class: "text-caption text-medium-emphasis"
617
- }, Ye = { key: 2 }, Y = /* @__PURE__ */ K(/* @__PURE__ */ c({
620
+ }, et = { key: 2 }, Y = /* @__PURE__ */ K(/* @__PURE__ */ c({
618
621
  __name: "RunDetail",
619
622
  props: { run: {} },
620
623
  emits: ["open-card"],
@@ -628,14 +631,11 @@ var ae = {
628
631
  label: "top-generated new card (sunk)",
629
632
  card: e.topGenerated
630
633
  }), t;
631
- });
632
- function fmtScore(e) {
633
- return Math.abs(e) >= .01 || e === 0 ? e.toFixed(2) : e.toExponential(1);
634
- }
634
+ }), _ = t(() => z(d.run).map((e) => `${e.source} ${e.count}`).join(" · "));
635
635
  return (t, c) => {
636
636
  let l = g("v-table"), d = g("v-icon");
637
- return p(), i("div", we, [
638
- t.run.generators?.length ? (p(), i("div", Te, [c[1] || (c[1] = a("div", { class: "text-caption font-weight-medium" }, "generators", -1)), s(l, {
637
+ return p(), i("div", De, [
638
+ t.run.generators?.length ? (p(), i("div", Oe, [c[1] || (c[1] = a("div", { class: "text-caption font-weight-medium" }, "generators", -1)), s(l, {
639
639
  density: "compact",
640
640
  class: "sk-mini-table"
641
641
  }, {
@@ -647,14 +647,14 @@ var ae = {
647
647
  a("th", { class: "text-right" }, "top")
648
648
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(t.run.generators, (e) => (p(), i("tr", { key: e.name }, [
649
649
  a("td", null, v(e.name), 1),
650
- a("td", Ee, v(e.cardCount), 1),
651
- a("td", De, v(e.newCount), 1),
652
- a("td", Oe, v(e.reviewCount), 1),
653
- a("td", ke, v(e.topScore.toFixed(2)), 1)
650
+ a("td", ke, v(e.cardCount), 1),
651
+ a("td", Ae, v(e.newCount), 1),
652
+ a("td", je, v(e.reviewCount), 1),
653
+ a("td", Me, v(e.topScore.toFixed(2)), 1)
654
654
  ]))), 128))])]),
655
655
  _: 1
656
656
  })])) : r("", !0),
657
- t.run.filters?.length ? (p(), i("div", Ae, [c[3] || (c[3] = a("div", { class: "text-caption font-weight-medium" }, "filters", -1)), s(l, {
657
+ t.run.filters?.length ? (p(), i("div", Ne, [c[3] || (c[3] = a("div", { class: "text-caption font-weight-medium" }, "filters", -1)), s(l, {
658
658
  density: "compact",
659
659
  class: "sk-mini-table"
660
660
  }, {
@@ -668,26 +668,26 @@ var ae = {
668
668
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(t.run.filters, (e) => (p(), i("tr", { key: e.name }, [
669
669
  a("td", null, v(e.name), 1),
670
670
  a("td", null, v(e.kind ?? "—"), 1),
671
- a("td", je, v(e.boosted), 1),
672
- a("td", Me, v(e.penalized), 1),
673
- a("td", Ne, v(e.passed), 1),
671
+ a("td", Pe, v(e.boosted), 1),
672
+ a("td", Fe, v(e.penalized), 1),
673
+ a("td", Ie, v(e.passed), 1),
674
674
  a("td", { class: u(["text-right", e.removed > 0 ? "text-error" : ""]) }, v(e.removed), 3)
675
675
  ]))), 128))])]),
676
676
  _: 1
677
677
  })])) : r("", !0),
678
- t.run.regulators?.length ? (p(), i("div", Pe, [c[4] || (c[4] = a("div", { class: "text-caption font-weight-medium" }, "regulators", -1)), (p(!0), i(e, null, h(t.run.regulators, (e) => (p(), i("div", {
678
+ t.run.regulators?.length ? (p(), i("div", Le, [c[4] || (c[4] = a("div", { class: "text-caption font-weight-medium" }, "regulators", -1)), (p(!0), i(e, null, h(t.run.regulators, (e) => (p(), i("div", {
679
679
  key: e.name,
680
680
  class: "sk-mini-line"
681
- }, [a("span", { class: u(e.multiplier > 1 ? "text-warning" : "text-medium-emphasis") }, " ×" + v(e.multiplier.toFixed(2)), 3), o(" " + v(y(I)(e)), 1)]))), 128))])) : r("", !0),
682
- t.run.cards?.length ? (p(), i("div", Fe, [c[7] || (c[7] = a("div", { class: "text-caption font-weight-medium" }, "selection", -1)), s(l, {
681
+ }, [a("span", { class: u(e.multiplier > 1 ? "text-warning" : "text-medium-emphasis") }, " ×" + v(e.multiplier.toFixed(2)), 3), o(" " + v(y(L)(e)), 1)]))), 128))])) : r("", !0),
682
+ t.run.cards?.length ? (p(), i("div", Re, [a("div", ze, [c[5] || (c[5] = o(" selection ")), _.value ? (p(), i("span", Be, " · by source: " + v(_.value), 1)) : r("", !0)]), s(l, {
683
683
  density: "compact",
684
684
  class: "sk-mini-table"
685
685
  }, {
686
- default: x(() => [c[6] || (c[6] = a("thead", null, [a("tr", null, [
686
+ default: x(() => [c[7] || (c[7] = a("thead", null, [a("tr", null, [
687
687
  a("th"),
688
688
  a("th", null, "card"),
689
689
  a("th", null, "origin"),
690
- a("th", null, "generator"),
690
+ a("th", null, "source"),
691
691
  a("th", { class: "text-right" }, "score")
692
692
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(t.run.cards, (e) => (p(), i("tr", {
693
693
  key: e.cardId,
@@ -698,67 +698,67 @@ var ae = {
698
698
  size: "x-small",
699
699
  color: "success"
700
700
  }, {
701
- default: x(() => c[5] || (c[5] = [o("mdi-check")])),
701
+ default: x(() => c[6] || (c[6] = [o("mdi-check")])),
702
702
  _: 1
703
- })) : (p(), i("span", Ie, "·"))]),
703
+ })) : (p(), i("span", Ve, "·"))]),
704
704
  a("td", null, [a("a", {
705
705
  class: "sk-card-link",
706
706
  onClick: (t) => f("open-card", e.cardId)
707
- }, v(e.cardId), 9, Le)]),
707
+ }, v(e.cardId), 9, He)]),
708
708
  a("td", null, v(e.origin), 1),
709
- a("td", null, v(e.generator ?? "—"), 1),
710
- a("td", Re, v(fmtScore(e.score)), 1)
709
+ a("td", null, v(y(R)(e)), 1),
710
+ a("td", Ue, v(y(j)(e.score)), 1)
711
711
  ], 2))), 128))])]),
712
712
  _: 1
713
713
  })])) : r("", !0),
714
714
  (p(!0), i(e, null, h(m.value, (t) => (p(), i("div", {
715
715
  key: t.label,
716
716
  class: "mb-2"
717
- }, [a("div", ze, [
717
+ }, [a("div", We, [
718
718
  o(v(t.label) + ": ", 1),
719
719
  a("a", {
720
720
  class: "sk-card-link",
721
721
  onClick: (e) => f("open-card", t.card.cardId)
722
- }, v(t.card.cardId), 9, Be),
723
- a("span", Ve, " (" + v(t.card.origin) + ", " + v(t.card.generator ?? "?") + ") final " + v(fmtScore(t.card.score)), 1)
722
+ }, v(t.card.cardId), 9, Ge),
723
+ a("span", Ke, " (" + v(t.card.origin) + ", " + v(y(R)(t.card)) + ") final " + v(y(j)(t.card.score)), 1)
724
724
  ]), s(l, {
725
725
  density: "compact",
726
726
  class: "sk-mini-table"
727
727
  }, {
728
728
  default: x(() => [a("tbody", null, [(p(!0), i(e, null, h(t.card.trail, (e, t) => (p(), i("tr", { key: t }, [
729
- a("td", He, v(e.action), 1),
730
- a("td", Ue, v(e.strategyName), 1),
731
- a("td", We, v(fmtScore(e.score)), 1),
732
- a("td", Ge, v(e.reason), 1)
729
+ a("td", qe, v(e.action), 1),
730
+ a("td", Je, v(e.strategyName), 1),
731
+ a("td", Ye, v(y(j)(e.score)), 1),
732
+ a("td", Xe, v(e.reason), 1)
733
733
  ]))), 128))])]),
734
734
  _: 2
735
735
  }, 1024)]))), 128)),
736
- t.run.hints ? (p(), i("div", Ke, [c[8] || (c[8] = a("div", { class: "text-caption font-weight-medium" }, "hints", -1)), a("pre", qe, v(JSON.stringify(t.run.hints, null, 2)), 1)])) : r("", !0),
737
- t.run.discardedTail ? (p(), i("div", Je, [
736
+ t.run.hints ? (p(), i("div", Ze, [c[8] || (c[8] = a("div", { class: "text-caption font-weight-medium" }, "hints", -1)), a("pre", Qe, v(JSON.stringify(t.run.hints, null, 2)), 1)])) : r("", !0),
737
+ t.run.discardedTail ? (p(), i("div", $e, [
738
738
  o(" discarded tail: " + v(t.run.discardedTail.count) + " cards ", 1),
739
739
  t.run.discardedTail.scoreRange ? (p(), i(e, { key: 0 }, [o(" · score [" + v(t.run.discardedTail.scoreRange[0].toFixed(2)) + ", " + v(t.run.discardedTail.scoreRange[1].toFixed(2)) + "] ", 1)], 64)) : r("", !0),
740
740
  t.run.discardedTail.eloRange ? (p(), i(e, { key: 1 }, [o(" · ELO [" + v(Math.round(t.run.discardedTail.eloRange[0])) + ", " + v(Math.round(t.run.discardedTail.eloRange[1])) + "] ", 1)], 64)) : r("", !0),
741
- t.run.discardedTail.note ? (p(), i("div", Ye, v(t.run.discardedTail.note), 1)) : r("", !0)
741
+ t.run.discardedTail.note ? (p(), i("div", et, v(t.run.discardedTail.note), 1)) : r("", !0)
742
742
  ])) : r("", !0)
743
743
  ]);
744
744
  };
745
745
  }
746
- }), [["__scopeId", "data-v-70675763"]]), Xe = { class: "d-flex align-center flex-wrap mb-4 ga-2" }, Ze = { class: "text-caption text-medium-emphasis" }, Qe = { class: "text-right" }, $e = { class: "text-right" }, et = {
746
+ }), [["__scopeId", "data-v-4e9c454b"]]), tt = { class: "d-flex align-center flex-wrap mb-4 ga-2" }, nt = { class: "text-caption text-medium-emphasis" }, rt = { class: "text-right" }, it = { class: "text-right" }, at = {
747
747
  key: 1,
748
748
  class: "text-caption text-disabled"
749
- }, tt = { class: "sk-hint-block" }, nt = { class: "sk-hint-block" }, rt = { class: "text-caption text-medium-emphasis mb-4" }, it = { class: "text-right" }, at = { class: "text-right" }, ot = { class: "text-disabled" }, st = { class: "text-right" }, ct = { class: "d-flex flex-wrap ga-5" }, lt = { class: "text-caption text-medium-emphasis" }, ut = { class: "text-h6 text-success" }, dt = { class: "text-caption text-medium-emphasis" }, ft = { class: "text-h6 text-error" }, pt = { class: "text-h6" }, mt = { class: "text-caption text-disabled" }, ht = { class: "d-flex align-center flex-wrap mb-2 ga-3" }, gt = {
749
+ }, ot = { class: "sk-hint-block" }, st = { class: "sk-hint-block" }, ct = { class: "text-caption text-medium-emphasis mb-4" }, lt = { class: "text-right" }, ut = { class: "text-right" }, dt = { class: "text-disabled" }, ft = { class: "text-right" }, pt = { class: "d-flex flex-wrap ga-5" }, mt = { class: "text-caption text-medium-emphasis" }, ht = { class: "text-h6 text-success" }, gt = { class: "text-caption text-medium-emphasis" }, _t = { class: "text-h6 text-error" }, vt = { class: "text-h6" }, yt = { class: "text-caption text-disabled" }, bt = { class: "d-flex align-center flex-wrap mb-2 ga-3" }, xt = {
750
750
  key: 4,
751
751
  class: "sk-timeline"
752
- }, _t = { class: "sk-tl-time text-caption text-disabled" }, vt = { class: "sk-tl-gutter" }, yt = {
752
+ }, St = { class: "sk-tl-time text-caption text-disabled" }, Ct = { class: "sk-tl-gutter" }, wt = {
753
753
  key: 0,
754
754
  class: "sk-tl-body"
755
- }, bt = { class: "d-flex align-center flex-wrap ga-1" }, xt = { class: "font-weight-medium" }, St = { class: "text-caption text-medium-emphasis ml-2" }, Ct = {
755
+ }, Tt = { class: "d-flex align-center flex-wrap ga-1" }, Et = { class: "font-weight-medium" }, Dt = { class: "text-caption text-medium-emphasis ml-2" }, Ot = {
756
756
  key: 1,
757
757
  class: "text-caption text-error ml-2"
758
- }, wt = {
758
+ }, kt = {
759
759
  key: 1,
760
760
  class: "sk-tl-body"
761
- }, Tt = ["title", "onClick"], Et = { class: "text-caption" }, Dt = { class: "text-caption text-medium-emphasis ml-2" }, Ot = {
761
+ }, At = ["title", "onClick"], jt = { class: "text-caption" }, Mt = { class: "text-caption text-medium-emphasis ml-2" }, Nt = {
762
762
  key: 0,
763
763
  class: "text-caption text-disabled ml-2"
764
764
  }, X = /* @__PURE__ */ K(/* @__PURE__ */ c({
@@ -770,17 +770,17 @@ var ae = {
770
770
  },
771
771
  emits: ["open-card"],
772
772
  setup(c, { emit: l }) {
773
- let d = c, f = l, _ = t(() => B(d.dataset, d.sessionId, d.interpreters)), b = t(() => _.value.summary.doc), S = t(() => z(_.value?.timeline ?? [], d.interpreters)), w = t(() => E(_.value?.timeline ?? [])), T = t(() => _.value?.timeline.filter((e) => e.kind === "response").length ?? 0), D = m("all"), j = t(() => {
773
+ let d = c, f = l, _ = t(() => V(d.dataset, d.sessionId, d.interpreters)), b = t(() => _.value.summary.doc), S = t(() => B(_.value?.timeline ?? [], d.interpreters)), w = t(() => E(_.value?.timeline ?? [])), T = t(() => _.value?.timeline.filter((e) => e.kind === "response").length ?? 0), D = m("all"), j = t(() => {
774
774
  let e = _.value?.timeline ?? [];
775
775
  return !D.value || D.value === "all" ? e : e.filter((e) => e.kind === D.value);
776
- }), N = m(/* @__PURE__ */ new Set());
776
+ }), M = m(/* @__PURE__ */ new Set());
777
777
  function toggle(e) {
778
- let t = new Set(N.value);
779
- t.has(e) ? t.delete(e) : t.add(e), N.value = t;
778
+ let t = new Set(M.value);
779
+ t.has(e) ? t.delete(e) : t.add(e), M.value = t;
780
780
  }
781
781
  let { copied: P, copy: F } = useCopy();
782
782
  function asText() {
783
- return _.value ? V(d.dataset.username, _.value, {
783
+ return _.value ? ne(d.dataset.username, _.value, {
784
784
  servedTags: S.value,
785
785
  eloLedger: w.value
786
786
  }, d.interpreters) : "";
@@ -792,7 +792,7 @@ var ae = {
792
792
  return e.durationSeconds === null ? `— of ${t}` : `${A(e.durationSeconds)} of ${t}`;
793
793
  });
794
794
  function skillTags(e) {
795
- return e.filter((e) => M(d.interpreters, e)).slice(0, 3);
795
+ return e.filter((e) => N(d.interpreters, e)).slice(0, 3);
796
796
  }
797
797
  function fmtNum(e) {
798
798
  return e === null ? "—" : Number.isInteger(e) ? String(e) : e.toFixed(1);
@@ -810,9 +810,9 @@ var ae = {
810
810
  return e.kind === "run" ? "sk-tl-run" : e.isCorrect === !1 ? "sk-tl-fail" : "";
811
811
  }
812
812
  return (t, c) => {
813
- let l = g("v-alert"), d = g("v-chip"), m = g("v-icon"), E = g("v-spacer"), A = g("v-btn"), z = g("v-table"), B = g("v-card"), V = g("v-col"), U = g("v-row"), W = g("v-btn-toggle");
813
+ let l = g("v-alert"), d = g("v-chip"), m = g("v-icon"), E = g("v-spacer"), A = g("v-btn"), L = g("v-table"), R = g("v-card"), z = g("v-col"), B = g("v-row"), V = g("v-btn-toggle");
814
814
  return p(), i("div", null, [_.value ? (p(), i(e, { key: 1 }, [
815
- a("div", Xe, [
815
+ a("div", tt, [
816
816
  s(d, {
817
817
  size: "small",
818
818
  variant: "flat",
@@ -840,20 +840,20 @@ var ae = {
840
840
  key: e,
841
841
  size: "small",
842
842
  variant: "tonal",
843
- color: y(G)[e].color,
843
+ color: y(W)[e].color,
844
844
  title: y(C)[e].help
845
845
  }, {
846
846
  default: x(() => [s(m, {
847
847
  start: "",
848
848
  size: "small"
849
849
  }, {
850
- default: x(() => [o(v(y(G)[e].icon), 1)]),
850
+ default: x(() => [o(v(y(W)[e].icon), 1)]),
851
851
  _: 2
852
852
  }, 1024), o(" " + v(y(C)[e].label), 1)]),
853
853
  _: 2
854
854
  }, 1032, ["color", "title"]))), 128)),
855
855
  s(E),
856
- a("code", Ze, v(t.sessionId), 1),
856
+ a("code", nt, v(t.sessionId), 1),
857
857
  s(A, {
858
858
  variant: "text",
859
859
  size: "small",
@@ -875,19 +875,19 @@ var ae = {
875
875
  default: x(() => [o(" The session records " + v(b.value.tally?.responses) + " responses but only " + v(T.value) + " card records carry its id. The timeline is incomplete. ", 1)]),
876
876
  _: 1
877
877
  })) : r("", !0),
878
- s(U, { class: "mb-2" }, {
879
- default: x(() => [s(V, {
878
+ s(B, { class: "mb-2" }, {
879
+ default: x(() => [s(z, {
880
880
  cols: "12",
881
881
  md: "6"
882
882
  }, {
883
- default: x(() => [s(B, {
883
+ default: x(() => [s(R, {
884
884
  variant: "outlined",
885
885
  class: "pa-3 h-100"
886
886
  }, {
887
887
  default: x(() => [
888
888
  c[4] || (c[4] = a("div", { class: "text-subtitle-2 mb-1" }, "Learner state", -1)),
889
889
  c[5] || (c[5] = a("div", { class: "text-caption text-medium-emphasis mb-3" }, " What the navigator was choosing against, and what moved. ", -1)),
890
- _.value.summary.state.length ? (p(), n(z, {
890
+ _.value.summary.state.length ? (p(), n(L, {
891
891
  key: 0,
892
892
  density: "compact",
893
893
  class: "sk-mini-table"
@@ -899,21 +899,21 @@ var ae = {
899
899
  a("th", { class: "text-right" }, "Δ")
900
900
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(_.value.summary.state, (e) => (p(), i("tr", { key: e.label }, [
901
901
  a("td", null, v(e.label), 1),
902
- a("td", Qe, v(fmtNum(e.from)), 1),
903
- a("td", $e, v(fmtNum(e.to)), 1),
902
+ a("td", rt, v(fmtNum(e.from)), 1),
903
+ a("td", it, v(fmtNum(e.to)), 1),
904
904
  a("td", { class: u(["text-right", y(deltaClass)(e.delta)]) }, v(y(k)(e.delta)), 3)
905
905
  ]))), 128))])]),
906
906
  _: 1
907
- })) : (p(), i("div", et, "No state snapshot recorded."))
907
+ })) : (p(), i("div", at, "No state snapshot recorded."))
908
908
  ]),
909
909
  _: 1
910
910
  })]),
911
911
  _: 1
912
- }), s(V, {
912
+ }), s(z, {
913
913
  cols: "12",
914
914
  md: "6"
915
915
  }, {
916
- default: x(() => [s(B, {
916
+ default: x(() => [s(R, {
917
917
  variant: "outlined",
918
918
  class: "pa-3 h-100"
919
919
  }, {
@@ -921,9 +921,9 @@ var ae = {
921
921
  c[6] || (c[6] = a("div", { class: "text-subtitle-2 mb-1" }, "Session hints", -1)),
922
922
  c[7] || (c[7] = a("div", { class: "text-caption text-medium-emphasis mb-3" }, " What outcome observers told the navigator. They act only through these. ", -1)),
923
923
  c[8] || (c[8] = a("span", { class: "text-caption font-weight-medium" }, "at open", -1)),
924
- a("pre", tt, v(fmtHints(b.value.config?.initHints)), 1),
924
+ a("pre", ot, v(fmtHints(b.value.config?.initHints)), 1),
925
925
  c[9] || (c[9] = a("span", { class: "text-caption font-weight-medium" }, "at close", -1)),
926
- a("pre", nt, v(fmtHints(b.value.finalHints)), 1)
926
+ a("pre", st, v(fmtHints(b.value.finalHints)), 1)
927
927
  ]),
928
928
  _: 1
929
929
  })]),
@@ -931,8 +931,8 @@ var ae = {
931
931
  })]),
932
932
  _: 1
933
933
  }),
934
- a("div", rt, [o(" batch limit " + v(b.value.config?.defaultBatchLimit ?? "?") + " · " + v(b.value.config?.sourceCount ?? "?") + " source(s) · opening queues supply " + v(b.value.initialQueues?.supplyQ ?? "?") + " / failed " + v(b.value.initialQueues?.failedQ ?? "?") + " ", 1), b.value.tally ? (p(), i(e, { key: 0 }, [o(" · ended with " + v(b.value.tally.failedQRemaining) + " still in the failed queue", 1)], 64)) : r("", !0)]),
935
- S.value.length ? (p(), n(B, {
934
+ a("div", ct, [o(" batch limit " + v(b.value.config?.defaultBatchLimit ?? "?") + " · " + v(b.value.config?.sourceCount ?? "?") + " source(s) · opening queues supply " + v(b.value.initialQueues?.supplyQ ?? "?") + " / failed " + v(b.value.initialQueues?.failedQ ?? "?") + " ", 1), b.value.tally ? (p(), i(e, { key: 0 }, [o(" · ended with " + v(b.value.tally.failedQRemaining) + " still in the failed queue", 1)], 64)) : r("", !0)]),
935
+ S.value.length ? (p(), n(R, {
936
936
  key: 1,
937
937
  variant: "outlined",
938
938
  class: "pa-3 mb-4"
@@ -940,7 +940,7 @@ var ae = {
940
940
  default: x(() => [
941
941
  c[11] || (c[11] = a("div", { class: "text-subtitle-2 mb-1" }, "Served tags", -1)),
942
942
  c[12] || (c[12] = a("div", { class: "text-caption text-medium-emphasis mb-2" }, " What this sitting put in front of the learner, by content tag. A response with several tags counts toward each. ", -1)),
943
- s(z, {
943
+ s(L, {
944
944
  density: "compact",
945
945
  class: "sk-mini-table"
946
946
  }, {
@@ -951,18 +951,18 @@ var ae = {
951
951
  a("th", { class: "text-right" }, "Accuracy"),
952
952
  a("th", { class: "text-right" }, "Time")
953
953
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(S.value, (n) => (p(), i("tr", { key: n.tag }, [
954
- a("td", null, [a("code", { class: u(y(M)(t.interpreters, n.tag) ? "text-primary" : "") }, v(n.tag), 3)]),
955
- a("td", it, v(n.responses), 1),
956
- a("td", at, v(n.cards), 1),
957
- a("td", { class: u(["text-right", y(accuracyClass)(n.accuracy)]) }, [n.accuracy === null ? (p(), i(e, { key: 0 }, [o("—")], 64)) : (p(), i(e, { key: 1 }, [o(v(Math.round(n.accuracy * 100)) + "% ", 1), a("span", ot, "(" + v(n.correct) + "/" + v(n.correct + n.incorrect) + ")", 1)], 64))], 2),
958
- a("td", st, v((n.totalTimeMs / 1e3).toFixed(1)) + "s", 1)
954
+ a("td", null, [a("code", { class: u(y(N)(t.interpreters, n.tag) ? "text-primary" : "") }, v(n.tag), 3)]),
955
+ a("td", lt, v(n.responses), 1),
956
+ a("td", ut, v(n.cards), 1),
957
+ a("td", { class: u(["text-right", y(accuracyClass)(n.accuracy)]) }, [n.accuracy === null ? (p(), i(e, { key: 0 }, [o("—")], 64)) : (p(), i(e, { key: 1 }, [o(v(Math.round(n.accuracy * 100)) + "% ", 1), a("span", dt, "(" + v(n.correct) + "/" + v(n.correct + n.incorrect) + ")", 1)], 64))], 2),
958
+ a("td", ft, v((n.totalTimeMs / 1e3).toFixed(1)) + "s", 1)
959
959
  ]))), 128))])]),
960
960
  _: 1
961
961
  })
962
962
  ]),
963
963
  _: 1
964
964
  })) : r("", !0),
965
- w.value ? (p(), n(B, {
965
+ w.value ? (p(), n(R, {
966
966
  key: 2,
967
967
  variant: "outlined",
968
968
  class: "pa-3 mb-4"
@@ -970,20 +970,20 @@ var ae = {
970
970
  default: x(() => [
971
971
  c[15] || (c[15] = a("div", { class: "text-subtitle-2 mb-1" }, "ELO ledger", -1)),
972
972
  c[16] || (c[16] = a("div", { class: "text-caption text-medium-emphasis mb-3" }, " The per-response learner global-ELO exchanges that net to the session's ELO move. Wins above the learner's level pay little; losses below it cost a lot, so a high hit rate can still net negative. ", -1)),
973
- a("div", ct, [
973
+ a("div", pt, [
974
974
  a("div", null, [c[13] || (c[13] = a("div", { class: "text-caption text-medium-emphasis" }, "net", -1)), a("div", { class: u(["text-h6", y(deltaClass)(w.value.net)]) }, v(y(k)(w.value.net)), 3)]),
975
- a("div", null, [a("div", lt, "gained · " + v(w.value.wins) + " win(s)", 1), a("div", ut, v(y(k)(w.value.gained)), 1)]),
976
- a("div", null, [a("div", dt, "lost · " + v(w.value.losses) + " loss(es)", 1), a("div", ft, v(y(k)(w.value.lost)), 1)]),
975
+ a("div", null, [a("div", mt, "gained · " + v(w.value.wins) + " win(s)", 1), a("div", ht, v(y(k)(w.value.gained)), 1)]),
976
+ a("div", null, [a("div", gt, "lost · " + v(w.value.losses) + " loss(es)", 1), a("div", _t, v(y(k)(w.value.lost)), 1)]),
977
977
  a("div", null, [
978
978
  c[14] || (c[14] = a("div", { class: "text-caption text-medium-emphasis" }, "exchanges", -1)),
979
- a("div", pt, v(w.value.count), 1),
980
- a("div", mt, "of " + v(T.value) + " response(s)", 1)
979
+ a("div", vt, v(w.value.count), 1),
980
+ a("div", yt, "of " + v(T.value) + " response(s)", 1)
981
981
  ])
982
982
  ])
983
983
  ]),
984
984
  _: 1
985
985
  })) : r("", !0),
986
- a("div", ht, [c[17] || (c[17] = a("h2", { class: "text-h6" }, "Timeline", -1)), s(W, {
986
+ a("div", bt, [c[17] || (c[17] = a("h2", { class: "text-h6" }, "Timeline", -1)), s(V, {
987
987
  modelValue: D.value,
988
988
  "onUpdate:modelValue": c[1] || (c[1] = (e) => D.value = e),
989
989
  density: "compact",
@@ -1022,20 +1022,20 @@ var ae = {
1022
1022
  }, {
1023
1023
  default: x(() => c[18] || (c[18] = [o("Nothing recorded for this session.")])),
1024
1024
  _: 1
1025
- })) : (p(), i("div", gt, [(p(!0), i(e, null, h(j.value, (l, g) => (p(), i("div", {
1025
+ })) : (p(), i("div", xt, [(p(!0), i(e, null, h(j.value, (l, g) => (p(), i("div", {
1026
1026
  key: g,
1027
1027
  class: u(["sk-tl-row", rowClass(l)])
1028
1028
  }, [
1029
- a("div", _t, v(y(fmtClock)(l.at)), 1),
1030
- a("div", vt, [s(m, {
1029
+ a("div", St, v(y(fmtClock)(l.at)), 1),
1030
+ a("div", Ct, [s(m, {
1031
1031
  size: "small",
1032
1032
  color: entryColor(l)
1033
1033
  }, {
1034
1034
  default: x(() => [o(v(entryIcon(l)), 1)]),
1035
1035
  _: 2
1036
1036
  }, 1032, ["color"])]),
1037
- l.kind === "run" ? (p(), i("div", yt, [a("div", bt, [
1038
- a("span", xt, v(l.run.label), 1),
1037
+ l.kind === "run" ? (p(), i("div", wt, [a("div", Tt, [
1038
+ a("span", Et, v(l.run.label), 1),
1039
1039
  l.run.mode ? (p(), n(d, {
1040
1040
  key: 0,
1041
1041
  size: "x-small",
@@ -1044,8 +1044,8 @@ var ae = {
1044
1044
  default: x(() => [o(v(l.run.mode), 1)]),
1045
1045
  _: 2
1046
1046
  }, 1024)) : r("", !0),
1047
- a("span", St, " generated " + v(l.run.generatedCount) + " → selected " + v(l.run.finalCount) + " (" + v(l.run.newSelected) + " new, " + v(l.run.reviewsSelected) + " review) ", 1),
1048
- l.run.generatedCount > 0 && l.run.finalCount === 0 ? (p(), i("span", Ct, " nothing survived ")) : r("", !0),
1047
+ a("span", Dt, " generated " + v(l.run.generatedCount) + " → selected " + v(l.run.finalCount) + " (" + v(l.run.newSelected) + " new, " + v(l.run.reviewsSelected) + " review) ", 1),
1048
+ l.run.generatedCount > 0 && l.run.finalCount === 0 ? (p(), i("span", Ot, " nothing survived ")) : r("", !0),
1049
1049
  typeof l.run.userElo == "number" ? (p(), n(d, {
1050
1050
  key: 2,
1051
1051
  size: "x-small",
@@ -1058,7 +1058,7 @@ var ae = {
1058
1058
  }, 1024)) : r("", !0),
1059
1059
  s(E),
1060
1060
  s(A, {
1061
- icon: N.value.has(l.run.runId) ? "mdi-chevron-up" : "mdi-chevron-down",
1061
+ icon: M.value.has(l.run.runId) ? "mdi-chevron-up" : "mdi-chevron-down",
1062
1062
  size: "x-small",
1063
1063
  variant: "text",
1064
1064
  onClick: (e) => toggle(l.run.runId)
@@ -1069,23 +1069,23 @@ var ae = {
1069
1069
  variant: "text",
1070
1070
  color: y(P) === l.run.runId ? "success" : void 0,
1071
1071
  title: "Copy run as text",
1072
- onClick: (e) => y(F)(y(L)(l.run), l.run.runId)
1072
+ onClick: (e) => y(F)(y(ee)(l.run), l.run.runId)
1073
1073
  }, null, 8, [
1074
1074
  "icon",
1075
1075
  "color",
1076
1076
  "onClick"
1077
1077
  ])
1078
- ]), N.value.has(l.run.runId) ? (p(), n(Y, {
1078
+ ]), M.value.has(l.run.runId) ? (p(), n(Y, {
1079
1079
  key: 0,
1080
1080
  run: l.run,
1081
1081
  class: "mt-1",
1082
1082
  onOpenCard: c[2] || (c[2] = (e) => f("open-card", e))
1083
- }, null, 8, ["run"])) : r("", !0)])) : (p(), i("div", wt, [
1083
+ }, null, 8, ["run"])) : r("", !0)])) : (p(), i("div", kt, [
1084
1084
  a("a", {
1085
1085
  class: "sk-card-link",
1086
1086
  title: `Open ${l.cardId} in card history`,
1087
1087
  onClick: (e) => f("open-card", l.cardId)
1088
- }, [o(v(l.questionType ?? "card") + " ", 1), a("code", Et, v(y(shortId)(l.cardId)), 1)], 8, Tt),
1088
+ }, [o(v(l.questionType ?? "card") + " ", 1), a("code", jt, v(y(shortId)(l.cardId)), 1)], 8, At),
1089
1089
  (p(!0), i(e, null, h(skillTags(l.tags), (e) => (p(), n(d, {
1090
1090
  key: e,
1091
1091
  size: "x-small",
@@ -1096,8 +1096,8 @@ var ae = {
1096
1096
  default: x(() => [o(v(y(H)(t.interpreters, e)), 1)]),
1097
1097
  _: 2
1098
1098
  }, 1024))), 128)),
1099
- a("span", Dt, [o(v((l.timeSpentMs / 1e3).toFixed(1)) + "s ", 1), l.priorAttempts ? (p(), i(e, { key: 0 }, [o(" · attempt " + v(l.priorAttempts + 1), 1)], 64)) : r("", !0)]),
1100
- l.userAnswer == null ? r("", !0) : (p(), i("span", Ot, "“" + v(y(O)(l.userAnswer)) + "”", 1)),
1099
+ a("span", Mt, [o(v((l.timeSpentMs / 1e3).toFixed(1)) + "s ", 1), l.priorAttempts ? (p(), i(e, { key: 0 }, [o(" · attempt " + v(l.priorAttempts + 1), 1)], 64)) : r("", !0)]),
1100
+ l.userAnswer == null ? r("", !0) : (p(), i("span", Nt, "“" + v(y(O)(l.userAnswer)) + "”", 1)),
1101
1101
  l.elo ? (p(), i(e, { key: 1 }, [s(d, {
1102
1102
  size: "x-small",
1103
1103
  variant: "tonal",
@@ -1107,7 +1107,7 @@ var ae = {
1107
1107
  }, {
1108
1108
  default: x(() => [o(" ELO " + v(y(k)(l.elo.global.delta)), 1)]),
1109
1109
  _: 2
1110
- }, 1032, ["color", "title"]), (p(!0), i(e, null, h(y(R)(l.elo), (e) => (p(), n(d, {
1110
+ }, 1032, ["color", "title"]), (p(!0), i(e, null, h(y(te)(l.elo), (e) => (p(), n(d, {
1111
1111
  key: e.tag,
1112
1112
  size: "x-small",
1113
1113
  variant: "text",
@@ -1130,13 +1130,13 @@ var ae = {
1130
1130
  }))]);
1131
1131
  };
1132
1132
  }
1133
- }), [["__scopeId", "data-v-36c9215c"]]), kt = { class: "text-h6" }, At = { class: "text-caption" }, jt = { class: "d-flex align-center flex-wrap mb-3 ga-3" }, Mt = ["onClick"], Nt = { class: "text-no-wrap" }, Pt = { class: "text-right" }, Ft = { class: "text-right" }, It = {
1133
+ }), [["__scopeId", "data-v-36c9215c"]]), Pt = { class: "text-h6" }, Ft = { class: "text-caption" }, It = { class: "d-flex align-center flex-wrap mb-3 ga-3" }, Lt = ["onClick"], Rt = { class: "text-no-wrap" }, zt = { class: "text-right" }, Bt = { class: "text-right" }, Vt = {
1134
1134
  key: 1,
1135
1135
  class: "text-disabled"
1136
- }, Lt = { class: "text-right" }, Rt = { class: "text-no-wrap text-caption" }, zt = { class: "text-no-wrap text-caption" }, Bt = { key: 0 }, Vt = {
1136
+ }, Ht = { class: "text-right" }, Ut = { class: "text-no-wrap text-caption" }, Wt = { class: "text-no-wrap text-caption" }, Gt = { key: 0 }, Kt = {
1137
1137
  key: 0,
1138
1138
  class: "text-disabled"
1139
- }, Ht = { class: "text-right" }, Z = /* @__PURE__ */ K(/* @__PURE__ */ c({
1139
+ }, qt = { class: "text-right" }, Z = /* @__PURE__ */ K(/* @__PURE__ */ c({
1140
1140
  __name: "LearnerSessionList",
1141
1141
  props: {
1142
1142
  dataset: {},
@@ -1144,7 +1144,7 @@ var ae = {
1144
1144
  },
1145
1145
  emits: ["open"],
1146
1146
  setup(c, { emit: l }) {
1147
- let d = c, f = l, _ = t(() => U(d.dataset, d.interpreters)), b = m("all"), S = t(() => {
1147
+ let d = c, f = l, _ = t(() => re(d.dataset, d.interpreters)), b = m("all"), S = t(() => {
1148
1148
  let e = /* @__PURE__ */ new Map();
1149
1149
  for (let t of _.value) for (let n of t.flags) e.set(n, (e.get(n) ?? 0) + 1);
1150
1150
  return [...e.entries()].map(([e, t]) => ({
@@ -1228,14 +1228,14 @@ var ae = {
1228
1228
  color: e.color,
1229
1229
  class: "pa-2 text-center"
1230
1230
  }, {
1231
- default: x(() => [a("div", kt, v(e.value), 1), a("div", At, v(e.label), 1)]),
1231
+ default: x(() => [a("div", Pt, v(e.value), 1), a("div", Ft, v(e.label), 1)]),
1232
1232
  _: 2
1233
1233
  }, 1032, ["color"])]),
1234
1234
  _: 2
1235
1235
  }, 1024))), 128))]),
1236
1236
  _: 1
1237
1237
  }),
1238
- a("div", jt, [s(O, {
1238
+ a("div", It, [s(O, {
1239
1239
  modelValue: b.value,
1240
1240
  "onUpdate:modelValue": c[0] || (c[0] = (e) => b.value = e),
1241
1241
  density: "compact",
@@ -1257,9 +1257,9 @@ var ae = {
1257
1257
  default: x(() => [s(D, {
1258
1258
  start: "",
1259
1259
  size: "small",
1260
- color: y(G)[e.flag].color
1260
+ color: y(W)[e.flag].color
1261
1261
  }, {
1262
- default: x(() => [o(v(y(G)[e.flag].icon), 1)]),
1262
+ default: x(() => [o(v(y(W)[e.flag].icon), 1)]),
1263
1263
  _: 2
1264
1264
  }, 1032, ["color"]), o(" " + v(y(C)[e.flag].label) + " (" + v(e.count) + ") ", 1)]),
1265
1265
  _: 2
@@ -1293,7 +1293,7 @@ var ae = {
1293
1293
  class: "sk-admin-row",
1294
1294
  onClick: (e) => f("open", t.doc.sessionId)
1295
1295
  }, [
1296
- a("td", Nt, v(y(fmtTime)(t.doc.startTime)), 1),
1296
+ a("td", Rt, v(y(fmtTime)(t.doc.startTime)), 1),
1297
1297
  a("td", null, [s(j, {
1298
1298
  size: "x-small",
1299
1299
  variant: "flat",
@@ -1302,92 +1302,92 @@ var ae = {
1302
1302
  default: x(() => [o(v(t.doc.status), 1)]),
1303
1303
  _: 2
1304
1304
  }, 1032, ["color"])]),
1305
- a("td", Pt, v(t.doc.tally?.cardsPresented ?? "—"), 1),
1306
- a("td", Ft, [t.accuracy === null ? (p(), i("span", It, "—")) : (p(), i("span", {
1305
+ a("td", zt, v(t.doc.tally?.cardsPresented ?? "—"), 1),
1306
+ a("td", Bt, [t.accuracy === null ? (p(), i("span", Vt, "—")) : (p(), i("span", {
1307
1307
  key: 0,
1308
1308
  class: u(y(accuracyClass)(t.accuracy))
1309
1309
  }, v(Math.round(t.accuracy * 100)) + "% ", 3))]),
1310
- a("td", Lt, v(t.doc.runs?.length ?? 0), 1),
1311
- a("td", Rt, v(clockText(t)), 1),
1312
- a("td", zt, [(p(!0), i(e, null, h(deltas(t), (t, n) => (p(), i(e, { key: t.label }, [n > 0 ? (p(), i("span", Bt, " · ")) : r("", !0), a("span", { class: u(y(deltaClass)(t.delta)) }, v(y(k)(t.delta)) + "\xA0" + v(t.label), 3)], 64))), 128)), deltas(t).length === 0 ? (p(), i("span", Vt, "—")) : r("", !0)]),
1310
+ a("td", Ht, v(t.doc.runs?.length ?? 0), 1),
1311
+ a("td", Ut, v(clockText(t)), 1),
1312
+ a("td", Wt, [(p(!0), i(e, null, h(deltas(t), (t, n) => (p(), i(e, { key: t.label }, [n > 0 ? (p(), i("span", Gt, " · ")) : r("", !0), a("span", { class: u(y(deltaClass)(t.delta)) }, v(y(k)(t.delta)) + "\xA0" + v(t.label), 3)], 64))), 128)), deltas(t).length === 0 ? (p(), i("span", Kt, "—")) : r("", !0)]),
1313
1313
  a("td", null, [(p(!0), i(e, null, h(t.flags, (e) => (p(), n(D, {
1314
1314
  key: e,
1315
1315
  size: "small",
1316
1316
  class: "mr-1",
1317
- color: y(G)[e].color,
1317
+ color: y(W)[e].color,
1318
1318
  title: `${y(C)[e].label}: ${y(C)[e].help}`
1319
1319
  }, {
1320
- default: x(() => [o(v(y(G)[e].icon), 1)]),
1320
+ default: x(() => [o(v(y(W)[e].icon), 1)]),
1321
1321
  _: 2
1322
1322
  }, 1032, ["color", "title"]))), 128))]),
1323
- a("td", Ht, [s(D, {
1323
+ a("td", qt, [s(D, {
1324
1324
  size: "small",
1325
1325
  class: "text-disabled"
1326
1326
  }, {
1327
1327
  default: x(() => c[2] || (c[2] = [o("mdi-chevron-right")])),
1328
1328
  _: 1
1329
1329
  })])
1330
- ], 8, Mt))), 128))])]),
1330
+ ], 8, Lt))), 128))])]),
1331
1331
  _: 1
1332
1332
  }))
1333
1333
  ]);
1334
1334
  };
1335
1335
  }
1336
- }), [["__scopeId", "data-v-5c46cc58"]]), Ut = { class: "sk-pipeline" }, Wt = { class: "d-flex flex-wrap align-center ga-2 mb-3" }, Gt = { class: "text-caption" }, Kt = {
1336
+ }), [["__scopeId", "data-v-5c46cc58"]]), Jt = { class: "sk-pipeline" }, Yt = { class: "d-flex flex-wrap align-center ga-2 mb-3" }, Xt = { class: "text-caption" }, Zt = {
1337
1337
  key: 0,
1338
1338
  class: "text-caption text-medium-emphasis"
1339
- }, qt = { class: "sk-stage" }, Jt = { class: "d-flex align-center mb-1" }, Yt = { class: "sk-stage-num" }, Xt = { class: "font-weight-medium" }, Zt = { class: "text-caption text-medium-emphasis mb-2" }, Qt = { class: "d-flex flex-wrap align-center ga-2" }, $t = { class: "font-weight-medium" }, en = { class: "text-caption" }, tn = {
1339
+ }, Qt = { class: "sk-stage" }, $t = { class: "d-flex align-center mb-1" }, en = { class: "sk-stage-num" }, tn = { class: "font-weight-medium" }, nn = { class: "text-caption text-medium-emphasis mb-2" }, rn = { class: "d-flex flex-wrap align-center ga-2" }, an = { class: "font-weight-medium" }, on = { class: "text-caption" }, sn = {
1340
1340
  key: 0,
1341
1341
  class: "text-caption mt-1"
1342
- }, nn = {
1342
+ }, cn = {
1343
1343
  key: 1,
1344
1344
  class: "text-caption mt-1"
1345
- }, rn = {
1345
+ }, ln = {
1346
1346
  key: 1,
1347
1347
  class: "text-medium-emphasis"
1348
- }, an = {
1348
+ }, un = {
1349
1349
  key: 2,
1350
1350
  class: "mt-1"
1351
- }, on = ["onClick"], sn = {
1351
+ }, dn = ["onClick"], fn = {
1352
1352
  key: 0,
1353
1353
  class: "sk-config"
1354
- }, cn = {
1354
+ }, pn = {
1355
1355
  key: 0,
1356
1356
  class: "text-caption text-medium-emphasis"
1357
- }, ln = { class: "d-flex flex-wrap align-center ga-2" }, un = { class: "font-weight-medium" }, dn = { class: "text-caption" }, fn = {
1357
+ }, mn = { class: "d-flex flex-wrap align-center ga-2" }, hn = { class: "font-weight-medium" }, gn = { class: "text-caption" }, _n = {
1358
1358
  key: 0,
1359
1359
  class: "text-caption mt-1"
1360
- }, pn = {
1360
+ }, vn = {
1361
1361
  key: 1,
1362
1362
  class: "text-caption mt-1 text-medium-emphasis"
1363
- }, mn = {
1363
+ }, yn = {
1364
1364
  key: 2,
1365
1365
  class: "mt-1"
1366
- }, hn = { class: "sk-impact-bar" }, gn = ["title"], _n = { class: "text-caption" }, vn = {
1366
+ }, bn = { class: "sk-impact-bar" }, xn = ["title"], Sn = { class: "text-caption" }, Cn = {
1367
1367
  key: 1,
1368
1368
  class: "text-caption text-medium-emphasis"
1369
- }, yn = {
1369
+ }, wn = {
1370
1370
  key: 3,
1371
1371
  class: "mt-1"
1372
- }, bn = ["onClick"], Q = {
1372
+ }, Tn = ["onClick"], En = {
1373
1373
  key: 0,
1374
1374
  class: "sk-config"
1375
- }, xn = { class: "sk-nav" }, Sn = { class: "d-flex flex-wrap align-center ga-2" }, Cn = { class: "text-caption mt-1" }, wn = {
1375
+ }, Dn = { class: "sk-nav" }, Q = { class: "d-flex flex-wrap align-center ga-2" }, On = { class: "text-caption mt-1" }, kn = {
1376
1376
  key: 0,
1377
1377
  class: "text-caption mt-1"
1378
- }, Tn = { class: "sk-nav" }, En = { class: "d-flex flex-wrap align-center ga-2" }, Dn = { class: "text-caption mt-1" }, On = {
1378
+ }, An = { class: "sk-nav" }, jn = { class: "d-flex flex-wrap align-center ga-2" }, Mn = { class: "text-caption mt-1" }, Nn = {
1379
1379
  key: 0,
1380
1380
  class: "text-caption mt-1"
1381
- }, kn = {
1381
+ }, Pn = {
1382
1382
  key: 0,
1383
1383
  class: "text-caption text-medium-emphasis"
1384
- }, An = {
1384
+ }, Fn = {
1385
1385
  key: 3,
1386
1386
  class: "text-caption"
1387
- }, jn = {
1387
+ }, In = {
1388
1388
  key: 0,
1389
1389
  class: "sk-stage-arrow"
1390
- }, Mn = {
1390
+ }, Ln = {
1391
1391
  key: 0,
1392
1392
  class: "text-caption text-medium-emphasis mt-3"
1393
1393
  }, $ = /* @__PURE__ */ K(/* @__PURE__ */ c({
@@ -1414,7 +1414,7 @@ var ae = {
1414
1414
  }
1415
1415
  }, regStat = (e) => l.stats?.regulators.find((t) => t.name === e);
1416
1416
  function regStatText(e) {
1417
- return `In these runs: active (×>1) in ${e.runsActive}/${e.runs}, mean ×${e.meanMultiplier.toFixed(2)}, max ×${e.maxMultiplier.toFixed(2)}. Last: ${I(e.last)}.`;
1417
+ return `In these runs: active (×>1) in ${e.runsActive}/${e.runs}, mean ×${e.meanMultiplier.toFixed(2)}, max ×${e.maxMultiplier.toFixed(2)}. Last: ${L(e.last)}.`;
1418
1418
  }
1419
1419
  let _ = {
1420
1420
  gate: "Gate: its penalties mean not ready yet; regulators will not lift what it penalized.",
@@ -1432,7 +1432,7 @@ var ae = {
1432
1432
  help: `${_.gate} Its class declares no kind, so it counts as a gate.`
1433
1433
  };
1434
1434
  }
1435
- let b = t(() => ee(l.strategies, l.courseId)), S = t(() => new Map((l.stats?.generators ?? []).map((e) => [e.name, e]))), C = t(() => new Map((l.stats?.filters ?? []).map((e) => [e.name, e]))), genStat = (e) => S.value.get(e), filterStat = (e) => C.value.get(e), w = t(() => {
1435
+ let b = t(() => ie(l.strategies, l.courseId)), S = t(() => new Map((l.stats?.generators ?? []).map((e) => [e.name, e]))), C = t(() => new Map((l.stats?.filters ?? []).map((e) => [e.name, e]))), genStat = (e) => S.value.get(e), filterStat = (e) => C.value.get(e), w = t(() => {
1436
1436
  let e = [...b.value.notes], t = l.stats;
1437
1437
  if (!t) return e;
1438
1438
  for (let t of b.value.filters) {
@@ -1498,8 +1498,8 @@ var ae = {
1498
1498
  }
1499
1499
  return (t, c) => {
1500
1500
  let l = g("v-chip"), m = g("v-alert"), _ = g("v-icon");
1501
- return p(), i("div", Ut, [
1502
- a("div", Wt, [
1501
+ return p(), i("div", Jt, [
1502
+ a("div", Yt, [
1503
1503
  s(l, {
1504
1504
  size: "small",
1505
1505
  variant: "tonal",
@@ -1508,8 +1508,8 @@ var ae = {
1508
1508
  default: x(() => [o(v(b.value.kind === "default" ? "default pipeline: the course has no strategy docs" : "assembled from strategy docs"), 1)]),
1509
1509
  _: 1
1510
1510
  }, 8, ["color"]),
1511
- a("span", Gt, v(b.value.generators.length) + " generator(s) · " + v(b.value.filters.length) + " filter(s) ", 1),
1512
- t.stats ? (p(), i("span", Kt, " · run stats" + v(t.statsLabel ? ` for ${t.statsLabel}` : "") + ": " + v(t.stats.runs) + " runs over " + v(t.stats.sessions) + " sessions, " + v(y(fmtTime)(t.stats.firstRunAt)) + " – " + v(y(fmtTime)(t.stats.lastRunAt)), 1)) : r("", !0)
1511
+ a("span", Xt, v(b.value.generators.length) + " generator(s) · " + v(b.value.filters.length) + " filter(s) ", 1),
1512
+ t.stats ? (p(), i("span", Zt, " · run stats" + v(t.statsLabel ? ` for ${t.statsLabel}` : "") + ": " + v(t.stats.runs) + " runs over " + v(t.stats.sessions) + " sessions, " + v(y(fmtTime)(t.stats.firstRunAt)) + " – " + v(y(fmtTime)(t.stats.lastRunAt)), 1)) : r("", !0)
1513
1513
  ]),
1514
1514
  (p(!0), i(e, null, h(b.value.skipped, (e) => (p(), n(m, {
1515
1515
  key: e.strategy._id,
@@ -1546,16 +1546,16 @@ var ae = {
1546
1546
  default: x(() => [o(v(e), 1)]),
1547
1547
  _: 2
1548
1548
  }, 1024))), 128)),
1549
- (p(!0), i(e, null, h(y(W), (m, g) => (p(), i("div", { key: m.key }, [a("div", qt, [
1550
- a("div", Jt, [a("span", Yt, v(g + 1), 1), a("span", Xt, v(m.title), 1)]),
1551
- a("div", Zt, v(m.summary), 1),
1549
+ (p(!0), i(e, null, h(y(U), (m, g) => (p(), i("div", { key: m.key }, [a("div", Qt, [
1550
+ a("div", $t, [a("span", en, v(g + 1), 1), a("span", tn, v(m.title), 1)]),
1551
+ a("div", nn, v(m.summary), 1),
1552
1552
  m.key === "generate" ? (p(!0), i(e, { key: 0 }, h(b.value.generators, (n) => (p(), i("div", {
1553
1553
  key: n.name,
1554
1554
  class: "sk-nav"
1555
1555
  }, [
1556
- a("div", Qt, [
1557
- a("span", $t, v(n.name), 1),
1558
- a("code", en, v(n.implementingClass), 1),
1556
+ a("div", rn, [
1557
+ a("span", an, v(n.name), 1),
1558
+ a("code", on, v(n.implementingClass), 1),
1559
1559
  s(l, {
1560
1560
  size: "x-small",
1561
1561
  variant: "outlined",
@@ -1565,24 +1565,24 @@ var ae = {
1565
1565
  _: 2
1566
1566
  }, 1032, ["color"])
1567
1567
  ]),
1568
- n.strategy?.description ? (p(), i("div", tn, v(n.strategy.description), 1)) : r("", !0),
1569
- t.stats ? (p(), i("div", nn, [genStat(n.name) ? (p(), i(e, { key: 0 }, [o(v(fmtNum(genStat(n.name).meanCards)) + " candidates/run (" + v(fmtNum(genStat(n.name).meanNew)) + " new, " + v(fmtNum(genStat(n.name).meanReview)) + " review) · top score " + v(genStat(n.name).topScoreLast.toFixed(2)) + " last, " + v(genStat(n.name).topScoreMax.toFixed(2)) + " max ", 1), t.stats.runsWithSelection > 0 ? (p(), i(e, { key: 0 }, [
1568
+ n.strategy?.description ? (p(), i("div", sn, v(n.strategy.description), 1)) : r("", !0),
1569
+ t.stats ? (p(), i("div", cn, [genStat(n.name) ? (p(), i(e, { key: 0 }, [o(v(fmtNum(genStat(n.name).meanCards)) + " candidates/run (" + v(fmtNum(genStat(n.name).meanNew)) + " new, " + v(fmtNum(genStat(n.name).meanReview)) + " review) · top score " + v(genStat(n.name).topScoreLast.toFixed(2)) + " last, " + v(genStat(n.name).topScoreMax.toFixed(2)) + " max ", 1), t.stats.runsWithSelection > 0 ? (p(), i(e, { key: 0 }, [
1570
1570
  c[1] || (c[1] = o(" · ")),
1571
1571
  a("strong", null, v(genStat(n.name).selected), 1),
1572
1572
  c[2] || (c[2] = o(" selected ")),
1573
1573
  genStat(n.name).firstAttempts > 0 ? (p(), i(e, { key: 0 }, [o(" · first attempts " + v(genStat(n.name).firstAttemptsCorrect) + "/" + v(genStat(n.name).firstAttempts) + " correct ", 1), a("span", { class: u(y(accuracyClass)(accuracyOf(genStat(n.name)))) }, " (" + v(Math.round(100 * accuracyOf(genStat(n.name)))) + "%) ", 3)], 64)) : r("", !0)
1574
- ], 64)) : r("", !0)], 64)) : (p(), i("span", rn, "absent from these runs"))])) : r("", !0),
1575
- prettyConfig(n.strategy?.serializedData) ? (p(), i("div", an, [a("a", {
1574
+ ], 64)) : r("", !0)], 64)) : (p(), i("span", ln, "absent from these runs"))])) : r("", !0),
1575
+ prettyConfig(n.strategy?.serializedData) ? (p(), i("div", un, [a("a", {
1576
1576
  class: "sk-config-link text-caption",
1577
1577
  onClick: (e) => toggleConfig(`g:${n.name}`)
1578
- }, v(T.value.has(`g:${n.name}`) ? "Hide" : "Show") + " config ", 9, on), T.value.has(`g:${n.name}`) ? (p(), i("pre", sn, v(prettyConfig(n.strategy?.serializedData)), 1)) : r("", !0)])) : r("", !0)
1579
- ]))), 128)) : m.key === "filter" ? (p(), i(e, { key: 1 }, [b.value.filters.length === 0 ? (p(), i("div", cn, "No filters.")) : r("", !0), (p(!0), i(e, null, h(b.value.filters, (m) => (p(), i("div", {
1578
+ }, v(T.value.has(`g:${n.name}`) ? "Hide" : "Show") + " config ", 9, dn), T.value.has(`g:${n.name}`) ? (p(), i("pre", fn, v(prettyConfig(n.strategy?.serializedData)), 1)) : r("", !0)])) : r("", !0)
1579
+ ]))), 128)) : m.key === "filter" ? (p(), i(e, { key: 1 }, [b.value.filters.length === 0 ? (p(), i("div", pn, "No filters.")) : r("", !0), (p(!0), i(e, null, h(b.value.filters, (m) => (p(), i("div", {
1580
1580
  key: m.name,
1581
1581
  class: "sk-nav"
1582
1582
  }, [
1583
- a("div", ln, [
1584
- a("span", un, v(m.name), 1),
1585
- a("code", dn, v(m.implementingClass), 1),
1583
+ a("div", mn, [
1584
+ a("span", hn, v(m.name), 1),
1585
+ a("code", gn, v(m.implementingClass), 1),
1586
1586
  s(l, {
1587
1587
  size: "x-small",
1588
1588
  variant: "outlined",
@@ -1609,65 +1609,65 @@ var ae = {
1609
1609
  _: 2
1610
1610
  }, 1032, ["color", "title"])
1611
1611
  ]),
1612
- m.strategy?.description ? (p(), i("div", fn, v(m.strategy.description), 1)) : m.strategy ? r("", !0) : (p(), i("div", pn, " Built in code; no strategy document. ")),
1613
- t.stats ? (p(), i("div", mn, [filterStat(m.name) ? (p(), i(e, { key: 0 }, [a("div", hn, [(p(!0), i(e, null, h(impactParts(filterStat(m.name)), (e) => (p(), i("div", {
1612
+ m.strategy?.description ? (p(), i("div", _n, v(m.strategy.description), 1)) : m.strategy ? r("", !0) : (p(), i("div", vn, " Built in code; no strategy document. ")),
1613
+ t.stats ? (p(), i("div", yn, [filterStat(m.name) ? (p(), i(e, { key: 0 }, [a("div", bn, [(p(!0), i(e, null, h(impactParts(filterStat(m.name)), (e) => (p(), i("div", {
1614
1614
  key: e.key,
1615
1615
  class: u(`bg-${e.color}`),
1616
1616
  style: d({ width: `${e.share * 100}%` }),
1617
1617
  title: `${e.key}: ${e.count}`
1618
- }, null, 14, gn))), 128))]), a("div", _n, [o(" over " + v(filterStat(m.name).runs) + " runs: ", 1), (p(!0), i(e, null, h(impactParts(filterStat(m.name)), (e) => (p(), i("span", {
1618
+ }, null, 14, xn))), 128))]), a("div", Sn, [o(" over " + v(filterStat(m.name).runs) + " runs: ", 1), (p(!0), i(e, null, h(impactParts(filterStat(m.name)), (e) => (p(), i("span", {
1619
1619
  key: e.key,
1620
1620
  class: "mr-2"
1621
- }, [a("span", { class: u(`text-${e.color}`) }, "●", 2), o(" " + v(e.key) + " " + v(fmtPct(e.share)), 1)]))), 128))])], 64)) : (p(), i("span", vn, "absent from these runs"))])) : r("", !0),
1622
- prettyConfig(m.strategy?.serializedData) ? (p(), i("div", yn, [a("a", {
1621
+ }, [a("span", { class: u(`text-${e.color}`) }, "●", 2), o(" " + v(e.key) + " " + v(fmtPct(e.share)), 1)]))), 128))])], 64)) : (p(), i("span", Cn, "absent from these runs"))])) : r("", !0),
1622
+ prettyConfig(m.strategy?.serializedData) ? (p(), i("div", wn, [a("a", {
1623
1623
  class: "sk-config-link text-caption",
1624
1624
  onClick: (e) => toggleConfig(`f:${m.name}`)
1625
- }, v(T.value.has(`f:${m.name}`) ? "Hide" : "Show") + " config ", 9, bn), T.value.has(`f:${m.name}`) ? (p(), i("pre", Q, v(prettyConfig(m.strategy?.serializedData)), 1)) : r("", !0)])) : r("", !0)
1625
+ }, v(T.value.has(`f:${m.name}`) ? "Hide" : "Show") + " config ", 9, Tn), T.value.has(`f:${m.name}`) ? (p(), i("pre", En, v(prettyConfig(m.strategy?.serializedData)), 1)) : r("", !0)])) : r("", !0)
1626
1626
  ]))), 128))], 64)) : m.key === "regulate" ? (p(), i(e, { key: 2 }, [
1627
- a("div", xn, [
1628
- a("div", Sn, [c[5] || (c[5] = a("span", { class: "font-weight-medium" }, "Review mass", -1)), s(l, {
1627
+ a("div", Dn, [
1628
+ a("div", Q, [c[5] || (c[5] = a("span", { class: "font-weight-medium" }, "Review mass", -1)), s(l, {
1629
1629
  size: "x-small",
1630
1630
  variant: "outlined"
1631
1631
  }, {
1632
1632
  default: x(() => c[4] || (c[4] = [o("on review cards")])),
1633
1633
  _: 1
1634
1634
  })]),
1635
- a("div", Cn, " Each due review weighs its SRS urgency (0–1) times the filters' net effect on it. Above " + v(b.value.regulators.reviewMass.healthyMass) + " card-equivalents, every review is multiplied by ×" + v(b.value.regulators.reviewMass.rate) + " per " + v(b.value.regulators.reviewMass.healthyMass) + " in excess (uncapped). Reviews without an urgency weigh their score against " + v(b.value.regulators.reviewMass.referenceScore) + ". ", 1),
1636
- regStat("review-mass") ? (p(), i("div", wn, v(regStatText(regStat("review-mass"))), 1)) : r("", !0)
1635
+ a("div", On, " Each due review weighs its SRS urgency (0–1) times the filters' net effect on it. Above " + v(b.value.regulators.reviewMass.healthyMass) + " card-equivalents, every review is multiplied by ×" + v(b.value.regulators.reviewMass.rate) + " per " + v(b.value.regulators.reviewMass.healthyMass) + " in excess (uncapped). Reviews without an urgency weigh their score against " + v(b.value.regulators.reviewMass.referenceScore) + ". ", 1),
1636
+ regStat("review-mass") ? (p(), i("div", kn, v(regStatText(regStat("review-mass"))), 1)) : r("", !0)
1637
1637
  ]),
1638
- a("div", Tn, [
1639
- a("div", En, [c[7] || (c[7] = a("span", { class: "font-weight-medium" }, "Intake", -1)), s(l, {
1638
+ a("div", An, [
1639
+ a("div", jn, [c[7] || (c[7] = a("span", { class: "font-weight-medium" }, "Intake", -1)), s(l, {
1640
1640
  size: "x-small",
1641
1641
  variant: "outlined"
1642
1642
  }, {
1643
1643
  default: x(() => c[6] || (c[6] = [o("on new cards no gate penalized")])),
1644
1644
  _: 1
1645
1645
  })]),
1646
- a("div", Dn, " ×" + v(b.value.regulators.intake.rate) + " per " + v(b.value.regulators.intake.scaleHours) + " hours since a new card was last presented (uncapped). The clock stops while no eligible new card exists. ", 1),
1647
- regStat("intake") ? (p(), i("div", On, v(regStatText(regStat("intake"))), 1)) : r("", !0)
1646
+ a("div", Mn, " ×" + v(b.value.regulators.intake.rate) + " per " + v(b.value.regulators.intake.scaleHours) + " hours since a new card was last presented (uncapped). The clock stops while no eligible new card exists. ", 1),
1647
+ regStat("intake") ? (p(), i("div", Nn, v(regStatText(regStat("intake"))), 1)) : r("", !0)
1648
1648
  ]),
1649
- t.stats && t.stats.regulators.length === 0 ? (p(), i("div", kn, " None of these runs recorded regulator readings (recorded from 0.2.29). ")) : r("", !0)
1650
- ], 64)) : m.key === "select" && t.stats && t.stats.runsWithSelection > 0 ? (p(), i("div", An, [
1649
+ t.stats && t.stats.regulators.length === 0 ? (p(), i("div", Pn, " None of these runs recorded regulator readings (recorded from 0.2.29). ")) : r("", !0)
1650
+ ], 64)) : m.key === "select" && t.stats && t.stats.runsWithSelection > 0 ? (p(), i("div", Fn, [
1651
1651
  o(v(t.stats.selectedUnattributed) + " selected card(s) had no generator: forced in by a hint's ", 1),
1652
1652
  c[8] || (c[8] = a("code", null, "requireCards", -1)),
1653
1653
  c[9] || (c[9] = o(". "))
1654
1654
  ])) : r("", !0)
1655
- ]), g < y(W).length - 1 ? (p(), i("div", jn, [s(_, { size: "small" }, {
1655
+ ]), g < y(U).length - 1 ? (p(), i("div", In, [s(_, { size: "small" }, {
1656
1656
  default: x(() => c[10] || (c[10] = [o("mdi-arrow-down")])),
1657
1657
  _: 1
1658
1658
  })])) : r("", !0)]))), 128)),
1659
- t.stats && t.stats.runsWithSelection === 0 ? (p(), i("div", Mn, " None of these runs recorded which cards they selected (recorded from 0.2.28), so selection and first-attempt counts are not shown. ")) : r("", !0)
1659
+ t.stats && t.stats.runsWithSelection === 0 ? (p(), i("div", Ln, " None of these runs recorded which cards they selected (recorded from 0.2.28), so selection and first-attempt counts are not shown. ")) : r("", !0)
1660
1660
  ]);
1661
1661
  };
1662
1662
  }
1663
- }), [["__scopeId", "data-v-24b6038f"]]), Nn = /* @__PURE__ */ c({
1663
+ }), [["__scopeId", "data-v-24b6038f"]]), Rn = /* @__PURE__ */ c({
1664
1664
  __name: "LearnerDiagnostics",
1665
1665
  props: {
1666
1666
  dataset: {},
1667
1667
  interpreters: {}
1668
1668
  },
1669
1669
  setup(a) {
1670
- let c = a, l = m("sessions"), u = m(null), d = m(void 0), f = t(() => P(c.dataset));
1670
+ let c = a, l = m("sessions"), u = m(null), d = m(void 0), f = t(() => F(c.dataset));
1671
1671
  function openCard(e) {
1672
1672
  d.value = void 0, l.value = "cards", setTimeout(() => d.value = e);
1673
1673
  }
@@ -1747,6 +1747,6 @@ var ae = {
1747
1747
  }
1748
1748
  });
1749
1749
  //#endregion
1750
- export { q as CardDossierDetail, J as LearnerCardHistory, ie as LearnerDatasetSource, Nn as LearnerDiagnostics, X as LearnerSessionDetail, Z as LearnerSessionList, $ as PipelineOverview, Y as RunDetail, downloadLearnerDump, useLearnerDataset };
1750
+ export { q as CardDossierDetail, J as LearnerCardHistory, ce as LearnerDatasetSource, Rn as LearnerDiagnostics, X as LearnerSessionDetail, Z as LearnerSessionList, $ as PipelineOverview, Y as RunDetail, downloadLearnerDump, useLearnerDataset };
1751
1751
 
1752
1752
  //# sourceMappingURL=common-ui-admin.es.js.map