@deskwork/studio 0.13.0 → 0.14.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/dist/pages/content-detail.d.ts.map +1 -1
- package/dist/pages/content-detail.js +5 -4
- package/dist/pages/content-detail.js.map +1 -1
- package/dist/pages/content-detail.ts +5 -4
- package/dist/pages/content.d.ts.map +1 -1
- package/dist/pages/content.js +4 -6
- package/dist/pages/content.js.map +1 -1
- package/dist/pages/content.ts +4 -6
- package/dist/pages/dashboard/affordances.d.ts +6 -1
- package/dist/pages/dashboard/affordances.d.ts.map +1 -1
- package/dist/pages/dashboard/affordances.js +17 -2
- package/dist/pages/dashboard/affordances.js.map +1 -1
- package/dist/pages/dashboard/affordances.ts +18 -2
- package/dist/pages/dashboard/header.js +2 -2
- package/dist/pages/dashboard/header.ts +2 -2
- package/dist/pages/dashboard/section.d.ts +2 -2
- package/dist/pages/dashboard/section.d.ts.map +1 -1
- package/dist/pages/dashboard/section.js +5 -5
- package/dist/pages/dashboard/section.js.map +1 -1
- package/dist/pages/dashboard/section.ts +9 -5
- package/dist/pages/dashboard.d.ts.map +1 -1
- package/dist/pages/dashboard.js +3 -2
- package/dist/pages/dashboard.js.map +1 -1
- package/dist/pages/dashboard.ts +3 -2
- package/dist/pages/entry-review/data.d.ts +54 -0
- package/dist/pages/entry-review/data.d.ts.map +1 -0
- package/dist/pages/entry-review/data.js +116 -0
- package/dist/pages/entry-review/data.js.map +1 -0
- package/dist/pages/entry-review/decision-strip.d.ts +37 -0
- package/dist/pages/entry-review/decision-strip.d.ts.map +1 -0
- package/dist/pages/entry-review/decision-strip.js +137 -0
- package/dist/pages/entry-review/decision-strip.js.map +1 -0
- package/dist/pages/entry-review/edit-panes.d.ts +12 -0
- package/dist/pages/entry-review/edit-panes.d.ts.map +1 -0
- package/dist/pages/entry-review/edit-panes.js +28 -0
- package/dist/pages/entry-review/edit-panes.js.map +1 -0
- package/dist/pages/entry-review/edit-toolbar.d.ts +20 -0
- package/dist/pages/entry-review/edit-toolbar.d.ts.map +1 -0
- package/dist/pages/entry-review/edit-toolbar.js +46 -0
- package/dist/pages/entry-review/edit-toolbar.js.map +1 -0
- package/dist/pages/entry-review/index.d.ts +50 -0
- package/dist/pages/entry-review/index.d.ts.map +1 -0
- package/dist/pages/entry-review/index.js +219 -0
- package/dist/pages/entry-review/index.js.map +1 -0
- package/dist/pages/entry-review/marginalia.d.ts +28 -0
- package/dist/pages/entry-review/marginalia.d.ts.map +1 -0
- package/dist/pages/entry-review/marginalia.js +67 -0
- package/dist/pages/entry-review/marginalia.js.map +1 -0
- package/dist/pages/entry-review/not-found.d.ts +9 -0
- package/dist/pages/entry-review/not-found.d.ts.map +1 -0
- package/dist/pages/entry-review/not-found.js +34 -0
- package/dist/pages/entry-review/not-found.js.map +1 -0
- package/dist/pages/entry-review/outline-drawer.d.ts +12 -0
- package/dist/pages/entry-review/outline-drawer.d.ts.map +1 -0
- package/dist/pages/entry-review/outline-drawer.js +28 -0
- package/dist/pages/entry-review/outline-drawer.js.map +1 -0
- package/dist/pages/entry-review/shortcuts.d.ts +14 -0
- package/dist/pages/entry-review/shortcuts.d.ts.map +1 -0
- package/dist/pages/entry-review/shortcuts.js +36 -0
- package/dist/pages/entry-review/shortcuts.js.map +1 -0
- package/dist/pages/entry-review/version-strip.d.ts +33 -0
- package/dist/pages/entry-review/version-strip.d.ts.map +1 -0
- package/dist/pages/entry-review/version-strip.js +81 -0
- package/dist/pages/entry-review/version-strip.js.map +1 -0
- package/dist/pages/entry-review.d.ts +6 -21
- package/dist/pages/entry-review.d.ts.map +1 -1
- package/dist/pages/entry-review.js +6 -144
- package/dist/pages/entry-review.js.map +1 -1
- package/dist/pages/entry-review.ts +11 -181
- package/dist/pages/index.d.ts.map +1 -1
- package/dist/pages/index.js +6 -10
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/index.ts +6 -10
- package/dist/pages/scrapbook.d.ts.map +1 -1
- package/dist/pages/scrapbook.js +208 -11
- package/dist/pages/scrapbook.js.map +1 -1
- package/dist/pages/scrapbook.ts +209 -10
- package/dist/pages/shortform-review.d.ts +32 -0
- package/dist/pages/shortform-review.d.ts.map +1 -0
- package/dist/pages/shortform-review.js +270 -0
- package/dist/pages/shortform-review.js.map +1 -0
- package/dist/pages/shortform-review.ts +342 -0
- package/dist/routes/api.d.ts +8 -0
- package/dist/routes/api.d.ts.map +1 -1
- package/dist/routes/api.js +115 -0
- package/dist/routes/api.js.map +1 -1
- package/dist/routes/entry-annotation-body.d.ts +26 -0
- package/dist/routes/entry-annotation-body.d.ts.map +1 -0
- package/dist/routes/entry-annotation-body.js +152 -0
- package/dist/routes/entry-annotation-body.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +56 -193
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
- package/dist/pages/review.d.ts +0 -68
- package/dist/pages/review.d.ts.map +0 -1
- package/dist/pages/review.js +0 -561
- package/dist/pages/review.js.map +0 -1
- package/dist/pages/review.ts +0 -710
|
@@ -1,25 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Entry-
|
|
2
|
+
* Entry-keyed press-check surface — `/dev/editorial-review/entry/:entryId`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* minimal affordance set returned by `getAffordances(entry)`.
|
|
9
|
-
*
|
|
10
|
-
* The two surfaces coexist during the migration window. Once the
|
|
11
|
-
* workflow-keyed routes are retired, this becomes the canonical review
|
|
12
|
-
* surface; until then, the dashboard's per-row "review" links continue
|
|
13
|
-
* to point at the legacy route.
|
|
14
|
-
*
|
|
15
|
-
* Rendering is intentionally minimal — the goal of Task 35 is the route
|
|
16
|
-
* shape + affordance plumbing, not a fully-styled UI. Styling will land
|
|
17
|
-
* once the affordance set stabilizes against real entries.
|
|
4
|
+
* The implementation lives in the `entry-review/` directory (one
|
|
5
|
+
* module per chrome component, each under the 500-line cap). This
|
|
6
|
+
* file re-exports the public render function so the existing
|
|
7
|
+
* `server.ts` import keeps working.
|
|
18
8
|
*/
|
|
19
|
-
|
|
20
|
-
status: 200 | 404;
|
|
21
|
-
html: string;
|
|
22
|
-
}
|
|
23
|
-
export declare function renderEntryReviewPage(projectRoot: string, entryId: string): Promise<EntryReviewResult>;
|
|
24
|
-
export {};
|
|
9
|
+
export { renderEntryReviewPage, type EntryReviewQuery, type EntryReviewResult, type EntryReviewIndexGetter, } from './entry-review/index.ts';
|
|
25
10
|
//# sourceMappingURL=entry-review.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-review.d.ts","sourceRoot":"","sources":["../../src/pages/entry-review.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"entry-review.d.ts","sourceRoot":"","sources":["../../src/pages/entry-review.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,148 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Entry-
|
|
2
|
+
* Entry-keyed press-check surface — `/dev/editorial-review/entry/:entryId`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* minimal affordance set returned by `getAffordances(entry)`.
|
|
9
|
-
*
|
|
10
|
-
* The two surfaces coexist during the migration window. Once the
|
|
11
|
-
* workflow-keyed routes are retired, this becomes the canonical review
|
|
12
|
-
* surface; until then, the dashboard's per-row "review" links continue
|
|
13
|
-
* to point at the legacy route.
|
|
14
|
-
*
|
|
15
|
-
* Rendering is intentionally minimal — the goal of Task 35 is the route
|
|
16
|
-
* shape + affordance plumbing, not a fully-styled UI. Styling will land
|
|
17
|
-
* once the affordance set stabilizes against real entries.
|
|
4
|
+
* The implementation lives in the `entry-review/` directory (one
|
|
5
|
+
* module per chrome component, each under the 500-line cap). This
|
|
6
|
+
* file re-exports the public render function so the existing
|
|
7
|
+
* `server.ts` import keeps working.
|
|
18
8
|
*/
|
|
19
|
-
|
|
20
|
-
import { getAffordances } from "../lib/stage-affordances.js";
|
|
21
|
-
import { html, unsafe } from "./html.js";
|
|
22
|
-
import { layout } from "./layout.js";
|
|
23
|
-
const STAGE_PICKER_OPTIONS = [
|
|
24
|
-
'Ideas',
|
|
25
|
-
'Planned',
|
|
26
|
-
'Outlining',
|
|
27
|
-
'Drafting',
|
|
28
|
-
'Final',
|
|
29
|
-
];
|
|
30
|
-
const CONTROL_LABELS = {
|
|
31
|
-
save: 'Save',
|
|
32
|
-
iterate: 'Iterate',
|
|
33
|
-
approve: 'Approve',
|
|
34
|
-
reject: 'Reject',
|
|
35
|
-
'historical-stage-dropdown': 'Historical stage',
|
|
36
|
-
'view-only': 'Read-only',
|
|
37
|
-
'fork-placeholder': 'Fork (coming)',
|
|
38
|
-
'induct-to': 'Induct to',
|
|
39
|
-
};
|
|
40
|
-
function renderControl(control, entry) {
|
|
41
|
-
const label = CONTROL_LABELS[control] ?? control;
|
|
42
|
-
if (control === 'induct-to') {
|
|
43
|
-
const options = STAGE_PICKER_OPTIONS.map((s) => unsafe(html `<option value="${s}">${s}</option>`));
|
|
44
|
-
return unsafe(html `
|
|
45
|
-
<label class="er-entry-control er-entry-control--induct">
|
|
46
|
-
<span class="er-entry-control-label">${label}</span>
|
|
47
|
-
<select name="induct-to" data-entry-uuid="${entry.uuid}">
|
|
48
|
-
${options}
|
|
49
|
-
</select>
|
|
50
|
-
</label>`);
|
|
51
|
-
}
|
|
52
|
-
if (control === 'historical-stage-dropdown') {
|
|
53
|
-
const stages = Object.keys(entry.iterationByStage);
|
|
54
|
-
if (stages.length === 0) {
|
|
55
|
-
return unsafe('');
|
|
56
|
-
}
|
|
57
|
-
const options = stages.map((s) => unsafe(html `<option value="${s}">${s}</option>`));
|
|
58
|
-
return unsafe(html `
|
|
59
|
-
<label class="er-entry-control er-entry-control--history">
|
|
60
|
-
<span class="er-entry-control-label">${label}</span>
|
|
61
|
-
<select name="history-stage" data-entry-uuid="${entry.uuid}">
|
|
62
|
-
${options}
|
|
63
|
-
</select>
|
|
64
|
-
</label>`);
|
|
65
|
-
}
|
|
66
|
-
if (control === 'view-only') {
|
|
67
|
-
return unsafe(html `<span class="er-entry-control er-entry-control--readonly">${label}</span>`);
|
|
68
|
-
}
|
|
69
|
-
if (control === 'fork-placeholder') {
|
|
70
|
-
return unsafe(html `<button class="er-entry-control er-entry-control--button" type="button" disabled data-control="fork">${label}</button>`);
|
|
71
|
-
}
|
|
72
|
-
return unsafe(html `<button class="er-entry-control er-entry-control--button" type="button" data-control="${control}" data-entry-uuid="${entry.uuid}">${label}</button>`);
|
|
73
|
-
}
|
|
74
|
-
function renderControls(entry, affordances) {
|
|
75
|
-
const buttons = affordances.controls.map((c) => renderControl(c, entry));
|
|
76
|
-
const className = affordances.mutable
|
|
77
|
-
? 'er-entry-controls er-entry-controls--mutable'
|
|
78
|
-
: 'er-entry-controls er-entry-controls--readonly';
|
|
79
|
-
return unsafe(html `<nav class="${className}" aria-label="Entry controls">${buttons}</nav>`);
|
|
80
|
-
}
|
|
81
|
-
function renderArtifact(body, mutable) {
|
|
82
|
-
if (mutable) {
|
|
83
|
-
return unsafe(html `
|
|
84
|
-
<textarea class="er-entry-body" name="body" rows="24" data-mutable="true">${body}</textarea>`);
|
|
85
|
-
}
|
|
86
|
-
return unsafe(html `
|
|
87
|
-
<pre class="er-entry-body er-entry-body--readonly" data-mutable="false">${body}</pre>`);
|
|
88
|
-
}
|
|
89
|
-
function renderEntryReview(entry, artifactBody, artifactPath, affordances) {
|
|
90
|
-
const stageBadge = unsafe(html `<span class="er-entry-stage" data-stage="${entry.currentStage}">${entry.currentStage}</span>`);
|
|
91
|
-
const priorBadge = entry.priorStage
|
|
92
|
-
? unsafe(html `<span class="er-entry-prior-stage">paused from ${entry.priorStage}</span>`)
|
|
93
|
-
: '';
|
|
94
|
-
const body = html `
|
|
95
|
-
<main class="er-entry-shell" data-entry-uuid="${entry.uuid}">
|
|
96
|
-
<header class="er-entry-head">
|
|
97
|
-
<p class="er-entry-kicker">Editorial Review · entry</p>
|
|
98
|
-
<h1 class="er-entry-title">${entry.title}</h1>
|
|
99
|
-
<p class="er-entry-meta">
|
|
100
|
-
${stageBadge}
|
|
101
|
-
${priorBadge}
|
|
102
|
-
<code class="er-entry-uuid">${entry.uuid}</code>
|
|
103
|
-
</p>
|
|
104
|
-
<p class="er-entry-artifact-path"><code>${artifactPath}</code></p>
|
|
105
|
-
</header>
|
|
106
|
-
${renderControls(entry, affordances)}
|
|
107
|
-
<section class="er-entry-artifact">
|
|
108
|
-
${renderArtifact(artifactBody, affordances.mutable)}
|
|
109
|
-
</section>
|
|
110
|
-
</main>`;
|
|
111
|
-
return layout({
|
|
112
|
-
title: `${entry.title} — entry review — dev`,
|
|
113
|
-
cssHrefs: ['/static/css/editorial-review.css', '/static/css/entry-review.css'],
|
|
114
|
-
bodyAttrs: 'data-review-ui="entry-review"',
|
|
115
|
-
bodyHtml: body,
|
|
116
|
-
scriptModules: ['entry-review-client'],
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
function renderNotFound(entryId, reason) {
|
|
120
|
-
const body = html `
|
|
121
|
-
<main class="er-entry-shell er-entry-shell--missing">
|
|
122
|
-
<h1>Entry not found</h1>
|
|
123
|
-
<p>No sidecar matched <code>${entryId}</code>.</p>
|
|
124
|
-
<p class="er-entry-detail">${reason}</p>
|
|
125
|
-
<p><a href="/dev/editorial-studio">Back to the studio</a></p>
|
|
126
|
-
</main>`;
|
|
127
|
-
return layout({
|
|
128
|
-
title: 'Entry not found — dev',
|
|
129
|
-
cssHrefs: ['/static/css/editorial-review.css', '/static/css/entry-review.css'],
|
|
130
|
-
bodyAttrs: 'data-review-ui="entry-review-missing"',
|
|
131
|
-
bodyHtml: body,
|
|
132
|
-
scriptModules: [],
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
export async function renderEntryReviewPage(projectRoot, entryId) {
|
|
136
|
-
let resolved;
|
|
137
|
-
try {
|
|
138
|
-
resolved = await resolveEntry(projectRoot, entryId);
|
|
139
|
-
}
|
|
140
|
-
catch (err) {
|
|
141
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
142
|
-
return { status: 404, html: renderNotFound(entryId, reason) };
|
|
143
|
-
}
|
|
144
|
-
const affordances = getAffordances(resolved.entry);
|
|
145
|
-
const html = renderEntryReview(resolved.entry, resolved.artifactBody, resolved.artifactPath, affordances);
|
|
146
|
-
return { status: 200, html };
|
|
147
|
-
}
|
|
9
|
+
export { renderEntryReviewPage, } from "./entry-review/index.js";
|
|
148
10
|
//# sourceMappingURL=entry-review.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-review.js","sourceRoot":"","sources":["../../src/pages/entry-review.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"entry-review.js","sourceRoot":"","sources":["../../src/pages/entry-review.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,GAItB,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,185 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Entry-
|
|
2
|
+
* Entry-keyed press-check surface — `/dev/editorial-review/entry/:entryId`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* minimal affordance set returned by `getAffordances(entry)`.
|
|
9
|
-
*
|
|
10
|
-
* The two surfaces coexist during the migration window. Once the
|
|
11
|
-
* workflow-keyed routes are retired, this becomes the canonical review
|
|
12
|
-
* surface; until then, the dashboard's per-row "review" links continue
|
|
13
|
-
* to point at the legacy route.
|
|
14
|
-
*
|
|
15
|
-
* Rendering is intentionally minimal — the goal of Task 35 is the route
|
|
16
|
-
* shape + affordance plumbing, not a fully-styled UI. Styling will land
|
|
17
|
-
* once the affordance set stabilizes against real entries.
|
|
4
|
+
* The implementation lives in the `entry-review/` directory (one
|
|
5
|
+
* module per chrome component, each under the 500-line cap). This
|
|
6
|
+
* file re-exports the public render function so the existing
|
|
7
|
+
* `server.ts` import keeps working.
|
|
18
8
|
*/
|
|
19
9
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const STAGE_PICKER_OPTIONS = [
|
|
28
|
-
'Ideas',
|
|
29
|
-
'Planned',
|
|
30
|
-
'Outlining',
|
|
31
|
-
'Drafting',
|
|
32
|
-
'Final',
|
|
33
|
-
] as const;
|
|
34
|
-
|
|
35
|
-
const CONTROL_LABELS: Readonly<Record<string, string>> = {
|
|
36
|
-
save: 'Save',
|
|
37
|
-
iterate: 'Iterate',
|
|
38
|
-
approve: 'Approve',
|
|
39
|
-
reject: 'Reject',
|
|
40
|
-
'historical-stage-dropdown': 'Historical stage',
|
|
41
|
-
'view-only': 'Read-only',
|
|
42
|
-
'fork-placeholder': 'Fork (coming)',
|
|
43
|
-
'induct-to': 'Induct to',
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
function renderControl(control: string, entry: Entry): RawHtml {
|
|
47
|
-
const label = CONTROL_LABELS[control] ?? control;
|
|
48
|
-
if (control === 'induct-to') {
|
|
49
|
-
const options = STAGE_PICKER_OPTIONS.map(
|
|
50
|
-
(s) => unsafe(html`<option value="${s}">${s}</option>`),
|
|
51
|
-
);
|
|
52
|
-
return unsafe(html`
|
|
53
|
-
<label class="er-entry-control er-entry-control--induct">
|
|
54
|
-
<span class="er-entry-control-label">${label}</span>
|
|
55
|
-
<select name="induct-to" data-entry-uuid="${entry.uuid}">
|
|
56
|
-
${options}
|
|
57
|
-
</select>
|
|
58
|
-
</label>`);
|
|
59
|
-
}
|
|
60
|
-
if (control === 'historical-stage-dropdown') {
|
|
61
|
-
const stages = Object.keys(entry.iterationByStage);
|
|
62
|
-
if (stages.length === 0) {
|
|
63
|
-
return unsafe('');
|
|
64
|
-
}
|
|
65
|
-
const options = stages.map(
|
|
66
|
-
(s) => unsafe(html`<option value="${s}">${s}</option>`),
|
|
67
|
-
);
|
|
68
|
-
return unsafe(html`
|
|
69
|
-
<label class="er-entry-control er-entry-control--history">
|
|
70
|
-
<span class="er-entry-control-label">${label}</span>
|
|
71
|
-
<select name="history-stage" data-entry-uuid="${entry.uuid}">
|
|
72
|
-
${options}
|
|
73
|
-
</select>
|
|
74
|
-
</label>`);
|
|
75
|
-
}
|
|
76
|
-
if (control === 'view-only') {
|
|
77
|
-
return unsafe(html`<span class="er-entry-control er-entry-control--readonly">${label}</span>`);
|
|
78
|
-
}
|
|
79
|
-
if (control === 'fork-placeholder') {
|
|
80
|
-
return unsafe(
|
|
81
|
-
html`<button class="er-entry-control er-entry-control--button" type="button" disabled data-control="fork">${label}</button>`,
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
return unsafe(
|
|
85
|
-
html`<button class="er-entry-control er-entry-control--button" type="button" data-control="${control}" data-entry-uuid="${entry.uuid}">${label}</button>`,
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function renderControls(entry: Entry, affordances: Affordances): RawHtml {
|
|
90
|
-
const buttons = affordances.controls.map((c) => renderControl(c, entry));
|
|
91
|
-
const className = affordances.mutable
|
|
92
|
-
? 'er-entry-controls er-entry-controls--mutable'
|
|
93
|
-
: 'er-entry-controls er-entry-controls--readonly';
|
|
94
|
-
return unsafe(html`<nav class="${className}" aria-label="Entry controls">${buttons}</nav>`);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function renderArtifact(body: string, mutable: boolean): RawHtml {
|
|
98
|
-
if (mutable) {
|
|
99
|
-
return unsafe(html`
|
|
100
|
-
<textarea class="er-entry-body" name="body" rows="24" data-mutable="true">${body}</textarea>`);
|
|
101
|
-
}
|
|
102
|
-
return unsafe(html`
|
|
103
|
-
<pre class="er-entry-body er-entry-body--readonly" data-mutable="false">${body}</pre>`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function renderEntryReview(
|
|
107
|
-
entry: Entry,
|
|
108
|
-
artifactBody: string,
|
|
109
|
-
artifactPath: string,
|
|
110
|
-
affordances: Affordances,
|
|
111
|
-
): string {
|
|
112
|
-
const stageBadge = unsafe(
|
|
113
|
-
html`<span class="er-entry-stage" data-stage="${entry.currentStage}">${entry.currentStage}</span>`,
|
|
114
|
-
);
|
|
115
|
-
const priorBadge = entry.priorStage
|
|
116
|
-
? unsafe(html`<span class="er-entry-prior-stage">paused from ${entry.priorStage}</span>`)
|
|
117
|
-
: '';
|
|
118
|
-
const body = html`
|
|
119
|
-
<main class="er-entry-shell" data-entry-uuid="${entry.uuid}">
|
|
120
|
-
<header class="er-entry-head">
|
|
121
|
-
<p class="er-entry-kicker">Editorial Review · entry</p>
|
|
122
|
-
<h1 class="er-entry-title">${entry.title}</h1>
|
|
123
|
-
<p class="er-entry-meta">
|
|
124
|
-
${stageBadge}
|
|
125
|
-
${priorBadge}
|
|
126
|
-
<code class="er-entry-uuid">${entry.uuid}</code>
|
|
127
|
-
</p>
|
|
128
|
-
<p class="er-entry-artifact-path"><code>${artifactPath}</code></p>
|
|
129
|
-
</header>
|
|
130
|
-
${renderControls(entry, affordances)}
|
|
131
|
-
<section class="er-entry-artifact">
|
|
132
|
-
${renderArtifact(artifactBody, affordances.mutable)}
|
|
133
|
-
</section>
|
|
134
|
-
</main>`;
|
|
135
|
-
return layout({
|
|
136
|
-
title: `${entry.title} — entry review — dev`,
|
|
137
|
-
cssHrefs: ['/static/css/editorial-review.css', '/static/css/entry-review.css'],
|
|
138
|
-
bodyAttrs: 'data-review-ui="entry-review"',
|
|
139
|
-
bodyHtml: body,
|
|
140
|
-
scriptModules: ['entry-review-client'],
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function renderNotFound(entryId: string, reason: string): string {
|
|
145
|
-
const body = html`
|
|
146
|
-
<main class="er-entry-shell er-entry-shell--missing">
|
|
147
|
-
<h1>Entry not found</h1>
|
|
148
|
-
<p>No sidecar matched <code>${entryId}</code>.</p>
|
|
149
|
-
<p class="er-entry-detail">${reason}</p>
|
|
150
|
-
<p><a href="/dev/editorial-studio">Back to the studio</a></p>
|
|
151
|
-
</main>`;
|
|
152
|
-
return layout({
|
|
153
|
-
title: 'Entry not found — dev',
|
|
154
|
-
cssHrefs: ['/static/css/editorial-review.css', '/static/css/entry-review.css'],
|
|
155
|
-
bodyAttrs: 'data-review-ui="entry-review-missing"',
|
|
156
|
-
bodyHtml: body,
|
|
157
|
-
scriptModules: [],
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
interface EntryReviewResult {
|
|
162
|
-
status: 200 | 404;
|
|
163
|
-
html: string;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
export async function renderEntryReviewPage(
|
|
167
|
-
projectRoot: string,
|
|
168
|
-
entryId: string,
|
|
169
|
-
): Promise<EntryReviewResult> {
|
|
170
|
-
let resolved;
|
|
171
|
-
try {
|
|
172
|
-
resolved = await resolveEntry(projectRoot, entryId);
|
|
173
|
-
} catch (err) {
|
|
174
|
-
const reason = err instanceof Error ? err.message : String(err);
|
|
175
|
-
return { status: 404, html: renderNotFound(entryId, reason) };
|
|
176
|
-
}
|
|
177
|
-
const affordances = getAffordances(resolved.entry);
|
|
178
|
-
const html = renderEntryReview(
|
|
179
|
-
resolved.entry,
|
|
180
|
-
resolved.artifactBody,
|
|
181
|
-
resolved.artifactPath,
|
|
182
|
-
affordances,
|
|
183
|
-
);
|
|
184
|
-
return { status: 200, html };
|
|
185
|
-
}
|
|
10
|
+
export {
|
|
11
|
+
renderEntryReviewPage,
|
|
12
|
+
type EntryReviewQuery,
|
|
13
|
+
type EntryReviewResult,
|
|
14
|
+
type EntryReviewIndexGetter,
|
|
15
|
+
} from './entry-review/index.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqDtD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,KAAK,EAAE,GACxB,KAAK,GAAG,IAAI,CAOd;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqDtD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,KAAK,EAAE,GACxB,KAAK,GAAG,IAAI,CAOd;AAkKD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3E"}
|
package/dist/pages/index.js
CHANGED
|
@@ -56,14 +56,10 @@ async function buildSections(ctx) {
|
|
|
56
56
|
}
|
|
57
57
|
})();
|
|
58
58
|
const longformDefaultEntry = pickDefaultLongformEntry(entries);
|
|
59
|
-
// Issue #107
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
// hint stays alongside the link so adopters still see the URL
|
|
64
|
-
// shape — `<slug>` placeholder shown in red-pencil italic. The
|
|
65
|
-
// link target is the entry-uuid keyed review route added in
|
|
66
|
-
// Task 35 (`/dev/editorial-review/entry/<uuid>`).
|
|
59
|
+
// Issue #107: III links to the most-recent in-review (or iterating)
|
|
60
|
+
// longform entry when one exists, else falls back to the dashboard's
|
|
61
|
+
// Review section anchor (`#stage-review`). The link target is the
|
|
62
|
+
// entry-keyed review route `/dev/editorial-review/entry/<uuid>`.
|
|
67
63
|
const longformLinkHref = longformDefaultEntry !== null
|
|
68
64
|
? `/dev/editorial-review/entry/${longformDefaultEntry.uuid}`
|
|
69
65
|
: '/dev/editorial-studio#stage-review';
|
|
@@ -98,9 +94,9 @@ async function buildSections(ctx) {
|
|
|
98
94
|
numeral: 'III',
|
|
99
95
|
titleHtml: 'Longform reviews',
|
|
100
96
|
titleText: 'Longform reviews',
|
|
101
|
-
route: '/dev/editorial-review/<
|
|
97
|
+
route: '/dev/editorial-review/entry/<uuid>',
|
|
102
98
|
linkHref: longformLinkHref,
|
|
103
|
-
template: { prefix: '/dev/editorial-review/', placeholder: '<
|
|
99
|
+
template: { prefix: '/dev/editorial-review/entry/', placeholder: '<uuid>' },
|
|
104
100
|
desc: 'Per-entry margin notes, decisions, iterate flow.',
|
|
105
101
|
hint: 'entry-by-entry',
|
|
106
102
|
postHint: longformDefaultEntry !== null
|
package/dist/pages/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAgB,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,iFAAiF;AACjF,MAAM,wBAAwB,GAAuC,IAAI,GAAG,CAAC;IAC3E,OAAO;IACP,SAAS;IACT,WAAW;IACX,UAAU;IACV,OAAO;CACR,CAAC,CAAC;AAyCH;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAyB;IAEzB,MAAM,UAAU,GAAG,OAAO;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;SAC3D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC;SAC7E,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAkB;IAC7C,MAAM,OAAO,GAAqB,MAAM,CAAC,KAAK,IAAI,EAAE;QAClD,IAAI,CAAC;YACH,OAAO,MAAM,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"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"}
|
package/dist/pages/index.ts
CHANGED
|
@@ -102,14 +102,10 @@ async function buildSections(ctx: StudioContext): Promise<readonly IndexSection[
|
|
|
102
102
|
}
|
|
103
103
|
})();
|
|
104
104
|
const longformDefaultEntry = pickDefaultLongformEntry(entries);
|
|
105
|
-
// Issue #107
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
//
|
|
109
|
-
// hint stays alongside the link so adopters still see the URL
|
|
110
|
-
// shape — `<slug>` placeholder shown in red-pencil italic. The
|
|
111
|
-
// link target is the entry-uuid keyed review route added in
|
|
112
|
-
// Task 35 (`/dev/editorial-review/entry/<uuid>`).
|
|
105
|
+
// Issue #107: III links to the most-recent in-review (or iterating)
|
|
106
|
+
// longform entry when one exists, else falls back to the dashboard's
|
|
107
|
+
// Review section anchor (`#stage-review`). The link target is the
|
|
108
|
+
// entry-keyed review route `/dev/editorial-review/entry/<uuid>`.
|
|
113
109
|
const longformLinkHref =
|
|
114
110
|
longformDefaultEntry !== null
|
|
115
111
|
? `/dev/editorial-review/entry/${longformDefaultEntry.uuid}`
|
|
@@ -146,9 +142,9 @@ async function buildSections(ctx: StudioContext): Promise<readonly IndexSection[
|
|
|
146
142
|
numeral: 'III',
|
|
147
143
|
titleHtml: 'Longform reviews',
|
|
148
144
|
titleText: 'Longform reviews',
|
|
149
|
-
route: '/dev/editorial-review/<
|
|
145
|
+
route: '/dev/editorial-review/entry/<uuid>',
|
|
150
146
|
linkHref: longformLinkHref,
|
|
151
|
-
template: { prefix: '/dev/editorial-review/', placeholder: '<
|
|
147
|
+
template: { prefix: '/dev/editorial-review/entry/', placeholder: '<uuid>' },
|
|
152
148
|
desc: 'Per-entry margin notes, decisions, iterate flow.',
|
|
153
149
|
hint: 'entry-by-entry',
|
|
154
150
|
postHint:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrapbook.d.ts","sourceRoot":"","sources":["../../src/pages/scrapbook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"scrapbook.d.ts","sourceRoot":"","sources":["../../src/pages/scrapbook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAskBtD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAuDR"}
|