public/prompts/Read-SpectrePause.ps1

function Read-SpectrePause {
    <#
    .SYNOPSIS
    Pauses the script execution and waits for user input to continue.

    .DESCRIPTION
    The Read-SpectrePause function pauses the script execution and waits for user input to continue. It displays a message prompting the user to press the enter key to continue. If the end of the console window is reached, the function clears the message and moves the cursor up to the previous line.

    .PARAMETER Message
    The message to display to the user. The default message is "[default value color]Press [accent color]enter[/] to continue[/]".

    .PARAMETER NoNewline
    Indicates whether to write a newline character before displaying the message. By default, a newline character is written.

    .EXAMPLE
    Read-SpectrePause -Message "Press the [red]enter[/] key to continue, when you press it this message will disappear..."
    # Type "↲" to dismiss the message

    .EXAMPLE
    Read-SpectrePause -Message "Press the [red]ANY[/] key to continue, when you press it this message will disappear..."
    # Type "x" to dismiss the message
    #>

    [Reflection.AssemblyMetadata("title", "Read-SpectrePause")]
    param (
        [string] $Message = "[$($script:DefaultValueColor.ToMarkup())]Press [$($script:AccentColor.ToMarkup())]<enter>[/] to continue[/]",
        [switch] $AnyKey,
        [switch] $NoNewline
    )

    $enterKey = 13

    # Drain input buffer so enter won't be pressed automatically
    Clear-InputQueue

    $returnLines = 2
    if (!$NoNewline) {
        Write-SpectreHost " "
        $returnLines++
    }
    Write-SpectreHost $Message -NoNewline
    do {
        $key = Read-ConsoleKey
        if($AnyKey) {
            break
        }
    } while (([int]$key.Key) -ne $enterKey)
    Write-SpectreHost ("`r" + (" " * $Message.Length))
    Write-SpectreHost ("`e[${returnLines}A" | Get-SpectreEscapedText)
}