96bea1d478
Restyles the Blazor dashboard onto a portable token-based theme so it reads like an instrument panel: warm-paper background, hairline-ruled panels, IBM Plex type, monospace tabular numerics, and status carried by colour chips. Vendors theme.css + IBM Plex fonts, rewrites dashboard.css as a thin token-driven view layer, and swaps the Bootstrap navbar and status badges for the design-system app bar and chips. Also includes pending API-key management, Galaxy hierarchy projection, and constraint-enforcement work with their tests. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.1 KiB
C#
45 lines
1.1 KiB
C#
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace MxGateway.Server.Galaxy;
|
|
|
|
public static class GalaxyGlobMatcher
|
|
{
|
|
public static bool IsMatch(string value, string glob)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(glob))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return Regex.IsMatch(
|
|
value ?? string.Empty,
|
|
BuildRegex(glob),
|
|
RegexOptions.CultureInvariant | RegexOptions.IgnoreCase,
|
|
TimeSpan.FromMilliseconds(100));
|
|
}
|
|
|
|
private static string BuildRegex(string glob)
|
|
{
|
|
StringBuilder builder = new("^", glob.Length + 2);
|
|
foreach (char character in glob)
|
|
{
|
|
switch (character)
|
|
{
|
|
case '*':
|
|
builder.Append(".*");
|
|
break;
|
|
case '?':
|
|
builder.Append('.');
|
|
break;
|
|
default:
|
|
builder.Append(Regex.Escape(character.ToString()));
|
|
break;
|
|
}
|
|
}
|
|
|
|
builder.Append('$');
|
|
return builder.ToString();
|
|
}
|
|
}
|