import { DiffLineType, type DiffFile, checkDiffLineIncludeChange } from "@git-diff-view/core"; import { getContentBG, getLineNumberBG, plainLineNumberColorName, emptyBGName, borderColorName, diffAsideWidthName, expandLineNumberColorName, } from "@git-diff-view/utils"; import { DiffSplitAddWidget } from "../DiffAddWidget"; import { DiffContent } from "../DiffContent"; import { SplitSide } from "../DiffView"; import { useDiffViewContext } from "../DiffViewContext"; import { useDiffWidgetContext } from "../DiffWidgetContext"; const InternalDiffSplitLine = ({ index, diffFile, lineNumber, }: { index: number; diffFile: DiffFile; lineNumber: number; }) => { const oldLine = diffFile.getSplitLeftLine(index); const newLine = diffFile.getSplitRightLine(index); const oldSyntaxLine = diffFile.getOldSyntaxLine(oldLine?.lineNumber ?? -1); const newSyntaxLine = diffFile.getNewSyntaxLine(newLine?.lineNumber ?? -1); const oldPlainLine = diffFile.getOldPlainLine(oldLine.lineNumber ?? -1); const newPlainLine = diffFile.getNewPlainLine(newLine.lineNumber ?? -1); const hasDiff = !!oldLine?.diff || !!newLine?.diff; const hasChange = checkDiffLineIncludeChange(oldLine?.diff) || checkDiffLineIncludeChange(newLine?.diff); const oldLineIsDelete = oldLine?.diff?.type === DiffLineType.Delete; const newLineIsAdded = newLine?.diff?.type === DiffLineType.Add; const { useDiffContext } = useDiffViewContext(); const { enableHighlight, enableAddWidget, onAddWidgetClick } = useDiffContext.useShallowStableSelector((s) => ({ enableHighlight: s.enableHighlight, enableAddWidget: s.enableAddWidget, onAddWidgetClick: s.onAddWidgetClick, })); const { useWidget } = useDiffWidgetContext(); const setWidget = useWidget.getReadonlyState().setWidget; const hasOldLine = !!oldLine.lineNumber; const hasNewLine = !!newLine.lineNumber; const oldLineContentBG = getContentBG(false, oldLineIsDelete, hasDiff); const oldLineNumberBG = getLineNumberBG(false, oldLineIsDelete, hasDiff); const newLineContentBG = getContentBG(newLineIsAdded, false, hasDiff); const newLineNumberBG = getLineNumberBG(newLineIsAdded, false, hasDiff); return (