diff --git a/src/MayShow.Desktop/Directory.Build.props b/src/Directory.Build.props
similarity index 100%
rename from src/MayShow.Desktop/Directory.Build.props
rename to src/Directory.Build.props
diff --git a/src/MayShow.Desktop/MayShow.Desktop.csproj b/src/MayShow.Desktop/MayShow.Desktop.csproj
index cfbdf7c..6e330c3 100644
--- a/src/MayShow.Desktop/MayShow.Desktop.csproj
+++ b/src/MayShow.Desktop/MayShow.Desktop.csproj
@@ -11,58 +11,16 @@
true
true
true
- MayShow
+ MayShow.Desktop
1.4.0
MayShow-icon.ico
-
-
-
-
-
-
-
-
-
-
-
-
- Always
-
-
- Always
-
-
- Always
-
-
- Always
-
-
- Always
-
-
- Always
-
-
-
-
-
-
-
None
All
-
-
-
-
-
-
-
+
diff --git a/src/MayShow.Desktop/Program.cs b/src/MayShow.Desktop/Program.cs
index 2bae6ff..96a531b 100644
--- a/src/MayShow.Desktop/Program.cs
+++ b/src/MayShow.Desktop/Program.cs
@@ -3,7 +3,7 @@ using System;
namespace MayShow;
-class Program
+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
diff --git a/src/MayShow.Desktop/App.axaml b/src/MayShow.Shared/App.axaml
similarity index 100%
rename from src/MayShow.Desktop/App.axaml
rename to src/MayShow.Shared/App.axaml
diff --git a/src/MayShow.Desktop/App.axaml.cs b/src/MayShow.Shared/App.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/App.axaml.cs
rename to src/MayShow.Shared/App.axaml.cs
diff --git a/src/MayShow.Desktop/Assets/Fonts/FontAwesome/Font Awesome 7 Brands-Regular-400.otf b/src/MayShow.Shared/Assets/Fonts/FontAwesome/Font Awesome 7 Brands-Regular-400.otf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/FontAwesome/Font Awesome 7 Brands-Regular-400.otf
rename to src/MayShow.Shared/Assets/Fonts/FontAwesome/Font Awesome 7 Brands-Regular-400.otf
diff --git a/src/MayShow.Desktop/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Regular-400.otf b/src/MayShow.Shared/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Regular-400.otf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Regular-400.otf
rename to src/MayShow.Shared/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Regular-400.otf
diff --git a/src/MayShow.Desktop/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Solid-900.otf b/src/MayShow.Shared/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Solid-900.otf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Solid-900.otf
rename to src/MayShow.Shared/Assets/Fonts/FontAwesome/Font Awesome 7 Free-Solid-900.otf
diff --git a/src/MayShow.Desktop/Assets/Fonts/FontAwesome/LICENSE.txt b/src/MayShow.Shared/Assets/Fonts/FontAwesome/LICENSE.txt
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/FontAwesome/LICENSE.txt
rename to src/MayShow.Shared/Assets/Fonts/FontAwesome/LICENSE.txt
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans/OFL.txt b/src/MayShow.Shared/Assets/Fonts/Noto_Sans/OFL.txt
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans/OFL.txt
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans/OFL.txt
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans/README.txt b/src/MayShow.Shared/Assets/Fonts/Noto_Sans/README.txt
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans/README.txt
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans/README.txt
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans/static/NotoSans-Bold.ttf b/src/MayShow.Shared/Assets/Fonts/Noto_Sans/static/NotoSans-Bold.ttf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans/static/NotoSans-Bold.ttf
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans/static/NotoSans-Bold.ttf
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans/static/NotoSans-Italic.ttf b/src/MayShow.Shared/Assets/Fonts/Noto_Sans/static/NotoSans-Italic.ttf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans/static/NotoSans-Italic.ttf
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans/static/NotoSans-Italic.ttf
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans/static/NotoSans-Regular.ttf b/src/MayShow.Shared/Assets/Fonts/Noto_Sans/static/NotoSans-Regular.ttf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans/static/NotoSans-Regular.ttf
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans/static/NotoSans-Regular.ttf
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/OFL.txt b/src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/OFL.txt
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/OFL.txt
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/OFL.txt
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/README.txt b/src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/README.txt
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/README.txt
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/README.txt
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-Regular.ttf b/src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-Regular.ttf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-Regular.ttf
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-Regular.ttf
diff --git a/src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-SemiBold.ttf b/src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-SemiBold.ttf
similarity index 100%
rename from src/MayShow.Desktop/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-SemiBold.ttf
rename to src/MayShow.Shared/Assets/Fonts/Noto_Sans_JP/static/NotoSansJP-SemiBold.ttf
diff --git a/src/MayShow.Desktop/Assets/LICENSES.txt b/src/MayShow.Shared/Assets/LICENSES.txt
similarity index 100%
rename from src/MayShow.Desktop/Assets/LICENSES.txt
rename to src/MayShow.Shared/Assets/LICENSES.txt
diff --git a/src/MayShow.Desktop/Helpers/ChangeNotifier.cs b/src/MayShow.Shared/Helpers/ChangeNotifier.cs
similarity index 100%
rename from src/MayShow.Desktop/Helpers/ChangeNotifier.cs
rename to src/MayShow.Shared/Helpers/ChangeNotifier.cs
diff --git a/src/MayShow.Desktop/Helpers/Constants.cs b/src/MayShow.Shared/Helpers/Constants.cs
similarity index 100%
rename from src/MayShow.Desktop/Helpers/Constants.cs
rename to src/MayShow.Shared/Helpers/Constants.cs
diff --git a/src/MayShow.Desktop/Helpers/DataGridDropHandler.cs b/src/MayShow.Shared/Helpers/DataGridDropHandler.cs
similarity index 100%
rename from src/MayShow.Desktop/Helpers/DataGridDropHandler.cs
rename to src/MayShow.Shared/Helpers/DataGridDropHandler.cs
diff --git a/src/MayShow.Desktop/Helpers/ListExtensions.cs b/src/MayShow.Shared/Helpers/ListExtensions.cs
similarity index 100%
rename from src/MayShow.Desktop/Helpers/ListExtensions.cs
rename to src/MayShow.Shared/Helpers/ListExtensions.cs
diff --git a/src/MayShow.Desktop/Helpers/SourceGenerationContext.cs b/src/MayShow.Shared/Helpers/SourceGenerationContext.cs
similarity index 100%
rename from src/MayShow.Desktop/Helpers/SourceGenerationContext.cs
rename to src/MayShow.Shared/Helpers/SourceGenerationContext.cs
diff --git a/src/MayShow.Desktop/Helpers/Utilities.cs b/src/MayShow.Shared/Helpers/Utilities.cs
similarity index 100%
rename from src/MayShow.Desktop/Helpers/Utilities.cs
rename to src/MayShow.Shared/Helpers/Utilities.cs
diff --git a/src/MayShow.Desktop/Interfaces/ICanCheckShutdown.cs b/src/MayShow.Shared/Interfaces/ICanCheckShutdown.cs
similarity index 100%
rename from src/MayShow.Desktop/Interfaces/ICanCheckShutdown.cs
rename to src/MayShow.Shared/Interfaces/ICanCheckShutdown.cs
diff --git a/src/MayShow.Desktop/Interfaces/IChangeViewModel.cs b/src/MayShow.Shared/Interfaces/IChangeViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/Interfaces/IChangeViewModel.cs
rename to src/MayShow.Shared/Interfaces/IChangeViewModel.cs
diff --git a/src/MayShow.Desktop/Interfaces/ITopLevelGrabber.cs b/src/MayShow.Shared/Interfaces/ITopLevelGrabber.cs
similarity index 100%
rename from src/MayShow.Desktop/Interfaces/ITopLevelGrabber.cs
rename to src/MayShow.Shared/Interfaces/ITopLevelGrabber.cs
diff --git a/src/MayShow.Desktop/MainWindow.axaml b/src/MayShow.Shared/MainWindow.axaml
similarity index 100%
rename from src/MayShow.Desktop/MainWindow.axaml
rename to src/MayShow.Shared/MainWindow.axaml
diff --git a/src/MayShow.Desktop/MainWindow.axaml.cs b/src/MayShow.Shared/MainWindow.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/MainWindow.axaml.cs
rename to src/MayShow.Shared/MainWindow.axaml.cs
diff --git a/src/MayShow.Shared/MayShow.Shared.csproj b/src/MayShow.Shared/MayShow.Shared.csproj
new file mode 100644
index 0000000..2704ca2
--- /dev/null
+++ b/src/MayShow.Shared/MayShow.Shared.csproj
@@ -0,0 +1,65 @@
+
+
+
+ net10.0
+ enable
+ true
+ true
+ true
+ true
+ true
+ true
+ MayShow
+ 1.4.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+
+
+
+
+
+
+
+ None
+ All
+
+
+
+
+
+
+
+
+
+
diff --git a/src/MayShow.Desktop/Models/PDFReport.cs b/src/MayShow.Shared/Models/PDFReport.cs
similarity index 100%
rename from src/MayShow.Desktop/Models/PDFReport.cs
rename to src/MayShow.Shared/Models/PDFReport.cs
diff --git a/src/MayShow.Desktop/Models/ReportFile.cs b/src/MayShow.Shared/Models/ReportFile.cs
similarity index 100%
rename from src/MayShow.Desktop/Models/ReportFile.cs
rename to src/MayShow.Shared/Models/ReportFile.cs
diff --git a/src/MayShow.Desktop/Models/Settings.cs b/src/MayShow.Shared/Models/Settings.cs
similarity index 100%
rename from src/MayShow.Desktop/Models/Settings.cs
rename to src/MayShow.Shared/Models/Settings.cs
diff --git a/src/MayShow.Desktop/Models/ShutdownCheckOptions.cs b/src/MayShow.Shared/Models/ShutdownCheckOptions.cs
similarity index 100%
rename from src/MayShow.Desktop/Models/ShutdownCheckOptions.cs
rename to src/MayShow.Shared/Models/ShutdownCheckOptions.cs
diff --git a/src/MayShow.Desktop/ViewModels/AboutViewModel.cs b/src/MayShow.Shared/ViewModels/AboutViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/AboutViewModel.cs
rename to src/MayShow.Shared/ViewModels/AboutViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/BaseViewModel.cs b/src/MayShow.Shared/ViewModels/BaseViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/BaseViewModel.cs
rename to src/MayShow.Shared/ViewModels/BaseViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/ConfirmViewModel.cs b/src/MayShow.Shared/ViewModels/ConfirmViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/ConfirmViewModel.cs
rename to src/MayShow.Shared/ViewModels/ConfirmViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/EditFileViewModel.cs b/src/MayShow.Shared/ViewModels/EditFileViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/EditFileViewModel.cs
rename to src/MayShow.Shared/ViewModels/EditFileViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/MainViewModel.cs b/src/MayShow.Shared/ViewModels/MainViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/MainViewModel.cs
rename to src/MayShow.Shared/ViewModels/MainViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/MainWindowViewModel.cs b/src/MayShow.Shared/ViewModels/MainWindowViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/MainWindowViewModel.cs
rename to src/MayShow.Shared/ViewModels/MainWindowViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/SettingsViewModel.cs b/src/MayShow.Shared/ViewModels/SettingsViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/SettingsViewModel.cs
rename to src/MayShow.Shared/ViewModels/SettingsViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/ShutdownCheckViewModel.cs b/src/MayShow.Shared/ViewModels/ShutdownCheckViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/ShutdownCheckViewModel.cs
rename to src/MayShow.Shared/ViewModels/ShutdownCheckViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/WarningDeleteItemViewModel.cs b/src/MayShow.Shared/ViewModels/WarningDeleteItemViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/WarningDeleteItemViewModel.cs
rename to src/MayShow.Shared/ViewModels/WarningDeleteItemViewModel.cs
diff --git a/src/MayShow.Desktop/ViewModels/WarningViewModel.cs b/src/MayShow.Shared/ViewModels/WarningViewModel.cs
similarity index 100%
rename from src/MayShow.Desktop/ViewModels/WarningViewModel.cs
rename to src/MayShow.Shared/ViewModels/WarningViewModel.cs
diff --git a/src/MayShow.Desktop/Views/AboutView.axaml b/src/MayShow.Shared/Views/AboutView.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/AboutView.axaml
rename to src/MayShow.Shared/Views/AboutView.axaml
diff --git a/src/MayShow.Desktop/Views/AboutView.axaml.cs b/src/MayShow.Shared/Views/AboutView.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/AboutView.axaml.cs
rename to src/MayShow.Shared/Views/AboutView.axaml.cs
diff --git a/src/MayShow.Desktop/Views/ConfirmView.axaml b/src/MayShow.Shared/Views/ConfirmView.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/ConfirmView.axaml
rename to src/MayShow.Shared/Views/ConfirmView.axaml
diff --git a/src/MayShow.Desktop/Views/ConfirmView.axaml.cs b/src/MayShow.Shared/Views/ConfirmView.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/ConfirmView.axaml.cs
rename to src/MayShow.Shared/Views/ConfirmView.axaml.cs
diff --git a/src/MayShow.Desktop/Views/EditFile.axaml b/src/MayShow.Shared/Views/EditFile.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/EditFile.axaml
rename to src/MayShow.Shared/Views/EditFile.axaml
diff --git a/src/MayShow.Desktop/Views/EditFile.axaml.cs b/src/MayShow.Shared/Views/EditFile.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/EditFile.axaml.cs
rename to src/MayShow.Shared/Views/EditFile.axaml.cs
diff --git a/src/MayShow.Desktop/Views/MainView.axaml b/src/MayShow.Shared/Views/MainView.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/MainView.axaml
rename to src/MayShow.Shared/Views/MainView.axaml
diff --git a/src/MayShow.Desktop/Views/MainView.axaml.cs b/src/MayShow.Shared/Views/MainView.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/MainView.axaml.cs
rename to src/MayShow.Shared/Views/MainView.axaml.cs
diff --git a/src/MayShow.Desktop/Views/SettingsView.axaml b/src/MayShow.Shared/Views/SettingsView.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/SettingsView.axaml
rename to src/MayShow.Shared/Views/SettingsView.axaml
diff --git a/src/MayShow.Desktop/Views/SettingsView.axaml.cs b/src/MayShow.Shared/Views/SettingsView.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/SettingsView.axaml.cs
rename to src/MayShow.Shared/Views/SettingsView.axaml.cs
diff --git a/src/MayShow.Desktop/Views/ShutdownCheckView.axaml b/src/MayShow.Shared/Views/ShutdownCheckView.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/ShutdownCheckView.axaml
rename to src/MayShow.Shared/Views/ShutdownCheckView.axaml
diff --git a/src/MayShow.Desktop/Views/ShutdownCheckView.axaml.cs b/src/MayShow.Shared/Views/ShutdownCheckView.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/ShutdownCheckView.axaml.cs
rename to src/MayShow.Shared/Views/ShutdownCheckView.axaml.cs
diff --git a/src/MayShow.Desktop/Views/WarningDeleteItem.axaml b/src/MayShow.Shared/Views/WarningDeleteItem.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/WarningDeleteItem.axaml
rename to src/MayShow.Shared/Views/WarningDeleteItem.axaml
diff --git a/src/MayShow.Desktop/Views/WarningDeleteItem.axaml.cs b/src/MayShow.Shared/Views/WarningDeleteItem.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/WarningDeleteItem.axaml.cs
rename to src/MayShow.Shared/Views/WarningDeleteItem.axaml.cs
diff --git a/src/MayShow.Desktop/Views/WarningView.axaml b/src/MayShow.Shared/Views/WarningView.axaml
similarity index 100%
rename from src/MayShow.Desktop/Views/WarningView.axaml
rename to src/MayShow.Shared/Views/WarningView.axaml
diff --git a/src/MayShow.Desktop/Views/WarningView.axaml.cs b/src/MayShow.Shared/Views/WarningView.axaml.cs
similarity index 100%
rename from src/MayShow.Desktop/Views/WarningView.axaml.cs
rename to src/MayShow.Shared/Views/WarningView.axaml.cs