Private/InputPrompt.ps1

function Read-InTUITextInput {
    <#
    .SYNOPSIS
        Styled text input prompt with default value support.
        Replaces Read-SpectreText.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Message,

        [Parameter()]
        [string]$DefaultAnswer = ''
    )

    $palette = Get-InTUIColorPalette
    $reset = $palette.Reset

    $ansiMessage = ConvertFrom-InTUIMarkup -Text $Message
    $defaultHint = if ($DefaultAnswer) { " $($palette.Dim)($DefaultAnswer)$reset" } else { '' }

    Write-Host "$ansiMessage$defaultHint`: " -NoNewline
    $userInput = Read-Host

    if ([string]::IsNullOrWhiteSpace($userInput) -and $DefaultAnswer) {
        return $DefaultAnswer
    }

    return $userInput
}

function Read-InTUIConfirmInput {
    <#
    .SYNOPSIS
        Y/N confirmation prompt. Replaces Read-SpectreConfirm.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Message,

        [Parameter()]
        [bool]$DefaultAnswer = $false
    )

    $palette = Get-InTUIColorPalette
    $reset = $palette.Reset

    $ansiMessage = ConvertFrom-InTUIMarkup -Text $Message
    $hint = if ($DefaultAnswer) { '[Y/n]' } else { '[y/N]' }

    Write-Host "$ansiMessage $($palette.Dim)$hint$reset " -NoNewline
    $userInput = Read-Host

    if ([string]::IsNullOrWhiteSpace($userInput)) {
        return $DefaultAnswer
    }

    return ($userInput.Trim().ToLower() -eq 'y')
}