@vue-skuilder/common-ui 0.2.30 → 0.2.32

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,34 @@ 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
- class: "mb-2"
605
- }, Fe = {
604
+ class: "mb-2 sk-mini-line text-medium-emphasis"
605
+ }, Re = {
606
606
  key: 3,
607
607
  class: "mb-2"
608
- }, Ie = {
609
- key: 1,
610
- 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 = {
608
+ }, ze = {
612
609
  key: 4,
613
610
  class: "mb-2"
614
- }, qe = { class: "sk-hint-block" }, Je = {
611
+ }, Be = { class: "text-caption font-weight-medium" }, Ve = {
612
+ key: 0,
613
+ class: "text-medium-emphasis font-weight-regular"
614
+ }, He = {
615
+ key: 1,
616
+ title: "runner-up"
617
+ }, Ue = ["onClick"], We = { class: "text-right" }, Ge = { class: "text-caption font-weight-medium" }, Ke = ["onClick"], qe = { class: "text-medium-emphasis" }, Je = { class: "text-no-wrap" }, Ye = { class: "text-no-wrap" }, Xe = { class: "text-right text-no-wrap" }, Ze = { class: "text-caption" }, Qe = {
615
618
  key: 5,
619
+ class: "mb-2"
620
+ }, $e = { class: "sk-hint-block" }, et = {
621
+ key: 6,
616
622
  class: "text-caption text-medium-emphasis"
617
- }, Ye = { key: 2 }, Y = /* @__PURE__ */ K(/* @__PURE__ */ c({
623
+ }, tt = { key: 2 }, Y = /* @__PURE__ */ K(/* @__PURE__ */ c({
618
624
  __name: "RunDetail",
619
625
  props: { run: {} },
620
626
  emits: ["open-card"],
@@ -628,14 +634,11 @@ var ae = {
628
634
  label: "top-generated new card (sunk)",
629
635
  card: e.topGenerated
630
636
  }), t;
631
- });
632
- function fmtScore(e) {
633
- return Math.abs(e) >= .01 || e === 0 ? e.toFixed(2) : e.toExponential(1);
634
- }
637
+ }), _ = t(() => z(d.run).map((e) => `${e.source} ${e.count}`).join(" · "));
635
638
  return (t, c) => {
636
639
  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, {
640
+ return p(), i("div", De, [
641
+ 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
642
  density: "compact",
640
643
  class: "sk-mini-table"
641
644
  }, {
@@ -647,14 +650,14 @@ var ae = {
647
650
  a("th", { class: "text-right" }, "top")
648
651
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(t.run.generators, (e) => (p(), i("tr", { key: e.name }, [
649
652
  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)
653
+ a("td", ke, v(e.cardCount), 1),
654
+ a("td", Ae, v(e.newCount), 1),
655
+ a("td", je, v(e.reviewCount), 1),
656
+ a("td", Me, v(e.topScore.toFixed(2)), 1)
654
657
  ]))), 128))])]),
655
658
  _: 1
656
659
  })])) : 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, {
660
+ 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
661
  density: "compact",
659
662
  class: "sk-mini-table"
660
663
  }, {
@@ -668,26 +671,27 @@ var ae = {
668
671
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(t.run.filters, (e) => (p(), i("tr", { key: e.name }, [
669
672
  a("td", null, v(e.name), 1),
670
673
  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),
674
+ a("td", Pe, v(e.boosted), 1),
675
+ a("td", Fe, v(e.penalized), 1),
676
+ a("td", Ie, v(e.passed), 1),
674
677
  a("td", { class: u(["text-right", e.removed > 0 ? "text-error" : ""]) }, v(e.removed), 3)
675
678
  ]))), 128))])]),
676
679
  _: 1
677
680
  })])) : 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", {
681
+ t.run.versions ? (p(), i("div", Le, " strategies " + v(t.run.versions.strategies ?? "—") + " · content " + v(t.run.versions.content ?? "—"), 1)) : r("", !0),
682
+ t.run.regulators?.length ? (p(), i("div", Re, [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
683
  key: e.name,
680
684
  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, {
685
+ }, [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),
686
+ t.run.cards?.length ? (p(), i("div", ze, [a("div", Be, [c[5] || (c[5] = o(" selection ")), _.value ? (p(), i("span", Ve, " · by source: " + v(_.value), 1)) : r("", !0)]), s(l, {
683
687
  density: "compact",
684
688
  class: "sk-mini-table"
685
689
  }, {
686
- default: x(() => [c[6] || (c[6] = a("thead", null, [a("tr", null, [
690
+ default: x(() => [c[7] || (c[7] = a("thead", null, [a("tr", null, [
687
691
  a("th"),
688
692
  a("th", null, "card"),
689
693
  a("th", null, "origin"),
690
- a("th", null, "generator"),
694
+ a("th", null, "source"),
691
695
  a("th", { class: "text-right" }, "score")
692
696
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(t.run.cards, (e) => (p(), i("tr", {
693
697
  key: e.cardId,
@@ -698,67 +702,67 @@ var ae = {
698
702
  size: "x-small",
699
703
  color: "success"
700
704
  }, {
701
- default: x(() => c[5] || (c[5] = [o("mdi-check")])),
705
+ default: x(() => c[6] || (c[6] = [o("mdi-check")])),
702
706
  _: 1
703
- })) : (p(), i("span", Ie, "·"))]),
707
+ })) : (p(), i("span", He, "·"))]),
704
708
  a("td", null, [a("a", {
705
709
  class: "sk-card-link",
706
710
  onClick: (t) => f("open-card", e.cardId)
707
- }, v(e.cardId), 9, Le)]),
711
+ }, v(e.cardId), 9, Ue)]),
708
712
  a("td", null, v(e.origin), 1),
709
- a("td", null, v(e.generator ?? "—"), 1),
710
- a("td", Re, v(fmtScore(e.score)), 1)
713
+ a("td", null, v(y(R)(e)), 1),
714
+ a("td", We, v(y(j)(e.score)), 1)
711
715
  ], 2))), 128))])]),
712
716
  _: 1
713
717
  })])) : r("", !0),
714
718
  (p(!0), i(e, null, h(m.value, (t) => (p(), i("div", {
715
719
  key: t.label,
716
720
  class: "mb-2"
717
- }, [a("div", ze, [
721
+ }, [a("div", Ge, [
718
722
  o(v(t.label) + ": ", 1),
719
723
  a("a", {
720
724
  class: "sk-card-link",
721
725
  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)
726
+ }, v(t.card.cardId), 9, Ke),
727
+ a("span", qe, " (" + v(t.card.origin) + ", " + v(y(R)(t.card)) + ") final " + v(y(j)(t.card.score)), 1)
724
728
  ]), s(l, {
725
729
  density: "compact",
726
730
  class: "sk-mini-table"
727
731
  }, {
728
732
  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)
733
+ a("td", Je, v(e.action), 1),
734
+ a("td", Ye, v(e.strategyName), 1),
735
+ a("td", Xe, v(y(j)(e.score)), 1),
736
+ a("td", Ze, v(e.reason), 1)
733
737
  ]))), 128))])]),
734
738
  _: 2
735
739
  }, 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, [
740
+ t.run.hints ? (p(), i("div", Qe, [c[8] || (c[8] = a("div", { class: "text-caption font-weight-medium" }, "hints", -1)), a("pre", $e, v(JSON.stringify(t.run.hints, null, 2)), 1)])) : r("", !0),
741
+ t.run.discardedTail ? (p(), i("div", et, [
738
742
  o(" discarded tail: " + v(t.run.discardedTail.count) + " cards ", 1),
739
743
  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
744
  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)
745
+ t.run.discardedTail.note ? (p(), i("div", tt, v(t.run.discardedTail.note), 1)) : r("", !0)
742
746
  ])) : r("", !0)
743
747
  ]);
744
748
  };
745
749
  }
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 = {
750
+ }), [["__scopeId", "data-v-90c88783"]]), nt = { class: "d-flex align-center flex-wrap mb-4 ga-2" }, rt = { class: "text-caption text-medium-emphasis" }, it = { class: "text-right" }, at = { class: "text-right" }, ot = {
747
751
  key: 1,
748
752
  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 = {
753
+ }, st = { class: "sk-hint-block" }, ct = { class: "sk-hint-block" }, lt = { class: "text-caption text-medium-emphasis mb-4" }, ut = { class: "text-right" }, dt = { class: "text-right" }, ft = { class: "text-disabled" }, pt = { class: "text-right" }, mt = { class: "d-flex flex-wrap ga-5" }, ht = { class: "text-caption text-medium-emphasis" }, gt = { class: "text-h6 text-success" }, _t = { class: "text-caption text-medium-emphasis" }, vt = { class: "text-h6 text-error" }, yt = { class: "text-h6" }, bt = { class: "text-caption text-disabled" }, xt = { class: "d-flex align-center flex-wrap mb-2 ga-3" }, St = {
750
754
  key: 4,
751
755
  class: "sk-timeline"
752
- }, _t = { class: "sk-tl-time text-caption text-disabled" }, vt = { class: "sk-tl-gutter" }, yt = {
756
+ }, Ct = { class: "sk-tl-time text-caption text-disabled" }, wt = { class: "sk-tl-gutter" }, Tt = {
753
757
  key: 0,
754
758
  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 = {
759
+ }, Et = { class: "d-flex align-center flex-wrap ga-1" }, Dt = { class: "font-weight-medium" }, Ot = { class: "text-caption text-medium-emphasis ml-2" }, kt = {
756
760
  key: 1,
757
761
  class: "text-caption text-error ml-2"
758
- }, wt = {
762
+ }, At = {
759
763
  key: 1,
760
764
  class: "sk-tl-body"
761
- }, Tt = ["title", "onClick"], Et = { class: "text-caption" }, Dt = { class: "text-caption text-medium-emphasis ml-2" }, Ot = {
765
+ }, jt = ["title", "onClick"], Mt = { class: "text-caption" }, Nt = { class: "text-caption text-medium-emphasis ml-2" }, Pt = {
762
766
  key: 0,
763
767
  class: "text-caption text-disabled ml-2"
764
768
  }, X = /* @__PURE__ */ K(/* @__PURE__ */ c({
@@ -770,17 +774,17 @@ var ae = {
770
774
  },
771
775
  emits: ["open-card"],
772
776
  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(() => {
777
+ 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
778
  let e = _.value?.timeline ?? [];
775
779
  return !D.value || D.value === "all" ? e : e.filter((e) => e.kind === D.value);
776
- }), N = m(/* @__PURE__ */ new Set());
780
+ }), M = m(/* @__PURE__ */ new Set());
777
781
  function toggle(e) {
778
- let t = new Set(N.value);
779
- t.has(e) ? t.delete(e) : t.add(e), N.value = t;
782
+ let t = new Set(M.value);
783
+ t.has(e) ? t.delete(e) : t.add(e), M.value = t;
780
784
  }
781
785
  let { copied: P, copy: F } = useCopy();
782
786
  function asText() {
783
- return _.value ? V(d.dataset.username, _.value, {
787
+ return _.value ? ne(d.dataset.username, _.value, {
784
788
  servedTags: S.value,
785
789
  eloLedger: w.value
786
790
  }, d.interpreters) : "";
@@ -792,7 +796,7 @@ var ae = {
792
796
  return e.durationSeconds === null ? `— of ${t}` : `${A(e.durationSeconds)} of ${t}`;
793
797
  });
794
798
  function skillTags(e) {
795
- return e.filter((e) => M(d.interpreters, e)).slice(0, 3);
799
+ return e.filter((e) => N(d.interpreters, e)).slice(0, 3);
796
800
  }
797
801
  function fmtNum(e) {
798
802
  return e === null ? "—" : Number.isInteger(e) ? String(e) : e.toFixed(1);
@@ -810,9 +814,9 @@ var ae = {
810
814
  return e.kind === "run" ? "sk-tl-run" : e.isCorrect === !1 ? "sk-tl-fail" : "";
811
815
  }
812
816
  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");
817
+ 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
818
  return p(), i("div", null, [_.value ? (p(), i(e, { key: 1 }, [
815
- a("div", Xe, [
819
+ a("div", nt, [
816
820
  s(d, {
817
821
  size: "small",
818
822
  variant: "flat",
@@ -840,20 +844,20 @@ var ae = {
840
844
  key: e,
841
845
  size: "small",
842
846
  variant: "tonal",
843
- color: y(G)[e].color,
847
+ color: y(W)[e].color,
844
848
  title: y(C)[e].help
845
849
  }, {
846
850
  default: x(() => [s(m, {
847
851
  start: "",
848
852
  size: "small"
849
853
  }, {
850
- default: x(() => [o(v(y(G)[e].icon), 1)]),
854
+ default: x(() => [o(v(y(W)[e].icon), 1)]),
851
855
  _: 2
852
856
  }, 1024), o(" " + v(y(C)[e].label), 1)]),
853
857
  _: 2
854
858
  }, 1032, ["color", "title"]))), 128)),
855
859
  s(E),
856
- a("code", Ze, v(t.sessionId), 1),
860
+ a("code", rt, v(t.sessionId), 1),
857
861
  s(A, {
858
862
  variant: "text",
859
863
  size: "small",
@@ -875,19 +879,19 @@ var ae = {
875
879
  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
880
  _: 1
877
881
  })) : r("", !0),
878
- s(U, { class: "mb-2" }, {
879
- default: x(() => [s(V, {
882
+ s(B, { class: "mb-2" }, {
883
+ default: x(() => [s(z, {
880
884
  cols: "12",
881
885
  md: "6"
882
886
  }, {
883
- default: x(() => [s(B, {
887
+ default: x(() => [s(R, {
884
888
  variant: "outlined",
885
889
  class: "pa-3 h-100"
886
890
  }, {
887
891
  default: x(() => [
888
892
  c[4] || (c[4] = a("div", { class: "text-subtitle-2 mb-1" }, "Learner state", -1)),
889
893
  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, {
894
+ _.value.summary.state.length ? (p(), n(L, {
891
895
  key: 0,
892
896
  density: "compact",
893
897
  class: "sk-mini-table"
@@ -899,21 +903,21 @@ var ae = {
899
903
  a("th", { class: "text-right" }, "Δ")
900
904
  ])], -1)), a("tbody", null, [(p(!0), i(e, null, h(_.value.summary.state, (e) => (p(), i("tr", { key: e.label }, [
901
905
  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),
906
+ a("td", it, v(fmtNum(e.from)), 1),
907
+ a("td", at, v(fmtNum(e.to)), 1),
904
908
  a("td", { class: u(["text-right", y(deltaClass)(e.delta)]) }, v(y(k)(e.delta)), 3)
905
909
  ]))), 128))])]),
906
910
  _: 1
907
- })) : (p(), i("div", et, "No state snapshot recorded."))
911
+ })) : (p(), i("div", ot, "No state snapshot recorded."))
908
912
  ]),
909
913
  _: 1
910
914
  })]),
911
915
  _: 1
912
- }), s(V, {
916
+ }), s(z, {
913
917
  cols: "12",
914
918
  md: "6"
915
919
  }, {
916
- default: x(() => [s(B, {
920
+ default: x(() => [s(R, {
917
921
  variant: "outlined",
918
922
  class: "pa-3 h-100"
919
923
  }, {
@@ -921,9 +925,9 @@ var ae = {
921
925
  c[6] || (c[6] = a("div", { class: "text-subtitle-2 mb-1" }, "Session hints", -1)),
922
926
  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
927
  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),
928
+ a("pre", st, v(fmtHints(b.value.config?.initHints)), 1),
925
929
  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)
930
+ a("pre", ct, v(fmtHints(b.value.finalHints)), 1)
927
931
  ]),
928
932
  _: 1
929
933
  })]),
@@ -931,8 +935,12 @@ var ae = {
931
935
  })]),
932
936
  _: 1
933
937
  }),
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, {
938
+ a("div", lt, [
939
+ 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),
940
+ 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),
941
+ b.value.versions ? (p(), i(e, { key: 1 }, [o(" · framework " + v(b.value.versions.framework), 1), b.value.versions.app ? (p(), i(e, { key: 0 }, [o(" · app " + v(b.value.versions.app), 1)], 64)) : r("", !0)], 64)) : r("", !0)
942
+ ]),
943
+ S.value.length ? (p(), n(R, {
936
944
  key: 1,
937
945
  variant: "outlined",
938
946
  class: "pa-3 mb-4"
@@ -940,7 +948,7 @@ var ae = {
940
948
  default: x(() => [
941
949
  c[11] || (c[11] = a("div", { class: "text-subtitle-2 mb-1" }, "Served tags", -1)),
942
950
  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, {
951
+ s(L, {
944
952
  density: "compact",
945
953
  class: "sk-mini-table"
946
954
  }, {
@@ -951,18 +959,18 @@ var ae = {
951
959
  a("th", { class: "text-right" }, "Accuracy"),
952
960
  a("th", { class: "text-right" }, "Time")
953
961
  ])], -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)
962
+ a("td", null, [a("code", { class: u(y(N)(t.interpreters, n.tag) ? "text-primary" : "") }, v(n.tag), 3)]),
963
+ a("td", ut, v(n.responses), 1),
964
+ a("td", dt, v(n.cards), 1),
965
+ 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", ft, "(" + v(n.correct) + "/" + v(n.correct + n.incorrect) + ")", 1)], 64))], 2),
966
+ a("td", pt, v((n.totalTimeMs / 1e3).toFixed(1)) + "s", 1)
959
967
  ]))), 128))])]),
960
968
  _: 1
961
969
  })
962
970
  ]),
963
971
  _: 1
964
972
  })) : r("", !0),
965
- w.value ? (p(), n(B, {
973
+ w.value ? (p(), n(R, {
966
974
  key: 2,
967
975
  variant: "outlined",
968
976
  class: "pa-3 mb-4"
@@ -970,20 +978,20 @@ var ae = {
970
978
  default: x(() => [
971
979
  c[15] || (c[15] = a("div", { class: "text-subtitle-2 mb-1" }, "ELO ledger", -1)),
972
980
  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, [
981
+ a("div", mt, [
974
982
  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)]),
983
+ a("div", null, [a("div", ht, "gained · " + v(w.value.wins) + " win(s)", 1), a("div", gt, v(y(k)(w.value.gained)), 1)]),
984
+ a("div", null, [a("div", _t, "lost · " + v(w.value.losses) + " loss(es)", 1), a("div", vt, v(y(k)(w.value.lost)), 1)]),
977
985
  a("div", null, [
978
986
  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)
987
+ a("div", yt, v(w.value.count), 1),
988
+ a("div", bt, "of " + v(T.value) + " response(s)", 1)
981
989
  ])
982
990
  ])
983
991
  ]),
984
992
  _: 1
985
993
  })) : r("", !0),
986
- a("div", ht, [c[17] || (c[17] = a("h2", { class: "text-h6" }, "Timeline", -1)), s(W, {
994
+ a("div", xt, [c[17] || (c[17] = a("h2", { class: "text-h6" }, "Timeline", -1)), s(V, {
987
995
  modelValue: D.value,
988
996
  "onUpdate:modelValue": c[1] || (c[1] = (e) => D.value = e),
989
997
  density: "compact",
@@ -1022,20 +1030,20 @@ var ae = {
1022
1030
  }, {
1023
1031
  default: x(() => c[18] || (c[18] = [o("Nothing recorded for this session.")])),
1024
1032
  _: 1
1025
- })) : (p(), i("div", gt, [(p(!0), i(e, null, h(j.value, (l, g) => (p(), i("div", {
1033
+ })) : (p(), i("div", St, [(p(!0), i(e, null, h(j.value, (l, g) => (p(), i("div", {
1026
1034
  key: g,
1027
1035
  class: u(["sk-tl-row", rowClass(l)])
1028
1036
  }, [
1029
- a("div", _t, v(y(fmtClock)(l.at)), 1),
1030
- a("div", vt, [s(m, {
1037
+ a("div", Ct, v(y(fmtClock)(l.at)), 1),
1038
+ a("div", wt, [s(m, {
1031
1039
  size: "small",
1032
1040
  color: entryColor(l)
1033
1041
  }, {
1034
1042
  default: x(() => [o(v(entryIcon(l)), 1)]),
1035
1043
  _: 2
1036
1044
  }, 1032, ["color"])]),
1037
- l.kind === "run" ? (p(), i("div", yt, [a("div", bt, [
1038
- a("span", xt, v(l.run.label), 1),
1045
+ l.kind === "run" ? (p(), i("div", Tt, [a("div", Et, [
1046
+ a("span", Dt, v(l.run.label), 1),
1039
1047
  l.run.mode ? (p(), n(d, {
1040
1048
  key: 0,
1041
1049
  size: "x-small",
@@ -1044,8 +1052,8 @@ var ae = {
1044
1052
  default: x(() => [o(v(l.run.mode), 1)]),
1045
1053
  _: 2
1046
1054
  }, 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),
1055
+ a("span", Ot, " generated " + v(l.run.generatedCount) + " → selected " + v(l.run.finalCount) + " (" + v(l.run.newSelected) + " new, " + v(l.run.reviewsSelected) + " review) ", 1),
1056
+ l.run.generatedCount > 0 && l.run.finalCount === 0 ? (p(), i("span", kt, " nothing survived ")) : r("", !0),
1049
1057
  typeof l.run.userElo == "number" ? (p(), n(d, {
1050
1058
  key: 2,
1051
1059
  size: "x-small",
@@ -1058,7 +1066,7 @@ var ae = {
1058
1066
  }, 1024)) : r("", !0),
1059
1067
  s(E),
1060
1068
  s(A, {
1061
- icon: N.value.has(l.run.runId) ? "mdi-chevron-up" : "mdi-chevron-down",
1069
+ icon: M.value.has(l.run.runId) ? "mdi-chevron-up" : "mdi-chevron-down",
1062
1070
  size: "x-small",
1063
1071
  variant: "text",
1064
1072
  onClick: (e) => toggle(l.run.runId)
@@ -1069,23 +1077,23 @@ var ae = {
1069
1077
  variant: "text",
1070
1078
  color: y(P) === l.run.runId ? "success" : void 0,
1071
1079
  title: "Copy run as text",
1072
- onClick: (e) => y(F)(y(L)(l.run), l.run.runId)
1080
+ onClick: (e) => y(F)(y(ee)(l.run), l.run.runId)
1073
1081
  }, null, 8, [
1074
1082
  "icon",
1075
1083
  "color",
1076
1084
  "onClick"
1077
1085
  ])
1078
- ]), N.value.has(l.run.runId) ? (p(), n(Y, {
1086
+ ]), M.value.has(l.run.runId) ? (p(), n(Y, {
1079
1087
  key: 0,
1080
1088
  run: l.run,
1081
1089
  class: "mt-1",
1082
1090
  onOpenCard: c[2] || (c[2] = (e) => f("open-card", e))
1083
- }, null, 8, ["run"])) : r("", !0)])) : (p(), i("div", wt, [
1091
+ }, null, 8, ["run"])) : r("", !0)])) : (p(), i("div", At, [
1084
1092
  a("a", {
1085
1093
  class: "sk-card-link",
1086
1094
  title: `Open ${l.cardId} in card history`,
1087
1095
  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),
1096
+ }, [o(v(l.questionType ?? "card") + " ", 1), a("code", Mt, v(y(shortId)(l.cardId)), 1)], 8, jt),
1089
1097
  (p(!0), i(e, null, h(skillTags(l.tags), (e) => (p(), n(d, {
1090
1098
  key: e,
1091
1099
  size: "x-small",
@@ -1096,8 +1104,8 @@ var ae = {
1096
1104
  default: x(() => [o(v(y(H)(t.interpreters, e)), 1)]),
1097
1105
  _: 2
1098
1106
  }, 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)),
1107
+ a("span", Nt, [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)]),
1108
+ l.userAnswer == null ? r("", !0) : (p(), i("span", Pt, "“" + v(y(O)(l.userAnswer)) + "”", 1)),
1101
1109
  l.elo ? (p(), i(e, { key: 1 }, [s(d, {
1102
1110
  size: "x-small",
1103
1111
  variant: "tonal",
@@ -1107,7 +1115,7 @@ var ae = {
1107
1115
  }, {
1108
1116
  default: x(() => [o(" ELO " + v(y(k)(l.elo.global.delta)), 1)]),
1109
1117
  _: 2
1110
- }, 1032, ["color", "title"]), (p(!0), i(e, null, h(y(R)(l.elo), (e) => (p(), n(d, {
1118
+ }, 1032, ["color", "title"]), (p(!0), i(e, null, h(y(te)(l.elo), (e) => (p(), n(d, {
1111
1119
  key: e.tag,
1112
1120
  size: "x-small",
1113
1121
  variant: "text",
@@ -1130,13 +1138,13 @@ var ae = {
1130
1138
  }))]);
1131
1139
  };
1132
1140
  }
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 = {
1141
+ }), [["__scopeId", "data-v-3cc6eb88"]]), Ft = { class: "text-h6" }, It = { class: "text-caption" }, Lt = { class: "d-flex align-center flex-wrap mb-3 ga-3" }, Rt = ["onClick"], zt = { class: "text-no-wrap" }, Bt = { class: "text-right" }, Vt = { class: "text-right" }, Ht = {
1134
1142
  key: 1,
1135
1143
  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 = {
1144
+ }, Ut = { class: "text-right" }, Wt = { class: "text-no-wrap text-caption" }, Gt = { class: "text-no-wrap text-caption" }, Kt = { key: 0 }, qt = {
1137
1145
  key: 0,
1138
1146
  class: "text-disabled"
1139
- }, Ht = { class: "text-right" }, Z = /* @__PURE__ */ K(/* @__PURE__ */ c({
1147
+ }, Jt = { class: "text-right" }, Z = /* @__PURE__ */ K(/* @__PURE__ */ c({
1140
1148
  __name: "LearnerSessionList",
1141
1149
  props: {
1142
1150
  dataset: {},
@@ -1144,7 +1152,7 @@ var ae = {
1144
1152
  },
1145
1153
  emits: ["open"],
1146
1154
  setup(c, { emit: l }) {
1147
- let d = c, f = l, _ = t(() => U(d.dataset, d.interpreters)), b = m("all"), S = t(() => {
1155
+ let d = c, f = l, _ = t(() => re(d.dataset, d.interpreters)), b = m("all"), S = t(() => {
1148
1156
  let e = /* @__PURE__ */ new Map();
1149
1157
  for (let t of _.value) for (let n of t.flags) e.set(n, (e.get(n) ?? 0) + 1);
1150
1158
  return [...e.entries()].map(([e, t]) => ({
@@ -1228,14 +1236,14 @@ var ae = {
1228
1236
  color: e.color,
1229
1237
  class: "pa-2 text-center"
1230
1238
  }, {
1231
- default: x(() => [a("div", kt, v(e.value), 1), a("div", At, v(e.label), 1)]),
1239
+ default: x(() => [a("div", Ft, v(e.value), 1), a("div", It, v(e.label), 1)]),
1232
1240
  _: 2
1233
1241
  }, 1032, ["color"])]),
1234
1242
  _: 2
1235
1243
  }, 1024))), 128))]),
1236
1244
  _: 1
1237
1245
  }),
1238
- a("div", jt, [s(O, {
1246
+ a("div", Lt, [s(O, {
1239
1247
  modelValue: b.value,
1240
1248
  "onUpdate:modelValue": c[0] || (c[0] = (e) => b.value = e),
1241
1249
  density: "compact",
@@ -1257,9 +1265,9 @@ var ae = {
1257
1265
  default: x(() => [s(D, {
1258
1266
  start: "",
1259
1267
  size: "small",
1260
- color: y(G)[e.flag].color
1268
+ color: y(W)[e.flag].color
1261
1269
  }, {
1262
- default: x(() => [o(v(y(G)[e.flag].icon), 1)]),
1270
+ default: x(() => [o(v(y(W)[e.flag].icon), 1)]),
1263
1271
  _: 2
1264
1272
  }, 1032, ["color"]), o(" " + v(y(C)[e.flag].label) + " (" + v(e.count) + ") ", 1)]),
1265
1273
  _: 2
@@ -1293,7 +1301,7 @@ var ae = {
1293
1301
  class: "sk-admin-row",
1294
1302
  onClick: (e) => f("open", t.doc.sessionId)
1295
1303
  }, [
1296
- a("td", Nt, v(y(fmtTime)(t.doc.startTime)), 1),
1304
+ a("td", zt, v(y(fmtTime)(t.doc.startTime)), 1),
1297
1305
  a("td", null, [s(j, {
1298
1306
  size: "x-small",
1299
1307
  variant: "flat",
@@ -1302,92 +1310,92 @@ var ae = {
1302
1310
  default: x(() => [o(v(t.doc.status), 1)]),
1303
1311
  _: 2
1304
1312
  }, 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", {
1313
+ a("td", Bt, v(t.doc.tally?.cardsPresented ?? "—"), 1),
1314
+ a("td", Vt, [t.accuracy === null ? (p(), i("span", Ht, "—")) : (p(), i("span", {
1307
1315
  key: 0,
1308
1316
  class: u(y(accuracyClass)(t.accuracy))
1309
1317
  }, 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)]),
1318
+ a("td", Ut, v(t.doc.runs?.length ?? 0), 1),
1319
+ a("td", Wt, v(clockText(t)), 1),
1320
+ a("td", Gt, [(p(!0), i(e, null, h(deltas(t), (t, n) => (p(), i(e, { key: t.label }, [n > 0 ? (p(), i("span", Kt, " · ")) : 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", qt, "—")) : r("", !0)]),
1313
1321
  a("td", null, [(p(!0), i(e, null, h(t.flags, (e) => (p(), n(D, {
1314
1322
  key: e,
1315
1323
  size: "small",
1316
1324
  class: "mr-1",
1317
- color: y(G)[e].color,
1325
+ color: y(W)[e].color,
1318
1326
  title: `${y(C)[e].label}: ${y(C)[e].help}`
1319
1327
  }, {
1320
- default: x(() => [o(v(y(G)[e].icon), 1)]),
1328
+ default: x(() => [o(v(y(W)[e].icon), 1)]),
1321
1329
  _: 2
1322
1330
  }, 1032, ["color", "title"]))), 128))]),
1323
- a("td", Ht, [s(D, {
1331
+ a("td", Jt, [s(D, {
1324
1332
  size: "small",
1325
1333
  class: "text-disabled"
1326
1334
  }, {
1327
1335
  default: x(() => c[2] || (c[2] = [o("mdi-chevron-right")])),
1328
1336
  _: 1
1329
1337
  })])
1330
- ], 8, Mt))), 128))])]),
1338
+ ], 8, Rt))), 128))])]),
1331
1339
  _: 1
1332
1340
  }))
1333
1341
  ]);
1334
1342
  };
1335
1343
  }
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 = {
1344
+ }), [["__scopeId", "data-v-5c46cc58"]]), Yt = { class: "sk-pipeline" }, Xt = { class: "d-flex flex-wrap align-center ga-2 mb-3" }, Zt = { class: "text-caption" }, Qt = {
1337
1345
  key: 0,
1338
1346
  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 = {
1347
+ }, $t = { class: "sk-stage" }, en = { class: "d-flex align-center mb-1" }, tn = { class: "sk-stage-num" }, nn = { class: "font-weight-medium" }, rn = { class: "text-caption text-medium-emphasis mb-2" }, an = { class: "d-flex flex-wrap align-center ga-2" }, on = { class: "font-weight-medium" }, sn = { class: "text-caption" }, cn = {
1340
1348
  key: 0,
1341
1349
  class: "text-caption mt-1"
1342
- }, nn = {
1350
+ }, ln = {
1343
1351
  key: 1,
1344
1352
  class: "text-caption mt-1"
1345
- }, rn = {
1353
+ }, un = {
1346
1354
  key: 1,
1347
1355
  class: "text-medium-emphasis"
1348
- }, an = {
1356
+ }, dn = {
1349
1357
  key: 2,
1350
1358
  class: "mt-1"
1351
- }, on = ["onClick"], sn = {
1359
+ }, fn = ["onClick"], pn = {
1352
1360
  key: 0,
1353
1361
  class: "sk-config"
1354
- }, cn = {
1362
+ }, mn = {
1355
1363
  key: 0,
1356
1364
  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 = {
1365
+ }, hn = { class: "d-flex flex-wrap align-center ga-2" }, gn = { class: "font-weight-medium" }, _n = { class: "text-caption" }, vn = {
1358
1366
  key: 0,
1359
1367
  class: "text-caption mt-1"
1360
- }, pn = {
1368
+ }, yn = {
1361
1369
  key: 1,
1362
1370
  class: "text-caption mt-1 text-medium-emphasis"
1363
- }, mn = {
1371
+ }, bn = {
1364
1372
  key: 2,
1365
1373
  class: "mt-1"
1366
- }, hn = { class: "sk-impact-bar" }, gn = ["title"], _n = { class: "text-caption" }, vn = {
1374
+ }, xn = { class: "sk-impact-bar" }, Sn = ["title"], Cn = { class: "text-caption" }, wn = {
1367
1375
  key: 1,
1368
1376
  class: "text-caption text-medium-emphasis"
1369
- }, yn = {
1377
+ }, Tn = {
1370
1378
  key: 3,
1371
1379
  class: "mt-1"
1372
- }, bn = ["onClick"], Q = {
1380
+ }, En = ["onClick"], Dn = {
1373
1381
  key: 0,
1374
1382
  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 = {
1383
+ }, Q = { class: "sk-nav" }, On = { class: "d-flex flex-wrap align-center ga-2" }, kn = { class: "text-caption mt-1" }, An = {
1376
1384
  key: 0,
1377
1385
  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 = {
1386
+ }, jn = { class: "sk-nav" }, Mn = { class: "d-flex flex-wrap align-center ga-2" }, Nn = { class: "text-caption mt-1" }, Pn = {
1379
1387
  key: 0,
1380
1388
  class: "text-caption mt-1"
1381
- }, kn = {
1389
+ }, Fn = {
1382
1390
  key: 0,
1383
1391
  class: "text-caption text-medium-emphasis"
1384
- }, An = {
1392
+ }, In = {
1385
1393
  key: 3,
1386
1394
  class: "text-caption"
1387
- }, jn = {
1395
+ }, Ln = {
1388
1396
  key: 0,
1389
1397
  class: "sk-stage-arrow"
1390
- }, Mn = {
1398
+ }, Rn = {
1391
1399
  key: 0,
1392
1400
  class: "text-caption text-medium-emphasis mt-3"
1393
1401
  }, $ = /* @__PURE__ */ K(/* @__PURE__ */ c({
@@ -1414,7 +1422,7 @@ var ae = {
1414
1422
  }
1415
1423
  }, regStat = (e) => l.stats?.regulators.find((t) => t.name === e);
1416
1424
  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)}.`;
1425
+ 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
1426
  }
1419
1427
  let _ = {
1420
1428
  gate: "Gate: its penalties mean not ready yet; regulators will not lift what it penalized.",
@@ -1432,7 +1440,7 @@ var ae = {
1432
1440
  help: `${_.gate} Its class declares no kind, so it counts as a gate.`
1433
1441
  };
1434
1442
  }
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(() => {
1443
+ 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
1444
  let e = [...b.value.notes], t = l.stats;
1437
1445
  if (!t) return e;
1438
1446
  for (let t of b.value.filters) {
@@ -1498,8 +1506,8 @@ var ae = {
1498
1506
  }
1499
1507
  return (t, c) => {
1500
1508
  let l = g("v-chip"), m = g("v-alert"), _ = g("v-icon");
1501
- return p(), i("div", Ut, [
1502
- a("div", Wt, [
1509
+ return p(), i("div", Yt, [
1510
+ a("div", Xt, [
1503
1511
  s(l, {
1504
1512
  size: "small",
1505
1513
  variant: "tonal",
@@ -1508,8 +1516,8 @@ var ae = {
1508
1516
  default: x(() => [o(v(b.value.kind === "default" ? "default pipeline: the course has no strategy docs" : "assembled from strategy docs"), 1)]),
1509
1517
  _: 1
1510
1518
  }, 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)
1519
+ a("span", Zt, v(b.value.generators.length) + " generator(s) · " + v(b.value.filters.length) + " filter(s) ", 1),
1520
+ t.stats ? (p(), i("span", Qt, " · 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
1521
  ]),
1514
1522
  (p(!0), i(e, null, h(b.value.skipped, (e) => (p(), n(m, {
1515
1523
  key: e.strategy._id,
@@ -1546,16 +1554,16 @@ var ae = {
1546
1554
  default: x(() => [o(v(e), 1)]),
1547
1555
  _: 2
1548
1556
  }, 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),
1557
+ (p(!0), i(e, null, h(y(U), (m, g) => (p(), i("div", { key: m.key }, [a("div", $t, [
1558
+ a("div", en, [a("span", tn, v(g + 1), 1), a("span", nn, v(m.title), 1)]),
1559
+ a("div", rn, v(m.summary), 1),
1552
1560
  m.key === "generate" ? (p(!0), i(e, { key: 0 }, h(b.value.generators, (n) => (p(), i("div", {
1553
1561
  key: n.name,
1554
1562
  class: "sk-nav"
1555
1563
  }, [
1556
- a("div", Qt, [
1557
- a("span", $t, v(n.name), 1),
1558
- a("code", en, v(n.implementingClass), 1),
1564
+ a("div", an, [
1565
+ a("span", on, v(n.name), 1),
1566
+ a("code", sn, v(n.implementingClass), 1),
1559
1567
  s(l, {
1560
1568
  size: "x-small",
1561
1569
  variant: "outlined",
@@ -1565,24 +1573,24 @@ var ae = {
1565
1573
  _: 2
1566
1574
  }, 1032, ["color"])
1567
1575
  ]),
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 }, [
1576
+ n.strategy?.description ? (p(), i("div", cn, v(n.strategy.description), 1)) : r("", !0),
1577
+ t.stats ? (p(), i("div", ln, [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
1578
  c[1] || (c[1] = o(" · ")),
1571
1579
  a("strong", null, v(genStat(n.name).selected), 1),
1572
1580
  c[2] || (c[2] = o(" selected ")),
1573
1581
  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", {
1582
+ ], 64)) : r("", !0)], 64)) : (p(), i("span", un, "absent from these runs"))])) : r("", !0),
1583
+ prettyConfig(n.strategy?.serializedData) ? (p(), i("div", dn, [a("a", {
1576
1584
  class: "sk-config-link text-caption",
1577
1585
  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", {
1586
+ }, v(T.value.has(`g:${n.name}`) ? "Hide" : "Show") + " config ", 9, fn), T.value.has(`g:${n.name}`) ? (p(), i("pre", pn, v(prettyConfig(n.strategy?.serializedData)), 1)) : r("", !0)])) : r("", !0)
1587
+ ]))), 128)) : m.key === "filter" ? (p(), i(e, { key: 1 }, [b.value.filters.length === 0 ? (p(), i("div", mn, "No filters.")) : r("", !0), (p(!0), i(e, null, h(b.value.filters, (m) => (p(), i("div", {
1580
1588
  key: m.name,
1581
1589
  class: "sk-nav"
1582
1590
  }, [
1583
- a("div", ln, [
1584
- a("span", un, v(m.name), 1),
1585
- a("code", dn, v(m.implementingClass), 1),
1591
+ a("div", hn, [
1592
+ a("span", gn, v(m.name), 1),
1593
+ a("code", _n, v(m.implementingClass), 1),
1586
1594
  s(l, {
1587
1595
  size: "x-small",
1588
1596
  variant: "outlined",
@@ -1609,65 +1617,65 @@ var ae = {
1609
1617
  _: 2
1610
1618
  }, 1032, ["color", "title"])
1611
1619
  ]),
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", {
1620
+ m.strategy?.description ? (p(), i("div", vn, v(m.strategy.description), 1)) : m.strategy ? r("", !0) : (p(), i("div", yn, " Built in code; no strategy document. ")),
1621
+ t.stats ? (p(), i("div", bn, [filterStat(m.name) ? (p(), i(e, { key: 0 }, [a("div", xn, [(p(!0), i(e, null, h(impactParts(filterStat(m.name)), (e) => (p(), i("div", {
1614
1622
  key: e.key,
1615
1623
  class: u(`bg-${e.color}`),
1616
1624
  style: d({ width: `${e.share * 100}%` }),
1617
1625
  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", {
1626
+ }, null, 14, Sn))), 128))]), a("div", Cn, [o(" over " + v(filterStat(m.name).runs) + " runs: ", 1), (p(!0), i(e, null, h(impactParts(filterStat(m.name)), (e) => (p(), i("span", {
1619
1627
  key: e.key,
1620
1628
  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", {
1629
+ }, [a("span", { class: u(`text-${e.color}`) }, "●", 2), o(" " + v(e.key) + " " + v(fmtPct(e.share)), 1)]))), 128))])], 64)) : (p(), i("span", wn, "absent from these runs"))])) : r("", !0),
1630
+ prettyConfig(m.strategy?.serializedData) ? (p(), i("div", Tn, [a("a", {
1623
1631
  class: "sk-config-link text-caption",
1624
1632
  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)
1633
+ }, v(T.value.has(`f:${m.name}`) ? "Hide" : "Show") + " config ", 9, En), T.value.has(`f:${m.name}`) ? (p(), i("pre", Dn, v(prettyConfig(m.strategy?.serializedData)), 1)) : r("", !0)])) : r("", !0)
1626
1634
  ]))), 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, {
1635
+ a("div", Q, [
1636
+ a("div", On, [c[5] || (c[5] = a("span", { class: "font-weight-medium" }, "Review mass", -1)), s(l, {
1629
1637
  size: "x-small",
1630
1638
  variant: "outlined"
1631
1639
  }, {
1632
1640
  default: x(() => c[4] || (c[4] = [o("on review cards")])),
1633
1641
  _: 1
1634
1642
  })]),
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)
1643
+ a("div", kn, " 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),
1644
+ regStat("review-mass") ? (p(), i("div", An, v(regStatText(regStat("review-mass"))), 1)) : r("", !0)
1637
1645
  ]),
1638
- a("div", Tn, [
1639
- a("div", En, [c[7] || (c[7] = a("span", { class: "font-weight-medium" }, "Intake", -1)), s(l, {
1646
+ a("div", jn, [
1647
+ a("div", Mn, [c[7] || (c[7] = a("span", { class: "font-weight-medium" }, "Intake", -1)), s(l, {
1640
1648
  size: "x-small",
1641
1649
  variant: "outlined"
1642
1650
  }, {
1643
1651
  default: x(() => c[6] || (c[6] = [o("on new cards no gate penalized")])),
1644
1652
  _: 1
1645
1653
  })]),
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)
1654
+ a("div", Nn, " ×" + 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),
1655
+ regStat("intake") ? (p(), i("div", Pn, v(regStatText(regStat("intake"))), 1)) : r("", !0)
1648
1656
  ]),
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, [
1657
+ t.stats && t.stats.regulators.length === 0 ? (p(), i("div", Fn, " None of these runs recorded regulator readings (recorded from 0.2.29). ")) : r("", !0)
1658
+ ], 64)) : m.key === "select" && t.stats && t.stats.runsWithSelection > 0 ? (p(), i("div", In, [
1651
1659
  o(v(t.stats.selectedUnattributed) + " selected card(s) had no generator: forced in by a hint's ", 1),
1652
1660
  c[8] || (c[8] = a("code", null, "requireCards", -1)),
1653
1661
  c[9] || (c[9] = o(". "))
1654
1662
  ])) : r("", !0)
1655
- ]), g < y(W).length - 1 ? (p(), i("div", jn, [s(_, { size: "small" }, {
1663
+ ]), g < y(U).length - 1 ? (p(), i("div", Ln, [s(_, { size: "small" }, {
1656
1664
  default: x(() => c[10] || (c[10] = [o("mdi-arrow-down")])),
1657
1665
  _: 1
1658
1666
  })])) : 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)
1667
+ t.stats && t.stats.runsWithSelection === 0 ? (p(), i("div", Rn, " 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
1668
  ]);
1661
1669
  };
1662
1670
  }
1663
- }), [["__scopeId", "data-v-24b6038f"]]), Nn = /* @__PURE__ */ c({
1671
+ }), [["__scopeId", "data-v-24b6038f"]]), zn = /* @__PURE__ */ c({
1664
1672
  __name: "LearnerDiagnostics",
1665
1673
  props: {
1666
1674
  dataset: {},
1667
1675
  interpreters: {}
1668
1676
  },
1669
1677
  setup(a) {
1670
- let c = a, l = m("sessions"), u = m(null), d = m(void 0), f = t(() => P(c.dataset));
1678
+ let c = a, l = m("sessions"), u = m(null), d = m(void 0), f = t(() => F(c.dataset));
1671
1679
  function openCard(e) {
1672
1680
  d.value = void 0, l.value = "cards", setTimeout(() => d.value = e);
1673
1681
  }
@@ -1747,6 +1755,6 @@ var ae = {
1747
1755
  }
1748
1756
  });
1749
1757
  //#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 };
1758
+ export { q as CardDossierDetail, J as LearnerCardHistory, ce as LearnerDatasetSource, zn as LearnerDiagnostics, X as LearnerSessionDetail, Z as LearnerSessionList, $ as PipelineOverview, Y as RunDetail, downloadLearnerDump, useLearnerDataset };
1751
1759
 
1752
1760
  //# sourceMappingURL=common-ui-admin.es.js.map