@anthusai/papyrus 1.4.0-next.3 → 1.4.0-next.5
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/amplify/data/resource.js +3 -3
- package/amplify/data/resource.ts +3 -3
- package/amplify/functions/category-action/handler.ts +18 -18
- package/amplify/functions/console-chat-responder/src/main.rs +1 -1
- package/amplify/functions/content-actions/handler.py +23 -0
- package/amplify/functions/shared/slack-events.ts +2 -2
- package/app/api/local-preview/derive/route.ts +28 -0
- package/app/api/local-preview/media/route.ts +25 -0
- package/app/globals.css +28 -28
- package/app/layout.tsx +8 -5
- package/app/newsroom/[section]/[...selection]/page.tsx +0 -1
- package/app/newsroom/[section]/page.tsx +0 -1
- package/app/newsroom/insights/[threadId]/page.tsx +5 -16
- package/app/newsroom/insights/page.tsx +4 -12
- package/components/board-card-excerpts.tsx +45 -0
- package/components/markus-ir-preview.tsx +47 -2
- package/components/news-desk-page.tsx +0 -1
- package/components/news-desk-taxonomy-client.ts +28 -222
- package/components/newsroom-article-editor.tsx +138 -40
- package/components/newsroom-assignment-detail.tsx +79 -0
- package/components/newsroom-board-view.tsx +44 -9
- package/components/newsroom-newsprint-board.css +10 -2
- package/components/newsroom-ops-overview.tsx +27 -5
- package/components/newsroom-organizer-shell.tsx +21 -6
- package/components/newsroom-organizer.css +208 -6
- package/components/newsroom-topics-view.tsx +1 -1
- package/components/priming-proof-page.tsx +17 -8
- package/components/story-reporting-trail-client.ts +91 -0
- package/components/story-reporting-trail.tsx +115 -0
- package/components/topic-steering-workspace.tsx +154 -671
- package/components/ui/sheet.tsx +10 -4
- package/components/wiki-concepts-view.tsx +153 -0
- package/components/wiki-index-client.ts +51 -0
- package/lib/approved-priming-proof-reports.ts +6 -3
- package/lib/approved-priming-proofs/papyrus.json +90 -0
- package/lib/content-actions-client.ts +3 -0
- package/lib/content-actions-demo.ts +55 -0
- package/lib/content-item-lifecycle.ts +4 -2
- package/lib/front-matter-fields.ts +42 -0
- package/lib/front-mosaic.ts +2 -1
- package/lib/layout-plan.ts +3 -2
- package/lib/layout-warnings.ts +8 -0
- package/lib/local-preview-seed.ts +53 -0
- package/lib/newsroom-articles.ts +2 -0
- package/lib/newsroom-assignments.ts +13 -0
- package/lib/newsroom-board.ts +4 -0
- package/lib/newsroom-forum-routes.ts +2 -43
- package/lib/newsroom-index-filters.ts +3 -40
- package/lib/newsroom-media-backend.ts +5 -0
- package/lib/newsroom-nav.ts +1 -3
- package/lib/newsroom-organizer-nav.ts +5 -12
- package/lib/newsroom-section-routing.ts +1 -1
- package/lib/newsroom-sections.ts +12 -0
- package/lib/papyrus-web-locations.ts +3 -24
- package/lib/priming-proof-report.ts +1 -0
- package/lib/semantic-graph.ts +5 -5
- package/lib/site-brand.ts +9 -0
- package/lib/story-reporting-trail.ts +106 -0
- package/lib/wiki.ts +56 -0
- package/package.json +13 -1
- package/routes.manifest.json +23 -7
package/lib/wiki.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { SemanticNodeRecord } from "./category-repository";
|
|
2
|
+
|
|
3
|
+
/** The wiki's front page is an ordinary content item with this slug; its Markus body holds the dynamic components. */
|
|
4
|
+
export const WIKI_INDEX_SLUG = "wiki-index";
|
|
5
|
+
export const WIKI_PAGE_ITEM_TYPE = "wiki_page";
|
|
6
|
+
export const WIKI_CONCEPT_LINK_SCHEME = "concept:";
|
|
7
|
+
|
|
8
|
+
export const DEFAULT_WIKI_INDEX_MARKUS = `# Concept wiki
|
|
9
|
+
|
|
10
|
+
Every page in this wiki is a concept: an entity in the knowledge graph that the newsroom has reported on, researched or cited. Open one to see what it is, what it connects to, and the references behind it.
|
|
11
|
+
|
|
12
|
+
## Recently edited
|
|
13
|
+
|
|
14
|
+
::recent-concepts{limit=10}
|
|
15
|
+
|
|
16
|
+
## Browse all concepts
|
|
17
|
+
|
|
18
|
+
::concept-list
|
|
19
|
+
`;
|
|
20
|
+
|
|
21
|
+
export function conceptEditedAt(node: SemanticNodeRecord): string {
|
|
22
|
+
return node.updatedAt ?? node.versionCreatedAt ?? node.createdAt ?? "";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function conceptTitle(node: SemanticNodeRecord): string {
|
|
26
|
+
return node.displayName?.trim() || node.nodeKey;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function conceptId(node: SemanticNodeRecord): string {
|
|
30
|
+
return node.lineageId ?? node.id;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function recentlyEditedConcepts(nodes: readonly SemanticNodeRecord[], options: { limit?: number; kind?: string | null } = {}): SemanticNodeRecord[] {
|
|
34
|
+
const { limit = 10, kind = null } = options;
|
|
35
|
+
return nodes
|
|
36
|
+
.filter(node => !kind || node.nodeKind === kind)
|
|
37
|
+
.slice()
|
|
38
|
+
.sort((left, right) => conceptEditedAt(right).localeCompare(conceptEditedAt(left)) || conceptTitle(left).localeCompare(conceptTitle(right)))
|
|
39
|
+
.slice(0, limit);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function conceptsByTitle(nodes: readonly SemanticNodeRecord[], options: { kind?: string | null; limit?: number | null } = {}): SemanticNodeRecord[] {
|
|
43
|
+
const filtered = nodes.filter(node => !options.kind || node.nodeKind === options.kind).slice().sort((left, right) => conceptTitle(left).localeCompare(conceptTitle(right)));
|
|
44
|
+
return options.limit ? filtered.slice(0, options.limit) : filtered;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Finds the concept a `concept:<key>` wiki link names, by lineage id, node key or title. */
|
|
48
|
+
export function resolveConceptLink(href: string, nodes: readonly SemanticNodeRecord[]): SemanticNodeRecord | null {
|
|
49
|
+
if (!href.startsWith(WIKI_CONCEPT_LINK_SCHEME)) return null;
|
|
50
|
+
const reference = decodeURIComponent(href.slice(WIKI_CONCEPT_LINK_SCHEME.length)).trim().toLowerCase();
|
|
51
|
+
return nodes.find(node => conceptId(node).toLowerCase() === reference || node.nodeKey.toLowerCase() === reference || conceptTitle(node).toLowerCase() === reference) ?? null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function conceptWikiPath(node: SemanticNodeRecord): string {
|
|
55
|
+
return `/newsroom/concepts/${encodeURIComponent(conceptId(node))}`;
|
|
56
|
+
}
|
package/package.json
CHANGED
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"./components/archive-shell": "./components/archive-shell.tsx",
|
|
76
76
|
"./components/article-video": "./components/article-video.tsx",
|
|
77
77
|
"./components/blog-page-background": "./components/blog-page-background.tsx",
|
|
78
|
+
"./components/board-card-excerpts": "./components/board-card-excerpts.tsx",
|
|
78
79
|
"./components/dev-sandbox-editor-sign-in": "./components/dev-sandbox-editor-sign-in.tsx",
|
|
79
80
|
"./components/markus-ir-preview": "./components/markus-ir-preview.tsx",
|
|
80
81
|
"./components/news-desk-client-provider": "./components/news-desk-client-provider.tsx",
|
|
@@ -84,6 +85,7 @@
|
|
|
84
85
|
"./components/newsroom-access-gate": "./components/newsroom-access-gate.tsx",
|
|
85
86
|
"./components/newsroom-article-editor": "./components/newsroom-article-editor.tsx",
|
|
86
87
|
"./components/newsroom-articles-view": "./components/newsroom-articles-view.tsx",
|
|
88
|
+
"./components/newsroom-assignment-detail": "./components/newsroom-assignment-detail.tsx",
|
|
87
89
|
"./components/newsroom-assignments-view": "./components/newsroom-assignments-view.tsx",
|
|
88
90
|
"./components/newsroom-board-view": "./components/newsroom-board-view.tsx",
|
|
89
91
|
"./components/newsroom-client-shell": "./components/newsroom-client-shell.tsx",
|
|
@@ -113,6 +115,8 @@
|
|
|
113
115
|
"./components/settings-page": "./components/settings-page.tsx",
|
|
114
116
|
"./components/signup-entries-panel": "./components/signup-entries-panel.tsx",
|
|
115
117
|
"./components/staging-banner": "./components/staging-banner.tsx",
|
|
118
|
+
"./components/story-reporting-trail-client": "./components/story-reporting-trail-client.ts",
|
|
119
|
+
"./components/story-reporting-trail": "./components/story-reporting-trail.tsx",
|
|
116
120
|
"./components/topic-steering-workspace": "./components/topic-steering-workspace.tsx",
|
|
117
121
|
"./components/ui/badge": "./components/ui/badge.tsx",
|
|
118
122
|
"./components/ui/button-group": "./components/ui/button-group.tsx",
|
|
@@ -138,6 +142,8 @@
|
|
|
138
142
|
"./components/use-paged-content-item-versions": "./components/use-paged-content-item-versions.ts",
|
|
139
143
|
"./components/use-resolved-papyrus-theme": "./components/use-resolved-papyrus-theme.ts",
|
|
140
144
|
"./components/use-rhythm-overlay": "./components/use-rhythm-overlay.ts",
|
|
145
|
+
"./components/wiki-concepts-view": "./components/wiki-concepts-view.tsx",
|
|
146
|
+
"./components/wiki-index-client": "./components/wiki-index-client.ts",
|
|
141
147
|
"./lib/amplify-outputs-guard": "./lib/amplify-outputs-guard.ts",
|
|
142
148
|
"./lib/amplify-outputs-path": "./lib/amplify-outputs-path.ts",
|
|
143
149
|
"./lib/amplify-server-runtime": "./lib/amplify-server-runtime.ts",
|
|
@@ -173,6 +179,7 @@
|
|
|
173
179
|
"./lib/edition-sections": "./lib/edition-sections.ts",
|
|
174
180
|
"./lib/empty-edition-layout-plan": "./lib/empty-edition-layout-plan.ts",
|
|
175
181
|
"./lib/excerpts": "./lib/excerpts.ts",
|
|
182
|
+
"./lib/front-matter-fields": "./lib/front-matter-fields.ts",
|
|
176
183
|
"./lib/front-mosaic": "./lib/front-mosaic.ts",
|
|
177
184
|
"./lib/furniture": "./lib/furniture.ts",
|
|
178
185
|
"./lib/graphql-content-repository": "./lib/graphql-content-repository.ts",
|
|
@@ -182,6 +189,7 @@
|
|
|
182
189
|
"./lib/layout-plan": "./lib/layout-plan.ts",
|
|
183
190
|
"./lib/layout-scenarios": "./lib/layout-scenarios.ts",
|
|
184
191
|
"./lib/layout-types": "./lib/layout-types.ts",
|
|
192
|
+
"./lib/layout-warnings": "./lib/layout-warnings.ts",
|
|
185
193
|
"./lib/local-preview-seed": "./lib/local-preview-seed.ts",
|
|
186
194
|
"./lib/local-preview": "./lib/local-preview.ts",
|
|
187
195
|
"./lib/markus-body": "./lib/markus-body.ts",
|
|
@@ -257,6 +265,7 @@
|
|
|
257
265
|
"./lib/staging-gate": "./lib/staging-gate.ts",
|
|
258
266
|
"./lib/staging-gated-path": "./lib/staging-gated-path.ts",
|
|
259
267
|
"./lib/staging-preview-object": "./lib/staging-preview-object.ts",
|
|
268
|
+
"./lib/story-reporting-trail": "./lib/story-reporting-trail.ts",
|
|
260
269
|
"./lib/test-editor-override": "./lib/test-editor-override.ts",
|
|
261
270
|
"./lib/text-columns": "./lib/text-columns.ts",
|
|
262
271
|
"./lib/themed-image": "./lib/themed-image.ts",
|
|
@@ -264,6 +273,7 @@
|
|
|
264
273
|
"./lib/video-loading": "./lib/video-loading.ts",
|
|
265
274
|
"./lib/video-mode": "./lib/video-mode.ts",
|
|
266
275
|
"./lib/video-script": "./lib/video-script.ts",
|
|
276
|
+
"./lib/wiki": "./lib/wiki.ts",
|
|
267
277
|
"./renderers/markus/index": "./renderers/markus/index.ts",
|
|
268
278
|
"./renderers/markus/stubs": "./renderers/markus/stubs.tsx",
|
|
269
279
|
"./renderers/pretext/article-page": "./renderers/pretext/article-page.tsx",
|
|
@@ -286,6 +296,8 @@
|
|
|
286
296
|
"./app/api/auth/prospectus/sign-in/route": "./app/api/auth/prospectus/sign-in/route.ts",
|
|
287
297
|
"./app/api/auth/prospectus/sign-out/route": "./app/api/auth/prospectus/sign-out/route.ts",
|
|
288
298
|
"./app/api/cyclotron/priming-proof/route": "./app/api/cyclotron/priming-proof/route.ts",
|
|
299
|
+
"./app/api/local-preview/derive/route": "./app/api/local-preview/derive/route.ts",
|
|
300
|
+
"./app/api/local-preview/media/route": "./app/api/local-preview/media/route.ts",
|
|
289
301
|
"./app/api/media/[...path]/route": "./app/api/media/[...path]/route.ts",
|
|
290
302
|
"./app/api/revalidate/route": "./app/api/revalidate/route.ts",
|
|
291
303
|
"./app/archive/page": "./app/archive/page.tsx",
|
|
@@ -352,7 +364,7 @@
|
|
|
352
364
|
"optional": true
|
|
353
365
|
}
|
|
354
366
|
},
|
|
355
|
-
"version": "1.4.0-next.
|
|
367
|
+
"version": "1.4.0-next.5",
|
|
356
368
|
"dependencies": {
|
|
357
369
|
"@aws-amplify/adapter-nextjs": "^1.7.3",
|
|
358
370
|
"@aws-crypto/sha256-js": "5.2.0",
|
package/routes.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.4.0-next.
|
|
2
|
+
"version": "1.4.0-next.5",
|
|
3
3
|
"routes": [
|
|
4
4
|
{
|
|
5
5
|
"file": "app/%5F_preview/[[...path]]/route.ts",
|
|
@@ -129,6 +129,26 @@
|
|
|
129
129
|
],
|
|
130
130
|
"config": {}
|
|
131
131
|
},
|
|
132
|
+
{
|
|
133
|
+
"file": "app/api/local-preview/derive/route.ts",
|
|
134
|
+
"hasDefault": false,
|
|
135
|
+
"exports": [
|
|
136
|
+
"POST"
|
|
137
|
+
],
|
|
138
|
+
"config": {
|
|
139
|
+
"dynamic": "\"force-dynamic\""
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"file": "app/api/local-preview/media/route.ts",
|
|
144
|
+
"hasDefault": false,
|
|
145
|
+
"exports": [
|
|
146
|
+
"GET"
|
|
147
|
+
],
|
|
148
|
+
"config": {
|
|
149
|
+
"dynamic": "\"force-dynamic\""
|
|
150
|
+
}
|
|
151
|
+
},
|
|
132
152
|
{
|
|
133
153
|
"file": "app/api/media/[...path]/route.ts",
|
|
134
154
|
"hasDefault": false,
|
|
@@ -230,17 +250,13 @@
|
|
|
230
250
|
"file": "app/newsroom/insights/[threadId]/page.tsx",
|
|
231
251
|
"hasDefault": true,
|
|
232
252
|
"exports": [],
|
|
233
|
-
"config": {
|
|
234
|
-
"dynamic": "\"force-dynamic\""
|
|
235
|
-
}
|
|
253
|
+
"config": {}
|
|
236
254
|
},
|
|
237
255
|
{
|
|
238
256
|
"file": "app/newsroom/insights/page.tsx",
|
|
239
257
|
"hasDefault": true,
|
|
240
258
|
"exports": [],
|
|
241
|
-
"config": {
|
|
242
|
-
"dynamic": "\"force-dynamic\""
|
|
243
|
-
}
|
|
259
|
+
"config": {}
|
|
244
260
|
},
|
|
245
261
|
{
|
|
246
262
|
"file": "app/newsroom/layout.tsx",
|