Private/UI/Show-DependencyList.ps1

function Show-DependencyList {
    param([GalleryModuleInfo]$ModuleInfo)

    $palette = Get-PSMBColorPalette
    $esc = [char]27
    $reset = "${esc}[0m"

    $innerWidth = Get-PSMBConsoleInnerWidth
    $border = ([char]0x2502)
    $hLine = ([char]0x2500)

    $amberRGB = @(168, 213, 162)
    $roseRGB = @(94, 234, 212)

    $fitText = {
        param([string]$Text)
        if ($null -eq $Text) { return '' }
        if ($Text.Length -le $innerWidth) { return $Text }
        if ($innerWidth -le 3) { return $Text.Substring(0, [Math]::Max(0, $innerWidth)) }
        return $Text.Substring(0, $innerWidth - 3) + '...'
    }

    $writePaddedLine = {
        param([string]$Text, [string]$Style)
        $clipped = & $fitText $Text
        $padded = $clipped.PadRight($innerWidth)
        Write-Host (' {0}{1}{2}{3}{4}{5}' -f $palette.Surface, $border, $Style, $padded, $reset, ('{0}{1}{2}' -f $palette.Surface, $border, $reset))
    }

    Write-Host ''

    # Top border
    $topLine = Get-PSMBGradientLine -Character $hLine -Length $innerWidth -StartRGB $amberRGB -EndRGB $roseRGB
    Write-Host (' {0}{1}{2}{3}' -f $palette.Surface, ([char]0x256D), $topLine, ([char]0x256E)) -NoNewline
    Write-Host $palette.Reset

    & $writePaddedLine -Text '' -Style $palette.Text

    # Title
    $titleText = ' Dependencies for {0}' -f $ModuleInfo.Name
    & $writePaddedLine -Text $titleText -Style ('{0}{1}' -f $palette.Bold, $palette.Amber)

    & $writePaddedLine -Text '' -Style $palette.Text

    # Separator
    $sepLine = Get-PSMBGradientLine -Character $hLine -Length $innerWidth -StartRGB $amberRGB -EndRGB $roseRGB
    Write-Host (' {0}{1}{2}{3}' -f $palette.Surface, ([char]0x251C), $sepLine, ([char]0x2524)) -NoNewline
    Write-Host $palette.Reset

    & $writePaddedLine -Text '' -Style $palette.Text

    if (-not $ModuleInfo.Dependencies -or $ModuleInfo.Dependencies.Count -eq 0) {
        & $writePaddedLine -Text ' No dependencies listed.' -Style $palette.Dim
    } else {
        & $writePaddedLine -Text (' Direct Dependencies: {0}' -f $ModuleInfo.Dependencies.Count) -Style ('{0}{1}' -f $palette.Bold, $palette.Text)
        & $writePaddedLine -Text '' -Style $palette.Text

        foreach ($dep in $ModuleInfo.Dependencies) {
            $installed = Get-Module -Name $dep -ListAvailable -ErrorAction SilentlyContinue
            if ($installed) {
                $depText = ' {0} {1} (installed v{2})' -f ([char]0x2714), $dep, $installed[0].Version
                & $writePaddedLine -Text $depText -Style $palette.Green
            } else {
                $depText = ' {0} {1} (not installed)' -f ([char]0x25CB), $dep
                & $writePaddedLine -Text $depText -Style $palette.Yellow
            }
        }

        & $writePaddedLine -Text '' -Style $palette.Text

        $notInstalled = $ModuleInfo.Dependencies | Where-Object {
            -not (Get-Module -Name $_ -ListAvailable -ErrorAction SilentlyContinue)
        }

        if ($notInstalled) {
            $impact = '+{0} additional module(s) will be installed' -f @($notInstalled).Count
            & $writePaddedLine -Text (' Install Impact: {0}' -f $impact) -Style $palette.Yellow
        } else {
            & $writePaddedLine -Text ' Install Impact: All dependencies already installed.' -Style $palette.Green
        }
    }

    & $writePaddedLine -Text '' -Style $palette.Text

    # Bottom border
    $bottomLine = Get-PSMBGradientLine -Character $hLine -Length $innerWidth -StartRGB $amberRGB -EndRGB $roseRGB
    Write-Host (' {0}{1}{2}{3}' -f $palette.Surface, ([char]0x2570), $bottomLine, ([char]0x256F)) -NoNewline
    Write-Host $palette.Reset

    Write-Host ''
}