Private/Show-rwSpectreMenu.ps1
|
function Show-rwSpectreMenu { param( [string]$Title, [string[]]$Options, [ValidateSet('Single','Multiple','YesNo')] [string]$OutputMode, [int]$DefaultSelection = -1 ) try { switch ($OutputMode) { 'Single' { $prompt = [Spectre.Console.SelectionPrompt[string]]::new() $prompt.Title = "[cyan]$Title[/]" $prompt.PageSize = 15 foreach ($opt in $Options) { [void]$prompt.AddChoice($opt) } if ($DefaultSelection -ge 0 -and $DefaultSelection -lt $Options.Count) { $prompt.DefaultValue = $Options[$DefaultSelection] } $result = [Spectre.Console.AnsiConsole]::Prompt($prompt) Write-Verbose "Spectre Single selection returned: $result" return $result } 'Multiple' { $prompt = [Spectre.Console.MultiSelectionPrompt[string]]::new() $prompt.Title = "[cyan]$Title[/]" $prompt.PageSize = 15 foreach ($opt in $Options) { [void]$prompt.AddChoice($opt) } $results = [Spectre.Console.AnsiConsole]::Prompt($prompt) Write-Verbose "Spectre Multiple selection returned: $($results.Count) items" return @($results) } 'YesNo' { $result = [Spectre.Console.AnsiConsole]::Confirm("[cyan]$Title[/]", $true) Write-Verbose "Spectre YesNo returned: $result" return $result } } } catch { Write-Warning "Spectre rendering failed: $($_.Exception.Message). Returning null for fallback." Write-Verbose "Spectre error: $($_ | Out-String)" return $null } } |