dashboards/pages/b_gallery.ps1

$b_gallery = New-UDPage -Name 'Saved Themes' -Url '/themes' -Icon (New-UDIcon -Icon 'Palette') -Content {
    New-UDDynamic -Id 'chameleonGallery' -Content {
        $Saved = @(Get-UDChameleonTheme)

        if (-not $Saved.Count) {
            New-UDAlert -Severity info -Text 'No saved themes yet. Build one on the Builder page and click Save.'
            return
        }

        New-UDTypography -Text 'Click a theme to try it on this app.' -Variant body2
        New-UDThemePicker -Id 'chameleonGalleryPicker' -Themes $Saved -Variant grid

        $Columns = @(
            New-UDTableColumn -Property Name -Title 'Name'
            New-UDTableColumn -Property Modified -Title 'Modified (UTC)'
            New-UDTableColumn -Property Actions -Title 'Actions' -OnRender {
                $ThemeName = $EventData.Name
                New-UDStack -Direction row -Spacing 1 -Children {
                    New-UDButton -Text 'Edit' -Size small -Variant outlined -OnClick {
                        Invoke-UDRedirect -Url "/builder?theme=$([uri]::EscapeDataString($ThemeName))"
                    }
                    New-UDButton -Text 'Copy PowerShell' -Size small -Variant outlined -OnClick {
                        $Saved = Get-UDChameleonTheme -Name ([WildcardPattern]::Escape($ThemeName)) | Select-Object -First 1
                        $Json = $Saved.Theme | ConvertTo-Json -Depth 64
                        Set-UDClipboard -Data "`$Theme = '$($Json -replace "'", "''")' | ConvertFrom-Json -AsHashtable"
                        Show-UDToast -Message "Copied $ThemeName"
                    }
                    New-UDButton -Text 'Delete' -Size small -Variant outlined -Color error -OnClick {
                        Remove-UDChameleonTheme -Name $ThemeName -Confirm:$false
                        Show-UDToast -Message "Deleted $ThemeName"
                        Sync-UDElement -Id 'chameleonGallery'
                    }
                }
            }
        )

        $Table = @{
            Id = 'chameleonTable'
            Title = 'Saved themes'
            Data = @($Saved | Select-Object -Property Name, Modified)
            Columns = $Columns
            ShowPagination = $true
            PageSize = 10
        }
        New-UDTable @Table
    }
}