public/Show-GlyThemeColor.ps1

function Show-GlyThemeColor {
  [CmdletBinding()]
  param(
    [Alias('Name')]
    [string] $Theme = $script:GlyConfiguration.Theme
  )

  $selectedTheme = Get-GlyTheme -Name $Theme
  $styles = [ordered]@{}
  $entries = @(
    [pscustomobject]@{ Matcher = 'Default'; Style = $selectedTheme.Default }

    foreach ($rule in $selectedTheme.Rules) {
      [pscustomobject]@{
        Matcher = ConvertTo-GlyMatcherLabel -Selector $rule.Selector
        Style   = $rule.Style
      }
    }
  )

  foreach ($entry in $entries) {
    $style = $entry.Style
    $signature = @(
      $style.Foreground,
      $style.Background,
      $style.Bold,
      $style.Italic,
      $style.Underline
    ) -join '|'

    if ($styles.Contains($signature)) {
      $styles[$signature].Matchers += $entry.Matcher
    }
    else {
      $styles[$signature] = [pscustomobject]@{
        Matchers = @($entry.Matcher)
        Style    = $style
      }
    }
  }

  $rows = foreach ($entry in $styles.Values) {
    [pscustomobject] [ordered]@{
      PSTypeName = 'gly.ThemeColorPreview'
      Matcher    = $entry.Matchers -join ', '
      Color      = ConvertTo-GlyStyleLabel -Style $entry.Style
      Preview    = ConvertTo-GlyPreviewText -Text 'Sample' -Style $entry.Style
    }
  }
  return $rows
}