mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-20 07:39:09 +08:00
Refactor IconProvider
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
||||
<PropertyGroup>
|
||||
<NoWarn>$(NoWarn);CS7035</NoWarn>
|
||||
<AvaloniaVersion>11.3.9</AvaloniaVersion>
|
||||
<AtomUIVersion>5.1.2-build.2</AtomUIVersion>
|
||||
<AtomUIVersion>5.1.2-build.3</AtomUIVersion>
|
||||
<AtomUINativeVersion>1.0.1</AtomUINativeVersion>
|
||||
<AtomUIGalleryVersion>5.1.2</AtomUIGalleryVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using AtomUI.Controls;
|
||||
|
||||
@@ -14,27 +13,17 @@ public class GalleryDesktopIconProvider : IconProvider<DesktopIconKind>
|
||||
: base(kind)
|
||||
{
|
||||
}
|
||||
|
||||
protected override Icon GetIcon(DesktopIconKind kind)
|
||||
|
||||
protected override Type GetTypeForKind(DesktopIconKind kind)
|
||||
{
|
||||
try
|
||||
var typeName = $"AtomUIGallery.Icons.Desktop.{kind.ToString()}";
|
||||
|
||||
var type = Type.GetType(typeName)
|
||||
?? Assembly.GetExecutingAssembly().GetType(typeName);
|
||||
if (type == null)
|
||||
{
|
||||
var fullTypeName = $"AtomUIGallery.Icons.Desktop.{kind.ToString()}";
|
||||
var type = Type.GetType(fullTypeName)
|
||||
?? Assembly.GetExecutingAssembly().GetType(fullTypeName);
|
||||
|
||||
if (type == null)
|
||||
{
|
||||
throw new InvalidOperationException($"{fullTypeName} not exist");
|
||||
}
|
||||
|
||||
var icon = (Icon?)Activator.CreateInstance(type);
|
||||
Debug.Assert(icon != null);
|
||||
return icon;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException($"create icon {kind.ToString()} failed", ex);
|
||||
throw new InvalidOperationException($"Type {typeName} does not exist");
|
||||
}
|
||||
return type;
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,11 @@
|
||||
<Setter Property="FillBrush" Value="{DynamicResource {x:Static atom:SharedTokenKey.ColorInfoBg}}" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="^[IconTheme=MultiColor]">
|
||||
<Setter Property="StrokeBrush" Value="{DynamicResource {x:Static atom:SharedTokenKey.ColorIcon}}" />
|
||||
<Setter Property="FillBrush" Value="{DynamicResource {x:Static atom:SharedTokenKey.ColorPrimary}}" />
|
||||
</Style>
|
||||
|
||||
<Setter Property="SecondaryFillBrush" Value="{DynamicResource {x:Static atom:IconTokenKey.SecondaryFillColor}}" />
|
||||
<Setter Property="SecondaryStrokeBrush" Value="{DynamicResource {x:Static atom:IconTokenKey.SecondaryStrokeColor}}" />
|
||||
<Setter Property="FillAnimationDuration" Value="{DynamicResource {x:Static atom:SharedTokenKey.MotionDurationMid}}" />
|
||||
|
||||
@@ -23,5 +23,6 @@ public enum IconBrushType
|
||||
Fill,
|
||||
SecondaryStroke,
|
||||
SecondaryFill,
|
||||
Fallback
|
||||
Fallback,
|
||||
None
|
||||
}
|
||||
@@ -169,8 +169,8 @@ public abstract class Icon : PathIcon, ICustomHitTest, IMotionAwareControl
|
||||
|
||||
private Animation? _animation;
|
||||
private CancellationTokenSource? _animationCancellationTokenSource;
|
||||
private readonly IBrush?[] _brushes = new IBrush[5];
|
||||
private readonly Pen?[] _pens = new Pen?[5];
|
||||
protected readonly IBrush?[] DrawBrushes = new IBrush[5];
|
||||
protected readonly Pen?[] DrawPens = new Pen?[5];
|
||||
|
||||
static Icon()
|
||||
{
|
||||
@@ -195,17 +195,28 @@ public abstract class Icon : PathIcon, ICustomHitTest, IMotionAwareControl
|
||||
var secondaryFillIndex = (int)IconBrushType.SecondaryFill;
|
||||
var fallbackIndex = (int)IconBrushType.Fallback;
|
||||
|
||||
_brushes[strokeIndex] = StrokeBrush;
|
||||
_brushes[fillIndex] = FillBrush;
|
||||
_brushes[secondaryStrokeIndex] = SecondaryStrokeBrush;
|
||||
_brushes[secondaryFillIndex] = SecondaryFillBrush;
|
||||
_brushes[fallbackIndex] = FallbackBrush;
|
||||
var strokeBrush = ProcessBrush(StrokeBrush);
|
||||
var fillBrush = ProcessBrush(FillBrush);
|
||||
var secondaryStrokeBrush = ProcessBrush(SecondaryStrokeBrush);
|
||||
var secondaryFillBrush = ProcessBrush(SecondaryFillBrush);
|
||||
var fallbackBrush = ProcessBrush(FallbackBrush);
|
||||
|
||||
_pens[strokeIndex] = new Pen(StrokeBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
_pens[fillIndex] = new Pen(FillBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
_pens[secondaryStrokeIndex] = new Pen(SecondaryStrokeBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
_pens[secondaryFillIndex] = new Pen(SecondaryFillBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
_pens[fallbackIndex] = new Pen(FallbackBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
DrawBrushes[strokeIndex] = strokeBrush;
|
||||
DrawBrushes[fillIndex] = fillBrush;
|
||||
DrawBrushes[secondaryStrokeIndex] = secondaryStrokeBrush;
|
||||
DrawBrushes[secondaryFillIndex] = secondaryFillBrush;
|
||||
DrawBrushes[fallbackIndex] = fallbackBrush;
|
||||
|
||||
DrawPens[strokeIndex] = new Pen(strokeBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
DrawPens[fillIndex] = new Pen(fillBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
DrawPens[secondaryStrokeIndex] = new Pen(secondaryStrokeBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
DrawPens[secondaryFillIndex] = new Pen(secondaryFillBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
DrawPens[fallbackIndex] = new Pen(fallbackBrush, StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
}
|
||||
|
||||
protected virtual IBrush? ProcessBrush(IBrush? brush)
|
||||
{
|
||||
return brush;
|
||||
}
|
||||
|
||||
private void ConfigureTransitions(bool force)
|
||||
@@ -298,14 +309,18 @@ public abstract class Icon : PathIcon, ICustomHitTest, IMotionAwareControl
|
||||
|
||||
private void HandleBrushChanged(IconBrushType brushType, IBrush? brush)
|
||||
{
|
||||
if (brushType == IconBrushType.None)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var brushIndex = (int)brushType;
|
||||
_brushes[brushIndex] = brush;
|
||||
_pens[brushIndex] = new Pen(_brushes[brushIndex], StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
DrawBrushes[brushIndex] = ProcessBrush(brush);
|
||||
DrawPens[brushIndex] = new Pen(DrawBrushes[brushIndex], StrokeWidth, lineCap: StrokeLineCap, lineJoin: StrokeLineJoin);
|
||||
}
|
||||
|
||||
private void HandleStrokeWidthChanged(double strokeWidth)
|
||||
{
|
||||
foreach (var pen in _pens)
|
||||
foreach (var pen in DrawPens)
|
||||
{
|
||||
if (pen != null)
|
||||
{
|
||||
@@ -316,7 +331,7 @@ public abstract class Icon : PathIcon, ICustomHitTest, IMotionAwareControl
|
||||
|
||||
private void HandleLineCapChanged(PenLineCap lineCap)
|
||||
{
|
||||
foreach (var pen in _pens)
|
||||
foreach (var pen in DrawPens)
|
||||
{
|
||||
if (pen != null)
|
||||
{
|
||||
@@ -327,7 +342,7 @@ public abstract class Icon : PathIcon, ICustomHitTest, IMotionAwareControl
|
||||
|
||||
private void HandleLineJoinChanged(PenLineJoin lineJoin)
|
||||
{
|
||||
foreach (var pen in _pens)
|
||||
foreach (var pen in DrawPens)
|
||||
{
|
||||
if (pen != null)
|
||||
{
|
||||
@@ -467,10 +482,14 @@ public abstract class Icon : PathIcon, ICustomHitTest, IMotionAwareControl
|
||||
return true;
|
||||
}
|
||||
|
||||
internal IBrush? FindIconBrush(IconBrushType brushType)
|
||||
public virtual IBrush? FindIconBrush(IconBrushType brushType)
|
||||
{
|
||||
if (brushType == IconBrushType.None)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var index = (int)brushType;
|
||||
Debug.Assert(index >= 0 && index < _brushes.Length);
|
||||
return _brushes[index];
|
||||
Debug.Assert(index >= 0 && index < DrawBrushes.Length);
|
||||
return DrawBrushes[index];
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using System.Linq.Expressions;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Media;
|
||||
|
||||
@@ -7,7 +8,20 @@ namespace AtomUI.Controls;
|
||||
public abstract class IconProvider<TIconKind> : MarkupExtension
|
||||
where TIconKind : Enum
|
||||
{
|
||||
public TIconKind? Kind { get; set; }
|
||||
private TIconKind? _kind;
|
||||
|
||||
public TIconKind? Kind
|
||||
{
|
||||
get => _kind;
|
||||
set
|
||||
{
|
||||
if (!EqualityComparer<TIconKind?>.Default.Equals(_kind, value))
|
||||
{
|
||||
_kind = value;
|
||||
NotifyKindChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IBrush? StrokeBrush { get; set; }
|
||||
public IBrush? FillBrush { get; set; }
|
||||
@@ -26,6 +40,10 @@ public abstract class IconProvider<TIconKind> : MarkupExtension
|
||||
{
|
||||
Kind = kind;
|
||||
}
|
||||
|
||||
protected virtual void NotifyKindChanged()
|
||||
{
|
||||
}
|
||||
|
||||
public override object ProvideValue(IServiceProvider serviceProvider)
|
||||
{
|
||||
@@ -70,5 +88,58 @@ public abstract class IconProvider<TIconKind> : MarkupExtension
|
||||
return icon;
|
||||
}
|
||||
|
||||
protected abstract Icon GetIcon(TIconKind kind);
|
||||
protected virtual Icon GetIcon(TIconKind kind)
|
||||
{
|
||||
try
|
||||
{
|
||||
var enumType = typeof(TIconKind);
|
||||
var creator = IconProviderCache.GetOrAddCreator(
|
||||
enumType,
|
||||
kind,
|
||||
value => GetTypeForKind((TIconKind)value),
|
||||
CreateFactory);
|
||||
|
||||
var icon = creator();
|
||||
Debug.Assert(icon != null);
|
||||
return icon;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException($"Create icon {kind} failed", ex);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract Type GetTypeForKind(TIconKind kind);
|
||||
|
||||
protected virtual Func<Icon> CreateFactory(Type type)
|
||||
{
|
||||
try
|
||||
{
|
||||
var constructor = type.GetConstructor(Type.EmptyTypes);
|
||||
if (constructor == null)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"No parameterless constructor found for {type.Name}");
|
||||
}
|
||||
|
||||
var newExpr = Expression.New(constructor);
|
||||
var lambda = Expression.Lambda<Func<Icon>>(newExpr);
|
||||
return lambda.Compile();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"Failed to create expression tree for {type.Name}: {ex.Message}");
|
||||
return () => (Icon)Activator.CreateInstance(type)!;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ClearCache()
|
||||
{
|
||||
IconProviderCache.ClearCache(typeof(TIconKind));
|
||||
}
|
||||
|
||||
public static void ClearAllCache()
|
||||
{
|
||||
IconProviderCache.ClearAllCache();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace AtomUI.Controls;
|
||||
|
||||
internal static class IconProviderCache
|
||||
{
|
||||
private static readonly ConcurrentDictionary<Type, ConcurrentDictionary<object, Type>> TypeCache =
|
||||
new();
|
||||
|
||||
private static readonly ConcurrentDictionary<Type, ConcurrentDictionary<object, Func<Icon>>> CreatorCache =
|
||||
new();
|
||||
|
||||
private static readonly ConcurrentDictionary<Type, Func<Icon>> TypeToCreator =
|
||||
new();
|
||||
|
||||
public static Type GetOrAddType(Type enumType, object enumValue, Func<object, Type> typeFactory)
|
||||
{
|
||||
var cache = TypeCache.GetOrAdd(enumType,
|
||||
_ => new ConcurrentDictionary<object, Type>());
|
||||
|
||||
return cache.GetOrAdd(enumValue, typeFactory);
|
||||
}
|
||||
|
||||
public static Func<Icon> GetOrAddCreator(Type enumType, object enumValue,
|
||||
Func<object, Type> typeFactory, Func<Type, Func<Icon>> creatorFactory)
|
||||
{
|
||||
var cache = CreatorCache.GetOrAdd(enumType,
|
||||
_ => new ConcurrentDictionary<object, Func<Icon>>());
|
||||
|
||||
return cache.GetOrAdd(enumValue, value =>
|
||||
{
|
||||
var type = GetOrAddType(enumType, value, typeFactory);
|
||||
return TypeToCreator.GetOrAdd(type, creatorFactory);
|
||||
});
|
||||
}
|
||||
|
||||
public static void ClearCache(Type enumType)
|
||||
{
|
||||
TypeCache.TryRemove(enumType, out _);
|
||||
CreatorCache.TryRemove(enumType, out _);
|
||||
}
|
||||
|
||||
public static void ClearAllCache()
|
||||
{
|
||||
TypeCache.Clear();
|
||||
CreatorCache.Clear();
|
||||
TypeToCreator.Clear();
|
||||
}
|
||||
}
|
||||
@@ -91,7 +91,7 @@ public static class TransformParser
|
||||
TransformFunction function,
|
||||
in TransformOperations.Builder builder)
|
||||
{
|
||||
static UnitValue ParseValue(ReadOnlySpan<char> part, TransformFunction function)
|
||||
static UnitValue ParseValue(ReadOnlySpan<char> part, int index, TransformFunction function)
|
||||
{
|
||||
int unitIndex = -1;
|
||||
|
||||
@@ -138,7 +138,21 @@ public static class TransformParser
|
||||
{
|
||||
if (unit == Unit.None)
|
||||
{
|
||||
unit = Unit.Radian;
|
||||
if (function == TransformFunction.Rotate)
|
||||
{
|
||||
if (index == 0)
|
||||
{
|
||||
unit = Unit.Degree;
|
||||
}
|
||||
else
|
||||
{
|
||||
unit = Unit.Pixel;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unit = Unit.Degree;
|
||||
}
|
||||
}
|
||||
}
|
||||
return new UnitValue(unit, value);
|
||||
@@ -160,13 +174,13 @@ public static class TransformParser
|
||||
var leftPart = part.Slice(0, separatorIndex).Trim();
|
||||
var rightPart = part.Slice(separatorIndex + 1, part.Length - separatorIndex - 1).Trim();
|
||||
|
||||
leftValue = ParseValue(leftPart, function);
|
||||
rightValue = ParseValue(rightPart, function);
|
||||
leftValue = ParseValue(leftPart, 0, function);
|
||||
rightValue = ParseValue(rightPart, 1, function);
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
leftValue = ParseValue(part, function);
|
||||
leftValue = ParseValue(part, 0, function);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -174,7 +188,7 @@ public static class TransformParser
|
||||
static int ParseCommaDelimitedValues(ReadOnlySpan<char> part, in Span<UnitValue> outValues, TransformFunction function)
|
||||
{
|
||||
int valueIndex = 0;
|
||||
|
||||
int paramPos = 0;
|
||||
while (true)
|
||||
{
|
||||
if (valueIndex >= outValues.Length)
|
||||
@@ -182,6 +196,7 @@ public static class TransformParser
|
||||
throw new FormatException("Too many provided values.");
|
||||
}
|
||||
|
||||
part = part.Trim();
|
||||
var separatorIndex = part.IndexOf(',');
|
||||
if (separatorIndex == -1)
|
||||
{
|
||||
@@ -192,7 +207,7 @@ public static class TransformParser
|
||||
{
|
||||
if (!part.IsWhiteSpace())
|
||||
{
|
||||
outValues[valueIndex++] = ParseValue(part, function);
|
||||
outValues[valueIndex++] = ParseValue(part, paramPos++, function);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -200,7 +215,7 @@ public static class TransformParser
|
||||
|
||||
var valuePart = part.Slice(0, separatorIndex).Trim();
|
||||
|
||||
outValues[valueIndex++] = ParseValue(valuePart, function);
|
||||
outValues[valueIndex++] = ParseValue(valuePart, paramPos++, function);
|
||||
|
||||
part = part.Slice(separatorIndex + 1, part.Length - separatorIndex - 1);
|
||||
}
|
||||
@@ -270,20 +285,54 @@ public static class TransformParser
|
||||
}
|
||||
case TransformFunction.Rotate:
|
||||
{
|
||||
var angle = UnitValue.Zero;
|
||||
UnitValue _ = default;
|
||||
Span<UnitValue> values = stackalloc UnitValue[3];
|
||||
int count = ParseCommaDelimitedValues(functionPart, in values, function);
|
||||
|
||||
int count = ParseValuePair(functionPart, function, ref angle, ref _);
|
||||
|
||||
if (count != 1)
|
||||
if (count != 1 && count != 3)
|
||||
{
|
||||
ThrowFormatInvalidValueCount(function, 1);
|
||||
ThrowFormatInvalidValueCount(function, 1, 3);
|
||||
}
|
||||
|
||||
VerifyZeroOrAngle(function, in values[0]);
|
||||
|
||||
VerifyZeroOrAngle(function, in angle);
|
||||
|
||||
builder.AppendRotate(ToRadians(in angle));
|
||||
|
||||
if (count == 1)
|
||||
{
|
||||
builder.AppendRotate(ToRadians(in values[0]));
|
||||
}
|
||||
else if (count == 3)
|
||||
{
|
||||
var angle = values[0];
|
||||
var centerX = values[1];
|
||||
var centerY = values[2];
|
||||
|
||||
// 验证中心坐标是否有单位
|
||||
if (centerX.Unit != Unit.None && centerX.Unit != Unit.Pixel)
|
||||
{
|
||||
ThrowFormatInvalidValue(function, in centerX);
|
||||
}
|
||||
if (centerY.Unit != Unit.None && centerY.Unit != Unit.Pixel)
|
||||
{
|
||||
ThrowFormatInvalidValue(function, in centerY);
|
||||
}
|
||||
|
||||
double angleRad = ToRadians(in angle);
|
||||
|
||||
// 计算旋转矩阵(绕指定点旋转)
|
||||
// M = T(cx, cy) × R(angle) × T(-cx, -cy)
|
||||
double cos = Math.Cos(angleRad);
|
||||
double sin = Math.Sin(angleRad);
|
||||
|
||||
double dx = centerX.Value * (1 - cos) + centerY.Value * sin;
|
||||
double dy = centerY.Value * (1 - cos) - centerX.Value * sin;
|
||||
|
||||
var matrix = new Matrix(
|
||||
cos, -sin, // M11, M12
|
||||
sin, cos, // M21, M22
|
||||
dx, dy // OffsetX, OffsetY
|
||||
);
|
||||
|
||||
builder.AppendMatrix(matrix);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TransformFunction.Translate:
|
||||
@@ -385,9 +434,14 @@ public static class TransformParser
|
||||
throw new FormatException($"Invalid value {value.Value} {unitString} for {function}");
|
||||
}
|
||||
|
||||
private static void ThrowFormatInvalidValueCount(TransformFunction function, int count)
|
||||
private static void ThrowFormatInvalidValueCount(TransformFunction function, int expectedCount)
|
||||
{
|
||||
throw new FormatException($"Invalid format. {function} expects {count} value(s).");
|
||||
throw new FormatException($"Invalid format. {function} expects {expectedCount} value(s).");
|
||||
}
|
||||
|
||||
private static void ThrowFormatInvalidValueCount(TransformFunction function, int minCount, int maxCount)
|
||||
{
|
||||
throw new FormatException($"Invalid format. {function} expects between {minCount} and {maxCount} values.");
|
||||
}
|
||||
|
||||
private static Unit ParseUnit(in ReadOnlySpan<char> part)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using AtomUI.Controls;
|
||||
|
||||
@@ -14,26 +13,16 @@ public class AntDesignIconProvider : IconProvider<AntDesignIconKind>
|
||||
{
|
||||
}
|
||||
|
||||
protected override Icon GetIcon(AntDesignIconKind kind)
|
||||
protected override Type GetTypeForKind(AntDesignIconKind kind)
|
||||
{
|
||||
try
|
||||
var typeName = $"AtomUI.Icons.AntDesign.{kind.ToString()}";
|
||||
|
||||
var type = Type.GetType(typeName)
|
||||
?? Assembly.GetExecutingAssembly().GetType(typeName);
|
||||
if (type == null)
|
||||
{
|
||||
var fullTypeName = $"AtomUI.Icons.AntDesign.{kind.ToString()}";
|
||||
var type = Type.GetType(fullTypeName)
|
||||
?? Assembly.GetExecutingAssembly().GetType(fullTypeName);
|
||||
|
||||
if (type == null)
|
||||
{
|
||||
throw new InvalidOperationException($"{fullTypeName} not exist");
|
||||
}
|
||||
|
||||
var icon = (Icon?)Activator.CreateInstance(type);
|
||||
Debug.Assert(icon != null);
|
||||
return icon;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException($"create icon {kind.ToString()} failed", ex);
|
||||
throw new InvalidOperationException($"Type {typeName} does not exist");
|
||||
}
|
||||
return type;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// This code is auto generated. Do not modify.
|
||||
// Generated Date: 2025-11-28
|
||||
// Generated Date: 2025-12-02
|
||||
|
||||
using Avalonia;
|
||||
using System;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user