wiki-viewer 1.13.2 → 1.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.
Files changed (148) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/routes-manifest.json +6 -0
  5. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  15. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  16. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  18. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/api/agent/activity/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/agent/events/[...path]/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/agent/files/[...path]/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/agent/fs/file/[...path]/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/agent/fs/ls/[[...path]]/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/agent/fs/move/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/agent/fs/search/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/agent/internal/span/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/agent/settings/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/agent/sidecar/[...path]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/app-proxy/[...path]/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/app-proxy/[...path]/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/assets/[...path]/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/share/[token]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/share/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/system/browse/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/system/reveal/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/system/set-root/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/open/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/refresh/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/system/workspaces/[id]/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/system/workspaces/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/upload/[...path]/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/wiki/app/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/wiki/backlinks/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/wiki/content/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/wiki/download/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/wiki/file/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/wiki/folder/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/wiki/git-branches/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/wiki/git-checkout/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/wiki/git-diff/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/wiki/git-file-info/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/wiki/git-history/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/wiki/git-pull/route.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/api/wiki/move/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/api/wiki/new-file/route.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/api/wiki/outlinks/route/app-paths-manifest.json +3 -0
  59. package/.next/standalone/.next/server/app/api/wiki/outlinks/route/build-manifest.json +9 -0
  60. package/.next/standalone/.next/server/app/api/wiki/outlinks/route/server-reference-manifest.json +4 -0
  61. package/.next/standalone/.next/server/app/api/wiki/outlinks/route.js +16 -0
  62. package/.next/standalone/.next/server/app/api/wiki/outlinks/route.js.map +5 -0
  63. package/.next/standalone/.next/server/app/api/wiki/outlinks/route.js.nft.json +1 -0
  64. package/.next/standalone/.next/server/app/api/wiki/outlinks/route_client-reference-manifest.js +3 -0
  65. package/.next/standalone/.next/server/app/api/wiki/page/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/wiki/presence/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/wiki/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/wiki/search/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/wiki/slugs/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/wiki/upload/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/wiki/watch/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/index.html +1 -1
  73. package/.next/standalone/.next/server/app/index.rsc +3 -3
  74. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  75. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  76. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  77. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  78. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  79. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/s/[token]/page.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/signin/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  85. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01h996g._.js +3 -0
  86. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0oruwos._.js → [root-of-the-server]__0stkifk._.js} +2 -2
  87. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_wiki_outlinks_route_actions_0v-5x5r.js +3 -0
  88. package/.next/standalone/.next/server/chunks/ssr/{0~w0_katex_dist_katex_mjs_0100dfi._.js → 0~w0_katex_dist_katex_mjs_029cdbg._.js} +1 -1
  89. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0~9qfcs._.js → [root-of-the-server]__0z41nrr._.js} +2 -2
  90. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0osa2xb._.js → [root-of-the-server]__10m6c40._.js} +1 -1
  91. package/.next/standalone/.next/server/chunks/ssr/_0yevh-d._.js +2 -2
  92. package/.next/standalone/.next/server/chunks/ssr/_0~a9dyk._.js +3 -3
  93. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_01df~jf._.js → node_modules__pnpm_0-_58b8._.js} +1 -1
  94. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0u0.e4r._.js → node_modules__pnpm_0026mgr._.js} +1 -1
  95. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0uo7x8s._.js → node_modules__pnpm_02bje_g._.js} +1 -1
  96. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0z~fyt8._.js → node_modules__pnpm_04v1_ty._.js} +2 -2
  97. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_04l9bx6._.js → node_modules__pnpm_0607~kg._.js} +2 -2
  98. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0lf1dtw._.js → node_modules__pnpm_08edl1n._.js} +1 -1
  99. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0i8hw7q._.js → node_modules__pnpm_08xpp3w._.js} +1 -1
  100. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0nt8do2._.js → node_modules__pnpm_09o_spj._.js} +1 -1
  101. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0a2d3t0._.js → node_modules__pnpm_0aha1~u._.js} +1 -1
  102. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0zgqorw._.js → node_modules__pnpm_0ajqqlq._.js} +1 -1
  103. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0pu-2sk._.js → node_modules__pnpm_0b8odbc._.js} +1 -1
  104. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0hrj.2x._.js → node_modules__pnpm_0e0r_qk._.js} +2 -2
  105. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0a71te0._.js → node_modules__pnpm_0f_n_zp._.js} +1 -1
  106. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0mg7y.1._.js → node_modules__pnpm_0gos._c._.js} +1 -1
  107. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_02_h794._.js → node_modules__pnpm_0hzzx9d._.js} +1 -1
  108. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0m-sqwd._.js → node_modules__pnpm_0i2m0b.._.js} +2 -2
  109. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0k.5pst._.js → node_modules__pnpm_0i6_kfe._.js} +2 -2
  110. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0suw78t._.js → node_modules__pnpm_0k-7uzm._.js} +1 -1
  111. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0mmji-1._.js → node_modules__pnpm_0ru1i2-._.js} +2 -2
  112. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0_4caj_._.js → node_modules__pnpm_0t4l89_._.js} +1 -1
  113. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0wqzfz7._.js → node_modules__pnpm_0w.kwue._.js} +1 -1
  114. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0gqcxiq._.js → node_modules__pnpm_0xk042~._.js} +1 -1
  115. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0ca5pep._.js → node_modules__pnpm_0xr.ztu._.js} +1 -1
  116. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0w_zv~3._.js → node_modules__pnpm_0y2h_cz._.js} +1 -1
  117. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0o.ke1-._.js → node_modules__pnpm_0~i3a.i._.js} +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_109~spe._.js → node_modules__pnpm_11ede0p._.js} +2 -2
  119. package/.next/standalone/.next/server/chunks/ssr/{node_modules__pnpm_0mn3jk_._.js → node_modules__pnpm_13p348f._.js} +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/src_app_page_tsx_0ss2.w7._.js +2 -2
  121. package/.next/standalone/.next/server/functions-config-manifest.json +1 -0
  122. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  123. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  124. package/.next/standalone/.next/server/pages/404.html +1 -1
  125. package/.next/standalone/.next/server/pages/500.html +1 -1
  126. package/.next/standalone/.next/static/chunks/02kg.lbkfi1yc.css +5 -0
  127. package/.next/standalone/.next/static/chunks/{0._793qr3oswh.js → 0ey6h_rkpuzxs.js} +8 -8
  128. package/.next/standalone/.next/static/chunks/{08bdsfl84~3l..js → 0jt1z17mjmjde.js} +7 -7
  129. package/.next/standalone/.next/static/chunks/{0wnjskl5t63nx.js → 0rcwd6-.iu~nd.js} +3 -3
  130. package/.next/standalone/.pi/ownership.json +3 -0
  131. package/.next/standalone/TODO.md +16 -0
  132. package/.next/standalone/package.json +2 -1
  133. package/.next/standalone/src/app/api/wiki/outlinks/route.ts +76 -0
  134. package/.next/standalone/src/app/globals.css +13 -15
  135. package/.next/standalone/src/components/ai-panel/activity-row.tsx +268 -53
  136. package/.next/standalone/src/components/ai-panel/ai-panel.tsx +3 -9
  137. package/.next/standalone/src/components/editor/backlinks-panel.tsx +47 -17
  138. package/.next/standalone/src/components/editor/bubble-menu.tsx +22 -1
  139. package/.next/standalone/src/components/editor/comment-thread.tsx +3 -2
  140. package/.next/standalone/src/components/editor/editor.tsx +9 -1
  141. package/.next/standalone/src/components/editor/suggestion-card.tsx +4 -0
  142. package/.next/standalone/src/components/editor/view-mode-comment-button.tsx +77 -0
  143. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  144. package/package.json +2 -1
  145. package/.next/standalone/.next/static/chunks/0v9z3r.aiug_u.css +0 -5
  146. /package/.next/standalone/.next/static/{Fe9EDoNlINdV6yroHKsnE → WMOTgfV82apmdovxzgbMx}/_buildManifest.js +0 -0
  147. /package/.next/standalone/.next/static/{Fe9EDoNlINdV6yroHKsnE → WMOTgfV82apmdovxzgbMx}/_clientMiddlewareManifest.js +0 -0
  148. /package/.next/standalone/.next/static/{Fe9EDoNlINdV6yroHKsnE → WMOTgfV82apmdovxzgbMx}/_ssgManifest.js +0 -0
@@ -58,9 +58,10 @@ interface Props {
58
58
  comments: Comment[];
59
59
  anchorEl: HTMLElement | null;
60
60
  onClose: () => void;
61
+ readOnly?: boolean;
61
62
  }
62
63
 
63
- export function CommentThread({ path, blockRef, comments, anchorEl, onClose }: Props) {
64
+ export function CommentThread({ path, blockRef, comments, anchorEl, onClose, readOnly }: Props) {
64
65
  const [anchor, setAnchor] = useState<{ top: number; left: number } | null>(null);
65
66
  const [text, setText] = useState("");
66
67
  const [busy, setBusy] = useState(false);
@@ -187,7 +188,7 @@ export function CommentThread({ path, blockRef, comments, anchorEl, onClose }: P
187
188
  <span className="text-[11px] font-mono text-muted-foreground/60 truncate">
188
189
  {blockRef}
189
190
  </span>
190
- {activeComment && (
191
+ {activeComment && !readOnly && (
191
192
  <button
192
193
  type="button"
193
194
  disabled={busy}
@@ -41,6 +41,7 @@ import {
41
41
  } from "./wiki-link-create-dialog";
42
42
  import { WikiLinkPicker } from "./wiki-link-picker";
43
43
  import { FrontmatterHeader } from "@/components/wiki/frontmatter-header";
44
+ import { ViewModeCommentButton } from "./view-mode-comment-button";
44
45
 
45
46
  async function uploadFile(
46
47
  pagePath: string,
@@ -1121,6 +1122,7 @@ export function KBEditor({ mode }: KBEditorProps = {}) {
1121
1122
  void useProofStore.getState().loadSidecar(currentPath);
1122
1123
  void useProofStore.getState().loadSnapshot(currentPath);
1123
1124
  }}
1125
+ readOnly={isViewing}
1124
1126
  />
1125
1127
  </div>
1126
1128
  );
@@ -1135,6 +1137,7 @@ export function KBEditor({ mode }: KBEditorProps = {}) {
1135
1137
  comments={commentsByRef[threadTarget.blockRef] ?? []}
1136
1138
  anchorEl={threadTarget.el}
1137
1139
  onClose={() => setThreadTarget(null)}
1140
+ readOnly={isViewing}
1138
1141
  />
1139
1142
  )}
1140
1143
 
@@ -1202,7 +1205,12 @@ export function KBEditor({ mode }: KBEditorProps = {}) {
1202
1205
  />
1203
1206
  </>
1204
1207
  )}
1205
-
1208
+ {isViewing && (
1209
+ <ViewModeCommentButton
1210
+ containerRef={scrollContainerRef}
1211
+ onComment={openCommentForSelection}
1212
+ />
1213
+ )}
1206
1214
  {/* AI Edit Prompt + slash hint */}
1207
1215
  <div className="max-w-[var(--editor-max-w,48rem)] ml-[var(--editor-ml,auto)] mr-auto px-8 pb-8 flex items-center gap-4">
1208
1216
  <button
@@ -16,6 +16,7 @@ interface Props {
16
16
  left: number;
17
17
  width: number;
18
18
  onSettled: () => void; // called after accept or reject so parent can refresh
19
+ readOnly?: boolean;
19
20
  }
20
21
 
21
22
  function kindVerb(kind: Suggestion["kind"]): string {
@@ -68,6 +69,7 @@ export function SuggestionCard({
68
69
  left,
69
70
  width,
70
71
  onSettled,
72
+ readOnly,
71
73
  }: Props) {
72
74
  const [busy, setBusy] = useState(false);
73
75
 
@@ -179,6 +181,7 @@ export function SuggestionCard({
179
181
  </div>
180
182
 
181
183
  {/* Actions */}
184
+ {!readOnly && (
182
185
  <div className="flex items-center gap-2 px-3 py-2 border-t border-border bg-muted/30">
183
186
  <button
184
187
  type="button"
@@ -197,6 +200,7 @@ export function SuggestionCard({
197
200
  Reject
198
201
  </button>
199
202
  </div>
203
+ )}
200
204
  </div>
201
205
  );
202
206
  }
@@ -0,0 +1,77 @@
1
+ "use client";
2
+
3
+ import { MessageCircle } from "lucide-react";
4
+ import { type RefObject, useEffect, useState } from "react";
5
+
6
+ interface Props {
7
+ /** The scrollable container that wraps the editor content. */
8
+ containerRef: RefObject<HTMLElement | null>;
9
+ onComment: () => void;
10
+ }
11
+
12
+ /**
13
+ * Floating comment button for read-only view mode.
14
+ *
15
+ * TipTap's BubbleMenu doesn't fire when the editor is non-editable, so this
16
+ * component listens to the native selectionchange event and positions a small
17
+ * button above whatever the user has selected — as long as the selection is
18
+ * inside the editor container.
19
+ */
20
+ export function ViewModeCommentButton({ containerRef, onComment }: Props) {
21
+ const [pos, setPos] = useState<{ top: number; left: number } | null>(null);
22
+
23
+ useEffect(() => {
24
+ function update() {
25
+ const sel = window.getSelection();
26
+ if (!sel || sel.isCollapsed || sel.rangeCount === 0) {
27
+ setPos(null);
28
+ return;
29
+ }
30
+ const range = sel.getRangeAt(0);
31
+ const container = containerRef.current;
32
+ if (!container || !container.contains(range.commonAncestorContainer)) {
33
+ setPos(null);
34
+ return;
35
+ }
36
+ const rect = range.getBoundingClientRect();
37
+ // rect can be all-zeros for collapsed or invisible ranges
38
+ if (rect.width === 0 && rect.height === 0) {
39
+ setPos(null);
40
+ return;
41
+ }
42
+ setPos({
43
+ top: rect.top - 38,
44
+ left: rect.left + rect.width / 2,
45
+ });
46
+ }
47
+
48
+ document.addEventListener("selectionchange", update);
49
+ return () => document.removeEventListener("selectionchange", update);
50
+ }, [containerRef]);
51
+
52
+ if (!pos) return null;
53
+
54
+ return (
55
+ <button
56
+ type="button"
57
+ style={{
58
+ position: "fixed",
59
+ top: pos.top,
60
+ left: pos.left,
61
+ transform: "translateX(-50%)",
62
+ zIndex: 50,
63
+ }}
64
+ className="flex items-center gap-1 px-2 py-1 bg-popover border border-border rounded-sm shadow-lg text-[12px] text-foreground/80 hover:text-foreground hover:bg-accent transition-colors"
65
+ onMouseDown={(e) => e.preventDefault()}
66
+ onClick={() => {
67
+ onComment();
68
+ setPos(null);
69
+ }}
70
+ aria-label="Add comment"
71
+ title="Add comment"
72
+ >
73
+ <MessageCircle className="w-3.5 h-3.5" />
74
+ <span>Comment</span>
75
+ </button>
76
+ );
77
+ }