MCPcopy
hub / github.com/anomalyco/opencode / DiffViewer

Function DiffViewer

packages/session-ui/src/components/file.tsx:921–1183  ·  view source on GitHub ↗
(props: DiffFileProps<T>)

Source from the content-addressed store, hash-verified

919// ---------------------------------------------------------------------------
920
921function DiffViewer<T>(props: DiffFileProps<T>) {
922 let instance: FileDiff<T> | undefined
923 let instanceVirtualizer: Virtualizer | undefined
924 let instanceWorkerPool: ReturnType<typeof getWorkerPool>
925 let instanceVirtualHunkSeparators: FileDiffOptions<T>["hunkSeparators"] | undefined
926 let instanceFileDiff: FileDiffMetadata | undefined
927 let instanceBefore: FileContents | undefined
928 let instanceAfter: FileContents | undefined
929 let dragSide: DiffSelectionSide | undefined
930 let dragEndSide: DiffSelectionSide | undefined
931 let viewer!: Viewer
932
933 const [local, others] = splitProps(props, diffKeys)
934
935 const mobile = createMediaQuery("(max-width: 640px)")
936
937 const lineFromMouseEvent = (event: MouseEvent): MouseHit => mouseHit(event, findDiffLineNumber, diffMouseSide)
938
939 const setSelectedLines = (range: SelectedLineRange | null, preserve?: { root: ShadowRoot; text: Range }) => {
940 const active = instance
941 if (!active) return
942
943 const fixed = fixDiffSelection(viewer.getRoot(), range)
944 if (fixed === undefined) {
945 viewer.lastSelection = range
946 return
947 }
948
949 viewer.lastSelection = fixed
950 active.setSelectedLines(fixed)
951 restoreShadowTextSelection(preserve?.root, preserve?.text)
952 }
953
954 const adapter: ModeAdapter = {
955 lineFromMouseEvent,
956 setSelectedLines,
957 updateSelection: (preserveTextSelection) => {
958 const root = viewer.getRoot()
959 if (!root) return
960
961 const selected = readShadowLineSelection({
962 root,
963 lineForNode: findDiffLineNumber,
964 sideForNode: diffSelectionSide,
965 preserveTextSelection,
966 })
967 if (!selected) return
968
969 if (selected.text) {
970 setSelectedLines(selected.range, { root, text: selected.text })
971 return
972 }
973
974 setSelectedLines(selected.range)
975 },
976 buildDragSelection: () => {
977 if (viewer.dragStart === undefined || viewer.dragEnd === undefined) return
978 const selected: SelectedLineRange = { start: viewer.dragStart, end: viewer.dragEnd }

Callers 1

FileFunction · 0.70

Calls 15

readShadowLineSelectionFunction · 0.90
fixDiffSelectionFunction · 0.90
createDefaultOptionsFunction · 0.90
getWorkerPoolFunction · 0.90
useModeViewerFunction · 0.85
createLineCallbacksFunction · 0.85
useSearchHandleFunction · 0.85
preserveFunction · 0.85
renderViewerFunction · 0.85
useAnnotationRerenderFunction · 0.85
renderMethod · 0.80

Tested by

no test coverage detected