claude-code/src/components/VimTextInput.tsx

140 lines
16 KiB
TypeScript
Raw Normal View History

2026-03-31 19:22:47 +08:00
import { c as _c } from "react/compiler-runtime";
import chalk from 'chalk';
import React from 'react';
import { useClipboardImageHint } from '../hooks/useClipboardImageHint.js';
import { useVimInput } from '../hooks/useVimInput.js';
import { Box, color, useTerminalFocus, useTheme } from '../ink.js';
import type { VimTextInputProps } from '../types/textInputTypes.js';
import type { TextHighlight } from '../utils/textHighlighting.js';
import { BaseTextInput } from './BaseTextInput.js';
export type Props = VimTextInputProps & {
highlights?: TextHighlight[];
};
export default function VimTextInput(props) {
const $ = _c(38);
const [theme] = useTheme();
const isTerminalFocused = useTerminalFocus();
useClipboardImageHint(isTerminalFocused, !!props.onImagePaste);
const t0 = props.value;
const t1 = props.onChange;
const t2 = props.onSubmit;
const t3 = props.onExit;
const t4 = props.onExitMessage;
const t5 = props.onHistoryReset;
const t6 = props.onHistoryUp;
const t7 = props.onHistoryDown;
const t8 = props.onClearInput;
const t9 = props.focus;
const t10 = props.mask;
const t11 = props.multiline;
const t12 = props.showCursor ? " " : "";
const t13 = props.highlightPastedText;
const t14 = isTerminalFocused ? chalk.inverse : _temp;
let t15;
if ($[0] !== theme) {
t15 = color("text", theme);
$[0] = theme;
$[1] = t15;
} else {
t15 = $[1];
}
let t16;
if ($[2] !== props.columns || $[3] !== props.cursorOffset || $[4] !== props.disableCursorMovementForUpDownKeys || $[5] !== props.disableEscapeDoublePress || $[6] !== props.focus || $[7] !== props.highlightPastedText || $[8] !== props.inputFilter || $[9] !== props.mask || $[10] !== props.maxVisibleLines || $[11] !== props.multiline || $[12] !== props.onChange || $[13] !== props.onChangeCursorOffset || $[14] !== props.onClearInput || $[15] !== props.onExit || $[16] !== props.onExitMessage || $[17] !== props.onHistoryDown || $[18] !== props.onHistoryReset || $[19] !== props.onHistoryUp || $[20] !== props.onImagePaste || $[21] !== props.onModeChange || $[22] !== props.onSubmit || $[23] !== props.onUndo || $[24] !== props.value || $[25] !== t12 || $[26] !== t14 || $[27] !== t15) {
t16 = {
value: t0,
onChange: t1,
onSubmit: t2,
onExit: t3,
onExitMessage: t4,
onHistoryReset: t5,
onHistoryUp: t6,
onHistoryDown: t7,
onClearInput: t8,
focus: t9,
mask: t10,
multiline: t11,
cursorChar: t12,
highlightPastedText: t13,
invert: t14,
themeText: t15,
columns: props.columns,
maxVisibleLines: props.maxVisibleLines,
onImagePaste: props.onImagePaste,
disableCursorMovementForUpDownKeys: props.disableCursorMovementForUpDownKeys,
disableEscapeDoublePress: props.disableEscapeDoublePress,
externalOffset: props.cursorOffset,
onOffsetChange: props.onChangeCursorOffset,
inputFilter: props.inputFilter,
onModeChange: props.onModeChange,
onUndo: props.onUndo
};
$[2] = props.columns;
$[3] = props.cursorOffset;
$[4] = props.disableCursorMovementForUpDownKeys;
$[5] = props.disableEscapeDoublePress;
$[6] = props.focus;
$[7] = props.highlightPastedText;
$[8] = props.inputFilter;
$[9] = props.mask;
$[10] = props.maxVisibleLines;
$[11] = props.multiline;
$[12] = props.onChange;
$[13] = props.onChangeCursorOffset;
$[14] = props.onClearInput;
$[15] = props.onExit;
$[16] = props.onExitMessage;
$[17] = props.onHistoryDown;
$[18] = props.onHistoryReset;
$[19] = props.onHistoryUp;
$[20] = props.onImagePaste;
$[21] = props.onModeChange;
$[22] = props.onSubmit;
$[23] = props.onUndo;
$[24] = props.value;
$[25] = t12;
$[26] = t14;
$[27] = t15;
$[28] = t16;
} else {
t16 = $[28];
}
const vimInputState = useVimInput(t16);
const {
mode,
setMode
} = vimInputState;
let t17;
let t18;
if ($[29] !== mode || $[30] !== props.initialMode || $[31] !== setMode) {
t17 = () => {
if (props.initialMode && props.initialMode !== mode) {
setMode(props.initialMode);
}
};
t18 = [props.initialMode, mode, setMode];
$[29] = mode;
$[30] = props.initialMode;
$[31] = setMode;
$[32] = t17;
$[33] = t18;
} else {
t17 = $[32];
t18 = $[33];
}
React.useEffect(t17, t18);
let t19;
if ($[34] !== isTerminalFocused || $[35] !== props || $[36] !== vimInputState) {
t19 = <Box flexDirection="column"><BaseTextInput inputState={vimInputState} terminalFocus={isTerminalFocused} highlights={props.highlights} {...props} /></Box>;
$[34] = isTerminalFocused;
$[35] = props;
$[36] = vimInputState;
$[37] = t19;
} else {
t19 = $[37];
}
return t19;
}
function _temp(text) {
return text;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaGFsayIsIlJlYWN0IiwidXNlQ2xpcGJvYXJkSW1hZ2VIaW50IiwidXNlVmltSW5wdXQiLCJCb3giLCJjb2xvciIsInVzZVRlcm1pbmFsRm9jdXMiLCJ1c2VUaGVtZSIsIlZpbVRleHRJbnB1dFByb3BzIiwiVGV4dEhpZ2hsaWdodCIsIkJhc2VUZXh0SW5wdXQiLCJQcm9wcyIsImhpZ2hsaWdodHMiLCJWaW1UZXh0SW5wdXQiLCJwcm9wcyIsIiQiLCJfYyIsInRoZW1lIiwiaXNUZXJtaW5hbEZvY3VzZWQiLCJvbkltYWdlUGFzdGUiLCJ0MCIsInZhbHVlIiwidDEiLCJvbkNoYW5nZSIsInQyIiwib25TdWJtaXQiLCJ0MyIsIm9uRXhpdCIsInQ0Iiwib25FeGl0TWVzc2FnZSIsInQ1Iiwib25IaXN0b3J5UmVzZXQiLCJ0NiIsIm9uSGlzdG9yeVVwIiwidDciLCJvbkhpc3RvcnlEb3duIiwidDgiLCJvbkNsZWFySW5wdXQiLCJ0OSIsImZvY3VzIiwidDEwIiwibWFzayIsInQxMSIsIm11bHRpbGluZSIsInQxMiIsInNob3dDdXJzb3IiLCJ0MTMiLCJoaWdobGlnaHRQYXN0ZWRUZXh0IiwidDE0IiwiaW52ZXJzZSIsIl90ZW1wIiwidDE1IiwidDE2IiwiY29sdW1ucyIsImN1cnNvck9mZnNldCIsImRpc2FibGVDdXJzb3JNb3ZlbWVudEZvclVwRG93bktleXMiLCJkaXNhYmxlRXNjYXBlRG91YmxlUHJlc3MiLCJpbnB1dEZpbHRlciIsIm1heFZpc2libGVMaW5lcyIsIm9uQ2hhbmdlQ3Vyc29yT2Zmc2V0Iiwib25Nb2RlQ2hhbmdlIiwib25VbmRvIiwiY3Vyc29yQ2hhciIsImludmVydCIsInRoZW1lVGV4dCIsImV4dGVybmFsT2Zmc2V0Iiwib25PZmZzZXRDaGFuZ2UiLCJ2aW1JbnB1dFN0YXRlIiwibW9kZSIsInNldE1vZGUiLCJ0MTciLCJ0MTgiLCJpbml0aWFsTW9kZSIsInVzZUVmZmVjdCIsInQxOSIsInRleHQiXSwic291cmNlcyI6WyJWaW1UZXh0SW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNsaXBib2FyZEltYWdlSGludCB9IGZyb20gJy4uL2hvb2tzL3VzZUNsaXBib2FyZEltYWdlSGludC5qcydcbmltcG9ydCB7IHVzZVZpbUlucHV0IH0gZnJvbSAnLi4vaG9va3MvdXNlVmltSW5wdXQuanMnXG5pbXBvcnQgeyBCb3gsIGNvbG9yLCB1c2VUZXJtaW5hbEZvY3VzLCB1c2VUaGVtZSB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB0eXBlIHsgVmltVGV4dElucHV0UHJvcHMgfSBmcm9tICcuLi90eXBlcy90ZXh0SW5wdXRUeXBlcy5qcydcbmltcG9ydCB0eXBlIHsgVGV4dEhpZ2hsaWdodCB9IGZyb20gJy4uL3V0aWxzL3RleHRIaWdobGlnaHRpbmcuanMnXG5pbXBvcnQgeyBCYXNlVGV4dElucHV0IH0gZnJvbSAnLi9CYXNlVGV4dElucHV0LmpzJ1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IFZpbVRleHRJbnB1dFByb3BzICYge1xuICBoaWdobGlnaHRzPzogVGV4dEhpZ2hsaWdodFtdXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFZpbVRleHRJbnB1dChwcm9wczogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBbdGhlbWVdID0gdXNlVGhlbWUoKVxuICBjb25zdCBpc1Rlcm1pbmFsRm9jdXNlZCA9IHVzZVRlcm1pbmFsRm9jdXMoKVxuXG4gIC8vIFNob3cgaGludCB3aGVuIHRlcm1pbmFsIHJlZ2FpbnMgZm9jdXMgYW5kIGNsaXBib2FyZCBoYXMgYW4gaW1hZ2VcbiAgdXNlQ2xpcGJvYXJkSW1hZ2VIaW50KGlzVGVybWluYWxGb2N1c2VkLCAhIXByb3BzLm9uSW1hZ2VQYXN0ZSlcblxuICBjb25zdCB2aW1JbnB1dFN0YXRlID0gdXNlVmltSW5wdXQoe1xuICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25TdWJtaXQ6IHByb3BzLm9uU3VibWl0LFxuICAgIG9uRXhpdDogcHJvcHMub25FeGl0LFxuICAgIG9uRXhpdE1lc3NhZ2U6IHByb3BzLm9uRXhpdE1lc3NhZ2UsXG4gICAgb25IaXN0b3J5UmVzZXQ6IHByb3BzLm9uSGlzdG9yeVJlc2V0LFxuICAgIG9uSGlzdG9yeVVwOiBwcm9wcy5vbkhpc3RvcnlVcCxcbiAgICBvbkhpc3RvcnlEb3duOiBwcm9wcy5vbkhpc3RvcnlEb3duLFxuICAgIG9uQ2xlYXJJbnB1dDogcHJvcHMub25DbGVhcklucHV0LFxuICAgIGZvY3VzOiBwcm9wcy5mb2N1cyxcbiAgICBtYXNrOiBwcm9wcy5tYXNrLFxuICAgIG11bHRpbGluZTogcHJvcHMubXVsdGlsaW5lLFxuICAgIGN1cnNvckNoYXI6IHByb3BzLnNob3dDdXJzb3IgPyAnICcgOiAnJyxcbiAgICBoaWdobGlnaHRQYXN0ZWRUZXh0OiBwcm9wcy5oaWdobGlnaHRQYXN0ZWRUZXh0LFxuICAgIGludmVydDogaXNUZXJtaW5hbEZvY3VzZWQgPyBjaGFsay5pbnZlcnNlIDogKHRleHQ6IHN0cmluZykgPT4gdGV4dCxcbiAgICB0aGVtZVRleHQ6IGNvbG9yKCd0ZXh0JywgdGhlbWUpLFxuICAgIGNvbHVtbnM6IHByb3BzLmNvbHVtbnMsXG4gICAgbWF4VmlzaWJsZUxpbmVzOiBwcm9wcy5tYXhWaXNpYmxlTGluZXMsXG4gICAgb25JbWFnZVBhc3RlOiBwcm9wcy5vbkltYWdlUGFzdGUsXG4gICAgZGlzYWJsZUN1cnNvck1vdmVtZW50Rm9yVXBEb3duS2V5czpcbiAgICAgIHByb3BzLmRpc2FibGVDdXJzb3JNb3ZlbWVudEZvclVwRG93bktleXMsXG4gICAgZGlzYWJsZUVzY2FwZURvdWJsZVByZXNzOiBwcm9wcy5kaXNhYmxlRXNjYXBlRG91YmxlUHJlc3MsXG4gICAgZXh0ZXJuYWxPZmZzZXQ6IHByb3BzLmN1cnNvck9mZnNldCxcbiAgICBvbk9mZnNldENoYW5nZTogcHJvcHMub25DaGFuZ2VDdXJzb3JPZmZzZXQsXG4gICAgaW5wdXRGaWx0ZXI6IHByb3BzLmlucHV0RmlsdGVyLFxuICAgIG9uTW9kZUNoYW5nZTogcHJvcHMub25Nb2RlQ2hhbmdlLFxuICAgIG9uVW5kbzogcHJvcHMub25VbmRvLFxuICB9KVxuXG4gIGNvbnN0IHsgbW9kZSwgc2V0TW9kZSB9ID0gdmltSW5wdXRTdGF0ZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHByb3BzLmluaXRpYWxNb2RlICYmIHByb3BzLmluaXRpYWxNb2RlICE9PSBtb2RlKSB7XG4gICAgICBzZXRNb2RlKHByb3BzLmluaXRpYWxNb2RlKVxuICAgIH1