source dump of claude code
at main 190 lines 18 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import * as React from 'react'; 3import { memo, useEffect, useMemo, useRef, useState } from 'react'; 4import { useSettings } from '../hooks/useSettings.js'; 5import { Ansi, Box, type DOMElement, measureElement, NoSelect, Text, useTheme } from '../ink.js'; 6import { isFullscreenEnvEnabled } from '../utils/fullscreen.js'; 7import sliceAnsi from '../utils/sliceAnsi.js'; 8import { countCharInString } from '../utils/stringUtils.js'; 9import { HighlightedCodeFallback } from './HighlightedCode/Fallback.js'; 10import { expectColorFile } from './StructuredDiff/colorDiff.js'; 11type Props = { 12 code: string; 13 filePath: string; 14 width?: number; 15 dim?: boolean; 16}; 17const DEFAULT_WIDTH = 80; 18export const HighlightedCode = memo(function HighlightedCode(t0) { 19 const $ = _c(21); 20 const { 21 code, 22 filePath, 23 width, 24 dim: t1 25 } = t0; 26 const dim = t1 === undefined ? false : t1; 27 const ref = useRef(null); 28 const [measuredWidth, setMeasuredWidth] = useState(width || DEFAULT_WIDTH); 29 const [theme] = useTheme(); 30 const settings = useSettings(); 31 const syntaxHighlightingDisabled = settings.syntaxHighlightingDisabled ?? false; 32 let t2; 33 bb0: { 34 if (syntaxHighlightingDisabled) { 35 t2 = null; 36 break bb0; 37 } 38 let t3; 39 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 40 t3 = expectColorFile(); 41 $[0] = t3; 42 } else { 43 t3 = $[0]; 44 } 45 const ColorFile = t3; 46 if (!ColorFile) { 47 t2 = null; 48 break bb0; 49 } 50 let t4; 51 if ($[1] !== code || $[2] !== filePath) { 52 t4 = new ColorFile(code, filePath); 53 $[1] = code; 54 $[2] = filePath; 55 $[3] = t4; 56 } else { 57 t4 = $[3]; 58 } 59 t2 = t4; 60 } 61 const colorFile = t2; 62 let t3; 63 let t4; 64 if ($[4] !== width) { 65 t3 = () => { 66 if (!width && ref.current) { 67 const { 68 width: elementWidth 69 } = measureElement(ref.current); 70 if (elementWidth > 0) { 71 setMeasuredWidth(elementWidth - 2); 72 } 73 } 74 }; 75 t4 = [width]; 76 $[4] = width; 77 $[5] = t3; 78 $[6] = t4; 79 } else { 80 t3 = $[5]; 81 t4 = $[6]; 82 } 83 useEffect(t3, t4); 84 let t5; 85 bb1: { 86 if (colorFile === null) { 87 t5 = null; 88 break bb1; 89 } 90 let t6; 91 if ($[7] !== colorFile || $[8] !== dim || $[9] !== measuredWidth || $[10] !== theme) { 92 t6 = colorFile.render(theme, measuredWidth, dim); 93 $[7] = colorFile; 94 $[8] = dim; 95 $[9] = measuredWidth; 96 $[10] = theme; 97 $[11] = t6; 98 } else { 99 t6 = $[11]; 100 } 101 t5 = t6; 102 } 103 const lines = t5; 104 let t6; 105 bb2: { 106 if (!isFullscreenEnvEnabled()) { 107 t6 = 0; 108 break bb2; 109 } 110 const lineCount = countCharInString(code, "\n") + 1; 111 let t7; 112 if ($[12] !== lineCount) { 113 t7 = lineCount.toString(); 114 $[12] = lineCount; 115 $[13] = t7; 116 } else { 117 t7 = $[13]; 118 } 119 t6 = t7.length + 2; 120 } 121 const gutterWidth = t6; 122 let t7; 123 if ($[14] !== code || $[15] !== dim || $[16] !== filePath || $[17] !== gutterWidth || $[18] !== lines || $[19] !== syntaxHighlightingDisabled) { 124 t7 = <Box ref={ref}>{lines ? <Box flexDirection="column">{lines.map((line, i) => gutterWidth > 0 ? <CodeLine key={i} line={line} gutterWidth={gutterWidth} /> : <Text key={i}><Ansi>{line}</Ansi></Text>)}</Box> : <HighlightedCodeFallback code={code} filePath={filePath} dim={dim} skipColoring={syntaxHighlightingDisabled} />}</Box>; 125 $[14] = code; 126 $[15] = dim; 127 $[16] = filePath; 128 $[17] = gutterWidth; 129 $[18] = lines; 130 $[19] = syntaxHighlightingDisabled; 131 $[20] = t7; 132 } else { 133 t7 = $[20]; 134 } 135 return t7; 136}); 137function CodeLine(t0) { 138 const $ = _c(13); 139 const { 140 line, 141 gutterWidth 142 } = t0; 143 let t1; 144 if ($[0] !== gutterWidth || $[1] !== line) { 145 t1 = sliceAnsi(line, 0, gutterWidth); 146 $[0] = gutterWidth; 147 $[1] = line; 148 $[2] = t1; 149 } else { 150 t1 = $[2]; 151 } 152 const gutter = t1; 153 let t2; 154 if ($[3] !== gutterWidth || $[4] !== line) { 155 t2 = sliceAnsi(line, gutterWidth); 156 $[3] = gutterWidth; 157 $[4] = line; 158 $[5] = t2; 159 } else { 160 t2 = $[5]; 161 } 162 const content = t2; 163 let t3; 164 if ($[6] !== gutter) { 165 t3 = <NoSelect fromLeftEdge={true}><Text><Ansi>{gutter}</Ansi></Text></NoSelect>; 166 $[6] = gutter; 167 $[7] = t3; 168 } else { 169 t3 = $[7]; 170 } 171 let t4; 172 if ($[8] !== content) { 173 t4 = <Text><Ansi>{content}</Ansi></Text>; 174 $[8] = content; 175 $[9] = t4; 176 } else { 177 t4 = $[9]; 178 } 179 let t5; 180 if ($[10] !== t3 || $[11] !== t4) { 181 t5 = <Box flexDirection="row">{t3}{t4}</Box>; 182 $[10] = t3; 183 $[11] = t4; 184 $[12] = t5; 185 } else { 186 t5 = $[12]; 187 } 188 return t5; 189} 190//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VTZXR0aW5ncyIsIkFuc2kiLCJCb3giLCJET01FbGVtZW50IiwibWVhc3VyZUVsZW1lbnQiLCJOb1NlbGVjdCIsIlRleHQiLCJ1c2VUaGVtZSIsImlzRnVsbHNjcmVlbkVudkVuYWJsZWQiLCJzbGljZUFuc2kiLCJjb3VudENoYXJJblN0cmluZyIsIkhpZ2hsaWdodGVkQ29kZUZhbGxiYWNrIiwiZXhwZWN0Q29sb3JGaWxlIiwiUHJvcHMiLCJjb2RlIiwiZmlsZVBhdGgiLCJ3aWR0aCIsImRpbSIsIkRFRkFVTFRfV0lEVEgiLCJIaWdobGlnaHRlZENvZGUiLCJ0MCIsIiQiLCJfYyIsInQxIiwidW5kZWZpbmVkIiwicmVmIiwibWVhc3VyZWRXaWR0aCIsInNldE1lYXN1cmVkV2lkdGgiLCJ0aGVtZSIsInNldHRpbmdzIiwic3ludGF4SGlnaGxpZ2h0aW5nRGlzYWJsZWQiLCJ0MiIsImJiMCIsInQzIiwiU3ltYm9sIiwiZm9yIiwiQ29sb3JGaWxlIiwidDQiLCJjb2xvckZpbGUiLCJjdXJyZW50IiwiZWxlbWVudFdpZHRoIiwidDUiLCJiYjEiLCJ0NiIsInJlbmRlciIsImxpbmVzIiwiYmIyIiwibGluZUNvdW50IiwidDciLCJ0b1N0cmluZyIsImxlbmd0aCIsImd1dHRlcldpZHRoIiwibWFwIiwibGluZSIsImkiLCJDb2RlTGluZSIsImd1dHRlciIsImNvbnRlbnQiXSwic291cmNlcyI6WyJIaWdobGlnaHRlZENvZGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTZXR0aW5ncyB9IGZyb20gJy4uL2hvb2tzL3VzZVNldHRpbmdzLmpzJ1xuaW1wb3J0IHtcbiAgQW5zaSxcbiAgQm94LFxuICB0eXBlIERPTUVsZW1lbnQsXG4gIG1lYXN1cmVFbGVtZW50LFxuICBOb1NlbGVjdCxcbiAgVGV4dCxcbiAgdXNlVGhlbWUsXG59IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IGlzRnVsbHNjcmVlbkVudkVuYWJsZWQgfSBmcm9tICcuLi91dGlscy9mdWxsc2NyZWVuLmpzJ1xuaW1wb3J0IHNsaWNlQW5zaSBmcm9tICcuLi91dGlscy9zbGljZUFuc2kuanMnXG5pbXBvcnQgeyBjb3VudENoYXJJblN0cmluZyB9IGZyb20gJy4uL3V0aWxzL3N0cmluZ1V0aWxzLmpzJ1xuaW1wb3J0IHsgSGlnaGxpZ2h0ZWRDb2RlRmFsbGJhY2sgfSBmcm9tICcuL0hpZ2hsaWdodGVkQ29kZS9GYWxsYmFjay5qcydcbmltcG9ydCB7IGV4cGVjdENvbG9yRmlsZSB9IGZyb20gJy4vU3RydWN0dXJlZERpZmYvY29sb3JEaWZmLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBjb2RlOiBzdHJpbmdcbiAgZmlsZVBhdGg6IHN0cmluZ1xuICB3aWR0aD86IG51bWJlclxuICBkaW0/OiBib29sZWFuXG59XG5cbmNvbnN0IERFRkFVTFRfV0lEVEggPSA4MFxuXG5leHBvcnQgY29uc3QgSGlnaGxpZ2h0ZWRDb2RlID0gbWVtbyhmdW5jdGlvbiBIaWdobGlnaHRlZENvZGUoe1xuICBjb2RlLFxuICBmaWxlUGF0aCxcbiAgd2lkdGgsXG4gIGRpbSA9IGZhbHNlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICBjb25zdCByZWYgPSB1c2VSZWY8RE9NRWxlbWVudD4obnVsbClcbiAgY29uc3QgW21lYXN1cmVkV2lkdGgsIHNldE1lYXN1cmVkV2lkdGhdID0gdXNlU3RhdGUod2lkdGggfHwgREVGQVVMVF9XSURUSClcbiAgY29uc3QgW3RoZW1lXSA9IHVzZVRoZW1lKClcbiAgY29uc3Qgc2V0dGluZ3MgPSB1c2VTZXR0aW5ncygpXG4gIGNvbnN0IHN5bnRheEhpZ2hsaWdodGluZ0Rpc2FibGVkID1cbiAgICBzZXR0aW5ncy5zeW50YXhIaWdobGlnaHRpbmdEaXNhYmxlZCA/PyBmYWxzZVxuXG4gIGNvbnN0IGNvbG9yRmlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChzeW50YXhIaWdobGlnaHRpbmdEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgY29uc3QgQ29sb3JGaWxlID0gZXhwZWN0Q29sb3JGaWxlKClcbiAgICBpZiAoIUNvbG9yRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xvckZpbGUoY29kZSwgZmlsZVBhdGgpXG4gIH0sIFtjb2RlLCBmaWxlUGF0aCwgc3ludGF4SGlnaGxpZ2h0aW5nRGlzYWJsZWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3aWR0aCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB3aWR0aDogZWxlbWVudFdpZHRoIH0gPSBtZWFzdXJlRWxlbWVudChyZWYuY3VycmVudClcbiAgICAgIGlmIChlbGVtZW50V2lkdGggPiAwKSB7XG4gICAgICAgIHNldE1lYXN1cmVkV2lkdGgoZWxlbWVudFdpZHRoIC0gMilcbiAgICAgIH1cbiAgICB9XG4gIH0sIFt3aWR0aF0pXG5cbiAgY29uc3QgbGluZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoY29sb3JGaWxlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gY29sb3JGaWxlLnJlbmRlcih0aGVtZSwgbWVhc3VyZWRXaWR0aCwgZGltKVxuICB9LCBbY29sb3JGaWxlLCB0aGVtZSwgbWVhc3VyZWRXaWR0aCwgZGltXSlcblxuICAvLyBHdXR0ZXIgd2lkdGggbWF0Y2hlcyBDb2xvckZpbGUncyBsYXlvdXQgaW4gbGliLnJzOiBzcGFjZSArIHJpZ2h0LWFsaWduZWRcbiAgLy8gbGluZSBudW1iZXIgKG1heF9kaWdpdHMgPSBsaW5lQ291bnQudG9TdHJpbmcoKS5sZW5ndGgpICsgc3BhY2UuIE5vIG1hcmtlclxuICAvLyBjb2x1bW4gbGlrZSB0aGUgZGlmZiBwYXRoLiBXcmFwIGluIDxOb1NlbGVjdD4gc28gZnVsbHNjcmVlbiBzZWxlY3Rpb25cbiAgLy8geWllbGRzIGNsZWFuIGNvZGUgd2l0aG91dCBsaW5lIG51bWJlcnMuIE9ubHkgc3BsaXQgaW4gZnVsbHNjcmVlbiBtb2RlXG4gIC8vICh+NMOXIERPTSBub2RlcyArIHNsaWNlQW5zaSBjb3N0KTsgbm9uLWZ1bGxzY3JlZW4gdXNlcyB0ZXJtaW5hbC1uYXRpdmVcbiAgLy8gc2VsZWN0aW9uIHdoZXJlIG5vU2VsZWN0IGlzIG1lYW5pbmdsZXNzLlxuICBjb25zdCBndXR0ZXJXaWR0aCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghaXNGdWxsc2NyZWVuRW52RW5hYmxlZCgpKSByZXR1cm4gMFxuICAgIGNvbnN0IGxpbmVDb3VudCA9IGNvdW50Q2hhckluU3RyaW5nKGNvZGUsICdcXG4nKSArIDFcbiAgICByZXR1cm4gbGluZUNvdW50LnRvU3RyaW5nKCkubGVuZ3RoICsgMlxuICB9LCBbY29kZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IHJlZj17cmVmfT5cbiAgICAgIHtsaW5lcyA/IChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge2xpbmVzLm1hcCgobGluZSwgaSkgPT5cbiAgICAgICAgICAgIGd1dHRlcldpZHRoID4gMCA/IChcbiAgICAgICAgICAgICAgPENvZGVMaW5lIGtleT17aX0gbGluZT17bGluZX0gZ3V0dGVyV2lkdGg9e2d1dHRlcldpZHRofSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFRleHQga2V5PXtpfT5cbiAgICAgICAgICAgICAgICA8QW5zaT57bGluZX08L0Fuc2k+XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgICApIDogKFxuICAgICAgICA8SGlnaGxpZ2h0ZWRDb2RlRmFsbGJhY2tcbiAgICAgICAgICBjb2RlPXtjb2RlfVxuICAgICAgICAgIGZpbGVQYXRoPXtmaWxlUGF0aH1cbiAgICAgICAgICBkaW09e2RpbX1cbiAgICAgICAgICBza2lwQ29sb3Jpbmc9e3N5bnRheEhpZ2hsaWdodGluZ0Rpc2FibGVkfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0JveD5cbiAgKVxufSlcblxuZnVuY3Rpb24gQ29kZUxpbmUoe1xuICBsaW5lLFxuICBndXR0ZXJXaWR0aCxcbn06IHtcbiAgbGluZTogc3RyaW5nXG4gIGd1dHRlcldpZHRoOiBudW1iZXJcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBndXR0ZXIgPSBzbGljZUFuc2kobGluZSwgMCwgZ3V0dGVyV2lkdGgpXG4gIGNvbnN0IGNvbnRlbnQgPSBzbGljZUFuc2kobGluZSwgZ3V0dGVyV2lkdGgpXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICA8Tm9TZWxlY3QgZnJvbUxlZnRFZGdlPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8QW5zaT57Z3V0dGVyfTwvQW5zaT5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9Ob1NlbGVjdD5cbiAgICAgIDxUZXh0PlxuICAgICAgICA8QW5zaT57Y29udGVudH08L0Fuc2k+XG4gICAgICA8L1RleHQ+XG4gICAgPC9Cb3g+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBS0EsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNsRSxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQ0VDLElBQUksRUFDSkMsR0FBRyxFQUNILEtBQUtDLFVBQVUsRUFDZkMsY0FBYyxFQUNkQyxRQUFRLEVBQ1JDLElBQUksRUFD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