import { type DiffFile, type DiffLine, checkDiffLineIncludeChange, type File } from "@git-diff-view/core"; import { diffAsideWidthName, addContentBGName, addLineNumberBGName, delContentBGName, delLineNumberBGName, expandContentBGName, plainContentBGName, plainLineNumberBGName, plainLineNumberColorName, expandLineNumberColorName, } from "@git-diff-view/utils"; import { SplitSide } from ".."; import { DiffUnifiedAddWidget } from "./DiffAddWidget"; import { DiffContent } from "./DiffContent"; import { useDiffViewContext } from "./DiffViewContext"; import { useDiffWidgetContext } from "./DiffWidgetContext"; import type { DiffViewProps } from ".."; const DiffUnifiedOldLine = ({ index, diffLine, rawLine, plainLine, syntaxLine, lineNumber, diffFile, setWidget, enableWrap, enableAddWidget, enableHighlight, onAddWidgetClick, }: { index: number; lineNumber: number; rawLine: string; plainLine?: File["plainFile"][number]; syntaxLine?: File["syntaxFile"][number]; diffLine?: DiffLine; diffFile: DiffFile; enableWrap: boolean; enableAddWidget: boolean; enableHighlight: boolean; onAddWidgetClick?: DiffViewProps["onAddWidgetClick"]; setWidget: (props: { side?: SplitSide; lineNumber?: number }) => void; }) => { return ( {enableAddWidget && ( setWidget({ lineNumber, side })} /> )}
{lineNumber}
); }; const DiffUnifiedNewLine = ({ index, diffLine, rawLine, plainLine, syntaxLine, lineNumber, diffFile, setWidget, enableWrap, enableAddWidget, enableHighlight, onAddWidgetClick, }: { index: number; lineNumber: number; rawLine: string; plainLine?: File["plainFile"][number]; syntaxLine?: File["syntaxFile"][number]; diffLine?: DiffLine; diffFile: DiffFile; enableWrap: boolean; enableAddWidget: boolean; enableHighlight: boolean; onAddWidgetClick?: DiffViewProps["onAddWidgetClick"]; setWidget: (props: { side?: SplitSide; lineNumber?: number }) => void; }) => { return ( {enableAddWidget && ( setWidget({ lineNumber, side })} /> )}
{lineNumber}
); }; const InternalDiffUnifiedLine = ({ index, diffFile, lineNumber, enableWrap, enableAddWidget, enableHighlight, }: { index: number; diffFile: DiffFile; lineNumber: number; enableWrap: boolean; enableHighlight: boolean; enableAddWidget: boolean; }) => { const unifiedLine = diffFile.getUnifiedLine(index); const { useDiffContext } = useDiffViewContext(); const onAddWidgetClick = useDiffContext.getReadonlyState().onAddWidgetClick; const { useWidget } = useDiffWidgetContext(); const setWidget = useWidget.getReadonlyState().setWidget; const hasDiff = unifiedLine.diff; const hasChange = checkDiffLineIncludeChange(unifiedLine.diff); const rawLine = unifiedLine.value || ""; const diffLine = unifiedLine.diff; const newLineNumber = unifiedLine.newLineNumber; const oldLinenumber = unifiedLine.oldLineNumber; const syntaxLine = newLineNumber ? diffFile.getNewSyntaxLine(newLineNumber) : oldLinenumber ? diffFile.getOldSyntaxLine(oldLinenumber) : undefined; const plainLine = newLineNumber ? diffFile.getNewPlainLine(newLineNumber) : oldLinenumber ? diffFile.getOldPlainLine(oldLinenumber) : undefined; if (hasChange) { if (unifiedLine.oldLineNumber) { return ( onAddWidgetClick.current?.(...props)} /> ); } else { return ( onAddWidgetClick.current?.(...props)} /> ); } } else { return ( {enableAddWidget && hasDiff && ( onAddWidgetClick.current?.(...props)} onOpenAddWidget={(lineNumber, side) => setWidget({ lineNumber, side })} /> )}
{unifiedLine.oldLineNumber} {unifiedLine.newLineNumber}
); } }; export const DiffUnifiedContentLine = ({ index, diffFile, lineNumber, enableWrap, enableHighlight, enableAddWidget, }: { index: number; diffFile: DiffFile; lineNumber: number; enableWrap: boolean; enableHighlight: boolean; enableAddWidget: boolean; }) => { const unifiedLine = diffFile.getUnifiedLine(index); if (unifiedLine?.isHidden) return null; return ( ); };