ktsu.ThemeProvider
2.0.3
Prefix Reserved
dotnet add package ktsu.ThemeProvider --version 2.0.3
NuGet\Install-Package ktsu.ThemeProvider -Version 2.0.3
<PackageReference Include="ktsu.ThemeProvider" Version="2.0.3" />
<PackageVersion Include="ktsu.ThemeProvider" Version="2.0.3" />Directory.Packages.props
<PackageReference Include="ktsu.ThemeProvider" />Project file
paket add ktsu.ThemeProvider --version 2.0.3
#r "nuget: ktsu.ThemeProvider, 2.0.3"
#:package ktsu.ThemeProvider@2.0.3
#addin nuget:?package=ktsu.ThemeProvider&version=2.0.3Install as a Cake Addin
#tool nuget:?package=ktsu.ThemeProvider&version=2.0.3Install as a Cake Tool
ktsu.ThemeProvider
A semantic color theming library for .NET applications with 44+ themes, intelligent color mapping, and framework integration.
License NuGet Version NuGet Version NuGet Downloads GitHub commit activity GitHub contributors GitHub Actions Workflow Status
Introduction
ktsu.ThemeProvider is a comprehensive theming system that uses semantic color specifications rather than arbitrary color names. Instead of hardcoding colors like "blue" or "red", you define colors by their purpose (Primary, Error, Warning) and priority level, and the library generates consistent, accessible color palettes. It includes 44 carefully crafted themes from popular color schemes and provides built-in Dear ImGui integration with an extensible architecture for other UI frameworks.
Features
- Semantic Color System: Define colors by purpose (Primary, Error, Warning, Neutral) and priority level rather than specific hues, enabling consistent theming across any UI framework
- 44 Built-in Themes: Includes Catppuccin, Tokyo Night, Gruvbox, Everforest, Nightfox, Kanagawa, PaperColor, Nord, Dracula, VSCode, One Dark, Monokai, and Nightfly theme families
- Centralized Theme Registry: Discover, filter, and instantiate themes by name, family, or light/dark classification with rich metadata
- Dear ImGui Integration: Companion package
ktsu.ThemeProvider.ImGuiprovides complete ImGui color palette mapping viaImGuiPaletteMapper - Perceptual Color Science: Uses Oklab perceptual color space for uniform color interpolation, extrapolation, and lightness-based priority mapping
- WCAG Accessibility: Built-in contrast ratio calculations, accessibility level checking (AA/AAA), and automatic color adjustment to meet WCAG standards
- Extensible Framework Mappers: Implement
IPaletteMapper<TColorKey, TColorValue>to integrate with any UI framework - Priority-Based Color Hierarchy: Seven priority levels (VeryLow to VeryHigh) automatically mapped to appropriate lightness values, with theme-aware ordering for dark and light themes
- Multi-Target Support: Targets .NET 5.0 through 10.0, plus .NET Standard 2.0 and 2.1
Installation
Package Manager Console
Install-Package ktsu.ThemeProvider
.NET CLI
dotnet add package ktsu.ThemeProvider
Package Reference
<PackageReference Include="ktsu.ThemeProvider" Version="x.y.z" />
For Dear ImGui integration, also install:
dotnet add package ktsu.ThemeProvider.ImGui
Usage Examples
Basic Example
using ktsu.ThemeProvider;
using static ktsu.ThemeProvider.ThemeRegistry;
// Create a theme directly
var theme = new Themes.Catppuccin.Mocha();
// Or find and create via the registry
ThemeInfo? themeInfo = FindTheme("Catppuccin Mocha");
ISemanticTheme? registryTheme = themeInfo?.CreateInstance();
// Map semantic color requests to actual colors
var requests = new[]
{
new SemanticColorRequest(SemanticMeaning.Primary, Priority.Medium),
new SemanticColorRequest(SemanticMeaning.Error, Priority.High),
new SemanticColorRequest(SemanticMeaning.Neutral, Priority.VeryLow),
};
IReadOnlyDictionary<SemanticColorRequest, Color> colors =
SemanticColorMapper.MapColors(requests, theme);
Theme Discovery with the Registry
using ktsu.ThemeProvider;
using static ktsu.ThemeProvider.ThemeRegistry;
// Browse all themes
IReadOnlyList<ThemeInfo> allThemes = AllThemes;
IReadOnlyList<ThemeInfo> darkThemes = DarkThemes;
IReadOnlyList<ThemeInfo> lightThemes = LightThemes;
// Browse by family
IReadOnlyList<string> families = Families;
IReadOnlyList<ThemeInfo> catppuccinThemes = GetThemesInFamily("Catppuccin");
// Find a specific theme by name (case-insensitive)
ThemeInfo? themeInfo = FindTheme("Tokyo Night Storm");
ISemanticTheme? theme = themeInfo?.CreateInstance();
// Create all theme instances at once
IReadOnlyList<ISemanticTheme> allInstances = CreateAllThemeInstances();
IReadOnlyList<ISemanticTheme> gruvboxInstances = CreateThemeInstancesInFamily("Gruvbox");
Complete Palette Generation
using ktsu.ThemeProvider;
using ktsu.Semantics.Color;
var theme = new Themes.Nord.Nord();
// Generate the complete palette (all meaning + priority combinations)
IReadOnlyDictionary<SemanticColorRequest, Color> completePalette =
SemanticColorMapper.MakeCompletePalette(theme);
// Access any color from the palette
var primaryMedium = completePalette[new SemanticColorRequest(SemanticMeaning.Primary, Priority.Medium)];
string hex = primaryMedium.ToHex();
Dear ImGui Integration
using ktsu.ThemeProvider;
using ktsu.ThemeProvider.ImGui;
using Hexa.NET.ImGui;
// Create theme and mapper
var theme = new Themes.Catppuccin.Mocha();
var mapper = new ImGuiPaletteMapper();
// Get complete ImGui color palette
IReadOnlyDictionary<ImGuiCol, Vector4> imguiColors = mapper.MapTheme(theme);
// Apply to ImGui style
var style = ImGui.GetStyle();
foreach ((ImGuiCol colorKey, Vector4 colorValue) in imguiColors)
{
style.Colors[(int)colorKey] = colorValue;
}
Accessibility Checking
using ktsu.ThemeProvider;
using ktsu.Semantics.Color;
Color foreground = Color.FromHex("#FFFFFF");
Color background = Color.FromHex("#1E1E2E");
// Calculate contrast ratio (1.0 .. 21.0)
double contrastRatio = foreground.ContrastRatio(background);
// Check WCAG compliance
AccessibilityLevel level = foreground.AccessibilityLevelAgainst(background, largeText: false);
// Adjust a color to meet accessibility requirements
Color adjusted = foreground.AdjustForContrast(background, AccessibilityLevel.AA);
// Create perceptually uniform gradients
IReadOnlyList<Color> gradient = foreground.Gradient(background, steps: 10);
Advanced Usage
Creating Custom Framework Mappers
Implement IPaletteMapper<TColorKey, TColorValue> to integrate with any UI framework:
using ktsu.ThemeProvider;
public class MyFrameworkMapper : IPaletteMapper<MyColorEnum, MyColorType>
{
public string FrameworkName => "My UI Framework";
public IReadOnlyDictionary<MyColorEnum, MyColorType> MapTheme(ISemanticTheme theme)
{
var requests = new Dictionary<MyColorEnum, SemanticColorRequest>
{
{ MyColorEnum.Button, new(SemanticMeaning.Primary, Priority.Medium) },
{ MyColorEnum.Background, new(SemanticMeaning.Neutral, Priority.VeryLow) },
{ MyColorEnum.ErrorText, new(SemanticMeaning.Error, Priority.High) },
};
var palette = SemanticColorMapper.MapColors(requests.Values, theme);
var result = new Dictionary<MyColorEnum, MyColorType>();
foreach (var kvp in requests)
{
if (palette.TryGetValue(kvp.Value, out var color))
{
result[kvp.Key] = ConvertToMyColor(color.RgbValue);
}
}
return result;
}
}
Creating Custom Themes
Implement ISemanticTheme with colors from your palette:
using ktsu.ThemeProvider;
using ktsu.Semantics.Color;
using System.Collections.ObjectModel;
public class MyCustomTheme : ISemanticTheme
{
private static readonly Color Background = Color.FromHex("#1A1B26");
private static readonly Color Foreground = Color.FromHex("#C0CAF5");
private static readonly Color Blue = Color.FromHex("#7AA2F7");
private static readonly Color Green = Color.FromHex("#9ECE6A");
private static readonly Color Red = Color.FromHex("#F7768E");
public bool IsDarkTheme => true;
public Dictionary<SemanticMeaning, Collection<Color>> SemanticMapping { get; } = new()
{
{ SemanticMeaning.Neutral, new() { Background, Foreground } },
{ SemanticMeaning.Primary, new() { Blue } },
{ SemanticMeaning.Success, new() { Green } },
{ SemanticMeaning.Error, new() { Red } },
};
}
API Reference
SemanticMeaning (enum)
Defines semantic color purposes.
| Value | Description |
|---|---|
Neutral |
Backgrounds, borders, inactive elements |
Primary |
Main brand/accent colors |
Alternate |
Secondary accent, binary choice emphasis |
Success |
Successful operations, confirmations |
CallToAction |
Important buttons and highlights demanding attention |
Information |
Informational content, help text |
Caution |
Cautionary content needing attention |
Warning |
Warning states, potentially problematic |
Error |
Error states, incorrect conditions |
Failure |
Failed operations (distinct from error) |
Debug |
Debug/development information |
Priority (enum)
Controls color intensity and lightness within a semantic meaning.
| Value | Description |
|---|---|
VeryLow |
Lowest intensity (backgrounds in dark themes, lightest in light themes) |
Low |
Low intensity |
MediumLow |
Below-medium intensity |
Medium |
Default intensity level |
MediumHigh |
Above-medium intensity |
High |
High intensity |
VeryHigh |
Highest intensity (foreground text in dark themes, darkest in light themes) |
SemanticColorRequest
A readonly record struct combining a SemanticMeaning and Priority to specify a color.
| Property | Type | Description |
|---|---|---|
Meaning |
SemanticMeaning |
The semantic purpose of the color |
Priority |
Priority |
The intensity/lightness level |
SemanticColorMapper
Static class that maps semantic color requests to actual colors.
Methods
| Name | Return Type | Description |
|---|---|---|
MapColors(requests, theme) |
IReadOnlyDictionary<SemanticColorRequest, Color> |
Maps a collection of requests to colors using the theme |
MakeCompletePalette(theme) |
IReadOnlyDictionary<SemanticColorRequest, Color> |
Generates all possible meaning+priority combinations for a theme |
ThemeRegistry
Static class providing centralized theme discovery and management.
Properties
| Name | Type | Description |
|---|---|---|
AllThemes |
IReadOnlyList<ThemeInfo> |
All 44 registered themes with metadata |
DarkThemes |
IReadOnlyList<ThemeInfo> |
All dark themes |
LightThemes |
IReadOnlyList<ThemeInfo> |
All light themes |
Families |
IReadOnlyList<string> |
All theme family names |
ThemesByFamily |
IReadOnlyDictionary<string, IReadOnlyList<ThemeInfo>> |
Themes grouped by family |
Methods
| Name | Return Type | Description |
|---|---|---|
FindTheme(name) |
ThemeInfo? |
Finds a theme by name (case-insensitive) |
GetThemesInFamily(family) |
IReadOnlyList<ThemeInfo> |
Gets all themes in a family |
CreateAllThemeInstances() |
IReadOnlyList<ISemanticTheme> |
Creates instances of all themes |
CreateThemeInstancesInFamily(family) |
IReadOnlyList<ISemanticTheme> |
Creates instances of themes in a family |
Color types (ktsu.Semantics.Color)
Colors are represented by the Color type from the ktsu.Semantics.Color package (linear RGB + alpha, gamma-correct). It is the currency type for themes (ISemanticTheme.SemanticMapping) and SemanticColorMapper.
Common members:
| Member | Description |
|---|---|
Color.FromHex(hex) |
Creates a color from an sRGB hex string (proper sRGB→linear decode) |
ToHex() / ToBytes() |
Converts back to an sRGB hex string / 8-bit channels |
ToSrgbVector4() |
sRGB-encoded Vector4 for UI frameworks (e.g. ImGui) |
ToOklab() / ToOklch() |
Perceptual (Oklab / polar LCh) representations |
ContrastRatio(other) |
WCAG contrast ratio (1:1 .. 21:1) |
AccessibilityLevelAgainst(bg, largeText) |
WCAG AA/AAA compliance (returns AccessibilityLevel) |
AdjustForContrast(bg, level, largeText) |
Adjusts lightness to meet a WCAG level |
DistanceTo(other) |
Perceptual (Oklab) distance |
MixOklab(other, t) / Gradient(to, steps) |
Perceptual blend / uniform gradient |
Migration note (v2.0): ThemeProvider's in-house
RgbColor,SRgbColor,OklabColor,PerceptualColor, andColorMathtypes were removed in favour ofktsu.Semantics.Color. This also fixed a long-standing sRGB-as-linear gamma bug — base theme colors render identically, but the semantic mapper's derived colors and accessibility numbers are now computed correctly.
IPaletteMapper<TColorKey, TColorValue>
Interface for mapping semantic themes to framework-specific color palettes.
Properties
| Name | Type | Description |
|---|---|---|
FrameworkName |
string |
The name of the target UI framework |
Methods
| Name | Return Type | Description |
|---|---|---|
MapTheme(theme) |
IReadOnlyDictionary<TColorKey, TColorValue> |
Maps a theme to a framework-specific palette |
Available Themes
| Family | Variants | Description |
|---|---|---|
| Catppuccin | Latte, Frappe, Macchiato, Mocha | Warm pastel themes with excellent readability |
| Tokyo Night | Night, Storm, Day | Clean themes inspired by Tokyo's neon nights |
| Gruvbox | Dark, Dark Hard, Dark Soft, Light, Light Hard, Light Soft | Retro groove colors with warm backgrounds |
| Everforest | Dark, Dark Hard, Dark Soft, Light, Light Hard, Light Soft | Green forest colors for comfortable viewing |
| Nightfox | Nightfox, Dayfox, Duskfox, Nordfox, Terafox, Carbonfox, Dawnfox | Fox-inspired vibrant themes |
| Kanagawa | Wave, Dragon, Lotus | Japanese-inspired themes |
| PaperColor | Light, Dark | Material Design inspired themes |
| VSCode | Dark, Light | Microsoft VSCode default themes |
| Nord | - | Arctic-inspired theme with cool blue tones |
| Dracula | - | Gothic theme with purple and pink accents |
| One Dark | - | Atom's iconic One Dark theme |
| Monokai | - | Classic Monokai with vibrant colors |
| Nightfly | - | Dark blue theme inspired by night flying |
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
License
This project is licensed under the MIT License. See the LICENSE.md file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- ktsu.Semantics.Color (>= 2.5.0)
- System.Numerics.Vectors (>= 4.6.1)
-
.NETStandard 2.1
- ktsu.Semantics.Color (>= 2.5.0)
-
net10.0
- ktsu.Semantics.Color (>= 2.5.0)
-
net5.0
- ktsu.Semantics.Color (>= 2.5.0)
-
net6.0
- ktsu.Semantics.Color (>= 2.5.0)
-
net7.0
- ktsu.Semantics.Color (>= 2.5.0)
-
net8.0
- ktsu.Semantics.Color (>= 2.5.0)
-
net9.0
- ktsu.Semantics.Color (>= 2.5.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on ktsu.ThemeProvider:
| Package | Downloads |
|---|---|
|
ktsu.ImGuiStyler
A library for expressively styling ImGui.NET interfaces. |
|
|
ktsu.ThemeProvider.ImGui
A semantic color theming library for .NET applications that provides 44+ beautiful themes with intelligent color mapping, framework integration, and accessibility-first design. Features include theme discovery through a centralized registry, semantic color specifications (meaning + priority instead of hardcoded colors), built-in Dear ImGui support, and advanced color science with perceptually uniform color spaces. |
|
|
ktsu.ImGui.Styler
A powerful styling library for ImGui.NET interfaces featuring 50+ built-in themes (Catppuccin, Tokyo Night, Gruvbox, Dracula, Nord, and more), interactive theme browser, scoped styling system for colors and style variables, advanced color manipulation with hex support and accessibility features, automatic content alignment and centering, semantic text colors, button alignment, and indentation utilities. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.3 | 0 | 7/2/2026 |
| 2.0.2 | 54 | 7/1/2026 |
| 2.0.1 | 93 | 6/30/2026 |
| 2.0.0 | 200 | 6/30/2026 |
| 1.0.25 | 118 | 6/29/2026 |
| 1.0.24 | 168 | 6/28/2026 |
| 1.0.23 | 117 | 6/28/2026 |
| 1.0.22 | 274 | 6/25/2026 |
| 1.0.21 | 230 | 6/22/2026 |
| 1.0.20 | 159 | 6/15/2026 |
| 1.0.19 | 141 | 6/13/2026 |
| 1.0.18 | 354 | 6/12/2026 |
| 1.0.17 | 1,243 | 2/19/2026 |
| 1.0.17-pre.1 | 88 | 2/17/2026 |
| 1.0.16 | 172 | 2/16/2026 |
| 1.0.16-pre.1 | 79 | 2/16/2026 |
| 1.0.15 | 176 | 2/14/2026 |
| 1.0.14 | 167 | 2/14/2026 |
| 1.0.14-pre.7 | 83 | 2/6/2026 |
| 1.0.14-pre.6 | 81 | 2/5/2026 |
## v2.0.3 (patch)
Changes since v2.0.2:
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.0.2 (patch)
Changes since v2.0.1:
- Bump the ktsu group with 11 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.0.1 (patch)
Changes since v2.0.0:
- Bump the ktsu group with 10 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v2.0.0 (major)
Changes since v1.0.0:
- [major] feat(color)!: complete ThemeProvider migration to ktsu.Semantics.Color ([@matt-edmondson](https://github.com/matt-edmondson))
- test(color): add ThemeProvider characterization/invariant tests ([@matt-edmondson](https://github.com/matt-edmondson))
- feat(color)!: migrate ThemeProviderDemo to Color ([@matt-edmondson](https://github.com/matt-edmondson))
- feat(color)!: migrate ThemeProvider.ImGui palette mapper to Color ([@matt-edmondson](https://github.com/matt-edmondson))
- feat(color)!: migrate ThemeProvider core to ktsu.Semantics.Color ([@matt-edmondson](https://github.com/matt-edmondson))
- chore: remove unused SourceLink package versions ([@matt-edmondson](https://github.com/matt-edmondson))
- chore: remove SourceLink package references from csproj files ([@matt-edmondson](https://github.com/matt-edmondson))
- Update documentation in CLAUDE.md and README.md; add TAGS.md for semantic keywords ([@matt-edmondson](https://github.com/matt-edmondson))
- Add SonarLint configuration for connected mode ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove legacy build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor null check in MapTheme method to use Ensure.NotNull ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate to dotnet 10 ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor SonarQube scanner steps and update coverage report paths in CI workflow ([@matt-edmondson](https://github.com/matt-edmondson))
- Update sdk ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package versions and refactor theme provider interfaces ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ktsu.ImGuiApp package version to 2.1.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor method name for palette generation in SemanticColorMapper ([@matt-edmondson](https://github.com/matt-edmondson))
- Add complete palette generation and improve ImGui color mapping ([@matt-edmondson](https://github.com/matt-edmondson))
- [patch] Force patch ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package versions and UI color mappings ([@matt-edmondson](https://github.com/matt-edmondson))
- Upgrade ktsu.Sdk to version 1.49.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ThemeRegistry and update documentation for ThemeProvider ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new themes: Everforest Dark Hard, Everforest Dark Soft, Everforest Light Hard, and Everforest Light Soft ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Catppuccin, Dracula, and other themes to streamline Neutrals collection ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new themes: Dracula, Everforest, Gruvbox, Monokai, Nightfly, One Dark, Tokyo Night, and VSCode ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.25 (patch)
Changes since v1.0.24:
- Bump the ktsu group with 1 update ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.24 (patch)
Changes since v1.0.23:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.23 (patch)
Changes since v1.0.22:
- chore: remove unused SourceLink package versions ([@matt-edmondson](https://github.com/matt-edmondson))
- chore: remove SourceLink package references from csproj files ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.22 (patch)
Changes since v1.0.21:
- Bump the ktsu group with 1 update ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump Polyfill from 10.10.0 to 10.11.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.21 (patch)
Changes since v1.0.20:
- Bump the ktsu group with 8 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.20 (patch)
Changes since v1.0.19:
- Bump Polyfill from 10.8.1 to 10.10.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 9 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.19 (patch)
Changes since v1.0.18:
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.18 (patch)
Changes since v1.0.17:
- Sync .github\workflows\update-sdks.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump the ktsu group with 1 update ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.8.0 to 10.8.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 4 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.7.2 to 10.8.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.7.0 to 10.7.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 1 update ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 1 update ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.6.0 to 10.7.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.5.1 to 10.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.Sdk from 4.2.2 to 4.2.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the microsoft group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.5.0 to 10.5.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.4.0 to 10.5.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 9.7.7 to 10.4.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Microsoft.SourceLink.AzureRepos.Git and Microsoft.SourceLink.GitHub ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump System.Numerics.Vectors from 4.6.0 to 4.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.Sdk from 4.1.0 to 4.2.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 5 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.17 (patch)
Changes since v1.0.16:
- Update documentation in CLAUDE.md and README.md; add TAGS.md for semantic keywords ([@matt-edmondson](https://github.com/matt-edmondson))
- Add SonarLint configuration for connected mode ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.17-pre.1 (prerelease)
No significant changes detected since v1.0.17.
## v1.0.16 (patch)
Changes since v1.0.15:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.16-pre.1 (prerelease)
No significant changes detected since v1.0.16.
## v1.0.15 (patch)
Changes since v1.0.14:
- Remove legacy build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.14 (patch)
Changes since v1.0.13:
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.7 (prerelease)
Changes since v1.0.14-pre.6:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.6 (prerelease)
Changes since v1.0.14-pre.5:
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.5 (prerelease)
Changes since v1.0.14-pre.4:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.4 (prerelease)
Changes since v1.0.14-pre.3:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.3 (prerelease)
Changes since v1.0.14-pre.2:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.2 (prerelease)
Changes since v1.0.14-pre.1:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.14-pre.1 (prerelease)
No significant changes detected since v1.0.14.
## v1.0.13 (patch)
Changes since v1.0.12:
- Remove .github\workflows\project.yml ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.12 (patch)
Changes since v1.0.11:
- Refactor null check in MapTheme method to use Ensure.NotNull ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.11 (patch)
Changes since v1.0.10:
- Migrate to dotnet 10 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.11-pre.4 (prerelease)
Changes since v1.0.11-pre.3:
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\update-sdks.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.11-pre.3 (prerelease)
Changes since v1.0.11-pre.2:
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.11-pre.2 (prerelease)
Changes since v1.0.11-pre.1:
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.11-pre.1 (prerelease)
No significant changes detected since v1.0.11.
## v1.0.10 (patch)
Changes since v1.0.9:
- Refactor SonarQube scanner steps and update coverage report paths in CI workflow ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.9 (patch)
Changes since v1.0.8:
- Update sdk ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package versions and refactor theme provider interfaces ([@matt-edmondson](https://github.com/matt-edmondson))
- Update ktsu.ImGuiApp package version to 2.1.0 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.9-pre.3 (prerelease)
Changes since v1.0.9-pre.2:
- Update package versions and refactor theme provider interfaces ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.9-pre.2 (prerelease)
Changes since v1.0.9-pre.1:
- Bump the ktsu group with 1 update ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.0.9-pre.1 (prerelease)
No significant changes detected since v1.0.9.
## v1.0.8 (patch)
Changes since v1.0.7:
- Refactor method name for palette generation in SemanticColorMapper ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.7 (patch)
Changes since v1.0.6:
- Add complete palette generation and improve ImGui color mapping ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.6 (patch)
Changes since v1.0.5:
- [patch] Force patch ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package versions and UI color mappings ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.6-pre.1 (prerelease)
No significant changes detected since v1.0.6.
## v1.0.5 (patch)
Changes since v1.0.4:
- Upgrade ktsu.Sdk to version 1.49.0 ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.4 (patch)
Changes since v1.0.3:
- Add ThemeRegistry and update documentation for ThemeProvider ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.3 (patch)
Changes since v1.0.2:
- Add new themes: Everforest Dark Hard, Everforest Dark Soft, Everforest Light Hard, and Everforest Light Soft ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.2 (patch)
Changes since v1.0.1:
- Refactor Catppuccin, Dracula, and other themes to streamline Neutrals collection ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.1 (patch)
Changes since v1.0.0:
- Add new themes: Dracula, Everforest, Gruvbox, Monokai, Nightfly, One Dark, Tokyo Night, and VSCode ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0 (major)
- Add Catppuccin themes: Frappe, Latte, and Macchiato implementations ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ThemeProviderDemo to enhance semantic color grid rendering ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiPaletteMapper for improved priority distribution and contrast ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor SemanticColorMapper and ThemeProviderDemo for improved lightness calculations and semantic color handling ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance SemanticColorMapper and ImGuiPaletteMapper for improved color contrast and priority handling ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance SemanticColorMapper and ThemeProviderDemo for complete semantic color mapping ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance color extrapolation logic in SemanticColorMapper ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor SemanticColorMapper for improved lightness-based color mapping ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ColorRange and SemanticColorMapper classes for enhanced color interpolation and mapping ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new semantic color system and Catppuccin Mocha theme implementation ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor semantic color specifications to remove 'IsPrimary' property ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiPaletteMapper to enhance semantic color usage ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement ImGui palette mapping and enhance semantic color integration ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ThemeProviderDemo to fully integrate semantic color system ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ThemeProvider to implement semantic color system and Catppuccin Mocha theme ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance ThemeProviderDemo with UI improvements and semantic palette features ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Catppuccin Mocha theme implementation and color management utilities ([@matt-edmondson](https://github.com/matt-edmondson))