import { c as _c } from "react/compiler-runtime"; import * as React from 'react'; import { memo, useEffect, useMemo, useRef, useState } from 'react'; import { useSettings } from '../hooks/useSettings.js'; import { Ansi, Box, type DOMElement, measureElement, NoSelect, Text, useTheme } from '../ink.js'; import { isFullscreenEnvEnabled } from '../utils/fullscreen.js'; import sliceAnsi from '../utils/sliceAnsi.js'; import { countCharInString } from '../utils/stringUtils.js'; import { HighlightedCodeFallback } from './HighlightedCode/Fallback.js'; import { expectColorFile } from './StructuredDiff/colorDiff.js'; type Props = { code: string; filePath: string; width?: number; dim?: boolean; }; const DEFAULT_WIDTH = 80; export const HighlightedCode = memo(function HighlightedCode(t0: Props) { const $ = _c(21); const { code, filePath, width, dim: t1 } = t0; const dim = t1 === undefined ? false : t1; const ref = useRef(null); const [measuredWidth, setMeasuredWidth] = useState(width || DEFAULT_WIDTH); const [theme] = useTheme(); const settings = useSettings(); const syntaxHighlightingDisabled = settings.syntaxHighlightingDisabled ?? false; let t2; bb0: { if (syntaxHighlightingDisabled) { t2 = null; break bb0; } let t3; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t3 = expectColorFile(); $[0] = t3; } else { t3 = $[0]; } const ColorFile = t3; if (!ColorFile) { t2 = null; break bb0; } let t4; if ($[1] !== code || $[2] !== filePath) { t4 = new ColorFile(code, filePath); $[1] = code; $[2] = filePath; $[3] = t4; } else { t4 = $[3]; } t2 = t4; } const colorFile = t2; let t3; let t4; if ($[4] !== width) { t3 = () => { if (!width && ref.current) { const { width: elementWidth } = measureElement(ref.current); if (elementWidth > 0) { setMeasuredWidth(elementWidth - 2); } } }; t4 = [width]; $[4] = width; $[5] = t3; $[6] = t4; } else { t3 = $[5]; t4 = $[6]; } useEffect(t3, t4); let t5; bb1: { if (colorFile === null) { t5 = null; break bb1; } let t6; if ($[7] !== colorFile || $[8] !== dim || $[9] !== measuredWidth || $[10] !== theme) { t6 = colorFile.render(theme, measuredWidth, dim); $[7] = colorFile; $[8] = dim; $[9] = measuredWidth; $[10] = theme; $[11] = t6; } else { t6 = $[11]; } t5 = t6; } const lines = t5; let t6; bb2: { if (!isFullscreenEnvEnabled()) { t6 = 0; break bb2; } const lineCount = countCharInString(code, "\n") + 1; let t7; if ($[12] !== lineCount) { t7 = lineCount.toString(); $[12] = lineCount; $[13] = t7; } else { t7 = $[13]; } t6 = t7.length + 2; } const gutterWidth = t6; let t7; if ($[14] !== code || $[15] !== dim || $[16] !== filePath || $[17] !== gutterWidth || $[18] !== lines || $[19] !== syntaxHighlightingDisabled) { t7 = {lines ? {lines.map((line, i) => gutterWidth > 0 ? : {line})} : }; $[14] = code; $[15] = dim; $[16] = filePath; $[17] = gutterWidth; $[18] = lines; $[19] = syntaxHighlightingDisabled; $[20] = t7; } else { t7 = $[20]; } return t7; }); function CodeLine(t0) { const $ = _c(13); const { line, gutterWidth } = t0; let t1; if ($[0] !== gutterWidth || $[1] !== line) { t1 = sliceAnsi(line, 0, gutterWidth); $[0] = gutterWidth; $[1] = line; $[2] = t1; } else { t1 = $[2]; } const gutter = t1; let t2; if ($[3] !== gutterWidth || $[4] !== line) { t2 = sliceAnsi(line, gutterWidth); $[3] = gutterWidth; $[4] = line; $[5] = t2; } else { t2 = $[5]; } const content = t2; let t3; if ($[6] !== gutter) { t3 = {gutter}; $[6] = gutter; $[7] = t3; } else { t3 = $[7]; } let t4; if ($[8] !== content) { t4 = {content}; $[8] = content; $[9] = t4; } else { t4 = $[9]; } let t5; if ($[10] !== t3 || $[11] !== t4) { t5 = {t3}{t4}; $[10] = t3; $[11] = t4; $[12] = t5; } else { t5 = $[12]; } return t5; }