| import chalk from 'chalk' | |
| type PlaceholderRendererProps = { | |
| placeholder?: string | |
| value: string | |
| showCursor?: boolean | |
| focus?: boolean | |
| terminalFocus: boolean | |
| invert?: (text: string) => string | |
| hidePlaceholderText?: boolean | |
| } | |
| export function renderPlaceholder({ | |
| placeholder, | |
| value, | |
| showCursor, | |
| focus, | |
| terminalFocus = true, | |
| invert = chalk.inverse, | |
| hidePlaceholderText = false, | |
| }: PlaceholderRendererProps): { | |
| renderedPlaceholder: string | undefined | |
| showPlaceholder: boolean | |
| } { | |
| let renderedPlaceholder: string | undefined = undefined | |
| if (placeholder) { | |
| if (hidePlaceholderText) { | |
| // Voice recording: show only the cursor, no placeholder text | |
| renderedPlaceholder = | |
| showCursor && focus && terminalFocus ? invert(' ') : '' | |
| } else { | |
| renderedPlaceholder = chalk.dim(placeholder) | |
| // Show inverse cursor only when both input and terminal are focused | |
| if (showCursor && focus && terminalFocus) { | |
| renderedPlaceholder = | |
| placeholder.length > 0 | |
| ? invert(placeholder[0]!) + chalk.dim(placeholder.slice(1)) | |
| : invert(' ') | |
| } | |
| } | |
| } | |
| const showPlaceholder = value.length === 0 && Boolean(placeholder) | |
| return { | |
| renderedPlaceholder, | |
| showPlaceholder, | |
| } | |
| } | |