Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ public static IServiceCollection AddFluentUIDocumentation(this IServiceCollectio
// Excludes the 'mcp' folder
services.AddSingleton(_ => new DocumentationService(["mcp"]));

// Icon catalog service (loaded from embedded all-icons.json)
services.AddSingleton<IconSynonymService>();
services.AddSingleton<IconService>();

return services;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@
Link="Documentation\Components\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

<!-- Include icon catalog as embedded resource -->
<ItemGroup>
<EmbeddedResource Include="all-icons.json" LogicalName="Microsoft.FluentUI.AspNetCore.McpServer.all-icons.json" />
Comment thread
AClerbois marked this conversation as resolved.
Outdated
</ItemGroup>

<!-- Code Analysis -->
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers">
Expand Down
39 changes: 39 additions & 0 deletions src/Tools/McpServer/Models/IconModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// ------------------------------------------------------------------------
// This file is licensed to you under the MIT License.
// ------------------------------------------------------------------------

namespace Microsoft.FluentUI.AspNetCore.McpServer.Models;

/// <summary>
/// Represents a Fluent UI icon with its available variants and sizes.
/// </summary>
/// <param name="Name">The icon name (e.g., "Bookmark", "Alert", "Add").</param>
/// <param name="Variants">Dictionary of variant names (e.g., "Filled", "Regular", "Light", "Color") to available sizes.</param>
public sealed record IconModel(string Name, IDictionary<string, IList<int>> Variants)
{
/// <summary>
/// Gets all variant names available for this icon.
/// </summary>
public IEnumerable<string> VariantNames => Variants.Keys;

/// <summary>
/// Gets all unique sizes available across all variants.
/// </summary>
public IEnumerable<int> AllSizes => Variants.Values.SelectMany(s => s).Distinct().OrderBy(s => s);

/// <summary>
/// Checks whether a specific variant and size combination is available.
/// </summary>
public bool HasVariantAndSize(string variant, int size)
{
return Variants.TryGetValue(variant, out var sizes) && sizes.Contains(size);
}

/// <summary>
/// Gets the sizes available for a specific variant.
/// </summary>
public IReadOnlyList<int> GetSizesForVariant(string variant)
{
return Variants.TryGetValue(variant, out var sizes) ? sizes.ToList() : [];
}
}
Loading
Loading