@deskwork/studio 0.17.0 → 0.18.0
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/dist/lib/entry-resolver.d.ts +30 -0
- package/dist/lib/entry-resolver.d.ts.map +1 -1
- package/dist/lib/entry-resolver.js +37 -2
- package/dist/lib/entry-resolver.js.map +1 -1
- package/dist/pages/dashboard/affordances.d.ts.map +1 -1
- package/dist/pages/dashboard/affordances.js +15 -5
- package/dist/pages/dashboard/affordances.js.map +1 -1
- package/dist/pages/dashboard/affordances.ts +15 -5
- package/dist/pages/dashboard/header.js +1 -1
- package/dist/pages/dashboard/header.ts +1 -1
- package/dist/pages/dashboard/section.d.ts.map +1 -1
- package/dist/pages/dashboard/section.js +23 -3
- package/dist/pages/dashboard/section.js.map +1 -1
- package/dist/pages/dashboard/section.ts +24 -3
- package/dist/pages/entry-review/decision-strip.d.ts.map +1 -1
- package/dist/pages/entry-review/decision-strip.js +4 -0
- package/dist/pages/entry-review/decision-strip.js.map +1 -1
- package/dist/pages/entry-review/edit-toolbar.d.ts +7 -8
- package/dist/pages/entry-review/edit-toolbar.d.ts.map +1 -1
- package/dist/pages/entry-review/edit-toolbar.js +16 -11
- package/dist/pages/entry-review/edit-toolbar.js.map +1 -1
- package/dist/pages/entry-review/index.d.ts.map +1 -1
- package/dist/pages/entry-review/index.js +14 -4
- package/dist/pages/entry-review/index.js.map +1 -1
- package/dist/pages/entry-review/mobile-bar.d.ts +62 -0
- package/dist/pages/entry-review/mobile-bar.d.ts.map +1 -0
- package/dist/pages/entry-review/mobile-bar.js +155 -0
- package/dist/pages/entry-review/mobile-bar.js.map +1 -0
- package/dist/pages/entry-review/outline-drawer.d.ts +17 -7
- package/dist/pages/entry-review/outline-drawer.d.ts.map +1 -1
- package/dist/pages/entry-review/outline-drawer.js +58 -14
- package/dist/pages/entry-review/outline-drawer.js.map +1 -1
- package/dist/pages/layout.js +1 -1
- package/dist/pages/layout.ts +1 -1
- package/dist/routes/api.d.ts.map +1 -1
- package/dist/routes/api.js +63 -0
- package/dist/routes/api.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
|
@@ -30,6 +30,36 @@ interface ResolveResult {
|
|
|
30
30
|
artifactBody: string;
|
|
31
31
|
artifactPath: string;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the canonical document path for an entry. Used by both the
|
|
35
|
+
* read path (`resolveEntry`) and the write path (the Save route's
|
|
36
|
+
* `writeEntryBody`) so both surfaces address the same file.
|
|
37
|
+
*
|
|
38
|
+
* Exported so the Save route (#174) can resolve the write target with
|
|
39
|
+
* the SAME rules the read path uses; duplicating the resolution
|
|
40
|
+
* silently couples the surfaces to two different code paths and lets
|
|
41
|
+
* them drift.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveIndexPath(projectRoot: string, entry: Entry): string;
|
|
33
44
|
export declare function resolveEntry(projectRoot: string, uuid: string): Promise<ResolveResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Atomically write `markdown` to the entry's canonical document path.
|
|
47
|
+
*
|
|
48
|
+
* Implements the Save semantics from issue #174 — the studio is the
|
|
49
|
+
* dumb file-write surface for in-browser edits. State-machine work
|
|
50
|
+
* (versioning, journal records, in-review flips) belongs to
|
|
51
|
+
* `/deskwork:iterate`, NOT to this function. Save and Iterate are
|
|
52
|
+
* orthogonal: an operator can Save many times before pinning a version.
|
|
53
|
+
*
|
|
54
|
+
* Atomic-write pattern (write-tmp + rename) mirrors `writeSidecar` and
|
|
55
|
+
* the snapshot helper. PID is embedded in the tmp filename so two
|
|
56
|
+
* concurrent writers don't clobber each other's tmp state.
|
|
57
|
+
*
|
|
58
|
+
* Returns the absolute path written so the caller can surface it to
|
|
59
|
+
* the operator (the Save route uses this for the response body).
|
|
60
|
+
*/
|
|
61
|
+
export declare function writeEntryBody(projectRoot: string, uuid: string, markdown: string): Promise<{
|
|
62
|
+
writtenPath: string;
|
|
63
|
+
}>;
|
|
34
64
|
export {};
|
|
35
65
|
//# sourceMappingURL=entry-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/entry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"entry-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/entry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzD,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAiB1E;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAK5F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAQlC"}
|
|
@@ -24,12 +24,22 @@
|
|
|
24
24
|
* plan.md, Outlining → outline.md, Drafting/Final/Published →
|
|
25
25
|
* index.md). That routing has been retired — see Issue #222.
|
|
26
26
|
*/
|
|
27
|
-
import { readFile } from 'node:fs/promises';
|
|
27
|
+
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
28
28
|
import { existsSync } from 'node:fs';
|
|
29
29
|
import { basename, dirname, join } from 'node:path';
|
|
30
30
|
import { readSidecar } from '@deskwork/core/sidecar';
|
|
31
31
|
import { getContentDir } from '@deskwork/core/config';
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Resolve the canonical document path for an entry. Used by both the
|
|
34
|
+
* read path (`resolveEntry`) and the write path (the Save route's
|
|
35
|
+
* `writeEntryBody`) so both surfaces address the same file.
|
|
36
|
+
*
|
|
37
|
+
* Exported so the Save route (#174) can resolve the write target with
|
|
38
|
+
* the SAME rules the read path uses; duplicating the resolution
|
|
39
|
+
* silently couples the surfaces to two different code paths and lets
|
|
40
|
+
* them drift.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveIndexPath(projectRoot, entry) {
|
|
33
43
|
if (entry.artifactPath) {
|
|
34
44
|
const absArtifact = join(projectRoot, entry.artifactPath);
|
|
35
45
|
// Strip the scrapbook segment for legacy `<dir>/scrapbook/<file>.md`
|
|
@@ -53,4 +63,29 @@ export async function resolveEntry(projectRoot, uuid) {
|
|
|
53
63
|
const artifactBody = await readFile(artifactPath, 'utf8');
|
|
54
64
|
return { entry, artifactBody, artifactPath };
|
|
55
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Atomically write `markdown` to the entry's canonical document path.
|
|
68
|
+
*
|
|
69
|
+
* Implements the Save semantics from issue #174 — the studio is the
|
|
70
|
+
* dumb file-write surface for in-browser edits. State-machine work
|
|
71
|
+
* (versioning, journal records, in-review flips) belongs to
|
|
72
|
+
* `/deskwork:iterate`, NOT to this function. Save and Iterate are
|
|
73
|
+
* orthogonal: an operator can Save many times before pinning a version.
|
|
74
|
+
*
|
|
75
|
+
* Atomic-write pattern (write-tmp + rename) mirrors `writeSidecar` and
|
|
76
|
+
* the snapshot helper. PID is embedded in the tmp filename so two
|
|
77
|
+
* concurrent writers don't clobber each other's tmp state.
|
|
78
|
+
*
|
|
79
|
+
* Returns the absolute path written so the caller can surface it to
|
|
80
|
+
* the operator (the Save route uses this for the response body).
|
|
81
|
+
*/
|
|
82
|
+
export async function writeEntryBody(projectRoot, uuid, markdown) {
|
|
83
|
+
const entry = await readSidecar(projectRoot, uuid);
|
|
84
|
+
const writtenPath = resolveIndexPath(projectRoot, entry);
|
|
85
|
+
await mkdir(dirname(writtenPath), { recursive: true });
|
|
86
|
+
const tmpPath = `${writtenPath}.${process.pid}.tmp`;
|
|
87
|
+
await writeFile(tmpPath, markdown);
|
|
88
|
+
await rename(tmpPath, writtenPath);
|
|
89
|
+
return { writtenPath };
|
|
90
|
+
}
|
|
56
91
|
//# sourceMappingURL=entry-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-resolver.js","sourceRoot":"","sources":["../../src/lib/entry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"entry-resolver.js","sourceRoot":"","sources":["../../src/lib/entry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAStD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,KAAY;IAChE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1D,qEAAqE;QACrE,yDAAyD;QACzD,MAAM,GAAG,GACP,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,WAAW;YAC5C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACxC,kEAAkE;QAClE,kEAAkE;QAClE,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,IAAY;IAClE,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,IAAY,EACZ,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACpD,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnC,MAAM,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnC,OAAO,EAAE,WAAW,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affordances.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/affordances.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,KAAK,EAAE,KAAK,EAAS,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAQ7E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAK9E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"affordances.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/affordances.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,KAAK,EAAE,KAAK,EAAS,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAQ7E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAK9E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE7D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA4D3E"}
|
|
@@ -83,11 +83,21 @@ export function renderRowActions(entry, defaultSite) {
|
|
|
83
83
|
data-copy="/deskwork:iterate ${entry.slug}"
|
|
84
84
|
title="operator clicked Iterate — run the iterate skill in Claude Code">iterate →</button>`);
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
// Approve (#244) — unconditional on active-pipeline rows. Mirrors
|
|
87
|
+
// the review-surface decision strip (Approve is always visible
|
|
88
|
+
// there); the dashboard previously gated this button on
|
|
89
|
+
// `reviewState === 'approved'`, which is a transient state most
|
|
90
|
+
// rows never carry, leaving the button effectively invisible. The
|
|
91
|
+
// operator should be able to advance any active-pipeline entry
|
|
92
|
+
// from the dashboard without first opening the review surface.
|
|
93
|
+
buttons.push(html `<button class="er-btn er-btn-small er-btn-approve er-copy-btn" type="button"
|
|
94
|
+
data-copy="/deskwork:approve ${entry.slug}"
|
|
95
|
+
title="advance this entry to the next stage">approve →</button>`);
|
|
96
|
+
// Cancel (#242) — pull this entry off-pipeline. Same clipboard
|
|
97
|
+
// routing as approve / iterate; the skill mutates sidecar + journal.
|
|
98
|
+
buttons.push(html `<button class="er-btn er-btn-small er-btn-reject er-copy-btn" type="button"
|
|
99
|
+
data-copy="/deskwork:cancel ${entry.slug}"
|
|
100
|
+
title="pull this entry off-pipeline (Cancelled). Reversible via /deskwork:induct.">cancel ⊘</button>`);
|
|
91
101
|
}
|
|
92
102
|
else if (stage === 'Published') {
|
|
93
103
|
buttons.push(html `<a class="er-btn er-btn-small" href="${reviewLink}"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affordances.js","sourceRoot":"","sources":["../../../src/pages/dashboard/affordances.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAgB,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,MAAM,kBAAkB,GAAgC;IACtD,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA8B;IACnE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,wEAAwE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAA,kCAAkC,KAAK,wBAAwB,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACjI,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAY;IACnD,OAAO,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY,EAAE,WAAmB;IAChE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;IACjC,MAAM,UAAU,GAAG,+BAA+B,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/D,qEAAqE;IACrE,qEAAqE;IACrE,qEAAqE;IACrE,oEAAoE;IACpE,kCAAkC;IAClC,EAAE;IACF,oEAAoE;IACpE,4DAA4D;IAC5D,sEAAsE;IACtE,oDAAoD;IACpD,kEAAkE;IAClE,gDAAgD;IAChD,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACnC,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,IAAI;KACpB,CAAC,CAAC;IAEH,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,wCAAwC,UAAU;2CAC5B,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA;uCACgB,KAAK,CAAC,IAAI;mGACkD,CAAC,CAAC;QACjG,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"affordances.js","sourceRoot":"","sources":["../../../src/pages/dashboard/affordances.ts"],"names":[],"mappings":"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"}
|
|
@@ -90,11 +90,21 @@ export function renderRowActions(entry: Entry, defaultSite: string): RawHtml {
|
|
|
90
90
|
data-copy="/deskwork:iterate ${entry.slug}"
|
|
91
91
|
title="operator clicked Iterate — run the iterate skill in Claude Code">iterate →</button>`);
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
// Approve (#244) — unconditional on active-pipeline rows. Mirrors
|
|
94
|
+
// the review-surface decision strip (Approve is always visible
|
|
95
|
+
// there); the dashboard previously gated this button on
|
|
96
|
+
// `reviewState === 'approved'`, which is a transient state most
|
|
97
|
+
// rows never carry, leaving the button effectively invisible. The
|
|
98
|
+
// operator should be able to advance any active-pipeline entry
|
|
99
|
+
// from the dashboard without first opening the review surface.
|
|
100
|
+
buttons.push(html`<button class="er-btn er-btn-small er-btn-approve er-copy-btn" type="button"
|
|
101
|
+
data-copy="/deskwork:approve ${entry.slug}"
|
|
102
|
+
title="advance this entry to the next stage">approve →</button>`);
|
|
103
|
+
// Cancel (#242) — pull this entry off-pipeline. Same clipboard
|
|
104
|
+
// routing as approve / iterate; the skill mutates sidecar + journal.
|
|
105
|
+
buttons.push(html`<button class="er-btn er-btn-small er-btn-reject er-copy-btn" type="button"
|
|
106
|
+
data-copy="/deskwork:cancel ${entry.slug}"
|
|
107
|
+
title="pull this entry off-pipeline (Cancelled). Reversible via /deskwork:induct.">cancel ⊘</button>`);
|
|
98
108
|
} else if (stage === 'Published') {
|
|
99
109
|
buttons.push(html`<a class="er-btn er-btn-small" href="${reviewLink}"
|
|
100
110
|
title="read-only review surface for the published entry">view →</a>`);
|
|
@@ -34,7 +34,7 @@ export function renderHeader(data, projectRoot, now) {
|
|
|
34
34
|
const issueNum = String(data.entries.length).padStart(2, '0');
|
|
35
35
|
const issueDate = `${now.getDate()} ${MONTH_NAMES[now.getMonth()]} ${now.getFullYear()}`;
|
|
36
36
|
return unsafe(html `
|
|
37
|
-
<header class="er-pagehead er-pagehead--centered">
|
|
37
|
+
<header class="er-pagehead er-pagehead--centered er-pagehead--dashboard">
|
|
38
38
|
<p class="er-pagehead__kicker">
|
|
39
39
|
Vol. ${volume} · № ${issueNum}
|
|
40
40
|
</p>
|
|
@@ -42,7 +42,7 @@ export function renderHeader(
|
|
|
42
42
|
const issueNum = String(data.entries.length).padStart(2, '0');
|
|
43
43
|
const issueDate = `${now.getDate()} ${MONTH_NAMES[now.getMonth()]} ${now.getFullYear()}`;
|
|
44
44
|
return unsafe(html`
|
|
45
|
-
<header class="er-pagehead er-pagehead--centered">
|
|
45
|
+
<header class="er-pagehead er-pagehead--centered er-pagehead--dashboard">
|
|
46
46
|
<p class="er-pagehead__kicker">
|
|
47
47
|
Vol. ${volume} · № ${issueNum}
|
|
48
48
|
</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/section.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AA6BhE;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/section.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AA6BhE;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA8BnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,KAAK,EAAE,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CA0BT;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAWvD"}
|
|
@@ -63,9 +63,7 @@ export function renderRow(entry, index, defaultSite) {
|
|
|
63
63
|
<time class="er-calendar-meta er-calendar-meta-updated" data-format="date"
|
|
64
64
|
datetime="${entry.updatedAt}" title="${entry.updatedAt}">${formatDate(entry.updatedAt)}</time>
|
|
65
65
|
</div>
|
|
66
|
-
|
|
67
|
-
title="open the review surface for ${entry.slug}"
|
|
68
|
-
class="er-stamp-link">${renderReviewStateBadge(entry.reviewState)}</a></span>
|
|
66
|
+
${renderStatusCell(entry, reviewLink)}
|
|
69
67
|
${renderRowActions(entry, defaultSite)}
|
|
70
68
|
</div>
|
|
71
69
|
</div>`);
|
|
@@ -127,4 +125,26 @@ function formatDate(iso) {
|
|
|
127
125
|
// <span title="...">.
|
|
128
126
|
return iso.slice(0, 10);
|
|
129
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Render the status column for one row.
|
|
130
|
+
*
|
|
131
|
+
* #243 — when the entry has no reviewState, render an EMPTY span (no
|
|
132
|
+
* `<a>`, no em-dash placeholder, no stamp box). Operators were reading
|
|
133
|
+
* the previous box-with-em-dash as a button-like action; the slug-link
|
|
134
|
+
* in the row body already routes to the review surface, so the badge
|
|
135
|
+
* slot only carries information when there's a real reviewState.
|
|
136
|
+
*
|
|
137
|
+
* Grid alignment is preserved because CSS Grid auto-sizes columns from
|
|
138
|
+
* the widest cell — empty cells leave their slot blank without breaking
|
|
139
|
+
* sibling alignment.
|
|
140
|
+
*/
|
|
141
|
+
function renderStatusCell(entry, reviewLink) {
|
|
142
|
+
if (entry.reviewState === undefined) {
|
|
143
|
+
return unsafe('<span class="er-calendar-status" aria-hidden="true"></span>');
|
|
144
|
+
}
|
|
145
|
+
return unsafe(html `
|
|
146
|
+
<span class="er-calendar-status"><a href="${reviewLink}"
|
|
147
|
+
title="open the review surface for ${entry.slug}"
|
|
148
|
+
class="er-stamp-link">${renderReviewStateBadge(entry.reviewState)}</a></span>`);
|
|
149
|
+
}
|
|
130
150
|
//# sourceMappingURL=section.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section.js","sourceRoot":"","sources":["../../../src/pages/dashboard/section.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAgB,MAAM,YAAY,CAAC;AAExD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,eAAe,GAA0B;IAC7C,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;CACf,CAAC;AAEF,MAAM,oBAAoB,GAA0B;IAClD,KAAK,EAAE,kDAAkD;IACzD,OAAO,EAAE,gEAAgE;IACzE,SAAS,EAAE,uBAAuB;IAClC,QAAQ,EAAE,uBAAuB;IACjC,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,yBAAyB;IACpC,OAAO,EAAE,kBAAkB;IAC3B,SAAS,EAAE,uBAAuB;CACnC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,KAAa,EAAE,WAAmB;IACxE,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,+BAA+B,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3F,kEAAkE;IAClE,wEAAwE;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,MAAM,UAAU,GACd,KAAK,GAAG,CAAC;QACP,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA,gBAAgB,KAAK,4BAA4B,KAAK,GAAG,CAAC;QACvE,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,MAAM,CAAC,IAAI,CAAA;mEAC+C,MAAM,IAAI,UAAU;iDACtC,KAAK,CAAC,YAAY;qBAC9C,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,kBAAkB,MAAM;qCAC5C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;;+CAExB,UAAU;8CACX,KAAK,CAAC,IAAI;4CACZ,KAAK,CAAC,KAAK;;8BAEzB,SAAS,gBAAgB,SAAS;;wBAExC,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;;
|
|
1
|
+
{"version":3,"file":"section.js","sourceRoot":"","sources":["../../../src/pages/dashboard/section.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,9 +74,7 @@ export function renderRow(entry: Entry, index: number, defaultSite: string): Raw
|
|
|
74
74
|
<time class="er-calendar-meta er-calendar-meta-updated" data-format="date"
|
|
75
75
|
datetime="${entry.updatedAt}" title="${entry.updatedAt}">${formatDate(entry.updatedAt)}</time>
|
|
76
76
|
</div>
|
|
77
|
-
|
|
78
|
-
title="open the review surface for ${entry.slug}"
|
|
79
|
-
class="er-stamp-link">${renderReviewStateBadge(entry.reviewState)}</a></span>
|
|
77
|
+
${renderStatusCell(entry, reviewLink)}
|
|
80
78
|
${renderRowActions(entry, defaultSite)}
|
|
81
79
|
</div>
|
|
82
80
|
</div>`);
|
|
@@ -147,3 +145,26 @@ function formatDate(iso: string): string {
|
|
|
147
145
|
// <span title="...">.
|
|
148
146
|
return iso.slice(0, 10);
|
|
149
147
|
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Render the status column for one row.
|
|
151
|
+
*
|
|
152
|
+
* #243 — when the entry has no reviewState, render an EMPTY span (no
|
|
153
|
+
* `<a>`, no em-dash placeholder, no stamp box). Operators were reading
|
|
154
|
+
* the previous box-with-em-dash as a button-like action; the slug-link
|
|
155
|
+
* in the row body already routes to the review surface, so the badge
|
|
156
|
+
* slot only carries information when there's a real reviewState.
|
|
157
|
+
*
|
|
158
|
+
* Grid alignment is preserved because CSS Grid auto-sizes columns from
|
|
159
|
+
* the widest cell — empty cells leave their slot blank without breaking
|
|
160
|
+
* sibling alignment.
|
|
161
|
+
*/
|
|
162
|
+
function renderStatusCell(entry: Entry, reviewLink: string): RawHtml {
|
|
163
|
+
if (entry.reviewState === undefined) {
|
|
164
|
+
return unsafe('<span class="er-calendar-status" aria-hidden="true"></span>');
|
|
165
|
+
}
|
|
166
|
+
return unsafe(html`
|
|
167
|
+
<span class="er-calendar-status"><a href="${reviewLink}"
|
|
168
|
+
title="open the review surface for ${entry.slug}"
|
|
169
|
+
class="er-stamp-link">${renderReviewStateBadge(entry.reviewState)}</a></span>`);
|
|
170
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-strip.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/decision-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-strip.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/decision-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAwKxD,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC;;yDAEqD;IACrD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAMvE"}
|
|
@@ -101,6 +101,10 @@ function renderMutableButtons({ entry, historical }) {
|
|
|
101
101
|
buttons.push(shortcutChipWrap(html `<button class="er-btn er-btn-small" data-action="iterate" data-entry-uuid="${entry.uuid}" type="button"${unsafe(histDisabled)}${unsafe(histTitle)}>Iterate</button>`, 'i'));
|
|
102
102
|
// Reject — DISABLED pending the design decision in #173.
|
|
103
103
|
buttons.push(shortcutChipWrap(html `<button class="er-btn er-btn-small er-btn-reject" data-action="reject" data-entry-uuid="${entry.uuid}" type="button" disabled title="${REJECT_TOOLTIP}" aria-disabled="true">Reject</button>`, 'r'));
|
|
104
|
+
// Cancel (#242) — pull the entry off-pipeline. Routes through
|
|
105
|
+
// `/deskwork:cancel <slug>` like Approve/Iterate (THESIS Consequence 2);
|
|
106
|
+
// the skill mutates sidecar + journal. Same gravity / styling as Reject.
|
|
107
|
+
buttons.push(html `<button class="er-btn er-btn-small er-btn-reject" data-action="cancel" data-entry-uuid="${entry.uuid}" data-entry-slug="${entry.slug}" type="button"${unsafe(histDisabled)}${unsafe(histTitle || ' title="Pull this entry off-pipeline (Cancelled). Reversible via /deskwork:induct."')}>Cancel ⊘</button>`);
|
|
104
108
|
// Historical-stage dropdown — only useful when more than one stage
|
|
105
109
|
// has recorded iterations for this entry. The renderer returns an
|
|
106
110
|
// empty string when there are none; keep it conditional here so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-strip.js","sourceRoot":"","sources":["../../../src/pages/entry-review/decision-strip.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decision-strip.js","sourceRoot":"","sources":["../../../src/pages/entry-review/decision-strip.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,13 @@
|
|
|
7
7
|
* Outline / Focus / Save / Cancel actions. Consumes the existing
|
|
8
8
|
* `editorial-review.css` rules unchanged.
|
|
9
9
|
*
|
|
10
|
-
* Save semantics: the
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* action is intentionally inert pending the design decision.
|
|
10
|
+
* Save semantics (#174): the Save button is a DUMB file-write affordance.
|
|
11
|
+
* Click → POST the editor's current text to the
|
|
12
|
+
* `PUT /api/dev/editorial-review/entry/:entryId/body` route → write to
|
|
13
|
+
* the entry's canonical `index.md` on disk in place. No version bump,
|
|
14
|
+
* no journal record, no state-machine mutation. State-machine work
|
|
15
|
+
* stays with `/deskwork:iterate`; Save and Iterate are orthogonal.
|
|
17
16
|
*/
|
|
18
17
|
import { type RawHtml } from '../html.ts';
|
|
19
|
-
export declare function renderEditToolbar(outlineHasContent: boolean): RawHtml;
|
|
18
|
+
export declare function renderEditToolbar(outlineHasContent: boolean, entryLabel: string): RawHtml;
|
|
20
19
|
//# sourceMappingURL=edit-toolbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-toolbar.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/edit-toolbar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"edit-toolbar.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/edit-toolbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,iBAAiB,EAAE,OAAO,EAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAgCT"}
|
|
@@ -7,18 +7,15 @@
|
|
|
7
7
|
* Outline / Focus / Save / Cancel actions. Consumes the existing
|
|
8
8
|
* `editorial-review.css` rules unchanged.
|
|
9
9
|
*
|
|
10
|
-
* Save semantics: the
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* `
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* action is intentionally inert pending the design decision.
|
|
10
|
+
* Save semantics (#174): the Save button is a DUMB file-write affordance.
|
|
11
|
+
* Click → POST the editor's current text to the
|
|
12
|
+
* `PUT /api/dev/editorial-review/entry/:entryId/body` route → write to
|
|
13
|
+
* the entry's canonical `index.md` on disk in place. No version bump,
|
|
14
|
+
* no journal record, no state-machine mutation. State-machine work
|
|
15
|
+
* stays with `/deskwork:iterate`; Save and Iterate are orthogonal.
|
|
17
16
|
*/
|
|
18
17
|
import { html, unsafe } from "../html.js";
|
|
19
|
-
|
|
20
|
-
const SAVE_TOOLTIP = `Save semantics for the entry-keyed surface are pending design — see ${SAVE_ISSUE_URL}`;
|
|
21
|
-
export function renderEditToolbar(outlineHasContent) {
|
|
18
|
+
export function renderEditToolbar(outlineHasContent, entryLabel) {
|
|
22
19
|
const outlineBtnAttrs = outlineHasContent ? '' : ' hidden';
|
|
23
20
|
// #175 Phase 34b — every button carries a tooltip naming what it
|
|
24
21
|
// does + the keyboard shortcut where one exists. The mode tabs
|
|
@@ -26,8 +23,16 @@ export function renderEditToolbar(outlineHasContent) {
|
|
|
26
23
|
// operator who hadn't memorized them got nothing on hover. The
|
|
27
24
|
// trailing `?` button opens the existing shortcuts overlay so the
|
|
28
25
|
// full keyboard reference is one click away from the toolbar.
|
|
26
|
+
//
|
|
27
|
+
// #241 — `entryLabel` is the entry's slug or title; rendered inside
|
|
28
|
+
// a dedicated `.er-edit-entry-label` span. Hidden on desktop (the
|
|
29
|
+
// surrounding strip + folio already convey what's being edited);
|
|
30
|
+
// shown on phone where the rest of the page chrome is hidden in
|
|
31
|
+
// edit mode and the operator needs an in-toolbar reminder of which
|
|
32
|
+
// document the editor is bound to.
|
|
29
33
|
return unsafe(html `
|
|
30
34
|
<div class="er-edit-toolbar" data-edit-toolbar hidden>
|
|
35
|
+
<span class="er-edit-entry-label" data-edit-entry-label title="${entryLabel}">${entryLabel}</span>
|
|
31
36
|
<div class="er-edit-modes" role="tablist" aria-label="Editor mode">
|
|
32
37
|
<button class="er-edit-mode-btn" data-edit-view="source" type="button" aria-pressed="true" title="Edit markdown source only">Source</button>
|
|
33
38
|
<button class="er-edit-mode-btn" data-edit-view="split" type="button" aria-pressed="false" title="Source on the left, rendered preview on the right">Split</button>
|
|
@@ -36,7 +41,7 @@ export function renderEditToolbar(outlineHasContent) {
|
|
|
36
41
|
<div class="er-edit-actions">
|
|
37
42
|
<button class="er-btn er-btn-small" data-action="outline-drawer" type="button" title="Show the outline for reference (O)" aria-pressed="false"${unsafe(outlineBtnAttrs)}>Outline ↗</button>
|
|
38
43
|
<button class="er-btn er-btn-small" data-action="focus-mode" type="button" title="Distraction-free full-viewport canvas (Shift+F)" aria-pressed="false">Focus ⛶</button>
|
|
39
|
-
<button class="er-btn er-btn-primary" data-action="save-version" type="button"
|
|
44
|
+
<button class="er-btn er-btn-primary" data-action="save-version" type="button" title="Save the current text to disk (Cmd/Ctrl+S)">Save</button>
|
|
40
45
|
<button class="er-btn" data-action="cancel-edit" type="button" title="Discard unsaved edits and exit edit mode">Cancel</button>
|
|
41
46
|
<button class="er-btn er-btn-small" data-action="shortcuts" type="button" aria-label="Show keyboard shortcuts" title="Show all keyboard shortcuts (?)">?</button>
|
|
42
47
|
<span class="er-edit-hint" data-edit-hint></span>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-toolbar.js","sourceRoot":"","sources":["../../../src/pages/entry-review/edit-toolbar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"edit-toolbar.js","sourceRoot":"","sources":["../../../src/pages/entry-review/edit-toolbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAgB,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAC/B,iBAA0B,EAC1B,UAAkB;IAElB,MAAM,eAAe,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,iEAAiE;IACjE,+DAA+D;IAC/D,8DAA8D;IAC9D,+DAA+D;IAC/D,kEAAkE;IAClE,8DAA8D;IAC9D,EAAE;IACF,oEAAoE;IACpE,kEAAkE;IAClE,iEAAiE;IACjE,gEAAgE;IAChE,mEAAmE;IACnE,mCAAmC;IACnC,OAAO,MAAM,CAAC,IAAI,CAAA;;uEAEmD,UAAU,KAAK,UAAU;;;;;;;wJAOwD,MAAM,CAAC,eAAe,CAAC;;;;;;;WAOpK,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAMjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBzD,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B;oDACgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;mDAG+C;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AA2GD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,gBAAqB,EAC5B,QAAQ,CAAC,EAAE,sBAAsB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA8H5B"}
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
import { existsSync } from 'node:fs';
|
|
28
28
|
import { parseDraftFrontmatter, renderMarkdownToHtml, } from '@deskwork/core/review/render';
|
|
29
29
|
import { splitOutline } from '@deskwork/core/outline-split';
|
|
30
|
+
import { extractToc } from '@deskwork/core/review/toc';
|
|
30
31
|
import { resolveCalendarPath } from '@deskwork/core/paths';
|
|
31
32
|
import { readCalendar } from '@deskwork/core/calendar';
|
|
32
33
|
import { findEntryById } from '@deskwork/core/calendar-mutations';
|
|
@@ -41,6 +42,7 @@ import { renderEditToolbar } from "./edit-toolbar.js";
|
|
|
41
42
|
import { renderEditPanes } from "./edit-panes.js";
|
|
42
43
|
import { renderOutlineDrawer } from "./outline-drawer.js";
|
|
43
44
|
import { renderMarginalia, renderMarginaliaTab } from "./marginalia.js";
|
|
45
|
+
import { renderMobileBar, renderMobileSheet, renderStripModeSegment, renderStripEditExit } from "./mobile-bar.js";
|
|
44
46
|
import { renderDecisionStrip } from "./decision-strip.js";
|
|
45
47
|
import { renderShortcutsOverlay } from "./shortcuts.js";
|
|
46
48
|
import { renderEntryNotFound } from "./not-found.js";
|
|
@@ -70,7 +72,11 @@ async function prepareRender(markdown, renderCtx) {
|
|
|
70
72
|
const outlineHtml = split.outline
|
|
71
73
|
? await renderMarkdownToHtml(split.outline, renderCtx)
|
|
72
74
|
: '';
|
|
73
|
-
|
|
75
|
+
// #244 — extract TOC from the rendered body's headings. The renderer
|
|
76
|
+
// ran rehype-slug so every h2/h3/h4 carries an `id` attribute; the
|
|
77
|
+
// extractor reads the `id` + visible text into a flat list.
|
|
78
|
+
const tocEntries = extractToc(renderedHtml);
|
|
79
|
+
return { fm, bodyHtml: renderedHtml, outlineHtml, tocEntries };
|
|
74
80
|
}
|
|
75
81
|
function buildState(data) {
|
|
76
82
|
const stage = data.entry.currentStage;
|
|
@@ -122,7 +128,7 @@ export async function renderEntryReviewPage(ctx, entryId, query = {}, getIndex)
|
|
|
122
128
|
const reason = err instanceof Error ? err.message : String(err);
|
|
123
129
|
return { status: 404, html: renderEntryNotFound(entryId, reason) };
|
|
124
130
|
}
|
|
125
|
-
const { fm, bodyHtml, outlineHtml } = await prepareRender(data.markdown, {
|
|
131
|
+
const { fm, bodyHtml, outlineHtml, tocEntries } = await prepareRender(data.markdown, {
|
|
126
132
|
entryId: data.entry.uuid,
|
|
127
133
|
site: data.site,
|
|
128
134
|
});
|
|
@@ -186,16 +192,20 @@ export async function renderEntryReviewPage(ctx, entryId, query = {}, getIndex)
|
|
|
186
192
|
<span class="er-strip-hint">select text to <span class="er-gloss" data-term="marginalia" tabindex="0" role="button" aria-describedby="glossary-marginalia">mark</span> · double-click to edit · <kbd>?</kbd> for shortcuts</span>
|
|
187
193
|
</span>
|
|
188
194
|
${decisionStrip}
|
|
195
|
+
${renderStripModeSegment()}
|
|
196
|
+
${renderStripEditExit()}
|
|
189
197
|
</div>
|
|
190
198
|
</div>
|
|
191
|
-
${renderEditToolbar(outlineHtml.length > 0)}
|
|
199
|
+
${renderEditToolbar(outlineHtml.length > 0, titleField)}
|
|
192
200
|
<article class="er-page" data-entry-uuid="${data.entry.uuid}">
|
|
193
201
|
${unsafe(pageGrid)}
|
|
194
202
|
</article>
|
|
195
203
|
${renderMarginaliaTab()}
|
|
196
204
|
<button class="er-pencil-btn" data-add-comment-btn hidden type="button">Mark</button>
|
|
197
|
-
${renderOutlineDrawer(outlineHtml)}
|
|
205
|
+
${renderOutlineDrawer(outlineHtml, tocEntries)}
|
|
198
206
|
${scrapbookDrawer}
|
|
207
|
+
${renderMobileBar()}
|
|
208
|
+
${renderMobileSheet()}
|
|
199
209
|
<div class="er-toast" data-toast hidden></div>
|
|
200
210
|
${renderShortcutsOverlay()}
|
|
201
211
|
<div class="er-poll-indicator" data-poll>auto-refresh · 8s</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pages/entry-review/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pages/entry-review/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mobile bottom-bar + sheet host for the entry-keyed review surface.
|
|
3
|
+
*
|
|
4
|
+
* Renders a 3-tab bottom bar and a sheet host that slides up from the
|
|
5
|
+
* viewport bottom. Visible only at <48rem (phone widths) — see
|
|
6
|
+
* editorial-review.css. Above that the bar and sheet are display:none
|
|
7
|
+
* and the desktop layout (in-flow marginalia column, outline-drawer
|
|
8
|
+
* overlay, decision strip in the top strip) carries the surface.
|
|
9
|
+
*
|
|
10
|
+
* Design references:
|
|
11
|
+
* - Review tabs: plugins/deskwork-studio/public/mockups/mobile-1-bottom-sheet.html
|
|
12
|
+
* - Editor tabs: plugins/deskwork-studio/public/mockups/editor-2-press-check-tabbar.html
|
|
13
|
+
*
|
|
14
|
+
* The bar carries SIX tab buttons; CSS shows three or four at a time
|
|
15
|
+
* keyed off `body[data-edit-mode="editing"]`:
|
|
16
|
+
* - Review mode: Outline · Notes · Scrapbook · Actions (4-column grid)
|
|
17
|
+
* - Edit mode: Format · Notes · Save (3-column grid)
|
|
18
|
+
* The Notes tab is shared between modes (review notes the operator
|
|
19
|
+
* leaves carry across into edit). The bar's data-mode attribute is
|
|
20
|
+
* also flipped by the client so additional state-dependent styles
|
|
21
|
+
* (Save dirty glow, etc.) can key off it. The Scrapbook tab uses a
|
|
22
|
+
* grid glyph (▦) and a kraft-tone count badge to distinguish it
|
|
23
|
+
* from the red-pencil Notes badge — folio is "context for the
|
|
24
|
+
* entry," not an action peer of decisions.
|
|
25
|
+
*
|
|
26
|
+
* The sheet has five content slots (outline / notes / actions /
|
|
27
|
+
* scrapbook / format).
|
|
28
|
+
* The client controller (`entry-review/mobile-sheet-bar.ts`) populates
|
|
29
|
+
* each at first open. Slot sources:
|
|
30
|
+
* - outline: clone of `.er-outline-drawer-body`
|
|
31
|
+
* - notes: actual `[data-sidebar-list]` element MOVED in on phone
|
|
32
|
+
* (preserves event listeners; see mobile-sheet-bar.ts)
|
|
33
|
+
* - actions: rendered fresh from the decision verbs
|
|
34
|
+
* - format: the press-check key grid rendered server-side below
|
|
35
|
+
*
|
|
36
|
+
* The Save tab is NOT a sheet — it triggers the existing
|
|
37
|
+
* `[data-action="save-version"]` handler directly (the one allowed
|
|
38
|
+
* file mutation per THESIS Consequence 2).
|
|
39
|
+
*/
|
|
40
|
+
import { type RawHtml } from '../html.ts';
|
|
41
|
+
export declare function renderMobileBar(): RawHtml;
|
|
42
|
+
export declare function renderMobileSheet(): RawHtml;
|
|
43
|
+
/**
|
|
44
|
+
* Phone-only Source/Preview pill rendered into the top strip when in
|
|
45
|
+
* edit mode. Uses the same `data-edit-view` attribute as the desktop
|
|
46
|
+
* edit toolbar so `editModeBtns` (queried via that attribute in
|
|
47
|
+
* entry-review-client.ts) auto-binds clicks. CSS reveals it only on
|
|
48
|
+
* phone + edit mode; the desktop edit toolbar is hidden in that
|
|
49
|
+
* combination.
|
|
50
|
+
*/
|
|
51
|
+
export declare function renderStripModeSegment(): RawHtml;
|
|
52
|
+
/**
|
|
53
|
+
* Phone-only "✕ Done" exit affordance in the strip. Visible only when
|
|
54
|
+
* editing on phone (CSS-gated). Click dispatches into the existing
|
|
55
|
+
* toggle-edit handler — preserves the confirmDiscard prompt when the
|
|
56
|
+
* buffer is dirty, immediate exit when clean. Sits alongside the
|
|
57
|
+
* existing back-link (which continues to navigate home regardless of
|
|
58
|
+
* mode) so the operator always has both "leave editor" and "leave
|
|
59
|
+
* page" affordances available.
|
|
60
|
+
*/
|
|
61
|
+
export declare function renderStripEditExit(): RawHtml;
|
|
62
|
+
//# sourceMappingURL=mobile-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-bar.d.ts","sourceRoot":"","sources":["../../../src/pages/entry-review/mobile-bar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAExD,wBAAgB,eAAe,IAAI,OAAO,CA8BzC;AA2BD,wBAAgB,iBAAiB,IAAI,OAAO,CA2B3C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAMhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAM7C"}
|