Private/Initialize-PoshTuiConsoleForm.ps1

function Initialize-PoshTuiConsoleForm {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [PoshTuiConsoleForm]$InputObject
    )

    begin{
        $Form = $InputObject

        $Border = [PoshTuiMenuBorderDrawingGlyphsets]::new()."$($Form.UIBorderStyle)"
        $Color = $Form.UIColorscheme    

        $CharFillCount = ($Form.UIWidth - 2)
        $EmptyFill = (" " * $CharFillCount)
        $HorizontalFill = ($Border.Horizontal * $CharFillCount)
        $SeparatorFill = ($Border.Separator * $CharFillCount)
        $SeparatorAltFill = ($Border.AltSeparator * $CharFillCount)
        $AccentFill = ($Border.AccentChar * $CharFillCount)

        $MenuHeaderPadding = [Math]::Floor(($Form.UIWidth - $Form.MenuHeader.Length) / 2)
        $CenteredMenuHeader = $Form.MenuHeader.PadLeft($Form.MenuHeader.Length + $MenuHeaderPadding).PadRight($Form.UIWidth - 2)

        $MenuHelpPadding = [Math]::Floor(($Form.UIWidth - $Form.UIHelpMenuText.Length) / 2)
        $CenteredMenuHelp = $Form.UIHelpMenuText.PadLeft($Form.UIHelpMenuText.Length + $MenuHelpPadding).PadRight($Form.UIWidth - 2)

        $VersionSpacing = (" " * ($Form.UIWidth - 38))
        $CurrentVersion = $PoshTui_CurrentVersion

        $LineBorderTop = "$($Color.UIBorderColor)" + $Border.CornerTopL + $HorizontalFill + $Border.CornerTopR + "$($Color.Reset)"

        # Form Titlebar
        $LineFormTitle = "$($Color.UIBorderColor)" +  $Border.Vertical + " " + "$($Color.FormTitleColor)" + " [$($Form.FormTitle)]" + "$($Color.Reset)" + (" " * ($Form.UIWidth - ($Form.FormTitle.Length) - 6)) + "$($Color.UIBorderColor)" + $Border.Vertical + "$($Color.Reset)"
        

        # Separator
        $LineBorderSeparator = "$($Color.UIBorderColor)" + $Border.Vertical + $SeparatorFill + $Border.Vertical + "$($Color.Reset)"
        
        # Selection Menu Titlebar
        $LineMenuTitle = "$($Color.UIBorderColor)" + $Border.Vertical + "$($Color.MenuHeaderColor)" + $CenteredMenuHeader + "$($Color.UIBorderColor)" + $Border.Vertical + "$($Color.Reset)"
        
        # Empty line
        $LineEmpty = "$($Color.UIBorderColor)" + $Border.Vertical + $EmptyFill + $Border.Vertical + "$($Color.Reset)"

        # Alternate Separator
        $LineBorderSeparatorAlt = "$($Color.UIBorderColor)" + $Border.Vertical + $SeparatorAltFill + $Border.Vertical + "$($Color.Reset)"
        
        # Empty/Void Lines
        $LineBorderEmpty = "$($Color.UIBorderColor)" + $Border.Vertical + $EmptyFill + $Border.Vertical + "$($Color.Reset)"

        # Full Block Line
        $LineFullBlock = "$($Color.UIBorderColor)" + $Border.Vertical + "$($Color.UIAccentColor)" + $AccentFill + $($Color.UIBorderColor) + $Border.Vertical + "$($Color.Reset)"

        $LineMenuHelp = "$($Color.UIBorderColor)" + $Border.Vertical + "$($Color.UIMenuHelpTextColor)" + "$CenteredMenuHelp" + "$($Color.UIBorderColor)" + $Border.Vertical + "$($Color.Reset)"

     <# # PoshUI Version Information Line
        $LineBorderVersionInfo = "$($Color.UIBorderColor)" + $Border.Vertical + $VersionSpacing + "$($($Color.VersionColor))" + $CurrentVersion + "$($Color.Reset)" + "$($Color.UIBorderColor) " + $Border.Vertical + "$($Color.Reset)"
       #>
 
        # Bottom of Form Border
        $LineBorderBottom = "$($Color.UIBorderColor)" + $Border.CornerBtmL + $HorizontalFill + $Border.CornerBtmR + "$($Color.Reset)"
    }

    process{
        $SelectedIndex = 0

        [System.Console]::CursorVisible = $false

                # Drawing Form
        Write-Host "`e[2J" # Clears the screen
        Write-Host "`e[H" # Reset cursor position to 0,0
        
        Write-Host $LineBorderTop
        Write-Host $LineFormTitle
        Write-Host $LineBorderSeparator
        Write-Host $LineMenuTitle
        Write-Host $LineBorderSeparatorAlt
        Write-Host $LineEmpty

        # Render Options
        $SelectedIndex = 0

        Do{
                    # Drawing Form
            Write-Host "`e[2J" # Clears the screen
            Write-Host "`e[H" # Reset cursor position to 0,0
        
            Write-Host $LineBorderTop
            Write-Host $LineFormTitle
            Write-Host $LineBorderSeparator
            Write-Host $LineMenuTitle
            Write-Host $LineBorderSeparatorAlt
            Write-Host $LineEmpty
            

            For ($i = 0; $i -lt $Form.MenuItems.Count; $i++) {
                $FGColor = [Console]::ForegroundColor
                $BGColor = [Console]::BackgroundColor

                $MenuItem = $Form.MenuItems[$i]
                $MenuItemFocus = "$($MenuItem.DisplayName)"
                $MenuItemPadding = [math]::Floor(($Form.UIWidth - $MenuItem.DisplayName.Length) / 2)
                $centeredItem = $MenuItem.DisplayName.PadLeft($MenuItem.DisplayName.Length + $MenuItemPadding).PadRight($Form.UIWidth - 2)
                $MenuItemFocusPadding = [math]::Floor(($Form.UIWidth - $MenuItemFocus.Length) / 2)
                $centeredItemFocus = $MenuItemFocus.PadLeft($MenuItemFocus.Length + $MenuItemFocusPadding).PadRight($Form.UIWidth - 2)

                if ($i -eq $SelectedIndex) {
                    Write-Host "$($Color.UIBorderColor)$($Border.Vertical)" -NoNewLine
                    if ($Form.MenuItemFocusStyle -eq 'Highlight') {
                        Write-Host "$($Color.MenuItemHighlightColor)$CenteredItemFocus" -NoNewLine 
                    } elseif ($Form.MenuItemFocusStyle -eq 'HighlightInverted') {
                        Write-Host "$CenteredItemFocus" -ForegroundColor $BGColor -BackgroundColor $FGColor -NoNewLine  
                    }
                    Write-Host "$($Color.UIBorderColor)$($Border.Vertical)$($Color.Reset)"
                } else {
                    Write-Host "$($Color.UIBorderColor)$($Border.Vertical)$($Color.MenuItemColor)$CenteredItem$($Color.UIBorderColor)$($Border.Vertical)$($Color.Reset)"
                }
            }

            #HERE
            $DetailsTitlePadding = [math]::Floor(($Form.UIWidth - $Form.MenuItemDescriptionHeader.Length) / 2)
            $ItemInfoPadding = [math]::Floor(($Form.UIWidth - $Form.MenuItems[$selectedIndex].Description.Length) / 2)
            $centeredInfoTag = $Form.MenuItemDescriptionHeader.PadLeft($Form.MenuItemDescriptionHeader.Length + $DetailsTitlePadding).PadRight($Form.UIWidth - 2)
            $centeredInfo = ($Form.MenuItems[$selectedIndex].Description.PadLeft($Form.MenuItems[$selectedIndex].Description.Length + $ItemInfoPadding).PadRight($Form.UIWidth - 2))

            Write-Host $LineEmpty
            Write-Host $LineBorderSeparator
            Write-Host "$BorderColor$($Border.Vertical)$($Form.ItemInfoHeaderColor)$CenteredInfoTag$BorderColor$($Border.Vertical)$ColorReset"
            Write-Host $LineBorderSeparator
            Write-Host $LineEmpty
            Write-Host "$BorderColor$($Border.Vertical)$($Form.ItemInfoColor)$CenteredInfo$BorderColor$($Border.Vertical)$ColorReset"
            Write-Host $LineEmpty         
            Write-Host $LineBorderSeparator
            Write-Host $LineFullBlock
  # Write-Host $LineMenuHelp
   # Write-Host $LineFullBlock
            Write-Host $LineBorderSeparator
            Write-Host $LineEmpty
            Write-Host $LineBorderBottom   

            $Key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").VirtualKeyCode
        
            switch($Key){
                38{
                    #UP
                    $SelectedIndex = ($SelectedIndex - 1) % $Form.MenuItems.Count
                    if ($SelectedIndex -lt 0) {
                        $SelectedIndex = $Form.MenuItems.Count - 1
                    }
                }

                40{
                    #DOWN
                    $SelectedIndex = ($SelectedIndex + 1) % $Form.MenuItems.Count
                }

                13{
                    #ENTER
                    Clear-Host 
                    . $Form.MenuItems[$SelectedIndex].Action
                    return
                }
            }   

        } While($True)
    }
}