feat(themes): theme registry with built-in lookup and fallback
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
using HellionChat.Themes.Builtin;
|
||||
|
||||
namespace HellionChat.Themes;
|
||||
|
||||
public sealed class ThemeRegistry
|
||||
{
|
||||
public const string DefaultSlug = HellionArctic.Slug;
|
||||
|
||||
private readonly Dictionary<string, Theme> _builtIns;
|
||||
private Theme _active;
|
||||
|
||||
public ThemeRegistry()
|
||||
{
|
||||
_builtIns = new Dictionary<string, Theme>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
{ HellionArctic.Slug, HellionArctic.Build() },
|
||||
{ Chat2Classic.Slug, Chat2Classic.Build() },
|
||||
{ EventHorizon.Slug, EventHorizon.Build() },
|
||||
{ MoonlitBloom.Slug, MoonlitBloom.Build() },
|
||||
{ MintGrove.Slug, MintGrove.Build() },
|
||||
};
|
||||
_active = _builtIns[DefaultSlug];
|
||||
}
|
||||
|
||||
public Theme Active => _active;
|
||||
|
||||
// Active-Lookup: liefert das angeforderte Theme oder fällt auf Hellion Arctic
|
||||
// zurück, wenn der Slug unbekannt ist.
|
||||
public Theme Get(string slug)
|
||||
{
|
||||
return _builtIns.TryGetValue(slug, out var theme)
|
||||
? theme
|
||||
: _builtIns[DefaultSlug];
|
||||
}
|
||||
|
||||
public IEnumerable<Theme> AllBuiltIns() => _builtIns.Values;
|
||||
|
||||
public void Switch(string slug)
|
||||
{
|
||||
_active = Get(slug);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user