MCPcopy Create free account
hub / github.com/modem-dev/hunk / renderStackCell

Function renderStackCell

src/ui/diff/renderRows.tsx:920–982  ·  view source on GitHub ↗

Render one stack-view cell as prefix + combined gutter + content spans.

(
  cell: StackLineCell,
  width: number,
  lineNumberDigits: number,
  showLineNumbers: boolean,
  theme: AppTheme,
  keyPrefix: string,
  contentOffset = 0,
  prefix?: {
    text: string;
    fg: string;
    bg: string;
  },
  selected = false,
  selectionColRange?: CopySelectedRowRange,
)

Source from the content-addressed store, hash-verified

918
919/** Render one stack-view cell as prefix + combined gutter + content spans. */
920function renderStackCell(
921 cell: StackLineCell,
922 width: number,
923 lineNumberDigits: number,
924 showLineNumbers: boolean,
925 theme: AppTheme,
926 keyPrefix: string,
927 contentOffset = 0,
928 prefix?: {
929 text: string;
930 fg: string;
931 bg: string;
932 },
933 selected = false,
934 selectionColRange?: CopySelectedRowRange,
935) {
936 const basePalette = stackCellPalette(cell.kind, theme, cell.moveKind);
937 const palette = selected ? applySelectionPalette(basePalette, theme) : basePalette;
938 const resolvedPrefix = selected && prefix ? applySelectionPrefix(prefix, theme) : prefix;
939 const prefixWidth = resolvedPrefix?.text.length ?? 0;
940 const { gutterWidth, contentWidth } = resolveStackCellGeometry(
941 width,
942 lineNumberDigits,
943 showLineNumbers,
944 prefixWidth,
945 );
946
947 // Convert global selection column range to content-local range.
948 const globalContentStart = prefixWidth + gutterWidth;
949 const localColRange =
950 selectionColRange && globalContentStart < selectionColRange.endCol
951 ? {
952 start: Math.max(0, selectionColRange.startCol - globalContentStart),
953 end: Math.min(
954 contentWidth,
955 Math.max(0, selectionColRange.endCol - globalContentStart + 1),
956 ),
957 }
958 : undefined;
959
960 return (
961 <>
962 {resolvedPrefix ? (
963 <span key={`${keyPrefix}:prefix`} fg={resolvedPrefix.fg} bg={resolvedPrefix.bg}>
964 {resolvedPrefix.text}
965 </span>
966 ) : null}
967 <span key={`${keyPrefix}:gutter`} fg={palette.numberColor} bg={palette.gutterBg}>
968 {stackGutterText(cell, lineNumberDigits, showLineNumbers).padEnd(gutterWidth)}
969 </span>
970 {renderInlineSpans(
971 cell.spans,
972 contentWidth,
973 theme.syntaxColors.default,
974 palette.contentBg,
975 `${keyPrefix}:content`,
976 contentOffset,
977 selected ? theme : undefined,

Callers 1

renderRowFunction · 0.85

Calls 6

stackCellPaletteFunction · 0.90
resolveStackCellGeometryFunction · 0.90
stackGutterTextFunction · 0.90
applySelectionPaletteFunction · 0.85
applySelectionPrefixFunction · 0.85
renderInlineSpansFunction · 0.85

Tested by

no test coverage detected