@bojackduy/opencode-learn 0.1.4 → 0.1.6
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.
- package/agents/classify.md +17 -0
- package/dist/server.js +175 -2
- package/dist/tui.js +864 -483
- package/package.json +2 -2
- package/plugins/learn-tui.tsx +187 -22
- package/plugins/learn.ts +155 -2
- package/scripts/install.mjs +3 -3
package/dist/tui.js
CHANGED
|
@@ -9,7 +9,7 @@ import { insert as _$insert } from "@opentui/solid";
|
|
|
9
9
|
import { memo as _$memo } from "@opentui/solid";
|
|
10
10
|
import { setProp as _$setProp } from "@opentui/solid";
|
|
11
11
|
import { createElement as _$createElement } from "@opentui/solid";
|
|
12
|
-
import { createSignal, For, Show, createEffect } from "solid-js";
|
|
12
|
+
import { createSignal, onCleanup, For, Show, createEffect } from "solid-js";
|
|
13
13
|
import { useKeyboard, useTerminalDimensions } from "@opentui/solid";
|
|
14
14
|
import * as fs from "fs";
|
|
15
15
|
import * as path from "path";
|
|
@@ -40,6 +40,7 @@ function QuizDialog(props) {
|
|
|
40
40
|
const theme = () => props.api.theme.current;
|
|
41
41
|
const dims = useTerminalDimensions();
|
|
42
42
|
const popupWidth = () => Math.max(68, Math.min(dims().width - 4, 92));
|
|
43
|
+
const popupHeight = () => Math.max(4, Math.min(24, dims().height - 2));
|
|
43
44
|
const options = () => props.request.options;
|
|
44
45
|
const correctSet = new Set(props.request.correctIndices);
|
|
45
46
|
const isMulti = () => !!props.request.multiSelect;
|
|
@@ -90,10 +91,125 @@ function QuizDialog(props) {
|
|
|
90
91
|
};
|
|
91
92
|
const submitSelect = () => {
|
|
92
93
|
const selMap = selected();
|
|
93
|
-
if (!isMulti() && selMap.size === 0 && !dontKnow())
|
|
94
|
+
if (!isMulti() && selMap.size === 0 && !dontKnow() && !note().trim())
|
|
94
95
|
return;
|
|
95
|
-
if (isMulti() && selMap.size === 0 && !dontKnow())
|
|
96
|
+
if (isMulti() && selMap.size === 0 && !dontKnow() && !note().trim())
|
|
96
97
|
return;
|
|
98
|
+
if (selMap.size === 0 && !dontKnow() && note().trim()) {
|
|
99
|
+
setPhase("classifying");
|
|
100
|
+
try {
|
|
101
|
+
const pDir = globalThis.__learnPendingDir || ".opencode/learn-pending";
|
|
102
|
+
const routeSessionID = props.api.route?.current?.params?.sessionID;
|
|
103
|
+
const pendingClassify = {
|
|
104
|
+
id: props.request.id,
|
|
105
|
+
type: "classify",
|
|
106
|
+
note: note().trim(),
|
|
107
|
+
question: props.request.question,
|
|
108
|
+
options: options().map((o, i) => ({
|
|
109
|
+
label: o.label,
|
|
110
|
+
value: o.value,
|
|
111
|
+
index: i + 1
|
|
112
|
+
})),
|
|
113
|
+
timestamp: Date.now(),
|
|
114
|
+
sessionID: props.request.sessionID || routeSessionID
|
|
115
|
+
};
|
|
116
|
+
fs.writeFileSync(path.join(pDir, `classify-${props.request.id}.json`), JSON.stringify(pendingClassify), "utf8");
|
|
117
|
+
tlog("QuizDialog classify request", props.request.id, note().trim().slice(0, 50));
|
|
118
|
+
const respPath = path.join(pDir, `classify-response-${props.request.id}.json`);
|
|
119
|
+
let attempts = 0;
|
|
120
|
+
const poll = setInterval(() => {
|
|
121
|
+
attempts++;
|
|
122
|
+
if (attempts > 60) {
|
|
123
|
+
clearInterval(poll);
|
|
124
|
+
setPhase("feedback");
|
|
125
|
+
setFeedback({
|
|
126
|
+
correct: false,
|
|
127
|
+
selectedIndices: []
|
|
128
|
+
});
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
if (fs.existsSync(respPath)) {
|
|
133
|
+
clearInterval(poll);
|
|
134
|
+
const raw = fs.readFileSync(respPath, "utf8");
|
|
135
|
+
const data = JSON.parse(raw);
|
|
136
|
+
try {
|
|
137
|
+
fs.unlinkSync(respPath);
|
|
138
|
+
fs.unlinkSync(path.join(pDir, `classify-${props.request.id}.json`));
|
|
139
|
+
} catch {}
|
|
140
|
+
const inferred = data?.inferredIndices;
|
|
141
|
+
const inferredValues = data?.inferredValues;
|
|
142
|
+
const semanticCorrect = data?.semanticCorrect;
|
|
143
|
+
const reason = data?.reason;
|
|
144
|
+
const computeCorrect = (idxs) => {
|
|
145
|
+
if (typeof semanticCorrect === "boolean")
|
|
146
|
+
return semanticCorrect;
|
|
147
|
+
return idxs.length === props.request.correctIndices.length && idxs.every((v) => correctSet.has(v)) && props.request.correctIndices.every((v) => idxs.includes(v));
|
|
148
|
+
};
|
|
149
|
+
if (inferred && inferred.length) {
|
|
150
|
+
const m = new Map;
|
|
151
|
+
for (let i = 0;i < inferred.length; i++) {
|
|
152
|
+
const idx = inferred[i];
|
|
153
|
+
const opt = options()[idx - 1];
|
|
154
|
+
if (opt)
|
|
155
|
+
m.set(`opt:${idx - 1}`, {
|
|
156
|
+
label: opt.label,
|
|
157
|
+
value: opt.value,
|
|
158
|
+
index: idx
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
setSelected(m);
|
|
162
|
+
const correct2 = computeCorrect(inferred);
|
|
163
|
+
setFeedback({
|
|
164
|
+
correct: correct2,
|
|
165
|
+
selectedIndices: inferred
|
|
166
|
+
});
|
|
167
|
+
if (reason)
|
|
168
|
+
setNote((prev) => prev ? `${prev} \u2014 ${reason}` : prev);
|
|
169
|
+
tlog("QuizDialog classify done", inferred.join(","), correct2, reason || "");
|
|
170
|
+
} else if (inferredValues && inferredValues.length) {
|
|
171
|
+
const byVal = new Map(options().map((o, i) => [o.value, i + 1]));
|
|
172
|
+
const idxs = inferredValues.map((v) => byVal.get(v)).filter(Boolean);
|
|
173
|
+
const m = new Map;
|
|
174
|
+
for (const idx of idxs) {
|
|
175
|
+
const opt = options()[idx - 1];
|
|
176
|
+
if (opt)
|
|
177
|
+
m.set(`opt:${idx - 1}`, {
|
|
178
|
+
label: opt.label,
|
|
179
|
+
value: opt.value,
|
|
180
|
+
index: idx
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
setSelected(m);
|
|
184
|
+
const correct2 = computeCorrect(idxs);
|
|
185
|
+
setFeedback({
|
|
186
|
+
correct: correct2,
|
|
187
|
+
selectedIndices: idxs
|
|
188
|
+
});
|
|
189
|
+
} else {
|
|
190
|
+
const correct2 = typeof semanticCorrect === "boolean" ? semanticCorrect : false;
|
|
191
|
+
setFeedback({
|
|
192
|
+
correct: correct2,
|
|
193
|
+
selectedIndices: []
|
|
194
|
+
});
|
|
195
|
+
if (reason)
|
|
196
|
+
setNote((prev) => prev ? `${prev} \u2014 ${reason}` : reason);
|
|
197
|
+
}
|
|
198
|
+
setPhase("feedback");
|
|
199
|
+
}
|
|
200
|
+
} catch {}
|
|
201
|
+
}, 500);
|
|
202
|
+
onCleanup(() => clearInterval(poll));
|
|
203
|
+
} catch (e) {
|
|
204
|
+
tlog("classify request failed", String(e));
|
|
205
|
+
setPhase("feedback");
|
|
206
|
+
setFeedback({
|
|
207
|
+
correct: false,
|
|
208
|
+
selectedIndices: []
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
97
213
|
if (dontKnow()) {
|
|
98
214
|
setFeedback({
|
|
99
215
|
correct: false,
|
|
@@ -121,6 +237,10 @@ function QuizDialog(props) {
|
|
|
121
237
|
useKeyboard((evt) => {
|
|
122
238
|
const key = evt.name || evt.sequence || evt.raw || "";
|
|
123
239
|
const seq = evt.sequence || "";
|
|
240
|
+
if (phase() === "classifying") {
|
|
241
|
+
prevent(evt);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
124
244
|
if (phase() === "feedback") {
|
|
125
245
|
if (key === "enter" || seq === "\r" || key === "escape" || key === "esc") {
|
|
126
246
|
prevent(evt);
|
|
@@ -146,6 +266,13 @@ function QuizDialog(props) {
|
|
|
146
266
|
}
|
|
147
267
|
return;
|
|
148
268
|
}
|
|
269
|
+
const maxIdx = () => {
|
|
270
|
+
if (isMulti())
|
|
271
|
+
return submitIdx();
|
|
272
|
+
if (note().trim() && !selected().size && !dontKnow())
|
|
273
|
+
return dontKnowIdx() + 1;
|
|
274
|
+
return dontKnowIdx();
|
|
275
|
+
};
|
|
149
276
|
if (key === "up" || key === "k" || seq === "\x1B[A") {
|
|
150
277
|
prevent(evt);
|
|
151
278
|
setOptionIndex((i) => Math.max(0, i - 1));
|
|
@@ -153,7 +280,7 @@ function QuizDialog(props) {
|
|
|
153
280
|
}
|
|
154
281
|
if (key === "down" || key === "j" || seq === "\x1B[B") {
|
|
155
282
|
prevent(evt);
|
|
156
|
-
setOptionIndex((i) => Math.min(
|
|
283
|
+
setOptionIndex((i) => Math.min(maxIdx(), i + 1));
|
|
157
284
|
return;
|
|
158
285
|
}
|
|
159
286
|
if (key === "tab" || seq === "\t") {
|
|
@@ -171,6 +298,8 @@ function QuizDialog(props) {
|
|
|
171
298
|
const idx = optionIndex();
|
|
172
299
|
if (idx === dontKnowIdx())
|
|
173
300
|
handleDontKnow();
|
|
301
|
+
else if (!isMulti() && idx === dontKnowIdx() + 1 && note().trim() && !selected().size && !dontKnow())
|
|
302
|
+
submitSelect();
|
|
174
303
|
else {
|
|
175
304
|
if (isMulti())
|
|
176
305
|
toggleOption(idx);
|
|
@@ -194,6 +323,8 @@ function QuizDialog(props) {
|
|
|
194
323
|
const idx = optionIndex();
|
|
195
324
|
if (idx === dontKnowIdx())
|
|
196
325
|
handleDontKnow();
|
|
326
|
+
else if (!isMulti() && idx === dontKnowIdx() + 1 && note().trim() && !selected().size && !dontKnow())
|
|
327
|
+
submitSelect();
|
|
197
328
|
else if (isMulti())
|
|
198
329
|
submitSelect();
|
|
199
330
|
else {
|
|
@@ -217,9 +348,10 @@ function QuizDialog(props) {
|
|
|
217
348
|
}
|
|
218
349
|
});
|
|
219
350
|
return (() => {
|
|
220
|
-
var _el$ = _$createElement("box"), _el$2 = _$createElement("box"), _el$3 = _$createElement("text"), _el$4 = _$createElement("text"), _el$6 = _$createElement("
|
|
351
|
+
var _el$ = _$createElement("box"), _el$2 = _$createElement("box"), _el$3 = _$createElement("text"), _el$4 = _$createElement("text"), _el$6 = _$createElement("scrollbox"), _el$7 = _$createElement("box"), _el$8 = _$createElement("text"), _el$62 = _$createElement("box"), _el$63 = _$createElement("text");
|
|
221
352
|
_$insertNode(_el$, _el$2);
|
|
222
353
|
_$insertNode(_el$, _el$6);
|
|
354
|
+
_$insertNode(_el$, _el$62);
|
|
223
355
|
_$setProp(_el$, "flexDirection", "column");
|
|
224
356
|
_$setProp(_el$, "border", true);
|
|
225
357
|
_$setProp(_el$, "padding", 1);
|
|
@@ -240,40 +372,42 @@ function QuizDialog(props) {
|
|
|
240
372
|
_$insertNode(_el$4, _$createTextNode(`learn`));
|
|
241
373
|
_$setProp(_el$4, "dim", true);
|
|
242
374
|
_$insertNode(_el$6, _el$7);
|
|
243
|
-
_$setProp(_el$6, "
|
|
244
|
-
_$
|
|
245
|
-
_$setProp(_el$
|
|
246
|
-
_$setProp(_el$
|
|
247
|
-
_$setProp(_el$
|
|
248
|
-
_$setProp(_el$7, "
|
|
249
|
-
_$setProp(_el$7, "
|
|
250
|
-
_$
|
|
251
|
-
_$
|
|
375
|
+
_$setProp(_el$6, "flexGrow", 1);
|
|
376
|
+
_$insertNode(_el$7, _el$8);
|
|
377
|
+
_$setProp(_el$7, "flexDirection", "column");
|
|
378
|
+
_$setProp(_el$7, "gap", 1);
|
|
379
|
+
_$setProp(_el$7, "paddingLeft", 1);
|
|
380
|
+
_$setProp(_el$7, "paddingRight", 1);
|
|
381
|
+
_$setProp(_el$7, "paddingTop", 1);
|
|
382
|
+
_$setProp(_el$8, "bold", true);
|
|
383
|
+
_$setProp(_el$8, "wrapMode", "wrap");
|
|
384
|
+
_$insert(_el$8, () => props.request.question);
|
|
385
|
+
_$insert(_el$7, _$createComponent(Show, {
|
|
252
386
|
get when() {
|
|
253
387
|
return props.request.details;
|
|
254
388
|
},
|
|
255
389
|
get children() {
|
|
256
|
-
var _el$
|
|
257
|
-
_$setProp(_el$
|
|
258
|
-
_$insert(_el$
|
|
259
|
-
_$effect((_$p) => _$setProp(_el$
|
|
260
|
-
return _el$
|
|
390
|
+
var _el$9 = _$createElement("text");
|
|
391
|
+
_$setProp(_el$9, "wrapMode", "wrap");
|
|
392
|
+
_$insert(_el$9, () => props.request.details);
|
|
393
|
+
_$effect((_$p) => _$setProp(_el$9, "fg", theme().textMuted, _$p));
|
|
394
|
+
return _el$9;
|
|
261
395
|
}
|
|
262
396
|
}), null);
|
|
263
|
-
_$insert(_el
|
|
397
|
+
_$insert(_el$6, _$createComponent(Show, {
|
|
264
398
|
get when() {
|
|
265
399
|
return phase() === "select";
|
|
266
400
|
},
|
|
267
401
|
get children() {
|
|
268
|
-
var _el$
|
|
269
|
-
_$insertNode(_el$
|
|
270
|
-
_$insertNode(_el$
|
|
271
|
-
_$insertNode(_el$
|
|
272
|
-
_$setProp(_el$
|
|
273
|
-
_$setProp(_el$
|
|
274
|
-
_$setProp(_el$
|
|
275
|
-
_$setProp(_el$
|
|
276
|
-
_$insert(_el$
|
|
402
|
+
var _el$0 = _$createElement("box"), _el$11 = _$createElement("box"), _el$12 = _$createElement("box"), _el$13 = _$createElement("text"), _el$14 = _$createElement("box"), _el$15 = _$createElement("text"), _el$16 = _$createElement("box"), _el$17 = _$createElement("text"), _el$19 = _$createElement("box"), _el$20 = _$createElement("box"), _el$21 = _$createElement("text"), _el$25 = _$createElement("box"), _el$27 = _$createElement("box"), _el$28 = _$createElement("text");
|
|
403
|
+
_$insertNode(_el$0, _el$11);
|
|
404
|
+
_$insertNode(_el$0, _el$19);
|
|
405
|
+
_$insertNode(_el$0, _el$27);
|
|
406
|
+
_$setProp(_el$0, "flexDirection", "column");
|
|
407
|
+
_$setProp(_el$0, "gap", 0);
|
|
408
|
+
_$setProp(_el$0, "padding", 1);
|
|
409
|
+
_$setProp(_el$0, "border", true);
|
|
410
|
+
_$insert(_el$0, _$createComponent(For, {
|
|
277
411
|
get each() {
|
|
278
412
|
return options();
|
|
279
413
|
},
|
|
@@ -282,39 +416,39 @@ function QuizDialog(props) {
|
|
|
282
416
|
const isFocused = () => focused() === "options" && optionIndex() === idx;
|
|
283
417
|
const isSelected = () => selected().has(`opt:${idx}`);
|
|
284
418
|
return (() => {
|
|
285
|
-
var _el$
|
|
286
|
-
_$insertNode(_el$
|
|
287
|
-
_$insertNode(_el$
|
|
288
|
-
_$insertNode(_el$
|
|
289
|
-
_$setProp(_el$
|
|
290
|
-
_$setProp(_el$
|
|
291
|
-
_$setProp(_el$
|
|
292
|
-
_$setProp(_el$
|
|
293
|
-
_$setProp(_el$
|
|
294
|
-
_$insertNode(_el$
|
|
295
|
-
_$setProp(_el$
|
|
296
|
-
_$setProp(_el$
|
|
297
|
-
_$insert(_el$
|
|
298
|
-
_$insertNode(_el$
|
|
299
|
-
_$setProp(_el$
|
|
300
|
-
_$setProp(_el$
|
|
301
|
-
_$insert(_el$
|
|
302
|
-
var _c$
|
|
303
|
-
return () => _c$
|
|
419
|
+
var _el$64 = _$createElement("box"), _el$65 = _$createElement("box"), _el$66 = _$createElement("text"), _el$67 = _$createElement("box"), _el$68 = _$createElement("text"), _el$69 = _$createElement("box"), _el$70 = _$createElement("text"), _el$71 = _$createTextNode(`. `);
|
|
420
|
+
_$insertNode(_el$64, _el$65);
|
|
421
|
+
_$insertNode(_el$64, _el$67);
|
|
422
|
+
_$insertNode(_el$64, _el$69);
|
|
423
|
+
_$setProp(_el$64, "flexDirection", "row");
|
|
424
|
+
_$setProp(_el$64, "alignItems", "flexStart");
|
|
425
|
+
_$setProp(_el$64, "gap", 1);
|
|
426
|
+
_$setProp(_el$64, "paddingLeft", 1);
|
|
427
|
+
_$setProp(_el$64, "paddingRight", 1);
|
|
428
|
+
_$insertNode(_el$65, _el$66);
|
|
429
|
+
_$setProp(_el$65, "width", 2);
|
|
430
|
+
_$setProp(_el$65, "alignItems", "center");
|
|
431
|
+
_$insert(_el$66, () => isFocused() ? "\u25B8" : " ");
|
|
432
|
+
_$insertNode(_el$67, _el$68);
|
|
433
|
+
_$setProp(_el$67, "width", 2);
|
|
434
|
+
_$setProp(_el$67, "alignItems", "center");
|
|
435
|
+
_$insert(_el$68, (() => {
|
|
436
|
+
var _c$4 = _$memo(() => !!isMulti());
|
|
437
|
+
return () => _c$4() ? isSelected() ? "\u2611" : "\u2610" : isSelected() ? "\u2B22" : "\u25CB";
|
|
304
438
|
})());
|
|
305
|
-
_$insertNode(_el$
|
|
306
|
-
_$setProp(_el$
|
|
307
|
-
_$insertNode(_el$
|
|
308
|
-
_$setProp(_el$
|
|
309
|
-
_$insert(_el$
|
|
310
|
-
_$insert(_el$
|
|
439
|
+
_$insertNode(_el$69, _el$70);
|
|
440
|
+
_$setProp(_el$69, "flexGrow", 1);
|
|
441
|
+
_$insertNode(_el$70, _el$71);
|
|
442
|
+
_$setProp(_el$70, "wrapMode", "wrap");
|
|
443
|
+
_$insert(_el$70, idx + 1, _el$71);
|
|
444
|
+
_$insert(_el$70, () => opt.label, null);
|
|
311
445
|
_$effect((_p$) => {
|
|
312
|
-
var _v$
|
|
313
|
-
_v$
|
|
314
|
-
_v$
|
|
315
|
-
_v$
|
|
316
|
-
_v$
|
|
317
|
-
_v$
|
|
446
|
+
var _v$38 = isFocused() ? theme().backgroundElement : undefined, _v$39 = isFocused() ? theme().accent : theme().textMuted, _v$40 = isMulti() ? isSelected() ? theme().success : theme().textMuted : isSelected() ? theme().accent : theme().textMuted, _v$41 = isSelected() ? theme().text : theme().textMuted, _v$42 = isFocused();
|
|
447
|
+
_v$38 !== _p$.e && (_p$.e = _$setProp(_el$64, "backgroundColor", _v$38, _p$.e));
|
|
448
|
+
_v$39 !== _p$.t && (_p$.t = _$setProp(_el$66, "fg", _v$39, _p$.t));
|
|
449
|
+
_v$40 !== _p$.a && (_p$.a = _$setProp(_el$68, "fg", _v$40, _p$.a));
|
|
450
|
+
_v$41 !== _p$.o && (_p$.o = _$setProp(_el$70, "fg", _v$41, _p$.o));
|
|
451
|
+
_v$42 !== _p$.i && (_p$.i = _$setProp(_el$70, "bold", _v$42, _p$.i));
|
|
318
452
|
return _p$;
|
|
319
453
|
}, {
|
|
320
454
|
e: undefined,
|
|
@@ -323,135 +457,155 @@ function QuizDialog(props) {
|
|
|
323
457
|
o: undefined,
|
|
324
458
|
i: undefined
|
|
325
459
|
});
|
|
326
|
-
return _el$
|
|
460
|
+
return _el$64;
|
|
327
461
|
})();
|
|
328
462
|
}
|
|
329
|
-
}), _el$
|
|
330
|
-
_$insert(_el$
|
|
463
|
+
}), _el$11);
|
|
464
|
+
_$insert(_el$0, _$createComponent(Show, {
|
|
331
465
|
get when() {
|
|
332
466
|
return options().length > 0;
|
|
333
467
|
},
|
|
334
468
|
get children() {
|
|
335
|
-
var _el$
|
|
336
|
-
_$insertNode(_el$
|
|
337
|
-
_$setProp(_el$
|
|
338
|
-
_$insert(_el$
|
|
339
|
-
_$effect((_$p) => _$setProp(_el$
|
|
340
|
-
return _el$
|
|
469
|
+
var _el$1 = _$createElement("box"), _el$10 = _$createElement("text");
|
|
470
|
+
_$insertNode(_el$1, _el$10);
|
|
471
|
+
_$setProp(_el$1, "height", 1);
|
|
472
|
+
_$insert(_el$10, () => "\u2500".repeat(Math.max(20, popupWidth() - 8)));
|
|
473
|
+
_$effect((_$p) => _$setProp(_el$10, "fg", theme().borderSubtle, _$p));
|
|
474
|
+
return _el$1;
|
|
341
475
|
}
|
|
342
|
-
}), _el$
|
|
343
|
-
_$insertNode(_el$10, _el$11);
|
|
344
|
-
_$insertNode(_el$10, _el$13);
|
|
345
|
-
_$insertNode(_el$10, _el$15);
|
|
346
|
-
_$setProp(_el$10, "flexDirection", "row");
|
|
347
|
-
_$setProp(_el$10, "alignItems", "flexStart");
|
|
348
|
-
_$setProp(_el$10, "gap", 1);
|
|
349
|
-
_$setProp(_el$10, "paddingLeft", 1);
|
|
350
|
-
_$setProp(_el$10, "paddingRight", 1);
|
|
476
|
+
}), _el$11);
|
|
351
477
|
_$insertNode(_el$11, _el$12);
|
|
352
|
-
_$
|
|
353
|
-
_$
|
|
354
|
-
_$
|
|
355
|
-
_$
|
|
356
|
-
_$setProp(_el$
|
|
357
|
-
_$setProp(_el$
|
|
358
|
-
_$
|
|
359
|
-
_$insertNode(_el$
|
|
360
|
-
_$setProp(_el$
|
|
361
|
-
_$
|
|
362
|
-
_$
|
|
363
|
-
_$
|
|
364
|
-
_$
|
|
365
|
-
_$
|
|
366
|
-
_$
|
|
367
|
-
_$
|
|
368
|
-
_$setProp(_el$
|
|
478
|
+
_$insertNode(_el$11, _el$14);
|
|
479
|
+
_$insertNode(_el$11, _el$16);
|
|
480
|
+
_$setProp(_el$11, "flexDirection", "row");
|
|
481
|
+
_$setProp(_el$11, "alignItems", "flexStart");
|
|
482
|
+
_$setProp(_el$11, "gap", 1);
|
|
483
|
+
_$setProp(_el$11, "paddingLeft", 1);
|
|
484
|
+
_$setProp(_el$11, "paddingRight", 1);
|
|
485
|
+
_$insertNode(_el$12, _el$13);
|
|
486
|
+
_$setProp(_el$12, "width", 2);
|
|
487
|
+
_$setProp(_el$12, "alignItems", "center");
|
|
488
|
+
_$insert(_el$13, () => focused() === "options" && optionIndex() === dontKnowIdx() ? "\u25B8" : " ");
|
|
489
|
+
_$insertNode(_el$14, _el$15);
|
|
490
|
+
_$setProp(_el$14, "width", 2);
|
|
491
|
+
_$setProp(_el$14, "alignItems", "center");
|
|
492
|
+
_$insert(_el$15, () => dontKnow() ? "\u2611" : "\u2610");
|
|
493
|
+
_$insertNode(_el$16, _el$17);
|
|
494
|
+
_$setProp(_el$16, "flexGrow", 1);
|
|
495
|
+
_$insertNode(_el$17, _$createTextNode(`I don't know \u2014 genuine gap, not a guess`));
|
|
496
|
+
_$setProp(_el$17, "italic", true);
|
|
497
|
+
_$setProp(_el$17, "wrapMode", "wrap");
|
|
369
498
|
_$insertNode(_el$19, _el$20);
|
|
370
|
-
_$
|
|
371
|
-
_$setProp(_el$19, "
|
|
372
|
-
_$setProp(_el$19, "gap",
|
|
373
|
-
_$
|
|
374
|
-
_$
|
|
499
|
+
_$insertNode(_el$19, _el$25);
|
|
500
|
+
_$setProp(_el$19, "flexDirection", "column");
|
|
501
|
+
_$setProp(_el$19, "gap", 0);
|
|
502
|
+
_$setProp(_el$19, "paddingTop", 1);
|
|
503
|
+
_$insertNode(_el$20, _el$21);
|
|
504
|
+
_$setProp(_el$20, "flexDirection", "row");
|
|
505
|
+
_$setProp(_el$20, "alignItems", "center");
|
|
506
|
+
_$setProp(_el$20, "gap", 1);
|
|
507
|
+
_$insertNode(_el$21, _$createTextNode(`\u270E Note (optional)`));
|
|
508
|
+
_$insert(_el$20, _$createComponent(Show, {
|
|
375
509
|
get when() {
|
|
376
510
|
return focused() === "note";
|
|
377
511
|
},
|
|
378
512
|
get children() {
|
|
379
|
-
var _el$
|
|
380
|
-
_$insertNode(_el$
|
|
381
|
-
_$effect((_$p) => _$setProp(_el$
|
|
382
|
-
return _el$
|
|
513
|
+
var _el$23 = _$createElement("text");
|
|
514
|
+
_$insertNode(_el$23, _$createTextNode(`\u25CF editing`));
|
|
515
|
+
_$effect((_$p) => _$setProp(_el$23, "fg", theme().accent, _$p));
|
|
516
|
+
return _el$23;
|
|
383
517
|
}
|
|
384
518
|
}), null);
|
|
385
|
-
_$setProp(_el$
|
|
386
|
-
_$setProp(_el$
|
|
387
|
-
_$setProp(_el$
|
|
388
|
-
_$insert(_el$
|
|
519
|
+
_$setProp(_el$25, "border", true);
|
|
520
|
+
_$setProp(_el$25, "paddingLeft", 1);
|
|
521
|
+
_$setProp(_el$25, "paddingRight", 1);
|
|
522
|
+
_$insert(_el$25, _$createComponent(Show, {
|
|
389
523
|
get when() {
|
|
390
524
|
return focused() === "note";
|
|
391
525
|
},
|
|
392
526
|
get fallback() {
|
|
393
527
|
return (() => {
|
|
394
|
-
var _el$
|
|
395
|
-
_$setProp(_el$
|
|
396
|
-
_$insert(_el$
|
|
397
|
-
_$effect((_$p) => _$setProp(_el$
|
|
398
|
-
return _el$
|
|
528
|
+
var _el$72 = _$createElement("text");
|
|
529
|
+
_$setProp(_el$72, "wrapMode", "wrap");
|
|
530
|
+
_$insert(_el$72, () => note() || "Tab to edit \xB7 share what you were thinking");
|
|
531
|
+
_$effect((_$p) => _$setProp(_el$72, "fg", note() ? theme().text : theme().textMuted, _$p));
|
|
532
|
+
return _el$72;
|
|
399
533
|
})();
|
|
400
534
|
},
|
|
401
535
|
get children() {
|
|
402
|
-
var _el$
|
|
403
|
-
_$use((el) => noteInputEl = el, _el$
|
|
404
|
-
_$setProp(_el$
|
|
405
|
-
_$setProp(_el$
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
536
|
+
var _el$26 = _$createElement("input");
|
|
537
|
+
_$use((el) => noteInputEl = el, _el$26);
|
|
538
|
+
_$setProp(_el$26, "onInput", (value) => setNote(typeof value === "string" ? value : value?.target?.value ?? value?.value ?? String(value ?? "")));
|
|
539
|
+
_$setProp(_el$26, "onSubmit", () => {
|
|
540
|
+
if (!selected().size && !dontKnow() && note().trim())
|
|
541
|
+
submitSelect();
|
|
542
|
+
else
|
|
543
|
+
setFocused("options");
|
|
544
|
+
});
|
|
545
|
+
_$setProp(_el$26, "placeholder", "what was on your mind? (Enter to submit note \u2192 classify)");
|
|
546
|
+
_$effect((_$p) => _$setProp(_el$26, "value", note(), _$p));
|
|
547
|
+
return _el$26;
|
|
409
548
|
}
|
|
410
549
|
}));
|
|
411
|
-
_$insertNode(_el$
|
|
412
|
-
_$setProp(_el$
|
|
413
|
-
_$setProp(_el$
|
|
414
|
-
_$setProp(_el$
|
|
415
|
-
_$
|
|
416
|
-
_$insert(_el$
|
|
550
|
+
_$insertNode(_el$27, _el$28);
|
|
551
|
+
_$setProp(_el$27, "flexDirection", "row");
|
|
552
|
+
_$setProp(_el$27, "justifyContent", "space-between");
|
|
553
|
+
_$setProp(_el$27, "paddingTop", 1);
|
|
554
|
+
_$insert(_el$28, () => focused() === "note" ? "Enter submit note \u2192 classify \xB7 Tab back \xB7 Esc back" : "\u2191\u2193/j k \xB7 Space toggle \xB7 \u2193 to Submit \u2192 Enter \xB7 Tab note \xB7 Esc cancel");
|
|
555
|
+
_$insert(_el$27, _$createComponent(Show, {
|
|
417
556
|
get when() {
|
|
418
557
|
return isMulti();
|
|
419
558
|
},
|
|
420
559
|
get children() {
|
|
421
|
-
var _el$29 = _$createElement("text"), _el$30 = _$createTextNode(`
|
|
560
|
+
var _el$29 = _$createElement("text"), _el$30 = _$createTextNode(` `);
|
|
422
561
|
_$insertNode(_el$29, _el$30);
|
|
423
|
-
_$insert(_el$29, () =>
|
|
562
|
+
_$insert(_el$29, (() => {
|
|
563
|
+
var _c$2 = _$memo(() => selected().size > 0);
|
|
564
|
+
return () => _c$2() ? `${selected().size} selected` : note().trim() ? "note \u2192 classify" : "0 selected";
|
|
565
|
+
})(), _el$30);
|
|
424
566
|
_$insert(_el$29, () => dontKnow() ? "\xB7 I don't know" : "", null);
|
|
425
|
-
_$effect((_$p) => _$setProp(_el$29, "fg", selected().size > 0 || dontKnow() ? theme().success : theme().warning, _$p));
|
|
567
|
+
_$effect((_$p) => _$setProp(_el$29, "fg", selected().size > 0 || dontKnow() ? theme().success : note().trim() ? theme().warning : theme().warning, _$p));
|
|
426
568
|
return _el$29;
|
|
427
569
|
}
|
|
428
570
|
}), null);
|
|
429
|
-
_$insert(_el$
|
|
571
|
+
_$insert(_el$27, _$createComponent(Show, {
|
|
572
|
+
get when() {
|
|
573
|
+
return _$memo(() => !!(!isMulti() && note().trim() && !selected().size))() && !dontKnow();
|
|
574
|
+
},
|
|
575
|
+
get children() {
|
|
576
|
+
var _el$31 = _$createElement("text");
|
|
577
|
+
_$insertNode(_el$31, _$createTextNode(`note \u2192 classify on Enter`));
|
|
578
|
+
_$effect((_$p) => _$setProp(_el$31, "fg", theme().warning, _$p));
|
|
579
|
+
return _el$31;
|
|
580
|
+
}
|
|
581
|
+
}), null);
|
|
582
|
+
_$insert(_el$0, _$createComponent(Show, {
|
|
430
583
|
get when() {
|
|
431
584
|
return isMulti();
|
|
432
585
|
},
|
|
433
586
|
get children() {
|
|
434
|
-
var _el$
|
|
435
|
-
_$insertNode(_el$
|
|
436
|
-
_$setProp(_el$
|
|
437
|
-
_$setProp(_el$
|
|
438
|
-
_$insertNode(_el$
|
|
439
|
-
_$insertNode(_el$
|
|
440
|
-
_$setProp(_el$
|
|
441
|
-
_$setProp(_el$
|
|
442
|
-
_$setProp(_el$
|
|
443
|
-
_$setProp(_el$
|
|
444
|
-
_$setProp(_el$
|
|
445
|
-
_$setProp(_el$
|
|
446
|
-
_$insert(_el$
|
|
447
|
-
_$insertNode(_el$
|
|
448
|
-
_$setProp(_el$
|
|
587
|
+
var _el$33 = _$createElement("box"), _el$34 = _$createElement("box"), _el$35 = _$createElement("text"), _el$36 = _$createElement("text"), _el$37 = _$createTextNode(`\u21B3 Submit`);
|
|
588
|
+
_$insertNode(_el$33, _el$34);
|
|
589
|
+
_$setProp(_el$33, "justifyContent", "center");
|
|
590
|
+
_$setProp(_el$33, "paddingTop", 1);
|
|
591
|
+
_$insertNode(_el$34, _el$35);
|
|
592
|
+
_$insertNode(_el$34, _el$36);
|
|
593
|
+
_$setProp(_el$34, "flexDirection", "row");
|
|
594
|
+
_$setProp(_el$34, "alignItems", "center");
|
|
595
|
+
_$setProp(_el$34, "gap", 1);
|
|
596
|
+
_$setProp(_el$34, "border", true);
|
|
597
|
+
_$setProp(_el$34, "paddingLeft", 2);
|
|
598
|
+
_$setProp(_el$34, "paddingRight", 2);
|
|
599
|
+
_$insert(_el$35, () => focused() === "options" && optionIndex() === submitIdx() ? "\u25B8" : " ");
|
|
600
|
+
_$insertNode(_el$36, _el$37);
|
|
601
|
+
_$setProp(_el$36, "bold", true);
|
|
602
|
+
_$insert(_el$36, () => note().trim() && !selected().size && !dontKnow() ? " note" : "", null);
|
|
449
603
|
_$effect((_p$) => {
|
|
450
|
-
var _v$ = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : selected().size > 0 || dontKnow() ? theme().success : theme().borderSubtle, _v$2 = focused() === "options" && optionIndex() === submitIdx() ? theme().backgroundElement : selected().size > 0 || dontKnow() ? theme().success : theme().background, _v$3 = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : selected().size > 0 || dontKnow() ? theme().background : theme().textMuted, _v$4 = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : selected().size > 0 || dontKnow() ? theme().background : theme().textMuted;
|
|
451
|
-
_v$ !== _p$.e && (_p$.e = _$setProp(_el$
|
|
452
|
-
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$
|
|
453
|
-
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$
|
|
454
|
-
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$
|
|
604
|
+
var _v$ = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : selected().size > 0 || dontKnow() || note().trim() ? theme().success : theme().borderSubtle, _v$2 = focused() === "options" && optionIndex() === submitIdx() ? theme().backgroundElement : selected().size > 0 || dontKnow() || note().trim() ? theme().success : theme().background, _v$3 = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : selected().size > 0 || dontKnow() || note().trim() ? theme().background : theme().textMuted, _v$4 = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : selected().size > 0 || dontKnow() || note().trim() ? theme().background : theme().textMuted;
|
|
605
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$34, "borderColor", _v$, _p$.e));
|
|
606
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$34, "backgroundColor", _v$2, _p$.t));
|
|
607
|
+
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$35, "fg", _v$3, _p$.a));
|
|
608
|
+
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$36, "fg", _v$4, _p$.o));
|
|
455
609
|
return _p$;
|
|
456
610
|
}, {
|
|
457
611
|
e: undefined,
|
|
@@ -459,22 +613,54 @@ function QuizDialog(props) {
|
|
|
459
613
|
a: undefined,
|
|
460
614
|
o: undefined
|
|
461
615
|
});
|
|
462
|
-
return _el$
|
|
616
|
+
return _el$33;
|
|
617
|
+
}
|
|
618
|
+
}), null);
|
|
619
|
+
_$insert(_el$0, _$createComponent(Show, {
|
|
620
|
+
get when() {
|
|
621
|
+
return _$memo(() => !!(!isMulti() && note().trim() && !selected().size))() && !dontKnow();
|
|
622
|
+
},
|
|
623
|
+
get children() {
|
|
624
|
+
var _el$38 = _$createElement("box"), _el$39 = _$createElement("box"), _el$40 = _$createElement("text");
|
|
625
|
+
_$insertNode(_el$38, _el$39);
|
|
626
|
+
_$setProp(_el$38, "justifyContent", "center");
|
|
627
|
+
_$setProp(_el$38, "paddingTop", 1);
|
|
628
|
+
_$insertNode(_el$39, _el$40);
|
|
629
|
+
_$setProp(_el$39, "flexDirection", "row");
|
|
630
|
+
_$setProp(_el$39, "alignItems", "center");
|
|
631
|
+
_$setProp(_el$39, "gap", 1);
|
|
632
|
+
_$setProp(_el$39, "border", true);
|
|
633
|
+
_$setProp(_el$39, "paddingLeft", 2);
|
|
634
|
+
_$setProp(_el$39, "paddingRight", 2);
|
|
635
|
+
_$insertNode(_el$40, _$createTextNode(`\u21B3 Submit note \u2192 classify`));
|
|
636
|
+
_$setProp(_el$40, "bold", true);
|
|
637
|
+
_$effect((_p$) => {
|
|
638
|
+
var _v$5 = focused() === "options" && optionIndex() === dontKnowIdx() + 1 ? theme().accent : theme().success, _v$6 = focused() === "options" && optionIndex() === dontKnowIdx() + 1 ? theme().backgroundElement : theme().success, _v$7 = focused() === "options" && optionIndex() === dontKnowIdx() + 1 ? theme().accent : theme().background;
|
|
639
|
+
_v$5 !== _p$.e && (_p$.e = _$setProp(_el$39, "borderColor", _v$5, _p$.e));
|
|
640
|
+
_v$6 !== _p$.t && (_p$.t = _$setProp(_el$39, "backgroundColor", _v$6, _p$.t));
|
|
641
|
+
_v$7 !== _p$.a && (_p$.a = _$setProp(_el$40, "fg", _v$7, _p$.a));
|
|
642
|
+
return _p$;
|
|
643
|
+
}, {
|
|
644
|
+
e: undefined,
|
|
645
|
+
t: undefined,
|
|
646
|
+
a: undefined
|
|
647
|
+
});
|
|
648
|
+
return _el$38;
|
|
463
649
|
}
|
|
464
650
|
}), null);
|
|
465
651
|
_$effect((_p$) => {
|
|
466
|
-
var _v$
|
|
467
|
-
_v$
|
|
468
|
-
_v$
|
|
469
|
-
_v$
|
|
470
|
-
_v$
|
|
471
|
-
_v$
|
|
472
|
-
_v$
|
|
473
|
-
_v$
|
|
474
|
-
_v$
|
|
475
|
-
_v$
|
|
476
|
-
_v$
|
|
477
|
-
_v$
|
|
652
|
+
var _v$8 = theme().borderSubtle, _v$9 = theme().background, _v$0 = focused() === "options" && optionIndex() === dontKnowIdx() ? theme().backgroundElement : undefined, _v$1 = focused() === "options" && optionIndex() === dontKnowIdx() ? theme().accent : theme().textMuted, _v$10 = dontKnow() ? theme().warning : theme().textMuted, _v$11 = dontKnow() ? theme().warning : theme().textMuted, _v$12 = focused() === "note" ? theme().accent : theme().textMuted, _v$13 = focused() === "note", _v$14 = focused() === "note" ? theme().accent : theme().borderSubtle, _v$15 = theme().backgroundElement, _v$16 = theme().textMuted;
|
|
653
|
+
_v$8 !== _p$.e && (_p$.e = _$setProp(_el$0, "borderColor", _v$8, _p$.e));
|
|
654
|
+
_v$9 !== _p$.t && (_p$.t = _$setProp(_el$0, "backgroundColor", _v$9, _p$.t));
|
|
655
|
+
_v$0 !== _p$.a && (_p$.a = _$setProp(_el$11, "backgroundColor", _v$0, _p$.a));
|
|
656
|
+
_v$1 !== _p$.o && (_p$.o = _$setProp(_el$13, "fg", _v$1, _p$.o));
|
|
657
|
+
_v$10 !== _p$.i && (_p$.i = _$setProp(_el$15, "fg", _v$10, _p$.i));
|
|
658
|
+
_v$11 !== _p$.n && (_p$.n = _$setProp(_el$17, "fg", _v$11, _p$.n));
|
|
659
|
+
_v$12 !== _p$.s && (_p$.s = _$setProp(_el$21, "fg", _v$12, _p$.s));
|
|
660
|
+
_v$13 !== _p$.h && (_p$.h = _$setProp(_el$21, "bold", _v$13, _p$.h));
|
|
661
|
+
_v$14 !== _p$.r && (_p$.r = _$setProp(_el$25, "borderColor", _v$14, _p$.r));
|
|
662
|
+
_v$15 !== _p$.d && (_p$.d = _$setProp(_el$25, "backgroundColor", _v$15, _p$.d));
|
|
663
|
+
_v$16 !== _p$.l && (_p$.l = _$setProp(_el$28, "fg", _v$16, _p$.l));
|
|
478
664
|
return _p$;
|
|
479
665
|
}, {
|
|
480
666
|
e: undefined,
|
|
@@ -489,24 +675,62 @@ function QuizDialog(props) {
|
|
|
489
675
|
d: undefined,
|
|
490
676
|
l: undefined
|
|
491
677
|
});
|
|
492
|
-
return _el$
|
|
678
|
+
return _el$0;
|
|
493
679
|
}
|
|
494
680
|
}), null);
|
|
495
|
-
_$insert(_el
|
|
681
|
+
_$insert(_el$6, _$createComponent(Show, {
|
|
682
|
+
get when() {
|
|
683
|
+
return phase() === "classifying";
|
|
684
|
+
},
|
|
685
|
+
get children() {
|
|
686
|
+
var _el$42 = _$createElement("box"), _el$43 = _$createElement("text"), _el$45 = _$createElement("text"), _el$46 = _$createTextNode(`"`), _el$47 = _$createTextNode(`"`), _el$48 = _$createElement("text");
|
|
687
|
+
_$insertNode(_el$42, _el$43);
|
|
688
|
+
_$insertNode(_el$42, _el$45);
|
|
689
|
+
_$insertNode(_el$42, _el$48);
|
|
690
|
+
_$setProp(_el$42, "flexDirection", "column");
|
|
691
|
+
_$setProp(_el$42, "gap", 1);
|
|
692
|
+
_$setProp(_el$42, "padding", 1);
|
|
693
|
+
_$setProp(_el$42, "border", true);
|
|
694
|
+
_$setProp(_el$42, "alignItems", "center");
|
|
695
|
+
_$insertNode(_el$43, _$createTextNode(`\u25D0 Classifying your note...`));
|
|
696
|
+
_$setProp(_el$43, "bold", true);
|
|
697
|
+
_$insertNode(_el$45, _el$46);
|
|
698
|
+
_$insertNode(_el$45, _el$47);
|
|
699
|
+
_$setProp(_el$45, "wrapMode", "wrap");
|
|
700
|
+
_$insert(_el$45, note, _el$47);
|
|
701
|
+
_$insertNode(_el$48, _$createTextNode(`Mapping to options \u2014 please wait`));
|
|
702
|
+
_$effect((_p$) => {
|
|
703
|
+
var _v$17 = theme().accent, _v$18 = theme().background, _v$19 = theme().accent, _v$20 = theme().textMuted, _v$21 = theme().textMuted;
|
|
704
|
+
_v$17 !== _p$.e && (_p$.e = _$setProp(_el$42, "borderColor", _v$17, _p$.e));
|
|
705
|
+
_v$18 !== _p$.t && (_p$.t = _$setProp(_el$42, "backgroundColor", _v$18, _p$.t));
|
|
706
|
+
_v$19 !== _p$.a && (_p$.a = _$setProp(_el$43, "fg", _v$19, _p$.a));
|
|
707
|
+
_v$20 !== _p$.o && (_p$.o = _$setProp(_el$45, "fg", _v$20, _p$.o));
|
|
708
|
+
_v$21 !== _p$.i && (_p$.i = _$setProp(_el$48, "fg", _v$21, _p$.i));
|
|
709
|
+
return _p$;
|
|
710
|
+
}, {
|
|
711
|
+
e: undefined,
|
|
712
|
+
t: undefined,
|
|
713
|
+
a: undefined,
|
|
714
|
+
o: undefined,
|
|
715
|
+
i: undefined
|
|
716
|
+
});
|
|
717
|
+
return _el$42;
|
|
718
|
+
}
|
|
719
|
+
}), null);
|
|
720
|
+
_$insert(_el$6, _$createComponent(Show, {
|
|
496
721
|
get when() {
|
|
497
722
|
return phase() === "feedback";
|
|
498
723
|
},
|
|
499
724
|
get children() {
|
|
500
|
-
var _el$
|
|
501
|
-
_$insertNode(_el$
|
|
502
|
-
_$insertNode(_el$
|
|
503
|
-
_$insertNode(_el$
|
|
504
|
-
_$
|
|
505
|
-
_$setProp(_el$
|
|
506
|
-
_$setProp(_el$
|
|
507
|
-
_$setProp(_el$
|
|
508
|
-
_$
|
|
509
|
-
_$insert(_el$36, _$createComponent(For, {
|
|
725
|
+
var _el$50 = _$createElement("box"), _el$51 = _$createElement("box"), _el$52 = _$createElement("text"), _el$56 = _$createElement("text"), _el$57 = _$createTextNode(`Correct: `), _el$60 = _$createElement("box"), _el$61 = _$createElement("text");
|
|
726
|
+
_$insertNode(_el$50, _el$51);
|
|
727
|
+
_$insertNode(_el$50, _el$56);
|
|
728
|
+
_$insertNode(_el$50, _el$60);
|
|
729
|
+
_$setProp(_el$50, "flexDirection", "column");
|
|
730
|
+
_$setProp(_el$50, "gap", 1);
|
|
731
|
+
_$setProp(_el$50, "padding", 1);
|
|
732
|
+
_$setProp(_el$50, "border", true);
|
|
733
|
+
_$insert(_el$50, _$createComponent(For, {
|
|
510
734
|
get each() {
|
|
511
735
|
return options();
|
|
512
736
|
},
|
|
@@ -535,90 +759,85 @@ function QuizDialog(props) {
|
|
|
535
759
|
bg = theme().warning;
|
|
536
760
|
}
|
|
537
761
|
return (() => {
|
|
538
|
-
var _el$
|
|
539
|
-
_$insertNode(_el$
|
|
540
|
-
_$insertNode(_el$
|
|
541
|
-
_$setProp(_el$
|
|
542
|
-
_$setProp(_el$
|
|
543
|
-
_$setProp(_el$
|
|
544
|
-
_$setProp(_el$
|
|
545
|
-
_$setProp(_el$
|
|
546
|
-
_$insertNode(_el$
|
|
547
|
-
_$setProp(_el$
|
|
548
|
-
_$setProp(_el$
|
|
549
|
-
_$setProp(_el$
|
|
550
|
-
_$setProp(_el$
|
|
551
|
-
_$insert(_el$
|
|
552
|
-
_$insertNode(_el$
|
|
553
|
-
_$setProp(_el$
|
|
554
|
-
_$insertNode(_el$
|
|
555
|
-
_$setProp(_el$
|
|
556
|
-
_$setProp(_el$
|
|
557
|
-
_$insert(_el$
|
|
558
|
-
_$insert(_el$
|
|
559
|
-
return _el$
|
|
762
|
+
var _el$73 = _$createElement("box"), _el$74 = _$createElement("box"), _el$75 = _$createElement("text"), _el$76 = _$createElement("box"), _el$77 = _$createElement("text"), _el$78 = _$createTextNode(`. `);
|
|
763
|
+
_$insertNode(_el$73, _el$74);
|
|
764
|
+
_$insertNode(_el$73, _el$76);
|
|
765
|
+
_$setProp(_el$73, "flexDirection", "row");
|
|
766
|
+
_$setProp(_el$73, "alignItems", "flexStart");
|
|
767
|
+
_$setProp(_el$73, "gap", 1);
|
|
768
|
+
_$setProp(_el$73, "paddingLeft", 1);
|
|
769
|
+
_$setProp(_el$73, "backgroundColor", bg);
|
|
770
|
+
_$insertNode(_el$74, _el$75);
|
|
771
|
+
_$setProp(_el$74, "width", 2);
|
|
772
|
+
_$setProp(_el$74, "alignItems", "center");
|
|
773
|
+
_$setProp(_el$75, "fg", fg);
|
|
774
|
+
_$setProp(_el$75, "bold", true);
|
|
775
|
+
_$insert(_el$75, icon);
|
|
776
|
+
_$insertNode(_el$76, _el$77);
|
|
777
|
+
_$setProp(_el$76, "flexGrow", 1);
|
|
778
|
+
_$insertNode(_el$77, _el$78);
|
|
779
|
+
_$setProp(_el$77, "fg", fg);
|
|
780
|
+
_$setProp(_el$77, "wrapMode", "wrap");
|
|
781
|
+
_$insert(_el$77, idx, _el$78);
|
|
782
|
+
_$insert(_el$77, () => opt.label, null);
|
|
783
|
+
return _el$73;
|
|
560
784
|
})();
|
|
561
785
|
}
|
|
562
|
-
}), _el$
|
|
563
|
-
_$insertNode(_el$
|
|
564
|
-
_$setProp(_el$
|
|
565
|
-
_$insert(_el$
|
|
566
|
-
_$insert(_el$
|
|
786
|
+
}), _el$51);
|
|
787
|
+
_$insertNode(_el$51, _el$52);
|
|
788
|
+
_$setProp(_el$51, "height", 1);
|
|
789
|
+
_$insert(_el$52, () => "\u2500".repeat(Math.max(20, popupWidth() - 12)));
|
|
790
|
+
_$insert(_el$50, _$createComponent(Show, {
|
|
567
791
|
get when() {
|
|
568
792
|
return dontKnow();
|
|
569
793
|
},
|
|
570
794
|
get children() {
|
|
571
|
-
var _el$
|
|
572
|
-
_$insertNode(_el$
|
|
573
|
-
_$effect((_$p) => _$setProp(_el$
|
|
574
|
-
return _el$
|
|
795
|
+
var _el$53 = _$createElement("text");
|
|
796
|
+
_$insertNode(_el$53, _$createTextNode(`\u25CF You said: I don't know \u2014 genuine gap`));
|
|
797
|
+
_$effect((_$p) => _$setProp(_el$53, "fg", theme().warning, _$p));
|
|
798
|
+
return _el$53;
|
|
575
799
|
}
|
|
576
|
-
}), _el$
|
|
577
|
-
_$insert(_el$
|
|
800
|
+
}), _el$56);
|
|
801
|
+
_$insert(_el$50, _$createComponent(Show, {
|
|
578
802
|
get when() {
|
|
579
803
|
return !dontKnow();
|
|
580
804
|
},
|
|
581
805
|
get children() {
|
|
582
|
-
var _el$
|
|
583
|
-
_$setProp(_el$
|
|
584
|
-
_$insert(_el$
|
|
585
|
-
_$effect((_$p) => _$setProp(_el$
|
|
586
|
-
return _el$
|
|
806
|
+
var _el$55 = _$createElement("text");
|
|
807
|
+
_$setProp(_el$55, "bold", true);
|
|
808
|
+
_$insert(_el$55, () => feedback()?.correct ? "\u2713 Correct! Well located." : "\u2717 Incorrect \u2014 nice try, let's fix the edge.");
|
|
809
|
+
_$effect((_$p) => _$setProp(_el$55, "fg", feedback()?.correct ? theme().success : theme().error, _$p));
|
|
810
|
+
return _el$55;
|
|
587
811
|
}
|
|
588
|
-
}), _el$
|
|
589
|
-
_$insertNode(_el$
|
|
590
|
-
_$insert(_el$
|
|
591
|
-
_$insert(_el$
|
|
812
|
+
}), _el$56);
|
|
813
|
+
_$insertNode(_el$56, _el$57);
|
|
814
|
+
_$insert(_el$56, () => props.request.correctIndices.map((i) => `${i}. ${options()[i - 1]?.label}`).join(", "), null);
|
|
815
|
+
_$insert(_el$50, _$createComponent(Show, {
|
|
592
816
|
get when() {
|
|
593
817
|
return note();
|
|
594
818
|
},
|
|
595
819
|
get children() {
|
|
596
|
-
var _el$
|
|
597
|
-
_$insertNode(_el$
|
|
598
|
-
_$insert(_el$
|
|
599
|
-
_$effect((_$p) => _$setProp(_el$
|
|
600
|
-
return _el$
|
|
820
|
+
var _el$58 = _$createElement("text"), _el$59 = _$createTextNode(`Your note: `);
|
|
821
|
+
_$insertNode(_el$58, _el$59);
|
|
822
|
+
_$insert(_el$58, note, null);
|
|
823
|
+
_$effect((_$p) => _$setProp(_el$58, "fg", theme().textMuted, _$p));
|
|
824
|
+
return _el$58;
|
|
601
825
|
}
|
|
602
|
-
}), _el$
|
|
603
|
-
_$insertNode(_el$
|
|
604
|
-
_$setProp(_el$
|
|
605
|
-
_$setProp(_el$
|
|
606
|
-
_$setProp(_el$
|
|
607
|
-
_$insert(_el$
|
|
608
|
-
_$insertNode(_el$48, _el$49);
|
|
609
|
-
_$setProp(_el$48, "justifyContent", "center");
|
|
610
|
-
_$setProp(_el$48, "paddingTop", 1);
|
|
611
|
-
_$insertNode(_el$49, _$createTextNode(`\u21B5 Enter / Esc to continue \u2192 next probe`));
|
|
826
|
+
}), _el$60);
|
|
827
|
+
_$insertNode(_el$60, _el$61);
|
|
828
|
+
_$setProp(_el$60, "border", true);
|
|
829
|
+
_$setProp(_el$60, "padding", 1);
|
|
830
|
+
_$setProp(_el$61, "wrapMode", "wrap");
|
|
831
|
+
_$insert(_el$61, () => props.request.explanation);
|
|
612
832
|
_$effect((_p$) => {
|
|
613
|
-
var _v$
|
|
614
|
-
_v$
|
|
615
|
-
_v$
|
|
616
|
-
_v$
|
|
617
|
-
_v$
|
|
618
|
-
_v$
|
|
619
|
-
_v$
|
|
620
|
-
_v$
|
|
621
|
-
_v$21 !== _p$.h && (_p$.h = _$setProp(_el$49, "fg", _v$21, _p$.h));
|
|
833
|
+
var _v$22 = feedback()?.correct ? theme().success : theme().error, _v$23 = theme().background, _v$24 = theme().borderSubtle, _v$25 = theme().textMuted, _v$26 = theme().borderSubtle, _v$27 = theme().backgroundPanel, _v$28 = theme().text;
|
|
834
|
+
_v$22 !== _p$.e && (_p$.e = _$setProp(_el$50, "borderColor", _v$22, _p$.e));
|
|
835
|
+
_v$23 !== _p$.t && (_p$.t = _$setProp(_el$50, "backgroundColor", _v$23, _p$.t));
|
|
836
|
+
_v$24 !== _p$.a && (_p$.a = _$setProp(_el$52, "fg", _v$24, _p$.a));
|
|
837
|
+
_v$25 !== _p$.o && (_p$.o = _$setProp(_el$56, "fg", _v$25, _p$.o));
|
|
838
|
+
_v$26 !== _p$.i && (_p$.i = _$setProp(_el$60, "borderColor", _v$26, _p$.i));
|
|
839
|
+
_v$27 !== _p$.n && (_p$.n = _$setProp(_el$60, "backgroundColor", _v$27, _p$.n));
|
|
840
|
+
_v$28 !== _p$.s && (_p$.s = _$setProp(_el$61, "fg", _v$28, _p$.s));
|
|
622
841
|
return _p$;
|
|
623
842
|
}, {
|
|
624
843
|
e: undefined,
|
|
@@ -627,21 +846,29 @@ function QuizDialog(props) {
|
|
|
627
846
|
o: undefined,
|
|
628
847
|
i: undefined,
|
|
629
848
|
n: undefined,
|
|
630
|
-
s: undefined
|
|
631
|
-
h: undefined
|
|
849
|
+
s: undefined
|
|
632
850
|
});
|
|
633
|
-
return _el$
|
|
851
|
+
return _el$50;
|
|
634
852
|
}
|
|
635
853
|
}), null);
|
|
854
|
+
_$insertNode(_el$62, _el$63);
|
|
855
|
+
_$setProp(_el$62, "height", 1);
|
|
856
|
+
_$setProp(_el$62, "justifyContent", "center");
|
|
857
|
+
_$insert(_el$63, (() => {
|
|
858
|
+
var _c$3 = _$memo(() => phase() === "feedback");
|
|
859
|
+
return () => _c$3() ? "\u21B5 Enter / Esc to continue \u2192 next probe" : phase() === "classifying" ? "Classifying your note..." : "Navigate options \xB7 Tab note \xB7 Esc cancel";
|
|
860
|
+
})());
|
|
636
861
|
_$effect((_p$) => {
|
|
637
|
-
var _v$
|
|
638
|
-
_v$
|
|
639
|
-
_v$
|
|
640
|
-
_v$
|
|
641
|
-
_v$
|
|
642
|
-
_v$
|
|
643
|
-
_v$
|
|
644
|
-
_v$
|
|
862
|
+
var _v$29 = popupWidth(), _v$30 = popupHeight(), _v$31 = phase() === "feedback" ? feedback()?.correct ? theme().success : theme().error : theme().accent, _v$32 = theme().backgroundPanel, _v$33 = phase() === "feedback" ? feedback()?.correct ? theme().success : theme().error : theme().accent, _v$34 = theme().background, _v$35 = theme().background, _v$36 = theme().text, _v$37 = theme().textMuted;
|
|
863
|
+
_v$29 !== _p$.e && (_p$.e = _$setProp(_el$, "width", _v$29, _p$.e));
|
|
864
|
+
_v$30 !== _p$.t && (_p$.t = _$setProp(_el$, "height", _v$30, _p$.t));
|
|
865
|
+
_v$31 !== _p$.a && (_p$.a = _$setProp(_el$, "borderColor", _v$31, _p$.a));
|
|
866
|
+
_v$32 !== _p$.o && (_p$.o = _$setProp(_el$, "backgroundColor", _v$32, _p$.o));
|
|
867
|
+
_v$33 !== _p$.i && (_p$.i = _$setProp(_el$2, "backgroundColor", _v$33, _p$.i));
|
|
868
|
+
_v$34 !== _p$.n && (_p$.n = _$setProp(_el$3, "fg", _v$34, _p$.n));
|
|
869
|
+
_v$35 !== _p$.s && (_p$.s = _$setProp(_el$4, "fg", _v$35, _p$.s));
|
|
870
|
+
_v$36 !== _p$.h && (_p$.h = _$setProp(_el$8, "fg", _v$36, _p$.h));
|
|
871
|
+
_v$37 !== _p$.r && (_p$.r = _$setProp(_el$63, "fg", _v$37, _p$.r));
|
|
645
872
|
return _p$;
|
|
646
873
|
}, {
|
|
647
874
|
e: undefined,
|
|
@@ -650,7 +877,9 @@ function QuizDialog(props) {
|
|
|
650
877
|
o: undefined,
|
|
651
878
|
i: undefined,
|
|
652
879
|
n: undefined,
|
|
653
|
-
s: undefined
|
|
880
|
+
s: undefined,
|
|
881
|
+
h: undefined,
|
|
882
|
+
r: undefined
|
|
654
883
|
});
|
|
655
884
|
return _el$;
|
|
656
885
|
})();
|
|
@@ -659,6 +888,7 @@ function QuizBatchDialog(props) {
|
|
|
659
888
|
const theme = () => props.api.theme.current;
|
|
660
889
|
const dims = useTerminalDimensions();
|
|
661
890
|
const popupWidth = () => Math.max(68, Math.min(dims().width - 4, 96));
|
|
891
|
+
const popupHeight = () => Math.max(4, Math.min(24, dims().height - 2));
|
|
662
892
|
const [idx, setIdx] = createSignal(0);
|
|
663
893
|
if (!props.request.quizzes || props.request.quizzes.length === 0) {
|
|
664
894
|
tlog("QuizBatchDialog empty quizzes, cancelling", props.request.id);
|
|
@@ -747,10 +977,106 @@ function QuizBatchDialog(props) {
|
|
|
747
977
|
const submitSelect = () => {
|
|
748
978
|
try {
|
|
749
979
|
const m = selected();
|
|
750
|
-
if (!isMulti() && m.size === 0 && !dontKnow())
|
|
980
|
+
if (!isMulti() && m.size === 0 && !dontKnow() && !note().trim())
|
|
751
981
|
return;
|
|
752
|
-
if (isMulti() && m.size === 0 && !dontKnow())
|
|
982
|
+
if (isMulti() && m.size === 0 && !dontKnow() && !note().trim())
|
|
753
983
|
return;
|
|
984
|
+
if (m.size === 0 && !dontKnow() && note().trim()) {
|
|
985
|
+
setPhase("classifying");
|
|
986
|
+
try {
|
|
987
|
+
const pDir = globalThis.__learnPendingDir || ".opencode/learn-pending";
|
|
988
|
+
const cid = `${props.request.id}-${idx()}`;
|
|
989
|
+
const routeSessionID = props.api.route?.current?.params?.sessionID;
|
|
990
|
+
const pendingClassify = {
|
|
991
|
+
id: cid,
|
|
992
|
+
type: "classify",
|
|
993
|
+
note: note().trim(),
|
|
994
|
+
question: cur().question,
|
|
995
|
+
options: cur().options.map((o, i) => ({
|
|
996
|
+
label: o.label,
|
|
997
|
+
value: o.value,
|
|
998
|
+
index: i + 1
|
|
999
|
+
})),
|
|
1000
|
+
timestamp: Date.now(),
|
|
1001
|
+
sessionID: props.request.sessionID || routeSessionID
|
|
1002
|
+
};
|
|
1003
|
+
fs.writeFileSync(path.join(pDir, `classify-${cid}.json`), JSON.stringify(pendingClassify), "utf8");
|
|
1004
|
+
tlog("QuizBatchDialog classify request", cid, note().trim().slice(0, 50));
|
|
1005
|
+
const respPath = path.join(pDir, `classify-response-${cid}.json`);
|
|
1006
|
+
let attempts = 0;
|
|
1007
|
+
const poll = setInterval(() => {
|
|
1008
|
+
attempts++;
|
|
1009
|
+
if (attempts > 60) {
|
|
1010
|
+
clearInterval(poll);
|
|
1011
|
+
setFeedback({
|
|
1012
|
+
correct: false,
|
|
1013
|
+
selectedIndices: []
|
|
1014
|
+
});
|
|
1015
|
+
setPhase("feedback");
|
|
1016
|
+
return;
|
|
1017
|
+
}
|
|
1018
|
+
try {
|
|
1019
|
+
if (fs.existsSync(respPath)) {
|
|
1020
|
+
clearInterval(poll);
|
|
1021
|
+
const raw = fs.readFileSync(respPath, "utf8");
|
|
1022
|
+
const data = JSON.parse(raw);
|
|
1023
|
+
try {
|
|
1024
|
+
fs.unlinkSync(respPath);
|
|
1025
|
+
fs.unlinkSync(path.join(pDir, `classify-${cid}.json`));
|
|
1026
|
+
} catch {}
|
|
1027
|
+
const inferred = data?.inferredIndices;
|
|
1028
|
+
const semanticCorrect = data?.semanticCorrect;
|
|
1029
|
+
const reason = data?.reason;
|
|
1030
|
+
const computeOk2 = (idxs) => {
|
|
1031
|
+
if (typeof semanticCorrect === "boolean")
|
|
1032
|
+
return semanticCorrect;
|
|
1033
|
+
const correctSet2 = new Set(cur().correctIndices);
|
|
1034
|
+
return idxs.length === cur().correctIndices.length && idxs.every((v) => correctSet2.has(v)) && cur().correctIndices.every((v) => idxs.includes(v));
|
|
1035
|
+
};
|
|
1036
|
+
if (inferred && inferred.length) {
|
|
1037
|
+
const mm = new Map;
|
|
1038
|
+
for (const idx2 of inferred) {
|
|
1039
|
+
const opt = cur().options[idx2 - 1];
|
|
1040
|
+
if (opt)
|
|
1041
|
+
mm.set(`opt:${idx2 - 1}`, {
|
|
1042
|
+
label: opt.label,
|
|
1043
|
+
value: opt.value,
|
|
1044
|
+
index: idx2
|
|
1045
|
+
});
|
|
1046
|
+
}
|
|
1047
|
+
setSelected(mm);
|
|
1048
|
+
const ok2 = computeOk2(inferred);
|
|
1049
|
+
setFeedback({
|
|
1050
|
+
correct: ok2,
|
|
1051
|
+
selectedIndices: inferred
|
|
1052
|
+
});
|
|
1053
|
+
if (reason)
|
|
1054
|
+
setNote((prev) => prev ? `${prev} \u2014 ${reason}` : prev);
|
|
1055
|
+
tlog("QuizBatchDialog classify done", inferred.join(","), ok2, reason || "");
|
|
1056
|
+
} else {
|
|
1057
|
+
const ok2 = typeof semanticCorrect === "boolean" ? semanticCorrect : false;
|
|
1058
|
+
setFeedback({
|
|
1059
|
+
correct: ok2,
|
|
1060
|
+
selectedIndices: []
|
|
1061
|
+
});
|
|
1062
|
+
if (reason)
|
|
1063
|
+
setNote((prev) => prev ? `${prev} \u2014 ${reason}` : reason);
|
|
1064
|
+
}
|
|
1065
|
+
setPhase("feedback");
|
|
1066
|
+
}
|
|
1067
|
+
} catch {}
|
|
1068
|
+
}, 500);
|
|
1069
|
+
onCleanup(() => clearInterval(poll));
|
|
1070
|
+
} catch (e) {
|
|
1071
|
+
tlog("classify batch failed", String(e));
|
|
1072
|
+
setFeedback({
|
|
1073
|
+
correct: false,
|
|
1074
|
+
selectedIndices: []
|
|
1075
|
+
});
|
|
1076
|
+
setPhase("feedback");
|
|
1077
|
+
}
|
|
1078
|
+
return;
|
|
1079
|
+
}
|
|
754
1080
|
const sel = Array.from(m.values());
|
|
755
1081
|
const dk = dontKnow();
|
|
756
1082
|
const correctSet = new Set(cur().correctIndices);
|
|
@@ -770,6 +1096,10 @@ function QuizBatchDialog(props) {
|
|
|
770
1096
|
try {
|
|
771
1097
|
const k = evt.name || evt.sequence || evt.raw || "";
|
|
772
1098
|
const seq = evt.sequence || "";
|
|
1099
|
+
if (phase() === "classifying") {
|
|
1100
|
+
prevent(evt);
|
|
1101
|
+
return;
|
|
1102
|
+
}
|
|
773
1103
|
if (phase() === "feedback") {
|
|
774
1104
|
if (k === "enter" || seq === "\r" || k === "escape" || k === "esc") {
|
|
775
1105
|
prevent(evt);
|
|
@@ -870,62 +1200,65 @@ function QuizBatchDialog(props) {
|
|
|
870
1200
|
}
|
|
871
1201
|
});
|
|
872
1202
|
return (() => {
|
|
873
|
-
var _el$
|
|
874
|
-
_$insertNode(_el$
|
|
875
|
-
_$insertNode(_el$
|
|
876
|
-
_$
|
|
877
|
-
_$setProp(_el$
|
|
878
|
-
_$setProp(_el$
|
|
879
|
-
_$setProp(_el$
|
|
880
|
-
_$
|
|
881
|
-
_$insertNode(_el$
|
|
882
|
-
_$
|
|
883
|
-
_$setProp(_el$
|
|
884
|
-
_$setProp(_el$
|
|
885
|
-
_$setProp(_el$
|
|
886
|
-
_$setProp(_el$
|
|
887
|
-
_$
|
|
888
|
-
_$insertNode(_el$
|
|
889
|
-
_$insertNode(_el$
|
|
890
|
-
_$
|
|
891
|
-
_$
|
|
892
|
-
_$insert(_el$
|
|
893
|
-
_$insert(_el$
|
|
894
|
-
|
|
895
|
-
|
|
1203
|
+
var _el$79 = _$createElement("box"), _el$80 = _$createElement("box"), _el$81 = _$createElement("text"), _el$82 = _$createTextNode(` decks.quiz batch `), _el$83 = _$createTextNode(`/`), _el$84 = _$createTextNode(` `), _el$85 = _$createElement("text"), _el$87 = _$createElement("scrollbox"), _el$88 = _$createElement("text"), _el$129 = _$createElement("box"), _el$130 = _$createElement("text");
|
|
1204
|
+
_$insertNode(_el$79, _el$80);
|
|
1205
|
+
_$insertNode(_el$79, _el$87);
|
|
1206
|
+
_$insertNode(_el$79, _el$129);
|
|
1207
|
+
_$setProp(_el$79, "flexDirection", "column");
|
|
1208
|
+
_$setProp(_el$79, "border", true);
|
|
1209
|
+
_$setProp(_el$79, "padding", 1);
|
|
1210
|
+
_$setProp(_el$79, "gap", 1);
|
|
1211
|
+
_$insertNode(_el$80, _el$81);
|
|
1212
|
+
_$insertNode(_el$80, _el$85);
|
|
1213
|
+
_$setProp(_el$80, "flexDirection", "row");
|
|
1214
|
+
_$setProp(_el$80, "justifyContent", "space-between");
|
|
1215
|
+
_$setProp(_el$80, "paddingLeft", 1);
|
|
1216
|
+
_$setProp(_el$80, "paddingRight", 1);
|
|
1217
|
+
_$setProp(_el$80, "height", 1);
|
|
1218
|
+
_$insertNode(_el$81, _el$82);
|
|
1219
|
+
_$insertNode(_el$81, _el$83);
|
|
1220
|
+
_$insertNode(_el$81, _el$84);
|
|
1221
|
+
_$setProp(_el$81, "bold", true);
|
|
1222
|
+
_$insert(_el$81, () => idx() + 1, _el$83);
|
|
1223
|
+
_$insert(_el$81, () => props.request.quizzes.length, _el$84);
|
|
1224
|
+
_$insert(_el$81, (() => {
|
|
1225
|
+
var _c$5 = _$memo(() => phase() === "feedback");
|
|
1226
|
+
return () => _c$5() ? feedback()?.correct ? "\u2713" : "\u2717" : "";
|
|
896
1227
|
})(), null);
|
|
897
|
-
_$insertNode(_el$
|
|
898
|
-
_$setProp(_el$
|
|
899
|
-
_$
|
|
900
|
-
_$setProp(_el$
|
|
901
|
-
_$
|
|
902
|
-
_$
|
|
1228
|
+
_$insertNode(_el$85, _$createTextNode(`learn`));
|
|
1229
|
+
_$setProp(_el$85, "dim", true);
|
|
1230
|
+
_$insertNode(_el$87, _el$88);
|
|
1231
|
+
_$setProp(_el$87, "flexGrow", 1);
|
|
1232
|
+
_$setProp(_el$88, "bold", true);
|
|
1233
|
+
_$setProp(_el$88, "wrapMode", "wrap");
|
|
1234
|
+
_$insert(_el$88, () => cur().question);
|
|
1235
|
+
_$insert(_el$87, _$createComponent(Show, {
|
|
903
1236
|
get when() {
|
|
904
1237
|
return cur().details;
|
|
905
1238
|
},
|
|
906
1239
|
get children() {
|
|
907
|
-
var _el$
|
|
908
|
-
_$setProp(_el$
|
|
909
|
-
_$insert(_el$
|
|
910
|
-
_$effect((_$p) => _$setProp(_el$
|
|
911
|
-
return _el$
|
|
1240
|
+
var _el$89 = _$createElement("text");
|
|
1241
|
+
_$setProp(_el$89, "wrapMode", "wrap");
|
|
1242
|
+
_$insert(_el$89, () => cur().details);
|
|
1243
|
+
_$effect((_$p) => _$setProp(_el$89, "fg", theme().textMuted, _$p));
|
|
1244
|
+
return _el$89;
|
|
912
1245
|
}
|
|
913
1246
|
}), null);
|
|
914
|
-
_$insert(_el$
|
|
1247
|
+
_$insert(_el$87, _$createComponent(Show, {
|
|
915
1248
|
get when() {
|
|
916
1249
|
return phase() === "select";
|
|
917
1250
|
},
|
|
918
1251
|
get children() {
|
|
919
|
-
var _el$
|
|
920
|
-
_$insertNode(_el$
|
|
921
|
-
_$insertNode(_el$
|
|
922
|
-
_$insertNode(_el$
|
|
923
|
-
_$insertNode(_el$
|
|
924
|
-
_$setProp(_el$
|
|
925
|
-
_$setProp(_el$
|
|
926
|
-
_$setProp(_el$
|
|
927
|
-
_$setProp(_el$
|
|
928
|
-
_$insert(_el$
|
|
1252
|
+
var _el$90 = _$createElement("box"), _el$91 = _$createElement("box"), _el$92 = _$createElement("text"), _el$93 = _$createElement("box"), _el$94 = _$createElement("box"), _el$95 = _$createElement("text"), _el$96 = _$createElement("box"), _el$97 = _$createElement("text"), _el$98 = _$createElement("box"), _el$99 = _$createElement("text"), _el$101 = _$createElement("box"), _el$102 = _$createElement("text"), _el$104 = _$createElement("box"), _el$106 = _$createElement("box"), _el$107 = _$createElement("text"), _el$108 = _$createElement("text"), _el$109 = _$createTextNode(`/`);
|
|
1253
|
+
_$insertNode(_el$90, _el$91);
|
|
1254
|
+
_$insertNode(_el$90, _el$93);
|
|
1255
|
+
_$insertNode(_el$90, _el$101);
|
|
1256
|
+
_$insertNode(_el$90, _el$106);
|
|
1257
|
+
_$setProp(_el$90, "flexDirection", "column");
|
|
1258
|
+
_$setProp(_el$90, "gap", 0);
|
|
1259
|
+
_$setProp(_el$90, "padding", 1);
|
|
1260
|
+
_$setProp(_el$90, "border", true);
|
|
1261
|
+
_$insert(_el$90, _$createComponent(For, {
|
|
929
1262
|
get each() {
|
|
930
1263
|
return cur().options;
|
|
931
1264
|
},
|
|
@@ -934,36 +1267,36 @@ function QuizBatchDialog(props) {
|
|
|
934
1267
|
const foc = () => focused() === "options" && optionIndex() === id;
|
|
935
1268
|
const sel = () => selected().has(`opt:${id}`);
|
|
936
1269
|
return (() => {
|
|
937
|
-
var _el$
|
|
938
|
-
_$insertNode(_el$
|
|
939
|
-
_$insertNode(_el$
|
|
940
|
-
_$insertNode(_el$
|
|
941
|
-
_$setProp(_el$
|
|
942
|
-
_$setProp(_el$
|
|
943
|
-
_$setProp(_el$
|
|
944
|
-
_$setProp(_el$
|
|
945
|
-
_$insertNode(_el$
|
|
946
|
-
_$setProp(_el$
|
|
947
|
-
_$insert(_el$
|
|
948
|
-
_$insertNode(_el$
|
|
949
|
-
_$setProp(_el$
|
|
950
|
-
_$insert(_el$
|
|
951
|
-
var _c$
|
|
952
|
-
return () => _c$
|
|
1270
|
+
var _el$131 = _$createElement("box"), _el$132 = _$createElement("box"), _el$133 = _$createElement("text"), _el$134 = _$createElement("box"), _el$135 = _$createElement("text"), _el$136 = _$createElement("box"), _el$137 = _$createElement("text"), _el$138 = _$createTextNode(`. `);
|
|
1271
|
+
_$insertNode(_el$131, _el$132);
|
|
1272
|
+
_$insertNode(_el$131, _el$134);
|
|
1273
|
+
_$insertNode(_el$131, _el$136);
|
|
1274
|
+
_$setProp(_el$131, "flexDirection", "row");
|
|
1275
|
+
_$setProp(_el$131, "alignItems", "flexStart");
|
|
1276
|
+
_$setProp(_el$131, "gap", 1);
|
|
1277
|
+
_$setProp(_el$131, "paddingLeft", 1);
|
|
1278
|
+
_$insertNode(_el$132, _el$133);
|
|
1279
|
+
_$setProp(_el$132, "width", 2);
|
|
1280
|
+
_$insert(_el$133, () => foc() ? "\u25B8" : " ");
|
|
1281
|
+
_$insertNode(_el$134, _el$135);
|
|
1282
|
+
_$setProp(_el$134, "width", 2);
|
|
1283
|
+
_$insert(_el$135, (() => {
|
|
1284
|
+
var _c$7 = _$memo(() => !!isMulti());
|
|
1285
|
+
return () => _c$7() ? sel() ? "\u2611" : "\u2610" : sel() ? "\u2B22" : "\u25CB";
|
|
953
1286
|
})());
|
|
954
|
-
_$insertNode(_el$
|
|
955
|
-
_$setProp(_el$
|
|
956
|
-
_$insertNode(_el$
|
|
957
|
-
_$setProp(_el$
|
|
958
|
-
_$insert(_el$
|
|
959
|
-
_$insert(_el$
|
|
1287
|
+
_$insertNode(_el$136, _el$137);
|
|
1288
|
+
_$setProp(_el$136, "flexGrow", 1);
|
|
1289
|
+
_$insertNode(_el$137, _el$138);
|
|
1290
|
+
_$setProp(_el$137, "wrapMode", "wrap");
|
|
1291
|
+
_$insert(_el$137, id + 1, _el$138);
|
|
1292
|
+
_$insert(_el$137, () => opt.label, null);
|
|
960
1293
|
_$effect((_p$) => {
|
|
961
|
-
var _v$
|
|
962
|
-
_v$
|
|
963
|
-
_v$
|
|
964
|
-
_v$
|
|
965
|
-
_v$
|
|
966
|
-
_v$
|
|
1294
|
+
var _v$79 = foc() ? theme().backgroundElement : undefined, _v$80 = foc() ? theme().accent : theme().textMuted, _v$81 = isMulti() ? sel() ? theme().success : theme().textMuted : sel() ? theme().accent : theme().textMuted, _v$82 = sel() ? theme().text : theme().textMuted, _v$83 = foc();
|
|
1295
|
+
_v$79 !== _p$.e && (_p$.e = _$setProp(_el$131, "backgroundColor", _v$79, _p$.e));
|
|
1296
|
+
_v$80 !== _p$.t && (_p$.t = _$setProp(_el$133, "fg", _v$80, _p$.t));
|
|
1297
|
+
_v$81 !== _p$.a && (_p$.a = _$setProp(_el$135, "fg", _v$81, _p$.a));
|
|
1298
|
+
_v$82 !== _p$.o && (_p$.o = _$setProp(_el$137, "fg", _v$82, _p$.o));
|
|
1299
|
+
_v$83 !== _p$.i && (_p$.i = _$setProp(_el$137, "bold", _v$83, _p$.i));
|
|
967
1300
|
return _p$;
|
|
968
1301
|
}, {
|
|
969
1302
|
e: undefined,
|
|
@@ -972,115 +1305,120 @@ function QuizBatchDialog(props) {
|
|
|
972
1305
|
o: undefined,
|
|
973
1306
|
i: undefined
|
|
974
1307
|
});
|
|
975
|
-
return _el$
|
|
1308
|
+
return _el$131;
|
|
976
1309
|
})();
|
|
977
1310
|
}
|
|
978
|
-
}), _el$
|
|
979
|
-
_$insertNode(_el$
|
|
980
|
-
_$setProp(_el$
|
|
981
|
-
_$insert(_el$
|
|
982
|
-
_$insertNode(_el$
|
|
983
|
-
_$insertNode(_el$
|
|
984
|
-
_$insertNode(_el$
|
|
985
|
-
_$setProp(_el$
|
|
986
|
-
_$setProp(_el$
|
|
987
|
-
_$setProp(_el$
|
|
988
|
-
_$insertNode(_el$
|
|
989
|
-
_$setProp(_el$
|
|
990
|
-
_$insert(_el$
|
|
991
|
-
_$insertNode(_el$
|
|
992
|
-
_$setProp(_el$
|
|
993
|
-
_$insert(_el$
|
|
994
|
-
_$insertNode(_el$
|
|
995
|
-
_$setProp(_el$
|
|
996
|
-
_$insertNode(_el$
|
|
997
|
-
_$setProp(_el$
|
|
998
|
-
_$insertNode(_el$
|
|
999
|
-
_$insertNode(_el$
|
|
1000
|
-
_$setProp(_el$
|
|
1001
|
-
_$setProp(_el$
|
|
1002
|
-
_$insertNode(_el$
|
|
1003
|
-
_$setProp(_el$
|
|
1004
|
-
_$setProp(_el$
|
|
1005
|
-
_$setProp(_el$
|
|
1006
|
-
_$insert(_el$
|
|
1311
|
+
}), _el$91);
|
|
1312
|
+
_$insertNode(_el$91, _el$92);
|
|
1313
|
+
_$setProp(_el$91, "height", 1);
|
|
1314
|
+
_$insert(_el$92, () => "\u2500".repeat(Math.max(20, popupWidth() - 8)));
|
|
1315
|
+
_$insertNode(_el$93, _el$94);
|
|
1316
|
+
_$insertNode(_el$93, _el$96);
|
|
1317
|
+
_$insertNode(_el$93, _el$98);
|
|
1318
|
+
_$setProp(_el$93, "flexDirection", "row");
|
|
1319
|
+
_$setProp(_el$93, "gap", 1);
|
|
1320
|
+
_$setProp(_el$93, "paddingLeft", 1);
|
|
1321
|
+
_$insertNode(_el$94, _el$95);
|
|
1322
|
+
_$setProp(_el$94, "width", 2);
|
|
1323
|
+
_$insert(_el$95, () => focused() === "options" && optionIndex() === dontKnowIdx() ? "\u25B8" : " ");
|
|
1324
|
+
_$insertNode(_el$96, _el$97);
|
|
1325
|
+
_$setProp(_el$96, "width", 2);
|
|
1326
|
+
_$insert(_el$97, () => dontKnow() ? "\u2611" : "\u2610");
|
|
1327
|
+
_$insertNode(_el$98, _el$99);
|
|
1328
|
+
_$setProp(_el$98, "flexGrow", 1);
|
|
1329
|
+
_$insertNode(_el$99, _$createTextNode(`I don't know`));
|
|
1330
|
+
_$setProp(_el$99, "italic", true);
|
|
1331
|
+
_$insertNode(_el$101, _el$102);
|
|
1332
|
+
_$insertNode(_el$101, _el$104);
|
|
1333
|
+
_$setProp(_el$101, "flexDirection", "column");
|
|
1334
|
+
_$setProp(_el$101, "paddingTop", 1);
|
|
1335
|
+
_$insertNode(_el$102, _$createTextNode(`\u270E Note`));
|
|
1336
|
+
_$setProp(_el$104, "border", true);
|
|
1337
|
+
_$setProp(_el$104, "paddingLeft", 1);
|
|
1338
|
+
_$setProp(_el$104, "paddingRight", 1);
|
|
1339
|
+
_$insert(_el$104, _$createComponent(Show, {
|
|
1007
1340
|
get when() {
|
|
1008
1341
|
return focused() === "note";
|
|
1009
1342
|
},
|
|
1010
1343
|
get fallback() {
|
|
1011
1344
|
return (() => {
|
|
1012
|
-
var _el$
|
|
1013
|
-
_$insert(_el$
|
|
1014
|
-
_$effect((_$p) => _$setProp(_el$
|
|
1015
|
-
return _el$
|
|
1345
|
+
var _el$139 = _$createElement("text");
|
|
1346
|
+
_$insert(_el$139, () => note() || "Tab to edit \xB7 share what you were thinking");
|
|
1347
|
+
_$effect((_$p) => _$setProp(_el$139, "fg", theme().textMuted, _$p));
|
|
1348
|
+
return _el$139;
|
|
1016
1349
|
})();
|
|
1017
1350
|
},
|
|
1018
1351
|
get children() {
|
|
1019
|
-
var _el$
|
|
1020
|
-
_$use((el) => noteEl = el, _el$
|
|
1021
|
-
_$setProp(_el$
|
|
1022
|
-
_$setProp(_el$
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1352
|
+
var _el$105 = _$createElement("input");
|
|
1353
|
+
_$use((el) => noteEl = el, _el$105);
|
|
1354
|
+
_$setProp(_el$105, "onInput", (v) => setNote(typeof v === "string" ? v : v?.target?.value ?? ""));
|
|
1355
|
+
_$setProp(_el$105, "onSubmit", () => {
|
|
1356
|
+
if (!selected().size && !dontKnow() && note().trim())
|
|
1357
|
+
submitSelect();
|
|
1358
|
+
else
|
|
1359
|
+
setFocused("options");
|
|
1360
|
+
});
|
|
1361
|
+
_$setProp(_el$105, "placeholder", "note (Enter to submit note \u2192 classify)");
|
|
1362
|
+
_$effect((_$p) => _$setProp(_el$105, "value", note(), _$p));
|
|
1363
|
+
return _el$105;
|
|
1026
1364
|
}
|
|
1027
1365
|
}));
|
|
1028
|
-
_$insertNode(_el$
|
|
1029
|
-
_$insertNode(_el$
|
|
1030
|
-
_$setProp(_el$
|
|
1031
|
-
_$setProp(_el$
|
|
1032
|
-
_$setProp(_el$
|
|
1033
|
-
_$
|
|
1034
|
-
_$insertNode(_el$
|
|
1035
|
-
_$insert(_el$
|
|
1036
|
-
_$insert(_el$
|
|
1037
|
-
_$insert(_el$
|
|
1366
|
+
_$insertNode(_el$106, _el$107);
|
|
1367
|
+
_$insertNode(_el$106, _el$108);
|
|
1368
|
+
_$setProp(_el$106, "flexDirection", "row");
|
|
1369
|
+
_$setProp(_el$106, "justifyContent", "space-between");
|
|
1370
|
+
_$setProp(_el$106, "paddingTop", 1);
|
|
1371
|
+
_$insert(_el$107, () => focused() === "note" ? "Enter submit note \u2192 classify \xB7 Tab back \xB7 Esc back" : "Space toggle \xB7 \u2193 to Submit \u2192 Enter \xB7 Tab note \xB7 Ctrl+Enter submit");
|
|
1372
|
+
_$insertNode(_el$108, _el$109);
|
|
1373
|
+
_$insert(_el$108, () => idx() + 1, _el$109);
|
|
1374
|
+
_$insert(_el$108, () => props.request.quizzes.length, null);
|
|
1375
|
+
_$insert(_el$90, _$createComponent(Show, {
|
|
1038
1376
|
get when() {
|
|
1039
1377
|
return isMulti();
|
|
1040
1378
|
},
|
|
1041
1379
|
get children() {
|
|
1042
|
-
var _el$
|
|
1043
|
-
_$insertNode(_el$
|
|
1044
|
-
_$setProp(_el$
|
|
1045
|
-
_$setProp(_el$
|
|
1046
|
-
_$insertNode(_el$
|
|
1047
|
-
_$insertNode(_el$
|
|
1048
|
-
_$setProp(_el$
|
|
1049
|
-
_$setProp(_el$
|
|
1050
|
-
_$setProp(_el$
|
|
1051
|
-
_$setProp(_el$
|
|
1052
|
-
_$setProp(_el$
|
|
1053
|
-
_$insert(_el$
|
|
1054
|
-
_$insertNode(_el$
|
|
1055
|
-
_$setProp(_el$
|
|
1380
|
+
var _el$110 = _$createElement("box"), _el$111 = _$createElement("box"), _el$112 = _$createElement("text"), _el$113 = _$createElement("text");
|
|
1381
|
+
_$insertNode(_el$110, _el$111);
|
|
1382
|
+
_$setProp(_el$110, "justifyContent", "center");
|
|
1383
|
+
_$setProp(_el$110, "paddingTop", 1);
|
|
1384
|
+
_$insertNode(_el$111, _el$112);
|
|
1385
|
+
_$insertNode(_el$111, _el$113);
|
|
1386
|
+
_$setProp(_el$111, "flexDirection", "row");
|
|
1387
|
+
_$setProp(_el$111, "gap", 1);
|
|
1388
|
+
_$setProp(_el$111, "border", true);
|
|
1389
|
+
_$setProp(_el$111, "paddingLeft", 2);
|
|
1390
|
+
_$setProp(_el$111, "paddingRight", 2);
|
|
1391
|
+
_$insert(_el$112, () => focused() === "options" && optionIndex() === submitIdx() ? "\u25B8" : " ");
|
|
1392
|
+
_$insertNode(_el$113, _$createTextNode(`\u21B3 Submit`));
|
|
1393
|
+
_$setProp(_el$113, "bold", true);
|
|
1056
1394
|
_$effect((_p$) => {
|
|
1057
|
-
var _v$
|
|
1058
|
-
_v$
|
|
1059
|
-
_v$
|
|
1060
|
-
_v$
|
|
1395
|
+
var _v$43 = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : theme().borderSubtle, _v$44 = focused() === "options" && optionIndex() === submitIdx() ? theme().backgroundElement : theme().background, _v$45 = focused() === "options" && optionIndex() === submitIdx() ? theme().accent : theme().textMuted;
|
|
1396
|
+
_v$43 !== _p$.e && (_p$.e = _$setProp(_el$111, "borderColor", _v$43, _p$.e));
|
|
1397
|
+
_v$44 !== _p$.t && (_p$.t = _$setProp(_el$111, "backgroundColor", _v$44, _p$.t));
|
|
1398
|
+
_v$45 !== _p$.a && (_p$.a = _$setProp(_el$112, "fg", _v$45, _p$.a));
|
|
1061
1399
|
return _p$;
|
|
1062
1400
|
}, {
|
|
1063
1401
|
e: undefined,
|
|
1064
1402
|
t: undefined,
|
|
1065
1403
|
a: undefined
|
|
1066
1404
|
});
|
|
1067
|
-
return _el$
|
|
1405
|
+
return _el$110;
|
|
1068
1406
|
}
|
|
1069
1407
|
}), null);
|
|
1070
1408
|
_$effect((_p$) => {
|
|
1071
|
-
var _v$
|
|
1072
|
-
_v$
|
|
1073
|
-
_v$
|
|
1074
|
-
_v$
|
|
1075
|
-
_v$
|
|
1076
|
-
_v$
|
|
1077
|
-
_v$
|
|
1078
|
-
_v$
|
|
1079
|
-
_v$
|
|
1080
|
-
_v$
|
|
1081
|
-
_v$
|
|
1082
|
-
_v$
|
|
1083
|
-
_v$
|
|
1409
|
+
var _v$46 = theme().borderSubtle, _v$47 = theme().background, _v$48 = theme().borderSubtle, _v$49 = focused() === "options" && optionIndex() === dontKnowIdx() ? theme().backgroundElement : undefined, _v$50 = focused() === "options" && optionIndex() === dontKnowIdx() ? theme().accent : theme().textMuted, _v$51 = dontKnow() ? theme().warning : theme().textMuted, _v$52 = dontKnow() ? theme().warning : theme().textMuted, _v$53 = focused() === "note" ? theme().accent : theme().textMuted, _v$54 = focused() === "note" ? theme().accent : theme().borderSubtle, _v$55 = theme().backgroundElement, _v$56 = theme().textMuted, _v$57 = theme().textMuted;
|
|
1410
|
+
_v$46 !== _p$.e && (_p$.e = _$setProp(_el$90, "borderColor", _v$46, _p$.e));
|
|
1411
|
+
_v$47 !== _p$.t && (_p$.t = _$setProp(_el$90, "backgroundColor", _v$47, _p$.t));
|
|
1412
|
+
_v$48 !== _p$.a && (_p$.a = _$setProp(_el$92, "fg", _v$48, _p$.a));
|
|
1413
|
+
_v$49 !== _p$.o && (_p$.o = _$setProp(_el$93, "backgroundColor", _v$49, _p$.o));
|
|
1414
|
+
_v$50 !== _p$.i && (_p$.i = _$setProp(_el$95, "fg", _v$50, _p$.i));
|
|
1415
|
+
_v$51 !== _p$.n && (_p$.n = _$setProp(_el$97, "fg", _v$51, _p$.n));
|
|
1416
|
+
_v$52 !== _p$.s && (_p$.s = _$setProp(_el$99, "fg", _v$52, _p$.s));
|
|
1417
|
+
_v$53 !== _p$.h && (_p$.h = _$setProp(_el$102, "fg", _v$53, _p$.h));
|
|
1418
|
+
_v$54 !== _p$.r && (_p$.r = _$setProp(_el$104, "borderColor", _v$54, _p$.r));
|
|
1419
|
+
_v$55 !== _p$.d && (_p$.d = _$setProp(_el$104, "backgroundColor", _v$55, _p$.d));
|
|
1420
|
+
_v$56 !== _p$.l && (_p$.l = _$setProp(_el$107, "fg", _v$56, _p$.l));
|
|
1421
|
+
_v$57 !== _p$.u && (_p$.u = _$setProp(_el$108, "fg", _v$57, _p$.u));
|
|
1084
1422
|
return _p$;
|
|
1085
1423
|
}, {
|
|
1086
1424
|
e: undefined,
|
|
@@ -1096,24 +1434,62 @@ function QuizBatchDialog(props) {
|
|
|
1096
1434
|
l: undefined,
|
|
1097
1435
|
u: undefined
|
|
1098
1436
|
});
|
|
1099
|
-
return _el$
|
|
1437
|
+
return _el$90;
|
|
1100
1438
|
}
|
|
1101
1439
|
}), null);
|
|
1102
|
-
_$insert(_el$
|
|
1440
|
+
_$insert(_el$87, _$createComponent(Show, {
|
|
1441
|
+
get when() {
|
|
1442
|
+
return phase() === "classifying";
|
|
1443
|
+
},
|
|
1444
|
+
get children() {
|
|
1445
|
+
var _el$115 = _$createElement("box"), _el$116 = _$createElement("text"), _el$118 = _$createElement("text"), _el$119 = _$createTextNode(`"`), _el$120 = _$createTextNode(`"`), _el$121 = _$createElement("text");
|
|
1446
|
+
_$insertNode(_el$115, _el$116);
|
|
1447
|
+
_$insertNode(_el$115, _el$118);
|
|
1448
|
+
_$insertNode(_el$115, _el$121);
|
|
1449
|
+
_$setProp(_el$115, "flexDirection", "column");
|
|
1450
|
+
_$setProp(_el$115, "gap", 1);
|
|
1451
|
+
_$setProp(_el$115, "padding", 1);
|
|
1452
|
+
_$setProp(_el$115, "border", true);
|
|
1453
|
+
_$setProp(_el$115, "alignItems", "center");
|
|
1454
|
+
_$insertNode(_el$116, _$createTextNode(`\u25D0 Classifying your note...`));
|
|
1455
|
+
_$setProp(_el$116, "bold", true);
|
|
1456
|
+
_$insertNode(_el$118, _el$119);
|
|
1457
|
+
_$insertNode(_el$118, _el$120);
|
|
1458
|
+
_$setProp(_el$118, "wrapMode", "wrap");
|
|
1459
|
+
_$insert(_el$118, note, _el$120);
|
|
1460
|
+
_$insertNode(_el$121, _$createTextNode(`Mapping to options \u2014 please wait`));
|
|
1461
|
+
_$effect((_p$) => {
|
|
1462
|
+
var _v$58 = theme().accent, _v$59 = theme().background, _v$60 = theme().accent, _v$61 = theme().textMuted, _v$62 = theme().textMuted;
|
|
1463
|
+
_v$58 !== _p$.e && (_p$.e = _$setProp(_el$115, "borderColor", _v$58, _p$.e));
|
|
1464
|
+
_v$59 !== _p$.t && (_p$.t = _$setProp(_el$115, "backgroundColor", _v$59, _p$.t));
|
|
1465
|
+
_v$60 !== _p$.a && (_p$.a = _$setProp(_el$116, "fg", _v$60, _p$.a));
|
|
1466
|
+
_v$61 !== _p$.o && (_p$.o = _$setProp(_el$118, "fg", _v$61, _p$.o));
|
|
1467
|
+
_v$62 !== _p$.i && (_p$.i = _$setProp(_el$121, "fg", _v$62, _p$.i));
|
|
1468
|
+
return _p$;
|
|
1469
|
+
}, {
|
|
1470
|
+
e: undefined,
|
|
1471
|
+
t: undefined,
|
|
1472
|
+
a: undefined,
|
|
1473
|
+
o: undefined,
|
|
1474
|
+
i: undefined
|
|
1475
|
+
});
|
|
1476
|
+
return _el$115;
|
|
1477
|
+
}
|
|
1478
|
+
}), null);
|
|
1479
|
+
_$insert(_el$87, _$createComponent(Show, {
|
|
1103
1480
|
get when() {
|
|
1104
1481
|
return phase() === "feedback";
|
|
1105
1482
|
},
|
|
1106
1483
|
get children() {
|
|
1107
|
-
var _el$
|
|
1108
|
-
_$insertNode(_el$
|
|
1109
|
-
_$insertNode(_el$
|
|
1110
|
-
_$insertNode(_el$
|
|
1111
|
-
_$
|
|
1112
|
-
_$setProp(_el$
|
|
1113
|
-
_$setProp(_el$
|
|
1114
|
-
_$setProp(_el$
|
|
1115
|
-
_$
|
|
1116
|
-
_$insert(_el$102, _$createComponent(For, {
|
|
1484
|
+
var _el$123 = _$createElement("box"), _el$124 = _$createElement("text"), _el$125 = _$createElement("text"), _el$126 = _$createTextNode(`Correct: `), _el$127 = _$createElement("box"), _el$128 = _$createElement("text");
|
|
1485
|
+
_$insertNode(_el$123, _el$124);
|
|
1486
|
+
_$insertNode(_el$123, _el$125);
|
|
1487
|
+
_$insertNode(_el$123, _el$127);
|
|
1488
|
+
_$setProp(_el$123, "flexDirection", "column");
|
|
1489
|
+
_$setProp(_el$123, "gap", 1);
|
|
1490
|
+
_$setProp(_el$123, "padding", 1);
|
|
1491
|
+
_$setProp(_el$123, "border", true);
|
|
1492
|
+
_$insert(_el$123, _$createComponent(For, {
|
|
1117
1493
|
get each() {
|
|
1118
1494
|
return cur().options;
|
|
1119
1495
|
},
|
|
@@ -1142,55 +1518,47 @@ function QuizBatchDialog(props) {
|
|
|
1142
1518
|
bg = theme().warning;
|
|
1143
1519
|
}
|
|
1144
1520
|
return (() => {
|
|
1145
|
-
var _el$
|
|
1146
|
-
_$insertNode(_el$
|
|
1147
|
-
_$insertNode(_el$
|
|
1148
|
-
_$setProp(_el$
|
|
1149
|
-
_$setProp(_el$
|
|
1150
|
-
_$setProp(_el$
|
|
1151
|
-
_$setProp(_el$
|
|
1152
|
-
_$insertNode(_el$
|
|
1153
|
-
_$setProp(_el$
|
|
1154
|
-
_$setProp(_el$
|
|
1155
|
-
_$setProp(_el$
|
|
1156
|
-
_$insert(_el$
|
|
1157
|
-
_$insertNode(_el$
|
|
1158
|
-
_$setProp(_el$
|
|
1159
|
-
_$insertNode(_el$
|
|
1160
|
-
_$setProp(_el$
|
|
1161
|
-
_$setProp(_el$
|
|
1162
|
-
_$insert(_el$
|
|
1163
|
-
_$insert(_el$
|
|
1164
|
-
return _el$
|
|
1521
|
+
var _el$140 = _$createElement("box"), _el$141 = _$createElement("box"), _el$142 = _$createElement("text"), _el$143 = _$createElement("box"), _el$144 = _$createElement("text"), _el$145 = _$createTextNode(`. `);
|
|
1522
|
+
_$insertNode(_el$140, _el$141);
|
|
1523
|
+
_$insertNode(_el$140, _el$143);
|
|
1524
|
+
_$setProp(_el$140, "flexDirection", "row");
|
|
1525
|
+
_$setProp(_el$140, "gap", 1);
|
|
1526
|
+
_$setProp(_el$140, "paddingLeft", 1);
|
|
1527
|
+
_$setProp(_el$140, "backgroundColor", bg);
|
|
1528
|
+
_$insertNode(_el$141, _el$142);
|
|
1529
|
+
_$setProp(_el$141, "width", 2);
|
|
1530
|
+
_$setProp(_el$142, "fg", fg);
|
|
1531
|
+
_$setProp(_el$142, "bold", true);
|
|
1532
|
+
_$insert(_el$142, ic);
|
|
1533
|
+
_$insertNode(_el$143, _el$144);
|
|
1534
|
+
_$setProp(_el$143, "flexGrow", 1);
|
|
1535
|
+
_$insertNode(_el$144, _el$145);
|
|
1536
|
+
_$setProp(_el$144, "fg", fg);
|
|
1537
|
+
_$setProp(_el$144, "wrapMode", "wrap");
|
|
1538
|
+
_$insert(_el$144, id, _el$145);
|
|
1539
|
+
_$insert(_el$144, () => opt.label, null);
|
|
1540
|
+
return _el$140;
|
|
1165
1541
|
})();
|
|
1166
1542
|
}
|
|
1167
|
-
}), _el$
|
|
1168
|
-
_$setProp(_el$
|
|
1169
|
-
_$insert(_el$
|
|
1170
|
-
_$insertNode(_el$
|
|
1171
|
-
_$insert(_el$
|
|
1172
|
-
_$insertNode(_el$
|
|
1173
|
-
_$setProp(_el$
|
|
1174
|
-
_$setProp(_el$
|
|
1175
|
-
_$setProp(_el$
|
|
1176
|
-
_$insert(_el$
|
|
1177
|
-
_$insertNode(_el$108, _el$109);
|
|
1178
|
-
_$setProp(_el$108, "justifyContent", "center");
|
|
1179
|
-
_$insertNode(_el$109, _el$110);
|
|
1180
|
-
_$insertNode(_el$109, _el$111);
|
|
1181
|
-
_$insertNode(_el$109, _el$112);
|
|
1182
|
-
_$insert(_el$109, () => idx() + 1, _el$111);
|
|
1183
|
-
_$insert(_el$109, () => props.request.quizzes.length, _el$112);
|
|
1543
|
+
}), _el$124);
|
|
1544
|
+
_$setProp(_el$124, "bold", true);
|
|
1545
|
+
_$insert(_el$124, () => feedback()?.correct ? "\u2713 Correct" : "\u2717 Incorrect");
|
|
1546
|
+
_$insertNode(_el$125, _el$126);
|
|
1547
|
+
_$insert(_el$125, () => cur().correctIndices.map((i) => `${i}. ${cur().options[i - 1]?.label}`).join(", "), null);
|
|
1548
|
+
_$insertNode(_el$127, _el$128);
|
|
1549
|
+
_$setProp(_el$127, "border", true);
|
|
1550
|
+
_$setProp(_el$127, "padding", 1);
|
|
1551
|
+
_$setProp(_el$128, "wrapMode", "wrap");
|
|
1552
|
+
_$insert(_el$128, () => cur().explanation);
|
|
1184
1553
|
_$effect((_p$) => {
|
|
1185
|
-
var _v$
|
|
1186
|
-
_v$
|
|
1187
|
-
_v$
|
|
1188
|
-
_v$
|
|
1189
|
-
_v$
|
|
1190
|
-
_v$
|
|
1191
|
-
_v$
|
|
1192
|
-
_v$
|
|
1193
|
-
_v$56 !== _p$.h && (_p$.h = _$setProp(_el$109, "fg", _v$56, _p$.h));
|
|
1554
|
+
var _v$63 = feedback()?.correct ? theme().success : theme().error, _v$64 = theme().background, _v$65 = feedback()?.correct ? theme().success : theme().error, _v$66 = theme().textMuted, _v$67 = theme().borderSubtle, _v$68 = theme().backgroundPanel, _v$69 = theme().text;
|
|
1555
|
+
_v$63 !== _p$.e && (_p$.e = _$setProp(_el$123, "borderColor", _v$63, _p$.e));
|
|
1556
|
+
_v$64 !== _p$.t && (_p$.t = _$setProp(_el$123, "backgroundColor", _v$64, _p$.t));
|
|
1557
|
+
_v$65 !== _p$.a && (_p$.a = _$setProp(_el$124, "fg", _v$65, _p$.a));
|
|
1558
|
+
_v$66 !== _p$.o && (_p$.o = _$setProp(_el$125, "fg", _v$66, _p$.o));
|
|
1559
|
+
_v$67 !== _p$.i && (_p$.i = _$setProp(_el$127, "borderColor", _v$67, _p$.i));
|
|
1560
|
+
_v$68 !== _p$.n && (_p$.n = _$setProp(_el$127, "backgroundColor", _v$68, _p$.n));
|
|
1561
|
+
_v$69 !== _p$.s && (_p$.s = _$setProp(_el$128, "fg", _v$69, _p$.s));
|
|
1194
1562
|
return _p$;
|
|
1195
1563
|
}, {
|
|
1196
1564
|
e: undefined,
|
|
@@ -1199,21 +1567,29 @@ function QuizBatchDialog(props) {
|
|
|
1199
1567
|
o: undefined,
|
|
1200
1568
|
i: undefined,
|
|
1201
1569
|
n: undefined,
|
|
1202
|
-
s: undefined
|
|
1203
|
-
h: undefined
|
|
1570
|
+
s: undefined
|
|
1204
1571
|
});
|
|
1205
|
-
return _el$
|
|
1572
|
+
return _el$123;
|
|
1206
1573
|
}
|
|
1207
1574
|
}), null);
|
|
1575
|
+
_$insertNode(_el$129, _el$130);
|
|
1576
|
+
_$setProp(_el$129, "height", 1);
|
|
1577
|
+
_$setProp(_el$129, "justifyContent", "center");
|
|
1578
|
+
_$insert(_el$130, (() => {
|
|
1579
|
+
var _c$6 = _$memo(() => phase() === "feedback");
|
|
1580
|
+
return () => _c$6() ? `Enter \u2192 next (${idx() + 1}/${props.request.quizzes.length})` : phase() === "classifying" ? "Classifying your note..." : "Navigate options \xB7 Tab note \xB7 Esc cancel";
|
|
1581
|
+
})());
|
|
1208
1582
|
_$effect((_p$) => {
|
|
1209
|
-
var _v$
|
|
1210
|
-
_v$
|
|
1211
|
-
_v$
|
|
1212
|
-
_v$
|
|
1213
|
-
_v$
|
|
1214
|
-
_v$
|
|
1215
|
-
_v$
|
|
1216
|
-
_v$
|
|
1583
|
+
var _v$70 = popupWidth(), _v$71 = popupHeight(), _v$72 = phase() === "feedback" ? feedback()?.correct ? theme().success : theme().error : theme().accent, _v$73 = theme().backgroundPanel, _v$74 = theme().accent, _v$75 = theme().background, _v$76 = theme().background, _v$77 = theme().text, _v$78 = theme().textMuted;
|
|
1584
|
+
_v$70 !== _p$.e && (_p$.e = _$setProp(_el$79, "width", _v$70, _p$.e));
|
|
1585
|
+
_v$71 !== _p$.t && (_p$.t = _$setProp(_el$79, "height", _v$71, _p$.t));
|
|
1586
|
+
_v$72 !== _p$.a && (_p$.a = _$setProp(_el$79, "borderColor", _v$72, _p$.a));
|
|
1587
|
+
_v$73 !== _p$.o && (_p$.o = _$setProp(_el$79, "backgroundColor", _v$73, _p$.o));
|
|
1588
|
+
_v$74 !== _p$.i && (_p$.i = _$setProp(_el$80, "backgroundColor", _v$74, _p$.i));
|
|
1589
|
+
_v$75 !== _p$.n && (_p$.n = _$setProp(_el$81, "fg", _v$75, _p$.n));
|
|
1590
|
+
_v$76 !== _p$.s && (_p$.s = _$setProp(_el$85, "fg", _v$76, _p$.s));
|
|
1591
|
+
_v$77 !== _p$.h && (_p$.h = _$setProp(_el$88, "fg", _v$77, _p$.h));
|
|
1592
|
+
_v$78 !== _p$.r && (_p$.r = _$setProp(_el$130, "fg", _v$78, _p$.r));
|
|
1217
1593
|
return _p$;
|
|
1218
1594
|
}, {
|
|
1219
1595
|
e: undefined,
|
|
@@ -1222,14 +1598,17 @@ function QuizBatchDialog(props) {
|
|
|
1222
1598
|
o: undefined,
|
|
1223
1599
|
i: undefined,
|
|
1224
1600
|
n: undefined,
|
|
1225
|
-
s: undefined
|
|
1601
|
+
s: undefined,
|
|
1602
|
+
h: undefined,
|
|
1603
|
+
r: undefined
|
|
1226
1604
|
});
|
|
1227
|
-
return _el$
|
|
1605
|
+
return _el$79;
|
|
1228
1606
|
})();
|
|
1229
1607
|
}
|
|
1230
1608
|
var tui = async (api) => {
|
|
1231
1609
|
const dir = api.state.path.directory || api.state.path.worktree || process.cwd();
|
|
1232
1610
|
const pendingDir = path.join(dir, PENDING_DIR);
|
|
1611
|
+
globalThis.__learnPendingDir = pendingDir;
|
|
1233
1612
|
ensureDir(pendingDir);
|
|
1234
1613
|
const heartbeatPath = path.join(pendingDir, ".tui-alive");
|
|
1235
1614
|
try {
|
|
@@ -1265,7 +1644,7 @@ var tui = async (api) => {
|
|
|
1265
1644
|
return;
|
|
1266
1645
|
let files = [];
|
|
1267
1646
|
try {
|
|
1268
|
-
files = fs.readdirSync(pendingDir).filter((f) => f.endsWith(".json") && !f.startsWith("response-") && !f.startsWith(".")).sort();
|
|
1647
|
+
files = fs.readdirSync(pendingDir).filter((f) => f.endsWith(".json") && !f.startsWith("response-") && !f.startsWith(".") && !f.startsWith("classify")).sort();
|
|
1269
1648
|
} catch {
|
|
1270
1649
|
return;
|
|
1271
1650
|
}
|
|
@@ -1300,6 +1679,8 @@ var tui = async (api) => {
|
|
|
1300
1679
|
} catch {}
|
|
1301
1680
|
return;
|
|
1302
1681
|
}
|
|
1682
|
+
if (!data.sessionID)
|
|
1683
|
+
data.sessionID = curSid;
|
|
1303
1684
|
try {
|
|
1304
1685
|
const cur = api.route?.current;
|
|
1305
1686
|
const curSid2 = cur?.params?.sessionID || cur?.sessionID;
|