import { composeLen, type DiffFile } from "@git-diff-view/core";
import {
diffAsideWidthName,
hunkLineNumberBGName,
plainLineNumberColorName,
hunkContentBGName,
hunkContentColorName,
borderColorName,
} from "@git-diff-view/utils";
import { ExpandUp, ExpandDown, ExpandAll } from "../DiffExpand";
import { DiffModeEnum } from "../DiffView";
import { useDiffViewContext } from "../DiffViewContext";
const DiffSplitHunkLineGitHub = ({
index,
diffFile,
lineNumber,
}: {
index: number;
diffFile: DiffFile;
lineNumber: number;
}) => {
const currentHunk = diffFile.getSplitHunkLine(index);
const expandEnabled = diffFile.getExpandEnabled();
const couldExpand = expandEnabled && currentHunk && currentHunk.splitInfo;
const isExpandAll =
currentHunk &&
currentHunk.splitInfo &&
currentHunk.splitInfo.endHiddenIndex - currentHunk.splitInfo.startHiddenIndex < composeLen;
const isFirstLine = currentHunk && currentHunk.isFirst;
const isLastLine = currentHunk && currentHunk.isLast;
return (
{couldExpand ? (
isFirstLine ? (
) : isLastLine ? (
) : isExpandAll ? (
) : (
<>
>
)
) : (
)}
{currentHunk.splitInfo?.plainText || currentHunk.text}
);
};
const DiffSplitHunkLineGitLab = ({
index,
diffFile,
lineNumber,
}: {
index: number;
diffFile: DiffFile;
lineNumber: number;
}) => {
const currentHunk = diffFile.getSplitHunkLine(index);
const expandEnabled = diffFile.getExpandEnabled();
const couldExpand = expandEnabled && currentHunk && currentHunk.splitInfo;
const isExpandAll =
currentHunk &&
currentHunk.splitInfo &&
currentHunk.splitInfo.endHiddenIndex - currentHunk.splitInfo.startHiddenIndex < composeLen;
const isFirstLine = currentHunk && currentHunk.isFirst;
const isLastLine = currentHunk && currentHunk.isLast;
return (
{couldExpand ? (
isFirstLine ? (
) : isLastLine ? (
) : isExpandAll ? (
) : (
<>
>
)
) : (
)}
{currentHunk.splitInfo?.plainText || currentHunk.text}
{couldExpand ? (
isFirstLine ? (
) : isLastLine ? (
) : isExpandAll ? (
) : (
<>
>
)
) : (
)}
{currentHunk.splitInfo?.plainText || currentHunk.text}
);
};
const InternalDiffSplitHunkLine = ({
index,
diffFile,
lineNumber,
}: {
index: number;
diffFile: DiffFile;
lineNumber: number;
}) => {
const { useDiffContext } = useDiffViewContext();
const diffViewMode = useDiffContext.useShallowStableSelector((s) => s.mode);
if (
diffViewMode === DiffModeEnum.SplitGitHub ||
diffViewMode === DiffModeEnum.Split ||
diffViewMode === DiffModeEnum.Unified
) {
return ;
} else {
return ;
}
};
export const DiffSplitHunkLine = ({
index,
diffFile,
lineNumber,
}: {
index: number;
diffFile: DiffFile;
lineNumber: number;
}) => {
const currentHunk = diffFile.getSplitHunkLine(index);
const currentIsShow =
currentHunk &&
currentHunk.splitInfo &&
currentHunk.splitInfo.startHiddenIndex < currentHunk.splitInfo.endHiddenIndex;
const currentIsPureHunk = currentHunk && diffFile._getIsPureDiffRender() && !currentHunk.splitInfo;
if (!currentIsShow && !currentIsPureHunk) return null;
return ;
};