From 86f8fc053071eb086be6f020d86532126644462c Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Fri, 19 Jun 2026 15:31:44 +0200 Subject: [PATCH] feat: citation panel shows cited line range --- .../citation-panel/citation-panel.tsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/surfsense_web/components/citation-panel/citation-panel.tsx b/surfsense_web/components/citation-panel/citation-panel.tsx index 890ac11ac..9b9a9aaa9 100644 --- a/surfsense_web/components/citation-panel/citation-panel.tsx +++ b/surfsense_web/components/citation-panel/citation-panel.tsx @@ -46,6 +46,13 @@ export const CitationPanelContent: FC = ({ const cited = useMemo(() => data?.chunks.find((c) => c.id === chunkId) ?? null, [data, chunkId]); + const citedLineLabel = useMemo(() => { + const start = data?.cited_start_line; + const end = data?.cited_end_line; + if (start == null || end == null) return null; + return start === end ? `Line ${start}` : `Lines ${start}–${end}`; + }, [data?.cited_start_line, data?.cited_end_line]); + const totalChunks = data?.total_chunks ?? data?.chunks.length ?? 0; const startIndex = data?.chunk_start_index ?? 0; const hasMoreAbove = startIndex > 0; @@ -75,10 +82,15 @@ export const CitationPanelContent: FC = ({ const handleOpenFullDocument = () => { if (!data) return; + const hasLineAnchor = data.cited_start_line != null && data.cited_end_line != null; openEditorPanel({ documentId: data.id, searchSpaceId: data.search_space_id, title: data.title, + highlightLines: hasLineAnchor + ? { start: data.cited_start_line as number, end: data.cited_end_line as number } + : null, + forceSourceView: hasLineAnchor, }); }; @@ -110,6 +122,7 @@ export const CitationPanelContent: FC = ({

+ {citedLineLabel && {citedLineLabel}} {totalChunks > 0 && {totalChunks} chunks} {!isLoading && !error && data && (