@shivaedev/work-board 0.8.0 → 0.9.1
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/CHANGELOG.md +29 -0
- package/README.md +20 -1
- package/assets/agent.js +14 -14
- package/assets/native.js +49 -27
- package/dist/browser/responses/Prompt.d.ts +10 -0
- package/dist/browser/responses/Prompt.d.ts.map +1 -0
- package/dist/browser/responses/Prompt.js +2 -0
- package/dist/browser/responses/Prompt.js.map +1 -0
- package/dist/browser/responses/answerBody.d.ts +4 -0
- package/dist/browser/responses/answerBody.d.ts.map +1 -0
- package/dist/browser/responses/answerBody.js +9 -0
- package/dist/browser/responses/answerBody.js.map +1 -0
- package/dist/browser/responses/draftSession.d.ts.map +1 -1
- package/dist/browser/responses/draftSession.js +23 -10
- package/dist/browser/responses/draftSession.js.map +1 -1
- package/dist/browser/responses/drafts.d.ts +5 -0
- package/dist/browser/responses/drafts.d.ts.map +1 -1
- package/dist/browser/responses/drafts.js +20 -1
- package/dist/browser/responses/drafts.js.map +1 -1
- package/dist/browser/responses/preview.d.ts +2 -1
- package/dist/browser/responses/preview.d.ts.map +1 -1
- package/dist/browser/responses/preview.js +3 -2
- package/dist/browser/responses/preview.js.map +1 -1
- package/dist/browser/responses/questionnaireControls.d.ts +10 -0
- package/dist/browser/responses/questionnaireControls.d.ts.map +1 -0
- package/dist/browser/responses/questionnaireControls.js +68 -0
- package/dist/browser/responses/questionnaireControls.js.map +1 -0
- package/dist/browser/responses/schema.d.ts +41 -0
- package/dist/browser/responses/schema.d.ts.map +1 -1
- package/dist/browser/responses/schema.js +11 -1
- package/dist/browser/responses/schema.js.map +1 -1
- package/dist/browser/responses/setup.d.ts.map +1 -1
- package/dist/browser/responses/setup.js +34 -4
- package/dist/browser/responses/setup.js.map +1 -1
- package/dist/browser/responses/submissionFields.d.ts +15 -0
- package/dist/browser/responses/submissionFields.d.ts.map +1 -0
- package/dist/browser/responses/submissionFields.js +14 -0
- package/dist/browser/responses/submissionFields.js.map +1 -0
- package/dist/browser/responses/submit.d.ts.map +1 -1
- package/dist/browser/responses/submit.js +3 -9
- package/dist/browser/responses/submit.js.map +1 -1
- package/dist/metadata/backlinks.d.ts.map +1 -1
- package/dist/metadata/backlinks.js +3 -0
- package/dist/metadata/backlinks.js.map +1 -1
- package/dist/metadata/fields.d.ts +6 -0
- package/dist/metadata/fields.d.ts.map +1 -1
- package/dist/metadata/problems.d.ts.map +1 -1
- package/dist/metadata/problems.js +1 -0
- package/dist/metadata/problems.js.map +1 -1
- package/dist/metadata/schema.d.ts +6 -0
- package/dist/metadata/schema.d.ts.map +1 -1
- package/dist/page/metadataDetails.js +1 -1
- package/dist/page/metadataDetails.js.map +1 -1
- package/dist/page/style.d.ts.map +1 -1
- package/dist/page/style.js +1 -0
- package/dist/page/style.js.map +1 -1
- package/dist/render/markdown.d.ts +1 -0
- package/dist/render/markdown.d.ts.map +1 -1
- package/dist/render/markdown.js +4 -2
- package/dist/render/markdown.js.map +1 -1
- package/dist/render/questionnaireDocuments.d.ts +3 -0
- package/dist/render/questionnaireDocuments.d.ts.map +1 -0
- package/dist/render/questionnaireDocuments.js +11 -0
- package/dist/render/questionnaireDocuments.js.map +1 -0
- package/dist/render/visualDocuments.d.ts.map +1 -1
- package/dist/render/visualDocuments.js +3 -0
- package/dist/render/visualDocuments.js.map +1 -1
- package/dist/responses/agent.d.ts +12 -0
- package/dist/responses/agent.d.ts.map +1 -1
- package/dist/responses/await.d.ts +6 -0
- package/dist/responses/await.d.ts.map +1 -1
- package/dist/responses/composerHtml.d.ts +27 -0
- package/dist/responses/composerHtml.d.ts.map +1 -0
- package/dist/responses/composerHtml.js +14 -0
- package/dist/responses/composerHtml.js.map +1 -0
- package/dist/responses/history.d.ts +20 -0
- package/dist/responses/history.d.ts.map +1 -0
- package/dist/responses/history.js +16 -0
- package/dist/responses/history.js.map +1 -0
- package/dist/responses/locate.d.ts.map +1 -1
- package/dist/responses/locate.js +5 -0
- package/dist/responses/locate.js.map +1 -1
- package/dist/responses/make.d.ts +3 -0
- package/dist/responses/make.d.ts.map +1 -0
- package/dist/responses/make.js +16 -0
- package/dist/responses/make.js.map +1 -0
- package/dist/responses/outcome.d.ts +6 -0
- package/dist/responses/outcome.d.ts.map +1 -1
- package/dist/responses/page.d.ts +1 -1
- package/dist/responses/page.d.ts.map +1 -1
- package/dist/responses/page.js +7 -10
- package/dist/responses/page.js.map +1 -1
- package/dist/responses/read.d.ts +6 -0
- package/dist/responses/read.d.ts.map +1 -1
- package/dist/responses/records.d.ts.map +1 -1
- package/dist/responses/records.js +4 -1
- package/dist/responses/records.js.map +1 -1
- package/dist/responses/retry.d.ts +12 -0
- package/dist/responses/retry.d.ts.map +1 -1
- package/dist/responses/service.d.ts +37 -1
- package/dist/responses/service.d.ts.map +1 -1
- package/dist/responses/service.js +19 -14
- package/dist/responses/service.js.map +1 -1
- package/dist/responses/template.d.ts +7 -0
- package/dist/responses/template.d.ts.map +1 -0
- package/dist/responses/template.js +58 -0
- package/dist/responses/template.js.map +1 -0
- package/dist/responses/templateHtml.d.ts +7 -0
- package/dist/responses/templateHtml.d.ts.map +1 -0
- package/dist/responses/templateHtml.js +18 -0
- package/dist/responses/templateHtml.js.map +1 -0
- package/dist/responses/templateLinks.d.ts +3 -0
- package/dist/responses/templateLinks.d.ts.map +1 -0
- package/dist/responses/templateLinks.js +45 -0
- package/dist/responses/templateLinks.js.map +1 -0
- package/dist/responses/templateNodes.d.ts +17 -0
- package/dist/responses/templateNodes.d.ts.map +1 -0
- package/dist/responses/templateNodes.js +47 -0
- package/dist/responses/templateNodes.js.map +1 -0
- package/dist/responses/validateSupersedes.d.ts +5 -0
- package/dist/responses/validateSupersedes.d.ts.map +1 -0
- package/dist/responses/validateSupersedes.js +21 -0
- package/dist/responses/validateSupersedes.js.map +1 -0
- package/dist/responses/validatedInput.d.ts +3 -0
- package/dist/responses/validatedInput.d.ts.map +1 -0
- package/dist/responses/validatedInput.js +43 -0
- package/dist/responses/validatedInput.js.map +1 -0
- package/dist/responses/waitFor.d.ts +6 -0
- package/dist/responses/waitFor.d.ts.map +1 -1
- package/dist/rpc/contract.d.ts +24 -0
- package/dist/rpc/contract.d.ts.map +1 -1
- package/dist/rpc/responseContract.d.ts +48 -0
- package/dist/rpc/responseContract.d.ts.map +1 -1
- package/dist/serve-cli.js +1 -1
- package/package.json +2 -2
- package/src/browser/responses/Prompt.ts +6 -0
- package/src/browser/responses/answerBody.ts +11 -0
- package/src/browser/responses/draftSession.ts +23 -10
- package/src/browser/responses/drafts.ts +25 -1
- package/src/browser/responses/preview.ts +4 -2
- package/src/browser/responses/questionnaireControls.ts +74 -0
- package/src/browser/responses/schema.ts +12 -1
- package/src/browser/responses/setup.ts +34 -4
- package/src/browser/responses/submissionFields.ts +15 -0
- package/src/browser/responses/submit.ts +3 -11
- package/src/metadata/backlinks.ts +3 -0
- package/src/metadata/problems.ts +1 -0
- package/src/page/metadataDetails.ts +1 -1
- package/src/page/style.ts +1 -0
- package/src/render/markdown.ts +5 -2
- package/src/render/questionnaireDocuments.ts +12 -0
- package/src/render/visualDocuments.ts +3 -0
- package/src/responses/composerHtml.ts +28 -0
- package/src/responses/history.ts +18 -0
- package/src/responses/locate.ts +5 -0
- package/src/responses/make.ts +17 -0
- package/src/responses/page.ts +7 -18
- package/src/responses/records.ts +6 -1
- package/src/responses/service.ts +26 -15
- package/src/responses/template.ts +72 -0
- package/src/responses/templateHtml.ts +26 -0
- package/src/responses/templateLinks.ts +43 -0
- package/src/responses/templateNodes.ts +55 -0
- package/src/responses/validateSupersedes.ts +24 -0
- package/src/responses/validatedInput.ts +45 -0
- package/src/serve-cli.ts +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Prompt.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/Prompt.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Prompt.js","sourceRoot":"","sources":["../../../src/browser/responses/Prompt.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answerBody.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/answerBody.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,UAOpG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function answerBody(prompts, answers, note) {
|
|
2
|
+
const sections = prompts.map((prompt, index) => {
|
|
3
|
+
const answer = answers[index];
|
|
4
|
+
const chosen = prompt.options.filter((option) => answer?.selected.includes(option.id));
|
|
5
|
+
return `## Question: ${prompt.id}\n\n${prompt.source}\n\nSelected: ${chosen.map((option) => option.id).join(", ") || "No supplied option"}\n\n${chosen.map((option) => option.source).join("\n\n")}\n\n${answer?.text.trim() ? `Additional text:\n\n${answer.text}` : ""}`;
|
|
6
|
+
});
|
|
7
|
+
return `# Recorded response\n\n${sections.join("\n\n")}\n\n${note.trim() ? `## Overall response\n\n${note}` : ""}`.trim();
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=answerBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answerBody.js","sourceRoot":"","sources":["../../../src/browser/responses/answerBody.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CAAC,OAA0B,EAAE,OAAgC,EAAE,IAAY;IACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,gBAAgB,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,uBAAuB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5Q,CAAC,CAAC,CAAC;IACH,OAAO,0BAA0B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAC3H,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftSession.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/draftSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,KAAK,EAA4B,MAAM,aAAa,CAAC;AAG9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;;;
|
|
1
|
+
{"version":3,"file":"draftSession.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/draftSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,KAAK,EAA4B,MAAM,aAAa,CAAC;AAG9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;;;qBAkEtH,KAAK;oBA5BN,OAAO,CAAC,KAAK,CAAC;EA0DrC"}
|
|
@@ -2,6 +2,7 @@ import { Clock, Effect } from "effect";
|
|
|
2
2
|
import { DRAFT_AGE, encodeDrafts, readDrafts } from "./drafts.js";
|
|
3
3
|
const states = new Map();
|
|
4
4
|
export function draftSession(key, revision, storage, storageKey, report) {
|
|
5
|
+
const stateKey = `${JSON.stringify(storageKey)}:${key}`;
|
|
5
6
|
function local() {
|
|
6
7
|
if (!storage) {
|
|
7
8
|
throw new Error("Draft storage unavailable");
|
|
@@ -22,12 +23,12 @@ export function draftSession(key, revision, storage, storageKey, report) {
|
|
|
22
23
|
blocked = true;
|
|
23
24
|
report("Draft history is unavailable or malformed. Keep a copy; edits remain in this window.");
|
|
24
25
|
}
|
|
25
|
-
const memory = states.get(
|
|
26
|
+
const memory = states.get(stateKey);
|
|
26
27
|
if (memory && Effect.runSync(Clock.currentTimeMillis) - memory.updatedAt >= DRAFT_AGE) {
|
|
27
|
-
states.delete(
|
|
28
|
+
states.delete(stateKey);
|
|
28
29
|
report("A window draft expired after 30 days. Saved responses are unaffected.");
|
|
29
30
|
}
|
|
30
|
-
let current = states.get(
|
|
31
|
+
let current = states.get(stateKey)
|
|
31
32
|
?? drafts[key] ?? {
|
|
32
33
|
author: "",
|
|
33
34
|
body: "",
|
|
@@ -40,8 +41,8 @@ export function draftSession(key, revision, storage, storageKey, report) {
|
|
|
40
41
|
report("Source changed since this draft. Your text is retained; review the new source and preview to bind it to this revision.");
|
|
41
42
|
}
|
|
42
43
|
function update(patch) {
|
|
43
|
-
current = { ...(states.get(
|
|
44
|
-
states.set(
|
|
44
|
+
current = { ...(states.get(stateKey) ?? current), ...patch, updatedAt: Effect.runSync(Clock.currentTimeMillis) };
|
|
45
|
+
states.set(stateKey, current);
|
|
45
46
|
try {
|
|
46
47
|
if (blocked) {
|
|
47
48
|
throw new Error("Unknown draft history");
|
|
@@ -58,7 +59,11 @@ export function draftSession(key, revision, storage, storageKey, report) {
|
|
|
58
59
|
try {
|
|
59
60
|
local().removeItem(storageKey);
|
|
60
61
|
blocked = false;
|
|
61
|
-
states.
|
|
62
|
+
for (const storedKey of states.keys()) {
|
|
63
|
+
if (storedKey.startsWith(`${JSON.stringify(storageKey)}:`)) {
|
|
64
|
+
states.delete(storedKey);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
62
67
|
report("Workspace drafts cleared. Saved responses are unchanged; this visible text remains until you navigate away.");
|
|
63
68
|
}
|
|
64
69
|
catch {
|
|
@@ -66,14 +71,14 @@ export function draftSession(key, revision, storage, storageKey, report) {
|
|
|
66
71
|
}
|
|
67
72
|
}
|
|
68
73
|
function saved(pending) {
|
|
69
|
-
if (states.get(
|
|
70
|
-
const live = states.get(
|
|
74
|
+
if (states.get(stateKey) !== pending) {
|
|
75
|
+
const live = states.get(stateKey);
|
|
71
76
|
if (live?.id === pending.id) {
|
|
72
77
|
update({ id: `response.${crypto.randomUUID()}` });
|
|
73
78
|
}
|
|
74
79
|
return false;
|
|
75
80
|
}
|
|
76
|
-
states.delete(
|
|
81
|
+
states.delete(stateKey);
|
|
77
82
|
try {
|
|
78
83
|
const latest = readDrafts(local().getItem(storageKey), Effect.runSync(Clock.currentTimeMillis)).drafts;
|
|
79
84
|
if (latest[key]?.id === pending.id) {
|
|
@@ -84,7 +89,15 @@ export function draftSession(key, revision, storage, storageKey, report) {
|
|
|
84
89
|
catch {
|
|
85
90
|
report("Saved response confirmed, but its browser draft could not be cleared.");
|
|
86
91
|
}
|
|
87
|
-
current = {
|
|
92
|
+
current = {
|
|
93
|
+
...current,
|
|
94
|
+
answers: undefined,
|
|
95
|
+
body: "",
|
|
96
|
+
id: `response.${crypto.randomUUID()}`,
|
|
97
|
+
recovery: undefined,
|
|
98
|
+
supersedes: undefined,
|
|
99
|
+
updatedAt: Effect.runSync(Clock.currentTimeMillis),
|
|
100
|
+
};
|
|
88
101
|
return true;
|
|
89
102
|
}
|
|
90
103
|
return { clear, current: () => current, saved, update };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draftSession.js","sourceRoot":"","sources":["../../../src/browser/responses/draftSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,SAAS,EAAc,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;AACxC,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,OAA4B,EAAE,UAAkB,EAAE,MAAiC;IAC9I,SAAS,KAAK;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAA0B,EAAE,CAAC;IACvC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,4EAA4E,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,CAAC,sFAAsF,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"draftSession.js","sourceRoot":"","sources":["../../../src/browser/responses/draftSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import { type PromptAnswer } from "./schema.ts";
|
|
1
2
|
export declare const DRAFT_BYTES: number;
|
|
2
3
|
export declare const DRAFT_AGE: number;
|
|
3
4
|
export interface Draft {
|
|
5
|
+
readonly answers?: readonly PromptAnswer[] | undefined;
|
|
4
6
|
readonly author: string;
|
|
5
7
|
readonly body: string;
|
|
6
8
|
readonly id: string;
|
|
9
|
+
readonly question?: string | undefined;
|
|
10
|
+
readonly recovery?: string | undefined;
|
|
7
11
|
readonly revision: string;
|
|
12
|
+
readonly supersedes?: string | undefined;
|
|
8
13
|
readonly type: string;
|
|
9
14
|
readonly updatedAt: number;
|
|
10
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drafts.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/drafts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drafts.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/drafts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,WAAW,QAAkB,CAAC;AAC3C,eAAO,MAAM,SAAS,QAA2B,CAAC;AAClD,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AASD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAgD/G;AACD,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAM5E"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { Identity } from "#path/Identity.ts";
|
|
3
|
+
import { Answers } from "./schema.js";
|
|
1
4
|
export const DRAFT_BYTES = 2 * 1024 * 1024;
|
|
2
5
|
export const DRAFT_AGE = 30 * 24 * 60 * 60 * 1000;
|
|
6
|
+
function extraFields(entry) {
|
|
7
|
+
return {
|
|
8
|
+
...("question" in entry ? { question: Schema.decodeUnknownSync(Identity)(entry.question) } : {}),
|
|
9
|
+
...("recovery" in entry ? { recovery: Schema.decodeUnknownSync(Schema.String)(entry.recovery) } : {}),
|
|
10
|
+
...("answers" in entry ? { answers: Schema.decodeUnknownSync(Answers, { onExcessProperty: "error" })(entry.answers) } : {}),
|
|
11
|
+
...("supersedes" in entry ? { supersedes: Schema.decodeUnknownSync(Identity)(entry.supersedes) } : {}),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
3
14
|
export function readDrafts(raw, now) {
|
|
4
15
|
if (raw === null) {
|
|
5
16
|
return { drafts: {}, expired: false };
|
|
@@ -35,7 +46,15 @@ export function readDrafts(raw, now) {
|
|
|
35
46
|
expired = true;
|
|
36
47
|
continue;
|
|
37
48
|
}
|
|
38
|
-
drafts[key] = {
|
|
49
|
+
drafts[key] = {
|
|
50
|
+
...extraFields(entry),
|
|
51
|
+
author: entry.author,
|
|
52
|
+
body: entry.body,
|
|
53
|
+
id: entry.id,
|
|
54
|
+
revision: entry.revision,
|
|
55
|
+
type: entry.type,
|
|
56
|
+
updatedAt: entry.updatedAt,
|
|
57
|
+
};
|
|
39
58
|
}
|
|
40
59
|
return { drafts, expired };
|
|
41
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../../src/browser/responses/drafts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../../src/browser/responses/drafts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Draft } from "./drafts.ts";
|
|
2
|
-
|
|
2
|
+
import type { Prompt } from "./Prompt.ts";
|
|
3
|
+
export declare function responsePreview(draft: Draft, question: string, prompts?: readonly Prompt[]): string;
|
|
3
4
|
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/preview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/preview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAEvG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { answerBody } from "./answerBody.js";
|
|
2
|
+
export function responsePreview(draft, question, prompts = []) {
|
|
3
|
+
return `New file: responses/${draft.id}.md\nRegistration (if needed): responses/${question}.md\nRecorded time is assigned by the server when saving.\n\n---\n${JSON.stringify({ id: draft.id, kind: "response", response: { answers: draft.answers, author: draft.author, question, reviewedRevision: draft.revision, supersedes: draft.supersedes, type: draft.type } }, null, 2)}\n---\n${draft.answers ? answerBody(prompts, draft.answers, draft.body) : draft.body}`;
|
|
3
4
|
}
|
|
4
5
|
//# sourceMappingURL=preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/browser/responses/preview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/browser/responses/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,QAAgB,EAAE,UAA6B,EAAE;IAC9F,OAAO,uBAAuB,KAAK,CAAC,EAAE,4CAA4C,QAAQ,qEAAqE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC3c,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Draft } from "./drafts.ts";
|
|
2
|
+
import type { Prompt } from "./Prompt.ts";
|
|
3
|
+
import type { PromptAnswer } from "./schema.ts";
|
|
4
|
+
export declare function questionnaireControls(form: HTMLFormElement): {
|
|
5
|
+
models: Prompt[];
|
|
6
|
+
read: () => readonly PromptAnswer[] | undefined;
|
|
7
|
+
restore: (draft: Draft, revision: string) => string | undefined;
|
|
8
|
+
validate: (type: string) => void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=questionnaireControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questionnaireControls.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/questionnaireControls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAchD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe;;gBAiBzC,SAAS,YAAY,EAAE,GAAG,SAAS;qBAS5B,KAAK,YAAY,MAAM;qBAcvB,MAAM;EAiB9B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
function restoreAnswers(fields, draft, same) {
|
|
2
|
+
for (const field of fields) {
|
|
3
|
+
const answer = draft.answers?.find((entry) => entry.prompt === field.dataset.prompt);
|
|
4
|
+
for (const input of field.querySelectorAll("input")) {
|
|
5
|
+
input.checked = same && (answer?.selected.includes(input.value) ?? false);
|
|
6
|
+
}
|
|
7
|
+
const text = field.querySelector("textarea");
|
|
8
|
+
if (text) {
|
|
9
|
+
text.value = answer?.text ?? "";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function questionnaireControls(form) {
|
|
14
|
+
function modeOf(field) {
|
|
15
|
+
if (field.dataset.mode === "text") {
|
|
16
|
+
return "text";
|
|
17
|
+
}
|
|
18
|
+
return field.dataset.mode === "many" ? "many" : "one";
|
|
19
|
+
}
|
|
20
|
+
const fields = [...form.querySelectorAll("fieldset[data-prompt]")];
|
|
21
|
+
const models = fields.map((field) => ({
|
|
22
|
+
id: field.dataset.prompt ?? "",
|
|
23
|
+
mode: modeOf(field),
|
|
24
|
+
options: [...field.querySelectorAll("input[data-option-source]")].map((input) => ({
|
|
25
|
+
id: input.value,
|
|
26
|
+
source: input.dataset.optionSource ?? "",
|
|
27
|
+
})),
|
|
28
|
+
source: field.dataset.source ?? "",
|
|
29
|
+
}));
|
|
30
|
+
function read() {
|
|
31
|
+
return fields.length === 0
|
|
32
|
+
? undefined
|
|
33
|
+
: fields.map((field) => ({
|
|
34
|
+
prompt: field.dataset.prompt ?? "",
|
|
35
|
+
selected: [...field.querySelectorAll("input:checked")].map((input) => input.value),
|
|
36
|
+
text: field.querySelector("textarea")?.value ?? "",
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
function restore(draft, revision) {
|
|
40
|
+
const same = draft.revision === revision && (draft.question === undefined || draft.question === form.dataset.question);
|
|
41
|
+
restoreAnswers(fields, draft, same);
|
|
42
|
+
const recovery = form.querySelector("#response-draft-recovery");
|
|
43
|
+
const retained = !same && draft.answers
|
|
44
|
+
? `Earlier template answers (selections cleared; review before choosing again):\n${JSON.stringify(draft.answers, null, 2)}\n${draft.recovery ?? ""}`
|
|
45
|
+
: draft.recovery;
|
|
46
|
+
if (recovery) {
|
|
47
|
+
recovery.textContent = retained ?? "";
|
|
48
|
+
recovery.hidden = !retained;
|
|
49
|
+
}
|
|
50
|
+
return retained;
|
|
51
|
+
}
|
|
52
|
+
function validate(type) {
|
|
53
|
+
for (const field of fields) {
|
|
54
|
+
const text = field.querySelector("textarea");
|
|
55
|
+
text?.setCustomValidity(type === "answer" && !text.value.trim() && !field.querySelector("input:checked") ? "Choose an option or answer in your own words." : "");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const field of fields) {
|
|
59
|
+
field.querySelector("[data-clear-choices]")?.addEventListener("click", () => {
|
|
60
|
+
for (const input of field.querySelectorAll("input")) {
|
|
61
|
+
input.checked = false;
|
|
62
|
+
}
|
|
63
|
+
form.dispatchEvent(new Event("input", { bubbles: true }));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return { models, read, restore, validate };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=questionnaireControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questionnaireControls.js","sourceRoot":"","sources":["../../../src/browser/responses/questionnaireControls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
export declare const Revision: Schema.String;
|
|
3
3
|
export declare const ResponseKind: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
4
|
+
export declare const PromptAnswer: Schema.Struct<{
|
|
5
|
+
readonly prompt: Schema.String;
|
|
6
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
7
|
+
readonly text: Schema.String;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const Answers: Schema.$Array<Schema.Struct<{
|
|
10
|
+
readonly prompt: Schema.String;
|
|
11
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
12
|
+
readonly text: Schema.String;
|
|
13
|
+
}>>;
|
|
14
|
+
export type PromptAnswer = typeof PromptAnswer.Type;
|
|
4
15
|
export declare const QuestionRecord: Schema.Struct<{
|
|
5
16
|
readonly deadline: Schema.Number;
|
|
6
17
|
readonly item: Schema.String;
|
|
@@ -11,10 +22,16 @@ export declare const QuestionRecord: Schema.Struct<{
|
|
|
11
22
|
readonly source: Schema.String;
|
|
12
23
|
}>;
|
|
13
24
|
export declare const ResponseRecord: Schema.Struct<{
|
|
25
|
+
readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
26
|
+
readonly prompt: Schema.String;
|
|
27
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
28
|
+
readonly text: Schema.String;
|
|
29
|
+
}>>>;
|
|
14
30
|
readonly author: Schema.String;
|
|
15
31
|
readonly question: Schema.String;
|
|
16
32
|
readonly recordedAt: Schema.Number;
|
|
17
33
|
readonly reviewedRevision: Schema.String;
|
|
34
|
+
readonly supersedes: Schema.optional<Schema.String>;
|
|
18
35
|
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
19
36
|
}>;
|
|
20
37
|
export declare const QuestionPreview: Schema.Struct<{
|
|
@@ -44,10 +61,16 @@ export declare const RecordedResponse: Schema.Struct<{
|
|
|
44
61
|
readonly body: Schema.String;
|
|
45
62
|
readonly id: Schema.String;
|
|
46
63
|
readonly response: Schema.Struct<{
|
|
64
|
+
readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
65
|
+
readonly prompt: Schema.String;
|
|
66
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
67
|
+
readonly text: Schema.String;
|
|
68
|
+
}>>>;
|
|
47
69
|
readonly author: Schema.String;
|
|
48
70
|
readonly question: Schema.String;
|
|
49
71
|
readonly recordedAt: Schema.Number;
|
|
50
72
|
readonly reviewedRevision: Schema.String;
|
|
73
|
+
readonly supersedes: Schema.optional<Schema.String>;
|
|
51
74
|
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
52
75
|
}>;
|
|
53
76
|
}>;
|
|
@@ -69,10 +92,16 @@ export declare const Reading: Schema.Struct<{
|
|
|
69
92
|
readonly body: Schema.String;
|
|
70
93
|
readonly id: Schema.String;
|
|
71
94
|
readonly response: Schema.Struct<{
|
|
95
|
+
readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
96
|
+
readonly prompt: Schema.String;
|
|
97
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
98
|
+
readonly text: Schema.String;
|
|
99
|
+
}>>>;
|
|
72
100
|
readonly author: Schema.String;
|
|
73
101
|
readonly question: Schema.String;
|
|
74
102
|
readonly recordedAt: Schema.Number;
|
|
75
103
|
readonly reviewedRevision: Schema.String;
|
|
104
|
+
readonly supersedes: Schema.optional<Schema.String>;
|
|
76
105
|
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
77
106
|
}>;
|
|
78
107
|
}>>;
|
|
@@ -96,10 +125,16 @@ export declare const WaitReading: Schema.Struct<{
|
|
|
96
125
|
readonly body: Schema.String;
|
|
97
126
|
readonly id: Schema.String;
|
|
98
127
|
readonly response: Schema.Struct<{
|
|
128
|
+
readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
129
|
+
readonly prompt: Schema.String;
|
|
130
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
131
|
+
readonly text: Schema.String;
|
|
132
|
+
}>>>;
|
|
99
133
|
readonly author: Schema.String;
|
|
100
134
|
readonly question: Schema.String;
|
|
101
135
|
readonly recordedAt: Schema.Number;
|
|
102
136
|
readonly reviewedRevision: Schema.String;
|
|
137
|
+
readonly supersedes: Schema.optional<Schema.String>;
|
|
103
138
|
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
104
139
|
}>;
|
|
105
140
|
}>>;
|
|
@@ -113,10 +148,16 @@ declare const ResponseFailed_base: Schema.Class<ResponseFailed, Schema.TaggedStr
|
|
|
113
148
|
export declare class ResponseFailed extends ResponseFailed_base {
|
|
114
149
|
}
|
|
115
150
|
export declare const DraftInput: Schema.Struct<{
|
|
151
|
+
readonly answers: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
152
|
+
readonly prompt: Schema.String;
|
|
153
|
+
readonly selected: Schema.$Array<Schema.String>;
|
|
154
|
+
readonly text: Schema.String;
|
|
155
|
+
}>>>;
|
|
116
156
|
readonly author: Schema.String;
|
|
117
157
|
readonly body: Schema.String;
|
|
118
158
|
readonly id: Schema.String;
|
|
119
159
|
readonly question: Schema.String;
|
|
160
|
+
readonly supersedes: Schema.optional<Schema.String>;
|
|
120
161
|
readonly type: Schema.Literals<readonly ["answer", "clarify", "not_now"]>;
|
|
121
162
|
}>;
|
|
122
163
|
export type Question = typeof Question.Type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,eAAO,MAAM,QAAQ,eAA0D,CAAC;AAChF,eAAO,MAAM,YAAY,4DAAoD,CAAC;AAC9E,eAAO,MAAM,cAAc;;;;;;;;EAQzB,CAAC;AACH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,eAAO,MAAM,QAAQ,eAA0D,CAAC;AAChF,eAAO,MAAM,YAAY,4DAAoD,CAAC;AAC9E,eAAO,MAAM,YAAY;;;;EAIvB,CAAC;AACH,eAAO,MAAM,OAAO;;;;GAA2D,CAAC;AAChF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;AACpD,eAAO,MAAM,cAAc;;;;;;;;EAQzB,CAAC;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;EAQzB,CAAC;AACH,eAAO,MAAM,eAAe;;;;;;;;EAQ1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;AAC1D,eAAO,MAAM,QAAQ;;;;;;;;;;;;EAAoF,CAAC;AAC1G,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;EAAiF,CAAC;AAC/G,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmF,CAAC;AACxG,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA8G,CAAC;AACvI,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAC;;;;;;AAClD,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;AACL,eAAO,MAAM,UAAU;;;;;;;;;;;;EAQrB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAC5C,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAC5D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAC1C,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC"}
|
|
@@ -2,6 +2,12 @@ import { Schema } from "effect";
|
|
|
2
2
|
import { Identity } from "#path/Identity.ts";
|
|
3
3
|
export const Revision = Schema.String.check(Schema.isPattern(/^[a-f\d]{64}$/u));
|
|
4
4
|
export const ResponseKind = Schema.Literals(["answer", "clarify", "not_now"]);
|
|
5
|
+
export const PromptAnswer = Schema.Struct({
|
|
6
|
+
prompt: Identity.check(Schema.isMaxLength(128)),
|
|
7
|
+
selected: Schema.Array(Identity.check(Schema.isMaxLength(128))).check(Schema.isMaxLength(32)),
|
|
8
|
+
text: Schema.String.check(Schema.isMaxLength(8192)),
|
|
9
|
+
});
|
|
10
|
+
export const Answers = Schema.Array(PromptAnswer).check(Schema.isMaxLength(32));
|
|
5
11
|
export const QuestionRecord = Schema.Struct({
|
|
6
12
|
deadline: Schema.Number.check(Schema.isFinite(), Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(8_640_000_000_000_000)),
|
|
7
13
|
item: Identity,
|
|
@@ -12,10 +18,12 @@ export const QuestionRecord = Schema.Struct({
|
|
|
12
18
|
source: Schema.String,
|
|
13
19
|
});
|
|
14
20
|
export const ResponseRecord = Schema.Struct({
|
|
21
|
+
answers: Schema.optional(Answers),
|
|
15
22
|
author: Schema.String.check(Schema.isPattern(/\S/u), Schema.isMaxLength(200)),
|
|
16
23
|
question: Identity,
|
|
17
24
|
recordedAt: Schema.Number.check(Schema.isFinite(), Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(8_640_000_000_000_000)),
|
|
18
25
|
reviewedRevision: Revision,
|
|
26
|
+
supersedes: Schema.optional(Identity),
|
|
19
27
|
type: ResponseKind,
|
|
20
28
|
});
|
|
21
29
|
export const QuestionPreview = Schema.Struct({
|
|
@@ -38,10 +46,12 @@ export class ResponseFailed extends Schema.TaggedError()("ResponseFailed", {
|
|
|
38
46
|
}) {
|
|
39
47
|
}
|
|
40
48
|
export const DraftInput = Schema.Struct({
|
|
49
|
+
answers: Schema.optional(Answers),
|
|
41
50
|
author: ResponseRecord.fields.author,
|
|
42
|
-
body: Schema.String.check(Schema.
|
|
51
|
+
body: Schema.String.check(Schema.isMaxLength(32_768)),
|
|
43
52
|
id: Identity,
|
|
44
53
|
question: Identity,
|
|
54
|
+
supersedes: Schema.optional(Identity),
|
|
45
55
|
type: ResponseKind,
|
|
46
56
|
});
|
|
47
57
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/browser/responses/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/browser/responses/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/browser/responses/setup.ts"],"names":[],"mappings":"AA+HA,wBAAgB,cAAc,SAI7B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { draftSession } from "./draftSession.js";
|
|
2
2
|
import { responsePreview } from "./preview.js";
|
|
3
|
+
import { questionnaireControls } from "./questionnaireControls.js";
|
|
3
4
|
import { submitResponse } from "./submit.js";
|
|
4
5
|
function attach() {
|
|
5
6
|
const doc = document.getElementById("doc");
|
|
@@ -15,6 +16,7 @@ function attach() {
|
|
|
15
16
|
const author = form.elements.namedItem("author");
|
|
16
17
|
const body = form.elements.namedItem("body");
|
|
17
18
|
const type = form.elements.namedItem("type");
|
|
19
|
+
const supersedes = form.elements.namedItem("supersedes");
|
|
18
20
|
const submit = form.querySelector("#response-submit");
|
|
19
21
|
const preview = form.querySelector("#response-preview-content");
|
|
20
22
|
const clear = form.querySelector("#response-clear");
|
|
@@ -35,6 +37,7 @@ function attach() {
|
|
|
35
37
|
const item = form.dataset.item ?? "";
|
|
36
38
|
const request = form.dataset.request ?? "";
|
|
37
39
|
const revision = form.dataset.revision ?? "";
|
|
40
|
+
const questionId = form.dataset.question ?? "";
|
|
38
41
|
const key = `${item}/${request}`;
|
|
39
42
|
const storage = `work-board:drafts:${document.documentElement.dataset.workspace}`;
|
|
40
43
|
let storageApi;
|
|
@@ -48,12 +51,29 @@ function attach() {
|
|
|
48
51
|
status.textContent = message;
|
|
49
52
|
});
|
|
50
53
|
let draft = drafts.current();
|
|
54
|
+
const controls = questionnaireControls(form);
|
|
55
|
+
let recovery = controls.restore(draft, revision);
|
|
56
|
+
if (draft.question && draft.question !== questionId && draft.revision === revision) {
|
|
57
|
+
status.textContent = "Source moved since this draft. Text is retained and selections cleared; review the source and preview before responding.";
|
|
58
|
+
}
|
|
59
|
+
if (supersedes instanceof HTMLSelectElement) {
|
|
60
|
+
supersedes.value = draft.supersedes ?? "";
|
|
61
|
+
}
|
|
51
62
|
author.value = draft.author;
|
|
52
63
|
body.value = draft.body;
|
|
53
64
|
type.value = draft.type;
|
|
54
65
|
const fields = { author, body, type };
|
|
55
66
|
function save() {
|
|
56
|
-
draft = drafts.update({
|
|
67
|
+
draft = drafts.update({
|
|
68
|
+
answers: controls.read(),
|
|
69
|
+
author: fields.author.value,
|
|
70
|
+
body: fields.body.value,
|
|
71
|
+
question: draft.question ?? questionId,
|
|
72
|
+
recovery,
|
|
73
|
+
revision: draft.revision,
|
|
74
|
+
supersedes: supersedes instanceof HTMLSelectElement ? supersedes.value || undefined : undefined,
|
|
75
|
+
type: fields.type.value,
|
|
76
|
+
});
|
|
57
77
|
}
|
|
58
78
|
form.addEventListener("input", () => {
|
|
59
79
|
save();
|
|
@@ -63,29 +83,39 @@ function attach() {
|
|
|
63
83
|
previewButton.disabled = false;
|
|
64
84
|
clear.disabled = false;
|
|
65
85
|
previewButton.addEventListener("click", () => {
|
|
86
|
+
controls.validate(type.value);
|
|
66
87
|
draft = drafts.update({
|
|
88
|
+
answers: controls.read(),
|
|
67
89
|
author: author.value,
|
|
68
90
|
body: body.value,
|
|
69
|
-
id: draft.revision === revision ? drafts.current().id : `response.${crypto.randomUUID()}`,
|
|
91
|
+
id: draft.revision === revision && (!draft.question || draft.question === questionId) ? drafts.current().id : `response.${crypto.randomUUID()}`,
|
|
92
|
+
question: questionId,
|
|
93
|
+
recovery,
|
|
70
94
|
revision,
|
|
95
|
+
supersedes: supersedes instanceof HTMLSelectElement ? supersedes.value || undefined : undefined,
|
|
71
96
|
type: type.value,
|
|
72
97
|
});
|
|
73
|
-
preview.textContent = responsePreview(draft,
|
|
98
|
+
preview.textContent = responsePreview(draft, questionId ?? "", controls.models);
|
|
74
99
|
preview.hidden = false;
|
|
75
100
|
submit.disabled = form.dataset.writable !== "true" || !form.checkValidity();
|
|
76
101
|
});
|
|
77
102
|
clear.addEventListener("click", drafts.clear);
|
|
78
103
|
form.addEventListener("submit", async (event) => {
|
|
79
104
|
event.preventDefault();
|
|
80
|
-
if (submit.disabled || draft.revision !== revision || !form.reportValidity()) {
|
|
105
|
+
if (submit.disabled || draft.revision !== revision || draft.question !== questionId || !form.reportValidity()) {
|
|
81
106
|
return;
|
|
82
107
|
}
|
|
83
108
|
submit.disabled = true;
|
|
84
109
|
previewButton.disabled = true;
|
|
85
110
|
if (await submitResponse(form, status, drafts, draft)) {
|
|
86
111
|
draft = drafts.current();
|
|
112
|
+
recovery = draft.recovery;
|
|
87
113
|
if (form.isConnected) {
|
|
88
114
|
body.value = "";
|
|
115
|
+
controls.restore(draft, revision);
|
|
116
|
+
if (supersedes instanceof HTMLSelectElement) {
|
|
117
|
+
supersedes.value = "";
|
|
118
|
+
}
|
|
89
119
|
}
|
|
90
120
|
}
|
|
91
121
|
previewButton.disabled = false;
|