@vue-skuilder/common-ui 0.2.7 → 0.2.9

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.
@@ -7,6 +7,7 @@ interface QueueDebugInfo {
7
7
  courseID: string;
8
8
  cardID: string;
9
9
  status: string;
10
+ score?: number;
10
11
  }>;
11
12
  }
12
13
  interface HydratedCacheInfo {
@@ -18,8 +19,7 @@ interface HydratedCacheInfo {
18
19
  }>;
19
20
  }
20
21
  export interface SessionDebugInfo {
21
- reviewQueue: QueueDebugInfo;
22
- newQueue: QueueDebugInfo;
22
+ supplyQueue: QueueDebugInfo;
23
23
  failedQueue: QueueDebugInfo;
24
24
  hydratedCache: HydratedCacheInfo;
25
25
  }
@@ -30,6 +30,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
30
30
  };
31
31
  }>, {
32
32
  debugInfo: import('vue').ComputedRef<SessionDebugInfo>;
33
+ fmtScore: (score?: number) => string;
33
34
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
34
35
  sessionController: {
35
36
  type: PropType<SessionController<any> | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"SessionControllerDebug.vue.d.ts","sourceRoot":"","sources":["../../src/components/SessionControllerDebug.vue"],"names":[],"mappings":"AAuIA;AAAA,OA4PO,EAAmB,QAAQ,EAAyC,MAAM,KAAK,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,cAAc,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,iBAAiB,CAAC;CAClC;;;cAOqB,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;;;;;;cAAvC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;;;AAL7D,wBA+CG"}
1
+ {"version":3,"file":"SessionControllerDebug.vue.d.ts","sourceRoot":"","sources":["../../src/components/SessionControllerDebug.vue"],"names":[],"mappings":"AA0GA;AAAA,OAqOO,EAAmB,QAAQ,EAAyC,MAAM,KAAK,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,iBAAiB,CAAC;CAClC;;;cAOqB,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;;;;uBAsC/B,MAAM,KAAG,MAAM;;;cAtCvB,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;;;AAL7D,wBAsDG"}
@@ -18,17 +18,6 @@ export type StudySessionConfig = {
18
18
  * Default (when omitted): 20
19
19
  */
20
20
  defaultBatchLimit?: number;
21
- /**
22
- * Maximum number of reviews enqueued at session start.
23
- *
24
- * Reviews live outside the replan flow — they're loaded once at session
25
- * setup and drain via consumption (no mid-session refill). The session
26
- * timer caps total exposure, so overfilling is intentional.
27
- *
28
- * Default (when omitted): 200, generous enough for Anki-style power
29
- * users. Apps targeting short, nimble sessions should set this lower.
30
- */
31
- initialReviewCap?: number;
32
21
  /**
33
22
  * Optional session-durable hints applied from session init onward.
34
23
  * Uses the same format as `ReplanOptions.hints` — boost/exclude/require tags.
@@ -1 +1 @@
1
- {"version":3,"file":"StudySession.types.d.ts","sourceRoot":"","sources":["../../src/components/StudySession.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"StudySession.types.d.ts","sourceRoot":"","sources":["../../src/components/StudySession.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC"}
@@ -438,6 +438,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
438
438
  };
439
439
  }>, {
440
440
  debugInfo: import('vue').ComputedRef<import('./SessionControllerDebug.vue').SessionDebugInfo>;
441
+ fmtScore: (score?: number) => string;
441
442
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
442
443
  sessionController: {
443
444
  type: PropType<SessionController<any> | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"StudySession.vue.d.ts","sourceRoot":"","sources":["../../src/components/StudySession.vue"],"names":[],"mappings":"AAiFA;AAAA,OA6zBO,EAAE,eAAe,EAAW,QAAQ,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,OAAO,UAAU,MAAM,gCAAgC,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,WAAW,EACX,UAAU,EAEV,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EAEjB,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEpG,UAAU,SAAS;IACjB,aAAa,EAAE,cAAc,CAAC;IAC9B,UAAU,EAAE,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;CAC7C;AAED,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,GAAG;IACxD,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;;;;;;;cAqBmB,QAAQ,CAAC,eAAe,EAAE,CAAC;;;;cAI1B,QAAQ,CAAC,eAAe,CAAC;;;;cAIzB,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,kBAAkB,CAAC;;;;;;cAI1B,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;;;;;;;;;;;;cAY7C,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC;;;;cAIvC,QAAQ,CAAC,kBAAkB,CAAC;;;;;UAoB9B,aAAa,GAAG,IAAI;UACtB,QAAQ,EAAE;;;iBAGH;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;;uBAEtB,iBAAiB,CAAC,aAAa,CAAC,GAAG,IAAI;;;mBAG7C,kBAAkB,EAAE;;;;sBAIf,qBAAqB,GAAG,IAAI;2BACzB,kBAAkB,EAAE;;;mBAG1B,aAAa,GAAG,IAAI;4BACX,MAAM,GAAG,IAAI;qBACpB,MAAM,CAAC,OAAO,GAAG,IAAI;;;;mBAOjC,kBAAkB;;IAoDjC;;;OAGG;;IAYH;;;;;;;;;;;;;OAaG;kCAC2B,aAAa;uBAUxB,MAAM,GAAG,SAAS;kCASxB,OAAO;;;;8BAsJM,MAAM,WAAW,MAAM,GAAG,MAAM;0BAI9B,aAAa,KAAK,UAAU;6BAiF/B,cAAc;;qBAsDhB,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;mBAO/C,YAAY,GAAG,IAAI;;;;;;;cA1dvB,QAAQ,CAAC,eAAe,EAAE,CAAC;;;;cAI1B,QAAQ,CAAC,eAAe,CAAC;;;;cAIzB,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,kBAAkB,CAAC;;;;;;cAI1B,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;;;;;;;;;;;;cAY7C,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC;;;;cAIvC,QAAQ,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAnDlD,wBAwhBG"}
1
+ {"version":3,"file":"StudySession.vue.d.ts","sourceRoot":"","sources":["../../src/components/StudySession.vue"],"names":[],"mappings":"AAiFA;AAAA,OAyzBO,EAAE,eAAe,EAAW,QAAQ,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,OAAO,UAAU,MAAM,gCAAgC,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,WAAW,EACX,UAAU,EAEV,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EAEjB,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEpG,UAAU,SAAS;IACjB,aAAa,EAAE,cAAc,CAAC;IAC9B,UAAU,EAAE,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;CAC7C;AAED,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,GAAG;IACxD,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;;;;;;;cAqBmB,QAAQ,CAAC,eAAe,EAAE,CAAC;;;;cAI1B,QAAQ,CAAC,eAAe,CAAC;;;;cAIzB,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,kBAAkB,CAAC;;;;;;cAI1B,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;;;;;;;;;;;;cAY7C,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC;;;;cAIvC,QAAQ,CAAC,kBAAkB,CAAC;;;;;UAoB9B,aAAa,GAAG,IAAI;UACtB,QAAQ,EAAE;;;iBAGH;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;;uBAEtB,iBAAiB,CAAC,aAAa,CAAC,GAAG,IAAI;;;mBAG7C,kBAAkB,EAAE;;;;sBAIf,qBAAqB,GAAG,IAAI;2BACzB,kBAAkB,EAAE;;;mBAG1B,aAAa,GAAG,IAAI;4BACX,MAAM,GAAG,IAAI;qBACpB,MAAM,CAAC,OAAO,GAAG,IAAI;;;;mBAOjC,kBAAkB;;IAoDjC;;;OAGG;;IAYH;;;;;;;;;;;;;OAaG;kCAC2B,aAAa;uBAUxB,MAAM,GAAG,SAAS;kCASxB,OAAO;;;;8BAkJM,MAAM,WAAW,MAAM,GAAG,MAAM;0BAI9B,aAAa,KAAK,UAAU;6BAiF/B,cAAc;;qBAsDhB,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;mBAO/C,YAAY,GAAG,IAAI;;;;;;;cAtdvB,QAAQ,CAAC,eAAe,EAAE,CAAC;;;;cAI1B,QAAQ,CAAC,eAAe,CAAC;;;;cAIzB,QAAQ,CAAC,iBAAiB,CAAC;;;;cAI3B,QAAQ,CAAC,kBAAkB,CAAC;;;;;;cAI1B,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;;;;;;;;;;;;cAY7C,QAAQ,CAAC,oBAAoB,GAAG,MAAM,CAAC;;;;cAIvC,QAAQ,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAnDlD,wBAohBG"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.2.7",
6
+ "version": "0.2.9",
7
7
  "sideEffects": false,
8
8
  "main": "./dist/common-ui.umd.js",
9
9
  "module": "./dist/common-ui.es.js",
@@ -34,8 +34,8 @@
34
34
  "@highlightjs/vue-plugin": "^2.1.2",
35
35
  "@mdi/font": "^7.3.67",
36
36
  "@vojtechlanka/vue-tags-input": "^3",
37
- "@vue-skuilder/common": "0.2.7",
38
- "@vue-skuilder/db": "0.2.7",
37
+ "@vue-skuilder/common": "0.2.9",
38
+ "@vue-skuilder/db": "0.2.9",
39
39
  "highlight.js": "^11.0.1",
40
40
  "marked": "^15.0.6",
41
41
  "moment": "^2.29.4",
@@ -71,5 +71,5 @@
71
71
  "vite-plugin-dts": "^4.5.3",
72
72
  "vitest": "^4.1.0"
73
73
  },
74
- "stableVersion": "0.2.7"
74
+ "stableVersion": "0.2.9"
75
75
  }
@@ -8,58 +8,29 @@
8
8
 
9
9
  <v-card-text class="pa-2">
10
10
  <v-row dense>
11
- <!-- Review Queue -->
12
- <v-col cols="12" md="4">
13
- <div class="debug-section">
14
- <div class="debug-header">
15
- <v-icon size="x-small" class="mr-1">mdi-calendar-check</v-icon>
16
- <strong>Review Queue</strong>
17
- </div>
18
- <div class="debug-stats">
19
- <span class="text-caption">Length: {{ debugInfo.reviewQueue.length }}</span>
20
- <span class="text-caption ml-2">Dequeued: {{ debugInfo.reviewQueue.dequeueCount }}</span>
21
- </div>
22
- <div v-if="debugInfo.reviewQueue.items.length > 0" class="debug-items">
23
- <div
24
- v-for="(item, idx) in debugInfo.reviewQueue.items.slice(0, 5)"
25
- :key="idx"
26
- class="debug-item"
27
- >
28
- <span class="text-caption">{{ idx }}: {{ item.courseID }}::{{ item.cardID }}</span>
29
- <span class="text-caption text-grey ml-1">({{ item.status }})</span>
30
- </div>
31
- <div v-if="debugInfo.reviewQueue.items.length > 5" class="text-caption text-grey">
32
- ... +{{ debugInfo.reviewQueue.items.length - 5 }} more
33
- </div>
34
- </div>
35
- <div v-else class="text-caption text-grey">
36
- (empty)
37
- </div>
38
- </div>
39
- </v-col>
40
-
41
- <!-- New Cards Queue -->
42
- <v-col cols="12" md="4">
11
+ <!-- Supply Queue (new + review, rank-ordered) -->
12
+ <v-col cols="12" md="8">
43
13
  <div class="debug-section">
44
14
  <div class="debug-header">
45
- <v-icon size="x-small" class="mr-1">mdi-file-document-plus</v-icon>
46
- <strong>New Cards Queue</strong>
15
+ <v-icon size="x-small" class="mr-1">mdi-sort</v-icon>
16
+ <strong>Supply Queue</strong>
47
17
  </div>
48
18
  <div class="debug-stats">
49
- <span class="text-caption">Length: {{ debugInfo.newQueue.length }}</span>
50
- <span class="text-caption ml-2">Dequeued: {{ debugInfo.newQueue.dequeueCount }}</span>
19
+ <span class="text-caption">Length: {{ debugInfo.supplyQueue.length }}</span>
20
+ <span class="text-caption ml-2">Dequeued: {{ debugInfo.supplyQueue.dequeueCount }}</span>
51
21
  </div>
52
- <div v-if="debugInfo.newQueue.items.length > 0" class="debug-items">
22
+ <div v-if="debugInfo.supplyQueue.items.length > 0" class="debug-items">
53
23
  <div
54
- v-for="(item, idx) in debugInfo.newQueue.items.slice(0, 5)"
24
+ v-for="(item, idx) in debugInfo.supplyQueue.items.slice(0, 8)"
55
25
  :key="idx"
56
26
  class="debug-item"
57
27
  >
58
28
  <span class="text-caption">{{ idx }}: {{ item.courseID }}::{{ item.cardID }}</span>
59
29
  <span class="text-caption text-grey ml-1">({{ item.status }})</span>
30
+ <span class="text-caption ml-1" style="color:#90caf9">{{ fmtScore(item.score) }}</span>
60
31
  </div>
61
- <div v-if="debugInfo.newQueue.items.length > 5" class="text-caption text-grey">
62
- ... +{{ debugInfo.newQueue.items.length - 5 }} more
32
+ <div v-if="debugInfo.supplyQueue.items.length > 8" class="text-caption text-grey">
33
+ ... +{{ debugInfo.supplyQueue.items.length - 8 }} more
63
34
  </div>
64
35
  </div>
65
36
  <div v-else class="text-caption text-grey">
@@ -141,7 +112,7 @@ import { SessionController } from '@vue-skuilder/db';
141
112
  interface QueueDebugInfo {
142
113
  length: number;
143
114
  dequeueCount: number;
144
- items: Array<{ courseID: string; cardID: string; status: string }>;
115
+ items: Array<{ courseID: string; cardID: string; status: string; score?: number }>;
145
116
  }
146
117
 
147
118
  interface HydratedCacheInfo {
@@ -151,8 +122,7 @@ interface HydratedCacheInfo {
151
122
  }
152
123
 
153
124
  export interface SessionDebugInfo {
154
- reviewQueue: QueueDebugInfo;
155
- newQueue: QueueDebugInfo;
125
+ supplyQueue: QueueDebugInfo;
156
126
  failedQueue: QueueDebugInfo;
157
127
  hydratedCache: HydratedCacheInfo;
158
128
  }
@@ -190,8 +160,7 @@ export default defineComponent({
190
160
 
191
161
  if (!props.sessionController) {
192
162
  return {
193
- reviewQueue: { length: 0, dequeueCount: 0, items: [] },
194
- newQueue: { length: 0, dequeueCount: 0, items: [] },
163
+ supplyQueue: { length: 0, dequeueCount: 0, items: [] },
195
164
  failedQueue: { length: 0, dequeueCount: 0, items: [] },
196
165
  hydratedCache: { count: 0, failedCacheSize: 0, items: [] },
197
166
  };
@@ -200,8 +169,16 @@ export default defineComponent({
200
169
  return props.sessionController.getDebugInfo();
201
170
  });
202
171
 
172
+ /** Format a rank score: finite → 2dp, `+INF` → REQ (required), missing → ''. */
173
+ const fmtScore = (score?: number): string => {
174
+ if (score === undefined) return '';
175
+ if (!Number.isFinite(score)) return 'REQ';
176
+ return score.toFixed(2);
177
+ };
178
+
203
179
  return {
204
180
  debugInfo,
181
+ fmtScore,
205
182
  };
206
183
  },
207
184
  });
@@ -21,18 +21,6 @@ export type StudySessionConfig = {
21
21
  */
22
22
  defaultBatchLimit?: number;
23
23
 
24
- /**
25
- * Maximum number of reviews enqueued at session start.
26
- *
27
- * Reviews live outside the replan flow — they're loaded once at session
28
- * setup and drain via consumption (no mid-session refill). The session
29
- * timer caps total exposure, so overfilling is intentional.
30
- *
31
- * Default (when omitted): 200, generous enough for Anki-style power
32
- * users. Apps targeting short, nimble sessions should set this lower.
33
- */
34
- initialReviewCap?: number;
35
-
36
24
  /**
37
25
  * Optional session-durable hints applied from session init onward.
38
26
  * Uses the same format as `ReplanOptions.hints` — boost/exclude/require tags.
@@ -388,15 +388,11 @@ export default defineComponent({
388
388
 
389
389
  const scOptions: {
390
390
  defaultBatchLimit?: number;
391
- initialReviewCap?: number;
392
391
  outcomeObservers?: OutcomeObserver[];
393
392
  } = {};
394
393
  if (this.sessionConfig?.defaultBatchLimit !== undefined) {
395
394
  scOptions.defaultBatchLimit = this.sessionConfig.defaultBatchLimit;
396
395
  }
397
- if (this.sessionConfig?.initialReviewCap !== undefined) {
398
- scOptions.initialReviewCap = this.sessionConfig.initialReviewCap;
399
- }
400
396
  if (this.sessionConfig?.outcomeObservers?.length) {
401
397
  scOptions.outcomeObservers = this.sessionConfig.outcomeObservers;
402
398
  }