(props: Props)
| 12 | }; |
| 13 | |
| 14 | export default function VimTextInput(props: Props): React.ReactNode { |
| 15 | const [theme] = useTheme(); |
| 16 | const isTerminalFocused = useTerminalFocus(); |
| 17 | |
| 18 | // Show hint when terminal regains focus and clipboard has an image |
| 19 | useClipboardImageHint(isTerminalFocused, !!props.onImagePaste); |
| 20 | |
| 21 | const vimInputState = useVimInput({ |
| 22 | value: props.value, |
| 23 | onChange: props.onChange, |
| 24 | onSubmit: props.onSubmit, |
| 25 | onExit: props.onExit, |
| 26 | onExitMessage: props.onExitMessage, |
| 27 | onHistoryReset: props.onHistoryReset, |
| 28 | onHistoryUp: props.onHistoryUp, |
| 29 | onHistoryDown: props.onHistoryDown, |
| 30 | onClearInput: props.onClearInput, |
| 31 | focus: props.focus, |
| 32 | mask: props.mask, |
| 33 | multiline: props.multiline, |
| 34 | cursorChar: props.showCursor ? ' ' : '', |
| 35 | highlightPastedText: props.highlightPastedText, |
| 36 | invert: isTerminalFocused ? chalk.inverse : (text: string) => text, |
| 37 | themeText: color('text', theme), |
| 38 | columns: props.columns, |
| 39 | maxVisibleLines: props.maxVisibleLines, |
| 40 | onImagePaste: props.onImagePaste, |
| 41 | disableCursorMovementForUpDownKeys: props.disableCursorMovementForUpDownKeys, |
| 42 | disableEscapeDoublePress: props.disableEscapeDoublePress, |
| 43 | externalOffset: props.cursorOffset, |
| 44 | onOffsetChange: props.onChangeCursorOffset, |
| 45 | inputFilter: props.inputFilter, |
| 46 | onModeChange: props.onModeChange, |
| 47 | onUndo: props.onUndo, |
| 48 | }); |
| 49 | |
| 50 | const { mode, setMode } = vimInputState; |
| 51 | |
| 52 | React.useEffect(() => { |
| 53 | if (props.initialMode && props.initialMode !== mode) { |
| 54 | setMode(props.initialMode); |
| 55 | } |
| 56 | }, [props.initialMode, mode, setMode]); |
| 57 | |
| 58 | return ( |
| 59 | <Box flexDirection="column"> |
| 60 | <BaseTextInput |
| 61 | inputState={vimInputState} |
| 62 | terminalFocus={isTerminalFocused} |
| 63 | highlights={props.highlights} |
| 64 | {...props} |
| 65 | /> |
| 66 | </Box> |
| 67 | ); |
| 68 | } |
nothing calls this directly
no test coverage detected