diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 876fb15..e434775 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -2,9 +2,9 @@
on:
push:
+ branches: [ "master","develop" ]
tags:
- - 'v*.*.*'
-
+ - "v*.*.*"
jobs:
windows:
@@ -17,15 +17,15 @@ jobs:
run: mkdir upload
- name: Publish win-x64
- run: dotnet publish src/VirtualStreetSnap -c Release -r win-x64 --self-contained -p:PublishAot=true
-
+ run: dotnet publish ./src/VirtualStreetSnap -c Release -r win-x64 --self-contained -p:PublishAot=true
+
- name: Zip win-x64
run: |
$files = Get-ChildItem -Path ./src/VirtualStreetSnap/bin/Release/net8.0/win-x64/publish/* -Recurse -Exclude *.pdb
- Compress-Archive -Path $files.FullName -DestinationPath ./upload/VirtualStreetSnap.win-x64.aot.zip
+ Compress-Archive -Path $files.FullName -DestinationPath ./upload/VirtualStreetSnap.win-x64.zip
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
with:
name: VirtualStreetSnap
- path: ./upload/VirtualStreetSnap.win-x64.aot.zip
\ No newline at end of file
+ path: ./upload/VirtualStreetSnap.win-x64.zip
\ No newline at end of file
diff --git a/README.md b/README.md
index af42604..6865e5b 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
## VirtualStreetSnap
+English/[中文](README.zh.md)
+
VirtualStreetSnap is a screenshot tool for save virtual street view basic on avaloniaui.
Compare to other screenshot tool, VirtualStreetSnap provide a more camera-like experience.
@@ -8,51 +10,61 @@ Compare to other screenshot tool, VirtualStreetSnap provide a more camera-like e
![ImageGallery](docs/images/gallery.png)
-![ImageEditor](docs/images/ImageEditor.png)
+![ImageGallery](docs/images/setting.png)
+
+![ImageEditor](docs/images/editor.png)
+![ImageEditor](docs/images/picker.png)
### Features
-> v0.0.8
+> v0.1.5
-+ Radio button: select different size of screenshot.
- + 4:3 16:9 3:2 9:16 3:4 1:1
++ SnapShot view
+ + Radio button: select different size of screenshot.
+ + 4:3 16:9 3:2 9:16 3:4 1:1
+ + Enter size (corner display)
+ + Overlays
+ + red focus border for indicate the screenshot area.
+ + guidelines for help align the screenshot area.
+ + grid
+ + center
+ + ratio
+
+ + on top: always on top.
-+ Overlays
- + red focus border for indicate the screenshot area.
- + guidelines for help align the screenshot area.
- + grid
- + center
- + ratio
+ Settings
- + on top: always on top.
+ + translation\[en/zh\]: change the language
+ file prefix: custom file prefix for saving screenshot.
+ save directory: custom save directory for saving screenshots.
- + translation\[en/zh\]: change the language
+ Image gallery: review the screenshot.
+ Image viewer: view the screenshot.
+ flip the image.
+ scroll to zoom the image.
+ middle/left click to drag the image.
- + copy the image to clipboard.
+ pick the color from the image, and copy the color to clipboard.
+ Thumbnail viewer: view the thumbnail.
- + right click thumbnail to delete/open in explorer.
- + scroll to view more thumbnails.
- + async load thumbnail.
- + grab to fill the window.
-
+ + right click menu
+ + delete/open in explorer.
+ + copy the image to clipboard.
+ + scroll to view more thumbnails.
+ + Send Image to Editor.
+ + grab to ajust the window.
+
+ Image Editor
- + simple adjust layer system
- + add / move / delete layer; save and load with the gallery.
- + layer type
- + hsl
- + brightness/contrast
- + temperature
- + tint
- + sharpen
+ + simple adjust layer system
+ + add / delete layer; save and load with the gallery.
+ + drag and drop to adjust the layer order.
+ + layer (Realtime preview)
+ + hsl
+ + brightness/contrast
+ + white balance(temperature/tint)
+ + sharpen/blur
+ + vignette
+ + pixelate
+ + curve
### Download
@@ -66,6 +78,7 @@ Environment
+ win10 x64
Build (aot by default)
+
```
dotnet publish
```
\ No newline at end of file
diff --git a/README.zh.md b/README.zh.md
new file mode 100644
index 0000000..4a8b006
--- /dev/null
+++ b/README.zh.md
@@ -0,0 +1,84 @@
+## VirtualStreetSnap
+
+[English](README.md)/中文
+
+VirtualStreetSnap 是一个基于 avaloniaui 上保存虚拟街景基础的屏幕截图工具。
+
+与其他屏幕截图工具相比,VirtualStreetSnap 提供了更像相机的体验。
+
+![VirtualStreetSnap](docs/images/shot.png)
+
+![ImageGallery](docs/images/gallery.png)
+
+![ImageGallery](docs/images/setting.png)
+
+![ImageEditor](docs/images/editor.png)
+
+![ImageEditor](docs/images/picker.png)
+
+### 功能
+
+> v0.1.5
+
++ SnapShot 视图
+ + 按钮:选择不同比例的屏幕截图。
+ + 4:3 16:9 3:2 9:16 3:4 1:1
+ + 输入大小(左下角显示)
+ + 叠加层
+ + 红色高亮边框表示屏幕截图区域。
+ + 帮助对齐屏幕截图区域的指南。
+ + 网格
+ + 中心
+ + 比例
+
++ 在顶部:始终在顶部。
+
+
++ 设置
+ + 翻译\[English\中文\]:更改语言
+ + 文件前缀:用于保存屏幕截图的自定义文件前缀。
+ + 保存目录:用于保存屏幕截图的自定义保存目录。
+
++ 图片库:查看屏幕截图。
+ + 图像查看器:查看屏幕截图。
+ + 翻转图像。
+ + 滚动以缩放图像。
+ + 单击鼠标中键/左键可拖动图像。
+ + 从图像中选择颜色,然后将颜色复制到剪贴板。
+ + 缩略图查看器:查看缩略图。
+ + 右键菜单
+ + 在资源管理器中删除/打开。
+ + 将图像复制到剪贴板。
+ + 滚动以查看更多缩略图。
+ + 将图像发送到编辑器。
+ + 可调整尺寸。
+
++ 图像编辑器
+ + 简单的调整图层系统
+ + 添加 / 删除图层;保存到图片库。
+ + 拖放以调整图层顺序。
+ + 图层(实时预览)
+ + HSL
+ + 亮度/对比度
+ + 白平衡(色温/色调)
+ + 锐化/模糊
+ + 晕影
+ + 像素化
+ + 曲线
+
+### 下载
+
+[Releases](https://github.com/atticus-lv/VirtualStreetSnap/releases)
+
+### 开发
+
+环境
+
++ .net 8.0 (C# 12.0)
++ win10 x64
+
+构建 (默认启用aot编译)
+
+```
+dotnet publish
+```
\ No newline at end of file
diff --git a/docs/images/ImageEditor.png b/docs/images/ImageEditor.png
deleted file mode 100644
index fc7ac3d..0000000
Binary files a/docs/images/ImageEditor.png and /dev/null differ
diff --git a/docs/images/editor.png b/docs/images/editor.png
new file mode 100644
index 0000000..f1b517c
Binary files /dev/null and b/docs/images/editor.png differ
diff --git a/docs/images/gallery.png b/docs/images/gallery.png
index 4c64499..b1a7545 100644
Binary files a/docs/images/gallery.png and b/docs/images/gallery.png differ
diff --git a/docs/images/picker.png b/docs/images/picker.png
new file mode 100644
index 0000000..36f3f0d
Binary files /dev/null and b/docs/images/picker.png differ
diff --git a/docs/images/setting.png b/docs/images/setting.png
new file mode 100644
index 0000000..f1845df
Binary files /dev/null and b/docs/images/setting.png differ
diff --git a/docs/images/shot.png b/docs/images/shot.png
index 3f85246..0869021 100644
Binary files a/docs/images/shot.png and b/docs/images/shot.png differ
diff --git a/src/LiveChartCurveControl/App.axaml b/src/LiveChartCurveControl/App.axaml
new file mode 100644
index 0000000..a8fb77b
--- /dev/null
+++ b/src/LiveChartCurveControl/App.axaml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/App.axaml.cs b/src/LiveChartCurveControl/App.axaml.cs
new file mode 100644
index 0000000..487df3d
--- /dev/null
+++ b/src/LiveChartCurveControl/App.axaml.cs
@@ -0,0 +1,33 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Data.Core;
+using Avalonia.Data.Core.Plugins;
+using Avalonia.Markup.Xaml;
+using LiveChartCurveControl.ViewModels;
+using LiveChartCurveControl.Views;
+
+namespace LiveChartCurveControl;
+
+public partial class App : Application
+{
+ public override void Initialize()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ // Line below is needed to remove Avalonia data validation.
+ // Without this line you will get duplicate validations from both Avalonia and CT
+ BindingPlugins.DataValidators.RemoveAt(0);
+ desktop.MainWindow = new MainWindow
+ {
+ DataContext = new MainWindowViewModel(),
+ };
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/Assets/avalonia-logo.ico b/src/LiveChartCurveControl/Assets/avalonia-logo.ico
new file mode 100644
index 0000000..da8d49f
Binary files /dev/null and b/src/LiveChartCurveControl/Assets/avalonia-logo.ico differ
diff --git a/src/LiveChartCurveControl/LiveChartCurveControl.csproj b/src/LiveChartCurveControl/LiveChartCurveControl.csproj
new file mode 100644
index 0000000..35983b7
--- /dev/null
+++ b/src/LiveChartCurveControl/LiveChartCurveControl.csproj
@@ -0,0 +1,27 @@
+
+
+ WinExe
+ net8.0
+ enable
+ true
+ app.manifest
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/LiveChartCurveControl/Program.cs b/src/LiveChartCurveControl/Program.cs
new file mode 100644
index 0000000..eb32250
--- /dev/null
+++ b/src/LiveChartCurveControl/Program.cs
@@ -0,0 +1,21 @@
+using Avalonia;
+using System;
+
+namespace LiveChartCurveControl;
+
+sealed class Program
+{
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ [STAThread]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+
+ // Avalonia configuration, don't remove; also used by visual designer.
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .WithInterFont()
+ .LogToTrace();
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/ViewLocator.cs b/src/LiveChartCurveControl/ViewLocator.cs
new file mode 100644
index 0000000..228d281
--- /dev/null
+++ b/src/LiveChartCurveControl/ViewLocator.cs
@@ -0,0 +1,32 @@
+using System;
+using Avalonia.Controls;
+using Avalonia.Controls.Templates;
+using LiveChartCurveControl.ViewModels;
+
+namespace LiveChartCurveControl;
+
+public class ViewLocator : IDataTemplate
+{
+ public Control? Build(object? data)
+ {
+ if (data is null)
+ return null;
+
+ var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
+ var type = Type.GetType(name);
+
+ if (type != null)
+ {
+ var control = (Control)Activator.CreateInstance(type)!;
+ control.DataContext = data;
+ return control;
+ }
+
+ return new TextBlock { Text = "Not Found: " + name };
+ }
+
+ public bool Match(object? data)
+ {
+ return data is ViewModelBase;
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/ViewModels/CurveMappingViewModel.cs b/src/LiveChartCurveControl/ViewModels/CurveMappingViewModel.cs
new file mode 100644
index 0000000..0280fa4
--- /dev/null
+++ b/src/LiveChartCurveControl/ViewModels/CurveMappingViewModel.cs
@@ -0,0 +1,203 @@
+using Avalonia.Controls;
+using Avalonia.Input;
+using CommunityToolkit.Mvvm.Input;
+using LiveChartsCore.Defaults;
+using LiveChartsCore.Drawing;
+using LiveChartsCore.Kernel.Events;
+using LiveChartsCore.Kernel.Sketches;
+using System.Collections.ObjectModel;
+using System.Linq;
+using LiveChartsCore;
+using LiveChartsCore.SkiaSharpView;
+using LiveChartsCore.SkiaSharpView.Painting;
+using LiveChartsCore.SkiaSharpView.Drawing;
+using SkiaSharp;
+using System;
+using System.Collections.Generic;
+using LiveChartsCore.SkiaSharpView.Painting.Effects;
+using MathNet.Numerics.Interpolation;
+
+namespace LiveChartCurveControl.ViewModels;
+
+public class BezierCurve
+{
+ private CubicSpline? _spline;
+ private double _minX, _maxX, _minY, _maxY;
+
+ public BezierCurve(List> points) => UpdateSpline(points);
+
+ public void UpdateSpline(List> points)
+ {
+ var x = points.Select(p => p.Item1).ToArray();
+ var y = points.Select(p => p.Item2).ToArray();
+
+ _minX = x.First();
+ _maxX = x.Last();
+ _minY = Math.Min(y.First(), y.Last());
+ _maxY = Math.Max(y.First(), y.Last());
+
+ _spline = CubicSpline.InterpolateNatural(x, y);
+ }
+
+ public double CalcValue(double x) => Clamp(_spline.Interpolate(Clamp(x, _minX, _maxX)), _minY, _maxY);
+
+ public List> GenerateCurvePoints(double step = 0.01)
+ {
+ var curvePoints = new List>();
+ for (double t = _minX; t <= _maxX; t += step)
+ curvePoints.Add(Tuple.Create(t, Clamp(_spline.Interpolate(t), _minY, _maxY)));
+ return curvePoints;
+ }
+
+ private static double Clamp(double value, double min, double max) => Math.Max(min, Math.Min(max, value));
+}
+
+public partial class CurveMappingViewModel : ViewModelBase
+{
+ public ObservableCollection Points { get; set; }
+ public Axis[] XAxes { get; set; }
+ public Axis[] YAxes { get; set; }
+ public ISeries[] SeriesCollection { get; set; }
+ private ObservablePoint? _selectedPoint;
+ private const double SelectionRadius = 0.1;
+ public BezierCurve MapCurve;
+ public Action OnChange { get; set; }
+
+
+ public CurveMappingViewModel()
+ {
+ Points = [new(0, 0), new(1, 1)];
+ MapCurve = new BezierCurve(Points.Select(p => Tuple.Create((double)p.X!, (double)p.Y!)).ToList());
+
+ SeriesCollection =
+ [
+ new LineSeries
+ {
+ Name = "GenerateCurve",
+ Values = GenerateBezierCurve(),
+ Fill = null,
+ LineSmoothness = 1,
+ GeometryFill = null,
+ GeometryStroke = null,
+ Stroke = new LinearGradientPaint([new SKColor(0, 0, 0), new SKColor(255, 255, 255)])
+ { StrokeThickness = 5 }
+ },
+ new LineSeries
+ {
+ Name = "ControlPoint",
+ Values = Points,
+ Fill = null,
+ LineSmoothness = 0,
+ Stroke = new SolidColorPaint(SKColors.Transparent) { StrokeThickness = 1 },
+ GeometryStroke = new SolidColorPaint(SKColors.White) { StrokeThickness = 10 },
+ DataPadding = new LvcPoint(5, 5)
+ }
+ ];
+
+ XAxes =
+ [
+ new Axis
+ {
+ MinLimit = 0,
+ MaxLimit = 1,
+ MinStep = 0.25,
+ SeparatorsPaint = new SolidColorPaint(SKColors.LightSlateGray)
+ { StrokeThickness = 2, PathEffect = new DashEffect([5, 5]) }
+ }
+ ];
+ YAxes =
+ [
+ new Axis
+ {
+ MinLimit = 0,
+ MaxLimit = 1,
+ MinStep = 0.25,
+ SeparatorsPaint = new SolidColorPaint(SKColors.LightSlateGray)
+ { StrokeThickness = 2, PathEffect = new DashEffect([5, 5]) }
+ }
+ ];
+ }
+
+ private ObservablePoint? FindNearestPoint(LvcPointD scaledPoint)
+ {
+ var point = Points.FirstOrDefault(p =>
+ Math.Sqrt(Math.Pow((double)(p.X - scaledPoint.X)!, 2) + Math.Pow((double)(p.Y - scaledPoint.Y)!, 2)) <=
+ SelectionRadius);
+ return point == Points.First() || point == Points.Last() ? null : point;
+ }
+
+ [RelayCommand]
+ public void PointerDown(PointerCommandArgs args)
+ {
+ if (Design.IsDesignMode) return;
+
+ var chart = (ICartesianChartView)args.Chart;
+ var scaledPoint = chart.ScalePixelsToData(args.PointerPosition);
+
+ if (scaledPoint.X < 0 || scaledPoint.X > 1 || scaledPoint.Y < 0 || scaledPoint.Y > 1) return;
+
+ var avaloniaEventArgs = args.OriginalEventArgs as PointerPressedEventArgs;
+
+ if (avaloniaEventArgs.GetCurrentPoint(null).Properties.IsRightButtonPressed)
+ {
+ var pointToRemove = FindNearestPoint(scaledPoint);
+ if (pointToRemove == null) return;
+ Points.Remove(pointToRemove);
+ UpdateBezierCurve();
+ return;
+ }
+
+ _selectedPoint = FindNearestPoint(scaledPoint);
+ if (_selectedPoint != null) return;
+
+ if (scaledPoint.Y > Points.Max(p => p.Y))
+ {
+ Points.Add(new ObservablePoint(scaledPoint.X, scaledPoint.Y));
+ }
+ else
+ {
+ int index = Points.TakeWhile(p => p.X <= scaledPoint.X).Count();
+ Points.Insert(index, new ObservablePoint(scaledPoint.X, scaledPoint.Y));
+ }
+
+ UpdateBezierCurve();
+ }
+
+ [RelayCommand]
+ public void PointerMove(PointerCommandArgs args)
+ {
+ if (_selectedPoint == null) return;
+
+ var chart = (ICartesianChartView)args.Chart;
+ var scaledPoint = chart.ScalePixelsToData(args.PointerPosition);
+
+ if (scaledPoint.X < 0 || scaledPoint.X > 1 || scaledPoint.Y < 0 || scaledPoint.Y > 1) return;
+
+ _selectedPoint.X = scaledPoint.X;
+ _selectedPoint.Y = scaledPoint.Y;
+
+ if (_selectedPoint != Points.First() && _selectedPoint.X < Points[Points.IndexOf(_selectedPoint) - 1].X)
+ {
+ Points.Move(Points.IndexOf(_selectedPoint), Points.IndexOf(_selectedPoint) - 1);
+ }
+ else if (_selectedPoint != Points.Last() && _selectedPoint.X > Points[Points.IndexOf(_selectedPoint) + 1].X)
+ {
+ Points.Move(Points.IndexOf(_selectedPoint), Points.IndexOf(_selectedPoint) + 1);
+ }
+
+ UpdateBezierCurve();
+ }
+
+ [RelayCommand]
+ public void PointerUp() => _selectedPoint = null;
+
+ private void UpdateBezierCurve()
+ {
+ MapCurve.UpdateSpline(Points.Select(p => Tuple.Create((double)p.X!, (double)p.Y!)).ToList());
+ SeriesCollection[0].Values = GenerateBezierCurve();
+ OnChange?.Invoke(MapCurve);
+ }
+
+ private List GenerateBezierCurve() => MapCurve.GenerateCurvePoints()
+ .Select(p => new ObservablePoint(p.Item1, p.Item2)).ToList();
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/ViewModels/MainWindowViewModel.cs b/src/LiveChartCurveControl/ViewModels/MainWindowViewModel.cs
new file mode 100644
index 0000000..23edf87
--- /dev/null
+++ b/src/LiveChartCurveControl/ViewModels/MainWindowViewModel.cs
@@ -0,0 +1,6 @@
+namespace LiveChartCurveControl.ViewModels;
+
+
+public class MainWindowViewModel:ViewModelBase{
+
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/ViewModels/ViewModelBase.cs b/src/LiveChartCurveControl/ViewModels/ViewModelBase.cs
new file mode 100644
index 0000000..ba9f51b
--- /dev/null
+++ b/src/LiveChartCurveControl/ViewModels/ViewModelBase.cs
@@ -0,0 +1,6 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+
+namespace LiveChartCurveControl.ViewModels;
+
+public class ViewModelBase : ObservableObject
+{ }
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/Views/CurveMappingView.axaml b/src/LiveChartCurveControl/Views/CurveMappingView.axaml
new file mode 100644
index 0000000..64c6251
--- /dev/null
+++ b/src/LiveChartCurveControl/Views/CurveMappingView.axaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/Views/CurveMappingView.axaml.cs b/src/LiveChartCurveControl/Views/CurveMappingView.axaml.cs
new file mode 100644
index 0000000..4da00d1
--- /dev/null
+++ b/src/LiveChartCurveControl/Views/CurveMappingView.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace LiveChartCurveControl.Views;
+
+public partial class CurveMappingView : UserControl
+{
+ public CurveMappingView()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/Views/MainWindow.axaml b/src/LiveChartCurveControl/Views/MainWindow.axaml
new file mode 100644
index 0000000..427a366
--- /dev/null
+++ b/src/LiveChartCurveControl/Views/MainWindow.axaml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/Views/MainWindow.axaml.cs b/src/LiveChartCurveControl/Views/MainWindow.axaml.cs
new file mode 100644
index 0000000..f32e76d
--- /dev/null
+++ b/src/LiveChartCurveControl/Views/MainWindow.axaml.cs
@@ -0,0 +1,11 @@
+using Avalonia.Controls;
+
+namespace LiveChartCurveControl.Views;
+
+public partial class MainWindow : Window
+{
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/app.manifest b/src/LiveChartCurveControl/app.manifest
new file mode 100644
index 0000000..0359c32
--- /dev/null
+++ b/src/LiveChartCurveControl/app.manifest
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Base.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Base.dll
new file mode 100644
index 0000000..3a3a29b
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Base.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll
new file mode 100644
index 0000000..6fa550b
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.ColorPicker.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.DataGrid.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.DataGrid.dll
new file mode 100644
index 0000000..05ad42a
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.DataGrid.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.dll
new file mode 100644
index 0000000..9237c96
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Controls.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.DesignerSupport.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.DesignerSupport.dll
new file mode 100644
index 0000000..629b59a
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.DesignerSupport.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Desktop.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Desktop.dll
new file mode 100644
index 0000000..8b5f2bc
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Desktop.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Diagnostics.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Diagnostics.dll
new file mode 100644
index 0000000..66e228e
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Diagnostics.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Dialogs.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Dialogs.dll
new file mode 100644
index 0000000..75ddaf7
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Dialogs.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Fonts.Inter.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Fonts.Inter.dll
new file mode 100644
index 0000000..f87066e
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Fonts.Inter.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.FreeDesktop.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.FreeDesktop.dll
new file mode 100644
index 0000000..e58262d
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.FreeDesktop.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Markup.Xaml.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Markup.Xaml.dll
new file mode 100644
index 0000000..713f2fe
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Markup.Xaml.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Markup.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Markup.dll
new file mode 100644
index 0000000..81940ee
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Markup.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Metal.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Metal.dll
new file mode 100644
index 0000000..cda2842
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Metal.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.MicroCom.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.MicroCom.dll
new file mode 100644
index 0000000..88d9dd4
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.MicroCom.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Native.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Native.dll
new file mode 100644
index 0000000..ae8d43e
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Native.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.OpenGL.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.OpenGL.dll
new file mode 100644
index 0000000..7da9807
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.OpenGL.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Remote.Protocol.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Remote.Protocol.dll
new file mode 100644
index 0000000..d14d181
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Remote.Protocol.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Skia.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Skia.dll
new file mode 100644
index 0000000..a1bf92f
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Skia.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Themes.Fluent.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Themes.Fluent.dll
new file mode 100644
index 0000000..f981219
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Themes.Fluent.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Themes.Simple.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Themes.Simple.dll
new file mode 100644
index 0000000..47537cd
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Themes.Simple.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Vulkan.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Vulkan.dll
new file mode 100644
index 0000000..8b4f9e2
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Vulkan.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Win32.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Win32.dll
new file mode 100644
index 0000000..82ae1ed
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.Win32.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.X11.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.X11.dll
new file mode 100644
index 0000000..9e7a5de
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.X11.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.dll
new file mode 100644
index 0000000..8caf251
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Avalonia.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/CommunityToolkit.Mvvm.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/CommunityToolkit.Mvvm.dll
new file mode 100644
index 0000000..b64a665
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/CommunityToolkit.Mvvm.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/HarfBuzzSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/HarfBuzzSharp.dll
new file mode 100644
index 0000000..f4e2c2e
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/HarfBuzzSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.deps.json b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.deps.json
new file mode 100644
index 0000000..6a88295
--- /dev/null
+++ b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.deps.json
@@ -0,0 +1,742 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "LiveChartCurveControl/1.0.0": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Desktop": "11.2.2",
+ "Avalonia.Diagnostics": "11.2.2",
+ "Avalonia.Fonts.Inter": "11.2.2",
+ "Avalonia.Themes.Fluent": "11.2.2",
+ "CommunityToolkit.Mvvm": "8.2.1",
+ "LiveChartsCore.SkiaSharpView.Avalonia": "2.0.0-rc4.5",
+ "MathNet.Numerics": "5.0.0"
+ },
+ "runtime": {
+ "LiveChartCurveControl.dll": {}
+ }
+ },
+ "Avalonia/11.2.2": {
+ "dependencies": {
+ "Avalonia.BuildServices": "0.0.29",
+ "Avalonia.Remote.Protocol": "11.2.2",
+ "MicroCom.Runtime": "0.11.0"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Base.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.Controls.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.DesignerSupport.dll": {
+ "assemblyVersion": "0.7.0.0",
+ "fileVersion": "0.7.0.0"
+ },
+ "lib/net8.0/Avalonia.Dialogs.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.Markup.Xaml.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.Markup.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.Metal.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.MicroCom.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.OpenGL.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.Vulkan.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ },
+ "lib/net8.0/Avalonia.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Angle.Windows.Natives/2.1.22045.20230930": {
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/av_libglesv2.dll": {
+ "rid": "win-arm64",
+ "assetType": "native",
+ "fileVersion": "2.1.22045.0"
+ },
+ "runtimes/win-x64/native/av_libglesv2.dll": {
+ "rid": "win-x64",
+ "assetType": "native",
+ "fileVersion": "2.1.22045.0"
+ },
+ "runtimes/win-x86/native/av_libglesv2.dll": {
+ "rid": "win-x86",
+ "assetType": "native",
+ "fileVersion": "2.1.22045.0"
+ }
+ }
+ },
+ "Avalonia.BuildServices/0.0.29": {},
+ "Avalonia.Controls.ColorPicker/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Remote.Protocol": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Controls.ColorPicker.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Controls.DataGrid/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Remote.Protocol": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Controls.DataGrid.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Desktop/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Native": "11.2.2",
+ "Avalonia.Skia": "11.2.2",
+ "Avalonia.Win32": "11.2.2",
+ "Avalonia.X11": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Desktop.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Diagnostics/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Controls.ColorPicker": "11.2.2",
+ "Avalonia.Controls.DataGrid": "11.2.2",
+ "Avalonia.Themes.Simple": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Diagnostics.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Fonts.Inter/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Fonts.Inter.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.FreeDesktop/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Tmds.DBus.Protocol": "0.20.0"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.FreeDesktop.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Native/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Native.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ },
+ "runtimeTargets": {
+ "runtimes/osx/native/libAvaloniaNative.dylib": {
+ "rid": "osx",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Avalonia.Remote.Protocol/11.2.2": {
+ "runtime": {
+ "lib/net8.0/Avalonia.Remote.Protocol.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Skia/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "HarfBuzzSharp": "7.3.0.3",
+ "HarfBuzzSharp.NativeAssets.Linux": "7.3.0.3",
+ "HarfBuzzSharp.NativeAssets.WebAssembly": "7.3.0.3",
+ "SkiaSharp": "2.88.9",
+ "SkiaSharp.NativeAssets.Linux": "2.88.9",
+ "SkiaSharp.NativeAssets.WebAssembly": "2.88.9"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Skia.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Themes.Fluent/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Themes.Fluent.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Themes.Simple/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Themes.Simple.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.Win32/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Angle.Windows.Natives": "2.1.22045.20230930"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Win32.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "Avalonia.X11/11.2.2": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.FreeDesktop": "11.2.2",
+ "Avalonia.Skia": "11.2.2"
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.X11.dll": {
+ "assemblyVersion": "11.2.2.0",
+ "fileVersion": "11.2.2.0"
+ }
+ }
+ },
+ "CommunityToolkit.Mvvm/8.2.1": {
+ "runtime": {
+ "lib/net6.0/CommunityToolkit.Mvvm.dll": {
+ "assemblyVersion": "8.2.0.0",
+ "fileVersion": "8.2.1.1"
+ }
+ }
+ },
+ "HarfBuzzSharp/7.3.0.3": {
+ "dependencies": {
+ "HarfBuzzSharp.NativeAssets.Win32": "7.3.0.3",
+ "HarfBuzzSharp.NativeAssets.macOS": "7.3.0.3"
+ },
+ "runtime": {
+ "lib/net6.0/HarfBuzzSharp.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "7.3.0.3"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.Linux/7.3.0.3": {
+ "dependencies": {
+ "HarfBuzzSharp": "7.3.0.3"
+ },
+ "runtimeTargets": {
+ "runtimes/linux-arm/native/libHarfBuzzSharp.so": {
+ "rid": "linux-arm",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-arm64/native/libHarfBuzzSharp.so": {
+ "rid": "linux-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-musl-x64/native/libHarfBuzzSharp.so": {
+ "rid": "linux-musl-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-x64/native/libHarfBuzzSharp.so": {
+ "rid": "linux-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.macOS/7.3.0.3": {
+ "runtimeTargets": {
+ "runtimes/osx/native/libHarfBuzzSharp.dylib": {
+ "rid": "osx",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.WebAssembly/7.3.0.3": {},
+ "HarfBuzzSharp.NativeAssets.Win32/7.3.0.3": {
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/libHarfBuzzSharp.dll": {
+ "rid": "win-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x64/native/libHarfBuzzSharp.dll": {
+ "rid": "win-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x86/native/libHarfBuzzSharp.dll": {
+ "rid": "win-x86",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "LiveChartsCore/2.0.0-rc4.5": {
+ "runtime": {
+ "lib/net8.0/LiveChartsCore.dll": {
+ "assemblyVersion": "2.0.0.0",
+ "fileVersion": "2.0.0.0"
+ }
+ }
+ },
+ "LiveChartsCore.SkiaSharpView/2.0.0-rc4.5": {
+ "dependencies": {
+ "LiveChartsCore": "2.0.0-rc4.5",
+ "SkiaSharp": "2.88.9",
+ "SkiaSharp.HarfBuzz": "2.88.8"
+ },
+ "runtime": {
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.dll": {
+ "assemblyVersion": "2.0.0.0",
+ "fileVersion": "2.0.0.0"
+ }
+ }
+ },
+ "LiveChartsCore.SkiaSharpView.Avalonia/2.0.0-rc4.5": {
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Skia": "11.2.2",
+ "LiveChartsCore.SkiaSharpView": "2.0.0-rc4.5"
+ },
+ "runtime": {
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll": {
+ "assemblyVersion": "2.0.0.0",
+ "fileVersion": "2.0.0.0"
+ }
+ }
+ },
+ "MathNet.Numerics/5.0.0": {
+ "runtime": {
+ "lib/net6.0/MathNet.Numerics.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.0.0.0"
+ }
+ }
+ },
+ "MicroCom.Runtime/0.11.0": {
+ "runtime": {
+ "lib/net5.0/MicroCom.Runtime.dll": {
+ "assemblyVersion": "0.11.0.0",
+ "fileVersion": "0.11.0.0"
+ }
+ }
+ },
+ "SkiaSharp/2.88.9": {
+ "dependencies": {
+ "SkiaSharp.NativeAssets.Win32": "2.88.9",
+ "SkiaSharp.NativeAssets.macOS": "2.88.9"
+ },
+ "runtime": {
+ "lib/net6.0/SkiaSharp.dll": {
+ "assemblyVersion": "2.88.0.0",
+ "fileVersion": "2.88.9.0"
+ }
+ }
+ },
+ "SkiaSharp.HarfBuzz/2.88.8": {
+ "dependencies": {
+ "HarfBuzzSharp": "7.3.0.3",
+ "SkiaSharp": "2.88.9"
+ },
+ "runtime": {
+ "lib/net6.0/SkiaSharp.HarfBuzz.dll": {
+ "assemblyVersion": "2.88.0.0",
+ "fileVersion": "2.88.8.0"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.Linux/2.88.9": {
+ "dependencies": {
+ "SkiaSharp": "2.88.9"
+ },
+ "runtimeTargets": {
+ "runtimes/linux-arm/native/libSkiaSharp.so": {
+ "rid": "linux-arm",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-arm64/native/libSkiaSharp.so": {
+ "rid": "linux-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-musl-x64/native/libSkiaSharp.so": {
+ "rid": "linux-musl-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-x64/native/libSkiaSharp.so": {
+ "rid": "linux-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.macOS/2.88.9": {
+ "runtimeTargets": {
+ "runtimes/osx/native/libSkiaSharp.dylib": {
+ "rid": "osx",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.WebAssembly/2.88.9": {},
+ "SkiaSharp.NativeAssets.Win32/2.88.9": {
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/libSkiaSharp.dll": {
+ "rid": "win-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x64/native/libSkiaSharp.dll": {
+ "rid": "win-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x86/native/libSkiaSharp.dll": {
+ "rid": "win-x86",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "System.IO.Pipelines/8.0.0": {
+ "runtime": {
+ "lib/net8.0/System.IO.Pipelines.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Tmds.DBus.Protocol/0.20.0": {
+ "dependencies": {
+ "System.IO.Pipelines": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Tmds.DBus.Protocol.dll": {
+ "assemblyVersion": "0.20.0.0",
+ "fileVersion": "0.20.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "LiveChartCurveControl/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Avalonia/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-gycD/+pjaNh6288vEGDOcgks3Gz/dhZaZu6VSao6wMBXAQpBMEFlU4gW1dXXH2N0zdOlv3Jo1PgmH2megCe2yw==",
+ "path": "avalonia/11.2.2",
+ "hashPath": "avalonia.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Angle.Windows.Natives/2.1.22045.20230930": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Bo3qOhKC1b84BIhiogndMdAzB3UrrESKK7hS769f5HWeoMw/pcd42US5KFYW2JJ4ZSTrXnP8mXwLTMzh+S+9Lg==",
+ "path": "avalonia.angle.windows.natives/2.1.22045.20230930",
+ "hashPath": "avalonia.angle.windows.natives.2.1.22045.20230930.nupkg.sha512"
+ },
+ "Avalonia.BuildServices/0.0.29": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-U4eJLQdoDNHXtEba7MZUCwrBErBTxFp6sUewXBOdAhU0Kwzwaa/EKFcYm8kpcysjzKtfB4S0S9n0uxKZFz/ikw==",
+ "path": "avalonia.buildservices/0.0.29",
+ "hashPath": "avalonia.buildservices.0.0.29.nupkg.sha512"
+ },
+ "Avalonia.Controls.ColorPicker/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-4EMwXvp13WsIvk7eHBXjrT3JBqMYI5lGMYwPUh5f4vsPX1KArSnyy9F4+eByUvJKLROEY6j4gXoPaqtZfAjy1A==",
+ "path": "avalonia.controls.colorpicker/11.2.2",
+ "hashPath": "avalonia.controls.colorpicker.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Controls.DataGrid/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-h86QMlOvjDsihg64WYAvyxFWhwFf30WffwoY8vJGF3BgLpahW+VjNeq5GoO0VyGWWJI2vdTJEzO5fjb8MEpwAg==",
+ "path": "avalonia.controls.datagrid/11.2.2",
+ "hashPath": "avalonia.controls.datagrid.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Desktop/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-UPq1dmCR4AxDEaR7H/L/hqYlzqAox0LbUUChfbTs8HhSRZV4uoDBVzebp8Gl5x0sb6j+nr3Nbp1lpr/4C1dG4A==",
+ "path": "avalonia.desktop/11.2.2",
+ "hashPath": "avalonia.desktop.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Diagnostics/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-O3hSjXJ1htUJdlKkkH+B3/CcNIGtIRKHlt/L81H2MUT+xiXoHeiWjQf+mSnGgN3LEOt5ZBCuDOZ4NgkchncylQ==",
+ "path": "avalonia.diagnostics/11.2.2",
+ "hashPath": "avalonia.diagnostics.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Fonts.Inter/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-VRZudRysGp92Gewn+NQiUSaiPK5YV5KmL+73xKx0QbW7Ap7XLrORj9sFhZYQYssNJoBcIXEM4YOcc8SrWHbCyg==",
+ "path": "avalonia.fonts.inter/11.2.2",
+ "hashPath": "avalonia.fonts.inter.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.FreeDesktop/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bx5obPjGTmAg1YtHJexyvetEXQgfu5QjQjczvCjd6f8OFoeVqUP76ttsBwEkPhP9aVGGZ7xFKF9JGmgC4zCHbg==",
+ "path": "avalonia.freedesktop/11.2.2",
+ "hashPath": "avalonia.freedesktop.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Native/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-eJYdGvLNzqSPVzubMm78ma3so96t7xuxQS4tKz3dOw13lF+/X32A9vflkifyIMKY/AqFsj7T7qHG7g8W0T5RWg==",
+ "path": "avalonia.native/11.2.2",
+ "hashPath": "avalonia.native.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Remote.Protocol/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-76nQ2/TkJAmthHcCPoVznnCfsqhy+pDPFBhySoRv3ZIsj5q9jIgR0bi7rznIcFIKnfoXMEpB1uxMHbfeQ99OgQ==",
+ "path": "avalonia.remote.protocol/11.2.2",
+ "hashPath": "avalonia.remote.protocol.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Skia/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/kNUpB8Lnx7wvVNLybkMjp9YbG4xdiyAmYTBRQAM7hObMPQRx5HKUQJ9AmduCt9KY50lvUkCfTbk/ROnUFhQ3w==",
+ "path": "avalonia.skia/11.2.2",
+ "hashPath": "avalonia.skia.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Themes.Fluent/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-75z5fu4R3myG4TiyPKXHpjA3Jimq6InBB+inLugNHtONuDT9pQdt/CMPhnMcRaueBLjvaJTFs4KS5U8+sGTu0A==",
+ "path": "avalonia.themes.fluent/11.2.2",
+ "hashPath": "avalonia.themes.fluent.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Themes.Simple/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-EgK1N3VAbZpF3NFKKbwDekjKekaDNrHXkPllDom04iP7ZbwuH4xGhmjKlEB5KkPuvxWEfS1ROuRYqVHtna0KRg==",
+ "path": "avalonia.themes.simple/11.2.2",
+ "hashPath": "avalonia.themes.simple.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.Win32/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MQDY5f+GIbuv5klPUWf3WSh0cugEfxnHVQKkIJ02FnR3xzZpEQyfMvqfG8emMKmLAQ7ivqH68Mny0WuPKofc0Q==",
+ "path": "avalonia.win32/11.2.2",
+ "hashPath": "avalonia.win32.11.2.2.nupkg.sha512"
+ },
+ "Avalonia.X11/11.2.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-uptryb4T1h6mBgMxRU0B7IX01CjRwT0KvxPbq2ObhF8CgehQPIl52lcAe09CFi+ZEeu3EJi1/Fa1MH4PDsp4Sw==",
+ "path": "avalonia.x11/11.2.2",
+ "hashPath": "avalonia.x11.11.2.2.nupkg.sha512"
+ },
+ "CommunityToolkit.Mvvm/8.2.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-I24ofWVEdplxYjUez9/bljv/qb8r8Ccj6cvYXHexNBegLaD3iDy3QrzAAOYVMmfGWIXxlU1ZtECQNfU07+6hXQ==",
+ "path": "communitytoolkit.mvvm/8.2.1",
+ "hashPath": "communitytoolkit.mvvm.8.2.1.nupkg.sha512"
+ },
+ "HarfBuzzSharp/7.3.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Hq+5+gx10coOvuRgB13KBwiWxJq1QeYuhtVLbA01ZCWaugOnolUahF44KvrQTUUHDNk/C7HB6SMaebsZeOdhgg==",
+ "path": "harfbuzzsharp/7.3.0.3",
+ "hashPath": "harfbuzzsharp.7.3.0.3.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.Linux/7.3.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-hkcHeTfOyIeJuPtO/QfoqkDvV/MXebZYaA/Bn/S+nXsjH3Wt9oQ6okH2kklYO+1UUdBSJFd67bi9IrpQXI2mPw==",
+ "path": "harfbuzzsharp.nativeassets.linux/7.3.0.3",
+ "hashPath": "harfbuzzsharp.nativeassets.linux.7.3.0.3.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.macOS/7.3.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-UAwIYnkbBTzBJv1Id8FijY/i8QiIepRemSXufU8fyzwWhYJdx4+ajG8yQUie5HW/uusbVLFSr26muSlJOFDgSw==",
+ "path": "harfbuzzsharp.nativeassets.macos/7.3.0.3",
+ "hashPath": "harfbuzzsharp.nativeassets.macos.7.3.0.3.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.WebAssembly/7.3.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-OpheDNp9a3nC6hWNACemWkNEXJ4tWP3Gw9bykw3FbyeEmU2nUDtLIp6VgNnjHAPRMgUs1Kl7m4gJpzVYwC7CZw==",
+ "path": "harfbuzzsharp.nativeassets.webassembly/7.3.0.3",
+ "hashPath": "harfbuzzsharp.nativeassets.webassembly.7.3.0.3.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.Win32/7.3.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-RPxRXD16KtSs8Yxr2RK9Qs7AwyN9MlpqZIYs0AvfaJwl7RAtVhC0+u2f2SKwX0uMYYd3O98Z+OBA1sj6aWVKQA==",
+ "path": "harfbuzzsharp.nativeassets.win32/7.3.0.3",
+ "hashPath": "harfbuzzsharp.nativeassets.win32.7.3.0.3.nupkg.sha512"
+ },
+ "LiveChartsCore/2.0.0-rc4.5": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BFbYQ6DYNlg6AodfRxB26R311IxaUla0DfmFTyO0jhaDrgxbiIDt5+CvU1TQxNUijDEH95SI/OHCw2p9DF3rGg==",
+ "path": "livechartscore/2.0.0-rc4.5",
+ "hashPath": "livechartscore.2.0.0-rc4.5.nupkg.sha512"
+ },
+ "LiveChartsCore.SkiaSharpView/2.0.0-rc4.5": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-9WX8/trgbcpe2dHNMSve2ZXGVgeAFBqbg9u9HwWeX7IITh+gHUg0bfzc66JUSH6A/tYrZ00xltOMh4nzLE1f3g==",
+ "path": "livechartscore.skiasharpview/2.0.0-rc4.5",
+ "hashPath": "livechartscore.skiasharpview.2.0.0-rc4.5.nupkg.sha512"
+ },
+ "LiveChartsCore.SkiaSharpView.Avalonia/2.0.0-rc4.5": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-FBCLxm/TYWcih6SYhRkOCEzSvTV7I+NLmHnifeaoE/1pCuLKIHQ+LvNEMoWhIGM1zMZDSDEZYtkwUaQtGeKYUw==",
+ "path": "livechartscore.skiasharpview.avalonia/2.0.0-rc4.5",
+ "hashPath": "livechartscore.skiasharpview.avalonia.2.0.0-rc4.5.nupkg.sha512"
+ },
+ "MathNet.Numerics/5.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
+ "path": "mathnet.numerics/5.0.0",
+ "hashPath": "mathnet.numerics.5.0.0.nupkg.sha512"
+ },
+ "MicroCom.Runtime/0.11.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-MEnrZ3UIiH40hjzMDsxrTyi8dtqB5ziv3iBeeU4bXsL/7NLSal9F1lZKpK+tfBRnUoDSdtcW3KufE4yhATOMCA==",
+ "path": "microcom.runtime/0.11.0",
+ "hashPath": "microcom.runtime.0.11.0.nupkg.sha512"
+ },
+ "SkiaSharp/2.88.9": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3MD5VHjXXieSHCleRLuaTXmL2pD0mB7CcOB1x2kA1I4bhptf4e3R27iM93264ZYuAq6mkUyX5XbcxnZvMJYc1Q==",
+ "path": "skiasharp/2.88.9",
+ "hashPath": "skiasharp.2.88.9.nupkg.sha512"
+ },
+ "SkiaSharp.HarfBuzz/2.88.8": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ajSyJ2D17R0kZ4FwKwFrJTsYs3D3Y9iRBLhNecROR7dOxC6VTFaMPXJuwQB8KYpAqgmb2JAJFEgZ3i8MaaIw1g==",
+ "path": "skiasharp.harfbuzz/2.88.8",
+ "hashPath": "skiasharp.harfbuzz.2.88.8.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.Linux/2.88.9": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-cWSaJKVPWAaT/WIn9c8T5uT/l4ETwHxNJTkEOtNKjphNo8AW6TF9O32aRkxqw3l8GUdUo66Bu7EiqtFh/XG0Zg==",
+ "path": "skiasharp.nativeassets.linux/2.88.9",
+ "hashPath": "skiasharp.nativeassets.linux.2.88.9.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.macOS/2.88.9": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Nv5spmKc4505Ep7oUoJ5vp3KweFpeNqxpyGDWyeEPTX2uR6S6syXIm3gj75dM0YJz7NPvcix48mR5laqs8dPuA==",
+ "path": "skiasharp.nativeassets.macos/2.88.9",
+ "hashPath": "skiasharp.nativeassets.macos.2.88.9.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.WebAssembly/2.88.9": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kt06RccBHSnAs2wDYdBSfsjIDbY3EpsOVqnlDgKdgvyuRA8ZFDaHRdWNx1VHjGgYzmnFCGiTJBnXFl5BqGwGnA==",
+ "path": "skiasharp.nativeassets.webassembly/2.88.9",
+ "hashPath": "skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.Win32/2.88.9": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-wb2kYgU7iy84nQLYZwMeJXixvK++GoIuECjU4ECaUKNuflyRlJKyiRhN1MAHswvlvzuvkrjRWlK0Za6+kYQK7w==",
+ "path": "skiasharp.nativeassets.win32/2.88.9",
+ "hashPath": "skiasharp.nativeassets.win32.2.88.9.nupkg.sha512"
+ },
+ "System.IO.Pipelines/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
+ "path": "system.io.pipelines/8.0.0",
+ "hashPath": "system.io.pipelines.8.0.0.nupkg.sha512"
+ },
+ "Tmds.DBus.Protocol/0.20.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2gkt2kuYPhDKd8gtl34jZSJOnn4nRJfFngCDcTZT/uySbK++ua0YQx2418l9Rn1Y4dE5XNq6zG9ZsE5ltLlNNw==",
+ "path": "tmds.dbus.protocol/0.20.0",
+ "hashPath": "tmds.dbus.protocol.0.20.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.dll
new file mode 100644
index 0000000..ea5a4a7
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.exe b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.exe
new file mode 100644
index 0000000..8cda1fd
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.exe differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.pdb b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.pdb
new file mode 100644
index 0000000..457b925
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.pdb differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.runtimeconfig.json b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.runtimeconfig.json
new file mode 100644
index 0000000..61e5180
--- /dev/null
+++ b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartCurveControl.runtimeconfig.json
@@ -0,0 +1,13 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.0"
+ },
+ "configProperties": {
+ "System.Runtime.InteropServices.BuiltInComInterop.IsSupported": true,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll
new file mode 100644
index 0000000..e76b280
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.SkiaSharpView.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.SkiaSharpView.dll
new file mode 100644
index 0000000..a71996f
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.SkiaSharpView.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.dll
new file mode 100644
index 0000000..d7c5134
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/LiveChartsCore.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/MathNet.Numerics.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/MathNet.Numerics.dll
new file mode 100644
index 0000000..3027abb
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/MathNet.Numerics.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/MicroCom.Runtime.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/MicroCom.Runtime.dll
new file mode 100644
index 0000000..f6cf008
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/MicroCom.Runtime.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/SkiaSharp.HarfBuzz.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/SkiaSharp.HarfBuzz.dll
new file mode 100644
index 0000000..3059d9c
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/SkiaSharp.HarfBuzz.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/SkiaSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/SkiaSharp.dll
new file mode 100644
index 0000000..5d7e9cd
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/SkiaSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/System.IO.Pipelines.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/System.IO.Pipelines.dll
new file mode 100644
index 0000000..83a1b24
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/System.IO.Pipelines.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/Tmds.DBus.Protocol.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/Tmds.DBus.Protocol.dll
new file mode 100644
index 0000000..8f42654
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/Tmds.DBus.Protocol.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm/native/libHarfBuzzSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..2c6fbe3
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm/native/libHarfBuzzSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm/native/libSkiaSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm/native/libSkiaSharp.so
new file mode 100644
index 0000000..cf26d78
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm/native/libSkiaSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm64/native/libHarfBuzzSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm64/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..89e71b5
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm64/native/libHarfBuzzSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm64/native/libSkiaSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm64/native/libSkiaSharp.so
new file mode 100644
index 0000000..8154cf2
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-arm64/native/libSkiaSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-musl-x64/native/libHarfBuzzSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-musl-x64/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..43ea300
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-musl-x64/native/libHarfBuzzSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-musl-x64/native/libSkiaSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-musl-x64/native/libSkiaSharp.so
new file mode 100644
index 0000000..6c63070
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-musl-x64/native/libSkiaSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-x64/native/libHarfBuzzSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-x64/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..d8548f3
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-x64/native/libHarfBuzzSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-x64/native/libSkiaSharp.so b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-x64/native/libSkiaSharp.so
new file mode 100644
index 0000000..af626a4
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/linux-x64/native/libSkiaSharp.so differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libAvaloniaNative.dylib b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libAvaloniaNative.dylib
new file mode 100644
index 0000000..c47df0d
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libAvaloniaNative.dylib differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libHarfBuzzSharp.dylib b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libHarfBuzzSharp.dylib
new file mode 100644
index 0000000..c6b6888
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libHarfBuzzSharp.dylib differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libSkiaSharp.dylib b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libSkiaSharp.dylib
new file mode 100644
index 0000000..9731583
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/osx/native/libSkiaSharp.dylib differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/av_libglesv2.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/av_libglesv2.dll
new file mode 100644
index 0000000..7b5c978
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/av_libglesv2.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/libHarfBuzzSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/libHarfBuzzSharp.dll
new file mode 100644
index 0000000..ee36cd0
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/libHarfBuzzSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/libSkiaSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/libSkiaSharp.dll
new file mode 100644
index 0000000..48404a0
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-arm64/native/libSkiaSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/av_libglesv2.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/av_libglesv2.dll
new file mode 100644
index 0000000..c327f9e
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/av_libglesv2.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/libHarfBuzzSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/libHarfBuzzSharp.dll
new file mode 100644
index 0000000..01deb29
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/libHarfBuzzSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/libSkiaSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/libSkiaSharp.dll
new file mode 100644
index 0000000..3f8c6f2
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x64/native/libSkiaSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/av_libglesv2.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/av_libglesv2.dll
new file mode 100644
index 0000000..e517c3c
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/av_libglesv2.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/libHarfBuzzSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/libHarfBuzzSharp.dll
new file mode 100644
index 0000000..ac87173
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/libHarfBuzzSharp.dll differ
diff --git a/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/libSkiaSharp.dll b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/libSkiaSharp.dll
new file mode 100644
index 0000000..655f773
Binary files /dev/null and b/src/LiveChartCurveControl/bin/Debug/net8.0/runtimes/win-x86/native/libSkiaSharp.dll differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/src/LiveChartCurveControl/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..2217181
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/LiveChartCurveControl.dll b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/LiveChartCurveControl.dll
new file mode 100644
index 0000000..ea5a4a7
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/LiveChartCurveControl.dll differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/LiveChartCurveControl.pdb b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/LiveChartCurveControl.pdb
new file mode 100644
index 0000000..457b925
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/LiveChartCurveControl.pdb differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache
new file mode 100644
index 0000000..25c9deb
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/Resources.Inputs.cache
@@ -0,0 +1 @@
+6f4935ea3294ab5721b364ed0e2e872d38a3fea1798aefd912543b4ea3e31ff3
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/references b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/references
new file mode 100644
index 0000000..4570a9c
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/references
@@ -0,0 +1,198 @@
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Base.dll
+C:\Users\atticus\.nuget\packages\avalonia.controls.colorpicker\11.2.2\lib\net8.0\Avalonia.Controls.ColorPicker.dll
+C:\Users\atticus\.nuget\packages\avalonia.controls.datagrid\11.2.2\lib\net8.0\Avalonia.Controls.DataGrid.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Controls.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.DesignerSupport.dll
+C:\Users\atticus\.nuget\packages\avalonia.desktop\11.2.2\lib\net8.0\Avalonia.Desktop.dll
+C:\Users\atticus\.nuget\packages\avalonia.diagnostics\11.2.2\lib\net8.0\Avalonia.Diagnostics.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Dialogs.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.dll
+C:\Users\atticus\.nuget\packages\avalonia.fonts.inter\11.2.2\lib\net8.0\Avalonia.Fonts.Inter.dll
+C:\Users\atticus\.nuget\packages\avalonia.freedesktop\11.2.2\lib\net8.0\Avalonia.FreeDesktop.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Markup.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Markup.Xaml.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Metal.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.MicroCom.dll
+C:\Users\atticus\.nuget\packages\avalonia.native\11.2.2\lib\net8.0\Avalonia.Native.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.OpenGL.dll
+C:\Users\atticus\.nuget\packages\avalonia.remote.protocol\11.2.2\lib\net8.0\Avalonia.Remote.Protocol.dll
+C:\Users\atticus\.nuget\packages\avalonia.skia\11.2.2\lib\net8.0\Avalonia.Skia.dll
+C:\Users\atticus\.nuget\packages\avalonia.themes.fluent\11.2.2\lib\net8.0\Avalonia.Themes.Fluent.dll
+C:\Users\atticus\.nuget\packages\avalonia.themes.simple\11.2.2\lib\net8.0\Avalonia.Themes.Simple.dll
+C:\Users\atticus\.nuget\packages\avalonia\11.2.2\ref\net8.0\Avalonia.Vulkan.dll
+C:\Users\atticus\.nuget\packages\avalonia.win32\11.2.2\lib\net8.0\Avalonia.Win32.dll
+C:\Users\atticus\.nuget\packages\avalonia.x11\11.2.2\lib\net8.0\Avalonia.X11.dll
+C:\Users\atticus\.nuget\packages\communitytoolkit.mvvm\8.2.1\lib\net6.0\CommunityToolkit.Mvvm.dll
+C:\Users\atticus\.nuget\packages\harfbuzzsharp\7.3.0.3\lib\net6.0\HarfBuzzSharp.dll
+C:\Users\atticus\.nuget\packages\livechartscore\2.0.0-rc4.5\lib\net8.0\LiveChartsCore.dll
+C:\Users\atticus\.nuget\packages\livechartscore.skiasharpview.avalonia\2.0.0-rc4.5\lib\net8.0\LiveChartsCore.SkiaSharpView.Avalonia.dll
+C:\Users\atticus\.nuget\packages\livechartscore.skiasharpview\2.0.0-rc4.5\lib\net8.0\LiveChartsCore.SkiaSharpView.dll
+C:\Users\atticus\.nuget\packages\mathnet.numerics\5.0.0\lib\net6.0\MathNet.Numerics.dll
+C:\Users\atticus\.nuget\packages\microcom.runtime\0.11.0\lib\net5.0\MicroCom.Runtime.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\Microsoft.CSharp.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\Microsoft.VisualBasic.Core.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\Microsoft.VisualBasic.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\Microsoft.Win32.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\Microsoft.Win32.Registry.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\mscorlib.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\netstandard.dll
+C:\Users\atticus\.nuget\packages\skiasharp\2.88.9\lib\net6.0\SkiaSharp.dll
+C:\Users\atticus\.nuget\packages\skiasharp.harfbuzz\2.88.8\lib\net6.0\SkiaSharp.HarfBuzz.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.AppContext.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Buffers.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Collections.Concurrent.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Collections.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Collections.Immutable.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Collections.NonGeneric.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Collections.Specialized.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ComponentModel.Annotations.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ComponentModel.DataAnnotations.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ComponentModel.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ComponentModel.EventBasedAsync.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ComponentModel.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ComponentModel.TypeConverter.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Configuration.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Console.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Core.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Data.Common.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Data.DataSetExtensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Data.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.Contracts.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.Debug.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.DiagnosticSource.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.FileVersionInfo.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.Process.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.StackTrace.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.TextWriterTraceListener.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.Tools.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.TraceSource.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Diagnostics.Tracing.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Drawing.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Drawing.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Dynamic.Runtime.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Formats.Asn1.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Formats.Tar.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Globalization.Calendars.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Globalization.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Globalization.Extensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.Compression.Brotli.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.Compression.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.Compression.FileSystem.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.Compression.ZipFile.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.FileSystem.AccessControl.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.FileSystem.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.FileSystem.DriveInfo.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.FileSystem.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.FileSystem.Watcher.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.IsolatedStorage.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.MemoryMappedFiles.dll
+C:\Users\atticus\.nuget\packages\system.io.pipelines\8.0.0\lib\net8.0\System.IO.Pipelines.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.Pipes.AccessControl.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.Pipes.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.IO.UnmanagedMemoryStream.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Linq.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Linq.Expressions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Linq.Parallel.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Linq.Queryable.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Memory.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Http.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Http.Json.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.HttpListener.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Mail.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.NameResolution.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.NetworkInformation.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Ping.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Quic.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Requests.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Security.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.ServicePoint.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.Sockets.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.WebClient.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.WebHeaderCollection.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.WebProxy.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.WebSockets.Client.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Net.WebSockets.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Numerics.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Numerics.Vectors.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ObjectModel.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.DispatchProxy.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.Emit.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.Emit.ILGeneration.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.Emit.Lightweight.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.Extensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.Metadata.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Reflection.TypeExtensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Resources.Reader.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Resources.ResourceManager.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Resources.Writer.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.CompilerServices.Unsafe.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.CompilerServices.VisualC.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Extensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Handles.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.InteropServices.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.InteropServices.JavaScript.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.InteropServices.RuntimeInformation.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Intrinsics.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Loader.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Numerics.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Serialization.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Serialization.Formatters.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Serialization.Json.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Serialization.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Runtime.Serialization.Xml.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.AccessControl.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Claims.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.Algorithms.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.Cng.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.Csp.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.Encoding.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.OpenSsl.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.Primitives.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Cryptography.X509Certificates.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Principal.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.Principal.Windows.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Security.SecureString.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ServiceModel.Web.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ServiceProcess.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Text.Encoding.CodePages.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Text.Encoding.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Text.Encoding.Extensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Text.Encodings.Web.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Text.Json.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Text.RegularExpressions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Channels.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Overlapped.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Tasks.Dataflow.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Tasks.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Tasks.Extensions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Tasks.Parallel.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Thread.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.ThreadPool.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Threading.Timer.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Transactions.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Transactions.Local.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.ValueTuple.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Web.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Web.HttpUtility.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Windows.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.Linq.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.ReaderWriter.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.Serialization.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.XDocument.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.XmlDocument.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.XmlSerializer.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.XPath.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\System.Xml.XPath.XDocument.dll
+C:\Users\atticus\.nuget\packages\tmds.dbus.protocol\0.20.0\lib\net8.0\Tmds.DBus.Protocol.dll
+C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.10\ref\net8.0\WindowsBase.dll
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/resources b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/resources
new file mode 100644
index 0000000..310e23b
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/Avalonia/resources differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChar.7B252C73.Up2Date b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChar.7B252C73.Up2Date
new file mode 100644
index 0000000..e69de29
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.AssemblyInfo.cs b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.AssemblyInfo.cs
new file mode 100644
index 0000000..56f75ef
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.AssemblyInfo.cs
@@ -0,0 +1,22 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("LiveChartCurveControl")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+803d5eb607feb32e4bb26dffe9a75a4ac7b4fa29")]
+[assembly: System.Reflection.AssemblyProductAttribute("LiveChartCurveControl")]
+[assembly: System.Reflection.AssemblyTitleAttribute("LiveChartCurveControl")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// 由 MSBuild WriteCodeFragment 类生成。
+
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.AssemblyInfoInputs.cache b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..8e51c9d
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+761a5a24c2211f051697b5d6f4afa4094862a33d35323fbe67947c992e5f470c
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.GeneratedMSBuildEditorConfig.editorconfig b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..e1cfb90
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,29 @@
+is_global = true
+build_property.AvaloniaNameGeneratorIsEnabled = true
+build_property.AvaloniaNameGeneratorBehavior = InitializeComponent
+build_property.AvaloniaNameGeneratorDefaultFieldModifier = internal
+build_property.AvaloniaNameGeneratorFilterByPath = *
+build_property.AvaloniaNameGeneratorFilterByNamespace = *
+build_property.AvaloniaNameGeneratorViewFileNamingStrategy = NamespaceAndClassName
+build_property.AvaloniaNameGeneratorAttachDevTools = true
+build_property.TargetFramework = net8.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = LiveChartCurveControl
+build_property.ProjectDir = C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+
+[C:/Users/atticus/RiderProjects/VirtualStreetSnap/src/LiveChartCurveControl/App.axaml]
+build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
+
+[C:/Users/atticus/RiderProjects/VirtualStreetSnap/src/LiveChartCurveControl/Views/CurveMappingView.axaml]
+build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
+
+[C:/Users/atticus/RiderProjects/VirtualStreetSnap/src/LiveChartCurveControl/Views/MainWindow.axaml]
+build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.assets.cache b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.assets.cache
new file mode 100644
index 0000000..de869a5
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.assets.cache differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.AssemblyReference.cache b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..98c6088
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.AssemblyReference.cache differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.CoreCompileInputs.cache b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..2b8610a
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+4d2b7830f3993b640d97a6723b590d58da20ba71847840587fbc89258087692e
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.FileListAbsolute.txt b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..fbac1d1
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.csproj.FileListAbsolute.txt
@@ -0,0 +1,74 @@
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.csproj.AssemblyReference.cache
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\Avalonia\Resources.Inputs.cache
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\Avalonia\resources
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.AssemblyInfoInputs.cache
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.AssemblyInfo.cs
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.csproj.CoreCompileInputs.cache
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.sourcelink.json
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartCurveControl.exe
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartCurveControl.deps.json
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartCurveControl.runtimeconfig.json
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartCurveControl.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartCurveControl.pdb
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Base.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Controls.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.DesignerSupport.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Dialogs.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Markup.Xaml.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Markup.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Metal.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.MicroCom.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.OpenGL.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Vulkan.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Controls.ColorPicker.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Controls.DataGrid.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Desktop.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Diagnostics.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Fonts.Inter.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.FreeDesktop.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Native.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Remote.Protocol.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Skia.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Themes.Fluent.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Themes.Simple.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.Win32.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Avalonia.X11.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\CommunityToolkit.Mvvm.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\HarfBuzzSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartsCore.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartsCore.SkiaSharpView.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\LiveChartsCore.SkiaSharpView.Avalonia.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\MathNet.Numerics.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\MicroCom.Runtime.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\SkiaSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\SkiaSharp.HarfBuzz.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\System.IO.Pipelines.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\Tmds.DBus.Protocol.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-arm64\native\av_libglesv2.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-x64\native\av_libglesv2.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-x86\native\av_libglesv2.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\osx\native\libAvaloniaNative.dylib
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-arm\native\libHarfBuzzSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-arm64\native\libHarfBuzzSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-musl-x64\native\libHarfBuzzSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-x64\native\libHarfBuzzSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\osx\native\libHarfBuzzSharp.dylib
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-arm64\native\libHarfBuzzSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-x64\native\libHarfBuzzSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-x86\native\libHarfBuzzSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-arm\native\libSkiaSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-arm64\native\libSkiaSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-musl-x64\native\libSkiaSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\linux-x64\native\libSkiaSharp.so
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\osx\native\libSkiaSharp.dylib
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-arm64\native\libSkiaSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-x64\native\libSkiaSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\bin\Debug\net8.0\runtimes\win-x86\native\libSkiaSharp.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\Avalonia\LiveChartCurveControl.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\Avalonia\LiveChartCurveControl.pdb
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\refint\Avalonia\LiveChartCurveControl.dll
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChar.7B252C73.Up2Date
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\LiveChartCurveControl.genruntimeconfig.cache
+C:\Users\atticus\RiderProjects\VirtualStreetSnap\src\LiveChartCurveControl\obj\Debug\net8.0\ref\LiveChartCurveControl.dll
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.dll b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.dll
new file mode 100644
index 0000000..1f08c5d
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.dll differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.genruntimeconfig.cache b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.genruntimeconfig.cache
new file mode 100644
index 0000000..d6e0948
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.genruntimeconfig.cache
@@ -0,0 +1 @@
+526097c05816815376dae1900e943c1313b7ecae4a2743885ec67363e7f42ecc
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.pdb b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.pdb
new file mode 100644
index 0000000..283592d
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.pdb differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.sourcelink.json b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.sourcelink.json
new file mode 100644
index 0000000..cec332d
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/Debug/net8.0/LiveChartCurveControl.sourcelink.json
@@ -0,0 +1 @@
+{"documents":{"C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\*":"https://raw.githubusercontent.com/atticus-lv/VirtualStreetSnap/803d5eb607feb32e4bb26dffe9a75a4ac7b4fa29/*"}}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/apphost.exe b/src/LiveChartCurveControl/obj/Debug/net8.0/apphost.exe
new file mode 100644
index 0000000..8cda1fd
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/apphost.exe differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/ref/LiveChartCurveControl.dll b/src/LiveChartCurveControl/obj/Debug/net8.0/ref/LiveChartCurveControl.dll
new file mode 100644
index 0000000..52f834e
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/ref/LiveChartCurveControl.dll differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/refint/Avalonia/LiveChartCurveControl.dll b/src/LiveChartCurveControl/obj/Debug/net8.0/refint/Avalonia/LiveChartCurveControl.dll
new file mode 100644
index 0000000..52f834e
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/refint/Avalonia/LiveChartCurveControl.dll differ
diff --git a/src/LiveChartCurveControl/obj/Debug/net8.0/refint/LiveChartCurveControl.dll b/src/LiveChartCurveControl/obj/Debug/net8.0/refint/LiveChartCurveControl.dll
new file mode 100644
index 0000000..1dc2979
Binary files /dev/null and b/src/LiveChartCurveControl/obj/Debug/net8.0/refint/LiveChartCurveControl.dll differ
diff --git a/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.dgspec.json b/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..8175791
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.dgspec.json
@@ -0,0 +1,107 @@
+{
+ "format": 1,
+ "restore": {
+ "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj": {}
+ },
+ "projects": {
+ "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj",
+ "projectName": "LiveChartCurveControl",
+ "projectPath": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj",
+ "packagesPath": "C:\\Users\\atticus\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\obj\\",
+ "projectStyle": "PackageReference",
+ "UsingMicrosoftNETSdk": false,
+ "fallbackFolders": [
+ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\atticus\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net8.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ }
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "dependencies": {
+ "Avalonia": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Desktop": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Diagnostics": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Fonts.Inter": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Themes.Fluent": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "CommunityToolkit.Mvvm": {
+ "target": "Package",
+ "version": "[8.2.1, )"
+ },
+ "LiveChartsCore.SkiaSharpView.Avalonia": {
+ "target": "Package",
+ "version": "[2.0.0-rc4.5, )"
+ },
+ "MathNet.Numerics": {
+ "target": "Package",
+ "version": "[5.0.0, )"
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.403/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.g.props b/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.g.props
new file mode 100644
index 0000000..1d57743
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.g.props
@@ -0,0 +1,25 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\atticus\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
+ PackageReference
+ 6.12.0
+
+
+
+
+
+
+
+
+
+
+
+ C:\Users\atticus\.nuget\packages\avalonia.buildservices\0.0.29
+ C:\Users\atticus\.nuget\packages\avalonia\11.2.2
+
+
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.g.targets b/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.g.targets
new file mode 100644
index 0000000..48b5924
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/LiveChartCurveControl.csproj.nuget.g.targets
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/project.assets.json b/src/LiveChartCurveControl/obj/project.assets.json
new file mode 100644
index 0000000..97ff942
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/project.assets.json
@@ -0,0 +1,1796 @@
+{
+ "version": 3,
+ "targets": {
+ "net8.0": {
+ "Avalonia/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia.BuildServices": "0.0.29",
+ "Avalonia.Remote.Protocol": "11.2.2",
+ "MicroCom.Runtime": "0.11.0"
+ },
+ "compile": {
+ "ref/net8.0/Avalonia.Base.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.Controls.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.DesignerSupport.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.Dialogs.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.Markup.Xaml.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.Markup.dll": {
+ "related": ".Xaml.xml;.xml"
+ },
+ "ref/net8.0/Avalonia.Metal.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.MicroCom.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.OpenGL.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.Vulkan.dll": {
+ "related": ".xml"
+ },
+ "ref/net8.0/Avalonia.dll": {
+ "related": ".Base.xml;.Controls.xml;.DesignerSupport.xml;.Dialogs.xml;.Markup.Xaml.xml;.Markup.xml;.Metal.xml;.MicroCom.xml;.OpenGL.xml;.Vulkan.xml;.xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Base.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.Controls.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.DesignerSupport.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.Dialogs.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.Markup.Xaml.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.Markup.dll": {
+ "related": ".Xaml.xml;.xml"
+ },
+ "lib/net8.0/Avalonia.Metal.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.MicroCom.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.OpenGL.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.Vulkan.dll": {
+ "related": ".xml"
+ },
+ "lib/net8.0/Avalonia.dll": {
+ "related": ".Base.xml;.Controls.xml;.DesignerSupport.xml;.Dialogs.xml;.Markup.Xaml.xml;.Markup.xml;.Metal.xml;.MicroCom.xml;.OpenGL.xml;.Vulkan.xml;.xml"
+ }
+ },
+ "build": {
+ "buildTransitive/Avalonia.props": {},
+ "buildTransitive/Avalonia.targets": {}
+ }
+ },
+ "Avalonia.Angle.Windows.Natives/2.1.22045.20230930": {
+ "type": "package",
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/av_libglesv2.dll": {
+ "assetType": "native",
+ "rid": "win-arm64"
+ },
+ "runtimes/win-x64/native/av_libglesv2.dll": {
+ "assetType": "native",
+ "rid": "win-x64"
+ },
+ "runtimes/win-x86/native/av_libglesv2.dll": {
+ "assetType": "native",
+ "rid": "win-x86"
+ }
+ }
+ },
+ "Avalonia.BuildServices/0.0.29": {
+ "type": "package",
+ "build": {
+ "buildTransitive/Avalonia.BuildServices.targets": {}
+ }
+ },
+ "Avalonia.Controls.ColorPicker/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Remote.Protocol": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Controls.ColorPicker.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Controls.ColorPicker.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Controls.DataGrid/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Remote.Protocol": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Controls.DataGrid.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Controls.DataGrid.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Desktop/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Native": "11.2.2",
+ "Avalonia.Skia": "11.2.2",
+ "Avalonia.Win32": "11.2.2",
+ "Avalonia.X11": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Desktop.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Desktop.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Diagnostics/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Controls.ColorPicker": "11.2.2",
+ "Avalonia.Controls.DataGrid": "11.2.2",
+ "Avalonia.Themes.Simple": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Diagnostics.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Diagnostics.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Fonts.Inter/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Fonts.Inter.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Fonts.Inter.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.FreeDesktop/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Tmds.DBus.Protocol": "0.20.0"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.FreeDesktop.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.FreeDesktop.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Native/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Native.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Native.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtimeTargets": {
+ "runtimes/osx/native/libAvaloniaNative.dylib": {
+ "assetType": "native",
+ "rid": "osx"
+ }
+ }
+ },
+ "Avalonia.Remote.Protocol/11.2.2": {
+ "type": "package",
+ "compile": {
+ "lib/net8.0/Avalonia.Remote.Protocol.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Remote.Protocol.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Skia/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "HarfBuzzSharp": "7.3.0.3",
+ "HarfBuzzSharp.NativeAssets.Linux": "7.3.0.3",
+ "HarfBuzzSharp.NativeAssets.WebAssembly": "7.3.0.3",
+ "SkiaSharp": "2.88.9",
+ "SkiaSharp.NativeAssets.Linux": "2.88.9",
+ "SkiaSharp.NativeAssets.WebAssembly": "2.88.9"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Skia.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Skia.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Themes.Fluent/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Themes.Fluent.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Themes.Fluent.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Themes.Simple/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Themes.Simple.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Themes.Simple.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.Win32/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.Angle.Windows.Natives": "2.1.22045.20230930"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.Win32.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.Win32.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "Avalonia.X11/11.2.2": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.2.2",
+ "Avalonia.FreeDesktop": "11.2.2",
+ "Avalonia.Skia": "11.2.2"
+ },
+ "compile": {
+ "lib/net8.0/Avalonia.X11.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/Avalonia.X11.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "CommunityToolkit.Mvvm/8.2.1": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/CommunityToolkit.Mvvm.dll": {
+ "related": ".pdb;.xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/CommunityToolkit.Mvvm.dll": {
+ "related": ".pdb;.xml"
+ }
+ },
+ "build": {
+ "buildTransitive/netstandard2.1/CommunityToolkit.Mvvm.targets": {}
+ }
+ },
+ "HarfBuzzSharp/7.3.0.3": {
+ "type": "package",
+ "dependencies": {
+ "HarfBuzzSharp.NativeAssets.Win32": "7.3.0.3",
+ "HarfBuzzSharp.NativeAssets.macOS": "7.3.0.3"
+ },
+ "compile": {
+ "lib/net6.0/HarfBuzzSharp.dll": {
+ "related": ".pdb;.xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/HarfBuzzSharp.dll": {
+ "related": ".pdb;.xml"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.Linux/7.3.0.3": {
+ "type": "package",
+ "dependencies": {
+ "HarfBuzzSharp": "7.3.0.3"
+ },
+ "compile": {
+ "lib/net6.0/_._": {}
+ },
+ "runtime": {
+ "lib/net6.0/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/linux-arm/native/libHarfBuzzSharp.so": {
+ "assetType": "native",
+ "rid": "linux-arm"
+ },
+ "runtimes/linux-arm64/native/libHarfBuzzSharp.so": {
+ "assetType": "native",
+ "rid": "linux-arm64"
+ },
+ "runtimes/linux-musl-x64/native/libHarfBuzzSharp.so": {
+ "assetType": "native",
+ "rid": "linux-musl-x64"
+ },
+ "runtimes/linux-x64/native/libHarfBuzzSharp.so": {
+ "assetType": "native",
+ "rid": "linux-x64"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.macOS/7.3.0.3": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/_._": {}
+ },
+ "runtime": {
+ "lib/net6.0/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/osx/native/libHarfBuzzSharp.dylib": {
+ "assetType": "native",
+ "rid": "osx"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.WebAssembly/7.3.0.3": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "build": {
+ "buildTransitive/netstandard1.0/HarfBuzzSharp.NativeAssets.WebAssembly.props": {},
+ "buildTransitive/netstandard1.0/HarfBuzzSharp.NativeAssets.WebAssembly.targets": {}
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.Win32/7.3.0.3": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/_._": {}
+ },
+ "runtime": {
+ "lib/net6.0/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/libHarfBuzzSharp.dll": {
+ "assetType": "native",
+ "rid": "win-arm64"
+ },
+ "runtimes/win-x64/native/libHarfBuzzSharp.dll": {
+ "assetType": "native",
+ "rid": "win-x64"
+ },
+ "runtimes/win-x86/native/libHarfBuzzSharp.dll": {
+ "assetType": "native",
+ "rid": "win-x86"
+ }
+ }
+ },
+ "LiveChartsCore/2.0.0-rc4.5": {
+ "type": "package",
+ "compile": {
+ "lib/net8.0/LiveChartsCore.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/LiveChartsCore.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "LiveChartsCore.SkiaSharpView/2.0.0-rc4.5": {
+ "type": "package",
+ "dependencies": {
+ "LiveChartsCore": "2.0.0-rc4.5",
+ "SkiaSharp": "2.88.8",
+ "SkiaSharp.HarfBuzz": "2.88.8"
+ },
+ "compile": {
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "LiveChartsCore.SkiaSharpView.Avalonia/2.0.0-rc4.5": {
+ "type": "package",
+ "dependencies": {
+ "Avalonia": "11.0.0",
+ "Avalonia.Skia": "11.0.0",
+ "LiveChartsCore.SkiaSharpView": "2.0.0-rc4.5"
+ },
+ "compile": {
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "MathNet.Numerics/5.0.0": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/MathNet.Numerics.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/MathNet.Numerics.dll": {
+ "related": ".xml"
+ }
+ }
+ },
+ "MicroCom.Runtime/0.11.0": {
+ "type": "package",
+ "compile": {
+ "lib/net5.0/MicroCom.Runtime.dll": {}
+ },
+ "runtime": {
+ "lib/net5.0/MicroCom.Runtime.dll": {}
+ }
+ },
+ "SkiaSharp/2.88.9": {
+ "type": "package",
+ "dependencies": {
+ "SkiaSharp.NativeAssets.Win32": "2.88.9",
+ "SkiaSharp.NativeAssets.macOS": "2.88.9"
+ },
+ "compile": {
+ "lib/net6.0/SkiaSharp.dll": {
+ "related": ".pdb;.xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/SkiaSharp.dll": {
+ "related": ".pdb;.xml"
+ }
+ }
+ },
+ "SkiaSharp.HarfBuzz/2.88.8": {
+ "type": "package",
+ "dependencies": {
+ "HarfBuzzSharp": "7.3.0.2",
+ "SkiaSharp": "2.88.8"
+ },
+ "compile": {
+ "lib/net6.0/SkiaSharp.HarfBuzz.dll": {
+ "related": ".pdb;.xml"
+ }
+ },
+ "runtime": {
+ "lib/net6.0/SkiaSharp.HarfBuzz.dll": {
+ "related": ".pdb;.xml"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.Linux/2.88.9": {
+ "type": "package",
+ "dependencies": {
+ "SkiaSharp": "2.88.9"
+ },
+ "compile": {
+ "lib/net6.0/_._": {}
+ },
+ "runtime": {
+ "lib/net6.0/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/linux-arm/native/libSkiaSharp.so": {
+ "assetType": "native",
+ "rid": "linux-arm"
+ },
+ "runtimes/linux-arm64/native/libSkiaSharp.so": {
+ "assetType": "native",
+ "rid": "linux-arm64"
+ },
+ "runtimes/linux-musl-x64/native/libSkiaSharp.so": {
+ "assetType": "native",
+ "rid": "linux-musl-x64"
+ },
+ "runtimes/linux-x64/native/libSkiaSharp.so": {
+ "assetType": "native",
+ "rid": "linux-x64"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.macOS/2.88.9": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/_._": {}
+ },
+ "runtime": {
+ "lib/net6.0/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/osx/native/libSkiaSharp.dylib": {
+ "assetType": "native",
+ "rid": "osx"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.WebAssembly/2.88.9": {
+ "type": "package",
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "build": {
+ "buildTransitive/netstandard1.0/SkiaSharp.NativeAssets.WebAssembly.props": {},
+ "buildTransitive/netstandard1.0/SkiaSharp.NativeAssets.WebAssembly.targets": {}
+ }
+ },
+ "SkiaSharp.NativeAssets.Win32/2.88.9": {
+ "type": "package",
+ "compile": {
+ "lib/net6.0/_._": {}
+ },
+ "runtime": {
+ "lib/net6.0/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/libSkiaSharp.dll": {
+ "assetType": "native",
+ "rid": "win-arm64"
+ },
+ "runtimes/win-x64/native/libSkiaSharp.dll": {
+ "assetType": "native",
+ "rid": "win-x64"
+ },
+ "runtimes/win-x86/native/libSkiaSharp.dll": {
+ "assetType": "native",
+ "rid": "win-x86"
+ }
+ }
+ },
+ "System.IO.Pipelines/8.0.0": {
+ "type": "package",
+ "compile": {
+ "lib/net8.0/System.IO.Pipelines.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net8.0/System.IO.Pipelines.dll": {
+ "related": ".xml"
+ }
+ },
+ "build": {
+ "buildTransitive/net6.0/_._": {}
+ }
+ },
+ "Tmds.DBus.Protocol/0.20.0": {
+ "type": "package",
+ "dependencies": {
+ "System.IO.Pipelines": "8.0.0"
+ },
+ "compile": {
+ "lib/net8.0/Tmds.DBus.Protocol.dll": {}
+ },
+ "runtime": {
+ "lib/net8.0/Tmds.DBus.Protocol.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Avalonia/11.2.2": {
+ "sha512": "gycD/+pjaNh6288vEGDOcgks3Gz/dhZaZu6VSao6wMBXAQpBMEFlU4gW1dXXH2N0zdOlv3Jo1PgmH2megCe2yw==",
+ "type": "package",
+ "path": "avalonia/11.2.2",
+ "hasTools": true,
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "analyzers/dotnet/cs/Avalonia.Analyzers.dll",
+ "analyzers/dotnet/cs/Avalonia.Generators.dll",
+ "avalonia.11.2.2.nupkg.sha512",
+ "avalonia.nuspec",
+ "build/Avalonia.Generators.props",
+ "build/Avalonia.props",
+ "build/Avalonia.targets",
+ "build/AvaloniaBuildTasks.props",
+ "build/AvaloniaBuildTasks.targets",
+ "build/AvaloniaItemSchema.xaml",
+ "build/AvaloniaPrivateApis.targets",
+ "build/AvaloniaRules.Project.xml",
+ "build/AvaloniaSingleProject.targets",
+ "build/AvaloniaVersion.props",
+ "buildTransitive/Avalonia.Generators.props",
+ "buildTransitive/Avalonia.props",
+ "buildTransitive/Avalonia.targets",
+ "buildTransitive/AvaloniaBuildTasks.props",
+ "buildTransitive/AvaloniaBuildTasks.targets",
+ "buildTransitive/AvaloniaItemSchema.xaml",
+ "buildTransitive/AvaloniaPrivateApis.targets",
+ "buildTransitive/AvaloniaRules.Project.xml",
+ "buildTransitive/AvaloniaSingleProject.targets",
+ "lib/net6.0/Avalonia.Base.dll",
+ "lib/net6.0/Avalonia.Base.xml",
+ "lib/net6.0/Avalonia.Controls.dll",
+ "lib/net6.0/Avalonia.Controls.xml",
+ "lib/net6.0/Avalonia.DesignerSupport.dll",
+ "lib/net6.0/Avalonia.DesignerSupport.xml",
+ "lib/net6.0/Avalonia.Dialogs.dll",
+ "lib/net6.0/Avalonia.Dialogs.xml",
+ "lib/net6.0/Avalonia.Markup.Xaml.dll",
+ "lib/net6.0/Avalonia.Markup.Xaml.xml",
+ "lib/net6.0/Avalonia.Markup.dll",
+ "lib/net6.0/Avalonia.Markup.xml",
+ "lib/net6.0/Avalonia.Metal.dll",
+ "lib/net6.0/Avalonia.Metal.xml",
+ "lib/net6.0/Avalonia.MicroCom.dll",
+ "lib/net6.0/Avalonia.MicroCom.xml",
+ "lib/net6.0/Avalonia.OpenGL.dll",
+ "lib/net6.0/Avalonia.OpenGL.xml",
+ "lib/net6.0/Avalonia.Vulkan.dll",
+ "lib/net6.0/Avalonia.Vulkan.xml",
+ "lib/net6.0/Avalonia.dll",
+ "lib/net6.0/Avalonia.xml",
+ "lib/net8.0/Avalonia.Base.dll",
+ "lib/net8.0/Avalonia.Base.xml",
+ "lib/net8.0/Avalonia.Controls.dll",
+ "lib/net8.0/Avalonia.Controls.xml",
+ "lib/net8.0/Avalonia.DesignerSupport.dll",
+ "lib/net8.0/Avalonia.DesignerSupport.xml",
+ "lib/net8.0/Avalonia.Dialogs.dll",
+ "lib/net8.0/Avalonia.Dialogs.xml",
+ "lib/net8.0/Avalonia.Markup.Xaml.dll",
+ "lib/net8.0/Avalonia.Markup.Xaml.xml",
+ "lib/net8.0/Avalonia.Markup.dll",
+ "lib/net8.0/Avalonia.Markup.xml",
+ "lib/net8.0/Avalonia.Metal.dll",
+ "lib/net8.0/Avalonia.Metal.xml",
+ "lib/net8.0/Avalonia.MicroCom.dll",
+ "lib/net8.0/Avalonia.MicroCom.xml",
+ "lib/net8.0/Avalonia.OpenGL.dll",
+ "lib/net8.0/Avalonia.OpenGL.xml",
+ "lib/net8.0/Avalonia.Vulkan.dll",
+ "lib/net8.0/Avalonia.Vulkan.xml",
+ "lib/net8.0/Avalonia.dll",
+ "lib/net8.0/Avalonia.xml",
+ "lib/netstandard2.0/Avalonia.Base.dll",
+ "lib/netstandard2.0/Avalonia.Base.xml",
+ "lib/netstandard2.0/Avalonia.Controls.dll",
+ "lib/netstandard2.0/Avalonia.Controls.xml",
+ "lib/netstandard2.0/Avalonia.DesignerSupport.dll",
+ "lib/netstandard2.0/Avalonia.DesignerSupport.xml",
+ "lib/netstandard2.0/Avalonia.Dialogs.dll",
+ "lib/netstandard2.0/Avalonia.Dialogs.xml",
+ "lib/netstandard2.0/Avalonia.Markup.Xaml.dll",
+ "lib/netstandard2.0/Avalonia.Markup.Xaml.xml",
+ "lib/netstandard2.0/Avalonia.Markup.dll",
+ "lib/netstandard2.0/Avalonia.Markup.xml",
+ "lib/netstandard2.0/Avalonia.Metal.dll",
+ "lib/netstandard2.0/Avalonia.Metal.xml",
+ "lib/netstandard2.0/Avalonia.MicroCom.dll",
+ "lib/netstandard2.0/Avalonia.MicroCom.xml",
+ "lib/netstandard2.0/Avalonia.OpenGL.dll",
+ "lib/netstandard2.0/Avalonia.OpenGL.xml",
+ "lib/netstandard2.0/Avalonia.Vulkan.dll",
+ "lib/netstandard2.0/Avalonia.Vulkan.xml",
+ "lib/netstandard2.0/Avalonia.dll",
+ "lib/netstandard2.0/Avalonia.xml",
+ "ref/net6.0/Avalonia.Base.dll",
+ "ref/net6.0/Avalonia.Base.xml",
+ "ref/net6.0/Avalonia.Controls.dll",
+ "ref/net6.0/Avalonia.Controls.xml",
+ "ref/net6.0/Avalonia.DesignerSupport.dll",
+ "ref/net6.0/Avalonia.DesignerSupport.xml",
+ "ref/net6.0/Avalonia.Dialogs.dll",
+ "ref/net6.0/Avalonia.Dialogs.xml",
+ "ref/net6.0/Avalonia.Markup.Xaml.dll",
+ "ref/net6.0/Avalonia.Markup.Xaml.xml",
+ "ref/net6.0/Avalonia.Markup.dll",
+ "ref/net6.0/Avalonia.Markup.xml",
+ "ref/net6.0/Avalonia.Metal.dll",
+ "ref/net6.0/Avalonia.Metal.xml",
+ "ref/net6.0/Avalonia.MicroCom.dll",
+ "ref/net6.0/Avalonia.MicroCom.xml",
+ "ref/net6.0/Avalonia.OpenGL.dll",
+ "ref/net6.0/Avalonia.OpenGL.xml",
+ "ref/net6.0/Avalonia.Vulkan.dll",
+ "ref/net6.0/Avalonia.Vulkan.xml",
+ "ref/net6.0/Avalonia.dll",
+ "ref/net6.0/Avalonia.xml",
+ "ref/net8.0/Avalonia.Base.dll",
+ "ref/net8.0/Avalonia.Base.xml",
+ "ref/net8.0/Avalonia.Controls.dll",
+ "ref/net8.0/Avalonia.Controls.xml",
+ "ref/net8.0/Avalonia.DesignerSupport.dll",
+ "ref/net8.0/Avalonia.DesignerSupport.xml",
+ "ref/net8.0/Avalonia.Dialogs.dll",
+ "ref/net8.0/Avalonia.Dialogs.xml",
+ "ref/net8.0/Avalonia.Markup.Xaml.dll",
+ "ref/net8.0/Avalonia.Markup.Xaml.xml",
+ "ref/net8.0/Avalonia.Markup.dll",
+ "ref/net8.0/Avalonia.Markup.xml",
+ "ref/net8.0/Avalonia.Metal.dll",
+ "ref/net8.0/Avalonia.Metal.xml",
+ "ref/net8.0/Avalonia.MicroCom.dll",
+ "ref/net8.0/Avalonia.MicroCom.xml",
+ "ref/net8.0/Avalonia.OpenGL.dll",
+ "ref/net8.0/Avalonia.OpenGL.xml",
+ "ref/net8.0/Avalonia.Vulkan.dll",
+ "ref/net8.0/Avalonia.Vulkan.xml",
+ "ref/net8.0/Avalonia.dll",
+ "ref/net8.0/Avalonia.xml",
+ "ref/netstandard2.0/Avalonia.Base.dll",
+ "ref/netstandard2.0/Avalonia.Base.xml",
+ "ref/netstandard2.0/Avalonia.Controls.dll",
+ "ref/netstandard2.0/Avalonia.Controls.xml",
+ "ref/netstandard2.0/Avalonia.DesignerSupport.dll",
+ "ref/netstandard2.0/Avalonia.DesignerSupport.xml",
+ "ref/netstandard2.0/Avalonia.Dialogs.dll",
+ "ref/netstandard2.0/Avalonia.Dialogs.xml",
+ "ref/netstandard2.0/Avalonia.Markup.Xaml.dll",
+ "ref/netstandard2.0/Avalonia.Markup.Xaml.xml",
+ "ref/netstandard2.0/Avalonia.Markup.dll",
+ "ref/netstandard2.0/Avalonia.Markup.xml",
+ "ref/netstandard2.0/Avalonia.Metal.dll",
+ "ref/netstandard2.0/Avalonia.Metal.xml",
+ "ref/netstandard2.0/Avalonia.MicroCom.dll",
+ "ref/netstandard2.0/Avalonia.MicroCom.xml",
+ "ref/netstandard2.0/Avalonia.OpenGL.dll",
+ "ref/netstandard2.0/Avalonia.OpenGL.xml",
+ "ref/netstandard2.0/Avalonia.Vulkan.dll",
+ "ref/netstandard2.0/Avalonia.Vulkan.xml",
+ "ref/netstandard2.0/Avalonia.dll",
+ "ref/netstandard2.0/Avalonia.xml",
+ "tools/net461/designer/Avalonia.Designer.HostApp.exe",
+ "tools/netstandard2.0/Avalonia.Build.Tasks.dll",
+ "tools/netstandard2.0/designer/Avalonia.Designer.HostApp.dll"
+ ]
+ },
+ "Avalonia.Angle.Windows.Natives/2.1.22045.20230930": {
+ "sha512": "Bo3qOhKC1b84BIhiogndMdAzB3UrrESKK7hS769f5HWeoMw/pcd42US5KFYW2JJ4ZSTrXnP8mXwLTMzh+S+9Lg==",
+ "type": "package",
+ "path": "avalonia.angle.windows.natives/2.1.22045.20230930",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE",
+ "avalonia.angle.windows.natives.2.1.22045.20230930.nupkg.sha512",
+ "avalonia.angle.windows.natives.nuspec",
+ "runtimes/win-arm64/native/av_libglesv2.dll",
+ "runtimes/win-x64/native/av_libglesv2.dll",
+ "runtimes/win-x86/native/av_libglesv2.dll"
+ ]
+ },
+ "Avalonia.BuildServices/0.0.29": {
+ "sha512": "U4eJLQdoDNHXtEba7MZUCwrBErBTxFp6sUewXBOdAhU0Kwzwaa/EKFcYm8kpcysjzKtfB4S0S9n0uxKZFz/ikw==",
+ "type": "package",
+ "path": "avalonia.buildservices/0.0.29",
+ "hasTools": true,
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "avalonia.buildservices.0.0.29.nupkg.sha512",
+ "avalonia.buildservices.nuspec",
+ "build/Avalonia.BuildServices.targets",
+ "buildTransitive/Avalonia.BuildServices.targets",
+ "tools/netstandard2.0/Avalonia.BuildServices.Collector.dll",
+ "tools/netstandard2.0/Avalonia.BuildServices.dll",
+ "tools/netstandard2.0/runtimeconfig.json"
+ ]
+ },
+ "Avalonia.Controls.ColorPicker/11.2.2": {
+ "sha512": "4EMwXvp13WsIvk7eHBXjrT3JBqMYI5lGMYwPUh5f4vsPX1KArSnyy9F4+eByUvJKLROEY6j4gXoPaqtZfAjy1A==",
+ "type": "package",
+ "path": "avalonia.controls.colorpicker/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.controls.colorpicker.11.2.2.nupkg.sha512",
+ "avalonia.controls.colorpicker.nuspec",
+ "lib/net6.0/Avalonia.Controls.ColorPicker.dll",
+ "lib/net6.0/Avalonia.Controls.ColorPicker.xml",
+ "lib/net8.0/Avalonia.Controls.ColorPicker.dll",
+ "lib/net8.0/Avalonia.Controls.ColorPicker.xml",
+ "lib/netstandard2.0/Avalonia.Controls.ColorPicker.dll",
+ "lib/netstandard2.0/Avalonia.Controls.ColorPicker.xml"
+ ]
+ },
+ "Avalonia.Controls.DataGrid/11.2.2": {
+ "sha512": "h86QMlOvjDsihg64WYAvyxFWhwFf30WffwoY8vJGF3BgLpahW+VjNeq5GoO0VyGWWJI2vdTJEzO5fjb8MEpwAg==",
+ "type": "package",
+ "path": "avalonia.controls.datagrid/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.controls.datagrid.11.2.2.nupkg.sha512",
+ "avalonia.controls.datagrid.nuspec",
+ "lib/net6.0/Avalonia.Controls.DataGrid.dll",
+ "lib/net6.0/Avalonia.Controls.DataGrid.xml",
+ "lib/net8.0/Avalonia.Controls.DataGrid.dll",
+ "lib/net8.0/Avalonia.Controls.DataGrid.xml",
+ "lib/netstandard2.0/Avalonia.Controls.DataGrid.dll",
+ "lib/netstandard2.0/Avalonia.Controls.DataGrid.xml"
+ ]
+ },
+ "Avalonia.Desktop/11.2.2": {
+ "sha512": "UPq1dmCR4AxDEaR7H/L/hqYlzqAox0LbUUChfbTs8HhSRZV4uoDBVzebp8Gl5x0sb6j+nr3Nbp1lpr/4C1dG4A==",
+ "type": "package",
+ "path": "avalonia.desktop/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.desktop.11.2.2.nupkg.sha512",
+ "avalonia.desktop.nuspec",
+ "lib/net6.0/Avalonia.Desktop.dll",
+ "lib/net6.0/Avalonia.Desktop.xml",
+ "lib/net8.0/Avalonia.Desktop.dll",
+ "lib/net8.0/Avalonia.Desktop.xml",
+ "lib/netstandard2.0/Avalonia.Desktop.dll",
+ "lib/netstandard2.0/Avalonia.Desktop.xml"
+ ]
+ },
+ "Avalonia.Diagnostics/11.2.2": {
+ "sha512": "O3hSjXJ1htUJdlKkkH+B3/CcNIGtIRKHlt/L81H2MUT+xiXoHeiWjQf+mSnGgN3LEOt5ZBCuDOZ4NgkchncylQ==",
+ "type": "package",
+ "path": "avalonia.diagnostics/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.diagnostics.11.2.2.nupkg.sha512",
+ "avalonia.diagnostics.nuspec",
+ "lib/net6.0/Avalonia.Diagnostics.dll",
+ "lib/net6.0/Avalonia.Diagnostics.xml",
+ "lib/net8.0/Avalonia.Diagnostics.dll",
+ "lib/net8.0/Avalonia.Diagnostics.xml",
+ "lib/netstandard2.0/Avalonia.Diagnostics.dll",
+ "lib/netstandard2.0/Avalonia.Diagnostics.xml"
+ ]
+ },
+ "Avalonia.Fonts.Inter/11.2.2": {
+ "sha512": "VRZudRysGp92Gewn+NQiUSaiPK5YV5KmL+73xKx0QbW7Ap7XLrORj9sFhZYQYssNJoBcIXEM4YOcc8SrWHbCyg==",
+ "type": "package",
+ "path": "avalonia.fonts.inter/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.fonts.inter.11.2.2.nupkg.sha512",
+ "avalonia.fonts.inter.nuspec",
+ "lib/net6.0/Avalonia.Fonts.Inter.dll",
+ "lib/net6.0/Avalonia.Fonts.Inter.xml",
+ "lib/net8.0/Avalonia.Fonts.Inter.dll",
+ "lib/net8.0/Avalonia.Fonts.Inter.xml",
+ "lib/netstandard2.0/Avalonia.Fonts.Inter.dll",
+ "lib/netstandard2.0/Avalonia.Fonts.Inter.xml"
+ ]
+ },
+ "Avalonia.FreeDesktop/11.2.2": {
+ "sha512": "bx5obPjGTmAg1YtHJexyvetEXQgfu5QjQjczvCjd6f8OFoeVqUP76ttsBwEkPhP9aVGGZ7xFKF9JGmgC4zCHbg==",
+ "type": "package",
+ "path": "avalonia.freedesktop/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.freedesktop.11.2.2.nupkg.sha512",
+ "avalonia.freedesktop.nuspec",
+ "lib/net6.0/Avalonia.FreeDesktop.dll",
+ "lib/net6.0/Avalonia.FreeDesktop.xml",
+ "lib/net8.0/Avalonia.FreeDesktop.dll",
+ "lib/net8.0/Avalonia.FreeDesktop.xml",
+ "lib/netstandard2.0/Avalonia.FreeDesktop.dll",
+ "lib/netstandard2.0/Avalonia.FreeDesktop.xml"
+ ]
+ },
+ "Avalonia.Native/11.2.2": {
+ "sha512": "eJYdGvLNzqSPVzubMm78ma3so96t7xuxQS4tKz3dOw13lF+/X32A9vflkifyIMKY/AqFsj7T7qHG7g8W0T5RWg==",
+ "type": "package",
+ "path": "avalonia.native/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.native.11.2.2.nupkg.sha512",
+ "avalonia.native.nuspec",
+ "lib/net6.0/Avalonia.Native.dll",
+ "lib/net6.0/Avalonia.Native.xml",
+ "lib/net8.0/Avalonia.Native.dll",
+ "lib/net8.0/Avalonia.Native.xml",
+ "lib/netstandard2.0/Avalonia.Native.dll",
+ "lib/netstandard2.0/Avalonia.Native.xml",
+ "runtimes/osx/native/libAvaloniaNative.dylib"
+ ]
+ },
+ "Avalonia.Remote.Protocol/11.2.2": {
+ "sha512": "76nQ2/TkJAmthHcCPoVznnCfsqhy+pDPFBhySoRv3ZIsj5q9jIgR0bi7rznIcFIKnfoXMEpB1uxMHbfeQ99OgQ==",
+ "type": "package",
+ "path": "avalonia.remote.protocol/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.remote.protocol.11.2.2.nupkg.sha512",
+ "avalonia.remote.protocol.nuspec",
+ "lib/net6.0/Avalonia.Remote.Protocol.dll",
+ "lib/net6.0/Avalonia.Remote.Protocol.xml",
+ "lib/net8.0/Avalonia.Remote.Protocol.dll",
+ "lib/net8.0/Avalonia.Remote.Protocol.xml",
+ "lib/netstandard2.0/Avalonia.Remote.Protocol.dll",
+ "lib/netstandard2.0/Avalonia.Remote.Protocol.xml"
+ ]
+ },
+ "Avalonia.Skia/11.2.2": {
+ "sha512": "/kNUpB8Lnx7wvVNLybkMjp9YbG4xdiyAmYTBRQAM7hObMPQRx5HKUQJ9AmduCt9KY50lvUkCfTbk/ROnUFhQ3w==",
+ "type": "package",
+ "path": "avalonia.skia/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.skia.11.2.2.nupkg.sha512",
+ "avalonia.skia.nuspec",
+ "lib/net6.0/Avalonia.Skia.dll",
+ "lib/net6.0/Avalonia.Skia.xml",
+ "lib/net8.0/Avalonia.Skia.dll",
+ "lib/net8.0/Avalonia.Skia.xml",
+ "lib/netstandard2.0/Avalonia.Skia.dll",
+ "lib/netstandard2.0/Avalonia.Skia.xml"
+ ]
+ },
+ "Avalonia.Themes.Fluent/11.2.2": {
+ "sha512": "75z5fu4R3myG4TiyPKXHpjA3Jimq6InBB+inLugNHtONuDT9pQdt/CMPhnMcRaueBLjvaJTFs4KS5U8+sGTu0A==",
+ "type": "package",
+ "path": "avalonia.themes.fluent/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.themes.fluent.11.2.2.nupkg.sha512",
+ "avalonia.themes.fluent.nuspec",
+ "lib/net6.0/Avalonia.Themes.Fluent.dll",
+ "lib/net6.0/Avalonia.Themes.Fluent.xml",
+ "lib/net8.0/Avalonia.Themes.Fluent.dll",
+ "lib/net8.0/Avalonia.Themes.Fluent.xml",
+ "lib/netstandard2.0/Avalonia.Themes.Fluent.dll",
+ "lib/netstandard2.0/Avalonia.Themes.Fluent.xml"
+ ]
+ },
+ "Avalonia.Themes.Simple/11.2.2": {
+ "sha512": "EgK1N3VAbZpF3NFKKbwDekjKekaDNrHXkPllDom04iP7ZbwuH4xGhmjKlEB5KkPuvxWEfS1ROuRYqVHtna0KRg==",
+ "type": "package",
+ "path": "avalonia.themes.simple/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.themes.simple.11.2.2.nupkg.sha512",
+ "avalonia.themes.simple.nuspec",
+ "lib/net6.0/Avalonia.Themes.Simple.dll",
+ "lib/net6.0/Avalonia.Themes.Simple.xml",
+ "lib/net8.0/Avalonia.Themes.Simple.dll",
+ "lib/net8.0/Avalonia.Themes.Simple.xml",
+ "lib/netstandard2.0/Avalonia.Themes.Simple.dll",
+ "lib/netstandard2.0/Avalonia.Themes.Simple.xml"
+ ]
+ },
+ "Avalonia.Win32/11.2.2": {
+ "sha512": "MQDY5f+GIbuv5klPUWf3WSh0cugEfxnHVQKkIJ02FnR3xzZpEQyfMvqfG8emMKmLAQ7ivqH68Mny0WuPKofc0Q==",
+ "type": "package",
+ "path": "avalonia.win32/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.win32.11.2.2.nupkg.sha512",
+ "avalonia.win32.nuspec",
+ "lib/net6.0/Avalonia.Win32.dll",
+ "lib/net6.0/Avalonia.Win32.xml",
+ "lib/net8.0/Avalonia.Win32.dll",
+ "lib/net8.0/Avalonia.Win32.xml",
+ "lib/netstandard2.0/Avalonia.Win32.dll",
+ "lib/netstandard2.0/Avalonia.Win32.xml"
+ ]
+ },
+ "Avalonia.X11/11.2.2": {
+ "sha512": "uptryb4T1h6mBgMxRU0B7IX01CjRwT0KvxPbq2ObhF8CgehQPIl52lcAe09CFi+ZEeu3EJi1/Fa1MH4PDsp4Sw==",
+ "type": "package",
+ "path": "avalonia.x11/11.2.2",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "avalonia.x11.11.2.2.nupkg.sha512",
+ "avalonia.x11.nuspec",
+ "lib/net6.0/Avalonia.X11.dll",
+ "lib/net6.0/Avalonia.X11.xml",
+ "lib/net8.0/Avalonia.X11.dll",
+ "lib/net8.0/Avalonia.X11.xml",
+ "lib/netstandard2.0/Avalonia.X11.dll",
+ "lib/netstandard2.0/Avalonia.X11.xml"
+ ]
+ },
+ "CommunityToolkit.Mvvm/8.2.1": {
+ "sha512": "I24ofWVEdplxYjUez9/bljv/qb8r8Ccj6cvYXHexNBegLaD3iDy3QrzAAOYVMmfGWIXxlU1ZtECQNfU07+6hXQ==",
+ "type": "package",
+ "path": "communitytoolkit.mvvm/8.2.1",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "License.md",
+ "ThirdPartyNotices.txt",
+ "analyzers/dotnet/roslyn4.0/cs/CommunityToolkit.Mvvm.CodeFixers.dll",
+ "analyzers/dotnet/roslyn4.0/cs/CommunityToolkit.Mvvm.SourceGenerators.dll",
+ "analyzers/dotnet/roslyn4.3/cs/CommunityToolkit.Mvvm.CodeFixers.dll",
+ "analyzers/dotnet/roslyn4.3/cs/CommunityToolkit.Mvvm.SourceGenerators.dll",
+ "build/netstandard2.0/CommunityToolkit.Mvvm.targets",
+ "build/netstandard2.1/CommunityToolkit.Mvvm.targets",
+ "buildTransitive/netstandard2.0/CommunityToolkit.Mvvm.targets",
+ "buildTransitive/netstandard2.1/CommunityToolkit.Mvvm.targets",
+ "communitytoolkit.mvvm.8.2.1.nupkg.sha512",
+ "communitytoolkit.mvvm.nuspec",
+ "lib/net6.0/CommunityToolkit.Mvvm.dll",
+ "lib/net6.0/CommunityToolkit.Mvvm.pdb",
+ "lib/net6.0/CommunityToolkit.Mvvm.xml",
+ "lib/netstandard2.0/CommunityToolkit.Mvvm.dll",
+ "lib/netstandard2.0/CommunityToolkit.Mvvm.pdb",
+ "lib/netstandard2.0/CommunityToolkit.Mvvm.xml",
+ "lib/netstandard2.1/CommunityToolkit.Mvvm.dll",
+ "lib/netstandard2.1/CommunityToolkit.Mvvm.pdb",
+ "lib/netstandard2.1/CommunityToolkit.Mvvm.xml"
+ ]
+ },
+ "HarfBuzzSharp/7.3.0.3": {
+ "sha512": "Hq+5+gx10coOvuRgB13KBwiWxJq1QeYuhtVLbA01ZCWaugOnolUahF44KvrQTUUHDNk/C7HB6SMaebsZeOdhgg==",
+ "type": "package",
+ "path": "harfbuzzsharp/7.3.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "harfbuzzsharp.7.3.0.3.nupkg.sha512",
+ "harfbuzzsharp.nuspec",
+ "lib/monoandroid1.0/HarfBuzzSharp.dll",
+ "lib/monoandroid1.0/HarfBuzzSharp.pdb",
+ "lib/monoandroid1.0/HarfBuzzSharp.xml",
+ "lib/net462/HarfBuzzSharp.dll",
+ "lib/net462/HarfBuzzSharp.pdb",
+ "lib/net462/HarfBuzzSharp.xml",
+ "lib/net6.0-android30.0/HarfBuzzSharp.dll",
+ "lib/net6.0-android30.0/HarfBuzzSharp.pdb",
+ "lib/net6.0-android30.0/HarfBuzzSharp.xml",
+ "lib/net6.0-ios13.6/HarfBuzzSharp.dll",
+ "lib/net6.0-ios13.6/HarfBuzzSharp.pdb",
+ "lib/net6.0-ios13.6/HarfBuzzSharp.xml",
+ "lib/net6.0-maccatalyst13.5/HarfBuzzSharp.dll",
+ "lib/net6.0-maccatalyst13.5/HarfBuzzSharp.pdb",
+ "lib/net6.0-maccatalyst13.5/HarfBuzzSharp.xml",
+ "lib/net6.0-macos10.15/HarfBuzzSharp.dll",
+ "lib/net6.0-macos10.15/HarfBuzzSharp.pdb",
+ "lib/net6.0-macos10.15/HarfBuzzSharp.xml",
+ "lib/net6.0-tvos13.4/HarfBuzzSharp.dll",
+ "lib/net6.0-tvos13.4/HarfBuzzSharp.pdb",
+ "lib/net6.0-tvos13.4/HarfBuzzSharp.xml",
+ "lib/net6.0/HarfBuzzSharp.dll",
+ "lib/net6.0/HarfBuzzSharp.pdb",
+ "lib/net6.0/HarfBuzzSharp.xml",
+ "lib/netcoreapp3.1/HarfBuzzSharp.dll",
+ "lib/netcoreapp3.1/HarfBuzzSharp.pdb",
+ "lib/netcoreapp3.1/HarfBuzzSharp.xml",
+ "lib/netstandard1.3/HarfBuzzSharp.dll",
+ "lib/netstandard1.3/HarfBuzzSharp.pdb",
+ "lib/netstandard1.3/HarfBuzzSharp.xml",
+ "lib/netstandard2.0/HarfBuzzSharp.dll",
+ "lib/netstandard2.0/HarfBuzzSharp.pdb",
+ "lib/netstandard2.0/HarfBuzzSharp.xml",
+ "lib/netstandard2.1/HarfBuzzSharp.dll",
+ "lib/netstandard2.1/HarfBuzzSharp.pdb",
+ "lib/netstandard2.1/HarfBuzzSharp.xml",
+ "lib/tizen40/HarfBuzzSharp.dll",
+ "lib/tizen40/HarfBuzzSharp.pdb",
+ "lib/tizen40/HarfBuzzSharp.xml",
+ "lib/uap10.0.10240/HarfBuzzSharp.dll",
+ "lib/uap10.0.10240/HarfBuzzSharp.pdb",
+ "lib/uap10.0.10240/HarfBuzzSharp.xml",
+ "lib/uap10.0.16299/HarfBuzzSharp.dll",
+ "lib/uap10.0.16299/HarfBuzzSharp.pdb",
+ "lib/uap10.0.16299/HarfBuzzSharp.xml",
+ "lib/xamarinios1.0/HarfBuzzSharp.dll",
+ "lib/xamarinios1.0/HarfBuzzSharp.pdb",
+ "lib/xamarinios1.0/HarfBuzzSharp.xml",
+ "lib/xamarinmac2.0/HarfBuzzSharp.dll",
+ "lib/xamarinmac2.0/HarfBuzzSharp.pdb",
+ "lib/xamarinmac2.0/HarfBuzzSharp.xml",
+ "lib/xamarintvos1.0/HarfBuzzSharp.dll",
+ "lib/xamarintvos1.0/HarfBuzzSharp.pdb",
+ "lib/xamarintvos1.0/HarfBuzzSharp.xml",
+ "lib/xamarinwatchos1.0/HarfBuzzSharp.dll",
+ "lib/xamarinwatchos1.0/HarfBuzzSharp.pdb",
+ "lib/xamarinwatchos1.0/HarfBuzzSharp.xml"
+ ]
+ },
+ "HarfBuzzSharp.NativeAssets.Linux/7.3.0.3": {
+ "sha512": "hkcHeTfOyIeJuPtO/QfoqkDvV/MXebZYaA/Bn/S+nXsjH3Wt9oQ6okH2kklYO+1UUdBSJFd67bi9IrpQXI2mPw==",
+ "type": "package",
+ "path": "harfbuzzsharp.nativeassets.linux/7.3.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/net462/HarfBuzzSharp.NativeAssets.Linux.targets",
+ "buildTransitive/net462/HarfBuzzSharp.NativeAssets.Linux.targets",
+ "harfbuzzsharp.nativeassets.linux.7.3.0.3.nupkg.sha512",
+ "harfbuzzsharp.nativeassets.linux.nuspec",
+ "lib/net462/_._",
+ "lib/net6.0/_._",
+ "lib/netcoreapp3.1/_._",
+ "lib/netstandard1.3/_._",
+ "runtimes/linux-arm/native/libHarfBuzzSharp.so",
+ "runtimes/linux-arm64/native/libHarfBuzzSharp.so",
+ "runtimes/linux-musl-x64/native/libHarfBuzzSharp.so",
+ "runtimes/linux-x64/native/libHarfBuzzSharp.so"
+ ]
+ },
+ "HarfBuzzSharp.NativeAssets.macOS/7.3.0.3": {
+ "sha512": "UAwIYnkbBTzBJv1Id8FijY/i8QiIepRemSXufU8fyzwWhYJdx4+ajG8yQUie5HW/uusbVLFSr26muSlJOFDgSw==",
+ "type": "package",
+ "path": "harfbuzzsharp.nativeassets.macos/7.3.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/net462/HarfBuzzSharp.NativeAssets.macOS.targets",
+ "build/net6.0-macos10.15/HarfBuzzSharp.NativeAssets.macOS.targets",
+ "build/xamarinmac2.0/HarfBuzzSharp.NativeAssets.macOS.targets",
+ "buildTransitive/net462/HarfBuzzSharp.NativeAssets.macOS.targets",
+ "buildTransitive/net6.0-macos10.15/HarfBuzzSharp.NativeAssets.macOS.targets",
+ "buildTransitive/xamarinmac2.0/HarfBuzzSharp.NativeAssets.macOS.targets",
+ "harfbuzzsharp.nativeassets.macos.7.3.0.3.nupkg.sha512",
+ "harfbuzzsharp.nativeassets.macos.nuspec",
+ "lib/net462/_._",
+ "lib/net6.0-macos10.15/_._",
+ "lib/net6.0/_._",
+ "lib/netcoreapp3.1/_._",
+ "lib/netstandard1.3/_._",
+ "lib/xamarinmac2.0/_._",
+ "runtimes/osx/native/libHarfBuzzSharp.dylib"
+ ]
+ },
+ "HarfBuzzSharp.NativeAssets.WebAssembly/7.3.0.3": {
+ "sha512": "OpheDNp9a3nC6hWNACemWkNEXJ4tWP3Gw9bykw3FbyeEmU2nUDtLIp6VgNnjHAPRMgUs1Kl7m4gJpzVYwC7CZw==",
+ "type": "package",
+ "path": "harfbuzzsharp.nativeassets.webassembly/7.3.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/netstandard1.0/HarfBuzzSharp.NativeAssets.WebAssembly.props",
+ "build/netstandard1.0/HarfBuzzSharp.NativeAssets.WebAssembly.targets",
+ "build/netstandard1.0/libHarfBuzzSharp.a/2.0.23/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/2.0.6/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.12/mt,simd/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.12/mt/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.12/simd/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.12/st/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.34/mt/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.34/simd,mt/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.34/simd,st/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.34/st/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.56/mt/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.56/simd,mt/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.56/simd,st/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.56/st/libHarfBuzzSharp.a",
+ "build/netstandard1.0/libHarfBuzzSharp.a/3.1.7/libHarfBuzzSharp.a",
+ "buildTransitive/netstandard1.0/HarfBuzzSharp.NativeAssets.WebAssembly.props",
+ "buildTransitive/netstandard1.0/HarfBuzzSharp.NativeAssets.WebAssembly.targets",
+ "harfbuzzsharp.nativeassets.webassembly.7.3.0.3.nupkg.sha512",
+ "harfbuzzsharp.nativeassets.webassembly.nuspec",
+ "lib/netstandard1.0/_._"
+ ]
+ },
+ "HarfBuzzSharp.NativeAssets.Win32/7.3.0.3": {
+ "sha512": "RPxRXD16KtSs8Yxr2RK9Qs7AwyN9MlpqZIYs0AvfaJwl7RAtVhC0+u2f2SKwX0uMYYd3O98Z+OBA1sj6aWVKQA==",
+ "type": "package",
+ "path": "harfbuzzsharp.nativeassets.win32/7.3.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/net462/HarfBuzzSharp.NativeAssets.Win32.targets",
+ "buildTransitive/net462/HarfBuzzSharp.NativeAssets.Win32.targets",
+ "harfbuzzsharp.nativeassets.win32.7.3.0.3.nupkg.sha512",
+ "harfbuzzsharp.nativeassets.win32.nuspec",
+ "lib/net462/_._",
+ "lib/net6.0/_._",
+ "lib/netcoreapp3.1/_._",
+ "lib/netstandard1.3/_._",
+ "runtimes/win-arm64/native/libHarfBuzzSharp.dll",
+ "runtimes/win-x64/native/libHarfBuzzSharp.dll",
+ "runtimes/win-x86/native/libHarfBuzzSharp.dll"
+ ]
+ },
+ "LiveChartsCore/2.0.0-rc4.5": {
+ "sha512": "BFbYQ6DYNlg6AodfRxB26R311IxaUla0DfmFTyO0jhaDrgxbiIDt5+CvU1TQxNUijDEH95SI/OHCw2p9DF3rGg==",
+ "type": "package",
+ "path": "livechartscore/2.0.0-rc4.5",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "icon.png",
+ "lib/net462/LiveChartsCore.dll",
+ "lib/net462/LiveChartsCore.xml",
+ "lib/net8.0-android34.0/LiveChartsCore.dll",
+ "lib/net8.0-android34.0/LiveChartsCore.xml",
+ "lib/net8.0-ios18.0/LiveChartsCore.dll",
+ "lib/net8.0-ios18.0/LiveChartsCore.xml",
+ "lib/net8.0-maccatalyst18.0/LiveChartsCore.dll",
+ "lib/net8.0-maccatalyst18.0/LiveChartsCore.xml",
+ "lib/net8.0-windows10.0.19041/LiveChartsCore.dll",
+ "lib/net8.0-windows10.0.19041/LiveChartsCore.xml",
+ "lib/net8.0-windows10.0.20348/LiveChartsCore.dll",
+ "lib/net8.0-windows10.0.20348/LiveChartsCore.xml",
+ "lib/net8.0/LiveChartsCore.dll",
+ "lib/net8.0/LiveChartsCore.xml",
+ "lib/netstandard2.0/LiveChartsCore.dll",
+ "lib/netstandard2.0/LiveChartsCore.xml",
+ "lib/netstandard2.1/LiveChartsCore.dll",
+ "lib/netstandard2.1/LiveChartsCore.xml",
+ "livechartscore.2.0.0-rc4.5.nupkg.sha512",
+ "livechartscore.nuspec"
+ ]
+ },
+ "LiveChartsCore.SkiaSharpView/2.0.0-rc4.5": {
+ "sha512": "9WX8/trgbcpe2dHNMSve2ZXGVgeAFBqbg9u9HwWeX7IITh+gHUg0bfzc66JUSH6A/tYrZ00xltOMh4nzLE1f3g==",
+ "type": "package",
+ "path": "livechartscore.skiasharpview/2.0.0-rc4.5",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "icon.png",
+ "lib/net462/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net462/LiveChartsCore.SkiaSharpView.xml",
+ "lib/net8.0-android34.0/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net8.0-android34.0/LiveChartsCore.SkiaSharpView.xml",
+ "lib/net8.0-ios18.0/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net8.0-ios18.0/LiveChartsCore.SkiaSharpView.xml",
+ "lib/net8.0-maccatalyst18.0/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net8.0-maccatalyst18.0/LiveChartsCore.SkiaSharpView.xml",
+ "lib/net8.0-windows10.0.19041/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net8.0-windows10.0.19041/LiveChartsCore.SkiaSharpView.xml",
+ "lib/net8.0-windows10.0.20348/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net8.0-windows10.0.20348/LiveChartsCore.SkiaSharpView.xml",
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.dll",
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.xml",
+ "lib/netstandard2.0/LiveChartsCore.SkiaSharpView.dll",
+ "lib/netstandard2.0/LiveChartsCore.SkiaSharpView.xml",
+ "lib/netstandard2.1/LiveChartsCore.SkiaSharpView.dll",
+ "lib/netstandard2.1/LiveChartsCore.SkiaSharpView.xml",
+ "livechartscore.skiasharpview.2.0.0-rc4.5.nupkg.sha512",
+ "livechartscore.skiasharpview.nuspec"
+ ]
+ },
+ "LiveChartsCore.SkiaSharpView.Avalonia/2.0.0-rc4.5": {
+ "sha512": "FBCLxm/TYWcih6SYhRkOCEzSvTV7I+NLmHnifeaoE/1pCuLKIHQ+LvNEMoWhIGM1zMZDSDEZYtkwUaQtGeKYUw==",
+ "type": "package",
+ "path": "livechartscore.skiasharpview.avalonia/2.0.0-rc4.5",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "icon.png",
+ "lib/net6.0/LiveChartsCore.SkiaSharpView.Avalonia.dll",
+ "lib/net6.0/LiveChartsCore.SkiaSharpView.Avalonia.xml",
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.dll",
+ "lib/net8.0/LiveChartsCore.SkiaSharpView.Avalonia.xml",
+ "lib/netstandard2.0/LiveChartsCore.SkiaSharpView.Avalonia.dll",
+ "lib/netstandard2.0/LiveChartsCore.SkiaSharpView.Avalonia.xml",
+ "lib/netstandard2.1/LiveChartsCore.SkiaSharpView.Avalonia.dll",
+ "lib/netstandard2.1/LiveChartsCore.SkiaSharpView.Avalonia.xml",
+ "livechartscore.skiasharpview.avalonia.2.0.0-rc4.5.nupkg.sha512",
+ "livechartscore.skiasharpview.avalonia.nuspec"
+ ]
+ },
+ "MathNet.Numerics/5.0.0": {
+ "sha512": "pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
+ "type": "package",
+ "path": "mathnet.numerics/5.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "icon.png",
+ "lib/net461/MathNet.Numerics.dll",
+ "lib/net461/MathNet.Numerics.xml",
+ "lib/net48/MathNet.Numerics.dll",
+ "lib/net48/MathNet.Numerics.xml",
+ "lib/net5.0/MathNet.Numerics.dll",
+ "lib/net5.0/MathNet.Numerics.xml",
+ "lib/net6.0/MathNet.Numerics.dll",
+ "lib/net6.0/MathNet.Numerics.xml",
+ "lib/netstandard2.0/MathNet.Numerics.dll",
+ "lib/netstandard2.0/MathNet.Numerics.xml",
+ "mathnet.numerics.5.0.0.nupkg.sha512",
+ "mathnet.numerics.nuspec"
+ ]
+ },
+ "MicroCom.Runtime/0.11.0": {
+ "sha512": "MEnrZ3UIiH40hjzMDsxrTyi8dtqB5ziv3iBeeU4bXsL/7NLSal9F1lZKpK+tfBRnUoDSdtcW3KufE4yhATOMCA==",
+ "type": "package",
+ "path": "microcom.runtime/0.11.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net5.0/MicroCom.Runtime.dll",
+ "lib/netstandard2.0/MicroCom.Runtime.dll",
+ "microcom.runtime.0.11.0.nupkg.sha512",
+ "microcom.runtime.nuspec"
+ ]
+ },
+ "SkiaSharp/2.88.9": {
+ "sha512": "3MD5VHjXXieSHCleRLuaTXmL2pD0mB7CcOB1x2kA1I4bhptf4e3R27iM93264ZYuAq6mkUyX5XbcxnZvMJYc1Q==",
+ "type": "package",
+ "path": "skiasharp/2.88.9",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "interactive-extensions/dotnet/SkiaSharp.DotNet.Interactive.dll",
+ "lib/monoandroid1.0/SkiaSharp.dll",
+ "lib/monoandroid1.0/SkiaSharp.pdb",
+ "lib/monoandroid1.0/SkiaSharp.xml",
+ "lib/net462/SkiaSharp.dll",
+ "lib/net462/SkiaSharp.pdb",
+ "lib/net462/SkiaSharp.xml",
+ "lib/net6.0-android30.0/SkiaSharp.dll",
+ "lib/net6.0-android30.0/SkiaSharp.pdb",
+ "lib/net6.0-android30.0/SkiaSharp.xml",
+ "lib/net6.0-ios13.6/SkiaSharp.dll",
+ "lib/net6.0-ios13.6/SkiaSharp.pdb",
+ "lib/net6.0-ios13.6/SkiaSharp.xml",
+ "lib/net6.0-maccatalyst13.5/SkiaSharp.dll",
+ "lib/net6.0-maccatalyst13.5/SkiaSharp.pdb",
+ "lib/net6.0-maccatalyst13.5/SkiaSharp.xml",
+ "lib/net6.0-macos10.15/SkiaSharp.dll",
+ "lib/net6.0-macos10.15/SkiaSharp.pdb",
+ "lib/net6.0-macos10.15/SkiaSharp.xml",
+ "lib/net6.0-tizen7.0/SkiaSharp.dll",
+ "lib/net6.0-tizen7.0/SkiaSharp.pdb",
+ "lib/net6.0-tizen7.0/SkiaSharp.xml",
+ "lib/net6.0-tvos13.4/SkiaSharp.dll",
+ "lib/net6.0-tvos13.4/SkiaSharp.pdb",
+ "lib/net6.0-tvos13.4/SkiaSharp.xml",
+ "lib/net6.0/SkiaSharp.dll",
+ "lib/net6.0/SkiaSharp.pdb",
+ "lib/net6.0/SkiaSharp.xml",
+ "lib/netcoreapp3.1/SkiaSharp.dll",
+ "lib/netcoreapp3.1/SkiaSharp.pdb",
+ "lib/netcoreapp3.1/SkiaSharp.xml",
+ "lib/netstandard1.3/SkiaSharp.dll",
+ "lib/netstandard1.3/SkiaSharp.pdb",
+ "lib/netstandard1.3/SkiaSharp.xml",
+ "lib/netstandard2.0/SkiaSharp.dll",
+ "lib/netstandard2.0/SkiaSharp.pdb",
+ "lib/netstandard2.0/SkiaSharp.xml",
+ "lib/netstandard2.1/SkiaSharp.dll",
+ "lib/netstandard2.1/SkiaSharp.pdb",
+ "lib/netstandard2.1/SkiaSharp.xml",
+ "lib/tizen40/SkiaSharp.dll",
+ "lib/tizen40/SkiaSharp.pdb",
+ "lib/tizen40/SkiaSharp.xml",
+ "lib/uap10.0.10240/SkiaSharp.dll",
+ "lib/uap10.0.10240/SkiaSharp.pdb",
+ "lib/uap10.0.10240/SkiaSharp.xml",
+ "lib/uap10.0.16299/SkiaSharp.dll",
+ "lib/uap10.0.16299/SkiaSharp.pdb",
+ "lib/uap10.0.16299/SkiaSharp.xml",
+ "lib/xamarinios1.0/SkiaSharp.dll",
+ "lib/xamarinios1.0/SkiaSharp.pdb",
+ "lib/xamarinios1.0/SkiaSharp.xml",
+ "lib/xamarinmac2.0/SkiaSharp.dll",
+ "lib/xamarinmac2.0/SkiaSharp.pdb",
+ "lib/xamarinmac2.0/SkiaSharp.xml",
+ "lib/xamarintvos1.0/SkiaSharp.dll",
+ "lib/xamarintvos1.0/SkiaSharp.pdb",
+ "lib/xamarintvos1.0/SkiaSharp.xml",
+ "lib/xamarinwatchos1.0/SkiaSharp.dll",
+ "lib/xamarinwatchos1.0/SkiaSharp.pdb",
+ "lib/xamarinwatchos1.0/SkiaSharp.xml",
+ "skiasharp.2.88.9.nupkg.sha512",
+ "skiasharp.nuspec"
+ ]
+ },
+ "SkiaSharp.HarfBuzz/2.88.8": {
+ "sha512": "ajSyJ2D17R0kZ4FwKwFrJTsYs3D3Y9iRBLhNecROR7dOxC6VTFaMPXJuwQB8KYpAqgmb2JAJFEgZ3i8MaaIw1g==",
+ "type": "package",
+ "path": "skiasharp.harfbuzz/2.88.8",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "lib/net462/SkiaSharp.HarfBuzz.dll",
+ "lib/net462/SkiaSharp.HarfBuzz.pdb",
+ "lib/net462/SkiaSharp.HarfBuzz.xml",
+ "lib/net6.0/SkiaSharp.HarfBuzz.dll",
+ "lib/net6.0/SkiaSharp.HarfBuzz.pdb",
+ "lib/net6.0/SkiaSharp.HarfBuzz.xml",
+ "lib/netcoreapp3.1/SkiaSharp.HarfBuzz.dll",
+ "lib/netcoreapp3.1/SkiaSharp.HarfBuzz.pdb",
+ "lib/netcoreapp3.1/SkiaSharp.HarfBuzz.xml",
+ "lib/netstandard1.3/SkiaSharp.HarfBuzz.dll",
+ "lib/netstandard1.3/SkiaSharp.HarfBuzz.pdb",
+ "lib/netstandard1.3/SkiaSharp.HarfBuzz.xml",
+ "lib/netstandard2.0/SkiaSharp.HarfBuzz.dll",
+ "lib/netstandard2.0/SkiaSharp.HarfBuzz.pdb",
+ "lib/netstandard2.0/SkiaSharp.HarfBuzz.xml",
+ "lib/netstandard2.1/SkiaSharp.HarfBuzz.dll",
+ "lib/netstandard2.1/SkiaSharp.HarfBuzz.pdb",
+ "lib/netstandard2.1/SkiaSharp.HarfBuzz.xml",
+ "skiasharp.harfbuzz.2.88.8.nupkg.sha512",
+ "skiasharp.harfbuzz.nuspec"
+ ]
+ },
+ "SkiaSharp.NativeAssets.Linux/2.88.9": {
+ "sha512": "cWSaJKVPWAaT/WIn9c8T5uT/l4ETwHxNJTkEOtNKjphNo8AW6TF9O32aRkxqw3l8GUdUo66Bu7EiqtFh/XG0Zg==",
+ "type": "package",
+ "path": "skiasharp.nativeassets.linux/2.88.9",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/net462/SkiaSharp.NativeAssets.Linux.targets",
+ "buildTransitive/net462/SkiaSharp.NativeAssets.Linux.targets",
+ "lib/net462/_._",
+ "lib/net6.0/_._",
+ "lib/netcoreapp3.1/_._",
+ "lib/netstandard1.3/_._",
+ "runtimes/linux-arm/native/libSkiaSharp.so",
+ "runtimes/linux-arm64/native/libSkiaSharp.so",
+ "runtimes/linux-musl-x64/native/libSkiaSharp.so",
+ "runtimes/linux-x64/native/libSkiaSharp.so",
+ "skiasharp.nativeassets.linux.2.88.9.nupkg.sha512",
+ "skiasharp.nativeassets.linux.nuspec"
+ ]
+ },
+ "SkiaSharp.NativeAssets.macOS/2.88.9": {
+ "sha512": "Nv5spmKc4505Ep7oUoJ5vp3KweFpeNqxpyGDWyeEPTX2uR6S6syXIm3gj75dM0YJz7NPvcix48mR5laqs8dPuA==",
+ "type": "package",
+ "path": "skiasharp.nativeassets.macos/2.88.9",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/net462/SkiaSharp.NativeAssets.macOS.targets",
+ "build/net6.0-macos10.15/SkiaSharp.NativeAssets.macOS.targets",
+ "build/xamarinmac2.0/SkiaSharp.NativeAssets.macOS.targets",
+ "buildTransitive/net462/SkiaSharp.NativeAssets.macOS.targets",
+ "buildTransitive/net6.0-macos10.15/SkiaSharp.NativeAssets.macOS.targets",
+ "buildTransitive/xamarinmac2.0/SkiaSharp.NativeAssets.macOS.targets",
+ "lib/net462/_._",
+ "lib/net6.0-macos10.15/_._",
+ "lib/net6.0/_._",
+ "lib/netcoreapp3.1/_._",
+ "lib/netstandard1.3/_._",
+ "lib/xamarinmac2.0/_._",
+ "runtimes/osx/native/libSkiaSharp.dylib",
+ "skiasharp.nativeassets.macos.2.88.9.nupkg.sha512",
+ "skiasharp.nativeassets.macos.nuspec"
+ ]
+ },
+ "SkiaSharp.NativeAssets.WebAssembly/2.88.9": {
+ "sha512": "kt06RccBHSnAs2wDYdBSfsjIDbY3EpsOVqnlDgKdgvyuRA8ZFDaHRdWNx1VHjGgYzmnFCGiTJBnXFl5BqGwGnA==",
+ "type": "package",
+ "path": "skiasharp.nativeassets.webassembly/2.88.9",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/netstandard1.0/SkiaSharp.NativeAssets.WebAssembly.props",
+ "build/netstandard1.0/SkiaSharp.NativeAssets.WebAssembly.targets",
+ "build/netstandard1.0/libSkiaSharp.a/2.0.23/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/2.0.6/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.12/mt,simd/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.12/mt/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.12/simd/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.12/st/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.34/mt/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.34/simd,mt/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.34/simd,st/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.34/st/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.56/mt/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.56/simd,mt/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.56/simd,st/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.56/st/libSkiaSharp.a",
+ "build/netstandard1.0/libSkiaSharp.a/3.1.7/libSkiaSharp.a",
+ "buildTransitive/netstandard1.0/SkiaSharp.NativeAssets.WebAssembly.props",
+ "buildTransitive/netstandard1.0/SkiaSharp.NativeAssets.WebAssembly.targets",
+ "lib/netstandard1.0/_._",
+ "skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512",
+ "skiasharp.nativeassets.webassembly.nuspec"
+ ]
+ },
+ "SkiaSharp.NativeAssets.Win32/2.88.9": {
+ "sha512": "wb2kYgU7iy84nQLYZwMeJXixvK++GoIuECjU4ECaUKNuflyRlJKyiRhN1MAHswvlvzuvkrjRWlK0Za6+kYQK7w==",
+ "type": "package",
+ "path": "skiasharp.nativeassets.win32/2.88.9",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "LICENSE.txt",
+ "THIRD-PARTY-NOTICES.txt",
+ "build/net462/SkiaSharp.NativeAssets.Win32.targets",
+ "buildTransitive/net462/SkiaSharp.NativeAssets.Win32.targets",
+ "lib/net462/_._",
+ "lib/net6.0/_._",
+ "lib/netcoreapp3.1/_._",
+ "lib/netstandard1.3/_._",
+ "runtimes/win-arm64/native/libSkiaSharp.dll",
+ "runtimes/win-x64/native/libSkiaSharp.dll",
+ "runtimes/win-x86/native/libSkiaSharp.dll",
+ "skiasharp.nativeassets.win32.2.88.9.nupkg.sha512",
+ "skiasharp.nativeassets.win32.nuspec"
+ ]
+ },
+ "System.IO.Pipelines/8.0.0": {
+ "sha512": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
+ "type": "package",
+ "path": "system.io.pipelines/8.0.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "Icon.png",
+ "LICENSE.TXT",
+ "THIRD-PARTY-NOTICES.TXT",
+ "buildTransitive/net461/System.IO.Pipelines.targets",
+ "buildTransitive/net462/_._",
+ "buildTransitive/net6.0/_._",
+ "buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets",
+ "lib/net462/System.IO.Pipelines.dll",
+ "lib/net462/System.IO.Pipelines.xml",
+ "lib/net6.0/System.IO.Pipelines.dll",
+ "lib/net6.0/System.IO.Pipelines.xml",
+ "lib/net7.0/System.IO.Pipelines.dll",
+ "lib/net7.0/System.IO.Pipelines.xml",
+ "lib/net8.0/System.IO.Pipelines.dll",
+ "lib/net8.0/System.IO.Pipelines.xml",
+ "lib/netstandard2.0/System.IO.Pipelines.dll",
+ "lib/netstandard2.0/System.IO.Pipelines.xml",
+ "system.io.pipelines.8.0.0.nupkg.sha512",
+ "system.io.pipelines.nuspec",
+ "useSharedDesignerContext.txt"
+ ]
+ },
+ "Tmds.DBus.Protocol/0.20.0": {
+ "sha512": "2gkt2kuYPhDKd8gtl34jZSJOnn4nRJfFngCDcTZT/uySbK++ua0YQx2418l9Rn1Y4dE5XNq6zG9ZsE5ltLlNNw==",
+ "type": "package",
+ "path": "tmds.dbus.protocol/0.20.0",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "lib/net6.0/Tmds.DBus.Protocol.dll",
+ "lib/net8.0/Tmds.DBus.Protocol.dll",
+ "lib/netstandard2.0/Tmds.DBus.Protocol.dll",
+ "lib/netstandard2.1/Tmds.DBus.Protocol.dll",
+ "tmds.dbus.protocol.0.20.0.nupkg.sha512",
+ "tmds.dbus.protocol.nuspec"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net8.0": [
+ "Avalonia >= 11.2.2",
+ "Avalonia.Desktop >= 11.2.2",
+ "Avalonia.Diagnostics >= 11.2.2",
+ "Avalonia.Fonts.Inter >= 11.2.2",
+ "Avalonia.Themes.Fluent >= 11.2.2",
+ "CommunityToolkit.Mvvm >= 8.2.1",
+ "LiveChartsCore.SkiaSharpView.Avalonia >= 2.0.0-rc4.5",
+ "MathNet.Numerics >= 5.0.0"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\atticus\\.nuget\\packages\\": {},
+ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj",
+ "projectName": "LiveChartCurveControl",
+ "projectPath": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj",
+ "packagesPath": "C:\\Users\\atticus\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\obj\\",
+ "projectStyle": "PackageReference",
+ "UsingMicrosoftNETSdk": false,
+ "fallbackFolders": [
+ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\atticus\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net8.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ }
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "dependencies": {
+ "Avalonia": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Desktop": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Diagnostics": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Fonts.Inter": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "Avalonia.Themes.Fluent": {
+ "target": "Package",
+ "version": "[11.2.2, )"
+ },
+ "CommunityToolkit.Mvvm": {
+ "target": "Package",
+ "version": "[8.2.1, )"
+ },
+ "LiveChartsCore.SkiaSharpView.Avalonia": {
+ "target": "Package",
+ "version": "[2.0.0-rc4.5, )"
+ },
+ "MathNet.Numerics": {
+ "target": "Package",
+ "version": "[5.0.0, )"
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.403/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/project.nuget.cache b/src/LiveChartCurveControl/obj/project.nuget.cache
new file mode 100644
index 0000000..ea3ad46
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/project.nuget.cache
@@ -0,0 +1,44 @@
+{
+ "version": 2,
+ "dgSpecHash": "vVwEq7d5T0I=",
+ "success": true,
+ "projectFilePath": "C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj",
+ "expectedPackageFiles": [
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia\\11.2.2\\avalonia.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.angle.windows.natives\\2.1.22045.20230930\\avalonia.angle.windows.natives.2.1.22045.20230930.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.buildservices\\0.0.29\\avalonia.buildservices.0.0.29.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.controls.colorpicker\\11.2.2\\avalonia.controls.colorpicker.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.controls.datagrid\\11.2.2\\avalonia.controls.datagrid.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.desktop\\11.2.2\\avalonia.desktop.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.diagnostics\\11.2.2\\avalonia.diagnostics.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.fonts.inter\\11.2.2\\avalonia.fonts.inter.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.freedesktop\\11.2.2\\avalonia.freedesktop.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.native\\11.2.2\\avalonia.native.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.remote.protocol\\11.2.2\\avalonia.remote.protocol.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.skia\\11.2.2\\avalonia.skia.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.themes.fluent\\11.2.2\\avalonia.themes.fluent.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.themes.simple\\11.2.2\\avalonia.themes.simple.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.win32\\11.2.2\\avalonia.win32.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\avalonia.x11\\11.2.2\\avalonia.x11.11.2.2.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\communitytoolkit.mvvm\\8.2.1\\communitytoolkit.mvvm.8.2.1.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\harfbuzzsharp\\7.3.0.3\\harfbuzzsharp.7.3.0.3.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\harfbuzzsharp.nativeassets.linux\\7.3.0.3\\harfbuzzsharp.nativeassets.linux.7.3.0.3.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\harfbuzzsharp.nativeassets.macos\\7.3.0.3\\harfbuzzsharp.nativeassets.macos.7.3.0.3.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\harfbuzzsharp.nativeassets.webassembly\\7.3.0.3\\harfbuzzsharp.nativeassets.webassembly.7.3.0.3.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\harfbuzzsharp.nativeassets.win32\\7.3.0.3\\harfbuzzsharp.nativeassets.win32.7.3.0.3.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\livechartscore\\2.0.0-rc4.5\\livechartscore.2.0.0-rc4.5.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\livechartscore.skiasharpview\\2.0.0-rc4.5\\livechartscore.skiasharpview.2.0.0-rc4.5.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\livechartscore.skiasharpview.avalonia\\2.0.0-rc4.5\\livechartscore.skiasharpview.avalonia.2.0.0-rc4.5.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\mathnet.numerics\\5.0.0\\mathnet.numerics.5.0.0.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\microcom.runtime\\0.11.0\\microcom.runtime.0.11.0.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\skiasharp\\2.88.9\\skiasharp.2.88.9.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\skiasharp.harfbuzz\\2.88.8\\skiasharp.harfbuzz.2.88.8.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\skiasharp.nativeassets.linux\\2.88.9\\skiasharp.nativeassets.linux.2.88.9.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\skiasharp.nativeassets.macos\\2.88.9\\skiasharp.nativeassets.macos.2.88.9.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\skiasharp.nativeassets.webassembly\\2.88.9\\skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\skiasharp.nativeassets.win32\\2.88.9\\skiasharp.nativeassets.win32.2.88.9.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\system.io.pipelines\\8.0.0\\system.io.pipelines.8.0.0.nupkg.sha512",
+ "C:\\Users\\atticus\\.nuget\\packages\\tmds.dbus.protocol\\0.20.0\\tmds.dbus.protocol.0.20.0.nupkg.sha512"
+ ],
+ "logs": []
+}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/project.packagespec.json b/src/LiveChartCurveControl/obj/project.packagespec.json
new file mode 100644
index 0000000..f09adfc
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/project.packagespec.json
@@ -0,0 +1 @@
+"restore":{"projectUniqueName":"C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj","projectName":"LiveChartCurveControl","projectPath":"C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\LiveChartCurveControl.csproj","outputPath":"C:\\Users\\atticus\\RiderProjects\\VirtualStreetSnap\\src\\LiveChartCurveControl\\obj\\","projectStyle":"PackageReference","UsingMicrosoftNETSdk":false,"fallbackFolders":["C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net8.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"Avalonia":{"target":"Package","version":"[11.2.2, )"},"Avalonia.Desktop":{"target":"Package","version":"[11.2.2, )"},"Avalonia.Diagnostics":{"target":"Package","version":"[11.2.2, )"},"Avalonia.Fonts.Inter":{"target":"Package","version":"[11.2.2, )"},"Avalonia.Themes.Fluent":{"target":"Package","version":"[11.2.2, )"},"CommunityToolkit.Mvvm":{"target":"Package","version":"[8.2.1, )"},"LiveChartsCore.SkiaSharpView.Avalonia":{"target":"Package","version":"[2.0.0-rc4.5, )"},"MathNet.Numerics":{"target":"Package","version":"[5.0.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\8.0.403/PortableRuntimeIdentifierGraph.json"}}
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/rider.project.model.nuget.info b/src/LiveChartCurveControl/obj/rider.project.model.nuget.info
new file mode 100644
index 0000000..6e2762d
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/rider.project.model.nuget.info
@@ -0,0 +1 @@
+17334548298904880
\ No newline at end of file
diff --git a/src/LiveChartCurveControl/obj/rider.project.restore.info b/src/LiveChartCurveControl/obj/rider.project.restore.info
new file mode 100644
index 0000000..f014a61
--- /dev/null
+++ b/src/LiveChartCurveControl/obj/rider.project.restore.info
@@ -0,0 +1 @@
+17334548300795636
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Assets/Icons.axaml b/src/VirtualStreetSnap/Assets/Icons.axaml
index e8c10fb..a75f080 100644
--- a/src/VirtualStreetSnap/Assets/Icons.axaml
+++ b/src/VirtualStreetSnap/Assets/Icons.axaml
@@ -21,6 +21,7 @@
M0.5 12.5L0.146447 12.1465L0 12.2929V12.5H0.5ZM8 5L8.35355 4.64645C8.15829 4.45119 7.84171 4.45119 7.64645 4.64645L8 5ZM10 7L10.3536 7.35356C10.5488 7.1583 10.5488 6.84171 10.3536 6.64645L10 7ZM2.5 14.5V15H2.70711L2.85355 14.8536L2.5 14.5ZM0.5 14.5H0C0 14.7761 0.223858 15 0.5 15L0.5 14.5ZM7.5 4.5L7.14645 4.14645L6.79289 4.5L7.14645 4.85356L7.5 4.5ZM10.5858 1.41422L10.2322 1.06066L10.5858 1.41422ZM13.4142 1.41422L13.0607 1.76777L13.0607 1.76777L13.4142 1.41422ZM13.5858 1.58579L13.9393 1.23224L13.9393 1.23224L13.5858 1.58579ZM13.5858 4.41422L13.2322 4.06066L13.5858 4.41422ZM10.5 7.5L10.1464 7.85356L10.5 8.20711L10.8536 7.85356L10.5 7.5ZM0.853553 12.8536L8.35355 5.35356L7.64645 4.64645L0.146447 12.1465L0.853553 12.8536ZM7.64645 5.35356L9.64645 7.35356L10.3536 6.64645L8.35355 4.64645L7.64645 5.35356ZM9.64645 6.64645L2.14645 14.1465L2.85355 14.8536L10.3536 7.35356L9.64645 6.64645ZM2.5 14H0.5V15H2.5V14ZM1 14.5V12.5H0V14.5H1ZM6.14645 3.85356L11.1464 8.85356L11.8536 8.14645L6.85355 3.14645L6.14645 3.85356ZM7.85355 4.85356L10.9393 1.76777L10.2322 1.06066L7.14645 4.14645L7.85355 4.85356ZM13.0607 1.76777L13.2322 1.93934L13.9393 1.23224L13.7678 1.06066L13.0607 1.76777ZM13.2322 4.06066L10.1464 7.14645L10.8536 7.85356L13.9393 4.76777L13.2322 4.06066ZM10.8536 7.14645L7.85355 4.14645L7.14645 4.85356L10.1464 7.85356L10.8536 7.14645ZM13.2322 1.93934C13.818 2.52513 13.818 3.47488 13.2322 4.06066L13.9393 4.76777C14.9157 3.79146 14.9156 2.20855 13.9393 1.23224L13.2322 1.93934ZM10.9393 1.76777C11.5251 1.18198 12.4749 1.18198 13.0607 1.76777L13.7678 1.06066C12.7915 0.0843534 11.2085 0.0843515 10.2322 1.06066L10.9393 1.76777Z
M 15 4 C 14.476563 4 13.941406 4.183594 13.5625 4.5625 C 13.183594 4.941406 13 5.476563 13 6 L 13 7 L 7 7 L 7 9 L 8 9 L 8 25 C 8 26.644531 9.355469 28 11 28 L 23 28 C 24.644531 28 26 26.644531 26 25 L 26 9 L 27 9 L 27 7 L 21 7 L 21 6 C 21 5.476563 20.816406 4.941406 20.4375 4.5625 C 20.058594 4.183594 19.523438 4 19 4 Z M 15 6 L 19 6 L 19 7 L 15 7 Z M 10 9 L 24 9 L 24 25 C 24 25.554688 23.554688 26 23 26 L 11 26 C 10.445313 26 10 25.554688 10 25 Z M 12 12 L 12 23 L 14 23 L 14 12 Z M 16 12 L 16 23 L 18 23 L 18 12 Z M 20 12 L 20 23 L 22 23 L 22 12 Z
M490.667,234.667H277.333V21.333C277.333,9.551,267.782,0,256,0s-21.333,9.551-21.333,21.333v213.333H21.333 C9.551,234.667,0,244.218,0,256s9.551,21.333,21.333,21.333h213.333v213.333c0,11.782,9.551,21.333,21.333,21.333 s21.333-9.551,21.333-21.333V277.333h213.333c11.782,0,21.333-9.551,21.333-21.333S502.449,234.667,490.667,234.667z
+ M8,12.14V2H6V12.14a4,4,0,0,0,0,7.72V30H8V19.86a4,4,0,0,0,0-7.72ZM7,18a2,2,0,1,1,2-2A2,2,0,0,1,7,18Z M17,20.14V2H15V20.14a4,4,0,0,0,0,7.72V30h2V27.86a4,4,0,0,0,0-7.72ZM16,26a2,2,0,1,1,2-2A2,2,0,0,1,16,26Z M29,8a4,4,0,0,0-3-3.86V2H24V4.14a4,4,0,0,0,0,7.72V30h2V11.86A4,4,0,0,0,29,8Zm-4,2a2,2,0,1,1,2-2A2,2,0,0,1,25,10Z
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Assets/i18n/en-US.json b/src/VirtualStreetSnap/Assets/i18n/en-US.json
index 8a50d6b..eac1962 100644
--- a/src/VirtualStreetSnap/Assets/i18n/en-US.json
+++ b/src/VirtualStreetSnap/Assets/i18n/en-US.json
@@ -41,7 +41,7 @@
"Pixelate": "Pixelate",
"SendToEditor": "Send To Editor",
"Save": "Save",
- "SaveCopy": "Save Copy",
+ "SaveCopy": "Save as Copy",
"SaveSuccess": "Save Success",
"GaussianBlur": "Gaussian Blur",
"Vignette": "Vignette",
@@ -58,5 +58,19 @@
"Factor": "Factor",
"ConfigChanged": "Configuration Changed",
"SelectAnImage": "Select An Image",
- "ThumbSize": "Thumb Size"
+ "ThumbSize": "Thumb Size",
+ "Confirm": "Confirm",
+ "Cancel": "Cancel",
+ "Yes": "Yes",
+ "UnsavedChanges": "Unsaved Changes",
+ "AreYouSureToClose?": "Are you sure to close?",
+ "File": "File",
+ "Warning": "Warning",
+ "ThePictureIsAboutToBeOverwritten": "The picture is about to be overwritten,still want to save?",
+ "Overwrite": "Overwrite",
+ "Open": "Open",
+ "InvalidFileFormat": "Invalid File Format",
+ "LoadingImage": "Loading Image...",
+ "LoadingView": "Loading View...",
+ "Curve": "Curve"
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Assets/i18n/zh-CN.json b/src/VirtualStreetSnap/Assets/i18n/zh-CN.json
index 9c40bf5..7a3b2b4 100644
--- a/src/VirtualStreetSnap/Assets/i18n/zh-CN.json
+++ b/src/VirtualStreetSnap/Assets/i18n/zh-CN.json
@@ -41,7 +41,7 @@
"Pixelate": "像素化",
"SendToEditor": "发送到编辑器",
"Save": "保存",
- "SaveCopy": "保存副本",
+ "SaveCopy": "保存为副本",
"SaveSuccess": "保存成功",
"GaussianBlur": "高斯模糊",
"Vignette": "晕影",
@@ -58,5 +58,19 @@
"Factor": "系数",
"ConfigChanged": "配置已更改",
"SelectAnImage": "选择一个图像",
- "ThumbSize": "缩略图大小"
+ "ThumbSize": "缩略图大小",
+ "Confirm": "确认",
+ "Cancel": "取消",
+ "Yes": "是",
+ "UnsavedChanges": "未保存的更改",
+ "AreYouSureToClose?": "确定要关闭吗?",
+ "File": "文件",
+ "Warning": "警告",
+ "ThePictureIsAboutToBeOverwritten": "图片即将被覆盖,仍然要保存吗?",
+ "Overwrite": "覆盖",
+ "Open": "打开",
+ "InvalidFileFormat": "无效的文件格式",
+ "LoadingImage": "加载图像...",
+ "LoadingView": "加载视图...",
+ "Curve": "曲线"
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Localizer/Localizer.cs b/src/VirtualStreetSnap/Localizer/Localizer.cs
index 73b771b..b36ac1c 100644
--- a/src/VirtualStreetSnap/Localizer/Localizer.cs
+++ b/src/VirtualStreetSnap/Localizer/Localizer.cs
@@ -79,4 +79,5 @@ public void Invalidate()
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(IndexerName));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(IndexerArrayName));
}
+
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Models/ImageBase.cs b/src/VirtualStreetSnap/Models/ImageModelBase.cs
similarity index 85%
rename from src/VirtualStreetSnap/Models/ImageBase.cs
rename to src/VirtualStreetSnap/Models/ImageModelBase.cs
index 8c002ee..7bdef38 100644
--- a/src/VirtualStreetSnap/Models/ImageBase.cs
+++ b/src/VirtualStreetSnap/Models/ImageModelBase.cs
@@ -8,7 +8,7 @@
namespace VirtualStreetSnap.Models;
-public class ImageBase : INotifyPropertyChanged
+public class ImageModelBase : INotifyPropertyChanged
{
private const string DefaultImagePath = "avares://VirtualStreetSnap/Assets/avalonia-logo.ico";
private const string LoadingImagePath = "avares://VirtualStreetSnap/Assets/Images/LoadingImage.png";
@@ -19,6 +19,15 @@ public class ImageBase : INotifyPropertyChanged
public string ImgSize { get; set; } = "0 x 0";
public int ImgThumbSize { get; set; } = 100;
+ public ImageModelBase(string imgPath = "")
+ {
+ ImgPath = File.Exists(imgPath) ? imgPath : DefaultImagePath;
+ ImgDir = (Path.GetDirectoryName(ImgPath) ?? "Assets/").Replace("\\", "/");
+ ImgName = Path.GetFileName(ImgPath);
+ ImageThumb = new Bitmap(AssetLoader.Open(new Uri(LoadingImagePath))); // Set default image initially
+ LoadThumbAsync();
+ }
+
private Bitmap? _image;
private Bitmap? _imageThumb;
@@ -50,16 +59,8 @@ protected virtual void OnPropertyChanged(string propertyName)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
- public ImageBase(string imgPath = "")
- {
- ImgPath = File.Exists(imgPath) ? imgPath : DefaultImagePath;
- ImgDir = (Path.GetDirectoryName(ImgPath) ?? "Assets/").Replace("\\", "/");
- ImgName = Path.GetFileName(ImgPath);
- ImageThumb = new Bitmap(AssetLoader.Open(new Uri(LoadingImagePath))); // Set default image initially
- LoadThumbAsync();
- }
- public async void LoadThumbAsync()
+ public async Task LoadThumbAsync()
{
try
{
@@ -72,11 +73,13 @@ public async void LoadThumbAsync()
}
}
- public void LoadImage()
+ public async Task LoadImageAsync()
{
try
{
- Image = new Bitmap(ImgPath);
+ var loadImageTask = Task.Run(() => Image = new Bitmap(ImgPath));
+ var loadThumbTask = LoadThumbAsync();
+ await Task.WhenAll(loadImageTask, loadThumbTask);
}
catch (Exception)
{
diff --git a/src/VirtualStreetSnap/Services/DialogHelper.cs b/src/VirtualStreetSnap/Services/DialogHelper.cs
index 0609133..387bd7c 100644
--- a/src/VirtualStreetSnap/Services/DialogHelper.cs
+++ b/src/VirtualStreetSnap/Services/DialogHelper.cs
@@ -28,7 +28,7 @@ public static class DialogHelper
var topLevel = ToplevelService.GetTopLevelForContext(context);
if (topLevel == null) return null;
-
+
if (!selectFolder)
{
var storageFiles = await topLevel.StorageProvider.OpenFilePickerAsync(
@@ -37,7 +37,9 @@ public static class DialogHelper
AllowMultiple = selectMany,
Title = title ?? "Select any file(s)"
});
- return storageFiles.Count == 0 ? null :
+ return storageFiles.Count == 0
+ ? null
+ :
// convert the StorageFile to a string without file:/// prefix
storageFiles.Select(s => s.Path.ToString().Remove(0, 8));
}
@@ -52,16 +54,21 @@ public static class DialogHelper
if (storageFiles.Count == 0) return null;
return storageFiles.Select(s => s.Path.ToString().Remove(0, 8));
}
-
}
public delegate void SetSelectedPath(string path);
public static async Task ChangeDirectory(this object? context, SetSelectedPath setDirectory,
string title = "Select")
- {
+ {
var selectedFiles = await context.OpenFileDialogAsync(title, false, true);
- if (selectedFiles is null)return;
+ if (selectedFiles is null) return;
setDirectory(selectedFiles.ElementAt(0));
}
+
+ public static async Task SelectFile(this object? context, string title = "Select")
+ {
+ var selectedFiles = await context.OpenFileDialogAsync(title, false, false);
+ return selectedFiles is null ? string.Empty : selectedFiles.ElementAt(0);
+ }
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Services/ImageEditHelper.cs b/src/VirtualStreetSnap/Services/ImageEditHelper.cs
index fc265a2..49e7d09 100644
--- a/src/VirtualStreetSnap/Services/ImageEditHelper.cs
+++ b/src/VirtualStreetSnap/Services/ImageEditHelper.cs
@@ -1,9 +1,11 @@
using System;
+using System.Diagnostics;
using System.IO;
using Avalonia.Media.Imaging;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
+using VirtualStreetSnap.ViewModels;
namespace VirtualStreetSnap.Services;
@@ -111,22 +113,62 @@ public static void ApplyTint(Image image, float tint)
}));
}
+ public static void ApplyBezierCurve(Image image, BezierCurve bezierCurve)
+ where TPixel : unmanaged, IPixel
+ {
+ image.Mutate(ctx => ctx.ProcessPixelRowsAsVector4(row =>
+ {
+ for (int x = 0; x < row.Length; x++)
+ {
+ var pixel = row[x];
+ var brightness = (pixel.X + pixel.Y + pixel.Z) / 3.0f;
+ var adjustedBrightness = (float)bezierCurve.CalcValue(brightness);
+ var adjustmentFactor = adjustedBrightness / brightness;
+
+ pixel.X *= adjustmentFactor;
+ pixel.Y *= adjustmentFactor;
+ pixel.Z *= adjustmentFactor;
+
+ row[x] = pixel;
+ }
+ }));
+ }
// Convert a ImageSharp Image to Avalonia Bitmap
public static Bitmap ConvertToBitmap(Image image) where TPixel : unmanaged, IPixel
{
+ if (image == null)
+ {
+ Console.WriteLine("ConvertToBitmap, Image is null");
+ return null;
+ }
+#if DEBUG
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+#endif
using var ms = new MemoryStream();
- image.SaveAsPng(ms);
+ image.SaveAsBmp(ms);
ms.Seek(0, SeekOrigin.Begin);
- return new Bitmap(ms);
+ var bitmap = new Bitmap(ms);
+#if DEBUG
+ stopwatch.Stop();
+ Console.WriteLine($"Convert Display Bitmap took {stopwatch.ElapsedMilliseconds} ms");
+#endif
+ return bitmap;
}
- // Convert an Avalonia Bitmap to ImageSharp Image
- public static Image ConvertToImageSharp(Bitmap bitmap)
+ public static Image LoadImageSharp(string path)
{
- using var ms = new MemoryStream();
- bitmap.Save(ms);
- ms.Seek(0, SeekOrigin.Begin);
- return Image.Load(ms);
+#if DEBUG
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+#endif
+ var image = Image.Load(path);
+#if DEBUG
+
+ stopwatch.Stop();
+ Console.WriteLine($"Load {path} to ImageSharp took {stopwatch.ElapsedMilliseconds} ms");
+#endif
+ return image;
}
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Services/NotifyHelper.cs b/src/VirtualStreetSnap/Services/NotifyHelper.cs
index f7c1dbc..a27e6c4 100644
--- a/src/VirtualStreetSnap/Services/NotifyHelper.cs
+++ b/src/VirtualStreetSnap/Services/NotifyHelper.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Threading;
using Avalonia.Controls;
using Avalonia.Controls.Notifications;
@@ -7,9 +8,10 @@ namespace VirtualStreetSnap.Services;
public static class NotifyHelper
{
- private static Dictionary NotificationManagers { get;set; } = new();
-
- public static void Notify(object? context, string? title, string? message)
+ private static Dictionary NotificationManagers { get; set; } = new();
+
+ public static void Notify(object? context, string? title, string? message, int timeout = 2,
+ NotificationType type = NotificationType.Information)
{
ArgumentNullException.ThrowIfNull(context);
@@ -17,15 +19,18 @@ public static void Notify(object? context, string? title, string? message)
var topLevel = ToplevelService.GetTopLevelForContext(context) as Window;
// check if the TopLevel is registered
if (topLevel == null) return;
- if (!NotificationManagers.ContainsKey(topLevel))InitializeNotificationManager(topLevel);
- NotificationManagers[topLevel].Show(new Notification(title, message));
+ if (!NotificationManagers.ContainsKey(topLevel)) InitializeNotificationManager(topLevel);
+ // set timeout for the notification
+ var span = TimeSpan.FromSeconds(timeout);
+ NotificationManagers[topLevel].Show(new Notification(title, message, expiration: span, type: type));
}
+
private static void InitializeNotificationManager(Window topLevel)
{
var manager = new WindowNotificationManager(topLevel)
{
- Position = NotificationPosition.BottomRight,
- MaxItems = 3
+ Position = NotificationPosition.BottomCenter,
+ MaxItems = 3,
};
NotificationManagers.Add(topLevel, manager);
}
diff --git a/src/VirtualStreetSnap/ViewModels/ConfirmDialogViewModel.cs b/src/VirtualStreetSnap/ViewModels/ConfirmDialogViewModel.cs
new file mode 100644
index 0000000..84ead26
--- /dev/null
+++ b/src/VirtualStreetSnap/ViewModels/ConfirmDialogViewModel.cs
@@ -0,0 +1,24 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+
+namespace VirtualStreetSnap.ViewModels;
+
+public partial class ConfirmDialogViewModel : ViewModelBase
+{
+ [ObservableProperty]
+ private string _title = "Title";
+
+ [ObservableProperty]
+ private string _message = "This is a very important message. Which is very important.";
+
+ [ObservableProperty]
+ private string _confirmButtonText = "Confirm";
+
+ [ObservableProperty]
+ private string _cancelButtonText = "Cancel";
+
+ [ObservableProperty]
+ private int _width = 300;
+
+ [ObservableProperty]
+ private int _height = 200;
+}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/CurveLayerViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/CurveLayerViewModel.cs
new file mode 100644
index 0000000..d41aa67
--- /dev/null
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/CurveLayerViewModel.cs
@@ -0,0 +1,28 @@
+using VirtualStreetSnap.Services;
+
+namespace VirtualStreetSnap.ViewModels.ImageEditorLayer;
+
+public class CurveLayerViewModel : LayerBaseViewModel
+{
+ public override string Name { get; set; } = "Curve";
+
+ public CurveLayerViewModel()
+ {
+ Curves.Add(new CurveMappingViewModel()
+ {
+ OnChange = () => { OnLayerModified(); }
+ });
+ }
+
+ public override void ApplyModifiers()
+ {
+ if (!IsVisible || InitialImage == null) return;
+ ModifiedImage = InitialImage.Clone();
+ // if only 2 points, then it's a straight line
+ if (Curves[0].Points.Count == 2) return;
+ foreach (var curveMappingViewModel in Curves)
+ {
+ ImageEditHelper.ApplyBezierCurve(ModifiedImage, curveMappingViewModel.MapCurve);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GaussianBlurLayerViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GaussianBlurLayerViewModel.cs
index e81b763..1273109 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GaussianBlurLayerViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GaussianBlurLayerViewModel.cs
@@ -4,7 +4,7 @@ namespace VirtualStreetSnap.ViewModels.ImageEditorLayer;
public class GaussianBlurLayerViewModel : LayerBaseViewModel
{
- public override string Name { get; set; } = "Gaussian Blur";
+ public override string Name { get; set; } = "GaussianBlur";
public float Radius { get; set; }
public GaussianBlurLayerViewModel()
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GrayscaleLayerViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GrayscaleLayerViewModel.cs
index 6d1ff12..32d1256 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GrayscaleLayerViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/GrayscaleLayerViewModel.cs
@@ -9,7 +9,9 @@ public class GrayscaleLayerViewModel : LayerBaseViewModel
public GrayscaleLayerViewModel()
- { }
+ {
+ InitialUpdate = true;
+ }
public override void ApplyModifiers()
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/WhiteBalanceLayerViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/WhiteBalanceLayerViewModel.cs
index 8d4e54a..8be6102 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/WhiteBalanceLayerViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/WhiteBalanceLayerViewModel.cs
@@ -2,7 +2,7 @@
namespace VirtualStreetSnap.ViewModels.ImageEditorLayer;
-public class WhiteBalanceLayerViewModel: LayerBaseViewModel
+public class WhiteBalanceLayerViewModel : LayerBaseViewModel
{
public override string Name { get; set; } = "WhiteBalance";
public float Temperature { get; set; }
@@ -21,7 +21,7 @@ public WhiteBalanceLayerViewModel()
OnLayerModified();
}
});
-
+
Sliders.Add(new SliderViewModel(Tint)
{
Name = "Tint",
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/Widgets/CurveMappingViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/Widgets/CurveMappingViewModel.cs
new file mode 100644
index 0000000..e4195fe
--- /dev/null
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/Widgets/CurveMappingViewModel.cs
@@ -0,0 +1,203 @@
+using Avalonia.Controls;
+using Avalonia.Input;
+using CommunityToolkit.Mvvm.Input;
+using LiveChartsCore.Defaults;
+using LiveChartsCore.Drawing;
+using LiveChartsCore.Kernel.Events;
+using LiveChartsCore.Kernel.Sketches;
+using System.Collections.ObjectModel;
+using System.Linq;
+using LiveChartsCore;
+using LiveChartsCore.SkiaSharpView;
+using LiveChartsCore.SkiaSharpView.Painting;
+using LiveChartsCore.SkiaSharpView.Drawing;
+using SkiaSharp;
+using System;
+using System.Collections.Generic;
+using LiveChartsCore.SkiaSharpView.Painting.Effects;
+using MathNet.Numerics.Interpolation;
+
+namespace VirtualStreetSnap.ViewModels;
+
+public class BezierCurve
+{
+ private CubicSpline? _spline;
+ private double _minX, _maxX, _minY, _maxY;
+
+ public BezierCurve(List> points) => UpdateSpline(points);
+
+ public void UpdateSpline(List> points)
+ {
+ var x = points.Select(p => p.Item1).ToArray();
+ var y = points.Select(p => p.Item2).ToArray();
+
+ _minX = x.First();
+ _maxX = x.Last();
+ _minY = Math.Min(y.First(), y.Last());
+ _maxY = Math.Max(y.First(), y.Last());
+
+ _spline = CubicSpline.InterpolateNatural(x, y);
+ }
+
+ public double CalcValue(double x) => Clamp(_spline.Interpolate(Clamp(x, _minX, _maxX)), _minY, _maxY);
+
+ public List> GenerateCurvePoints(double step = 0.01)
+ {
+ var curvePoints = new List>();
+ for (double t = _minX; t <= _maxX; t += step)
+ curvePoints.Add(Tuple.Create(t, Clamp(_spline.Interpolate(t), _minY, _maxY)));
+ return curvePoints;
+ }
+
+ private static double Clamp(double value, double min, double max) => Math.Max(min, Math.Min(max, value));
+}
+
+public partial class CurveMappingViewModel : ViewModelBase
+{
+ public ObservableCollection Points { get; set; }
+ public Axis[] XAxes { get; set; }
+ public Axis[] YAxes { get; set; }
+ public ISeries[] SeriesCollection { get; set; }
+ private ObservablePoint? _selectedPoint;
+ private const double SelectionRadius = 0.1;
+ public BezierCurve MapCurve;
+ public Action OnChange { get; set; }
+
+
+ public CurveMappingViewModel()
+ {
+ Points = [new(0, 0), new(1, 1)];
+ MapCurve = new BezierCurve(Points.Select(p => Tuple.Create((double)p.X!, (double)p.Y!)).ToList());
+
+ SeriesCollection =
+ [
+ new LineSeries
+ {
+ Name = "GenerateCurve",
+ Values = GenerateBezierCurve(),
+ Fill = null,
+ LineSmoothness = 1,
+ GeometryFill = null,
+ GeometryStroke = null,
+ Stroke = new LinearGradientPaint([new SKColor(0, 0, 0), new SKColor(255, 255, 255)])
+ { StrokeThickness = 5 }
+ },
+ new LineSeries
+ {
+ Name = "ControlPoint",
+ Values = Points,
+ Fill = null,
+ LineSmoothness = 0,
+ Stroke = new SolidColorPaint(SKColors.Transparent) { StrokeThickness = 1 },
+ GeometryStroke = new SolidColorPaint(SKColors.White) { StrokeThickness = 10 },
+ DataPadding = new LvcPoint(5, 5)
+ }
+ ];
+
+ XAxes =
+ [
+ new Axis
+ {
+ MinLimit = 0,
+ MaxLimit = 1,
+ MinStep = 0.25,
+ SeparatorsPaint = new SolidColorPaint(SKColors.LightSlateGray)
+ { StrokeThickness = 2, PathEffect = new DashEffect([5, 5]) }
+ }
+ ];
+ YAxes =
+ [
+ new Axis
+ {
+ MinLimit = 0,
+ MaxLimit = 1,
+ MinStep = 0.25,
+ SeparatorsPaint = new SolidColorPaint(SKColors.LightSlateGray)
+ { StrokeThickness = 2, PathEffect = new DashEffect([5, 5]) }
+ }
+ ];
+ }
+
+ private ObservablePoint? FindNearestPoint(LvcPointD scaledPoint)
+ {
+ var point = Points.FirstOrDefault(p =>
+ Math.Sqrt(Math.Pow((double)(p.X - scaledPoint.X)!, 2) + Math.Pow((double)(p.Y - scaledPoint.Y)!, 2)) <=
+ SelectionRadius);
+ return point == Points.First() || point == Points.Last() ? null : point;
+ }
+
+ [RelayCommand]
+ public void PointerDown(PointerCommandArgs args)
+ {
+ if (Design.IsDesignMode) return;
+
+ var chart = (ICartesianChartView)args.Chart;
+ var scaledPoint = chart.ScalePixelsToData(args.PointerPosition);
+
+ if (scaledPoint.X < 0 || scaledPoint.X > 1 || scaledPoint.Y < 0 || scaledPoint.Y > 1) return;
+
+ var avaloniaEventArgs = args.OriginalEventArgs as PointerPressedEventArgs;
+
+ if (avaloniaEventArgs.GetCurrentPoint(null).Properties.IsRightButtonPressed)
+ {
+ var pointToRemove = FindNearestPoint(scaledPoint);
+ if (pointToRemove == null) return;
+ Points.Remove(pointToRemove);
+ UpdateBezierCurve();
+ return;
+ }
+
+ _selectedPoint = FindNearestPoint(scaledPoint);
+ if (_selectedPoint != null) return;
+
+ if (scaledPoint.Y > Points.Max(p => p.Y))
+ {
+ Points.Add(new ObservablePoint(scaledPoint.X, scaledPoint.Y));
+ }
+ else
+ {
+ int index = Points.TakeWhile(p => p.X <= scaledPoint.X).Count();
+ Points.Insert(index, new ObservablePoint(scaledPoint.X, scaledPoint.Y));
+ }
+
+ UpdateBezierCurve();
+ }
+
+ [RelayCommand]
+ public void PointerMove(PointerCommandArgs args)
+ {
+ if (_selectedPoint == null) return;
+
+ var chart = (ICartesianChartView)args.Chart;
+ var scaledPoint = chart.ScalePixelsToData(args.PointerPosition);
+
+ if (scaledPoint.X < 0 || scaledPoint.X > 1 || scaledPoint.Y < 0 || scaledPoint.Y > 1) return;
+
+ _selectedPoint.X = scaledPoint.X;
+ _selectedPoint.Y = scaledPoint.Y;
+
+ if (_selectedPoint != Points.First() && _selectedPoint.X < Points[Points.IndexOf(_selectedPoint) - 1].X)
+ {
+ Points.Move(Points.IndexOf(_selectedPoint), Points.IndexOf(_selectedPoint) - 1);
+ }
+ else if (_selectedPoint != Points.Last() && _selectedPoint.X > Points[Points.IndexOf(_selectedPoint) + 1].X)
+ {
+ Points.Move(Points.IndexOf(_selectedPoint), Points.IndexOf(_selectedPoint) + 1);
+ }
+
+ UpdateBezierCurve();
+ }
+
+ [RelayCommand]
+ public void PointerUp() => _selectedPoint = null;
+
+ private void UpdateBezierCurve()
+ {
+ MapCurve.UpdateSpline(Points.Select(p => Tuple.Create((double)p.X!, (double)p.Y!)).ToList());
+ SeriesCollection[0].Values = GenerateBezierCurve();
+ OnChange?.Invoke();
+ }
+
+ private List GenerateBezierCurve() => MapCurve.GenerateCurvePoints()
+ .Select(p => new ObservablePoint(p.Item1, p.Item2)).ToList();
+}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/LayerBaseViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/Widgets/LayerBaseViewModel.cs
similarity index 95%
rename from src/VirtualStreetSnap/ViewModels/ImageEditorLayer/LayerBaseViewModel.cs
rename to src/VirtualStreetSnap/ViewModels/ImageEditorLayer/Widgets/LayerBaseViewModel.cs
index 6f83f4b..25bba3a 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/LayerBaseViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorLayer/Widgets/LayerBaseViewModel.cs
@@ -24,6 +24,7 @@ public class LayerBlendModeItem(
public abstract class LayerBaseViewModel : ViewModelBase
{
public abstract string Name { get; set; }
+ public bool InitialUpdate { get; set; }
private LayerBlendModeItem _selectedBlendMode;
@@ -35,7 +36,7 @@ public LayerBlendModeItem SelectedBlendMode
return _selectedBlendMode;
}
set
- {
+ {
// if the selected blend mode is null or the value is null, return
// seems this binding is after the selected layer is set, so it should not be null
if (value == null) return;
@@ -93,7 +94,8 @@ public bool IsDropTarget
public Image InitialImage { get; set; }
public Image ModifiedImage { get; set; }
- public ObservableCollection Sliders { get; set; } = new();
+ public ObservableCollection Sliders { get; set; } = [];
+ public ObservableCollection Curves { get; set; } = [];
public event Action LayerModified;
public event Action RequestRemoveLayer;
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorViewModel.cs
index 14b03d4..cffa056 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageEditorViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorViewModel.cs
@@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Avalonia.Controls;
+using Avalonia.Controls.Notifications;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -35,9 +37,12 @@ public partial class ImageEditorViewModel : ViewModelBase
[ObservableProperty]
private string? _dragItemText;
+ [ObservableProperty]
+ private bool _isDirty;
+
public ObservableCollection LayerTypes { get; set; }
- public ImageEditorViewModel(ImageBase? image)
+ public ImageEditorViewModel(ImageModelBase? image)
{
LayerTypes = new ObservableCollection(
_layerConstructors.Keys.Select(key => new LayerTypeItem
@@ -48,36 +53,37 @@ public ImageEditorViewModel(ImageBase? image)
SetupImage(Design.IsDesignMode ? null : image);
}
- public void SetupImage(ImageBase? image)
+ public void SetupImage(ImageModelBase? image)
{
if (image == null)
{
- var initialImage = new ImageBase
+ var initialImage = new ImageModelBase
{
Image = new Bitmap(AssetLoader.Open(new Uri(DefaultImagePath)))
};
EditImageViewer.ViewImage = initialImage;
- LayerManager.InitialImage = ImageEditHelper.ConvertToImageSharp(initialImage.Image);
+ LayerManager.InitialImage = ImageEditHelper.LoadImageSharp(initialImage.ImgPath);
}
else
{
EditImageViewer.ViewImage = image;
- LayerManager.InitialImage = ImageEditHelper.ConvertToImageSharp(image.Image);
+ LayerManager.InitialImage = ImageEditHelper.LoadImageSharp(image.ImgPath);
}
- // Set the callback to update the image
- LayerManager.UpdateImageCallback = bitmap => EditImageViewer.ViewImage.Image = bitmap;
-
+ // Set the callback to update the image, set dirty flag
+ LayerManager.UpdateImageCallback = bitmap => { EditImageViewer.ViewImage.Image = bitmap; };
+ LayerManager.DirtyCallback = () => { IsDirty = true; };
// Add initial layers
if (LayerManager.Layers.Count == 0)
{
LayerManager.AddLayer(new WhiteBalanceLayerViewModel());
- LayerManager.AddLayer(new BrightnessContrastLayerViewModel());
LayerManager.AddLayer(new HslLayerViewModel());
+ LayerManager.AddLayer(new CurveLayerViewModel());
}
SelectedLayer = LayerManager.Layers.LastOrDefault();
- if (SelectedLayer != null) LayerManager.RefreshFinalImage(SelectedLayer);
+ if (SelectedLayer == null) return;
+ LayerManager.RefreshFinalImage(SelectedLayer);
}
[RelayCommand]
@@ -98,6 +104,7 @@ public void RemoveLayer()
{ "Sharpness", () => new SharpnessLayerViewModel() },
{ "GaussianBlur", () => new GaussianBlurLayerViewModel() },
{ "HSL", () => new HslLayerViewModel() },
+ { "Curve", () => new CurveLayerViewModel() },
{ "WhiteBalance", () => new WhiteBalanceLayerViewModel() },
{ "Vignette", () => new VignetteLayerViewModel() },
{ "Grayscale", () => new GrayscaleLayerViewModel() },
@@ -119,20 +126,13 @@ public void AddLayer(string? layerType)
SelectedLayer = LayerManager.Layers.ElementAtOrDefault(index);
}
- public event EventHandler? ImageSaved;
-
- private void OnImageSaved()
- {
- ImageSaved?.Invoke(this, EventArgs.Empty);
- }
-
- public ImageBase SaveImageToGalleryDirectory(bool saveAsNew = true)
+ public ImageModelBase SaveImageToGalleryDirectory(bool saveAsNew = true)
{
var config = ConfigService.Instance;
var saveDirectory = config.Settings.SaveDirectory;
- var imageBase = EditImageViewer.ViewImage;
- var newName = Path.GetFileNameWithoutExtension(imageBase.ImgName);
+ var imageModelBase = EditImageViewer.ViewImage;
+ var newName = Path.GetFileNameWithoutExtension(imageModelBase.ImgName);
if (saveAsNew)
{
while (Path.Exists(Path.Combine(saveDirectory, newName + ".png")))
@@ -142,10 +142,11 @@ public ImageBase SaveImageToGalleryDirectory(bool saveAsNew = true)
}
var newFilePath = Path.Combine(saveDirectory, newName + ".png");
- imageBase.Image.Save(newFilePath);
- NotifyHelper.Notify(this, Localizer.Localizer.Instance["SaveSuccess"], $"{newFilePath}");
- OnImageSaved();
- return imageBase;
+ imageModelBase.Image.Save(newFilePath);
+ IsDirty = false;
+ NotifyHelper.Notify(this, Localizer.Localizer.Instance["SaveSuccess"], $"{newFilePath}",
+ type: NotificationType.Success);
+ return imageModelBase;
}
}
@@ -174,6 +175,10 @@ public class LayerManagerViewModel : ViewModelBase
public Action UpdateImageCallback { get; set; }
+
+ public Action DirtyCallback { get; set; }
+
+
public LayerManagerViewModel(bool asyncDisplay = true)
{
_asyncDisplay = asyncDisplay;
@@ -184,22 +189,21 @@ public void AddLayer(LayerBaseViewModel layer)
{
Layers.Add(layer);
layer.LayerModified += RefreshFinalImage;
+ layer.LayerModified += SetDirty;
layer.RequestRemoveLayer += RemoveLayer;
layer.PropertyChanged += (sender, args) =>
{
if (args.PropertyName == nameof(LayerBaseViewModel.IsVisible)) RefreshFinalImage(layer);
};
- RefreshFinalImage();
+ if (layer.InitialUpdate) RefreshFinalImage();
}
public void RemoveLayer(LayerBaseViewModel layer)
{
layer.LayerModified -= RefreshFinalImage;
+ layer.LayerModified -= SetDirty;
layer.RequestRemoveLayer -= RemoveLayer;
Layers.Remove(layer);
- layer.InitialImage?.Dispose();
- layer.ModifiedImage?.Dispose();
- GC.Collect();
RefreshFinalImage();
}
@@ -212,9 +216,16 @@ public void MoveLayer(LayerBaseViewModel layer, int newIndex)
RefreshFinalImage();
}
+ public void SetDirty(LayerBaseViewModel layerBaseViewModel)
+ {
+ DirtyCallback.Invoke();
+ }
+
internal async void RefreshFinalImage(LayerBaseViewModel? modifiedLayer = null)
{
- var finalImage = GenerateFinalImage();
+ Image finalImage;
+ finalImage = Layers.Count == 0 ? InitialImage.Clone() : GenerateFinalImage();
+
FinalImage = finalImage;
DisplayImage = _asyncDisplay
? await Task.Run(() => ImageEditHelper.ConvertToBitmap(finalImage))
@@ -249,7 +260,15 @@ private Image GenerateFinalImage()
layer.InitialImage = finalImage.Clone();
if (!layer.IsVisible) continue;
+#if DEBUG
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+#endif
layer.ApplyModifiers();
+#if DEBUG
+ stopwatch.Stop();
+ Console.WriteLine($"{layer.Name} took {stopwatch.ElapsedMilliseconds} ms");
+#endif
finalImage.Mutate(
x => x.DrawImage(
layer.ModifiedImage,
diff --git a/src/VirtualStreetSnap/ViewModels/ImageEditorWindowViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageEditorWindowViewModel.cs
new file mode 100644
index 0000000..831a4ac
--- /dev/null
+++ b/src/VirtualStreetSnap/ViewModels/ImageEditorWindowViewModel.cs
@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Threading.Tasks;
+using Avalonia.Controls;
+using Avalonia.Controls.Notifications;
+using CommunityToolkit.Mvvm.ComponentModel;
+using VirtualStreetSnap.Models;
+using VirtualStreetSnap.Services;
+using VirtualStreetSnap.Views;
+
+namespace VirtualStreetSnap.ViewModels;
+
+public partial class ImageEditorWindowViewModel : ViewModelBase
+{
+ public ObservableCollection Pages { get; } = new();
+
+ [ObservableProperty]
+ private ImageEditorView? _currentPage;
+
+ [ObservableProperty]
+ private bool _isLoading;
+
+ [ObservableProperty]
+ private string _loadingMessage = "Loading";
+
+ public ImageEditorWindowViewModel()
+ {
+ if (Design.IsDesignMode)
+ {
+ Pages.Add(new ImageEditorView()
+ {
+ DataContext = new DesignImageEditorViewModel()
+ });
+ Pages.Add(new ImageEditorView()
+ {
+ DataContext = new DesignImageEditorViewModel()
+ });
+ Pages.Add(new ImageEditorView()
+ {
+ DataContext = new DesignImageEditorViewModel()
+ });
+ CurrentPage = Pages.First();
+ }
+ }
+
+ public async void AddPage(ImageModelBase? image)
+ {
+ if (image == null) return;
+
+ // Reload the image to ensure the Bitmap is not null
+ IsLoading = true;
+ LoadingMessage = "LoadingImage";
+ await image.LoadImageAsync();
+ IsLoading = false;
+
+ // if image already exists, set it as current page
+ if (Pages.Any(page =>
+ page.DataContext is ImageEditorViewModel viewModel &&
+ viewModel.EditImageViewer.ViewImage?.ImgPath == image.ImgPath))
+ {
+ CurrentPage = Pages.First(page =>
+ page.DataContext is ImageEditorViewModel viewModel &&
+ viewModel.EditImageViewer.ViewImage?.ImgPath == image.ImgPath);
+ return;
+ }
+
+ Console.WriteLine($"Add page for {image.ImgPath}");
+
+ try
+ {
+ IsLoading = true;
+ LoadingMessage = "LoadingView";
+ var viewmodel = await Task.Run(() => new ImageEditorViewModel(image));
+ IsLoading = false;
+
+ Pages.Add(new ImageEditorView()
+ {
+ DataContext = viewmodel
+ });
+ CurrentPage = Pages.Last();
+ var viewModel = CurrentPage.DataContext as ImageEditorViewModel;
+ viewModel.IsDirty = false;
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e);
+ }
+ }
+
+ public async void RemovePage(ImageEditorView page)
+ {
+ if (!Pages.Contains(page)) return;
+
+ void RemoveAction()
+ {
+ Pages.Remove(page);
+ CurrentPage = Pages.LastOrDefault();
+ }
+
+ if (Design.IsDesignMode)
+ {
+ RemoveAction();
+ return;
+ }
+
+ if (page.DataContext is ImageEditorViewModel { IsDirty: false })
+ {
+ RemoveAction();
+ return;
+ }
+
+ var dialog = new ConfirmDialog()
+ {
+ DataContext = new ConfirmDialogViewModel()
+ {
+ Title = "UnsavedChanges",
+ Message = "AreYouSureToClose?",
+ Width = 300,
+ Height = 150,
+ }
+ };
+ var topLevel = ToplevelService.GetTopLevelForContext(this) as Window;
+ var result = await dialog.ShowDialog(topLevel);
+ if (result)
+ {
+ RemoveAction();
+ }
+ }
+
+ public event EventHandler? ImageSaved;
+
+ private void OnImageSaved()
+ {
+ ImageSaved?.Invoke(this, EventArgs.Empty);
+ }
+
+ public async void OpenImageAndAddPage()
+ {
+ if (Design.IsDesignMode) return;
+ var selectedFile = await this.SelectFile("Select");
+ if (string.IsNullOrEmpty(selectedFile)) return;
+ // check it ends with a valid image extension
+ var ext = System.IO.Path.GetExtension(selectedFile).ToLower();
+ List filterList = [".jpg", ".jpeg", ".png", ".bmp"];
+ if (!filterList.Contains(ext))
+ {
+ NotifyHelper.Notify(this,
+ Localizer.Localizer.Instance["Warning"],
+ Localizer.Localizer.Instance["InvalidFileFormat"],
+ 3, NotificationType.Error);
+ return;
+ }
+
+ ;
+ var image = new ImageModelBase(selectedFile);
+ AddPage(image);
+ }
+
+ public async void SaveCurrentPageImage(bool saveAsNew)
+ {
+ if (CurrentPage is null) return;
+ var viewModel = CurrentPage.DataContext as ImageEditorViewModel;
+ if (saveAsNew)
+ {
+ viewModel?.SaveImageToGalleryDirectory(saveAsNew);
+ OnImageSaved();
+ }
+ else
+ {
+ var dialog = new ConfirmDialog()
+ {
+ DataContext = new ConfirmDialogViewModel()
+ {
+ Title = "Warning",
+ Message = "ThePictureIsAboutToBeOverwritten",
+ Width = 300,
+ Height = 150,
+ ConfirmButtonText = "Overwrite",
+ }
+ };
+ var topLevel = ToplevelService.GetTopLevelForContext(this) as Window;
+ var result = await dialog.ShowDialog(topLevel);
+ if (!result) return;
+ viewModel?.SaveImageToGalleryDirectory(saveAsNew);
+ OnImageSaved();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/ViewModels/ImageGalleryViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageGalleryViewModel.cs
index 3003ce2..de6cf0d 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageGalleryViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageGalleryViewModel.cs
@@ -25,7 +25,7 @@ public class LazyLoadManager
public bool IsInitialized;
- public ObservableCollection Thumbnails { get; } = new();
+ public ObservableCollection Thumbnails { get; } = new();
public void Initialize(string saveDirectory)
{
@@ -49,7 +49,7 @@ public void Initialize(string saveDirectory)
public void LoadNextBatch()
{
var nextBatch = _allImagePaths.Skip(_currentBatchIndex * BatchSize).Take(BatchSize);
- foreach (var kv in nextBatch) Thumbnails.Add(new ImageBase(kv.Key));
+ foreach (var kv in nextBatch) Thumbnails.Add(new ImageModelBase(kv.Key));
_currentBatchIndex++;
}
@@ -67,6 +67,7 @@ public void LoadNecessary()
{
Thumbnails.Remove(imageToRemove);
}
+
_allImagePaths.Remove(missingFile);
}
@@ -77,7 +78,7 @@ public void LoadNecessary()
foreach (var file in newImagePaths)
{
_allImagePaths[file] = currentImagePaths[file];
- Thumbnails.Insert(0, new ImageBase(file));
+ Thumbnails.Insert(0, new ImageModelBase(file));
}
}
}
@@ -90,23 +91,26 @@ public partial class ImageGalleryViewModel : ViewModelBase
private bool _showColorPicker;
[ObservableProperty]
- private ImageBase? _selectedThumbnail;
+ private ImageModelBase? _selectedThumbnail;
[ObservableProperty]
private AppConfig _config = ConfigService.Instance;
[ObservableProperty]
private ImageViewerView _selectedImageViewer;
-
+
[ObservableProperty]
private int _thumbDisplaySize = 80;
-
- public ObservableCollection Thumbnails => _lazyLoadManager.Thumbnails;
-
+
+ [ObservableProperty]
+ private ImageEditorWindow? _editorWindow;
+
+ public ObservableCollection Thumbnails => _lazyLoadManager.Thumbnails;
+
public ImageGalleryViewModel()
{
SelectedImageViewer = new ImageViewerView();
- UpdateThumbnails(selectFirst:false);
+ UpdateThumbnails(selectFirst: false);
Config.Settings.PropertyChanged += OnSettingsPropertyChanged;
}
@@ -115,13 +119,13 @@ private void OnSettingsPropertyChanged(object? sender, PropertyChangedEventArgs
UpdateThumbnails(true);
}
- partial void OnSelectedThumbnailChanged(ImageBase value)
+ partial void OnSelectedThumbnailChanged(ImageModelBase value)
{
- value.LoadImage();
+ value.LoadImageAsync();
if (SelectedImageViewer.DataContext is ImageViewerViewModel viewModel) viewModel.ViewImage = value;
}
- public void UpdateThumbnails(bool reload = false,bool selectFirst = true)
+ public void UpdateThumbnails(bool reload = false, bool selectFirst = true)
{
if (_lazyLoadManager.IsInitialized && !reload)
{
@@ -158,7 +162,7 @@ public void OpenSelectedThumbnailFolder()
{
if (SelectedThumbnail == null) return;
var filePath = SelectedThumbnail.ImgPath;
- var folderPath = Path.GetDirectoryName(filePath);
+ var folderPath = Path.GetDirectoryName(filePath as string);
if (folderPath != null && Directory.Exists(folderPath))
Process.Start(new ProcessStartInfo
{
@@ -191,29 +195,45 @@ public async Task CopySelectedImage()
await PowerShellClipBoard.SetImage(SelectedThumbnail.ImgPath);
}
+ public void CreateEditorWindow()
+ {
+ if (EditorWindow is not null) return;
+ EditorWindow = new ImageEditorWindow()
+ {
+ DataContext = new ImageEditorWindowViewModel()
+ };
+ }
+
[RelayCommand]
public void EditSelectedImage(Window window)
{
if (SelectedThumbnail == null) return;
if (Design.IsDesignMode) return;
- var newImage = new ImageBase(SelectedThumbnail.ImgPath);
- newImage.LoadImage();
-
- var editorWindow = new ImageEditorView
+ var newImage = new ImageModelBase(SelectedThumbnail.ImgPath);
+ newImage.LoadImageAsync();
+
+ if (EditorWindow is not null)
{
- DataContext = new ImageEditorViewModel(newImage)
- };
- var viewModel = editorWindow.DataContext as ImageEditorViewModel;
- viewModel.ImageSaved += (sender, args) =>
+ var viewModel = EditorWindow.DataContext as ImageEditorWindowViewModel;
+ viewModel?.AddPage(newImage);
+ }
+ else
{
- UpdateThumbnails(true);
- if (Thumbnails.Count > 0)
- {
- SelectedThumbnail = Thumbnails.First();
- }
- GC.Collect();
- };
- editorWindow.Show();
+ CreateEditorWindow();
+ var viewModel = EditorWindow.DataContext as ImageEditorWindowViewModel;
+ viewModel?.AddPage(newImage);
+ viewModel.ImageSaved += (sender, args) =>
+ {
+ UpdateThumbnails(true);
+ if (Thumbnails.Count > 0)
+ {
+ SelectedThumbnail = Thumbnails.First();
+ }
+ };
+ }
+
+ EditorWindow.Show();
+ EditorWindow.Activate();
}
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs
index 47f4ec7..961ef83 100644
--- a/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs
@@ -10,13 +10,13 @@ public partial class ImageViewerViewModel : ViewModelBase
private bool _showColorPicker;
[ObservableProperty]
- private ImageBase? _viewImage;
+ private ImageModelBase? _viewImage;
[ObservableProperty]
private Bitmap? _image;
public ImageViewerViewModel()
{
- ViewImage = new ImageBase();
+ ViewImage = new ImageModelBase();
}
}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/ViewModels/MainWindowViewModel.cs b/src/VirtualStreetSnap/ViewModels/MainWindowViewModel.cs
index befa500..8024597 100644
--- a/src/VirtualStreetSnap/ViewModels/MainWindowViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/MainWindowViewModel.cs
@@ -58,6 +58,22 @@ public MainWindowViewModel()
StartFixWindowSizeTimer();
}
+ [RelayCommand]
+ public void ShowEditorWindow()
+ {
+ if (Design.IsDesignMode) return;
+ var viewModel = Pages[1].Page.DataContext as ImageGalleryViewModel;
+ if (viewModel?.EditorWindow == null)
+ {
+ viewModel.CreateEditorWindow();
+ }
+
+ var window = viewModel.EditorWindow;
+ if (window == null) return;
+ window.Show();
+ window.Activate();
+ }
+
[RelayCommand]
public void OnCloseButtonClick()
{
diff --git a/src/VirtualStreetSnap/ViewModels/SettingsViewModel.cs b/src/VirtualStreetSnap/ViewModels/SettingsViewModel.cs
index 36e1102..4389586 100644
--- a/src/VirtualStreetSnap/ViewModels/SettingsViewModel.cs
+++ b/src/VirtualStreetSnap/ViewModels/SettingsViewModel.cs
@@ -1,10 +1,9 @@
using System;
using System.Collections.ObjectModel;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
-using Avalonia.Controls.Notifications;
-using Avalonia.Markup.Xaml.Styling;
using CommunityToolkit.Mvvm.ComponentModel;
using VirtualStreetSnap.Models;
using VirtualStreetSnap.Services;
@@ -15,6 +14,9 @@ public partial class SettingsViewModel : ViewModelBase
{
[ObservableProperty]
private AppConfig _config = ConfigService.Instance;
+
+ [ObservableProperty]
+ private string _appVersion = "Unknown";
[ObservableProperty]
@@ -41,8 +43,20 @@ public SettingsViewModel()
LanguageModels.First();
// Set the default values if the config is not existing
ConfigService.SaveConfig();
+ GetFileVersion();
}
-
+
+ public void GetFileVersion()
+ {
+ var exeDir = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
+ // get all the exe files in the directory
+ var exePath = exeDir != null ? Directory.GetFiles(exeDir, "*.exe").FirstOrDefault() : null;
+ if (exePath == null) return;
+ var version = FileVersionInfo.GetVersionInfo(exePath).FileVersion;
+ if (version == null) return;
+ AppVersion = version;
+ }
+
partial void OnSelectedLanguageChanged(LanguageModel value)
{
var language = value.Identifier;
diff --git a/src/VirtualStreetSnap/Views/ConfirmDialog.axaml b/src/VirtualStreetSnap/Views/ConfirmDialog.axaml
new file mode 100644
index 0000000..e26ed1d
--- /dev/null
+++ b/src/VirtualStreetSnap/Views/ConfirmDialog.axaml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Views/ConfirmDialog.axaml.cs b/src/VirtualStreetSnap/Views/ConfirmDialog.axaml.cs
new file mode 100644
index 0000000..3d3c2d4
--- /dev/null
+++ b/src/VirtualStreetSnap/Views/ConfirmDialog.axaml.cs
@@ -0,0 +1,27 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+
+namespace VirtualStreetSnap.Views;
+
+public partial class ConfirmDialog : Window
+{
+ public ConfirmDialog()
+ {
+ InitializeComponent();
+ // Closed += (sender, e) => { Close(); };
+ }
+
+ private void Confirm_OnClick(object? sender, RoutedEventArgs e)
+ {
+ if (Design.IsDesignMode) return;
+ Close(true);
+ }
+
+ private void Cancel_OnClick(object? sender, RoutedEventArgs e)
+ {
+ if (Design.IsDesignMode) return;
+ Close(false);
+ }
+}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Views/ImageEditorView.axaml b/src/VirtualStreetSnap/Views/ImageEditorView.axaml
index 7c5284b..a592c2f 100644
--- a/src/VirtualStreetSnap/Views/ImageEditorView.axaml
+++ b/src/VirtualStreetSnap/Views/ImageEditorView.axaml
@@ -1,26 +1,22 @@
-
+
-
+
-
+
-
-
-
-
+
@@ -84,7 +75,8 @@
-
+
@@ -151,9 +143,9 @@
ItemsSource="{Binding LayerTypes}" Placement="TopEdgeAlignedLeft">
-
+
@@ -166,13 +158,14 @@
-
+
+
@@ -192,6 +185,25 @@
+
+
+
+
+
+
+
+
+
@@ -208,28 +220,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Views/ImageEditorView.axaml.cs b/src/VirtualStreetSnap/Views/ImageEditorView.axaml.cs
index 554d25e..88bb50c 100644
--- a/src/VirtualStreetSnap/Views/ImageEditorView.axaml.cs
+++ b/src/VirtualStreetSnap/Views/ImageEditorView.axaml.cs
@@ -13,7 +13,7 @@
namespace VirtualStreetSnap.Views;
-public partial class ImageEditorView : Window
+public partial class ImageEditorView : UserControl
{
private LayerBaseViewModel? _dragItem;
private Point _startPoint;
@@ -22,23 +22,13 @@ public partial class ImageEditorView : Window
public ImageEditorView()
{
InitializeComponent();
- CloseWindowButton.Click += (sender, e) => { Close(); };
-
- var scale = Screens.Primary.Scaling;
- var currentScreen = Screens.Primary;
- Width = currentScreen.Bounds.Width / 2 / scale;
- Height = currentScreen.Bounds.Height / 2 / scale;
LayerListBox.AddHandler(PointerPressedEvent, LayerListBox_OnPointerPressed, RoutingStrategies.Tunnel);
LayerListBox.AddHandler(PointerReleasedEvent, LayerListBox_OnPointerRelease);
LayerListBox.AddHandler(PointerMovedEvent, LayerListBox_OnPointerMove);
}
- private void ToolBar_PointerPressed(object? sender, PointerPressedEventArgs e)
- {
- if (!Equals(e.Source, ToolBar)) return;
- BeginMoveDrag(e);
- }
+
private bool IsPointerOutsideLayerListBox(PointerEventArgs e)
{
@@ -141,8 +131,7 @@ private void PopupLayerMenuButton_Click(object? sender, RoutedEventArgs e)
LayerTypeMenu.Open(button);
}
- private void CloseButtonOnClick(object? sender, RoutedEventArgs e)
- { }
+
private void UpdateGhostDragItemPosition(Point position)
{
diff --git a/src/VirtualStreetSnap/Views/ImageEditorWindow.axaml b/src/VirtualStreetSnap/Views/ImageEditorWindow.axaml
new file mode 100644
index 0000000..bcb5081
--- /dev/null
+++ b/src/VirtualStreetSnap/Views/ImageEditorWindow.axaml
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Views/ImageEditorWindow.axaml.cs b/src/VirtualStreetSnap/Views/ImageEditorWindow.axaml.cs
new file mode 100644
index 0000000..0da3862
--- /dev/null
+++ b/src/VirtualStreetSnap/Views/ImageEditorWindow.axaml.cs
@@ -0,0 +1,27 @@
+using Avalonia.Controls;
+using Avalonia.Input;
+using Avalonia.Interactivity;
+
+namespace VirtualStreetSnap.Views;
+
+public partial class ImageEditorWindow : Window
+{
+ public ImageEditorWindow()
+ {
+ InitializeComponent();
+ CloseWindowButton.Click += (sender, e) => { Hide(); };
+
+ var scale = Screens.Primary.Scaling;
+ var currentScreen = Screens.Primary;
+ Width = currentScreen.Bounds.Width / 2 / scale;
+ Height = currentScreen.Bounds.Height / 2 / scale;
+ }
+
+ private void ToolBar_PointerPressed(object? sender, PointerPressedEventArgs e)
+ {
+ BeginMoveDrag(e);
+ }
+
+ private void CloseButtonOnClick(object? sender, RoutedEventArgs e)
+ { }
+}
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/Views/ImageGalleryView.axaml b/src/VirtualStreetSnap/Views/ImageGalleryView.axaml
index 10837ea..91c40f6 100644
--- a/src/VirtualStreetSnap/Views/ImageGalleryView.axaml
+++ b/src/VirtualStreetSnap/Views/ImageGalleryView.axaml
@@ -12,7 +12,7 @@
-
+
-
-
-
-
-
-
+
-
+
+
-
+
+
+
+
+
+
+
+
@@ -72,7 +76,7 @@
-
+
+ HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
+ Click="ToggleTopMost_OnClick">
+
+
diff --git a/src/VirtualStreetSnap/Views/SettingsView.axaml b/src/VirtualStreetSnap/Views/SettingsView.axaml
index 24920a6..427d3cc 100644
--- a/src/VirtualStreetSnap/Views/SettingsView.axaml
+++ b/src/VirtualStreetSnap/Views/SettingsView.axaml
@@ -15,42 +15,47 @@
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/src/VirtualStreetSnap/VirtualStreetSnap.csproj b/src/VirtualStreetSnap/VirtualStreetSnap.csproj
index d94d2d8..fb40375 100644
--- a/src/VirtualStreetSnap/VirtualStreetSnap.csproj
+++ b/src/VirtualStreetSnap/VirtualStreetSnap.csproj
@@ -15,7 +15,7 @@
true
app.manifest
true
- 0.1.3
+ 0.1.5
Atticus
A simple screen shot tool design for VirtualStreetSnap
@@ -34,8 +34,10 @@
-
+
+
+
@@ -50,4 +52,11 @@
+
+
+
+ ImageEditorWindow.axaml
+ Code
+
+