public/session/Get-UiThemeTemplate.ps1

function Get-UiThemeTemplate {
    <#
    .SYNOPSIS
        Returns a template hashtable showing all available theme color keys.
    .DESCRIPTION
        Outputs a hashtable with all theme keys and their descriptions. Copy and modify
        this template to create custom themes with Register-UiTheme.
    .PARAMETER Type
        Generate template for 'Light' or 'Dark' base theme. Defaults to 'Dark'.
    .PARAMETER AsHashtable
        Return raw hashtable instead of formatted output. Useful for scripting.
    .EXAMPLE
        Get-UiThemeTemplate -Type Dark
    .EXAMPLE
        $template = Get-UiThemeTemplate -AsHashtable
        $template.Accent = '#FF6B6B'
        Register-UiTheme -Name 'MyTheme' -Colors $template
    #>

    [CmdletBinding()]
    param(
        [ValidateSet('Light', 'Dark')]
        [string]$Type = 'Dark',

        [switch]$AsHashtable
    )

    # All available theme keys with descriptions
    $template = [ordered]@{
        # Required: theme classification (affects default fallbacks)
        Type              = $Type
        DisabledOpacity   = if ($Type -eq 'Dark') { 0.35 } else { 0.2 }

        # Window backgrounds and text
        WindowBg          = if ($Type -eq 'Dark') { '#202020' } else { '#FAFAFA' }
        WindowFg          = if ($Type -eq 'Dark') { '#E0E0E0' } else { '#383A42' }

        # Controls (textboxes, dropdowns, listboxes)
        ControlBg         = if ($Type -eq 'Dark') { '#2D2D2D' } else { '#FFFFFF' }
        ControlFg         = if ($Type -eq 'Dark') { '#E0E0E0' } else { '#383A42' }

        # Buttons
        ButtonBg          = if ($Type -eq 'Dark') { '#383838' } else { '#FFFFFF' }
        ButtonFg          = if ($Type -eq 'Dark') { '#FFFFFF' } else { '#383A42' }
        ButtonHover       = if ($Type -eq 'Dark') { '#454545' } else { '#EAEAEB' }

        # Borders and separators
        Border            = if ($Type -eq 'Dark') { '#404040' } else { '#D3D3D4' }

        # Primary accent color (used for selection, links, checkmarks)
        Accent            = if ($Type -eq 'Dark') { '#78B802' } else { '#4078F2' }

        # Headers (window titlebar, DataGrid headers)
        HeaderBackground  = if ($Type -eq 'Dark') { '#1A1A1A' } else { '#EAEAEB' }
        HeaderForeground  = if ($Type -eq 'Dark') { '#FFFFFF' } else { '#383A42' }

        # Accent-colored headers (New-UiCard -Accent)
        AccentHeaderBg    = if ($Type -eq 'Dark') { '#78B802' } else { '#4078F2' }
        AccentHeaderFg    = if ($Type -eq 'Dark') { '#202020' } else { '#FFFFFF' }

        # Status colors
        Success           = if ($Type -eq 'Dark') { '#6CCB5F' } else { '#50A14F' }
        Warning           = if ($Type -eq 'Dark') { '#FCE100' } else { '#C18401' }
        Error             = if ($Type -eq 'Dark') { '#FF99A4' } else { '#E45649' }

        # DataGrid
        GridAlt           = if ($Type -eq 'Dark') { '#252525' } else { '#F5F5F5' }
        GridLine          = if ($Type -eq 'Dark') { '#3A3A3A' } else { '#E0E0E0' }

        # Disabled state (uses DisabledOpacity applied to control, not a separate background)
        Disabled          = if ($Type -eq 'Dark') { '#707070' } else { '#A0A1A7' }
        SecondaryText     = if ($Type -eq 'Dark') { '#A0A0A0' } else { '#696C77' }

        # Selection and hover
        ItemHover         = if ($Type -eq 'Dark') { '#3A3A3A' } else { '#EDF2FC' }
        Selection         = if ($Type -eq 'Dark') { '#78B802' } else { '#4078F2' }
        SelectionBackground = if ($Type -eq 'Dark') { '#9DD035' } else { '#3267D6' }
        SelectionFg       = if ($Type -eq 'Dark') { '#1A1A1A' } else { '#FFFFFF' }

        # Text search highlighting
        FindHighlight     = if ($Type -eq 'Dark') { '#4CC2FF' } else { '#E5C07B' }
        TextHighlight     = if ($Type -eq 'Dark') { '#78B802' } else { '#D5E4FC' }
        TextHighlightFg   = if ($Type -eq 'Dark') { '#FFFFFF' } else { '#2E4688' }

        # Tab control
        SelectedTabBg     = if ($Type -eq 'Dark') { '#383838' } else { '#E8EEFA' }
        TabHoverBg        = if ($Type -eq 'Dark') { '#383838' } else { '#E8EEFA' }

        # Status text in output panels
        ErrorText         = if ($Type -eq 'Dark') { '#F08080' } else { '#E45649' }
        WarningText       = if ($Type -eq 'Dark') { '#FFB366' } else { '#C18401' }
        SuccessText       = if ($Type -eq 'Dark') { '#90EE90' } else { '#50A14F' }

        # Hyperlinks
        Link              = if ($Type -eq 'Dark') { '#FFFFFF' } else { '#4078F2' }

        # GroupBox containers
        GroupBoxBg        = if ($Type -eq 'Dark') { '#252525' } else { '#FFFFFF' }
        GroupBoxBorder    = if ($Type -eq 'Dark') { '#3A3A3A' } else { '#E5E5E6' }
    }

    if ($AsHashtable) { return $template }

    # Format output as a copyable hashtable definition
    $output = "@{`n"
    foreach ($key in $template.Keys) {
        $value = $template[$key]
        if ($value -is [string]) {
            $output += " $key = '$value'`n"
        }
        else {
            $output += " $key = $value`n"
        }
    }
    $output += "}"
    
    Write-Host $output
}