[
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\ndotnet_code_quality.CA1062.null_check_validation_methods = CheckNotNull|CheckNotNullOrEmpty\n\n# Don't use tabs for indentation.\n[*]\nindent_style = space\n# (Please don't specify an indent_size here; that has too many unintended consequences.)\n\n# Code files\n[*.{cs,csx,vb,vbx}]\nindent_size = 4\ninsert_final_newline = true\ncharset = utf-8-bom\n\n# XML project files\n[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]\nindent_size = 2\n\n# XML config files\n[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]\nindent_size = 2\n\n# JSON files\n[*.json]\nindent_size = 2\n\n# Powershell files\n[*.ps1]\nindent_size = 2\n\n# Shell script files\n[*.sh]\nend_of_line = lf\nindent_size = 2\n\n# Dotnet code style settings:\n[*.{cs,vb}]\n\n# IDE0055: Fix formatting\ndotnet_diagnostic.IDE0055.severity = warning\n\n# Sort using and Import directives with System.* appearing first\ndotnet_sort_system_directives_first = true\ndotnet_separate_import_directive_groups = false\n# Avoid \"this.\" and \"Me.\" if not necessary\ndotnet_style_qualification_for_field = false:refactoring\ndotnet_style_qualification_for_property = false:refactoring\ndotnet_style_qualification_for_method = false:refactoring\ndotnet_style_qualification_for_event = false:refactoring\n\n# Use language keywords instead of framework type names for type references\ndotnet_style_predefined_type_for_locals_parameters_members = true:suggestion\ndotnet_style_predefined_type_for_member_access = true:suggestion\n\n# Suggest more modern language features when available\ndotnet_style_object_initializer = true:suggestion\ndotnet_style_collection_initializer = true:suggestion\ndotnet_style_coalesce_expression = true:suggestion\ndotnet_style_null_propagation = true:suggestion\ndotnet_style_explicit_tuple_names = true:suggestion\n\n# Non-private static fields are PascalCase\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style\n\ndotnet_naming_symbols.non_private_static_fields.applicable_kinds = field\ndotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected\ndotnet_naming_symbols.non_private_static_fields.required_modifiers = static\n\ndotnet_naming_style.non_private_static_field_style.capitalization = pascal_case\n\n# Non-private readonly fields are PascalCase\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style\n\ndotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field\ndotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected\ndotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly\n\ndotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case\n\n# Constants are PascalCase\ndotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.constants_should_be_pascal_case.symbols = constants\ndotnet_naming_rule.constants_should_be_pascal_case.style = constant_style\n\ndotnet_naming_symbols.constants.applicable_kinds = field, local\ndotnet_naming_symbols.constants.required_modifiers = const\n\ndotnet_naming_style.constant_style.capitalization = pascal_case\n\n# Static fields are camelCase and start with s_\ndotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion\ndotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields\ndotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style\n\ndotnet_naming_symbols.static_fields.applicable_kinds = field\ndotnet_naming_symbols.static_fields.required_modifiers = static\n\ndotnet_naming_style.static_field_style.capitalization = camel_case\ndotnet_naming_style.static_field_style.required_prefix = s_\n\n# Instance fields are camelCase and start with _\ndotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion\ndotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields\ndotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style\n\ndotnet_naming_symbols.instance_fields.applicable_kinds = field\n\ndotnet_naming_style.instance_field_style.capitalization = camel_case\ndotnet_naming_style.instance_field_style.required_prefix = _\n\n# Locals and parameters are camelCase\ndotnet_naming_rule.locals_should_be_camel_case.severity = suggestion\ndotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters\ndotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style\n\ndotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local\n\ndotnet_naming_style.camel_case_style.capitalization = camel_case\n\n# Local functions are PascalCase\ndotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions\ndotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style\n\ndotnet_naming_symbols.local_functions.applicable_kinds = local_function\n\ndotnet_naming_style.local_function_style.capitalization = pascal_case\n\n# By default, name items with PascalCase\ndotnet_naming_rule.members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.members_should_be_pascal_case.symbols = all_members\ndotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style\n\ndotnet_naming_symbols.all_members.applicable_kinds = *\n\ndotnet_naming_style.pascal_case_style.capitalization = pascal_case\n\n# error RS2008: Enable analyzer release tracking for the analyzer project containing rule '{0}'\ndotnet_diagnostic.RS2008.severity = none\n\n# CSharp code style settings:\n[*.cs]\n# Newline settings\ncsharp_new_line_before_open_brace = all\ncsharp_new_line_before_else = true\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_members_in_anonymous_types = true\ncsharp_new_line_between_query_expression_clauses = true\n\n# Indentation preferences\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents = true\ncsharp_indent_case_contents_when_block = true\ncsharp_indent_switch_labels = true\ncsharp_indent_labels = flush_left\n\n# Prefer \"var\" everywhere\ncsharp_style_var_for_built_in_types = true:suggestion\ncsharp_style_var_when_type_is_apparent = true:suggestion\ncsharp_style_var_elsewhere = true:suggestion\n\n# Prefer method-like constructs to have a block body\ncsharp_style_expression_bodied_methods = false:none\ncsharp_style_expression_bodied_constructors = false:none\ncsharp_style_expression_bodied_operators = false:none\n\n# Prefer property-like constructs to have an expression-body\ncsharp_style_expression_bodied_properties = true:none\ncsharp_style_expression_bodied_indexers = true:none\ncsharp_style_expression_bodied_accessors = true:none\n\n# Suggest more modern language features when available\ncsharp_style_pattern_matching_over_is_with_cast_check = true:suggestion\ncsharp_style_pattern_matching_over_as_with_null_check = true:suggestion\ncsharp_style_inlined_variable_declaration = true:suggestion\ncsharp_style_throw_expression = true:suggestion\ncsharp_style_conditional_delegate_call = true:suggestion\n\n# Space preferences\ncsharp_space_after_cast = false\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_after_comma = true\ncsharp_space_after_dot = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_around_declaration_statements = do_not_ignore\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_before_comma = false\ncsharp_space_before_dot = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = false\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = false\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_parentheses = false\ncsharp_space_between_square_brackets = false\n\n# Blocks are allowed\ncsharp_prefer_braces = true:silent\ncsharp_preserve_single_line_blocks = true\ncsharp_preserve_single_line_statements = true\n\n# warning RS0037: PublicAPI.txt is missing '#nullable enable'\ndotnet_diagnostic.RS0037.severity = none\n\n[src/CodeStyle/**.{cs,vb}]\n# warning RS0005: Do not use generic CodeAction.Create to create CodeAction\ndotnet_diagnostic.RS0005.severity = none\n\n[src/{Analyzers,CodeStyle,Features,Workspaces}/**/*.{cs,vb}]\n# IDE0005: Remove unnecessary usings/imports\ndotnet_diagnostic.IDE0005.severity = warning\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n\n* text=auto"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Cache/options directory for Visual Studio, Visual Studio Code and JetBrains Rider\n.vs/\n.vscode/\n.idea/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# ASP.NET 5\nproject.lock.json\nartifacts/\n\n# NuGet Packages\n*.nupkg\n*.snupkg\n**/packages/*\n\n# ReSharper\nsrc/_ReSharper.Caches/\n\n# Cake\nbuild/tools/*\n\n# GhostDoc\n*.GhostDoc.xml\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\n\n## 2.2 - 2026-03-05\n\n- Updated all dependencies\n- Now compile for .NET 8, .NET 10 and .NET Standard 2.0\n- Enhanced package management in source code\n- Updated demo projects to work with updated libraries\n\n## 2.1 - 2023-12-30\n\nThis version introduces some breaking changes.\n\n- StrongViewLocator must now have its registrations in its constructor. [See updated documentation.](https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs?tab=readme-ov-file#strongviewlocator). This change was required because 2 separate instances are created: one for `MvvmDialogs` and one for `Avalonia` defined in `App.axaml`.\n- Now apply picker `SuggestedStartLocation` and `SuggestedFileName`. The property names and types have been modified.\n- Complete overhaul and simplification of `FileSystem` classes. `IPathInfoFactory` and `IBookmarkFileSystem` have been removed. [See new documentation here.](https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs?tab=readme-ov-file#cross-platform-file-access) `DialogStorageFile` got renamed to `DesktopDialogStorageFile` and `DesktopDialogStorageFactory` is available.\n\nOther changes:\n\n- Dialog show calls will now be ignored in design mode to avoid errors\n- Updated `CrossPlatform.Browser` to run\n- ViewLocatorBase now calls `CreateViewInstance` virtual method instead of `Activator.CreateInstance` for easier customization.\n\nHappy New Year!! May 2024 be the best year in a while\n\n## 2.0 - 2023-06-14\n\n- Updated for Avalonia v11.0.0\n- Changed license to MIT\n- Removed AppSettings. Design was clumsy, and when it's actually needed, it doesn't work well with the modular design.\n- AllowConcurrentDialogs option has been moved to the DialogManager\n- Other options (in WPF) have been moved to the DialogFactory\n- Avalonia.MessageBox: added an option to display message boxes as windows or popups. Option is available when configuring the DialogFactory: new DialogFactory().AddMessageBox(MessageBoxMode.Popup)\n\n## 2.0-rc1 - 2023-06-10\n\n- ViewModel event handling is now supported for ViewModels shown in DialogHost, FluentContentDialog and FluentTaskDialog\n- DialogHost now supports mobile back button\n- DialogHost can now display any type of content: ViewModel, Control, or direct content. Renamed ContentViewModel property to Content.\n- Avalonia now targets .Net Standard 2.0\n- Target Avalonia UI v2.0-rc1.1\n\n## 2.0-preview7 - 2023-03-18\n\n- Automatically set MainWindow in Avalonia when showing the first window\n\n## 2.0-preview6 - 2023-03-06\n\n- Async close confirmation now works properly with mobile navigation\n- Added an application setting: AllowConcurrentDialogs. When False (default), it will wait for the previous dialog to close before showing the next one. If you call 3 message boxes at the same time, it will show the message boxes one after the other instead of 3 on top of each other.\n- Added support for DialogHost.Avalonia popup views.\n- Added support for  Aura.UI message boxes for MvvmDialogs v1.4.1 as Aura.UI does not yet support Avalonia11.\n\n## 2.0-preview5 - 2023-03-02\n\nStrongViewLocator to register ViewModel-View combinations in a strongly-typed way to avoid the use of reflection. Useful if you want to use Assembly Trimming! Works for both desktop and mobile and selects the View accordingly.\n\nSample ViewLocator registration:\n\n```\nlocator = new StrongViewLocator() { ForceSinglePageNavigation = false }\n    .Register<MainViewModel, MainView, MainWindow>()\n    .Register<CurrentTimeViewModel, CurrentTimeView, CurrentTimeWindow>()\n    .Register<ConfirmCloseViewModel, ConfirmCloseView, ConfirmCloseWindow>();\n\nbuild.RegisterLazySingleton(() => (IDialogService)new DialogService(\n    new DialogManager(viewLocator: locator),\n    viewModelFactory: x => Locator.Current.GetService(x)));\n```\n\nIt could be done even better. This StaticViewLocatorGenerator (usage here) could be adapted to be more generic and serve for our needs. It would use a Source Generator to generate ViewModel-View mapping at compile-time using naming standards and removing the need for reflection. If someone has experience with Source Generators, contribution is welcomed!\n\n## 2.0-preview4 - 2023-02-22\n\n- Fixed file dialogs filters that were broken\n- Removed dependency on Reactive\n\n## 2.0-preview3 - 2023-02-16\n\nIt now supports 'magic' mobile navigation on Android and iOS using the exact same API, allowing to convert MVVM desktop apps into mobile with very little efforts. Mobile back navigation is also automatically supported.\n\nDocumentation has been updated.\n\nSupporting mobile navigation required extensive internal structural changes which resulted in very little changes to the API.\n\nI believe that these are the only minor breaking changes\n\n- The default ViewLocator now replaces ViewModel with Window on desktop and View on mobile. If you want the old standard of only replacing with View, you can easily create your ViewLocator with a single line to replace ViewModel with View.\n- File/folder dialogs now return IDialogStorageFile and IDialogStorageFolder instead of string. To get the same path string you had before (on desktop), simply add .LocalPath.\n\nKnown limitations:\n\n- Mobile views are held in a weak cache, and non-visible views should be released from memory when memory is needed. The unit test to ensure this happens does not currently pass. Contribution is welcomed to find the problem.\n- Closing async cancellation does not yet work with mobile navigation\n\n## 1.4.1 - 2022-09-03\n\n- Renamed the new ViewLoaded/ViewClosing/ViewClosed methods to OnLoaded/OnClosing/OnClosed. Interface names remain the same.\n- Fixed a crash with FluentAvalonia TaskDialog when pressing escape.\n- When owner is null, it will now use the main window, or create a dummy window.\n\n## 1.4.0 - 2022-08-29\n\nHandling Loading, Closing and Closed events presents a few annoyances.\n\nLoading is a common business concern. Why would you have to write code in your View for it?\n\nClosing is generally used to display a confirmation before exit. Calling async code from the Closing event would require complex code, both in the ViewModel and the View.\n\nClosed cannot even call a command via an XAML behavior!\n\nAs a simple solution, you can implement IViewLoaded, IViewClosing and/or IViewClosed from your ViewModel with no code required in your View.\n\n- IViewLoaded, IViewClosing and IViewClosed interfaces have been added. See documentation.\n- Owner parameters are now optional, it's up to the implementation as to whether or not it is supported\n- IWindow has been renamed to IView\n- Fixed a bug with Fluent TaskMessageBox\n\n## 1.3.1 - 2022-07-01\n\n- File dialog filters can now take extensions with or without the dot\n- FluentAvalonia TaskDialog now supports default buttons\n- Open/save file framework dialog settings are now more consistent in Avalonia and WPF\n\n## 1.3.0 - 2022-06-16\n\n- Calls will only be dispatched if not already on UI thread\n- Redesigned FrameworkDialogFactory to be simpler and more modular\n- MessageBox for Avalonia is now split into a separate assembly `HanumanInstitute.MvvmDialogs.Avalonia.MessageBox`, since Avalonia doesn't have built-in support for message boxes\n- `MvvmDialogs.Avalonia`, removed reference to MessageBox.Avalonia\n- Added preliminary support for FluentAvalonia `HanumanInstitute.MvvmDialogs.Avalonia.Fluent`\n\nTODO:\n- Support icons with Fluent MessageBox TaskDialogs\n- Support more complex usage of Fluent dialogs\n\n## 1.2.3 - 2022-06-07\n\n- Fixed an issue with thread-safety\n\n## 1.2.2 - 2022-06-07\n\n- DialogManager is now thread-safe, dispatching UI calls to the UI thread\n- Added optional `dispatcher` parameter to DialogManager\n\n## 1.2.1 - 2022-05-29\n\nMade the library more friendly for unit tests. One area that caused trouble is the creation of the\ndialog view model `new MyDialogViewModel()`. If it has dependencies, you might use `Locator.MyDialogViewModel`,\nbut then that's not unit-test friendly.\n\nAs a solution, you will now create the view model using\n`IDialogService.CreateViewModel<T>`.\nIt will call a ViewModelFactory function set in the DialogService constructor.\n\n- Added `viewModelFactory` parameter to DialogService constructor\n- Moved `viewLocator` constructor parameter from DialogService to DialogManager\n- Updated all demos to use correct constructor parameters\n- Updated all demos to use `IDialogService.CreateViewModel<T>`\n- Added unit test sample project: `Demo.ModalDialog.Tests`\n\n## 1.2.0 - 2022-05-28\n\n- Logging is now done using standard `ILogger<DialogService>` interface. See doc\n- Revamped the whole logging mechanisms\n- All demos now output logs to the Debug window\n- Added `IWindow.RefObj`, which can be implemented like this for custom dialogs: `public object RefObj => this;`\n- `IDialogManager.ShowFrameworkDialogAsync` now takes an extra optional parameter `resultToString` to convert the result to string for logging. If null, it uses `object.ToString()`.\n- Bug fix: `WPF.DialogService.ShowDialog` (sync method) was not working\n\n## 1.1.0 - 2022-05-26\n\nBREAKING CHANGES\n- XAML registration is no longer required and must be removed\n\nIf your convention is different than simply replacing 'ViewModel' with 'View':\n- You must add a ViewLocator to your project (see doc)\n- You must pass this ViewLocator to the DialogService constructor\n\nAdopting Avalonia's ViewLocator design greatly simplifies the code and avoids duplicating the design.\n\n- Internally, the following classes have been removed:\n  `DialogTypeLocatorBase, DialogTypeLocatorCache,\n  IDialogFactory, NamingConventionDialogTypeLocator, ReflectionDialogFactoryBase, ViewRegistration,\n  DialogServiceViews, ReflectionDialogFactory`\n- Renamed `IDialogTypeLocator` to `IViewLocator`\n- Removed namespace `HanumanInstitute.MvvmDialogs.DialogTypeLocators`\n\n`MvvmDialogs.Avalonia` is no longer signed because dependency `ReactiveUI` is not signed.\n\n## 1.0.0 - 2022-05-07\n\nFork from FantasticFiasco/mvvm-dialogs\n\n### What's new:\n- Support for Avalonia and WPF\n- The core is now platform-agnostic\n\n### TODO:\n- UWP support\n- Blazor support\n- WinUI support\n- Improving tests\n"
  },
  {
    "path": "Directory.Packages.props",
    "content": "<Project>\n  <PropertyGroup>\n    <!-- Enable central package management, https://learn.microsoft.com/en-us/nuget/consume-packages/Central-Package-Management -->\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"Avalonia\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"Avalonia.Android\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"Avalonia.Browser\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"Avalonia.Desktop\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"Avalonia.Diagnostics\" Version=\"11.3.14\" />\n    <PackageVersion Include=\"Avalonia.Fonts.Inter\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"Avalonia.iOS\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"Avalonia.Themes.Fluent\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"ReactiveUI.Avalonia\" Version=\"12.0.1\" />\n    <PackageVersion Include=\"ReactiveUI\" Version=\"23.2.1\" />\n    <PackageVersion Include=\"CommunityToolkit.Mvvm\" Version=\"8.4.2\" />\n    <PackageVersion Include=\"coverlet.collector\" Version=\"10.0.0\" />\n    <PackageVersion Include=\"DialogHost.Avalonia\" Version=\"0.12.1\" />\n    <PackageVersion Include=\"FluentAvaloniaUI\" Version=\"3.0.0-preview1\" />\n    <PackageVersion Include=\"HanumanInstitute.MvvmDialogs\" Version=\"2.2.0\" />\n    <PackageVersion Include=\"HanumanInstitute.MvvmDialogs.Avalonia\" Version=\"2.2.0\" />\n    <PackageVersion Include=\"HanumanInstitute.MvvmDialogs.Avalonia.MessageBox\" Version=\"2.2.0\" />\n    <PackageVersion Include=\"HanumanInstitute.MvvmDialogs.Wpf\" Version=\"2.2.0\" />\n    <PackageVersion Include=\"JetBrains.dotMemoryUnit\" Version=\"3.2.20220510\" />\n    <PackageVersion Include=\"MessageBox.Avalonia\" Version=\"12.0.0\" />\n    <PackageVersion Include=\"Microsoft.Bcl.AsyncInterfaces\" Version=\"10.0.6\" />\n    <PackageVersion Include=\"Microsoft.Extensions.DependencyInjection\" Version=\"10.0.7\" />\n    <PackageVersion Include=\"Microsoft.Extensions.Logging.Abstractions\" Version=\"10.0.7\" />\n    <PackageVersion Include=\"Microsoft.Extensions.Logging.Debug\" Version=\"10.0.7\" />\n    <PackageVersion Include=\"Microsoft.NET.Test.Sdk\" Version=\"18.4.0\" />\n    <PackageVersion Include=\"Microsoft.Xaml.Behaviors.Wpf\" Version=\"1.1.142\" />\n    <PackageVersion Include=\"Moq\" Version=\"4.20.72\" />\n    <PackageVersion Include=\"NUnit\" Version=\"4.5.0\" />\n    <PackageVersion Include=\"NUnit.Analyzers\" Version=\"4.11.2\" />\n    <PackageVersion Include=\"NUnit3TestAdapter\" Version=\"6.1.0\" />\n    <PackageVersion Include=\"Ookii.Dialogs.WinForms\" Version=\"4.0.0\" />\n    <PackageVersion Include=\"Ookii.Dialogs.Wpf\" Version=\"5.0.1\" />\n    <PackageVersion Include=\"ReactiveUI.Fody\" Version=\"19.5.41\" />\n    <PackageVersion Include=\"ReactiveUI.Drawing\" Version=\"23.1.8\" />\n    <PackageVersion Include=\"ReactiveUI.SourceGenerators\" Version=\"2.6.1\" />\n    <PackageVersion Include=\"System.Linq.Async\" Version=\"7.0.0\" />\n    <PackageVersion Include=\"Splat\" Version=\"19.3.1\" />\n    <PackageVersion Include=\"Splat.DependencyInjection.SourceGenerator\" Version=\"2.2.2\" />\n    <PackageVersion Include=\"System.Linq.AsyncEnumerable\" Version=\"10.0.7\" />\n    <PackageVersion Include=\"TestStack.White.ScreenObjects\" Version=\"0.13.3\" />\n    <PackageVersion Include=\"xunit.v3\" Version=\"3.2.2\" />\n    <PackageVersion Include=\"xunit.runner.visualstudio\" Version=\"3.1.5\" />\n  </ItemGroup>\n  <ItemGroup>\n    <GlobalPackageReference Include=\"Microsoft.Build.CopyOnWrite\" Version=\"1.0.334\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2018-2022 Etienne Charland\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MvvmDialogs.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 18\nVisualStudioVersion = 18.3.11520.95\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{958591BB-32C1-48C4-B5FA-11A2C5686814}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"samples\", \"samples\", \"{62592C78-61AA-44B4-A7C3-EAC678A568A2}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Wpf\", \"Wpf\", \"{0A8EF671-0277-4F7A-B03D-C6E227020E86}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ActivateNonModalDialog\", \"samples\\Wpf\\Demo.ActivateNonModalDialog\\Demo.ActivateNonModalDialog.csproj\", \"{ED5001B1-A78B-4881-9BD8-CB56DD930585}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.MessageBox\", \"samples\\Wpf\\Demo.MessageBox\\Demo.MessageBox.csproj\", \"{A6ABFE78-566C-4534-947E-BEFB86BDA347}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ModalCustomDialog\", \"samples\\Wpf\\Demo.ModalCustomDialog\\Demo.ModalCustomDialog.csproj\", \"{AD1F57E0-055A-4838-91AD-B824BF17E481}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ModalDialog\", \"samples\\Wpf\\Demo.ModalDialog\\Demo.ModalDialog.csproj\", \"{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.NonModalCustomDialog\", \"samples\\Wpf\\Demo.NonModalCustomDialog\\Demo.NonModalCustomDialog.csproj\", \"{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.NonModalDialog\", \"samples\\Wpf\\Demo.NonModalDialog\\Demo.NonModalDialog.csproj\", \"{74041466-C4C6-4396-8B57-D176CF5C0FD9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.OpenFileDialog\", \"samples\\Wpf\\Demo.OpenFileDialog\\Demo.OpenFileDialog.csproj\", \"{33BC9402-331E-47B5-8EE8-4F15AF463D12}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.SaveFileDialog\", \"samples\\Wpf\\Demo.SaveFileDialog\\Demo.SaveFileDialog.csproj\", \"{62E90DFE-FF71-4558-A33E-361BFE60BF9D}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CloseNonModalDialog\", \"samples\\Wpf\\Demo.CloseNonModalDialog\\Demo.CloseNonModalDialog.csproj\", \"{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MvvmDialogs.Avalonia\", \"src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\", \"{0848A1AE-3147-432C-B473-44EE2CBA2E57}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MvvmDialogs\", \"src\\MvvmDialogs\\MvvmDialogs.csproj\", \"{E14F830F-2A00-46D0-B25B-B3D675E86B02}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MvvmDialogs.Wpf\", \"src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\", \"{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Avalonia\", \"Avalonia\", \"{0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CloseNonModalDialog\", \"samples\\Avalonia\\Demo.CloseNonModalDialog\\Demo.CloseNonModalDialog.csproj\", \"{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.MessageBox\", \"samples\\Avalonia\\Demo.MessageBox\\Demo.MessageBox.csproj\", \"{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ModalCustomDialog\", \"samples\\Avalonia\\Demo.ModalCustomDialog\\Demo.ModalCustomDialog.csproj\", \"{89BFF856-E543-4EB5-B443-78B30D818D57}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ModalDialog\", \"samples\\Avalonia\\Demo.ModalDialog\\Demo.ModalDialog.csproj\", \"{4D578475-512F-43C5-9AF4-F8A8578732CE}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.NonModalCustomDialog\", \"samples\\Avalonia\\Demo.NonModalCustomDialog\\Demo.NonModalCustomDialog.csproj\", \"{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.NonModalDialog\", \"samples\\Avalonia\\Demo.NonModalDialog\\Demo.NonModalDialog.csproj\", \"{1E02BE6D-9F98-4343-930C-588CCB9A1296}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.OpenFileDialog\", \"samples\\Avalonia\\Demo.OpenFileDialog\\Demo.OpenFileDialog.csproj\", \"{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.SaveFileDialog\", \"samples\\Avalonia\\Demo.SaveFileDialog\\Demo.SaveFileDialog.csproj\", \"{CC35BEDB-96DB-452C-BDDB-3D90169F8313}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.OpenFolderDialog\", \"samples\\Wpf\\Demo.OpenFolderDialog\\Demo.OpenFolderDialog.csproj\", \"{27684F10-FC43-4868-80B3-9D1840E4CF54}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CustomOpenFolderDialog\", \"samples\\Wpf\\Demo.CustomOpenFolderDialog\\Demo.CustomOpenFolderDialog.csproj\", \"{3562249C-10F4-42C8-BD49-CCF26C51ED8C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.OpenFolderDialog\", \"samples\\Avalonia\\Demo.OpenFolderDialog\\Demo.OpenFolderDialog.csproj\", \"{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CustomOpenFolderDialog\", \"samples\\Avalonia\\Demo.CustomOpenFolderDialog\\Demo.CustomOpenFolderDialog.csproj\", \"{F01E685B-AC00-44ED-AF05-D96633B1E31A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ModalDialog.Tests\", \"samples\\Avalonia\\Demo.ModalDialog.Tests\\Demo.ModalDialog.Tests.csproj\", \"{20C76953-78BF-493C-BF15-AB67DC620D82}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ModalDialog.Tests\", \"samples\\Wpf\\Demo.ModalDialog.Tests\\Demo.ModalDialog.Tests.csproj\", \"{743EA3B7-51AE-4055-AA6B-A0232142F0C6}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MvvmDialogs.Avalonia.MessageBox\", \"src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\", \"{7958C69B-C7A0-4CC4-8340-5C375E7AA722}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MvvmDialogs.Avalonia.Fluent\", \"src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\", \"{532FD258-141B-4FF9-8846-CD8396728E27}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.FluentContentDialog\", \"samples\\Avalonia\\Demo.FluentContentDialog\\Demo.FluentContentDialog.csproj\", \"{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.FluentTaskDialog\", \"samples\\Avalonia\\Demo.FluentTaskDialog\\Demo.FluentTaskDialog.csproj\", \"{23550E77-920B-47A2-AE2C-36204BFA9469}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.FluentMessageBoxContentDialog\", \"samples\\Avalonia\\Demo.FluentMessageBoxContentDialog\\Demo.FluentMessageBoxContentDialog.csproj\", \"{339BEC27-FD38-494E-9D96-7A43DE9B36B4}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.FluentMessageBoxTaskDialog\", \"samples\\Avalonia\\Demo.FluentMessageBoxTaskDialog\\Demo.FluentMessageBoxTaskDialog.csproj\", \"{30F209A6-028C-4AF4-A34D-D32B6C0D3572}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ViewEvents\", \"samples\\Avalonia\\Demo.ViewEvents\\Demo.ViewEvents.csproj\", \"{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.ViewEvents\", \"samples\\Wpf\\Demo.ViewEvents\\Demo.ViewEvents.csproj\", \"{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"CrossPlatform\", \"CrossPlatform\", \"{B90D3DCC-669D-4583-8BA0-682EB1F93BD2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MvvmDialogs.Avalonia.Tests\", \"src\\MvvmDialogs.Avalonia.Tests\\MvvmDialogs.Avalonia.Tests.csproj\", \"{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CrossPlatform\", \"samples\\Avalonia\\CrossPlatform\\Demo.CrossPlatform\\Demo.CrossPlatform.csproj\", \"{24D92E73-9429-48AD-A805-25CE7AF84D50}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CrossPlatform.Android\", \"samples\\Avalonia\\CrossPlatform\\Demo.CrossPlatform.Android\\Demo.CrossPlatform.Android.csproj\", \"{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CrossPlatform.iOS\", \"samples\\Avalonia\\CrossPlatform\\Demo.CrossPlatform.iOS\\Demo.CrossPlatform.iOS.csproj\", \"{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CrossPlatform.Desktop\", \"samples\\Avalonia\\CrossPlatform\\Demo.CrossPlatform.Desktop\\Demo.CrossPlatform.Desktop.csproj\", \"{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.CrossPlatform.Browser\", \"samples\\Avalonia\\CrossPlatform\\Demo.CrossPlatform.Browser\\Demo.CrossPlatform.Browser.csproj\", \"{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.StrongLocator\", \"samples\\Avalonia\\Demo.StrongLocator\\Demo.StrongLocator.csproj\", \"{F03BD8DB-9247-4977-A4AB-C98FE071294A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Demo.StrongLocator\", \"samples\\Wpf\\Demo.StrongLocator\\Demo.StrongLocator.csproj\", \"{3D577143-DEEA-42A4-B261-9A0846E537EF}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"MvvmDialogs.Avalonia.DialogHost\", \"src\\MvvmDialogs.Avalonia.DialogHost\\MvvmDialogs.Avalonia.DialogHost.csproj\", \"{C9971FF8-3695-457F-8A78-CBDD098617D7}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo.DialogHost\", \"samples\\Avalonia\\Demo.DialogHost\\Demo.DialogHost.csproj\", \"{86D96E8C-F62A-4563-AFEF-1907F9280D7D}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{DBF0AD8E-617C-43D4-86C7-C81F825D656C}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tsrc\\Directory.Build.props = src\\Directory.Build.props\n\t\tDirectory.Packages.props = Directory.Packages.props\n\tEndProjectSection\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Demo.ActivateNonModalDialog.MvvmToolkit\", \"samples\\Avalonia\\Demo.ActivateNonModalDialog.MvvmToolkit\\Demo.ActivateNonModalDialog.MvvmToolkit.csproj\", \"{84D06F7E-6381-7653-27C1-4FF4A0232C92}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|ARM64 = Debug|ARM64\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|ARM64 = Release|ARM64\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|x64.Build.0 = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585}.Release|x86.Build.0 = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|x64.Build.0 = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347}.Release|x86.Build.0 = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|x64.Build.0 = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481}.Release|x86.Build.0 = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|x64.Build.0 = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978}.Release|x86.Build.0 = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|x64.Build.0 = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|x64.Build.0 = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|x64.Build.0 = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12}.Release|x86.Build.0 = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|x64.Build.0 = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D}.Release|x86.Build.0 = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|x64.Build.0 = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B}.Release|x86.Build.0 = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|x64.Build.0 = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02}.Release|x86.Build.0 = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|x64.Build.0 = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0}.Release|x86.Build.0 = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|x64.Build.0 = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3}.Release|x86.Build.0 = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|x64.Build.0 = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022}.Release|x86.Build.0 = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|x64.Build.0 = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57}.Release|x86.Build.0 = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|x64.Build.0 = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE}.Release|x86.Build.0 = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|x64.Build.0 = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C}.Release|x86.Build.0 = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|x64.Build.0 = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E}.Release|x86.Build.0 = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|x64.Build.0 = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313}.Release|x86.Build.0 = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|x64.Build.0 = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C}.Release|x86.Build.0 = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|x64.Build.0 = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A}.Release|x86.Build.0 = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|x64.Build.0 = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A}.Release|x86.Build.0 = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|x64.Build.0 = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82}.Release|x86.Build.0 = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|x64.Build.0 = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|x64.Build.0 = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722}.Release|x86.Build.0 = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|x64.Build.0 = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE}.Release|x86.Build.0 = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|x64.Build.0 = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469}.Release|x86.Build.0 = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|x64.Build.0 = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4}.Release|x86.Build.0 = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|x64.Build.0 = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572}.Release|x86.Build.0 = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|x64.Build.0 = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5}.Release|x86.Build.0 = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|x64.Build.0 = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE}.Release|x86.Build.0 = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|x64.Build.0 = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50}.Release|x86.Build.0 = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|x64.Build.0 = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0}.Release|x86.Build.0 = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|x64.Build.0 = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5}.Release|x86.Build.0 = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|x64.Build.0 = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B}.Release|x86.Build.0 = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|x64.Build.0 = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26}.Release|x86.Build.0 = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|x64.Build.0 = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A}.Release|x86.Build.0 = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF}.Release|x86.Build.0 = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|x64.Build.0 = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D}.Release|x86.Build.0 = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|x64.Build.0 = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{0A8EF671-0277-4F7A-B03D-C6E227020E86} = {62592C78-61AA-44B4-A7C3-EAC678A568A2}\n\t\t{ED5001B1-A78B-4881-9BD8-CB56DD930585} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{A6ABFE78-566C-4534-947E-BEFB86BDA347} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{AD1F57E0-055A-4838-91AD-B824BF17E481} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{F2CAA958-5A0E-4BB3-B624-B8360C5F2978} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{DD760082-E0FA-433F-A1D0-D05F5D91FFA9} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{74041466-C4C6-4396-8B57-D176CF5C0FD9} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{33BC9402-331E-47B5-8EE8-4F15AF463D12} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{62E90DFE-FF71-4558-A33E-361BFE60BF9D} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{CABB5675-02EF-42A7-A2C9-E4F37D66D12B} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{0848A1AE-3147-432C-B473-44EE2CBA2E57} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{E14F830F-2A00-46D0-B25B-B3D675E86B02} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{32D9C89C-9D88-40F9-A05D-CD95F05F38D0} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{0CAFC532-721B-4CD0-B4CA-AF10F07BFD76} = {62592C78-61AA-44B4-A7C3-EAC678A568A2}\n\t\t{26E80F33-67D7-4F29-87E4-DFA45FBCF6B3} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{ADB64CA1-52F9-47B9-AC03-975D2C9E4022} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{89BFF856-E543-4EB5-B443-78B30D818D57} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{4D578475-512F-43C5-9AF4-F8A8578732CE} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{61F454B7-9F32-4CBA-8FE5-02B44D5CF25C} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{1E02BE6D-9F98-4343-930C-588CCB9A1296} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{3D4F7533-B6B3-4F96-8794-F80A96EAB34E} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{CC35BEDB-96DB-452C-BDDB-3D90169F8313} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{27684F10-FC43-4868-80B3-9D1840E4CF54} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{3562249C-10F4-42C8-BD49-CCF26C51ED8C} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{2EBBA423-F963-4CF4-9355-A5B2CE7C699A} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{F01E685B-AC00-44ED-AF05-D96633B1E31A} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{20C76953-78BF-493C-BF15-AB67DC620D82} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{743EA3B7-51AE-4055-AA6B-A0232142F0C6} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{7958C69B-C7A0-4CC4-8340-5C375E7AA722} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{532FD258-141B-4FF9-8846-CD8396728E27} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{3B8A071F-EAE4-427F-9CF5-09BFA4F856FE} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{23550E77-920B-47A2-AE2C-36204BFA9469} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{339BEC27-FD38-494E-9D96-7A43DE9B36B4} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{30F209A6-028C-4AF4-A34D-D32B6C0D3572} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{BA8764EF-2FA6-43C8-8FAA-ABBA8CFA1CD7} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{1FA1B0CC-DC5D-4327-B7B9-FEC7C12F88D5} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{B90D3DCC-669D-4583-8BA0-682EB1F93BD2} = {62592C78-61AA-44B4-A7C3-EAC678A568A2}\n\t\t{AD2BE2F7-5D94-4E1C-AA4F-5F69B160B4CE} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{24D92E73-9429-48AD-A805-25CE7AF84D50} = {B90D3DCC-669D-4583-8BA0-682EB1F93BD2}\n\t\t{497C1B3B-3326-45DB-BC0B-76C3EDAA26E0} = {B90D3DCC-669D-4583-8BA0-682EB1F93BD2}\n\t\t{08A1F54A-676B-4A9A-BE41-9BE1A21EC2C5} = {B90D3DCC-669D-4583-8BA0-682EB1F93BD2}\n\t\t{DB400AC5-91AB-4621-9E12-6EF27BFE9D2B} = {B90D3DCC-669D-4583-8BA0-682EB1F93BD2}\n\t\t{A8ADB3BE-683C-44FD-9C59-53F5B6B60A26} = {B90D3DCC-669D-4583-8BA0-682EB1F93BD2}\n\t\t{F03BD8DB-9247-4977-A4AB-C98FE071294A} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{3D577143-DEEA-42A4-B261-9A0846E537EF} = {0A8EF671-0277-4F7A-B03D-C6E227020E86}\n\t\t{C9971FF8-3695-457F-8A78-CBDD098617D7} = {958591BB-32C1-48C4-B5FA-11A2C5686814}\n\t\t{86D96E8C-F62A-4563-AFEF-1907F9280D7D} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\t\t{84D06F7E-6381-7653-27C1-4FF4A0232C92} = {0CAFC532-721B-4CD0-B4CA-AF10F07BFD76}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {983A22B3-AE5B-4B67-A798-F6A6697B82A8}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "MvvmDialogs.sln.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:Boolean x:Key=\"/Default/CodeEditing/Intellisense/CodeCompletion/AutoCompleteBasicCompletion/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeEditing/Intellisense/CodeCompletion/IntelliSenseCompletingCharacters/IntelliSenseCompletingCharactersSettingCSharp/UpgradedFromVSSettings/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeEditing/Intellisense/LookupWindow/ShowSummary/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeEditing/Localization/CSharpLocalizationOptions/DontAnalyseVerbatimStrings/@EntryValue\">False</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/AnalysisEnabled/@EntryValue\">SOLUTION</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeInspection/Highlighting/IdentifierHighlightingEnabled/@EntryValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ArrangeAccessorOwnerBody/@EntryIndexedValue\">SUGGESTION</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertConditionalTernaryToNullCoalescing/@EntryIndexedValue\">HINT</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertIfStatementToConditionalTernaryExpression/@EntryIndexedValue\">HINT</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ConvertIfStatementToNullCoalescingExpression/@EntryIndexedValue\">HINT</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=EmptyConstructor/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=EmptyDestructor/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=EmptyGeneralCatchClause/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=EventUnsubscriptionViaAnonymousDelegate/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ExplicitCallerInfoArgument/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=FieldCanBeMadeReadOnly_002EGlobal/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=FieldCanBeMadeReadOnly_002ELocal/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=NotAccessedField_002EGlobal/@EntryIndexedValue\">HINT</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=NUnit_002ENonPublicMethodWithTestAttribute/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=PossibleMultipleEnumeration/@EntryIndexedValue\">SUGGESTION</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=PublicConstructorInAbstractClass/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantBaseConstructorCall/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantCast/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantEnumerableCastCall/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantOverridenMember/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantToStringCall/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantUsingDirective/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RemoveRedundantOrStatement_002EFalse/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RemoveRedundantOrStatement_002ETrue/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RemoveToList_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=RemoveToList_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithFirstOrDefault_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithFirstOrDefault_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithFirstOrDefault_002E3/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithFirstOrDefault_002E4/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithLastOrDefault_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithLastOrDefault_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithLastOrDefault_002E3/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithLastOrDefault_002E4/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002E3/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EAny_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EAny_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ECount_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ECount_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EFirst_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EFirst_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EFirstOrDefault_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EFirstOrDefault_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ELast_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ELast_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ELastOrDefault_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ELastOrDefault_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ELongCount/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ESingle_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ESingle_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ESingleOrDefault_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002ESingleOrDefault_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithOfType_002EWhere/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToAny/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToCount/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToFirst/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToFirstOrDefault/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToLast/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToLastOrDefault/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToSingle/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleCallToSingleOrDefault/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleOrDefault_002E1/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleOrDefault_002E2/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleOrDefault_002E3/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=ReplaceWithSingleOrDefault_002E4/@EntryIndexedValue\">WARNING</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=SealedMemberInSealedClass/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestUseVarKeywordEverywhere/@EntryIndexedValue\">DO_NOT_SHOW</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue\">SUGGESTION</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue\">SUGGESTION</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedMember_002EGlobal/@EntryIndexedValue\">HINT</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedVariable/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=Xaml_002EBindingWithContextNotResolved/@EntryIndexedValue\">ERROR</s:String>\n\t<s:String x:Key=\"/Default/CodeInspection/Highlighting/InspectionSeverities/=Xaml_002EBindingWithoutContextNotResolved/@EntryIndexedValue\">SUGGESTION</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_LINQ_QUERY/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_EXPRESSION/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_FOR_STMT/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTILINE_PARAMETER/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_MULTLINE_TYPE_PARAMETER_CONSTRAINS/@EntryValue\">False</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue\">NEXT_LINE</s:String>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AFTER_BLOCK_STATEMENTS/@EntryValue\">0</s:Int64>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_AUTO_PROPERTY/@EntryValue\">0</s:Int64>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_FIELD/@EntryValue\">0</s:Int64>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_INVOCABLE/@EntryValue\">0</s:Int64>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_PROPERTY/@EntryValue\">0</s:Int64>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_SINGLE_LINE_TYPE/@EntryValue\">0</s:Int64>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/CASE_BLOCK_BRACES/@EntryValue\">NEXT_LINE</s:String>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/CONTINUOUS_INDENT_MULTIPLIER/@EntryValue\">1</s:Int64>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/INITIALIZER_BRACES/@EntryValue\">NEXT_LINE</s:String>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_BLANK_LINES_IN_CODE/@EntryValue\">1</s:Int64>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue\">1</s:Int64>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_EXISTING_INITIALIZER_ARRANGEMENT/@EntryValue\">False</s:Boolean>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/MAX_INITIALIZER_ELEMENTS_ON_LINE/@EntryValue\">1</s:Int64>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSORHOLDER_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue\">NEVER</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_CONSTRUCTOR_INITIALIZER_ON_SAME_LINE/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE/@EntryValue\">False</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue\">NEVER</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_EMBEDDED_STATEMENT_ON_SAME_LINE/@EntryValue\">NEVER</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_INITIALIZER_ON_SINGLE_LINE/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_LINQ_ON_SINGLE_LINE/@EntryValue\">False</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SIMPLE_EMBEDDED_STATEMENT_STYLE/@EntryValue\">LINE_BREAK</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AFTER_TYPECAST_PARENTHESES/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AROUND_ARROW_OP/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AROUND_MULTIPLICATIVE_OP/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_SIZEOF_PARENTHESES/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_TYPEOF_PARENTHESES/@EntryValue\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_WITHIN_SINGLE_LINE_ARRAY_INITIALIZER_BRACES/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_DECLARATION_LPAR/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue\">CHOP_IF_LONG</s:String>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_LIMIT/@EntryValue\">180</s:Int64>\n\t<s:String x:Key=\"/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_PARAMETERS_STYLE/@EntryValue\">CHOP_IF_LONG</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/JavaScriptCodeFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/JavaScriptCodeFormatting/JavaScriptFormatOther/ALIGN_MULTIPLE_DECLARATION/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/CodeFormatting/XmlDocFormatter/LinebreaksInsideMultilineTag/@EntryValue\">False</s:Boolean>\n\t<s:Int64 x:Key=\"/Default/CodeStyle/CodeFormatting/XmlDocFormatter/WRAP_LIMIT/@EntryValue\">140</s:Int64>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/Generate/=Global/@KeyIndexDefined\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/Generate/=Global/Options/=PropertyBody/@EntryIndexedValue\">Automatic property</s:String>\n\t<s:Boolean x:Key=\"/Default/CodeStyle/Generate/=Implementations/@KeyIndexDefined\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/CodeStyle/Generate/=Implementations/Options/=WrapInRegion/@EntryIndexedValue\">False</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Generate/=Implementations/Options/=XmlDocumentation/@EntryIndexedValue\">False</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CF/@EntryIndexedValue\">CF</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IO/@EntryIndexedValue\">IO</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=OK/@EntryIndexedValue\">OK</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UI/@EntryIndexedValue\">UI</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Constants/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=EnumMember/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Interfaces/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"I\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=LocalConstants/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Locals/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=MethodPropertyEvent/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Other/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Parameters/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateConstants/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticReadonly/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PublicFields/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=StaticReadonly/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=TypeParameters/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"T\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=TypesAndNamespaces/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=15b5b1f1_002D457c_002D4ca6_002Db278_002D5615aedc07d3/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Static\" AccessRightKinds=\"Private\" Description=\"Static readonly fields (private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"READONLY_FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=236f7aa5_002D7b06_002D43ca_002Dbf2a_002D9b31bfcff09a/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Private\" Description=\"Constant fields (private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"CONSTANT_FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=2c62818f_002D621b_002D4425_002Dadc9_002D78611099bfcb/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Type parameters\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"TYPE_PARAMETER\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"T\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=4a98fdf6_002D7d98_002D4f5a_002Dafeb_002Dea44ad98c70c/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Instance\" AccessRightKinds=\"Private\" Description=\"Instance fields (private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"FIELD\" /&gt;&lt;Kind Name=\"READONLY_FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=53eecf85_002Dd821_002D40e8_002Dac97_002Dfdb734542b84/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Instance\" AccessRightKinds=\"Protected, ProtectedInternal, Internal, Public, PrivateProtected\" Description=\"Instance fields (not private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"FIELD\" /&gt;&lt;Kind Name=\"READONLY_FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=61a991a4_002Dd0a3_002D4d19_002D90a5_002Df8f4d75c30c1/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Local variables\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"LOCAL_VARIABLE\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=669e5282_002Dfb4b_002D4e90_002D91e7_002D07d269d04b60/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Protected, ProtectedInternal, Internal, Public, PrivateProtected\" Description=\"Constant fields (not private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"CONSTANT_FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=70345118_002D4b40_002D4ece_002D937c_002Dbbeb7a0b2e70/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Static\" AccessRightKinds=\"Protected, ProtectedInternal, Internal, Public, PrivateProtected\" Description=\"Static fields (not private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=8a85b61a_002D1024_002D4f87_002Db9ef_002D1fdae19930a1/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Parameters\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"PARAMETER\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=8b8504e3_002Df0be_002D4c14_002D9103_002Dc732f2bddc15/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Enum members\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"ENUM_MEMBER\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=a0b4bc4d_002Dd13b_002D4a37_002Db37e_002Dc9c6864e4302/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Types and namespaces\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"NAMESPACE\" /&gt;&lt;Kind Name=\"CLASS\" /&gt;&lt;Kind Name=\"STRUCT\" /&gt;&lt;Kind Name=\"ENUM\" /&gt;&lt;Kind Name=\"DELEGATE\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=a4f433b8_002Dabcd_002D4e55_002Da08f_002D82e78cef0f0c/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Local constants\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"LOCAL_CONSTANT\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=a7a3339e_002D4e89_002D4319_002D9735_002Da9dc4cb74cc7/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Any\" AccessRightKinds=\"Any\" Description=\"Interfaces\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"INTERFACE\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"I\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=c873eafb_002Dd57f_002D481d_002D8c93_002D77f6863c2f88/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Static\" AccessRightKinds=\"Protected, ProtectedInternal, Internal, Public, PrivateProtected\" Description=\"Static readonly fields (not private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"READONLY_FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"AaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue\">&lt;Policy&gt;&lt;Descriptor Staticness=\"Static\" AccessRightKinds=\"Private\" Description=\"Static fields (private)\"&gt;&lt;ElementKinds&gt;&lt;Kind Name=\"FIELD\" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect=\"True\" WarnAboutPrefixesAndSuffixes=\"False\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;&lt;/Policy&gt;</s:String>\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FFIELD/@EntryIndexedValue\">&lt;Policy Inspect=\"True\" Prefix=\"\" Suffix=\"\" Style=\"aaBb\" /&gt;</s:String>\n\t<s:Boolean x:Key=\"/Default/Environment/Editor/QuickInfo/EnableQuickInfo/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsCodeFormatterSettingsUpgrader/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsParsFormattingSettingsUpgrader/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsWrapperSettingsUpgrader/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EUnitTestFramework_002EMigrations_002EEnableDisabledProvidersMigration/@EntryIndexedValue\">True</s:Boolean>\n\t\n\t\n\t<s:Boolean x:Key=\"/Default/Environment/UnitTesting/SeparateAppDomainPerAssembly/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/Environment/UnitTesting/ShadowCopy/@EntryValue\">False</s:Boolean>\n\t<s:String x:Key=\"/Default/FilterSettingsManager/AttributeFilterXml/@EntryValue\">&lt;data /&gt;</s:String>\n\t<s:String x:Key=\"/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue\">&lt;data&gt;&lt;IncludeFilters /&gt;&lt;ExcludeFilters /&gt;&lt;/data&gt;</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=32F5B2BD4CFE0E42ADE73B7FB68EBDD0/Entry/=4C84A7D189E28A43AA2631BBE4694112/@KeyIndexDefined\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=32F5B2BD4CFE0E42ADE73B7FB68EBDD0/Entry/=4C84A7D189E28A43AA2631BBE4694112/EntryName/@EntryValue\">tag</s:String>\n\t<s:Int64 x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=32F5B2BD4CFE0E42ADE73B7FB68EBDD0/Entry/=4C84A7D189E28A43AA2631BBE4694112/Position/@EntryValue\">10</s:Int64>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=32F5B2BD4CFE0E42ADE73B7FB68EBDD0/Entry/=A4284AC46CC5F44FB8DB9B563AE61B01/@KeyIndexDefined\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=5CF342079CE151478A11D345C1816DD0/Entry/=4C84A7D189E28A43AA2631BBE4694112/@KeyIndexDefined\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=5CF342079CE151478A11D345C1816DD0/Entry/=A4284AC46CC5F44FB8DB9B563AE61B01/@KeyIndexDefined\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=5CF342079CE151478A11D345C1816DD0/Entry/=A4284AC46CC5F44FB8DB9B563AE61B01/EntryName/@EntryValue\">using</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/QuickList/=82514885B0EC3D43B7B61C37BCFD0BA4/Entry/=2B4F6F494E484D4AB67AEBC47828B983/@KeyIndexDefined\">False</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/@KeyIndexDefined\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Applicability/=Live/@EntryIndexedValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Description/@EntryValue\">Creates a new interactivity behaviors block in XAML.</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Reformat/@EntryValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Shortcut/@EntryValue\">behaviors</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/ShortenQualifiedReferences/@EntryValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Text/@EntryValue\">&lt;interactivity:Interaction.Behaviors&gt;&#xD;\n&lt;/interactivity:Interaction.Behaviors&gt;</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Scope/=AD41E18405A7FF4682F040638EE2663C/@KeyIndexDefined\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=312ABB1802610E4CAF8FDF8AED01AC01/Scope/=AD41E18405A7FF4682F040638EE2663C/Type/@EntryValue\">InXmlFile</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/@KeyIndexDefined\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Applicability/=Live/@EntryIndexedValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Categories/=Imported_00202013_002D06_002D19/@EntryIndexedValue\">Imported 2013-06-19</s:String>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Description/@EntryValue\">Creates a Rhino Mocks mock.</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Field/=FIELD/@KeyIndexDefined\">True</s:Boolean>\n\t<s:Int64 x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Field/=FIELD/Order/@EntryValue\">0</s:Int64>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Field/=INTERFACE/@KeyIndexDefined\">True</s:Boolean>\n\t<s:Int64 x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Field/=INTERFACE/Order/@EntryValue\">1</s:Int64>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Reformat/@EntryValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Scope/=CF7C2F2066E462418ABD91975B64021C/@KeyIndexDefined\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Scope/=CF7C2F2066E462418ABD91975B64021C/CustomProperties/=mask/@EntryIndexedValue\">*Test.cs</s:String>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Scope/=CF7C2F2066E462418ABD91975B64021C/Type/@EntryValue\">InFileWithMask</s:String>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Shortcut/@EntryValue\">mock</s:String>\n\t<s:Boolean x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/ShortenQualifiedReferences/@EntryValue\">True</s:Boolean>\n\t<s:String x:Key=\"/Default/PatternsAndTemplates/LiveTemplates/Template/=A9A0CC3540FBAA41A26223D5BE7478F6/Text/@EntryValue\">$FIELD$ = MockRepository.GenerateMock&lt;$INTERFACE$&gt;();</s:String>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=Activable/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=Avalonia/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=Multiselect/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=Mvvm/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=Unregister/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=Unregisters/@EntryIndexedValue\">True</s:Boolean>\n\t</wpf:ResourceDictionary>"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">\n    <br>\n    <img src=\"https://raw.githubusercontent.com/FantasticFiasco/mvvm-dialogs/master/doc/resources/Icon_200x200.png\" alt=\"MVVM Dialogs\" width=\"200\">\n    <br>\n    MVVM Dialogs\n    <br>\n</h1>\n\n<h4 align=\"center\">Library simplifying the concept of opening dialogs from a view model when using MVVM</h4>\n<h6 align=\"center\">Cross-platform solution derived from <a href=\"https://github.com/FantasticFiasco/mvvm-dialogs\">FantasticFiasco/mvvm-dialogs</a></h6>\n\n<p>\n\n</p>\n\nUI Frameworks currently supported:\n- WPF <a href=\"https://www.nuget.org/packages/HanumanInstitute.MvvmDialogs.Wpf/\"><img src=\"https://img.shields.io/nuget/v/HanumanInstitute.MvvmDialogs.Wpf.svg\"></a> (Windows Presentation Foundation)\n- [Avalonia](https://avaloniaui.net/) <a href=\"https://www.nuget.org/packages/HanumanInstitute.MvvmDialogs.Avalonia/\"><img src=\"https://img.shields.io/nuget/v/HanumanInstitute.MvvmDialogs.Avalonia.svg\"></a> (mature cross-platform UI framework with WPF-like syntax, including mobile/browser support)\n\nUI Frameworks that can easily be added through community efforts:\n- WinUI 3 (promising Android/iOS support but won't support Linux)\n- Blazor (full app in web browser)\n- UWP (Universal Windows Platform, this thing is dead)\n\n## Table of contents\n\n- [Introduction](#introduction)\n- [Generic Usage](#generic-usage)\n- [WPF Usage](#wpf-usage)\n- [Avalonia Usage](#avalonia-usage)\n- [StrongViewLocator](#strongviewlocator)\n- [Framework Dialogs](#framework-dialogs)\n- [Cross-Platform File Access](#cross-platform-file-access)\n- [IModalDialogViewModel / ICloseable / IActivable](#imodaldialogviewmodel--icloseable--iactivable)\n- [IViewLoaded / IViewClosing / IViewClosed](#iviewloaded--iviewclosing--iviewclosed)\n- [Custom Windows](#custom-windows)\n- [Custom Framework Dialogs](#custom-framework-dialogs)\n- [Unit Testing](#unit-testing)\n- [Logging](#logging)\n- [Thread Safety](#thread-safety)\n- [Differences from FantasticFiasco/mvvm-dialogs](#differences-from-fantasticfiascomvvm-dialogs)\n- [Contributions Are Welcomed](#contributions-are-welcomed)\n---\n\n## Introduction\n\nMVVM Dialogs is a library simplifying the concept of opening dialogs from a view model when using MVVM. It enables the developer to easily write unit tests for view models in the same manner unit tests are written for other classes.\n\nThe library has built in support for the following dialogs:\n\n- Modal window\n- Non-modal window\n- Message box\n- Open file dialog\n- Save file dialog\n- Open folder dialog\n\nv2 adds supports for 'magic' mobile navigation with the same API.\n\n[Here's a tutorial for building modern cross-platform applications.](https://github.com/mysteryx93/Modern.Net-Tutorial)\n\n## Generic Usage\n\nThe interface `IDialogService` provides a platform-agnostic way of managing dialogs:\n\n```c#\nusing HanumanInstitute.MvvmDialogs\n\npublic class ModalDialogTabContentViewModel : INotifyPropertyChanged\n{\n    private readonly IDialogService dialogService;\n\n    public ModalDialogTabContentViewModel(IDialogService dialogService)\n    {\n        this.dialogService = dialogService;\n    }\n\n    ...\n\n    private async Task ShowDialogAsync()\n    {\n        var dialogViewModel = dialogService.CreateViewModel<AddTextDialogViewModel>();\n\n        bool? success = await dialogService.ShowDialogAsync(this, dialogViewModel);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text);\n        }\n    }\n}\n```\n\nThe recommended way of accessing your dialogs is to create a `DialogExtensions` class containing strongly-typed access to all your dialogs.\n\n```c#\npublic static class DialogExtensions\n{\n    public static async Task<PresetItem?> ShowLoadPresetViewAsync(this IDialogService dialog, INotifyPropertyChanged ownerViewModel)\n    {\n        dialog.CheckNotNull(nameof(dialog)); // using HanumanInstitute.Validators\n\n        var viewModel = dialog.CreateViewModel<SelectPresetViewModel>();\n        viewModel.Load(false);\n        var result = await dialog.ShowDialogAsync(ownerViewModel, viewModel).ConfigureAwait(true);\n        return result == true ? viewModel.SelectedItem : null;\n    }\n\n    public static async Task<string?> ShowSavePresetViewAsync(this IDialogService dialog, INotifyPropertyChanged ownerViewModel)\n    {\n        dialog.CheckNotNull(nameof(dialog));\n\n        var viewModel = dialog.CreateViewModel<SelectPresetViewModel>();\n        viewModel.Load(true);\n        var result = await dialog.ShowDialogAsync(ownerViewModel, viewModel).ConfigureAwait(true);\n        return result == true ? viewModel.PresetName : null;\n    }\n}\n```\n\nTo make your code testable, use `IDialogService.CreateViewModel<T>` to create your dialog view models. It will call `viewModelFactory` function that you set in `DialogService` constructor.\n\nThen the usage is super *sexy*! (a long way from ReactiveUI [Interactions](https://www.reactiveui.net/docs/handbook/interactions/)...)\n\n```c#\nprivate async Task<string?> SavePreset()\n{\n    var presetName = await dialogService.ShowSavePresetViewAsync(this);\n    if (presetName != null) { ... }\n    return presetName;\n}\n```\n\nMeanwhile...\n- You can use IDialogService within class libraries that have no reference to Avalonia nor Wpf (referencing only `HanumanInstitute.MvvmDialogs`)\n- It is friendly for unit tests\n\n### XAML Registrations\n\nXAML registrations are no longer required as of v1.1 and these lines must be removed.\n\n    md:DialogServiceViews.IsRegistered=\"True\"\n\n## WPF Usage\n\nAdd a reference to `HanumanInstitute.MvvmDialogs.Wpf`\n\nDialogService must be registered in the DependencyInjection container of your choice. Note that IDialogService is defined in `HanumanInstitute.MvvmDialogs` and DialogService is defined in `HanumanInstitute.MvvmDialogs.Wpf`.\n\nTo customize ViewModels to Views naming convention, in the constructor, you must pass a ViewLocator.\n\n```c#\npublic partial class App\n{\n    // Registering in CommunityToolkit.Mvvm\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(viewLocator: new ViewLocator()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n    }\n}\n```\n\nTo associate view models with views, the default naming convention is to replace \"ViewModel\" with \"View\".\n\nTo specify your own convention, create `ViewLocator.cs` with this, inheriting from [ViewLocatorBase](src/MvvmDialogs.Wpf/ViewLocatorBase.cs). You can also use the `StrongViewLocator` to avoid using reflection. Alternatively, you can create your custom class that inherits `IViewLocator`.\n\n```c#\nusing HanumanInstitute.MvvmDialogs.Wpf;\nnamespace MyDemoApp;\n\n/// <summary>\n/// Maps view models to views.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"View\");\n}\n```\n\n`IDialogService` exposes platform-agnostic async methods. For WPF (only), sync methods\nare also available. If you plan to ever use the ViewModel with a different UI framework,\nit is recommended to use the async methods.\n\n```c#\n    private bool? ShowDialog()\n    {\n        var dialogViewModel = dialogService.CreateViewModel<AddTextDialogViewModel>();\n        return dialogService.ShowDialog(this, dialogViewModel); // Sync\n    }\n}\n```\n\n### AppDialogSettings\nWhen creating DialogService, you can pass AppDialogSettings with application-wide settings.\n\n\n#### bool MessageBoxRightToLeft\n\nGets or sets whether message boxes are displayed right-to-left (RightAlign+RtlReading).\n\n#### bool MessageBoxDefaultDesktopOnly\n\nGets or sets whether to display on the default desktop of the interactive window station. Specifies that the message box is displayed from a .NET Windows Service application in order to notify the user of an event.\n\n#### bool MessageBoxServiceNotification\n\nGets or sets whether to display on the currently active desktop even if a user is not logged on to the computer. Specifies that the message box is displayed from a .NET Windows Service application in order to notify the user of an event.\n\n#### bool AllowConcurrentDialogs\n\nGets or sets whether multiple dialogs can be shown at the same time.\nIf false (default), it will wait for the previous dialog to close before showing the next one.\n\n\n## Avalonia Usage\n\nAdd a reference to `HanumanInstitute.MvvmDialogs.Avalonia`\n\nDialogService must be registered in the DependencyInjection container of your choice. Note that IDialogService is defined in `HanumanInstitute.MvvmDialogs` and DialogService is defined in `HanumanInstitute.MvvmDialogs.Wpf`.\n\nIn the constructor, you must pass the ViewLocator from the Avalonia project template.\n\n```c#\npublic class App : Application\n{\n    // Registering in ReactiveUI/Splat\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                dialogFactory: new DialogFactory().AddMessageBox()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<CurrentTimeDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n```\n\nTo associate view models with views, the default naming convention (as of v2) is to replace folder \"ViewModels\" with \"Views\", and then change suffix from \"ViewModel\" to \"Window\" for desktop mode and \"View\" for mobile/navigation mode. Very often, Window simply contains the View.\n\nTo specify your own convention, replace `ViewLocator.cs` with this, inheriting from [ViewLocatorBase](src/MvvmDialogs.Avalonia/ViewLocatorBase.cs). You can also use the `StrongViewLocator` to avoid using reflection. Alternatively, you can create your custom class that inherits `IDataTemplate` (for Avalonia), `IViewLocator` and `IViewLocatorNavigation` (for MvvmDialogs). You can use `UseSinglePageNavigation` to know whether the app is running in desktop or navigation mode.\n\n```c#\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nnamespace MyDemoApp;\n\n/// <summary>\n/// Maps view models to views.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n```\n\n### AppDialogSettings\n\n#### bool AllowConcurrentDialogs\n\nGets or sets whether multiple dialogs can be shown at the same time.\nIf false (default), it will wait for the previous dialog to close before showing the next one.\n\n### Mobile/Web Applications\n\nAvalonia11 supports Android, iOS and Web Assembly. To support it, MvvmDialogs v2 went through considerable structural changes that resulted in very minor API changes.\n\nFor mobile devices and web browsers, the application is composed of a single root view, and you navigate between views. You can also force this mode on desktop by setting `viewLocator: new ViewLocatorBase() { ForceSinglePageNavigation = true }` in the `DialogManager` constructor.\n\nThe philosophy is this. We maintain a navigation history of view models only, and a weak cache of views. Views can be garbage collected and recreated when needed from the view models. You get the same navigation functionalities as a desktop app, but in a navigation mode. All the magic is done automatically, which means that your view model doesn't need to know whether it runs on mobile or desktop, and can support both modes.\n\nMobile back button is also supported automatically.\n\n### Avalonia.MessageBox\n\nAvalonia has no built-in support for message boxes. This extension handles message box requests\nusing [MessageBox.Avalonia](https://github.com/AvaloniaCommunity/MessageBox.Avalonia) library. `Mode=Window` only supports desktop mode. `Mode=Popup` is cross-platform.\n\n1. Add a reference to `HanumanInstitute.MvvmDialogs.Avalonia.MessageBox`\n2. Register the MessageBox handler on IDialogService like this:\n \n```c#\nnew DialogService(new DialogManager(dialogFactory: \n    new DialogFactory().AddMessageBox(MessageBoxMode.Popup)))\n```\n\n### Avalonia.Fluent\n\n[FluentAvalonia](https://github.com/amwx/FluentAvalonia/) brings more of Fluent design and WinUI controls into Avalonia.\n\n1. Add a reference to `HanumanInstitute.MvvmDialogs.Avalonia.Fluent`\n2. Register the handlers on IDialogService like this:\n\n```c#\nnew DialogService(new DialogManager(dialogFactory: \n    new DialogFactory().AddFluent(FluentMessageBoxType.ContentDialog)))\n```\n\nIt will add `IDialogService.ShowContentDialogAsync` and `IDialogService.ShowTaskDialogAsync`.\n\nAdditionally, `AddFluent` takes a parameter specifying whether to handle `IDialogService.ShowMessageBoxAsync` calls with ContentDialog or with TaskDialog. \n\n\n### Avalonia.AuraUI\n\nThis extension handles message box requests using [Aura.UI](https://github.com/PieroCastillo/Aura.UI) library.\n\n1. Add a reference to `HanumanInstitute.MvvmDialogs.Avalonia.AuraUI`\n2. Register the MessageBox handler on IDialogService like this:\n\n```c#\nnew DialogService(new DialogManager(dialogFactory: \n    new DialogFactory().AddMessageBoxAuraUI()))\n```\n\nNote: Aura.UI does not yet support Avalonia11 and is thus only available for MvvmDialogs v1.4.1\n\n### Avalonia.DialogHost\n\n[DialogHost.Avalonia](https://github.com/AvaloniaUtils/DialogHost.Avalonia) allows displaying views as popup overlays. FluentAvalonia brings WinUI3's ContentDialog that has title, content and button. On the other hand, DialogHost purely shows your view while giving you full control.\n\n1. Add a reference to `HanumanInstitute.MvvmDialogs.Avalonia.DialogHost`\n2. Register the handlers on IDialogService like this:\n\n```c#\nnew DialogService(new DialogManager(dialogFactory: \n    new DialogFactory().AddDialogHost()))\n```\n\nIt will add `IDialogService.ShowDialogHostAsync` that takes the following settings.\n\n**ContentViewModel**: The view model of the view to show. The view will be resolved through Avalonia's ViewLocator.\n\n**ClosingHandler**: A handler that will be called when the view is closing, allowing to cancel the close.\n\n**CloseOnClickAway**: Whether to close the view when clicking elsewhere in the parent container.\n\n**CloseOnClickAwayParameter**: The close value to set when closing by clicking away.\n\n**PopupPositioner**: A class allowing to customize the positioning of the dialog.\n\nYou can then create extension methods for your views like this\n\n```c#\npublic static async Task<string?> AskTextAsync(this IDialogService service, \n    INotifyPropertyChanged ownerViewModel, AppDialogSettingsBase? appSettings = null)\n{\n    if (ownerViewModel == null) throw new ArgumentNullException(nameof(ownerViewModel));\n\n    var vm = service.CreateViewModel<TextBoxViewModel>();\n    var settings = new DialogHostSettings()\n    {\n        ContentViewModel = vm,\n        CloseOnClickAway = true\n    };\n    return (string?)await service.ShowDialogHostAsync(ownerViewModel, settings, appSettings);\n}\n```\n\n[See sample project here](https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs/tree/master/samples/Avalonia/Demo.DialogHost)\n\n## StrongViewLocator\n\nInstead of resolving views via reflection and naming conventions, you can also configure ViewModel-View pairs manually using the `StrongViewLocator`.\n\nThis will be necessary if you want to use Assembly Trimming, otherwise it will trim your View classes for a lack of hard references.\n\nCreate your View Locator like this, then pass it to your Dialog Manager as explained above.\n\n```c#\npublic class ViewLocator : StrongViewLocator\n{\n    public ViewLocator()\n    {\n        Register<MainViewModel, MainView, MainWindow>()\n        Register<CurrentTimeViewModel, CurrentTimeView, CurrentTimeWindow>()\n        Register<ConfirmCloseViewModel, ConfirmCloseView, ConfirmCloseWindow>();\n    }\n}\n```\n\n## Framework Dialogs\n\n`IDialogService` provides the following standard framework dialog methods:\n\n- `bool? ShowMessageBoxAsync`\n- `IDialogStorageFile? ShowOpenFileDialogAsync`\n- `IDialogStorageFile? ShowSaveFileDialogAsync`\n- `IDialogStorageFolder? ShowOpenFolderDialogAsync`\n- `IReadOnlyList<IDialogStorageFile> ShowOpenFilesDialogAsync`\n- `IReadOnlyList<IDialogStorageFolder> ShowOpenFoldersDialogAsync`\n\nAs of v2, files and folders are returned as `IDialogStorageFile` and `IDialogStorageFolder` instead of `string`. To get the path as a string like before (on desktop), simply add `.LocalPath`. Note that mobile and web have different path formats. \n\nFor extra dialog options, see Custom Framework Dialogs section. \n\n## Cross-Platform File Access\n\nTo access files and folders across desktop, mobile and web, `IDialogStorageFile` and `IDialogStorageFolder` provide various standard methods. Instead of having direct access to files, you'll often use URIs, relative paths and bookmarks.\n\nThey copy Avalonia's `IStorageFile` and `IStorageFolder` [documented here](https://docs.avaloniaui.net/docs/concepts/services/storage-provider/storage-item). The reasons to copy those interfaces are to allow you to write platform-agnostic code, and to have consistency between WPF and Avalonia. \n\nAvalonia provides various methods in `IStorageProvider` to get `IStorageFile` and `IStorageFolder` instances, as [documented here](https://docs.avaloniaui.net/docs/concepts/services/storage-provider/). You can convert them to the `MvvmDialogs` interface using the `ToDialog()` extension method.\n\nHere's a example of a service that returns the Documents folder.\n\n```c#\npublic class StorageService : IStorageService\n{\n    protected virtual IStorageProvider Storage => _storage ??= GetTopLevel()?.StorageProvider ?? throw new NullReferenceException(\"No StorageProvider found.\");\n    private IStorageProvider? _storage;\n    \n    public async Task<IDialogStorageFolder?> GetDocumentsFolderAsync()\n    {\n        var result = await Storage.TryGetWellKnownFolderAsync(WellKnownFolder.Documents);\n        return result?.ToDialog();\n    }\n\n    private TopLevel? GetTopLevel()\n    {\n        if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            return desktop.MainWindow;\n        }\n        if (Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime viewApp)\n        {\n            var visualRoot = viewApp.MainView?.GetVisualRoot();\n            return visualRoot as TopLevel;\n        }\n        return null;\n    }\n}\n```\nUsing your `StorageService` class, you can show a SaveDialog with default location set to Documents.\n```c#\nvar _storage = new StorageService();\n\nvar settings = new SaveFileDialogSettings\n{\n    SuggestedStartLocation = await _storage.GetDocumentsFolderAsync()\n};\nvar file = await _dialogService.ShowSaveFileDialogAsync(this, settings);\n```\n\nOn desktop platforms, you can convert a file path to `IDialogStorageFile` using either `HanumanInstitute.MvvmDialogs.FileSystem.DesktopDialogStorageFile` or `Avalonia.Platform.Storage.FileIO.BclStorageFile` which are nearly the same.\n\n`DesktopDialogStorageFile` has these differences: it accepts a string path in the constructor instead of only a `FileInfo`, it is of type `IDialogStorageFile` instead of `IStorageFile`, and it is available in non-Avalonia projects. `IDesktopDialogStorageFactory` is also available for easier unit test mocking. \n\n## IModalDialogViewModel / ICloseable / IActivable\n\nAll dialog ViewModels must implement `IModalDialogViewModel` to set `DialogResult` with the result of the dialog.\n\nIn your ViewModel, implement `ICloseable` to add `RequestClose` event which will automatically close the View when raised.\n\nIn your ViewModel, implement `IActivable` to add `RequestActivate` event which will automatically activate the View when raised.\n\n## IViewLoaded / IViewClosing / IViewClosed\n\nHandling Loading, Closing and Closed events presents a few annoyances.\n\nLoading is a common business concern. Why would you have to write code in your View for it?\n\nClosing is generally used to display a confirmation before exit. Calling async code from the Closing event would require complex code, both in the ViewModel and the View.\n\nClosed cannot even call a command via an XAML behavior! Yet you need it to unregister some events to avoid memory leaks.\n\nAs a simple solution, you can implement `IViewLoaded`, `IViewClosing` and/or `IViewClosed` from your ViewModel with no code required in your View.\n\n**IViewLoaded**  \n`void OnLoaded();` Called when the view is loaded.\n\n**IViewClosed**  \n`void RaiseClosed();` Called when the view is closed.\n\n**IViewClosing**  \n`void RaiseClosing(CancelEventArgs e);` Called when closing the view.  \n`Task OnClosingAsync(CancelEventArgs e);` Called if `e.Cancel` has been set to True in `OnClosing`\n\nSetting `e.Cancel = true` in `OnClosing` will...\n\n1. Cancel the close\n2. Call OnClosingAsync\n3. Setting `e.Cancel = false` in `OnClosingAsync` will close the view\n\nSee [Wpf/Demo.ViewEvents](samples/Wpf/Demo.ViewEvents/MainWindowViewModel.cs) for a sample implementation.\n\n**IMPORTANT**: To use these added features in your main ViewModel, your main window must be initialized via `IDialogService`.\n\nInitializing your main window in WPF in `App.xaml.cs`\n\n```c#\nprotected override void OnStartup(StartupEventArgs e)\n{\n    // ...\n    var dialogService = Ioc.Default.GetRequiredService<IDialogService>();\n    var vm = dialogService.CreateViewModel<MainWindowViewModel>();\n    dialogService.Show(null, vm);\n    Application.Current.MainWindow = Application.Current.Windows[0];\n}\n```\n\nInitializing your main window in Avalonia in `App.axaml.cs`\n\n```c#\npublic override void OnFrameworkInitializationCompleted()\n{\n    GC.KeepAlive(typeof(DialogService));\n    DialogService.Show(null, MainWindow);\n    base.OnFrameworkInitializationCompleted();\n}\n\npublic static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\npublic static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n```\n\n## Custom Windows\n\nTo display custom dialogs that are not of type `Window` or `ContentDialog`,\nyour dialog class must implement [IView](src/MvvmDialogs/IView.cs)\n([sample](samples/Wpf/Demo.ModalCustomDialog/AddTextCustomDialog.cs)).\nThe usage will be the same as a standard `Window`.\n\n## Custom Framework Dialogs\n\nThis part is the most different from the FantasticFiasco version and will require some work to port. The implementation further changed as of v1.3 to be simpler and more modular.\n\nFirst, create a custom DialogFactory like this. Note that you can create entirely new methods by adding new settings types.\n\nFor new methods, you can customize the return type, but to override standard methods, you must specify the expected return type.\n\n```c#\npublic class CustomDialogFactory : DialogFactoryBase\n{\n    public CustomDialogFactory(IDialogFactory? chain = null)\n        : base(chain)\n    {\n    }\n\n    public override async Task<object?> ShowDialogAsync<TSettings>(WindowWrapper owner, TSettings settings, AppDialogSettings appSettings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => await ShowOpenFolderDialogAsync(owner, s, appSettings),\n            _ => base.ShowDialogAsync(owner, settings, appSettings)\n        };\n\n    private async Task<string?> ShowOpenFolderDialogAsync(WindowWrapper owner, OpenFolderDialogSettings settings, AppDialogSettings appSettings) =>\n        \"Action here\";\n}\n```\n\nSecond, create an extension method to facilitate registration of the new Dialog Factory.\n\n```c#\npublic static class DialogFactoryExtensions\n{\n    public static IDialogFactory AddCustomOpenFolder(this IDialogFactory factory) => new CustomDialogFactory(factory);\n}\n```\n\nThird, you must register DialogFactory when creating the DialogService. You can form a chain of DialogFactory \nwhere each instance handles some types and passes unhandled requests to the next DialogFactory in the chain. \nThe extension method facilitates the creation of such chain. In this example, our new class handles OpenFolder, \nand all other requests fallback to the default implementation.\n\n```c#\nnew DialogService(dialogManager: new DialogManager(\n    dialogFactory: new DialogFactory().AddCustomOpenFolder()))\n```\n\nFinally, if you're creating a new method, you must create a new extension method on `IDialogService`\n\n```c#\nnamespace HanumanInstitute.MvvmDialogs;\n\npublic static class Extensions\n{\n    public static Task<TaskDialogButton> ShowTaskMessageBoxAsync(\n        this IDialogService service, INotifyPropertyChanged ownerViewModel,\n        string text, string title = \"\")\n    {\n        var settings = new TaskMessageBoxSettings(text, title);\n        return ShowTaskMessageBoxAsync(service, ownerViewModel, settings);\n    }\n\n    public static Task<TaskDialogButton> ShowTaskMessageBoxAsync(this IDialogService service,\n        INotifyPropertyChanged ownerViewModel, TaskMessageBoxSettings? settings = null)\n    {\n        if (ownerViewModel == null) throw new ArgumentNullException(nameof(ownerViewModel));\n\n        DialogLogger.Write($\"TASK Caption: {settings?.Title}; Message: {settings?.Text}\");\n\n        return service.DialogManager.ShowFrameworkDialogAsync<MessageBoxSettings, TaskDialogButton>(\n            ownerViewModel, settings ?? new MessageBoxSettings());\n    }\n}\n```\n\n[Sample demo here](samples/Wpf/Demo.CustomMessageBox/)\n\n[MvvmDialogs.Avalonia.MessageBox is an example of custom implementation](src/MvvmDialogs.Avalonia.MessageBox)\n\nYou could create a class library providing a new set of `IDialogService` methods.\n\n### RunUiAsync\n\nThere is a useful extension method in `HanumanInstitute.MvvmDialogs.Wpf` and `HanumanInstitute.MvvmDialogs.Avalonia` to run a synchronous UI method as an async method:\n\n```c#\nUiExtensions.RunUiAsync(func)\n```\n\n\n## Unit Testing\n\nTo unit-test your project, mock [IDialogManager](src/MvvmDialogs/DialogTypeLocators/IDialogManager.cs). All UI interactions pass through `DialogManager`.\n\nPass your mock when creating your `DialogService`.\n\n```c#\n// Using Moq\nvar dialogManagerMock = new Mock<IDialogManager>();\nnew DialogService(dialogManager: dialogManagerMock.Object);\n```\n\nFrom here you can configure your mock to validate calls to `Show`, `ShowDialogAsync` and `ShowFrameworkDialogAsync`.\n\nOne problem you may face with unit testing dialogs is with the creation of your view model if it has dependencies.\n\nIn the `DialogService` constructor, pass `viewModelFactory`\n\n    new DialogService(viewModelFactory: x => Locator.Current.GetService(x))\n\nCreate your view model instances using `IDialogService.CreateViewModel<T>`\n\n    var vm = dialogService.CreateViewModel<MyDialogViewModel>();\n\n*This* can easily be mocked. [Here's a sample unit test](samples/Avalonia/Demo.ModalDialog.Tests/MainWindowViewModelTests.cs)\n\n## Logging\n\nTo enable logging, create a `DialogManager` and pass an `ILogger<DialogManager>` to its constructor.\n\n```c#\nvar loggerFactory = LoggerFactory.Create(builder => builder.AddDebug());\nvar dialogService = new DialogService(\n    new DialogManager(logger: loggerFactory.CreateLogger<DialogManager>()));\n```\n\n## Thread Safety\n\nAll methods to show windows and dialogs are thread-safe and can be called from background threads.\n\n`IDialogService.Activate` and `IDialogService.Close` are NOT thread-safe and must be called from the UI thread.\n\n## Differences from FantasticFiasco/mvvm-dialogs\n\nIt is very easy to port an application from `FantasticFiasco/mvvm-dialogs` to `HanumanInstitute.MvvmDialogs`, yet there are also differences due to the fact that this library's API is framework-agnostic.\n\nThe internal code structure is completely different, while the public API remains mostly compatible.\n\nHere are the differences:\n- Namespace changed from `MvvmDialogs` to `HanumanInstitute.MvvmDialogs`\n- Platform-specific code is in separate Wpf/Avalonia assembly\n- XAML registration is no longer required\n- All dialogs are shown using async methods. For WPF (only), sync methods remain available for compatibility.\n- Custom dialogs are treated the same way as standard dialogs\n- ICloseable / IActivable allow easily closing and activating the View from the ViewModel.\n- Framework dialogs use framework-agnostic settings classes.\n- There is no longer a separate namespace for each framework dialog.\n- Framework dialog methods return the selected value instead of bool.\n- FolderBrowserDialog has been renamed to OpenFolderDialog.\n- Factory classes are implemented differently.\n- Default naming convention, for `ViewModels/MainViewModel`, FantasticFiasco looks for `Views/Main`. This version looks for `Views/MainView`.\n- Maps view models to views using Avalonia's ViewLocator design that is easily customizable.\n- Logging is done using standard ILogging interface\n- Supports view navigation on mobile devices with Avalonia! \n\n## Contributions Are Welcomed\n\nTODO:\n- Implement for WinUI 3 (I'll leave this task to someone who is going to use it)\n- Implement for UWP (this thing is dead... not worth implementing IMO)\n- Implement for Blazor?\n- Ensure that non-visible views can be released from memory\n- Adapt this [StaticViewLocatorGenerator](https://github.com/zkSNACKs/WalletWasabi/blob/1b8d142d0ec6892f13f6c50c3fec5d7ceb7f06ce/WalletWasabi.Fluent.Generators/StaticViewLocatorGenerator.cs#L12) ([usage here](https://github.com/zkSNACKs/WalletWasabi/blob/1b8d142d0ec6892f13f6c50c3fec5d7ceb7f06ce/WalletWasabi.Fluent/ViewLocator.cs#L7))\n  to replace the default naming convention ViewLocator with Source Generator instead of Reflection\n\n### Author\n\nBrought to you by [Etienne Charland aka Hanuman](https://www.spiritualselftransformation.com/). Made by a Lightworker in his spare time.\n"
  },
  {
    "path": "deletebin.sh",
    "content": "#!/bin/bash\n\nfind . -type d -name bin -prune -exec rm -rf {} \\;\nfind . -type d -name obj -prune -exec rm -rf {} \\;\n"
  },
  {
    "path": "nuget.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <!--To inherit the global NuGet package sources remove the <clear/> line below -->\n    <clear />\n    <add key=\"nuget\" value=\"https://api.nuget.org/v3/index.json\" />\n  </packageSources>\n</configuration>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/.gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Mono auto generated files\nmono_crash.*\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\n[Ww][Ii][Nn]32/\n[Aa][Rr][Mm]/\n[Aa][Rr][Mm]64/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n[Ll]ogs/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUnit\n*.VisualState.xml\nTestResult.xml\nnunit-*.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n# Tye\n.tye/\n\n# ASP.NET Scaffolding\nScaffoldingReadMe.txt\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_h.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*_wpftmp.csproj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Coverlet is a free, cross platform Code Coverage Tool\ncoverage*.json\ncoverage*.xml\ncoverage*.info\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# NuGet Symbol Packages\n*.snupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n*.appxbundle\n*.appxupload\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!?*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk\n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n*- [Bb]ackup.rdl\n*- [Bb]ackup ([0-9]).rdl\n*- [Bb]ackup ([0-9][0-9]).rdl\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# CodeRush personal settings\n.cr/personal\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output\nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder\n.mfractor/\n\n# Local History for Visual Studio\n.localhistory/\n\n# BeatPulse healthcheck temp database\nhealthchecksdb\n\n# Backup folder for Package Reference Convert tool in Visual Studio 2017\nMigrationBackup/\n\n# Ionide (cross platform F# VS Code tools) working folder\n.ionide/\n\n# Fody - auto-generated XML schema\nFodyWeavers.xsd\n\n##\n## Visual studio for Mac\n##\n\n\n# globs\nMakefile.in\n*.userprefs\n*.usertasks\nconfig.make\nconfig.status\naclocal.m4\ninstall-sh\nautom4te.cache/\n*.tar.gz\ntarballs/\ntest-results/\n\n# Mac bundle stuff\n*.dmg\n*.app\n\n# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore\n# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore\n# Windows thumbnail cache files\nThumbs.db\nehthumbs.db\nehthumbs_vista.db\n\n# Dump file\n*.stackdump\n\n# Folder config file\n[Dd]esktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msix\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n##\n## Visual Studio Code\n##\n.vscode/*\n!.vscode/settings.json\n!.vscode/tasks.json\n!.vscode/launch.json\n!.vscode/extensions.json\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.CrossPlatform\"\n             xmlns:crossPlatform=\"clr-namespace:Demo.CrossPlatform\"\n             xmlns:styling=\"clr-namespace:FluentAvalonia.Styling;assembly=FluentAvalonia\"\n             x:Class=\"Demo.CrossPlatform.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <styling:FluentAvaloniaTheme />\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/App.axaml.cs",
    "content": "﻿using Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing Demo.CrossPlatform.Services;\nusing Demo.CrossPlatform.ViewModels;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.CrossPlatform;\n\npublic partial class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddFluent(messageBoxType: FluentMessageBoxType.ContentDialog)),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainViewModel>();\n        SplatRegistrations.Register<CurrentTimeViewModel>();\n        SplatRegistrations.Register<ConfirmCloseViewModel>();\n        SplatRegistrations.Register<IStorageService, StorageService>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        DialogService.Show(null, MainViewModel);\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainViewModel MainViewModel => Locator.Current.GetService<MainViewModel>()!;\n    public static CurrentTimeViewModel CurrentTimeViewModel => Locator.Current.GetService<CurrentTimeViewModel>()!;\n    public static ConfirmCloseViewModel ConfirmCloseViewModel => Locator.Current.GetService<ConfirmCloseViewModel>()!;\n    private static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n    public static StrongViewLocator ViewLocator { get; private set; } = default!;\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Business/StreamExtensions.cs",
    "content": "﻿using System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Demo.CrossPlatform.Business;\n\npublic static class StreamExtensions\n{\n    public static async Task CopyToAsync(this Stream source, Stream destination, IProgress<long> progress, CancellationToken cancellationToken = default(CancellationToken), int bufferSize = 0x1000)\n    {\n        var buffer = new byte[bufferSize];\n        int bytesRead;\n        long totalRead = 0;\n        while ((bytesRead = await source.ReadAsync(buffer, 0, buffer.Length, cancellationToken)) > 0)\n        {\n            await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken);\n            cancellationToken.ThrowIfCancellationRequested();\n            totalRead += bytesRead;\n            //Thread.Sleep(10);\n            progress.Report(totalRead);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Business/SynchronousProgress.cs",
    "content": "﻿namespace Demo.CrossPlatform.Business;\n\npublic sealed class SynchronousProgress<T>(Action<T> callback) : IProgress<T>\n{\n    void IProgress<T>.Report(T data) => callback(data);\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Demo.CrossPlatform.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>latest</LangVersion>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <AvaloniaResource Include=\"Assets\\**\" />\n    <TrimmerRootDescriptor Include=\"Roots.xml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <PackageReference Include=\"ReactiveUI.SourceGenerators\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\..\\src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\..\\src\\MvvmDialogs\\MvvmDialogs.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"Views\\ConfirmCloseView.axaml.cs\">\n      <DependentUpon>ConfirmCloseView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\ConfirmCloseWindow.axaml.cs\">\n      <DependentUpon>ConfirmCloseWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/FodyWeavers.xml",
    "content": "﻿<Weavers xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"FodyWeavers.xsd\">\n  <ReactiveUI />\n</Weavers>"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/GlobalUsings.cs",
    "content": "﻿global using System;\nglobal using Avalonia;\nglobal using RxCommandUnit = ReactiveUI.ReactiveCommand<System.Reactive.Unit, System.Reactive.Unit>;\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Roots.xml",
    "content": "﻿<linker>\n  <!-- Can be removed if CompiledBinding and no reflection are used -->\n  <assembly fullname=\"Avalonia11\" preserve=\"All\" />\n  <assembly fullname=\"Avalonia.Themes.Fluent\" preserve=\"All\" />\n</linker>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Services/IStorageService.cs",
    "content": "﻿using System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace Demo.CrossPlatform.Services;\n\npublic interface IStorageService\n{\n    Task<IDialogStorageFolder?> GetDownloadsFolderAsync();\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Services/StorageService.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Avalonia.Controls;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Platform.Storage;\nusing Avalonia.VisualTree;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace Demo.CrossPlatform.Services;\n\npublic class StorageService : IStorageService\n{\n    protected virtual IStorageProvider Storage => _storage ??= GetTopLevel(Application.Current)?.StorageProvider ?? throw new NullReferenceException(\"No StorageProvider found.\");\n    private IStorageProvider? _storage;\n\n    public async Task<IDialogStorageFolder?> GetDownloadsFolderAsync()\n    {\n        var result = await Storage.TryGetWellKnownFolderAsync(WellKnownFolder.Downloads);\n        return result?.ToDialog();\n    }\n\n    /// <summary>\n    /// Returns the TopLevel from the main window or view. \n    /// </summary>\n    /// <param name=\"app\">The application to get the TopLevel for.</param>\n    /// <returns>A TopLevel object.</returns>\n    private TopLevel? GetTopLevel(Application? app)\n    {\n        if (app?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            return desktop.MainWindow;\n        }\n        if (app?.ApplicationLifetime is ISingleViewApplicationLifetime viewApp)\n        {\n            return TopLevel.GetTopLevel(viewApp.MainView);\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/ViewLocator.cs",
    "content": "using Demo.CrossPlatform.ViewModels;\nusing Demo.CrossPlatform.Views;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.CrossPlatform;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : StrongViewLocator\n{\n    public ViewLocator()\n    {\n        ForceSinglePageNavigation = false;\n        Register<MainViewModel, MainView, MainWindow>();\n        Register<CurrentTimeViewModel, CurrentTimeView, CurrentTimeWindow>();\n        Register<ConfirmCloseViewModel, ConfirmCloseView, ConfirmCloseWindow>();\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/ViewModels/ConfirmCloseViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.CrossPlatform.ViewModels;\n\npublic partial class ConfirmCloseViewModel : ViewModelBase, IModalDialogViewModel, IViewClosing, IViewLoaded, ICloseable\n{\n    private readonly IDialogService _dialogService;\n    public event EventHandler? RequestClose;\n    public bool? DialogResult => true;\n\n    public ConfirmCloseViewModel(IDialogService dialogService)\n    {\n        _dialogService = dialogService;\n        Close = ReactiveCommand.Create(CloseImpl);\n    }\n\n    [Reactive]\n    public partial string Text { get; set; } = string.Empty;\n\n    public RxCommandUnit Close { get; }\n\n    public void OnLoaded()\n    {\n        Text = \"This dialog requires close confirmation.\";\n    }\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        e.Cancel = true;\n    }\n\n    private void CloseImpl()\n    {\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n\n    public async Task OnClosingAsync(CancelEventArgs e)\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(this, \"Do you want to close it?\", \"Confirmation\", MessageBoxButton.YesNo);\n        e.Cancel = result == false;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/ViewModels/CurrentTimeViewModel.cs",
    "content": "﻿using System.Reactive.Linq;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.CrossPlatform.ViewModels;\n\npublic class CurrentTimeViewModel : ViewModelBase, IModalDialogViewModel, ICloseable, IViewClosed\n{\n    public CurrentTimeViewModel()\n    {\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe(\n            (_) =>\n            {\n                this.RaisePropertyChanged(nameof(CurrentTime));\n            });\n        Close = ReactiveCommand.Create(CloseImpl);\n    }\n\n    public DateTime CurrentTime => DateTime.Now;\n\n    public bool? DialogResult { get; } = true;\n    public event EventHandler? RequestClose;\n    public event EventHandler? Closed;\n\n    public RxCommandUnit Close { get; }\n\n    private void CloseImpl()\n    {\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n\n    public void OnClosed() => Closed?.Invoke(this, EventArgs.Empty);\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/ViewModels/MainViewModel.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing System.Reactive.Linq;\nusing System.Threading.Tasks;\nusing Demo.CrossPlatform.Services;\nusing Demo.CrossPlatform.Business;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.CrossPlatform.ViewModels;\n\npublic partial class MainViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    private readonly IStorageService _storage;\n\n    public MainViewModel(IDialogService dialogService, IStorageService storage)\n    {\n        this._dialogService = dialogService;\n        this._storage = storage;\n\n        var canShow = this.WhenAnyValue(x => x.DialogViewModel).Select(x => x == null);\n        Show = ReactiveCommand.Create(ShowImpl, canShow);\n        var canActivate = this.WhenAnyValue(x => x.DialogViewModel).Select(x => x != null);\n        Activate = ReactiveCommand.Create(ActivateImpl, canActivate);\n        Close = ReactiveCommand.Create(CloseImpl, canActivate);\n        ShowDialog = ReactiveCommand.CreateFromTask(ShowDialogImplAsync);\n        DialogConfirmClose = ReactiveCommand.CreateFromTask(DialogConfirmCloseImplAsync);\n        OpenFile = ReactiveCommand.CreateFromTask(OpenFileImplAsync);\n        OpenFiles = ReactiveCommand.CreateFromTask(OpenFilesImplAsync);\n        OpenFolder = ReactiveCommand.CreateFromTask(OpenFolderImplAsync);\n        OpenFolders = ReactiveCommand.CreateFromTask(OpenFoldersImplAsync);\n        SaveFile = ReactiveCommand.CreateFromTask(SaveFileImplAsync);\n        MessageBox = ReactiveCommand.CreateFromTask(MessageBoxImplAsync);\n        MessageBoxMultiple = ReactiveCommand.CreateFromTask(MessageBoxMultipleImplAsync);\n    }\n\n    [Reactive]\n    public partial string? Output { get; set; }\n\n    private CurrentTimeViewModel? _dialogViewModel;\n    protected CurrentTimeViewModel? DialogViewModel\n    {\n        get => _dialogViewModel;\n        set\n        {\n            if (DialogViewModel != null)\n            {\n                DialogViewModel.Closed -= Dialog_ViewClosed;\n            }\n            this.RaiseAndSetIfChanged(ref _dialogViewModel, value);\n            if (DialogViewModel != null)\n            {\n                DialogViewModel.Closed += Dialog_ViewClosed;\n            }\n        }\n    }\n\n    private void Dialog_ViewClosed(object? sender, EventArgs e) => DialogViewModel = null;\n\n    public RxCommandUnit Show { get; }\n    public RxCommandUnit ShowDialog { get; }\n    public RxCommandUnit Close { get; }\n    public RxCommandUnit Activate { get; }\n    public RxCommandUnit DialogConfirmClose { get; }\n    public RxCommandUnit OpenFile { get; }\n    public RxCommandUnit OpenFiles { get; }\n    public RxCommandUnit OpenFolder { get; }\n    public RxCommandUnit OpenFolders { get; }\n    public RxCommandUnit SaveFile { get; }\n    public RxCommandUnit MessageBox { get; }\n    public RxCommandUnit MessageBoxMultiple { get; }\n\n    private void ShowImpl()\n    {\n        DialogViewModel = _dialogService.CreateViewModel<CurrentTimeViewModel>();\n        _dialogService.Show(this, DialogViewModel);\n    }\n\n    private void ActivateImpl() => _dialogService.Activate(DialogViewModel!);\n\n    private void CloseImpl()\n    {\n        _dialogService.Close(DialogViewModel!);\n        DialogViewModel = null;\n    }\n\n    private async Task ShowDialogImplAsync()\n    {\n        var vm = _dialogService.CreateViewModel<CurrentTimeViewModel>();\n        await _dialogService.ShowDialogAsync(this, vm);\n    }\n\n    private async Task DialogConfirmCloseImplAsync()\n    {\n        var vm = _dialogService.CreateViewModel<ConfirmCloseViewModel>();\n        await _dialogService.ShowDialogAsync(this, vm);\n    }\n\n    private async Task OpenFileImplAsync()\n    {\n        var settings = new OpenFileDialogSettings\n        {\n            SuggestedStartLocation = await _storage.GetDownloadsFolderAsync()\n        };\n        var file = await _dialogService.ShowOpenFileDialogAsync(this, settings);\n        Output = file?.Path + Environment.NewLine;\n        if (file?.Path != null)\n        {\n            await ScanFileProgressAsync(file);\n        }\n    }\n\n    private async Task ScanFileProgressAsync(IDialogStorageFile file)\n    {\n        using var stream = file.OpenReadAsync();\n        Output += \"File opened.\" + Environment.NewLine;\n        var outputHeader = string.Empty;\n        long length = 0;\n\n        IProgress<long> progress = new SynchronousProgress<long>(value =>\n        {\n            Output = outputHeader + ((float)value / length).ToString(\"P1\") + Environment.NewLine;\n        });\n\n        await stream.ContinueWith(\n            async t =>\n            {\n                using var ms = new MemoryStream();\n                var streamResult = stream.Result;\n                length = streamResult.Length;\n                Output += \"Result size: \" + streamResult.Length + \" starting copy to memory\" + Environment.NewLine;\n                outputHeader = Output;\n                await streamResult.CopyToAsync(ms, progress, default, 1024);\n                Output += \"Done\" + Environment.NewLine;\n                ms.Position = 0;\n            });\n    }\n\n    private async Task OpenFilesImplAsync()\n    {\n        var settings = new OpenFileDialogSettings\n        {\n            SuggestedStartLocation = await _storage.GetDownloadsFolderAsync()\n        };\n        var files = await _dialogService.ShowOpenFilesDialogAsync(this, settings);\n        Output = string.Join(Environment.NewLine, files.Select(x => x?.Path?.ToString() ?? \"\"));\n    }\n\n    private async Task OpenFolderImplAsync()\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            SuggestedStartLocation = await _storage.GetDownloadsFolderAsync()\n        };\n        var folder = await _dialogService.ShowOpenFolderDialogAsync(this, settings);\n        Output = folder?.Path?.ToString();\n    }\n\n    private async Task OpenFoldersImplAsync()\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            SuggestedStartLocation = await _storage.GetDownloadsFolderAsync()\n        };\n        var folders = await _dialogService.ShowOpenFoldersDialogAsync(this, settings);\n        Output = string.Join(Environment.NewLine, folders.Select(x => x?.Path?.ToString() ?? \"\"));\n    }\n\n    private async Task SaveFileImplAsync()\n    {\n        var settings = new SaveFileDialogSettings\n        {\n            SuggestedStartLocation = await _storage.GetDownloadsFolderAsync()\n        };\n        var file = await _dialogService.ShowSaveFileDialogAsync(this, settings);\n        Output = file?.Path?.ToString();\n    }\n\n    private async Task MessageBoxImplAsync()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(this, \"Do you want it?\", \"Question\", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);\n        Output = result.ToString();\n    }\n\n    private async Task MessageBoxMultipleImplAsync()\n    {\n        var t1 = _dialogService.ShowMessageBoxAsync(this, \"First message box\", \"Go\", MessageBoxButton.YesNo, MessageBoxImage.Exclamation).ConfigureAwait(false);\n        await Task.Delay(1000).ConfigureAwait(false);\n        var t2 = _dialogService.ShowMessageBoxAsync(this, \"Second message box\", \"Again\", MessageBoxButton.YesNo, MessageBoxImage.Exclamation).ConfigureAwait(false);\n        await Task.Delay(1000).ConfigureAwait(false);\n        var t3 = _dialogService.ShowMessageBoxAsync(this, \"Third message box\", \"Once More!\", MessageBoxButton.YesNo, MessageBoxImage.Exclamation).ConfigureAwait(false);\n        var r1 = await t1;\n        var r2 = await t2;\n        var r3 = await t3;\n        Output = r1 + Environment.NewLine + r2 + Environment.NewLine + r3;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/ViewModels/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.CrossPlatform.ViewModels;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/ConfirmCloseView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             x:Class=\"Demo.CrossPlatform.Views.ConfirmCloseView\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:viewmodels=\"using:Demo.CrossPlatform.ViewModels\"\n             xmlns:local=\"clr-namespace:Demo.CrossPlatform\"\n             mc:Ignorable=\"d\"\n             d:DataContext=\"{x:Static local:App.ConfirmCloseViewModel}\" x:DataType=\"viewmodels:ConfirmCloseViewModel\">\n    <Grid>\n        <TextBlock HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                   Text=\"{Binding Text}\" />\n        <Button Content=\"Close\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Command=\"{Binding Close}\" />\n    </Grid>\n</UserControl>"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/ConfirmCloseView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.CrossPlatform.Views;\n\npublic partial class ConfirmCloseView : UserControl\n{\n    public ConfirmCloseView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/ConfirmCloseWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:views=\"clr-namespace:Demo.CrossPlatform.Views\"\n        mc:Ignorable=\"d\" \n        x:Class=\"Demo.CrossPlatform.Views.ConfirmCloseWindow\"\n        Title=\"Current Time\"\n        WindowStartupLocation=\"CenterOwner\"\n        Width=\"400\" Height=\"300\" CanResize=\"False\">\n    <views:ConfirmCloseView />\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/ConfirmCloseWindow.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.CrossPlatform.Views;\n\npublic partial class ConfirmCloseWindow : Window\n{\n    public ConfirmCloseWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/CurrentTimeView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             x:Class=\"Demo.CrossPlatform.Views.CurrentTimeView\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:local=\"clr-namespace:Demo.CrossPlatform\" xmlns:viewmodels=\"using:Demo.CrossPlatform.ViewModels\"\n             mc:Ignorable=\"d\"\n             d:DataContext=\"{x:Static local:App.CurrentTimeViewModel}\" x:DataType=\"viewmodels:CurrentTimeViewModel\">\n    <Grid>\n        <TextBlock HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                   Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n        <Button Content=\"Close\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Right\" Command=\"{Binding Close}\" />\n    </Grid>\n</UserControl>"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/CurrentTimeView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.CrossPlatform.Views;\n\npublic partial class CurrentTimeView : UserControl\n{\n    public CurrentTimeView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/CurrentTimeWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:views=\"clr-namespace:Demo.CrossPlatform.Views\"\n        mc:Ignorable=\"d\" \n        x:Class=\"Demo.CrossPlatform.Views.CurrentTimeWindow\"\n        Title=\"Current Time\"\n        WindowStartupLocation=\"CenterOwner\"\n        Width=\"200\"\n        Height=\"100\"\n        CanResize=\"False\">\n    <views:CurrentTimeView />\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/CurrentTimeWindow.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.CrossPlatform.Views;\n\npublic partial class CurrentTimeWindow : Window\n{\n    public CurrentTimeWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/MainView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:viewModels=\"clr-namespace:Demo.CrossPlatform.ViewModels\"\n             xmlns:local=\"clr-namespace:Demo.CrossPlatform\" xmlns:viewmodels=\"using:Demo.CrossPlatform.ViewModels\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"500\" d:DesignHeight=\"450\"\n             x:Class=\"Demo.CrossPlatform.Views.MainView\"\n             d:DataContext=\"{x:Static local:App.MainViewModel}\" x:DataType=\"viewmodels:MainViewModel\">\n\n    <Grid ColumnDefinitions=\"250,*\">\n        <ScrollViewer HorizontalScrollBarVisibility=\"Hidden\">\n            <StackPanel Orientation=\"Vertical\">\n                <StackPanel.Styles>\n                    <Style Selector=\"Button\">\n                        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n                        <Setter Property=\"Height\" Value=\"40\" />\n                    </Style>\n                </StackPanel.Styles>\n                <Button Content=\"Show\" Command=\"{Binding Show}\" />\n                <Button Content=\"Activate\" Command=\"{Binding Activate}\" />\n                <Button Content=\"Close\" Command=\"{Binding Close}\" />\n                <Button Content=\"Show Dialog\" Command=\"{Binding ShowDialog}\" />\n                <Button Content=\"Dialog Confirm Close\" Command=\"{Binding DialogConfirmClose}\" />\n                <Button Content=\"Open File\" Command=\"{Binding OpenFile}\" />\n                <Button Content=\"Open Files\" Command=\"{Binding OpenFiles}\" />\n                <Button Content=\"Open Folder\" Command=\"{Binding OpenFolder}\" />\n                <Button Content=\"Open Folders\" Command=\"{Binding OpenFolders}\" />\n                <Button Content=\"Save File\" Command=\"{Binding SaveFile}\" />\n                <Button Content=\"MessageBox\" Command=\"{Binding MessageBox}\" />\n                <Button Content=\"3 Message Boxes\" Command=\"{Binding MessageBoxMultiple}\" />\n            </StackPanel>\n        </ScrollViewer>\n        <TextBlock Grid.Column=\"1\" Text=\"{Binding Output}\" />\n    </Grid>\n</UserControl>"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/MainView.axaml.cs",
    "content": "using Avalonia.Controls;\n\nnamespace Demo.CrossPlatform.Views;\n\npublic partial class MainView : UserControl\n{\n    public MainView()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/MainWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:views=\"clr-namespace:Demo.CrossPlatform.Views\"\n        xmlns:views1=\"clr-namespace:Demo.CrossPlatform.Views\"\n        mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\" Width=\"500\" Height=\"400\"\n        x:Class=\"Demo.CrossPlatform.Views.MainWindow\"\n        Icon=\"/Assets/avalonia-logo.ico\"\n        Title=\"Avalonia11\">\n        <views1:MainView />\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform/Views/MainWindow.axaml.cs",
    "content": "using Avalonia.Controls;\n\nnamespace Demo.CrossPlatform.Views;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Android/Demo.CrossPlatform.Android.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net10.0-android36.0</TargetFramework>\n    <SupportedOSPlatformVersion>23.0</SupportedOSPlatformVersion>\n    <Nullable>enable</Nullable>\n    <ApplicationId>com.CompanyName.Avalonia11</ApplicationId>\n    <ApplicationVersion>1</ApplicationVersion>\n    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>\n    <AndroidPackageFormat>apk</AndroidPackageFormat>\n    <AndroidEnableProfiledAot>False</AndroidEnableProfiledAot>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <AndroidResource Include=\"Icon.png\">\n      <Link>Resources\\drawable\\Icon.png</Link>\n    </AndroidResource>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia.Android\"/>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Demo.CrossPlatform\\Demo.CrossPlatform.csproj\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Android/MainActivity.cs",
    "content": "﻿using System;\nusing Android.App;\nusing Android.Content.PM;\nusing Android.Runtime;\nusing Avalonia;\nusing Avalonia.Android;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.CrossPlatform.Android;\n\n[Application]\npublic class MainApplication : AvaloniaAndroidApplication<App>\n{\n    protected MainApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)\n    {\n    }\n    protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)\n    {\n        return base.CustomizeAppBuilder(builder)\n            .UseReactiveUI(rxui => { });\n    }\n}\n\n[Activity(\n    Label = \"Avalonia12.Android\",\n    Theme = \"@style/MyTheme.NoActionBar\",\n    Icon = \"@drawable/icon\",\n    MainLauncher = true,\n    ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]\npublic class MainActivity : AvaloniaMainActivity\n{\n\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Android/Properties/AndroidManifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" android:installLocation=\"auto\">\n\t<uses-permission android:name=\"android.permission.INTERNET\" />\n\t<application android:label=\"Avalonia11\" android:icon=\"@drawable/Icon\" />\n</manifest>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Android/Resources/drawable/splash_screen.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n  <item>\n    <color android:color=\"@color/splash_background\"/>\n  </item>\n\n  <item android:drawable=\"@drawable/icon\"\n        android:width=\"120dp\"\n        android:height=\"120dp\"\n        android:gravity=\"center\" />\n\n</layer-list>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Android/Resources/values/colors.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n  <color name=\"splash_background\">#FFFFFF</color>\n</resources>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Android/Resources/values/styles.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<resources>\n\n  <style name=\"MyTheme\">\n  </style>\n\n  <style name=\"MyTheme.NoActionBar\" parent=\"@style/Theme.AppCompat.NoActionBar\">\n    <item name=\"android:windowActionBar\">false</item>\n    <item name=\"android:windowNoTitle\">true</item>\n  </style>\n\n  <style name=\"MyTheme.Splash\" parent =\"MyTheme.NoActionBar\">\n    <item name=\"android:windowBackground\">@drawable/splash_screen</item>\n    <item name=\"android:windowContentOverlay\">@null</item>\n  </style>\n\n</resources>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/AppBundle/app.css",
    "content": "﻿/* HTML styles for the splash screen */\n\n.highlight {\n    color: white;\n    font-size: 2.5rem;\n    display: block;\n}\n\n.purple {\n    color: #8b44ac;\n}\n\n.icon {\n    opacity: 0.05;\n    height: 35%;\n    width: 35%;\n    position: absolute;\n    background-repeat: no-repeat;\n    right: 0px;\n    bottom: 0px;\n    margin-right: 3%;\n    margin-bottom: 5%;\n    z-index: 5000;\n    background-position: right bottom;\n    pointer-events: none;\n}\n\n#avalonia-splash a {\n    color: whitesmoke;\n    text-decoration: none;\n}\n\n.center {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    height: 100vh;\n}\n\n#avalonia-splash {\n    position: relative;\n    height: 100%;\n    width: 100%;\n    color: whitesmoke;\n    background: #1b2a4e;\n    font-family: 'Nunito', sans-serif;\n    background-position: center;\n    background-size: cover;\n    background-repeat: no-repeat;\n    justify-content: center;\n    align-items: center;\n}\n\n.splash-close {\n    animation: fadeout 0.25s linear forwards;\n}\n\n@keyframes fadeout {\n    0% {\n        opacity: 100%;\n    }\n\n    100% {\n        opacity: 0;\n        visibility: collapse;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/AppBundle/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <title>Avalonia11.Web</title>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <base href=\"/\" />\n    <link rel=\"modulepreload\" href=\"./main.js\" />\n    <link rel=\"modulepreload\" href=\"./_framework/dotnet.js\" />\n    <link rel=\"modulepreload\" href=\"./_framework/avalonia.js\" />\n    <link rel=\"stylesheet\" href=\"./app.css\" />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n</head>\n\n<body style=\"margin: 0px; overflow: hidden\">\n    <div id=\"out\">\n        <div id=\"avalonia-splash\">\n            <div class=\"center\">\n                <h2 class=\"purple\">\n                    Powered by\n                    <a class=\"highlight\" href=\"https://www.avaloniaui.net/\" target=\"_blank\">Avalonia UI</a>\n                </h2>\n            </div>\n            <img class=\"icon\" src=\"Logo.svg\" alt=\"Avalonia Logo\" />\n        </div>\n    </div>\n    <script type='module' src=\"./main.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/AppBundle/main.js",
    "content": "import { dotnet } from './_framework/dotnet.js'\n\nconst is_browser = typeof window != \"undefined\";\nif (!is_browser) throw new Error(`Expected to be running in a browser`);\n\nconst dotnetRuntime = await dotnet\n    .withDiagnosticTracing(false)\n    .withApplicationArgumentsFromQuery()\n    .create();\n\nconst config = dotnetRuntime.getConfig();\n\nawait dotnetRuntime.runMain(config.mainAssemblyName, [window.location.search]);\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/Demo.CrossPlatform.Browser.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>\n    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>\n    <WasmMainJSPath>AppBundle\\main.js</WasmMainJSPath>\n    <OutputType>Exe</OutputType>\n    <RootNamespace>Demo.CrossPlatform.Web</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <WasmExtraFilesToDeploy Include=\"AppBundle\\**\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Demo.CrossPlatform\\Demo.CrossPlatform.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia.Browser\"/>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/Program.cs",
    "content": "﻿using System.Runtime.Versioning;\nusing System.Threading.Tasks;\nusing Avalonia;\nusing Avalonia.Browser;\nusing ReactiveUI.Avalonia;\nusing Demo.CrossPlatform;\n\n[assembly: SupportedOSPlatform(\"browser\")]\n\ninternal partial class Program\n{\n    private static async Task Main(string[] args) => await BuildAvaloniaApp()\n        .UseReactiveUI(rxui => { })\n        .StartBrowserAppAsync(\"out\");\n\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>();\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/Properties/launchSettings.json",
    "content": "{\n  \"profiles\": {\n    \"Avalonia11.Browser\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"inspectUri\": \"{wsProtocol}://{url.hostname}:{url.port}/debug?browser={browserInspectUri}\"\n    }\n  }\n}"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Browser/runtimeconfig.template.json",
    "content": "{\n  \"wasmHostProperties\": {\n    \"perHostConfig\": [\n      {\n        \"name\": \"browser\",\n        \"html-path\": \"index.html\",\n        \"Host\": \"browser\",\n      }\n    ]\n  }\n}"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Desktop/Demo.CrossPlatform.Desktop.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <!--If you are willing to use Windows/MacOS native APIs you will need to create 3 projects.\n    One for Windows with net10.0-windows TFM, one for MacOS with net7.0-macos and one with net7.0 TFM for Linux.-->\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <BuiltInComInteropSupport>true</BuiltInComInteropSupport>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Demo.CrossPlatform\\Demo.CrossPlatform.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Desktop/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.CrossPlatform.Desktop;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.Desktop/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <!-- This manifest is used on Windows only.\n       Don't remove it as it might cause problems with window transparency and embeded controls.\n       For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->\n  <assemblyIdentity version=\"1.0.0.0\" name=\"Avalonia11.Desktop\"/>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on\n           and is designed to work with. Uncomment the appropriate elements\n           and Windows will automatically select the most compatible environment. -->\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n    </application>\n  </compatibility>\n</assembly>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.iOS/AppDelegate.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.iOS;\nusing Foundation;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.CrossPlatform.iOS;\n\n// The UIApplicationDelegate for the application. This class is responsible for launching the \n// User Interface of the application, as well as listening (and optionally responding) to \n// application events from iOS.\n[Register(\"AppDelegate\")]\npublic partial class AppDelegate : AvaloniaAppDelegate<App>\n{\n    protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)\n    {\n        return builder.UseReactiveUI(rxgui => { });\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.iOS/Demo.CrossPlatform.iOS.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net10.0-ios26.0</TargetFramework>\n    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>\n    <ProvisioningType>manual</ProvisioningType>\n    <Nullable>enable</Nullable>\n    <RuntimeIdentifier>iossimulator-x64</RuntimeIdentifier>\n\n    <!-- These properties need to be set in order to run on a real iDevice -->\n    <!--<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>-->\n    <!--<CodesignKey></CodesignKey>-->\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia.iOS\"/>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Demo.CrossPlatform\\Demo.CrossPlatform.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.iOS/Entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.iOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDisplayName</key>\n\t<string>Avalonia11</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>companyName.Avalonia11</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>MinimumOSVersion</key>\n\t<string>10.0</string>\n\t<key>UIDeviceFamily</key>\n\t<array>\n\t\t<integer>1</integer>\n\t\t<integer>2</integer>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIStatusBarHidden</key>\n\t<true/>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.iOS/Main.cs",
    "content": "﻿using UIKit;\n\nnamespace Demo.CrossPlatform.iOS;\n\npublic class Application\n{\n    // This is the main entry point of the application.\n    static void Main(string[] args)\n    {\n        // if you want to use a different Application Delegate class from \"AppDelegate\"\n        // you can specify it here.\n        UIApplication.Main(args, null, typeof(AppDelegate));\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.iOS/Resources/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6214\" systemVersion=\"14A314h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n\t<dependencies>\n\t\t<plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6207\" />\n\t\t<capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\" />\n\t</dependencies>\n\t<objects>\n\t\t<placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" />\n\t\t<placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\" />\n\t\t<view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n\t\t\t<rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\" />\n\t\t\t<autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\" />\n\t\t\t<subviews>\n\t\t\t\t<label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2022 \" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\"\n\t\t\t\t\tminimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n\t\t\t\t\t<rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\" />\n\t\t\t\t\t<fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\" />\n\t\t\t\t\t<color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\" />\n\t\t\t\t\t<nil key=\"highlightedColor\" />\n\t\t\t\t</label>\n\t\t\t\t<label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Avalonia11\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\"\n\t\t\t\t\tminimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n\t\t\t\t\t<rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\" />\n\t\t\t\t\t<fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\" />\n\t\t\t\t\t<color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\" />\n\t\t\t\t\t<nil key=\"highlightedColor\" />\n\t\t\t\t</label>\n\t\t\t</subviews>\n\t\t\t<color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\" />\n\t\t\t<constraints>\n\t\t\t\t<constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\" />\n\t\t\t\t<constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\" />\n\t\t\t\t<constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\" />\n\t\t\t\t<constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\" />\n\t\t\t\t<constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\" />\n\t\t\t\t<constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\" />\n\t\t\t</constraints>\n\t\t\t<nil key=\"simulatedStatusBarMetrics\" />\n\t\t\t<freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\" />\n\t\t\t<point key=\"canvasLocation\" x=\"548\" y=\"455\" />\n\t\t</view>\n\t</objects>\n</document>\n"
  },
  {
    "path": "samples/Avalonia/CrossPlatform/Demo.CrossPlatform.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.3.32811.315\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Avalonia11\", \"Avalonia11\\Avalonia11.csproj\", \"{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Avalonia11.Desktop\", \"Avalonia11.Desktop\\Avalonia11.Desktop.csproj\", \"{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Avalonia11.Web\", \"Avalonia11.Web\\Avalonia11.Web.csproj\", \"{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Avalonia11.iOS\", \"Avalonia11.iOS\\Avalonia11.iOS.csproj\", \"{EBD9022F-BC83-4846-9A11-6F7F3772DC64}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Avalonia11.Android\", \"Avalonia11.Android\\Avalonia11.Android.csproj\", \"{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{3DA99C4E-89E3-4049-9C22-0A7EC60D83D8}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tDirectory.Build.props = Directory.Build.props\n\t\tglobal.json = global.json\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EBD9022F-BC83-4846-9A11-6F7F3772DC64}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7AD1DAC8-7FBE-49D5-8614-7321233DB82E}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {83CB65B8-011F-4ED7-BCD3-A6CFA935EF7E}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:activateNonModalDialog=\"clr-namespace:Demo.Avalonia.ActivateNonModalDialog\"\n             x:Class=\"Demo.Avalonia.ActivateNonModalDialog.App\">\n    <Application.DataTemplates>\n        <activateNonModalDialog:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic class App : Application\n{\n    public static IServiceProvider ServiceProvider { get; private set; } = null!;\n\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var services = new ServiceCollection();\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        services.AddSingleton<IDialogService>(sp => new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: sp.GetService));\n\n        services.AddSingleton<MainWindowViewModel>(sp => new MainWindowViewModel(sp.GetService<IDialogService>()!));\n        services.AddSingleton<CurrentTimeDialogViewModel>();\n\n        ServiceProvider = services.BuildServiceProvider();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => ServiceProvider.GetService<MainWindowViewModel>()!;\n    public static CurrentTimeDialogViewModel CurrentTimeDialog => ServiceProvider.GetService<CurrentTimeDialogViewModel>()!;\n    public static IDialogService DialogService => ServiceProvider.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/CurrentTimeDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.ActivateNonModalDialog.CurrentTimeDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:i=\"http://schemas.microsoft.com/xaml/behaviors\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ActivateNonModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    Width=\"200\"\n    Height=\"100\"\n    CanResize=\"False\"\n    d:DataContext=\"{x:Static local:App.CurrentTimeDialog}\" x:DataType=\"local:CurrentTimeDialogViewModel\">\n\n    <TextBlock HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n               Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/CurrentTimeDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic partial class CurrentTimeDialog : Window\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/CurrentTimeDialogViewModel.cs",
    "content": "using System;\nusing System.Threading;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic class CurrentTimeDialogViewModel : ViewModelBase\n{\n    public DateTime CurrentTime => DateTime.Now;\n    private Timer _timer;\n\n    public CurrentTimeDialogViewModel()\n    {\n        _timer = new Timer(_ => OnPropertyChanged(nameof(CurrentTime)), null, TimeSpan.Zero, TimeSpan.FromSeconds(1));\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/Demo.ActivateNonModalDialog.MvvmToolkit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.ActivateNonModalDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.ActivateNonModalDialog</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.ActivateNonModalDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ActivateNonModalDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Activate Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <UniformGrid Rows=\"2\">\n        <Button\n                Command=\"{Binding ShowCommand}\">\n            <TextBlock Text=\"Show current time\" />\n        </Button>\n        <Button\n                Command=\"{Binding ActivateCommand}\">\n            <TextBlock Text=\"Activate dialog showing current time\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/MainWindowViewModel.cs",
    "content": "using System.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    private INotifyPropertyChanged? _dialogViewModel;\n    public INotifyPropertyChanged? DialogViewModel\n    {\n        get => _dialogViewModel;\n        set\n        {\n            if (SetProperty(ref _dialogViewModel, value))\n            {\n                ShowCommand.NotifyCanExecuteChanged();\n                ActivateCommand.NotifyCanExecuteChanged();\n            }\n        }\n    }\n\n    public RelayCommand ShowCommand { get; }\n    public RelayCommand ActivateCommand { get; }\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowCommand = new RelayCommand(Show, () => DialogViewModel == null);\n        ActivateCommand = new RelayCommand(Activate, () => DialogViewModel != null);\n    }\n\n    public void Show()\n    {\n        DialogViewModel = _dialogService.CreateViewModel<CurrentTimeDialogViewModel>();\n        _dialogService.Show(this, DialogViewModel);\n    }\n\n    public void Activate() => _dialogService.Activate(DialogViewModel!);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/Program.cs",
    "content": "using System;\nusing Avalonia;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic class Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace();\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ActivateNonModalDialog.MvvmToolkit/ViewModelBase.cs",
    "content": "using CommunityToolkit.Mvvm.ComponentModel;\n\nnamespace Demo.Avalonia.ActivateNonModalDialog;\n\npublic class ViewModelBase : ObservableObject\n{\n}"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.CloseNonModalDialog\"\n             x:Class=\"Demo.Avalonia.CloseNonModalDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<CurrentTimeDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            desktop.MainWindow = new MainWindow\n            {\n                DataContext = MainWindow\n            };\n        }\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static CurrentTimeDialogViewModel CurrentTimeDialog => Locator.Current.GetService<CurrentTimeDialogViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/CurrentTimeDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.CloseNonModalDialog.CurrentTimeDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:i=\"http://schemas.microsoft.com/xaml/behaviors\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.CloseNonModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    Width=\"200\"\n    Height=\"100\"\n    CanResize=\"False\"\n    d:DataContext=\"{x:Static local:App.CurrentTimeDialog}\"\n    x:DataType=\"local:CurrentTimeDialogViewModel\">\n\n    <Grid>\n        <TextBlock HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n               Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/CurrentTimeDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\npublic partial class CurrentTimeDialog : Window\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/CurrentTimeDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Reactive.Linq;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\npublic class CurrentTimeDialogViewModel : ViewModelBase\n{\n    public DateTime CurrentTime => DateTime.Now;\n\n    public CurrentTimeDialogViewModel() =>\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe((_) =>\n        {\n            this.RaisePropertyChanged(nameof(CurrentTime));\n        });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/Demo.CloseNonModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.CloseNonModalDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.CloseNonModalDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.CloseNonModalDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.CloseNonModalDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Activate Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <UniformGrid Rows=\"2\">\n        <Button\n                Command=\"{Binding ShowCommand}\">\n            <TextBlock Text=\"Show current time\" />\n        </Button>\n        <Button\n                Command=\"{Binding CloseCommand}\">\n            <TextBlock Text=\"Close dialog showing current time\" />\n        </Button>\n    </UniformGrid>\n</Window>"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/MainWindowViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Reactive.Linq;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    private INotifyPropertyChanged? _dialogViewModel;\n    public INotifyPropertyChanged? DialogViewModel\n    {\n        get => _dialogViewModel;\n        set => this.RaiseAndSetIfChanged(ref _dialogViewModel, value, nameof(DialogViewModel));\n    }\n    public ICommand ShowCommand { get; }\n    public ICommand CloseCommand { get; }\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        var canShow = this.WhenAnyValue(x => x.DialogViewModel).Select(d => d == null);\n        ShowCommand = ReactiveCommand.Create(ShowImpl, canShow);\n\n        var canClose = this.WhenAnyValue(x => x.DialogViewModel).Select(d => d != null);\n        CloseCommand = ReactiveCommand.Create(CloseImpl, canClose);\n    }\n\n    // Run from background threads\n    private void ShowImpl()\n    {\n        DialogViewModel = _dialogService.CreateViewModel<CurrentTimeDialogViewModel>();\n        _dialogService.Show(this, DialogViewModel);\n    }\n\n    private void CloseImpl()\n    {\n        _dialogService.Close(DialogViewModel!);\n        DialogViewModel = null;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CloseNonModalDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.CloseNonModalDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.CustomOpenFolderDialog\"\n             x:Class=\"Demo.Avalonia.CustomOpenFolderDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            dialogManager: new DialogManager(\n                viewLocator: new ViewLocator(),\n                dialogFactory: new DialogFactory().AddCustomOpenFolder(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            desktop.MainWindow = new MainWindow\n            {\n                DataContext = MainWindow\n            };\n        }\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/CustomDialogFactory.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Ookii.Dialogs.WinForms;\nusing Avalonia.Controls;\nusing System.Collections.Generic;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\n/// <summary>\n/// Initializes a new instance of a FrameworkDialog.\n/// </summary>\n/// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\npublic class CustomDialogFactory(IDialogFactory? chain = null) : DialogFactoryBase(chain)\n{\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => await ShowOpenFolderDialogAsync(owner, s),\n            _ => base.ShowDialogAsync(owner, settings)\n        };\n\n    private async Task<IReadOnlyList<IDialogStorageFolder>> ShowOpenFolderDialogAsync(IView? owner, OpenFolderDialogSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(owner);\n\n        var window = TopLevel.GetTopLevel(owner.GetRef());\n        var handle = (window?.TryGetPlatformHandle()?.Handle) ?? throw new NullReferenceException(\"Cannot obtain HWND handle for owner.\");\n        var dialog = new VistaFolderBrowserDialog\n        {\n            Description = settings.Title,\n            SelectedPath = settings.SuggestedStartLocation?.LocalPath\n        };\n        var result = await UiExtensions.RunUiAsync(() => dialog.ShowDialog(handle));\n\n        return result == true ? [new DesktopDialogStorageFolder(dialog.SelectedPath!)] : [];\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/Demo.CustomOpenFolderDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <UseWindowsForms>true</UseWindowsForms>\n    <AssemblyName>Demo.Avalonia.CustomOpenFolderDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.CustomOpenFolderDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaXaml Remove=\"Models\\**\" />\n    <Compile Remove=\"Models\\**\" />\n    <EmbeddedResource Remove=\"Models\\**\" />\n    <None Remove=\"Models\\**\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Ookii.Dialogs.WinForms\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/DialogFactoryExtensions.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog\n{\n    public static class DialogFactoryExtensions\n    {\n        public static IDialogFactory AddCustomOpenFolder(this IDialogFactory factory) => new CustomDialogFactory(factory);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/MainWindow.axaml",
    "content": "<Window x:Class=\"Demo.Avalonia.CustomOpenFolderDialog.MainWindow\"\n        xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.CustomOpenFolderDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Custom Folder Browser Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <TextBox\n            IsReadOnly=\"True\"\n            Text=\"{Binding Path, Mode=OneWay}\" />\n        <Button\n            Grid.Column=\"1\"\n            Content=\"Browse...\"\n            Command=\"{Binding BrowseFolderCommand}\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\nusing IOPath = System.IO.Path;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    private string? _path;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        BrowseFolderCommand = ReactiveCommand.Create(OpenFolderAsync);\n    }\n\n    public string? Path\n    {\n        get => _path;\n        private set => this.RaiseAndSetIfChanged(ref _path, value);\n    }\n\n    public ICommand BrowseFolderCommand { get; }\n\n    private async Task OpenFolderAsync()\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            Title = \"This is a description\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!)\n        };\n\n        var result = await _dialogService.ShowOpenFolderDialogAsync(this, settings);\n        Path = result?.LocalPath;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.CustomOpenFolderDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.CustomOpenFolderDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:dialogHost=\"clr-namespace:Demo.Avalonia.DialogHost\"\n             x:Class=\"Demo.Avalonia.DialogHost.App\">\n    <Application.DataTemplates>\n        <dialogHost:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <StyleInclude Source=\"avares://DialogHost.Avalonia/Styles.xaml\"/>\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddDialogHost().AddMessageBox()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainViewModel>();\n        SplatRegistrations.Register<CurrentTimeViewModel>();\n        SplatRegistrations.Register<AskTextBoxViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, Main);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainViewModel Main => Locator.Current.GetService<MainViewModel>()!;\n    public static CurrentTimeViewModel CurrentTime => Locator.Current.GetService<CurrentTimeViewModel>()!;\n    public static AskTextBoxViewModel AskTextBox => Locator.Current.GetService<AskTextBoxViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/AskTextBoxView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:local=\"clr-namespace:Demo.Avalonia.DialogHost\"\n             xmlns:dialogHost=\"clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"130\"\n             x:Class=\"Demo.Avalonia.DialogHost.AskTextBoxView\" Padding=\"10\"\n             d:DataContext=\"{x:Static local:App.AskTextBox}\" x:DataType=\"local:AskTextBoxViewModel\">\n    <StackPanel Orientation=\"Vertical\">\n        <TextBlock Text=\"{Binding Title}\" />\n        <TextBox Height=\"24\" Margin=\"0,10,0,20\" Text=\"{Binding Text}\" />\n        <StackPanel HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n            <StackPanel.Styles>\n                <Style Selector=\"Button\">\n                    <Setter Property=\"Width\" Value=\"80\" />\n                    <Setter Property=\"Margin\" Value=\"10,0,0,0\" />\n                </Style>\n            </StackPanel.Styles>\n            <!-- <Button Content=\"Ok\" Command=\"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dialogHost:DialogHost}, Path=CloseDialogCommand}\" CommandParameter=\"{Binding Text}\" /> -->\n            <!-- <Button Content=\"Cancel\" Command=\"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dialogHost:DialogHost}, Path=CloseDialogCommand}\" /> -->\n            <Button Content=\"Ok\" Command=\"{Binding Ok}\" />\n            <Button Content=\"Cancel\" Command=\"{Binding Cancel}\" />\n        </StackPanel>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/AskTextBoxView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic partial class AskTextBoxView : UserControl\n{\n    public AskTextBoxView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/AskTextBoxViewModel.cs",
    "content": "﻿using System;\nusing System.Reactive;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic partial class AskTextBoxViewModel : ViewModelBase, IModalDialogViewModel, ICloseable\n{\n    public event EventHandler? RequestClose;\n    public bool? DialogResult { get; set; }\n\n    [Reactive]\n    public partial string Title { get; set; } = \"Title\";\n\n    [Reactive]\n    public partial string Text { get; set; } = string.Empty;\n\n    public ReactiveCommand<Unit, Unit> Ok => _ok ??= ReactiveCommand.Create(OkImpl);\n    private ReactiveCommand<Unit, Unit>? _ok;\n\n    private void OkImpl()\n    {\n        DialogResult = true;\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n\n    public ReactiveCommand<Unit, Unit> Cancel => _cancel ??= ReactiveCommand.Create(CancelImpl);\n    private ReactiveCommand<Unit, Unit>? _cancel;\n\n    private void CancelImpl()\n    {\n        DialogResult = false;\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/CurrentTimeView.axaml",
    "content": "﻿<UserControl\n    x:Class=\"Demo.Avalonia.DialogHost.CurrentTimeView\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:md=\"https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.DialogHost\"\n    mc:Ignorable=\"d\"\n    Width=\"200\"\n    Height=\"100\"\n    d:DataContext=\"{x:Static local:App.CurrentTime}\" x:DataType=\"local:CurrentTimeViewModel\">\n    <Grid>\n        <TextBlock\n            HorizontalAlignment=\"Center\"\n            VerticalAlignment=\"Center\"\n            Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n        <CheckBox Content=\"Stay open\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Center\"\n                  IsChecked=\"{Binding StayOpen}\"/>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/CurrentTimeView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic partial class CurrentTimeView : UserControl\n{\n    public CurrentTimeView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/CurrentTimeViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Reactive.Linq;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic class CurrentTimeViewModel : ViewModelBase, IViewClosing\n{\n    public DateTime CurrentTime => DateTime.Now;\n\n    public bool ConfirmClose { get; set; }\n\n    public bool StayOpen { get; set; }\n\n    public CurrentTimeViewModel() =>\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe((_) =>\n        {\n            this.RaisePropertyChanged(nameof(CurrentTime));\n        });\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        if (ConfirmClose)\n        {\n            e.Cancel = StayOpen;\n        }\n    }\n\n    public Task OnClosingAsync(CancelEventArgs e) => Task.CompletedTask;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/Demo.DialogHost.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.DialogHost</AssemblyName>\n    <RootNamespace>Demo.Avalonia.DialogHost</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaXaml Remove=\"Models\\**\" />\n    <Compile Remove=\"Models\\**\" />\n    <EmbeddedResource Remove=\"Models\\**\" />\n    <None Remove=\"Models\\**\" />\n    <Compile Update=\"MessageView.axaml.cs\">\n      <DependentUpon>MessageBox.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"ReactiveUI.SourceGenerators\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.DialogHost\\MvvmDialogs.Avalonia.DialogHost.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"CurrentTimeView.axaml.cs\">\n      <DependentUpon>%(Filename)</DependentUpon>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/DialogServiceExtensions.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Threading.Tasks;\nusing Demo.Avalonia.DialogHost;\nusing HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\n\n// ReSharper disable once CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Provides IDialogService extensions for fluent dialogs.\n/// </summary>\npublic static class DialogServiceExtensions\n{\n    public static async Task<string?> AskTextAsync(this IDialogService service, INotifyPropertyChanged ownerViewModel)\n    {\n        var vm = service.CreateViewModel<AskTextBoxViewModel>();\n        var settings = new DialogHostSettings(vm);\n        await service.ShowDialogHostAsync(ownerViewModel, settings).ConfigureAwait(true);\n        return vm.DialogResult == true ? vm.Text : null;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/FodyWeavers.xml",
    "content": "﻿<Weavers xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"FodyWeavers.xsd\">\n  <ReactiveUI />\n</Weavers>"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/FodyWeavers.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n  <!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->\n  <xs:element name=\"Weavers\">\n    <xs:complexType>\n      <xs:all>\n        <xs:element name=\"ReactiveUI\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyType\" />\n      </xs:all>\n      <xs:attribute name=\"VerifyAssembly\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"VerifyIgnoreCodes\" type=\"xs:string\">\n        <xs:annotation>\n          <xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"GenerateXsd\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n    </xs:complexType>\n  </xs:element>\n</xs:schema>"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/MainView.axaml",
    "content": "<Window x:Class=\"Demo.Avalonia.DialogHost.MainView\"\n        xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:Demo.Avalonia.DialogHost\"\n        xmlns:dialogHost=\"clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia\"\n        mc:Ignorable=\"d\"\n        WindowStartupLocation=\"CenterScreen\"\n        Title=\"Demo - DialogHost\"\n        Width=\"440\"\n        Height=\"300\"\n        d:DataContext=\"{x:Static local:App.Main}\" x:DataType=\"local:MainViewModel\">\n    <UniformGrid Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowViewModel}\">\n            <TextBlock Text=\"Confirm close in DialogHost\" />\n        </Button>\n        <Button\n            Command=\"{Binding ConfirmClose}\">\n            <TextBlock Text=\"Confirm close in ViewModel\" />\n        </Button>\n        <Button\n            Command=\"{Binding AskText}\">\n            <TextBlock Text=\"Ask for text\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessage}\">\n            <TextBlock Text=\"Show message\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowControl}\">\n            <TextBlock Text=\"Show control\" />\n        </Button>\n        <TextBlock Text=\"{Binding TextOutput}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n    </UniformGrid>\n</Window>"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/MainView.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic partial class MainView : Window\n{\n    public MainView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/MainViewModel.cs",
    "content": "﻿using System.Reactive;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\nusing ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic partial class MainViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    public MainViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowViewModel = ReactiveCommand.CreateFromTask(ShowViewModelImplAsync);\n        AskText = ReactiveCommand.CreateFromTask(AskTextImplAsync);\n        ShowMessage = ReactiveCommand.CreateFromTask(ShowMessageImplAsync);\n        ShowControl = ReactiveCommand.CreateFromTask(ShowControlImplAsync);\n        ConfirmClose = ReactiveCommand.CreateFromTask(ConfirmCloseImplAsync);\n    }\n\n    public ReactiveCommand<Unit, Unit> ShowViewModel { get; }\n    public ReactiveCommand<Unit, Unit> AskText { get; }\n    public ReactiveCommand<Unit, Unit> ShowMessage { get; }\n    public ReactiveCommand<Unit, Unit> ShowControl { get; }\n    public ReactiveCommand<Unit, Unit> ConfirmClose { get; }\n\n    [Reactive]\n    public partial string? TextOutput { get; set; }\n\n    private async Task ShowViewModelImplAsync()\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeViewModel>();\n        await _dialogService.ShowDialogHostAsync(\n            this,\n            new DialogHostSettings(dialogViewModel)\n            {\n                CloseOnClickAway = true,\n                ClosingHandler = (_, e) =>\n                {\n                    if (dialogViewModel.StayOpen)\n                    {\n                        e.Cancel();\n                    }\n                }\n            });\n    }\n\n    private async Task AskTextImplAsync()\n    {\n        TextOutput = await _dialogService.AskTextAsync(this);\n    }\n\n    private async Task ShowMessageImplAsync()\n    {\n        var result = await _dialogService.ShowDialogHostAsync(\n            this,\n            new DialogHostSettings(\"Hello world!\")\n            {\n                CloseOnClickAway = true\n            }).ConfigureAwait(true);\n        TextOutput = result?.ToString() ?? \"(null)\";\n    }\n\n    private async Task ShowControlImplAsync()\n    {\n        var content = new MessageView();\n        var result = await _dialogService.ShowDialogHostAsync(this, new DialogHostSettings(content)).ConfigureAwait(true);\n        TextOutput = result?.ToString() ?? \"(null)\";\n    }\n\n    private async Task ConfirmCloseImplAsync()\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeViewModel>();\n        dialogViewModel.ConfirmClose = true;\n        // dialogViewModel.Owner = this;\n        await _dialogService.ShowDialogHostAsync(\n            this,\n            new DialogHostSettings(dialogViewModel)\n            {\n                CloseOnClickAway = true\n            });\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/MessageView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:local=\"clr-namespace:Demo.Avalonia.DialogHost\"\n             xmlns:dialogHost=\"clr-namespace:DialogHostAvalonia;assembly=DialogHost.Avalonia\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"130\"\n             x:Class=\"Demo.Avalonia.DialogHost.MessageView\" Padding=\"10\">\n    <StackPanel Orientation=\"Vertical\">\n        <TextBlock Text=\"Is this OK for you?\" TextAlignment=\"Center\" Margin=\"20\" FontWeight=\"Bold\" />\n        <StackPanel HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n            <StackPanel.Styles>\n                <Style Selector=\"Button\">\n                    <Setter Property=\"Width\" Value=\"80\" />\n                    <Setter Property=\"Margin\" Value=\"10,0,0,0\" />\n                </Style>\n            </StackPanel.Styles>\n            <Button Content=\"Ok\" Command=\"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dialogHost:DialogHost}, Path=CloseDialogCommand}\" CommandParameter=\"true\" />\n            <Button Content=\"Cancel\" Command=\"{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=dialogHost:DialogHost}, Path=CloseDialogCommand}\" CommandParameter=\"false\" />\n        </StackPanel>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/MessageView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic partial class MessageView : UserControl\n{\n    public MessageView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.DialogHost;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.DialogHost;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"View\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.DialogHost/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.DialogHost;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:fluentContentDialog=\"clr-namespace:Demo.Avalonia.FluentContentDialog\"\n             xmlns:sty=\"using:FluentAvalonia.Styling\"\n             x:Class=\"Demo.Avalonia.FluentContentDialog.App\">\n    <Application.DataTemplates>\n        <fluentContentDialog:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <sty:FluentAvaloniaTheme />\n        <!-- <FluentTheme /> -->\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n        <Style Selector=\"TextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddFluent()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainViewModel>();\n        SplatRegistrations.Register<CurrentTimeViewModel>();\n        SplatRegistrations.Register<AskTextBoxViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            desktop.MainWindow = new MainView\n            {\n                DataContext = MainWindow\n            };\n        }\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainViewModel MainWindow => Locator.Current.GetService<MainViewModel>()!;\n    public static CurrentTimeViewModel CurrentTime => Locator.Current.GetService<CurrentTimeViewModel>()!;\n    public static AskTextBoxViewModel AskTextBox => Locator.Current.GetService<AskTextBoxViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/AskTextBoxView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:local=\"clr-namespace:Demo.Avalonia.FluentContentDialog\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"130\"\n             x:Class=\"Demo.Avalonia.FluentContentDialog.AskTextBoxView\" Padding=\"10\"\n             d:DataContext=\"{x:Static local:App.AskTextBox}\" x:DataType=\"local:AskTextBoxViewModel\">\n    <StackPanel Orientation=\"Vertical\">\n        <TextBlock Text=\"{Binding Title}\" />\n        <TextBox Height=\"24\" Margin=\"0,10,0,20\" Text=\"{Binding Text}\" />\n        <StackPanel HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n            <StackPanel.Styles>\n                <Style Selector=\"Button\">\n                    <Setter Property=\"Width\" Value=\"80\" />\n                    <Setter Property=\"Margin\" Value=\"10,0,0,0\" />\n                </Style>\n            </StackPanel.Styles>\n        </StackPanel>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/AskTextBoxView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic partial class AskTextBoxView : UserControl\n{\n    public AskTextBoxView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/AskTextBoxViewModel.cs",
    "content": "﻿using ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic partial class AskTextBoxViewModel : ViewModelBase\n{\n    [Reactive]\n    public partial string Title { get; set; } = \"Title\";\n\n    [Reactive]\n    public partial string Text { get; set; } = string.Empty;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/CurrentTimeView.axaml",
    "content": "﻿<UserControl\n    x:Class=\"Demo.Avalonia.FluentContentDialog.CurrentTimeView\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:md=\"https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.FluentContentDialog\"\n    mc:Ignorable=\"d\"\n    Width=\"200\"\n    Height=\"100\"\n    d:DataContext=\"{x:Static local:App.CurrentTime}\" x:DataType=\"local:CurrentTimeViewModel\">\n    <Grid>\n        <TextBlock\n            HorizontalAlignment=\"Center\"\n            VerticalAlignment=\"Center\"\n            Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n        <CheckBox Content=\"Stay open\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Center\"\n                  IsChecked=\"{Binding StayOpen}\"/>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/CurrentTimeView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic partial class CurrentTimeView : UserControl\n{\n    public CurrentTimeView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/CurrentTimeViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Reactive.Linq;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic class CurrentTimeViewModel : ViewModelBase, IViewClosing\n{\n    public DateTime CurrentTime => DateTime.Now;\n\n    public bool ConfirmClose { get; set; }\n\n    public bool StayOpen { get; set; }\n\n    public CurrentTimeViewModel() =>\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe((_) =>\n        {\n            this.RaisePropertyChanged(nameof(CurrentTime));\n        });\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        if (ConfirmClose)\n        {\n            e.Cancel = StayOpen;\n        }\n    }\n\n    public Task OnClosingAsync(CancelEventArgs e) => Task.CompletedTask;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/Demo.FluentContentDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.FluentContentDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.FluentContentDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"FluentAvaloniaUI\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <PackageReference Include=\"ReactiveUI.SourceGenerators\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"AskTextBoxView.axaml.cs\">\n      <DependentUpon>AskTextBoxView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"CurrentTimeView.axaml.cs\">\n      <DependentUpon>CurrentTimeView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"MessageView.axaml.cs\">\n      <DependentUpon>MessageView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/FodyWeavers.xml",
    "content": "﻿<Weavers xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"FodyWeavers.xsd\">\n  <ReactiveUI />\n</Weavers>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/FodyWeavers.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n  <!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->\n  <xs:element name=\"Weavers\">\n    <xs:complexType>\n      <xs:all>\n        <xs:element name=\"ReactiveUI\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyType\" />\n      </xs:all>\n      <xs:attribute name=\"VerifyAssembly\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"VerifyIgnoreCodes\" type=\"xs:string\">\n        <xs:annotation>\n          <xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"GenerateXsd\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n    </xs:complexType>\n  </xs:element>\n</xs:schema>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/MainView.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.FluentContentDialog.MainView\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:fluentContentDialog=\"clr-namespace:Demo.Avalonia.FluentContentDialog\"\n    mc:Ignorable=\"d\" x:DataType=\"fluentContentDialog:MainViewModel\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Message Box\"\n    Width=\"400\"\n    Height=\"300\"\n    d:DataContext=\"{x:Static fluentContentDialog:App.MainWindow}\">\n\n    <UniformGrid Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowMessageBox}\">\n            <TextBlock Text=\"Show message\" />\n        </Button>\n        <Button\n            Command=\"{Binding AskText}\">\n            <TextBlock Text=\"Ask for text\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowViewModel}\">\n            <TextBlock Text=\"Show ViewModel\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowControl}\">\n            <TextBlock Text=\"Show control\" />\n        </Button>\n        <TextBlock TextWrapping=\"Wrap\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                   Text=\"{Binding TextOutput}\" />\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/MainView.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic partial class MainView : Window\n{\n    public MainView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/MainViewModel.cs",
    "content": "﻿using System.Reactive;\nusing System.Threading.Tasks;\nusing FluentAvalonia.UI.Controls;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\nusing ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic partial class MainViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ReactiveCommand<Unit, Unit> ShowMessageBox { get; }\n    public ReactiveCommand<Unit, Unit> AskText { get; }\n    public ReactiveCommand<Unit, Unit> ShowViewModel { get; }\n    public ReactiveCommand<Unit, Unit> ShowControl { get; }\n\n    public MainViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowMessageBox = ReactiveCommand.CreateFromTask(ShowMessageBoxImplAsync);\n        AskText = ReactiveCommand.CreateFromTask(AskTextImplAsync);\n        ShowViewModel = ReactiveCommand.CreateFromTask(ShowViewModelImplAsync);\n        ShowControl = ReactiveCommand.CreateFromTask(ShowControlImplAsync);\n    }\n\n    [Reactive]\n    public partial string? TextOutput { get; set; }\n\n    private async Task ShowMessageBoxImplAsync()\n    {\n        ContentDialogSettings settings = new()\n        {\n            Content = \"This is the text.\",\n            Title = \"This Is The Caption\",\n            PrimaryButtonText = \"OK\",\n            SecondaryButtonText = \"Cancel\",\n            DefaultButton = FAContentDialogButton.Secondary\n        };\n        var result = await _dialogService.ShowContentDialogAsync(this, settings);\n\n        UpdateResult(result == FAContentDialogResult.Primary);\n    }\n\n    private void UpdateResult(bool? result) =>\n        TextOutput = result == true ? \"We got confirmation to continue!\" : string.Empty;\n\n    private async Task AskTextImplAsync()\n    {\n        var vm = _dialogService.CreateViewModel<AskTextBoxViewModel>();\n        vm.Title = \"Title within the View\";\n        ContentDialogSettings settings = new()\n        {\n            Content = vm,\n            Title = \"Please enter some text\",\n            PrimaryButtonText = \"OK\",\n            SecondaryButtonText = \"Cancel\",\n            DefaultButton = FAContentDialogButton.Primary\n        };\n        var result = await _dialogService.ShowContentDialogAsync(this, settings);\n        if (result == FAContentDialogResult.Primary)\n        {\n            TextOutput = vm.Text;\n        }\n    }\n\n    private async Task ShowViewModelImplAsync()\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeViewModel>();\n        dialogViewModel.ConfirmClose = true;\n        await _dialogService.ShowContentDialogAsync(this, new ContentDialogSettings(dialogViewModel)\n        {\n            PrimaryButtonText = \"OK\"\n        }).ConfigureAwait(true);\n    }\n\n    private async Task ShowControlImplAsync()\n    {\n        var content = new MessageView();\n        var result = await _dialogService.ShowContentDialogAsync(this, new ContentDialogSettings(content)\n        {\n            PrimaryButtonText = \"OK\"\n        }).ConfigureAwait(true);\n        TextOutput = result.ToString();\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/MessageView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"130\"\n             x:Class=\"Demo.Avalonia.FluentContentDialog.MessageView\" Padding=\"10\">\n    <StackPanel Orientation=\"Vertical\">\n        <TextBlock Text=\"Is this OK for you?\" TextAlignment=\"Center\" Margin=\"20\" FontWeight=\"Bold\" />\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/MessageView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic partial class MessageView : UserControl\n{\n    public MessageView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\n// public class ViewLocator : ViewLocatorBase\n// {\n//     /// <inheritdoc />\n//     protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"View\");\n// }\n\npublic class ViewLocator : StrongViewLocator\n{\n    public ViewLocator()\n    {\n        Register<AskTextBoxViewModel, AskTextBoxView>();\n        Register<CurrentTimeViewModel, CurrentTimeView>();\n        Register<MainViewModel, MainView>();\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentContentDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.FluentContentDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:sty=\"using:FluentAvalonia.Styling\"\n             xmlns:fluentMessageBoxContentDialog=\"clr-namespace:Demo.Avalonia.FluentMessageBoxContentDialog\"\n             x:Class=\"Demo.Avalonia.FluentMessageBoxContentDialog.App\">\n    <Application.DataTemplates>\n        <fluentMessageBoxContentDialog:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <sty:FluentAvaloniaTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n        <Style Selector=\"TextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.FluentMessageBoxContentDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddFluent(FluentMessageBoxType.ContentDialog)),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            desktop.MainWindow = new MainWindow\n            {\n                DataContext = MainWindow\n            };\n        }\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/Demo.FluentMessageBoxContentDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.FluentMessageBoxContentDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.FluentMessageBoxContentDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.FluentMessageBoxContentDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:fluentContentDialog=\"clr-namespace:Demo.Avalonia.FluentMessageBoxContentDialog\" x:DataType=\"fluentContentDialog:MainWindowViewModel\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Message Box\"\n    Width=\"400\"\n    Height=\"300\"\n    d:DataContext=\"{x:Static fluentContentDialog:App.MainWindow}\">\n\n    <UniformGrid Columns=\"2\" Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowMessageBoxWithMessageCommand}\">\n            <TextBlock Text=\"Show message box with message\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithCaptionCommand}\">\n            <TextBlock Text=\"Show message box with caption\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithButtonCommand}\">\n            <TextBlock Text=\"Show message box with buttons\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithIconCommand}\">\n            <TextBlock Text=\"Show message box with icon\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithDefaultResultCommand}\">\n            <TextBlock Text=\"Show message box with default result\" />\n        </Button>\n        <TextBlock TextWrapping=\"Wrap\"\n                   Text=\"{Binding Confirmation}\" />\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentMessageBoxContentDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/MainWindowViewModel.cs",
    "content": "using System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.FluentMessageBoxContentDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ICommand ShowMessageBoxWithMessageCommand { get; }\n    public ICommand ShowMessageBoxWithCaptionCommand { get; }\n    public ICommand ShowMessageBoxWithButtonCommand { get; }\n    public ICommand ShowMessageBoxWithIconCommand { get; }\n    public ICommand ShowMessageBoxWithDefaultResultCommand { get; }\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowMessageBoxWithMessageCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithMessage);\n        ShowMessageBoxWithCaptionCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithCaption);\n        ShowMessageBoxWithButtonCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithButton);\n        ShowMessageBoxWithIconCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithIcon);\n        ShowMessageBoxWithDefaultResultCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithDefaultResult);\n    }\n\n    private string _confirmation = string.Empty;\n    public string Confirmation\n    {\n        get => _confirmation;\n        private set => this.RaiseAndSetIfChanged(ref _confirmation, value, nameof(Confirmation));\n    }\n\n    private async Task ShowMessageBoxWithMessage()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithCaption()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithButton()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithIcon()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel,\n            MessageBoxImage.Information);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithDefaultResult()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel,\n            MessageBoxImage.Information,\n            null);\n\n        UpdateResult(result);\n    }\n\n    private void UpdateResult(bool? result) =>\n        Confirmation = result == true ? \"We got confirmation to continue!\" : string.Empty;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.FluentMessageBoxContentDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.FluentMessageBoxContentDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxContentDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.FluentMessageBoxContentDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:sty=\"using:FluentAvalonia.Styling\"\n             xmlns:fluentMessageBoxTaskDialog=\"clr-namespace:Demo.Avalonia.FluentMessageBoxTaskDialog\"\n             x:Class=\"Demo.Avalonia.FluentMessageBoxTaskDialog.App\">\n    <Application.DataTemplates>\n        <fluentMessageBoxTaskDialog:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <sty:FluentAvaloniaTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n        <Style Selector=\"TextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.FluentMessageBoxTaskDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddFluent(FluentMessageBoxType.TaskDialog)),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            desktop.MainWindow = new MainWindow\n            {\n                DataContext = MainWindow\n            };\n        }\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/Demo.FluentMessageBoxTaskDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.FluentMessageBoxTaskDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.FluentMessageBoxTaskDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"FluentAvaloniaUI\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.FluentMessageBoxTaskDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:fluentContentDialog=\"clr-namespace:Demo.Avalonia.FluentMessageBoxTaskDialog\" x:DataType=\"fluentContentDialog:MainWindowViewModel\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Message Box\"\n    Width=\"400\"\n    Height=\"300\"\n    d:DataContext=\"{x:Static fluentContentDialog:App.MainWindow}\">\n\n    <UniformGrid Columns=\"2\" Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowMessageBoxWithMessageCommand}\">\n            <TextBlock Text=\"Show message box with message\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithCaptionCommand}\">\n            <TextBlock Text=\"Show message box with caption\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithButtonCommand}\">\n            <TextBlock Text=\"Show message box with buttons\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithIconCommand}\">\n            <TextBlock Text=\"Show message box with icon\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithDefaultResultCommand}\">\n            <TextBlock Text=\"Show message box with default result\" />\n        </Button>\n        <TextBlock TextWrapping=\"Wrap\"\n                   Text=\"{Binding Confirmation}\" />\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentMessageBoxTaskDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.FluentMessageBoxTaskDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ICommand ShowMessageBoxWithMessageCommand { get; }\n    public ICommand ShowMessageBoxWithCaptionCommand { get; }\n    public ICommand ShowMessageBoxWithButtonCommand { get; }\n    public ICommand ShowMessageBoxWithIconCommand { get; }\n    public ICommand ShowMessageBoxWithDefaultResultCommand { get; }\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowMessageBoxWithMessageCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithMessage);\n        ShowMessageBoxWithCaptionCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithCaption);\n        ShowMessageBoxWithButtonCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithButton);\n        ShowMessageBoxWithIconCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithIcon);\n        ShowMessageBoxWithDefaultResultCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithDefaultResult);\n    }\n\n    private string _confirmation = string.Empty;\n    public string Confirmation\n    {\n        get => _confirmation;\n        private set => this.RaiseAndSetIfChanged(ref _confirmation, value, nameof(Confirmation));\n    }\n\n    private async Task ShowMessageBoxWithMessage()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithCaption()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithButton()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithIcon()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel,\n            MessageBoxImage.Information);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithDefaultResult()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel,\n            MessageBoxImage.Information,\n            true);\n\n        UpdateResult(result);\n    }\n\n    private void UpdateResult(bool? result) =>\n        Confirmation = result == true ? \"We got confirmation to continue!\" : string.Empty;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.FluentMessageBoxTaskDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.FluentMessageBoxTaskDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentMessageBoxTaskDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.FluentMessageBoxTaskDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:fluentTaskDialog=\"clr-namespace:Demo.Avalonia.FluentTaskDialog\"\n             xmlns:sty=\"using:FluentAvalonia.Styling\"\n             x:Class=\"Demo.Avalonia.FluentTaskDialog.App\">\n    <Application.DataTemplates>\n        <fluentTaskDialog:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <sty:FluentAvaloniaTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n        <Style Selector=\"TextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddFluent()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainViewModel>();\n        SplatRegistrations.Register<CurrentTimeViewModel>();\n        SplatRegistrations.Register<AskTextBoxViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, Main);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainViewModel Main => Locator.Current.GetService<MainViewModel>()!;\n    public static CurrentTimeViewModel CurrentTime => Locator.Current.GetService<CurrentTimeViewModel>()!;\n    public static AskTextBoxViewModel AskTextBox => Locator.Current.GetService<AskTextBoxViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/AskTextBoxView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:local=\"clr-namespace:Demo.Avalonia.FluentTaskDialog\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"130\"\n             x:Class=\"Demo.Avalonia.FluentTaskDialog.AskTextBoxView\" Padding=\"10\"\n             d:DataContext=\"{x:Static local:App.AskTextBox}\" x:DataType=\"local:AskTextBoxViewModel\">\n    <StackPanel Orientation=\"Vertical\">\n        <TextBlock Text=\"{Binding Title}\" />\n        <TextBox Height=\"24\" Margin=\"0,10,0,20\" Text=\"{Binding Text}\" />\n        <StackPanel HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n            <StackPanel.Styles>\n                <Style Selector=\"Button\">\n                    <Setter Property=\"Width\" Value=\"80\" />\n                    <Setter Property=\"Margin\" Value=\"10,0,0,0\" />\n                </Style>\n            </StackPanel.Styles>\n        </StackPanel>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/AskTextBoxView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic partial class AskTextBoxView : UserControl\n{\n    public AskTextBoxView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/AskTextBoxViewModel.cs",
    "content": "﻿using ReactiveUI.SourceGenerators;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic partial class AskTextBoxViewModel : ViewModelBase\n{\n    [Reactive]\n    public partial string Title { get; set; } = \"Title\";\n\n    [Reactive]\n    public partial string Text { get; set; } = string.Empty;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/CurrentTimeView.axaml",
    "content": "﻿<UserControl\n    x:Class=\"Demo.Avalonia.FluentTaskDialog.CurrentTimeView\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:md=\"https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.FluentTaskDialog\"\n    mc:Ignorable=\"d\"\n    Width=\"200\"\n    Height=\"100\"\n    d:DataContext=\"{x:Static local:App.CurrentTime}\" x:DataType=\"local:CurrentTimeViewModel\">\n    <Grid>\n        <TextBlock\n            HorizontalAlignment=\"Center\"\n            VerticalAlignment=\"Center\"\n            Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n        <CheckBox Content=\"Stay open\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Center\"\n                  IsChecked=\"{Binding StayOpen}\"/>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/CurrentTimeView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic partial class CurrentTimeView : UserControl\n{\n    public CurrentTimeView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/CurrentTimeViewModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Reactive.Linq;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic class CurrentTimeViewModel : ViewModelBase, IViewClosing\n{\n    public DateTime CurrentTime => DateTime.Now;\n\n    public bool ConfirmClose { get; set; }\n\n    public bool StayOpen { get; set; }\n\n    public CurrentTimeViewModel() =>\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe((_) =>\n        {\n            this.RaisePropertyChanged(nameof(CurrentTime));\n        });\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        if (ConfirmClose)\n        {\n            e.Cancel = StayOpen;\n        }\n    }\n\n    public Task OnClosingAsync(CancelEventArgs e) => Task.CompletedTask;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/Demo.FluentTaskDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.FluentTaskDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.FluentTaskDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"FluentAvaloniaUI\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"ReactiveUI.SourceGenerators\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"CurrentTimeView.axaml.cs\">\n      <DependentUpon>CurrentTimeView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"MessageView.axaml.cs\">\n      <DependentUpon>MessageView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"AskTextBoxView.axaml.cs\">\n      <DependentUpon>AskTextBoxView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/FodyWeavers.xml",
    "content": "﻿<Weavers xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"FodyWeavers.xsd\">\n  <ReactiveUI />\n</Weavers>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/FodyWeavers.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n  <!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->\n  <xs:element name=\"Weavers\">\n    <xs:complexType>\n      <xs:all>\n        <xs:element name=\"ReactiveUI\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyType\" />\n      </xs:all>\n      <xs:attribute name=\"VerifyAssembly\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"VerifyIgnoreCodes\" type=\"xs:string\">\n        <xs:annotation>\n          <xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"GenerateXsd\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n    </xs:complexType>\n  </xs:element>\n</xs:schema>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/MainView.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.FluentTaskDialog.MainView\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.FluentTaskDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Message Box\"\n    Width=\"400\"\n    Height=\"300\"\n    d:DataContext=\"{x:Static local:App.Main}\" x:DataType=\"local:MainViewModel\">\n\n    <UniformGrid Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowMessageBox}\">\n            <TextBlock Text=\"Show message\" />\n        </Button>\n        <Button\n            Command=\"{Binding AskText}\">\n            <TextBlock Text=\"Ask for text\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowViewModel}\">\n            <TextBlock Text=\"Show ViewModel\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowControl}\">\n            <TextBlock Text=\"Show control\" />\n        </Button>\n        <TextBlock TextWrapping=\"Wrap\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                   Text=\"{Binding TextOutput}\" />\n    </UniformGrid>\n</Window>"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/MainView.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic partial class MainView : Window\n{\n    public MainView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/MainViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reactive;\nusing System.Threading.Tasks;\nusing FluentAvalonia.UI.Controls;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\nusing ReactiveUI;\nusing ReactiveUI.SourceGenerators;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic partial class MainViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ReactiveCommand<Unit, Unit> ShowMessageBox { get; }\n    public ReactiveCommand<Unit, Unit> AskText { get; }\n    public ReactiveCommand<Unit, Unit> ShowViewModel { get; }\n    public ReactiveCommand<Unit, Unit> ShowControl { get; }\n\n    public MainViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowMessageBox = ReactiveCommand.CreateFromTask(ShowMessageBoxImplAsync);\n        AskText = ReactiveCommand.CreateFromTask(AskTextImplAsync);\n        ShowViewModel = ReactiveCommand.CreateFromTask(ShowViewModelImplAsync);\n        ShowControl = ReactiveCommand.CreateFromTask(ShowControlImplAsync);\n    }\n\n    [Reactive]\n    public partial string? TextOutput { get; set; }\n\n    private async Task ShowMessageBoxImplAsync()\n    {\n        TaskDialogSettings settings = new()\n        {\n            Content = \"This is the text.\",\n            Title = \"This Is The Caption\",\n            Buttons = new List<FATaskDialogButton>()\n            {\n                FATaskDialogButton.OKButton,\n                FATaskDialogButton.CancelButton\n            }\n        };\n        var result = await _dialogService.ShowTaskDialogAsync(this, settings);\n\n        UpdateResult(result == FATaskDialogStandardResult.OK);\n    }\n\n    private void UpdateResult(bool? result) =>\n        TextOutput = result == true ? \"We got confirmation to continue!\" : string.Empty;\n\n    private async Task AskTextImplAsync()\n    {\n        var vm = _dialogService.CreateViewModel<AskTextBoxViewModel>();\n        vm.Title = \"Title within the View\";\n        TaskDialogSettings settings = new()\n        {\n            Content = vm,\n            Title = \"Please enter some text\",\n            Buttons = new List<FATaskDialogButton>()\n            {\n                FATaskDialogButton.OKButton,\n                FATaskDialogButton.CancelButton\n            }\n        };\n        var result = await _dialogService.ShowTaskDialogAsync(this, settings);\n        if (result == FATaskDialogStandardResult.OK)\n        {\n            TextOutput = vm.Text;\n        }\n    }\n\n    private async Task ShowViewModelImplAsync()\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeViewModel>();\n        dialogViewModel.ConfirmClose = true;\n        await _dialogService.ShowTaskDialogAsync(this, new TaskDialogSettings(dialogViewModel)\n        {\n            Buttons = new List<FATaskDialogButton>()\n            {\n                FATaskDialogButton.OKButton\n            }\n\n        }).ConfigureAwait(true);\n    }\n\n    private async Task ShowControlImplAsync()\n    {\n        var content = new MessageView();\n        var result = await _dialogService.ShowTaskDialogAsync(this, new TaskDialogSettings(content)\n        {\n            Buttons = new List<FATaskDialogButton>()\n            {\n                FATaskDialogButton.OKButton\n            }\n        }).ConfigureAwait(true);\n        TextOutput = result.ToString();\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/MessageView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"130\"\n             x:Class=\"Demo.Avalonia.FluentTaskDialog.MessageView\" Padding=\"10\">\n    <StackPanel Orientation=\"Vertical\">\n        <TextBlock Text=\"Is this OK for you?\" TextAlignment=\"Center\" Margin=\"20\" FontWeight=\"Bold\" />\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/MessageView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic partial class MessageView : UserControl\n{\n    public MessageView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"View\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.FluentTaskDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.FluentTaskDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/AddTextDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Logging.AddTextDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Logging\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    CanResize=\"False\"\n    d:DataContext=\"{x:Static local:App.AddTextDialog}\">\n\n    <StackPanel>\n        <TextBox Text=\"{Binding Text}\" />\n            <!-- UpdateSourceTrigger=PropertyChanged -->\n\n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                Content=\"Cancel\" Command=\"{Binding Cancel}\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/AddTextDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Logging;\n\npublic partial class AddTextDialog : Window\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n#if DEBUG\n        this.AttachDevTools();\n#endif\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/AddTextDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Logging;\n\npublic class AddTextDialogViewModel : ViewModelBase, IModalDialogViewModel, ICloseable\n{\n    private string text = string.Empty;\n    private bool? dialogResult;\n    public ICommand OkCommand { get; }\n    public event EventHandler? RequestClose;\n\n    public AddTextDialogViewModel()\n    {\n        OkCommand = ReactiveCommand.Create(Ok);\n    }\n\n    public string Text\n    {\n        get => text;\n        set => this.RaiseAndSetIfChanged(ref text, value, nameof(Text));\n    }\n\n    public bool? DialogResult\n    {\n        get => dialogResult;\n        private set => this.RaiseAndSetIfChanged(ref dialogResult, value, nameof(DialogResult));\n    }\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            DialogResult = true;\n            RequestClose?.Invoke(this, EventArgs.Empty);\n        }\n    }\n\n    public void Cancel()\n    {\n        DialogResult = false;\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Logging\"\n             x:Class=\"Demo.Logging.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme Mode=\"Light\"/>\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/App.axaml.cs",
    "content": "using System;\nusing Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Splat;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Logging;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n\n        var loggerFactory = LoggerFactory.Create(builder =>\n        {\n            builder.AddDebug();\n        });\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(logger: loggerFactory.CreateLogger<DialogService>()));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<AddTextDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            desktop.MainWindow = new MainWindow\n            {\n                DataContext = MainWindow\n            };\n        }\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>();\n    public static AddTextDialogViewModel AddTextDialog => Locator.Current.GetService<AddTextDialogViewModel>();\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/Demo.Logging.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net6.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Condition=\"'$(Configuration)' == 'Debug'\" Include=\"Avalonia.Diagnostics\"/>\n    <PackageReference Include=\"Avalonia.ReactiveUI\"/>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/MainWindow.axaml",
    "content": "<Window\n    x:Class=\"Demo.Logging.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Logging\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{x:Static local:App.MainWindow}\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox Items=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/MainWindow.axaml.cs",
    "content": "using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Logging;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n#if DEBUG\n        this.AttachDevTools();\n#endif\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Logging;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService dialogService;\n    public ICommand ImplicitShowDialogCommand { get; }\n    public ICommand ExplicitShowDialogCommand { get; }\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this.dialogService = dialogService;\n\n        ImplicitShowDialogCommand = ReactiveCommand.Create(ImplicitShowDialog);\n        ExplicitShowDialogCommand = ReactiveCommand.Create(ExplicitShowDialog);\n    }\n\n    private Task ImplicitShowDialog() =>\n        ShowDialogAsync(viewModel => dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialog() =>\n        ShowDialogAsync(viewModel => dialogService.ShowDialogAsync<AddTextDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextDialogViewModel, Task<bool?>> showDialogAsync)\n    {\n        var dialogViewModel = new AddTextDialogViewModel();\n\n        var success = await showDialogAsync(dialogViewModel).ConfigureAwait(true);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.ReactiveUI;\n\nnamespace Demo.Logging;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI();\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Logging;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.Logging/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Logging;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.MessageBox\"\n             x:Class=\"Demo.Avalonia.MessageBox.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n        <Style Selector=\"TextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.MessageBox;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddMessageBox()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/Demo.MessageBox.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.MessageBox</AssemblyName>\n    <RootNamespace>Demo.Avalonia.MessageBox</RootNamespace>\n    <AssemblyVersion>1.0.0.24361</AssemblyVersion>\n    <FileVersion>1.0.0.24361</FileVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.MessageBox.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.MessageBox\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Message Box\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <UniformGrid Columns=\"2\" Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowMessageBoxWithMessageCommand}\">\n            <TextBlock Text=\"Show message box with message\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithCaptionCommand}\">\n            <TextBlock Text=\"Show message box with caption\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithButtonCommand}\">\n            <TextBlock Text=\"Show message box with buttons\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithIconCommand}\">\n            <TextBlock Text=\"Show message box with icon\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowMessageBoxWithDefaultResultCommand}\">\n            <TextBlock Text=\"Show message box with default result\" />\n        </Button>\n        <TextBlock TextWrapping=\"Wrap\"\n                   Text=\"{Binding Confirmation}\" />\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.MessageBox;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/MainWindowViewModel.cs",
    "content": "using System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.MessageBox;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ICommand ShowMessageBoxWithMessageCommand { get; }\n    public ICommand ShowMessageBoxWithCaptionCommand { get; }\n    public ICommand ShowMessageBoxWithButtonCommand { get; }\n    public ICommand ShowMessageBoxWithIconCommand { get; }\n    public ICommand ShowMessageBoxWithDefaultResultCommand { get; }\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowMessageBoxWithMessageCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithMessage);\n        ShowMessageBoxWithCaptionCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithCaption);\n        ShowMessageBoxWithButtonCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithButton);\n        ShowMessageBoxWithIconCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithIcon);\n        ShowMessageBoxWithDefaultResultCommand = ReactiveCommand.CreateFromTask(ShowMessageBoxWithDefaultResult);\n    }\n\n    private string _confirmation = string.Empty;\n    public string Confirmation\n    {\n        get => _confirmation;\n        private set => this.RaiseAndSetIfChanged(ref _confirmation, value, nameof(Confirmation));\n    }\n\n    private async Task ShowMessageBoxWithMessage()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithCaption()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithButton()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithIcon()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel,\n            MessageBoxImage.Information);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowMessageBoxWithDefaultResult()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            this,\n            \"This is the text.\",\n            \"This Is The Caption\",\n            MessageBoxButton.OkCancel,\n            MessageBoxImage.Information,\n            null);\n\n        UpdateResult(result);\n    }\n\n    private void UpdateResult(bool? result) =>\n        Confirmation = result == true ? \"We got confirmation to continue!\" : string.Empty;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.MessageBox;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.MessageBox;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.MessageBox/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.MessageBox;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/AddTextCustomDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing Avalonia.Controls;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic class AddTextCustomDialog : IView\n{\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        ViewModel = viewModel;\n    }\n\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        ViewModel = viewModel;\n    }\n\n    public Type ViewType { get; set; } = default!;\n\n    public object RefObj => this;\n\n    public AddTextDialog Ref { get; } = new();\n\n    public event EventHandler Loaded\n    {\n        add => Ref.Opened += value;\n        remove => Ref.Opened -= value;\n    }\n\n    public event EventHandler Closed\n    {\n        add => Ref.Closed += value;\n        remove => Ref.Closed -= value;\n    }\n\n    public event EventHandler<CancelEventArgs>? Closing\n    {\n        add\n        {\n            if (value != null)\n            {\n                var handler = new EventHandler<WindowClosingEventArgs>(value.Invoke);\n                _closingHandlers.Add(value, handler);\n                Ref.Closing += handler;\n            }\n        }\n        remove\n        {\n            if (value != null)\n            {\n                Ref.Closing += _closingHandlers[value];\n                _closingHandlers.Remove(value);\n            }\n        }\n    }\n    private readonly Dictionary<EventHandler<CancelEventArgs>, EventHandler<WindowClosingEventArgs>> _closingHandlers = new();\n\n    public INotifyPropertyChanged ViewModel\n    {\n        get => (INotifyPropertyChanged)Ref.DataContext!;\n        set => Ref.DataContext = value;\n    }\n\n    public INotifyPropertyChanged? Owner { get; set; }\n\n    public Task ShowDialogAsync(IView owner) => Ref.ShowDialog<bool?>((Window)owner.RefObj!);\n\n    public void Show(IView? owner) => Ref.Show((Window)owner!.RefObj);\n\n    public void Activate() => Ref.Activate();\n\n    public void Close() => Ref.Close();\n\n    public bool IsEnabled\n    {\n        get => Ref.IsEnabled;\n        set => Ref.IsEnabled = value;\n    }\n\n    public bool IsVisible => Ref.IsVisible;\n\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/AddTextCustomDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic class AddTextCustomDialogViewModel : ViewModelBase, IModalDialogViewModel, ICloseable\n{\n    private string _text = string.Empty;\n    private bool? _dialogResult;\n    public ICommand OkCommand { get; }\n    public event EventHandler? RequestClose;\n\n    public AddTextCustomDialogViewModel()\n    {\n        OkCommand = ReactiveCommand.Create(Ok);\n    }\n\n    public string Text\n    {\n        get => _text;\n        set => this.RaiseAndSetIfChanged(ref _text, value, nameof(Text));\n    }\n\n    public bool? DialogResult\n    {\n        get => _dialogResult;\n        private set => this.RaiseAndSetIfChanged(ref _dialogResult, value, nameof(DialogResult));\n    }\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            DialogResult = true;\n            RequestClose?.Invoke(this, EventArgs.Empty);\n        }\n    }\n\n    public void Cancel()\n    {\n        DialogResult = false;\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/AddTextDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.ModalCustomDialog.AddTextDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    CanResize=\"False\"\n    d:DataContext=\"{x:Static local:App.AddTextDialog}\" x:DataType=\"local:AddTextCustomDialogViewModel\">\n\n    <StackPanel>\n        <TextBox Text=\"{Binding Text}\" />\n            <!-- UpdateSourceTrigger=PropertyChanged -->\n\n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                Content=\"Cancel\" Command=\"{Binding Cancel}\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/AddTextDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic partial class AddTextDialog : Window\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.ModalCustomDialog\"\n             x:Class=\"Demo.Avalonia.ModalCustomDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<AddTextCustomDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static AddTextCustomDialogViewModel AddTextDialog => Locator.Current.GetService<AddTextCustomDialogViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/Demo.ModalCustomDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.ModalCustomDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.ModalCustomDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.ModalCustomDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Custom Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox ItemsSource=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/MainWindowViewModel.cs",
    "content": "using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ICommand ImplicitShowDialogCommand { get; }\n    public ICommand ExplicitShowDialogCommand { get; }\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowDialogCommand = ReactiveCommand.Create(ImplicitShowDialog);\n        ExplicitShowDialogCommand = ReactiveCommand.Create(ExplicitShowDialog);\n    }\n\n    private Task ImplicitShowDialog() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialog() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync<AddTextCustomDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextCustomDialogViewModel, Task<bool?>> showDialogAsync)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<AddTextCustomDialogViewModel>();\n\n        var success = await showDialogAsync(dialogViewModel).ConfigureAwait(true);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalCustomDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.ModalCustomDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/AddTextDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.ModalDialog.AddTextDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    CanResize=\"False\"\n    d:DataContext=\"{x:Static local:App.AddTextDialog}\" x:DataType=\"local:AddTextDialogViewModel\">\n\n    <StackPanel>\n        <TextBox Text=\"{Binding Text}\" />\n            <!-- UpdateSourceTrigger=PropertyChanged -->\n\n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                Content=\"Cancel\" Command=\"{Binding Cancel}\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/AddTextDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ModalDialog;\n\npublic partial class AddTextDialog : Window\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/AddTextDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.ModalDialog;\n\npublic class AddTextDialogViewModel : ViewModelBase, IModalDialogViewModel, ICloseable\n{\n    private string _text = string.Empty;\n    private bool? _dialogResult;\n    public ICommand OkCommand { get; }\n    public event EventHandler? RequestClose;\n\n    public AddTextDialogViewModel()\n    {\n        OkCommand = ReactiveCommand.Create(Ok);\n    }\n\n    public string Text\n    {\n        get => _text;\n        set => this.RaiseAndSetIfChanged(ref _text, value, nameof(Text));\n    }\n\n    public bool? DialogResult\n    {\n        get => _dialogResult;\n        set => this.RaiseAndSetIfChanged(ref _dialogResult, value, nameof(DialogResult));\n    }\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            DialogResult = true;\n            RequestClose?.Invoke(this, EventArgs.Empty);\n        }\n    }\n\n    public void Cancel()\n    {\n        DialogResult = false;\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.ModalDialog\"\n             x:Class=\"Demo.Avalonia.ModalDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.ModalDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<AddTextDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static AddTextDialogViewModel AddTextDialog => Locator.Current.GetService<AddTextDialogViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/Demo.ModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.ModalDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.ModalDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaResource Include=\"Assets\\**\" />\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"AddTextDialog.axaml.cs\">\n      <DependentUpon>AddTextDialog.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/MainWindow.axaml",
    "content": "<Window\n    x:Class=\"Demo.Avalonia.ModalDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ModalDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox ItemsSource=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ModalDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.ModalDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ICommand ImplicitShowDialogCommand { get; }\n    public ICommand ExplicitShowDialogCommand { get; }\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowDialogCommand = ReactiveCommand.Create(ImplicitShowDialog);\n        ExplicitShowDialogCommand = ReactiveCommand.Create(ExplicitShowDialog);\n    }\n\n    private Task ImplicitShowDialog() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialog() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync<AddTextDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextDialogViewModel, Task<bool?>> showDialogAsync)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<AddTextDialogViewModel>();\n\n        var success = await showDialogAsync(dialogViewModel).ConfigureAwait(true);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.ModalDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.ModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.ModalDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog.Tests/Demo.ModalDialog.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <OutputType>Exe</OutputType>\n    <Nullable>enable</Nullable>\n    <IsPackable>false</IsPackable>\n    <AssemblyName>Demo.Avalonia.ModalDialog.Tests</AssemblyName>\n    <RootNamespace>Demo.Avalonia.ModalDialog.Tests</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\"/>\n    <PackageReference Include=\"Avalonia.Themes.Fluent\"/>\n    <PackageReference Include=\"ReactiveUI.Avalonia\"/>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\"/>\n    <PackageReference Include=\"Moq\"/>\n    <PackageReference Include=\"xunit.v3\"/>\n    <PackageReference Include=\"xunit.runner.visualstudio\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"coverlet.collector\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n    <ProjectReference Include=\"..\\Demo.ModalDialog\\Demo.ModalDialog.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ModalDialog.Tests/MainWindowViewModelTests.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Xunit;\nusing Moq;\n\nnamespace Demo.Avalonia.ModalDialog.Tests;\n\npublic class MainWindowViewModelTests\n{\n    public MainWindowViewModel Model => _model ??= new MainWindowViewModel(DialogService);\n    private MainWindowViewModel? _model;\n\n    public DialogService DialogService => _dialogService ??= new DialogService(MockDialogManager.Object, viewModelFactory: ViewModelFactory);\n    private DialogService? _dialogService;\n\n    public Mock<IDialogManager> MockDialogManager => _mockDialogManager ??= new Mock<IDialogManager>();\n    private Mock<IDialogManager>? _mockDialogManager;\n\n    private object? ViewModelFactory(Type type) => (type) switch\n    {\n        _ when type == typeof(AddTextDialogViewModel) => new AddTextDialogViewModel(),\n        _ => null\n    };\n\n    [Fact]\n    public void ShowDialogCommand_InputValue_AddToList()\n    {\n        var newText = \"abc\";\n        MockDialogManager.Setup(x => x.ShowDialogAsync(It.IsAny<INotifyPropertyChanged>(), It.IsAny<AddTextDialogViewModel>()))\n            .Callback<INotifyPropertyChanged, IModalDialogViewModel>(\n                (ownerViewModel, viewModel) =>\n                {\n                    var vm = (AddTextDialogViewModel)viewModel;\n                    vm.Text = newText;\n                    vm.DialogResult = true;\n                });\n\n        Model.ImplicitShowDialogCommand.Execute(null);\n\n        Assert.Single(Model.Texts);\n        Assert.Equal(newText, Model.Texts.First());\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.NonModalCustomDialog\"\n             x:Class=\"Demo.Avalonia.NonModalCustomDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<CurrentTimeCustomDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static CurrentTimeCustomDialogViewModel CurrentTimeDialog => Locator.Current.GetService<CurrentTimeCustomDialogViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/CurrentTimeCustomDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing Avalonia.Controls;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic class CurrentTimeCustomDialog : IView\n{\n    private readonly CurrentTimeDialog _dialog = new();\n\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        ViewModel = viewModel;\n    }\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        ViewModel = viewModel;\n    }\n\n    public Type ViewType { get; set; } = default!;\n\n    public object RefObj => this;\n\n    public event EventHandler Loaded\n    {\n        add => _dialog.Opened += value;\n        remove => _dialog.Opened -= value;\n    }\n\n    public event EventHandler Closed\n    {\n        add => _dialog.Closed += value;\n        remove => _dialog.Closed -= value;\n    }\n\n    public event EventHandler<CancelEventArgs>? Closing\n    {\n        add\n        {\n            if (value != null)\n            {\n                var handler = new EventHandler<WindowClosingEventArgs>(value.Invoke);\n                _closingHandlers.Add(value, handler);\n                _dialog.Closing += handler;\n            }\n        }\n        remove\n        {\n            if (value != null)\n            {\n                _dialog.Closing += _closingHandlers[value];\n                _closingHandlers.Remove(value);\n            }\n        }\n    }\n    private readonly Dictionary<EventHandler<CancelEventArgs>, EventHandler<WindowClosingEventArgs>> _closingHandlers = new();\n\n    public INotifyPropertyChanged ViewModel\n    {\n        get => (INotifyPropertyChanged)_dialog.DataContext!;\n        set => _dialog.DataContext = value;\n    }\n\n    public Task ShowDialogAsync(IView owner)\n    {\n        return _dialog.ShowDialog<bool?>((Window)owner.RefObj);\n    }\n\n    public void Show(IView? owner) => _dialog.Show((Window)owner!.RefObj);\n\n    public void Activate() => _dialog.Activate();\n\n    public void Close() => _dialog.Close();\n\n    public bool IsEnabled\n    {\n        get => _dialog.IsEnabled;\n        set => _dialog.IsEnabled = value;\n    }\n\n    public bool IsVisible => _dialog.IsEnabled;\n\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/CurrentTimeCustomDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Reactive.Linq;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic class CurrentTimeCustomDialogViewModel : ViewModelBase\n{\n    public DateTime CurrentTime => DateTime.Now;\n\n    public CurrentTimeCustomDialogViewModel() =>\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe((_) =>\n        {\n            this.RaisePropertyChanged(nameof(CurrentTime));\n        });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/CurrentTimeDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.NonModalCustomDialog.CurrentTimeDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:md=\"https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.NonModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    CanResize=\"False\"\n    Width=\"200\"\n    Height=\"100\"\n    d:DataContext=\"{x:Static local:App.CurrentTimeDialog}\" x:DataType=\"local:CurrentTimeCustomDialogViewModel\">\n\n    <TextBlock\n        HorizontalAlignment=\"Center\"\n        VerticalAlignment=\"Center\"\n        Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/CurrentTimeDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic partial class CurrentTimeDialog : Window\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/Demo.NonModalCustomDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.NonModalCustomDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.NonModalCustomDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/MainWindow.axaml",
    "content": "<Window x:Class=\"Demo.Avalonia.NonModalCustomDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.NonModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Non-Modal Custom Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <UniformGrid Rows=\"2\">\n        <Button\n            Command=\"{Binding ImplicitShowCommand}\">\n            <TextBlock Text=\"Show current time using the dialog type locator\" />\n        </Button>\n        <Button\n            Command=\"{Binding ExplicitShowCommand}\">\n            <TextBlock Text=\"Show current time by specifying dialog type\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowCommand = ReactiveCommand.Create(ImplicitShow);\n        ExplicitShowCommand = ReactiveCommand.Create(ExplicitShow);\n    }\n\n    public ICommand ImplicitShowCommand { get; }\n\n    public ICommand ExplicitShowCommand { get; }\n\n    private void ImplicitShow()\n    {\n        Show(viewModel => _dialogService.Show(this, viewModel));\n    }\n\n    private void ExplicitShow()\n    {\n        Show(viewModel => _dialogService.Show<CurrentTimeCustomDialog>(this, viewModel));\n    }\n\n    private void Show(Action<CurrentTimeCustomDialogViewModel> show)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeCustomDialogViewModel>();\n        show(dialogViewModel);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalCustomDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.NonModalCustomDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.NonModalDialog\"\n             x:Class=\"Demo.Avalonia.NonModalDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<CurrentTimeDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static CurrentTimeDialogViewModel CurrentTimeDialog => Locator.Current.GetService<CurrentTimeDialogViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/CurrentTimeDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.NonModalDialog.CurrentTimeDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:md=\"https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.NonModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    CanResize=\"False\"\n    Width=\"200\"\n    Height=\"100\"\n    d:DataContext=\"{x:Static local:App.CurrentTimeDialog}\" x:DataType=\"local:CurrentTimeDialogViewModel\">\n\n    <TextBlock\n        HorizontalAlignment=\"Center\"\n        VerticalAlignment=\"Center\"\n        Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/CurrentTimeDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\npublic partial class CurrentTimeDialog : Window\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/CurrentTimeDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Reactive.Linq;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\npublic class CurrentTimeDialogViewModel : ViewModelBase\n{\n    public DateTime CurrentTime => DateTime.Now;\n\n    public CurrentTimeDialogViewModel() =>\n        Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe((_) =>\n        {\n            this.RaisePropertyChanged(nameof(CurrentTime));\n        });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/Demo.NonModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.NonModalDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.NonModalDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaXaml Remove=\"Models\\**\" />\n    <Compile Remove=\"Models\\**\" />\n    <EmbeddedResource Remove=\"Models\\**\" />\n    <None Remove=\"Models\\**\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"CurrentTimeDialog.axaml.cs\">\n      <DependentUpon>%(Filename)</DependentUpon>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/MainWindow.axaml",
    "content": "<Window x:Class=\"Demo.Avalonia.NonModalDialog.MainWindow\"\n        xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.NonModalDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <UniformGrid Rows=\"2\">\n        <Button\n            Command=\"{Binding ImplicitShowCommand}\">\n            <TextBlock Text=\"Show current time using the dialog type locator\" />\n        </Button>\n        <Button\n            Command=\"{Binding ExplicitShowCommand}\">\n            <TextBlock Text=\"Show current time by specifying dialog type\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowCommand = ReactiveCommand.Create(ImplicitShow);\n        ExplicitShowCommand = ReactiveCommand.Create(ExplicitShow);\n    }\n\n    public ICommand ImplicitShowCommand { get; }\n\n    public ICommand ExplicitShowCommand { get; }\n\n    private void ImplicitShow()\n    {\n        Show(viewModel => _dialogService.Show(this, viewModel));\n    }\n\n    private void ExplicitShow()\n    {\n        Show(viewModel => _dialogService.Show<CurrentTimeDialog>(this, viewModel));\n    }\n\n    private void Show(Action<CurrentTimeDialogViewModel> show)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeDialogViewModel>();\n        show(dialogViewModel);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.NonModalDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.NonModalDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.OpenFileDialog\"\n             x:Class=\"Demo.Avalonia.OpenFileDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.OpenFileDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddMessageBox()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/Demo.OpenFileDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.OpenFileDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.OpenFileDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaXaml Remove=\"Models\\**\" />\n    <Compile Remove=\"Models\\**\" />\n    <EmbeddedResource Remove=\"Models\\**\" />\n    <None Remove=\"Models\\**\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/MainWindow.axaml",
    "content": "<Window x:Class=\"Demo.Avalonia.OpenFileDialog.MainWindow\"\n        xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:Demo.Avalonia.OpenFileDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Open File Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid VerticalAlignment=\"Stretch\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            ItemsSource=\"{Binding Paths, Mode=OneWay}\" />\n        <Button\n            Grid.Column=\"1\" Height=\"32\" Margin=\"0, 10, 0, 0\" VerticalAlignment=\"Top\"\n            Content=\"Open single...\"\n            Command=\"{Binding OpenFileCommand}\" />\n        <Button\n            Grid.Column=\"1\" Height=\"32\" Margin=\"0, 50, 0, 0\" VerticalAlignment=\"Top\"\n            Content=\"Open multiple...\"\n            Command=\"{Binding OpenFilesCommand}\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.OpenFileDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.OpenFileDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    public ObservableCollection<string> Paths { get; private set; } = new();\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        OpenFileCommand = ReactiveCommand.Create(OpenFileAsync);\n        OpenFilesCommand = ReactiveCommand.Create(OpenFilesAsync);\n    }\n\n    public ICommand OpenFileCommand { get; }\n    public ICommand OpenFilesCommand { get; }\n\n    private async Task OpenFileAsync()\n    {\n        var settings = GetSettings(false);\n        var result = await _dialogService.ShowOpenFileDialogAsync(this, settings);\n        Paths.Clear();\n        if (result?.Path != null)\n        {\n            Paths.Add(result.Path.LocalPath);\n        }\n    }\n\n    private async Task OpenFilesAsync()\n    {\n        var settings = GetSettings(true);\n        var result = await _dialogService.ShowOpenFilesDialogAsync(this, settings);\n        Paths.Clear();\n        foreach (var item in result)\n        {\n            Paths.Add(item?.Path?.LocalPath ?? string.Empty);\n        }\n    }\n\n    private OpenFileDialogSettings GetSettings(bool multiple) => new()\n    {\n        Title = multiple ? \"Open multiple files\" : \"Open single file\",\n        SuggestedStartLocation = new DesktopDialogStorageFolder(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!),\n        Filters = new List<FileFilter>()\n        {\n            new(\n                \"Text Documents\",\n                new[]\n                {\n                    \"txt\", \"md\"\n                }),\n            new(\n                \"Binaries\",\n                new[]\n                {\n                    \".exe\", \".dll\"\n                }),\n            new(\"All Files\", \"*\")\n        }\n    };\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.OpenFileDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.OpenFileDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFileDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.OpenFileDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.OpenFolderDialog\"\n             x:Class=\"Demo.Avalonia.OpenFolderDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.OpenFolderDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/Demo.OpenFolderDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.OpenFolderDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.OpenFolderDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  </Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.OpenFolderDialog.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.OpenFolderDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Folder Browser Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <TextBox\n            IsReadOnly=\"True\"\n            Text=\"{Binding Path, Mode=OneWay}\" />\n        <Button\n            Grid.Column=\"1\"\n            Content=\"Browse...\"\n            Command=\"{Binding OpenFolderCommand}\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.OpenFolderDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/MainWindowViewModel.cs",
    "content": "using System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.OpenFolderDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    private string? _path;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        OpenFolderCommand = ReactiveCommand.Create(OpenFolderAsync);\n    }\n\n    public string? Path\n    {\n        get => _path;\n        private set => this.RaiseAndSetIfChanged(ref _path, value);\n    }\n\n    public ICommand OpenFolderCommand { get; }\n\n    private async Task OpenFolderAsync()\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            Title = \"This is a description\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!),\n        };\n\n        var result = await _dialogService.ShowOpenFolderDialogAsync(this, settings);\n        Path = result?.Path?.LocalPath;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.OpenFolderDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.OpenFolderDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.OpenFolderDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.OpenFolderDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.SaveFileDialog\"\n             x:Class=\"Demo.Avalonia.SaveFileDialog.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.SaveFileDialog;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddMessageBox()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/Demo.SaveFileDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.SaveFileDialog</AssemblyName>\n    <RootNamespace>Demo.Avalonia.SaveFileDialog</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaXaml Remove=\"Models\\**\" />\n    <Compile Remove=\"Models\\**\" />\n    <EmbeddedResource Remove=\"Models\\**\" />\n    <None Remove=\"Models\\**\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs\\MvvmDialogs.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.MessageBox\\MvvmDialogs.Avalonia.MessageBox.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/MainWindow.axaml",
    "content": "<Window x:Class=\"Demo.Avalonia.SaveFileDialog.MainWindow\"\n        xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.SaveFileDialog\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Save File Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <TextBox\n            IsReadOnly=\"True\"\n            Text=\"{Binding Path, Mode=OneWay}\" />\n        <Button\n            Grid.Column=\"1\"\n            Content=\"Save...\"\n            Command=\"{Binding SaveFileCommand}\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.SaveFileDialog;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n    //\n    // protected override async void OnOpened(EventArgs e)\n    // {\n    //     var result = await ShowSaveFileAsync();\n    //     base.OnOpened(e);\n    // }\n    //\n    // private async Task<string?> ShowStrAsync() =>\n    //     (string?)await ShowObjAsync();\n    //\n    // private async Task<object?> ShowObjAsync() =>\n    //     await ShowSaveFileAsync();\n    //\n    // private async Task<string?> ShowSaveFileAsync()\n    // {\n    //     var dialog = new Avalonia.Controls.SaveFileDialog();\n    //     return await dialog.ShowAsync(this).ConfigureAwait(true);\n    // }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing ReactiveUI;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\nnamespace Demo.Avalonia.SaveFileDialog;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n\n    private string? _path;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        SaveFileCommand = ReactiveCommand.CreateFromTask(SaveFileAsync);\n    }\n\n    public string? Path\n    {\n        get => _path;\n        private set => this.RaiseAndSetIfChanged(ref _path, value);\n    }\n\n    public ICommand SaveFileCommand { get; }\n\n    private async Task SaveFileAsync()\n    {\n        var settings = new SaveFileDialogSettings\n        {\n            Title = \"This is the title\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!),\n            SuggestedFileName = \"DefaultName\",\n            Filters = new List<FileFilter>()\n            {\n                new(\"Text Documents\", new[] { \"txt\", \"md\" }),\n                new(\"MP3\", new[] { \"mp3\" }),\n                new(\"All Files\", \"*\")\n            },\n            DefaultExtension = \"mp3\"\n        };\n\n        var result = await _dialogService.ShowSaveFileDialogAsync(this, settings);\n        Path = result?.Path?.LocalPath;\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.SaveFileDialog;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.SaveFileDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.SaveFileDialog/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.SaveFileDialog;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/AddTextDialog.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.StrongLocator.AddTextDialog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.StrongLocator\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    CanResize=\"False\"\n    d:DataContext=\"{x:Static local:App.AddTextDialog}\" x:DataType=\"local:AddTextDialogViewModel\">\n\n    <StackPanel>\n        <TextBox Text=\"{Binding Text}\" />\n            <!-- UpdateSourceTrigger=PropertyChanged -->\n\n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                Content=\"Cancel\" Command=\"{Binding Cancel}\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/AddTextDialog.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.StrongLocator;\n\npublic partial class AddTextDialog : Window\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/AddTextDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.StrongLocator;\n\npublic class AddTextDialogViewModel : ViewModelBase, IModalDialogViewModel, ICloseable\n{\n    private string _text = string.Empty;\n    private bool? _dialogResult;\n    public ICommand OkCommand { get; }\n    public event EventHandler? RequestClose;\n\n    public AddTextDialogViewModel()\n    {\n        OkCommand = ReactiveCommand.Create(Ok);\n    }\n\n    public string Text\n    {\n        get => _text;\n        set => this.RaiseAndSetIfChanged(ref _text, value, nameof(Text));\n    }\n\n    public bool? DialogResult\n    {\n        get => _dialogResult;\n        set => this.RaiseAndSetIfChanged(ref _dialogResult, value, nameof(DialogResult));\n    }\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            DialogResult = true;\n            RequestClose?.Invoke(this, EventArgs.Empty);\n        }\n    }\n\n    public void Cancel()\n    {\n        DialogResult = false;\n        RequestClose?.Invoke(this, EventArgs.Empty);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"clr-namespace:Demo.Avalonia.StrongLocator\"\n             x:Class=\"Demo.Avalonia.StrongLocator.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <FluentTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.StrongLocator;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        // This demo uses StrongViewLocator to avoid reflection.\n        // To test assembly trimming, publish the application by running this command in the terminal in the project folder \n        // dotnet publish -r win-x64 -c Release --self-contained=true -p:PublishSingleFile=true\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.Register<AddTextDialogViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static AddTextDialogViewModel AddTextDialog => Locator.Current.GetService<AddTextDialogViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n    public static StrongViewLocator ViewLocator { get; private set; } = default!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/Demo.StrongLocator.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.StrongLocator</AssemblyName>\n    <RootNamespace>Demo.Avalonia.StrongLocator</RootNamespace>\n    <PublishTrimmed>true</PublishTrimmed>\n  </PropertyGroup>\n  <ItemGroup>\n    <AvaloniaResource Include=\"Assets\\**\" />\n    <None Remove=\".gitignore\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Fonts.Inter\" />\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"AddTextDialog.axaml.cs\">\n      <DependentUpon>AddTextDialog.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/MainWindow.axaml",
    "content": "<Window\n    x:Class=\"Demo.Avalonia.StrongLocator.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.StrongLocator\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox ItemsSource=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.StrongLocator;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.StrongLocator;\n\npublic class MainWindowViewModel : ViewModelBase\n{\n    private readonly IDialogService _dialogService;\n    public ICommand ImplicitShowDialogCommand { get; }\n    public ICommand ExplicitShowDialogCommand { get; }\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowDialogCommand = ReactiveCommand.Create(ImplicitShowDialog);\n        ExplicitShowDialogCommand = ReactiveCommand.Create(ExplicitShowDialog);\n    }\n\n    private Task ImplicitShowDialog() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialog() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync<AddTextDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextDialogViewModel, Task<bool?>> showDialogAsync)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<AddTextDialogViewModel>();\n\n        var success = await showDialogAsync(dialogViewModel).ConfigureAwait(true);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.StrongLocator;\n\nclass Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.StrongLocator;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : StrongViewLocator\n{\n    public ViewLocator()\n    {\n        Register<MainWindowViewModel, MainWindow>();\n        Register<AddTextDialogViewModel, AddTextDialog>();\n    }\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.StrongLocator/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.StrongLocator;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/App.axaml",
    "content": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"using:Demo.Avalonia.ViewEvents\"\n             xmlns:sty=\"using:FluentAvalonia.Styling\"\n             x:Class=\"Demo.Avalonia.ViewEvents.App\">\n    <Application.DataTemplates>\n        <local:ViewLocator/>\n    </Application.DataTemplates>\n\n    <Application.Styles>\n        <sty:FluentAvaloniaTheme />\n        <Style Selector=\"Button\">\n            <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        </Style>\n    </Application.Styles>\n</Application>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/App.axaml.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing Avalonia.Markup.Xaml;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Avalonia;\nusing Microsoft.Extensions.Logging;\nusing Splat;\n\nnamespace Demo.Avalonia.ViewEvents;\n\npublic class App : Application\n{\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n\n        var build = Locator.CurrentMutable;\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        build.RegisterLazySingleton(() => (IDialogService)new DialogService(\n            new DialogManager(\n                viewLocator: new ViewLocator(),\n                logger: loggerFactory.CreateLogger<DialogManager>(),\n                dialogFactory: new DialogFactory().AddFluent()),\n            viewModelFactory: x => Locator.Current.GetService(x)));\n\n        SplatRegistrations.Register<MainWindowViewModel>();\n        SplatRegistrations.SetupIOC();\n    }\n\n    public override void OnFrameworkInitializationCompleted()\n    {\n        GC.KeepAlive(typeof(DialogService));\n\n        DialogService.Show(null, MainWindow);\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    public static MainWindowViewModel MainWindow => Locator.Current.GetService<MainWindowViewModel>()!;\n    public static IDialogService DialogService => Locator.Current.GetService<IDialogService>()!;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/Demo.ViewEvents.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>default</LangVersion>\n    <AssemblyName>Demo.Avalonia.ViewEvents</AssemblyName>\n    <RootNamespace>Demo.Avalonia.ViewEvents</RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <PackageReference Include=\"ReactiveUI.Avalonia\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"FluentAvaloniaUI\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Splat.DependencyInjection.SourceGenerator\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia.Fluent\\MvvmDialogs.Avalonia.Fluent.csproj\" />\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/MainWindow.axaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Avalonia.ViewEvents.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Avalonia.ViewEvents\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - View Events\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{x:Static local:App.MainWindow}\" x:DataType=\"local:MainWindowViewModel\">\n\n    <Grid>\n        <TextBlock Text=\"{Binding Text}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/MainWindow.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Demo.Avalonia.ViewEvents;\n\npublic partial class MainWindow : Window\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/MainWindowViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing ReactiveUI;\n\nnamespace Demo.Avalonia.ViewEvents;\n\npublic class MainWindowViewModel(IDialogService dialogService) : ViewModelBase, IViewLoaded, IViewClosing, IViewClosed\n{\n    private readonly IDialogService _dialogService = dialogService;\n\n    public void OnLoaded()\n    {\n        Text = \"Loaded!\";\n    }\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        e.Cancel = true;\n    }\n\n    public async Task OnClosingAsync(CancelEventArgs e)\n    {\n        var quit = await _dialogService.ShowMessageBoxAsync(this, \"Do you really want to quit? \", \"Confirmation\", HanumanInstitute.MvvmDialogs.FrameworkDialogs.MessageBoxButton.YesNo);\n        e.Cancel = quit != true;\n    }\n\n    public async void OnClosed()\n    {\n        await _dialogService.ShowMessageBoxAsync(null, \"It's over.\", \"Closed\");\n    }\n\n    public string Text\n    {\n        get => _text;\n        set => this.RaiseAndSetIfChanged(ref _text, value);\n    }\n    private string _text = string.Empty;\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing ReactiveUI.Avalonia;\n\nnamespace Demo.Avalonia.ViewEvents;\n\npublic class Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args) => BuildAvaloniaApp()\n        .StartWithClassicDesktopLifetime(args);\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp()\n        => AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .LogToTrace()\n            .UseReactiveUI(rxui => { });\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Avalonia;\n\nnamespace Demo.Avalonia.ViewEvents;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Avalonia/Demo.ViewEvents/ViewModelBase.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace Demo.Avalonia.ViewEvents;\n\npublic class ViewModelBase : ReactiveObject\n{\n}\n"
  },
  {
    "path": "samples/Directory.Build.props",
    "content": "<Project>\n  <PropertyGroup>\n    <LangVersion>latest</LangVersion>\n    <Nullable>enable</Nullable>\n    <Company>Hanuman Institute</Company>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.ActivateNonModalDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ActivateNonModalDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n\n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.ActivateNonModalDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<CurrentTimeDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/CurrentTimeDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ActivateNonModalDialog.CurrentTimeDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:i=\"http://schemas.microsoft.com/xaml/behaviors\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ActivateNonModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    Width=\"200\"\n    Height=\"100\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:CurrentTimeDialogViewModel}}\">\n    \n    <i:Interaction.Triggers>\n        <i:EventTrigger EventName=\"Loaded\">\n            <i:InvokeCommandAction Command=\"{Binding StartClockCommand}\" />\n        </i:EventTrigger>\n    </i:Interaction.Triggers>\n\n    <TextBlock\n        AutomationProperties.AutomationId=\"n_Mu0TdFak-4VJD8RosMEQ\"\n        HorizontalAlignment=\"Center\"\n        VerticalAlignment=\"Center\"\n        Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/CurrentTimeDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ActivateNonModalDialog;\n\npublic partial class CurrentTimeDialog\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/CurrentTimeDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing System.Windows.Threading;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\n\nnamespace Demo.Wpf.ActivateNonModalDialog;\n\npublic class CurrentTimeDialogViewModel : ObservableObject\n{\n    // ReSharper disable once NotAccessedField.Local\n    private DispatcherTimer? _timer;\n\n    public CurrentTimeDialogViewModel()\n    {\n        StartClockCommand = new RelayCommand(StartClock);\n    }\n\n    public ICommand StartClockCommand { get; }\n\n    public DateTime CurrentTime => DateTime.Now;\n\n    private void StartClock()\n    {\n        _timer = new DispatcherTimer(\n            TimeSpan.FromSeconds(1),\n            DispatcherPriority.Normal,\n            OnTick,\n            Dispatcher.CurrentDispatcher);\n    }\n\n    private void OnTick(object? sender, EventArgs e)\n    {\n        OnPropertyChanged(nameof(CurrentTime));\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/Demo.ActivateNonModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.ActivateNonModalDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.ActivateNonModalDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Microsoft.Xaml.Behaviors.Wpf\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ActivateNonModalDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Activate Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <UniformGrid Rows=\"2\">\n        <Button\n            AutomationProperties.AutomationId=\"6U4UYFLlnUKOBx26wvyDOg\"\n            Command=\"{Binding ShowCommand}\">\n            <TextBlock Text=\"Show current time\" />\n        </Button>\n        <Button\n            AutomationProperties.AutomationId=\"yp7kt1tOeEqE5y2KmylhGQ\"\n            Command=\"{Binding ActivateCommand}\">\n            <TextBlock Text=\"Activate dialog showing current time\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ActivateNonModalDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/MainWindowViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.ActivateNonModalDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    private INotifyPropertyChanged? _dialogViewModel;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowCommand = new RelayCommand(Show, CanShow);\n        ActivateCommand = new RelayCommand(Activate, CanActivate);\n    }\n\n    public RelayCommand ShowCommand { get; }\n\n    public RelayCommand ActivateCommand { get; }\n\n    private void Show()\n    {\n        _dialogViewModel = _dialogService.CreateViewModel<CurrentTimeDialogViewModel>();\n        _dialogService.Show(this, _dialogViewModel);\n\n        ShowCommand.NotifyCanExecuteChanged();\n        ActivateCommand.NotifyCanExecuteChanged();\n    }\n\n    private bool CanShow()\n    {\n        return _dialogViewModel == null;\n    }\n\n    private void Activate()\n    {\n        _dialogService.Activate(_dialogViewModel!);\n    }\n\n    private bool CanActivate()\n    {\n        return _dialogViewModel != null;\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/ViewLocator.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.ActivateNonModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ActivateNonModalDialog/ViewModelLocator.cs",
    "content": "﻿using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.ActivateNonModalDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.CloseNonModalDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.CloseNonModalDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n\n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.CloseNonModalDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<CurrentTimeDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/CurrentTimeDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.CloseNonModalDialog.CurrentTimeDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:i=\"http://schemas.microsoft.com/xaml/behaviors\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.CloseNonModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    Width=\"200\"\n    Height=\"100\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:CurrentTimeDialogViewModel}}\">\n    \n    <i:Interaction.Triggers>\n        <i:EventTrigger EventName=\"Loaded\">\n            <i:InvokeCommandAction Command=\"{Binding StartClockCommand}\" />\n        </i:EventTrigger>\n    </i:Interaction.Triggers>\n\n    <TextBlock\n        AutomationProperties.AutomationId=\"n_Mu0TdFak-4VJD8RosMEQ\"\n        HorizontalAlignment=\"Center\"\n        VerticalAlignment=\"Center\"\n        Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/CurrentTimeDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.CloseNonModalDialog;\n\npublic partial class CurrentTimeDialog\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/CurrentTimeDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing System.Windows.Threading;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\n\nnamespace Demo.Wpf.CloseNonModalDialog;\n\npublic class CurrentTimeDialogViewModel : ObservableObject\n{\n    // ReSharper disable once NotAccessedField.Local\n    private DispatcherTimer? _timer;\n\n    public CurrentTimeDialogViewModel()\n    {\n        StartClockCommand = new RelayCommand(StartClock);\n    }\n\n    public ICommand StartClockCommand { get; }\n\n    public DateTime CurrentTime => DateTime.Now;\n\n    private void StartClock()\n    {\n        _timer = new DispatcherTimer(\n            TimeSpan.FromSeconds(1),\n            DispatcherPriority.Normal,\n            OnTick,\n            Dispatcher.CurrentDispatcher);\n    }\n\n    private void OnTick(object? sender, EventArgs e)\n    {\n        OnPropertyChanged(nameof(CurrentTime));\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/Demo.CloseNonModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.CloseNonModalDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.CloseNonModalDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n    <PackageReference Include=\"Microsoft.Xaml.Behaviors.Wpf\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.CloseNonModalDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Close Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <UniformGrid Rows=\"2\">\n        <Button\n            AutomationProperties.AutomationId=\"6U4UYFLlnUKOBx26wvyDOg\"\n            Command=\"{Binding ShowCommand}\">\n            <TextBlock Text=\"Show current time\" />\n        </Button>\n        <Button\n            AutomationProperties.AutomationId=\"yp7kt1tOeEqE5y2KmylhGQ\"\n            Command=\"{Binding CloseCommand}\">\n            <TextBlock Text=\"Close dialog showing current time\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.CloseNonModalDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/MainWindowViewModel.cs",
    "content": "using System.ComponentModel;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.CloseNonModalDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    private INotifyPropertyChanged? _dialogViewModel;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowCommand = new RelayCommand(Show, CanShow);\n        CloseCommand = new RelayCommand(Close, CanClose);\n    }\n\n    public RelayCommand ShowCommand { get; }\n\n    public RelayCommand CloseCommand { get; }\n\n    private void Show()\n    {\n        _dialogViewModel = _dialogService.CreateViewModel<CurrentTimeDialogViewModel>();\n        _dialogService.Show(this, _dialogViewModel);\n\n        ShowCommand.NotifyCanExecuteChanged();\n        CloseCommand.NotifyCanExecuteChanged();\n    }\n\n    private bool CanShow()\n    {\n        return _dialogViewModel == null;\n    }\n\n    private void Close()\n    {\n        _dialogService.Close(_dialogViewModel!);\n        _dialogViewModel = null;\n\n        ShowCommand.NotifyCanExecuteChanged();\n        CloseCommand.NotifyCanExecuteChanged();\n    }\n\n    private bool CanClose()\n    {\n        return _dialogViewModel != null;\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.CloseNonModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CloseNonModalDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.CloseNonModalDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/App.xaml",
    "content": "<Application\n    x:Class=\"Demo.Wpf.CustomOpenFolderDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.CustomOpenFolderDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.CustomOpenFolderDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(_ => new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        dialogFactory: new DialogFactory().AddCustomOpenFolder(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/CustomDialogFactory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Windows.Interop;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Ookii.Dialogs.Wpf;\n\nnamespace Demo.Wpf.CustomOpenFolderDialog;\n\n/// <summary>\n/// Initializes a new instance of a FrameworkDialog.\n/// </summary>\n/// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\npublic class CustomDialogFactory(IDialogFactory? chain = null) : DialogFactoryBase(chain)\n{\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(ViewWrapper? owner, TSettings settings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => await UiExtensions.RunUiAsync(() => ShowOpenFolderDialog(owner, s)).ConfigureAwait(true),\n            _ => base.ShowDialogAsync(owner, settings)\n        };\n\n    /// <inheritdoc />\n    public override object? ShowDialog<TSettings>(ViewWrapper? owner, TSettings settings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => ShowOpenFolderDialog(owner, s),\n            _ => base.ShowDialog(owner, settings)\n        };\n\n    private IDialogStorageFolder[] ShowOpenFolderDialog(ViewWrapper? owner, OpenFolderDialogSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(owner);\n\n        var window = owner.AsWrapper().Ref;\n        var handle = new WindowInteropHelper(window).Handle;\n\n        var dialog = new VistaFolderBrowserDialog\n        {\n            Description = settings.Title,\n            SelectedPath = settings.SuggestedStartLocation?.LocalPath\n        };\n        var result = dialog.ShowDialog(handle);\n\n        return result == true ? [new DesktopDialogStorageFolder(dialog.SelectedPath!)] : [];\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/Demo.CustomOpenFolderDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.CustomFolderBrowserDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.CustomFolderBrowserDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\"/>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n    <PackageReference Include=\"Ookii.Dialogs.Wpf\"/>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/DialogFactoryExtensions.cs",
    "content": "﻿\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.CustomOpenFolderDialog\n{\n    public static class DialogFactoryExtensions\n    {\n        public static IDialogFactory AddCustomOpenFolder(this IDialogFactory factory) => new CustomDialogFactory(factory);\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.CustomOpenFolderDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Custom Folder Browser Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n    \n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <TextBox\n            AutomationProperties.AutomationId=\"RQ_N2kIsN0C39sxTonCRtA\"\n            IsReadOnly=\"True\"\n            Text=\"{Binding Path, Mode=OneWay}\" />\n        <Button\n            Grid.Column=\"1\"\n            AutomationProperties.AutomationId=\"TTK4W3coCE2skIHpcUe97Q\"\n            Content=\"Browse...\"\n            Command=\"{Binding BrowseFolderCommand}\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.CustomOpenFolderDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing IOPath = System.IO.Path;\n\nnamespace Demo.Wpf.CustomOpenFolderDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    private string? _path;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        BrowseFolderCommand = new AsyncRelayCommand(OpenFolderAsync);\n    }\n\n    public string? Path\n    {\n        get => _path;\n        private set => SetProperty(ref _path, value);\n    }\n\n    public ICommand BrowseFolderCommand { get; }\n\n    private async Task OpenFolderAsync()\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            Title = \"This is a description\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!)\n        };\n\n        var result = await _dialogService.ShowOpenFolderDialogAsync(this, settings);\n        Path = result?.LocalPath;\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.CustomOpenFolderDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.CustomOpenFolderDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.CustomOpenFolderDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/App.xaml",
    "content": "<Application\n    x:Class=\"Demo.Wpf.MessageBox.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.MessageBox\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n\n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.MessageBox;\n\npublic partial class App : Application\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/Demo.MessageBox.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.MessageBox</RootNamespace>\n    <AssemblyName>Demo.Wpf.MessageBox</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\"/>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.MessageBox.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Message Box\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <UniformGrid Columns=\"2\" Rows=\"3\">\n        <Button\n            Command=\"{Binding ShowWithMessage}\">\n            <TextBlock Text=\"Show message box with message\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowWithCaption}\">\n            <TextBlock Text=\"Show message box with caption\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowWithButton}\">\n            <TextBlock Text=\"Show message box with buttons\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowWithIcon}\">\n            <TextBlock Text=\"Show message box with icon\" />\n        </Button>\n        <Button\n            Command=\"{Binding ShowWithDefaultResult}\">\n            <TextBlock Text=\"Show message box with default result\" />\n        </Button>\n        <Grid>\n            <CheckBox IsChecked=\"{Binding UseAsync}\" Content=\"Async\" />\n            <CheckBox IsChecked=\"{Binding SetOwner}\" Content=\"Set Owner\" HorizontalAlignment=\"Right\" />\n            <TextBlock Text=\"{Binding Confirmation}\" VerticalAlignment=\"Bottom\" />\n        </Grid>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.MessageBox;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\nnamespace Demo.Wpf.MessageBox;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    private string? _confirmation;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ShowWithMessage = new AsyncRelayCommand(() => Show(ShowWithMessageImpl, ShowWithMessageImplAsync));\n        ShowWithCaption = new AsyncRelayCommand(() => Show(ShowWithCaptionImpl, ShowWithCaptionImplAsync));\n        ShowWithButton = new AsyncRelayCommand(() => Show(ShowWithButtonImpl, ShowWithButtonImplAsync));\n        ShowWithIcon = new AsyncRelayCommand(() => Show(ShowWithIconImpl, ShowWithIconImplAsync));\n        ShowWithDefaultResult = new AsyncRelayCommand(() => Show(ShowWithDefaultResultImpl, ShowWithDefaultResultImplAsync));\n    }\n\n    public ICommand ShowWithMessage { get; }\n    public ICommand ShowWithCaption { get; }\n    public ICommand ShowWithButton { get; }\n    public ICommand ShowWithIcon { get; }\n    public ICommand ShowWithDefaultResult { get; }\n\n    private Task Show(Action action, Func<Task> asyncAction)\n    {\n        if (UseAsync)\n        {\n            return asyncAction();\n        }\n        action();\n        return Task.CompletedTask;\n    }\n\n    public bool UseAsync\n    {\n        get => _useAsync;\n        set => SetProperty(ref _useAsync, value);\n    }\n    private bool _useAsync = true;\n\n    public bool SetOwner\n    {\n        get => _setOwner;\n        set => SetProperty(ref _setOwner, value);\n    }\n    private bool _setOwner = true;\n\n    public string? Confirmation\n    {\n        get => _confirmation;\n        private set => SetProperty(ref _confirmation, value);\n    }\n\n    private void ShowWithMessageImpl()\n    {\n        var result = _dialogService.ShowMessageBox(\n            SetOwner ? this : null,\n            \"This is the text.\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowWithMessageImplAsync()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            SetOwner ? this : null,\n            \"This is the text.\");\n\n        UpdateResult(result);\n    }\n\n    private void ShowWithCaptionImpl()\n    {\n        var result = _dialogService.ShowMessageBox(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\");\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowWithCaptionImplAsync()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\");\n\n        UpdateResult(result);\n    }\n\n    private void ShowWithButtonImpl()\n    {\n        var result = _dialogService.ShowMessageBox(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\",\n            MessageBoxButton.OkCancel);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowWithButtonImplAsync()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\",\n            MessageBoxButton.OkCancel);\n\n        UpdateResult(result);\n    }\n\n    private void ShowWithIconImpl()\n    {\n        var result = _dialogService.ShowMessageBox(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\",\n            MessageBoxButton.OkCancel, MessageBoxImage.Information);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowWithIconImplAsync()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\",\n            MessageBoxButton.OkCancel, MessageBoxImage.Information);\n\n        UpdateResult(result);\n    }\n\n    private void ShowWithDefaultResultImpl()\n    {\n        var result = _dialogService.ShowMessageBox(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\",\n            MessageBoxButton.OkCancel, MessageBoxImage.Information, false);\n\n        UpdateResult(result);\n    }\n\n    private async Task ShowWithDefaultResultImplAsync()\n    {\n        var result = await _dialogService.ShowMessageBoxAsync(\n            SetOwner ? this : null,\n            \"This is the text.\", \"This Is The Caption\",\n            MessageBoxButton.OkCancel, MessageBoxImage.Information, false);\n\n        UpdateResult(result);\n    }\n\n    private void UpdateResult(bool? result)\n    {\n        Confirmation = result == true ? \"We got confirmation to continue!\" : string.Empty;\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.MessageBox;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.MessageBox/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.MessageBox;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/AddTextCustomDialog.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.ModalCustomDialog;\n\npublic class AddTextCustomDialog : IView, IViewSync\n{\n    private readonly AddTextDialog _dialog = new();\n\n    public object RefObj => this;\n\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        ViewModel = viewModel;\n    }\n\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        ViewModel = viewModel;\n    }\n\n    public event EventHandler Closed\n    {\n        add => _dialog.Closed += value;\n        remove => _dialog.Closed -= value;\n    }\n\n    public event EventHandler Loaded\n    {\n        add { }\n        remove { }\n    }\n\n    public event EventHandler<CancelEventArgs> Closing\n    {\n        add { }\n        remove { }\n    }\n\n    public INotifyPropertyChanged ViewModel\n    {\n        get => (INotifyPropertyChanged)_dialog.DataContext;\n        set => _dialog.DataContext = value;\n    }\n\n    public IView? Owner\n    {\n        get => _dialog.Owner.AsWrapper();\n        set => _dialog.Owner = value.AsWrapper()?.Ref;\n    }\n\n    public Task ShowDialogAsync(IView owner) => UiExtensions.RunUiAsync(() => ShowDialog(owner));\n\n    public void ShowDialog(IView owner)\n    {\n        _dialog.Owner = owner.GetRef();\n        _dialog.ShowDialog();\n    }\n\n    public void Show(IView? owner)\n    {\n        _dialog.Owner = owner.GetRef();\n        _dialog.Show();\n    }\n\n    public void Activate() => _dialog.Activate();\n\n    public void Close() => _dialog.Close();\n\n    public bool IsEnabled\n    {\n        get => _dialog.IsEnabled;\n        set => _dialog.IsEnabled = value;\n    }\n\n    public bool IsVisible => _dialog.IsVisible;\n\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/AddTextCustomDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.ModalCustomDialog;\n\npublic class AddTextCustomDialogViewModel : ObservableObject, IModalDialogViewModel, ICloseable\n{\n    public event EventHandler? RequestClose;\n    private string? _text;\n    private bool? _dialogResult;\n\n    public AddTextCustomDialogViewModel()\n    {\n        OkCommand = new RelayCommand(Ok);\n    }\n\n    public string? Text\n    {\n        get => _text;\n        set => SetProperty(ref _text, value);\n    }\n\n    public ICommand OkCommand { get; }\n\n    public bool? DialogResult\n    {\n        get => _dialogResult;\n        private set => SetProperty(ref _dialogResult, value);\n    }\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            RequestClose?.Invoke(this, EventArgs.Empty);\n            DialogResult = true;\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/AddTextDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ModalCustomDialog.AddTextDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:AddTextCustomDialogViewModel}}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <StackPanel>\n        <TextBox\n            AutomationProperties.AutomationId=\"Csl8dP93gUGQLj7rVZxDAg\"\n            Text=\"{Binding Text, UpdateSourceTrigger=PropertyChanged}\" />\n        \n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                AutomationProperties.AutomationId=\"eyRW_87u20qR7QTCypm2RQ\"\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                AutomationProperties.AutomationId=\"I91auHr_EECzhSZyIfvvzQ\"\n                Content=\"Cancel\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/AddTextDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ModalCustomDialog;\n\npublic partial class AddTextDialog\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.ModalCustomDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.ModalCustomDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<AddTextCustomDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/Demo.ModalCustomDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.ModalCustomDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.ModalCustomDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\"/>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\"/>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ModalCustomDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Custom Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n    \n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox\n            AutomationProperties.AutomationId=\"Vfkrmkr640yWmoMTKUWIbQ\"\n            ItemsSource=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                AutomationProperties.AutomationId=\"FHE_oyWqBEq_9TPaU1yPTQ\"\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                AutomationProperties.AutomationId=\"Dq9ZjnVdFESxu8StkQ8jMw\"\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ModalCustomDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/MainWindowViewModel.cs",
    "content": "using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.ModalCustomDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowDialogCommand = new AsyncRelayCommand(ImplicitShowDialogAsync);\n        ExplicitShowDialogCommand = new AsyncRelayCommand(ExplicitShowDialogAsync);\n    }\n\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public ICommand ImplicitShowDialogCommand { get; }\n\n    public ICommand ExplicitShowDialogCommand { get; }\n\n    private Task ImplicitShowDialogAsync() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialogAsync() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync<AddTextCustomDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextCustomDialogViewModel, Task<bool?>> showDialog)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<AddTextCustomDialogViewModel>();\n\n        bool? success = await showDialog(dialogViewModel);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text!);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.ModalCustomDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalCustomDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.ModalCustomDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/AddTextDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ModalDialog.AddTextDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:AddTextDialogViewModel}}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <StackPanel>\n        <TextBox\n            AutomationProperties.AutomationId=\"Csl8dP93gUGQLj7rVZxDAg\"\n            Text=\"{Binding Text, UpdateSourceTrigger=PropertyChanged}\" />\n        \n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                AutomationProperties.AutomationId=\"eyRW_87u20qR7QTCypm2RQ\"\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                AutomationProperties.AutomationId=\"I91auHr_EECzhSZyIfvvzQ\"\n                Content=\"Cancel\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/AddTextDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ModalDialog;\n\npublic partial class AddTextDialog\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/AddTextDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.ModalDialog;\n\npublic class AddTextDialogViewModel : ObservableObject, IModalDialogViewModel, ICloseable\n{\n    private string? _text;\n    private bool? _dialogResult;\n\n    public AddTextDialogViewModel()\n    {\n        OkCommand = new RelayCommand(Ok);\n    }\n\n    public string? Text\n    {\n        get => _text;\n        set => SetProperty(ref _text, value);\n    }\n\n    public ICommand OkCommand { get; }\n\n    public bool? DialogResult\n    {\n        get => _dialogResult;\n        set => SetProperty(ref _dialogResult, value);\n    }\n\n    public event EventHandler? RequestClose;\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            DialogResult = true;\n            this.RequestClose?.Invoke(this, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.ModalDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ModalDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.ModalDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<AddTextDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/Demo.ModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.ModalDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.ModalDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\"/>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\"/>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ModalDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n    \n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox\n            AutomationProperties.AutomationId=\"Vfkrmkr640yWmoMTKUWIbQ\"\n            ItemsSource=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                AutomationProperties.AutomationId=\"FHE_oyWqBEq_9TPaU1yPTQ\"\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                AutomationProperties.AutomationId=\"Dq9ZjnVdFESxu8StkQ8jMw\"\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ModalDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/MainWindowViewModel.cs",
    "content": "using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.ModalDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowDialogCommand = new AsyncRelayCommand(ImplicitShowDialogAsync);\n        ExplicitShowDialogCommand = new AsyncRelayCommand(ExplicitShowDialogAsync);\n    }\n\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public ICommand ImplicitShowDialogCommand { get; }\n\n    public ICommand ExplicitShowDialogCommand { get; }\n\n    private Task ImplicitShowDialogAsync() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialogAsync() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync<AddTextDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextDialogViewModel, Task<bool?>> showDialog)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<AddTextDialogViewModel>();\n\n        bool? success = await showDialog(dialogViewModel);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text!);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.ModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.ModalDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog.Tests/Demo.ModalDialog.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <Nullable>enable</Nullable>\n    <OutputType>Exe</OutputType>\n    <IsPackable>false</IsPackable>\n    <AssemblyName>Demo.Wpf.ModalDialog.Tests</AssemblyName>\n    <RootNamespace>Demo.Wpf.ModalDialog.Tests</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n    <PackageReference Include=\"Moq\" />\n    <PackageReference Include=\"xunit.v3\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"coverlet.collector\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\Demo.ModalDialog\\Demo.ModalDialog.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.ModalDialog.Tests/MainWindowViewModelTests.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing Xunit;\nusing Moq;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing HanumanInstitute.MvvmDialogs;\nusing System.Linq;\n\nnamespace Demo.Wpf.ModalDialog.Tests;\n\npublic class MainWindowViewModelTests\n{\n    public MainWindowViewModel Model => _model ??= new MainWindowViewModel(DialogService);\n    private MainWindowViewModel? _model;\n\n    public DialogService DialogService => _dialogService ??= new DialogService(MockDialogManager.Object, viewModelFactory: ViewModelFactory);\n    private DialogService? _dialogService;\n\n    public Mock<IDialogManager> MockDialogManager => _mockDialogManager ??= new Mock<IDialogManager>();\n    private Mock<IDialogManager>? _mockDialogManager;\n\n    private object? ViewModelFactory(Type type) => (type) switch\n    {\n        _ when type == typeof(AddTextDialogViewModel) => new AddTextDialogViewModel(),\n        _ => null\n    };\n\n    [Fact]\n    public void ShowDialogCommand_InputValue_AddToList()\n    {\n        var newText = \"abc\";\n        MockDialogManager.Setup(x => x.ShowDialogAsync(It.IsAny<INotifyPropertyChanged>(), It.IsAny<AddTextDialogViewModel>()))\n            .Callback<INotifyPropertyChanged, IModalDialogViewModel>(\n                (ownerViewModel, viewModel) =>\n                {\n                    var vm = (AddTextDialogViewModel)viewModel;\n                    vm.Text = newText;\n                    vm.DialogResult = true;\n                });\n\n        Model.ImplicitShowDialogCommand.Execute(null);\n\n        Assert.Single(Model.Texts);\n        Assert.Equal(newText, Model.Texts.First());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.NonModalCustomDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.NonModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n\n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.NonModalCustomDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<CurrentTimeCustomDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/CurrentTimeCustomDialog.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.NonModalCustomDialog;\n\npublic class CurrentTimeCustomDialog : IView, IViewSync\n{\n    private readonly CurrentTimeDialog _dialog = new();\n\n    public object RefObj => this;\n\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        ViewModel = viewModel;\n    }\n\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        ViewModel = viewModel;\n    }\n\n    public event EventHandler Closed\n    {\n        add => _dialog.Closed += value;\n        remove => _dialog.Closed -= value;\n    }\n\n    public event EventHandler Loaded\n    {\n        add { }\n        remove { }\n    }\n\n    public event EventHandler<CancelEventArgs> Closing\n    {\n        add { }\n        remove { }\n    }\n\n    public INotifyPropertyChanged ViewModel\n    {\n        get => (INotifyPropertyChanged)_dialog.DataContext;\n        set => _dialog.DataContext = value;\n    }\n\n    public IView? Owner\n    {\n        get => _dialog.Owner.AsWrapper();\n        set => _dialog.Owner = value.AsWrapper()?.Ref;\n    }\n\n    public Task ShowDialogAsync(IView owner) => UiExtensions.RunUiAsync(() => ShowDialog(owner));\n\n    public void ShowDialog(IView owner)\n    {\n        _dialog.Owner = owner.GetRef();\n        _dialog.ShowDialog();\n    }\n\n    public void Show(IView? owner)\n    {\n        _dialog.Owner = owner.GetRef();\n        _dialog.Show();\n    }\n\n    public void Activate() => _dialog.Activate();\n\n    public void Close() => _dialog.Close();\n\n    public bool IsEnabled\n    {\n        get => _dialog.IsEnabled;\n        set => _dialog.IsEnabled = value;\n    }\n\n    public bool IsVisible => _dialog.IsVisible;\n\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/CurrentTimeCustomDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing System.Windows.Threading;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\n\nnamespace Demo.Wpf.NonModalCustomDialog;\n\npublic class CurrentTimeCustomDialogViewModel : ObservableObject\n{\n    // ReSharper disable once NotAccessedField.Local\n    private DispatcherTimer? _timer;\n\n    public CurrentTimeCustomDialogViewModel()\n    {\n        StartClockCommand = new RelayCommand(StartClock);\n    }\n\n    public ICommand StartClockCommand { get; }\n\n    public DateTime CurrentTime => DateTime.Now;\n\n    private void StartClock()\n    {\n        _timer = new DispatcherTimer(\n            TimeSpan.FromSeconds(1),\n            DispatcherPriority.Normal,\n            OnTick,\n            Dispatcher.CurrentDispatcher);\n    }\n\n    private void OnTick(object? sender, EventArgs e)\n    {\n        OnPropertyChanged(nameof(CurrentTime));\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/CurrentTimeDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.NonModalCustomDialog.CurrentTimeDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:i=\"http://schemas.microsoft.com/xaml/behaviors\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.NonModalCustomDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    Width=\"200\"\n    Height=\"100\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:CurrentTimeCustomDialogViewModel}}\">\n    \n    <i:Interaction.Triggers>\n        <i:EventTrigger EventName=\"Loaded\">\n            <i:InvokeCommandAction Command=\"{Binding StartClockCommand}\" />\n        </i:EventTrigger>\n    </i:Interaction.Triggers>\n\n    <TextBlock\n        AutomationProperties.AutomationId=\"n_Mu0TdFak-4VJD8RosMEQ\"\n        HorizontalAlignment=\"Center\"\n        VerticalAlignment=\"Center\"\n        Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/CurrentTimeDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.NonModalCustomDialog;\n\npublic partial class CurrentTimeDialog\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/Demo.NonModalCustomDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.NonModalCustomDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.NonModalCustomDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n    <PackageReference Include=\"Microsoft.Xaml.Behaviors.Wpf\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\"/>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.NonModalCustomDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Non-Modal Custom Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <UniformGrid Rows=\"2\">\n        <Button\n            AutomationProperties.AutomationId=\"6U4UYFLlnUKOBx26wvyDOg\"\n            Command=\"{Binding ImplicitShowCommand}\">\n            <TextBlock Text=\"Show current time using the dialog type locator\" />\n        </Button>\n        <Button\n            AutomationProperties.AutomationId=\"yp7kt1tOeEqE5y2KmylhGQ\"\n            Command=\"{Binding ExplicitShowCommand}\">\n            <TextBlock Text=\"Show current time by specifying dialog type\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.NonModalCustomDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.NonModalCustomDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowCommand = new RelayCommand(ImplicitShow);\n        ExplicitShowCommand = new RelayCommand(ExplicitShow);\n    }\n\n    public ICommand ImplicitShowCommand { get; }\n\n    public ICommand ExplicitShowCommand { get; }\n\n    private void ImplicitShow()\n    {\n        Show(viewModel => _dialogService.Show(this, viewModel));\n    }\n\n    private void ExplicitShow()\n    {\n        Show(viewModel => _dialogService.Show<CurrentTimeCustomDialog>(this, viewModel));\n    }\n\n    private void Show(Action<CurrentTimeCustomDialogViewModel> show)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeCustomDialogViewModel>();\n        show(dialogViewModel);\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.NonModalCustomDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalCustomDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.NonModalCustomDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.NonModalDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.NonModalDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n\n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.NonModalDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<CurrentTimeDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/CurrentTimeDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.NonModalDialog.CurrentTimeDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:i=\"http://schemas.microsoft.com/xaml/behaviors\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.NonModalDialog\"\n    mc:Ignorable=\"d\"\n    Title=\"Current Time\"\n    WindowStartupLocation=\"CenterOwner\"\n    Width=\"200\"\n    Height=\"100\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:CurrentTimeDialogViewModel}}\">\n    \n    <i:Interaction.Triggers>\n        <i:EventTrigger EventName=\"Loaded\">\n            <i:InvokeCommandAction Command=\"{Binding StartClockCommand}\" />\n        </i:EventTrigger>\n    </i:Interaction.Triggers>\n\n    <TextBlock\n        AutomationProperties.AutomationId=\"n_Mu0TdFak-4VJD8RosMEQ\"\n        HorizontalAlignment=\"Center\"\n        VerticalAlignment=\"Center\"\n        Text=\"{Binding CurrentTime, StringFormat=Current time is {0:HH:mm:ss}}\" />\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/CurrentTimeDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.NonModalDialog;\n\npublic partial class CurrentTimeDialog\n{\n    public CurrentTimeDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/CurrentTimeDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing System.Windows.Threading;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\n\nnamespace Demo.Wpf.NonModalDialog;\n\npublic class CurrentTimeDialogViewModel : ObservableObject\n{\n    // ReSharper disable once NotAccessedField.Local\n    private DispatcherTimer? _timer;\n\n    public CurrentTimeDialogViewModel()\n    {\n        StartClockCommand = new RelayCommand(StartClock);\n    }\n\n    public ICommand StartClockCommand { get; }\n\n    public DateTime CurrentTime => DateTime.Now;\n\n    private void StartClock()\n    {\n        _timer = new DispatcherTimer(\n            TimeSpan.FromSeconds(1),\n            DispatcherPriority.Normal,\n            OnTick,\n            Dispatcher.CurrentDispatcher);\n    }\n\n    private void OnTick(object? sender, EventArgs e)\n    {\n        OnPropertyChanged(nameof(CurrentTime));\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/Demo.NonModalDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.NonModalDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.NonModalDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n    <PackageReference Include=\"Microsoft.Xaml.Behaviors.Wpf\"/>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\"/>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.NonModalDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <UniformGrid Rows=\"2\">\n        <Button\n            AutomationProperties.AutomationId=\"6U4UYFLlnUKOBx26wvyDOg\"\n            Command=\"{Binding ImplicitShowCommand}\">\n            <TextBlock Text=\"Show current time using the dialog type locator\" />\n        </Button>\n        <Button\n            AutomationProperties.AutomationId=\"yp7kt1tOeEqE5y2KmylhGQ\"\n            Command=\"{Binding ExplicitShowCommand}\">\n            <TextBlock Text=\"Show current time by specifying dialog type\" />\n        </Button>\n    </UniformGrid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.NonModalDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/MainWindowViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.NonModalDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowCommand = new RelayCommand(ImplicitShow);\n        ExplicitShowCommand = new RelayCommand(ExplicitShow);\n    }\n\n    public ICommand ImplicitShowCommand { get; }\n\n    public ICommand ExplicitShowCommand { get; }\n\n    private void ImplicitShow()\n    {\n        Show(viewModel => _dialogService.Show(this, viewModel));\n    }\n\n    private void ExplicitShow()\n    {\n        Show(viewModel => _dialogService.Show<CurrentTimeDialog>(this, viewModel));\n    }\n\n    private void Show(Action<CurrentTimeDialogViewModel> show)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<CurrentTimeDialogViewModel>();\n        show(dialogViewModel);\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.NonModalDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.NonModalDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.NonModalDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.OpenFileDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.OpenFileDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.OpenFileDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/Demo.OpenFileDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.OpenFileDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.OpenFileDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\"/>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"OpenMe.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.OpenFileDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Open File Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid VerticalAlignment=\"Stretch\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <ListBox Grid.Column=\"0\" ItemsSource=\"{Binding Paths, Mode=OneWay}\" />\n        <StackPanel Grid.Column=\"1\">\n            <Button Content=\"Open single...\" Command=\"{Binding OpenFile}\" />\n            <Button Content=\"Open multiple...\" Command=\"{Binding OpenFiles}\" />\n            <Button Content=\"Single Async...\" Command=\"{Binding OpenFileAsync}\" />\n            <Button Content=\"Multiple Async...\" Command=\"{Binding OpenFilesAsync}\" />\n            <CheckBox IsChecked=\"{Binding SetOwner}\" Content=\"Set owner\" />\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.OpenFileDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing IOPath = System.IO.Path;\n\nnamespace Demo.Wpf.OpenFileDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public ObservableCollection<string> Paths { get; private set; } = [];\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        OpenFile = new RelayCommand(() => OpenFileImpl(SetOwner ? this : null));\n        OpenFiles = new RelayCommand(() => OpenFilesImpl(SetOwner ? this : null));\n        OpenFileAsync = new AsyncRelayCommand(() => OpenFileImplAsync(SetOwner ? this : null));\n        OpenFilesAsync = new AsyncRelayCommand(() => OpenFilesImplAsync(SetOwner ? this : null));\n    }\n\n    public ICommand OpenFile { get; }\n    public ICommand OpenFiles { get; }\n    public ICommand OpenFileAsync { get; }\n    public ICommand OpenFilesAsync { get; }\n\n    public bool SetOwner\n    {\n        get => _setOwner;\n        set => SetProperty(ref _setOwner, value);\n    }\n    private bool _setOwner = true;\n\n    private void OpenFileImpl(INotifyPropertyChanged? owner)\n    {\n        var settings = GetSettings(false);\n        var result = _dialogService.ShowOpenFileDialog(owner, settings);\n        Paths.Clear();\n        if (result != null)\n        {\n            Paths.Add(result.LocalPath);\n        }\n    }\n\n    private void OpenFilesImpl(INotifyPropertyChanged? owner)\n    {\n        var settings = GetSettings(true);\n        var result = _dialogService.ShowOpenFilesDialog(owner, settings);\n        Paths.Clear();\n        foreach (var item in result)\n        {\n            Paths.Add(item.LocalPath);\n        }\n    }\n\n    private async Task OpenFileImplAsync(INotifyPropertyChanged? owner)\n    {\n        var settings = GetSettings(false);\n        var result = await _dialogService.ShowOpenFileDialogAsync(owner, settings);\n        Paths.Clear();\n        if (result != null)\n        {\n            Paths.Add(result.LocalPath ?? \"\");\n        }\n    }\n\n    private async Task OpenFilesImplAsync(INotifyPropertyChanged? owner)\n    {\n        var settings = GetSettings(true);\n        var result = await _dialogService.ShowOpenFilesDialogAsync(owner, settings);\n        Paths.Clear();\n        foreach (var item in result)\n        {\n            Paths.Add(item.LocalPath ?? \"\");\n        }\n    }\n\n    private static OpenFileDialogSettings GetSettings(bool multiple) => new()\n    {\n        Title = multiple ? \"Open multiple files\" : \"Open single file\",\n        SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!),\n        SuggestedFileName = \"InitialName\",\n        Filters = new List<FileFilter>()\n            {\n                new(\"Text Documents\", \"txt\"),\n                new(\"All Files\", \"*\")\n            }\n    };\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/OpenMe.txt",
    "content": "﻿Hello!"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.OpenFileDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFileDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.OpenFileDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/App.xaml",
    "content": "<Application\n    x:Class=\"Demo.Wpf.OpenFolderDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.OpenFolderDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.OpenFolderDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/Demo.OpenFolderDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.FolderBrowserDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.FolderBrowserDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.OpenFolderDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Folder Browser Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n    \n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <TextBox Grid.Column=\"0\" IsReadOnly=\"True\" Text=\"{Binding Path, Mode=OneWay}\" />\n        <StackPanel Grid.Column=\"1\">\n            <Button Content=\"Browse Sync...\" Command=\"{Binding OpenFolder}\" />\n            <Button Content=\"Browse Async...\" Command=\"{Binding OpenFolderAsync}\" />\n            <CheckBox IsChecked=\"{Binding SetOwner}\" Content=\"Set owner\" />\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.OpenFolderDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/MainWindowViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing IOPath = System.IO.Path;\n\nnamespace Demo.Wpf.OpenFolderDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        OpenFolder = new RelayCommand(() => OpenFolderImpl(SetOwner ? this : null));\n        OpenFolderAsync = new AsyncRelayCommand(() => OpenFolderImplAsync(SetOwner ? this : null));\n    }\n\n    public string? Path\n    {\n        get => _path;\n        private set => SetProperty(ref _path, value);\n    }\n    private string? _path;\n\n    public bool SetOwner\n    {\n        get => _setOwner;\n        set => SetProperty(ref _setOwner, value);\n    }\n    private bool _setOwner = true;\n\n\n    public ICommand OpenFolder { get; }\n    public ICommand OpenFolderAsync { get; }\n\n    private void OpenFolderImpl(INotifyPropertyChanged? owner)\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            Title = \"This is a description\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!)\n        };\n\n        var result = _dialogService.ShowOpenFolderDialog(owner, settings);\n        Path = result?.Path?.LocalPath;\n    }\n\n    private async Task OpenFolderImplAsync(INotifyPropertyChanged? owner)\n    {\n        var settings = new OpenFolderDialogSettings\n        {\n            Title = \"This is a description\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!)\n        };\n\n        var result = await _dialogService.ShowOpenFolderDialogAsync(owner, settings);\n        Path = result?.Path?.LocalPath;\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.OpenFolderDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.OpenFolderDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.OpenFolderDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.SaveFileDialog.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.SaveFileDialog\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.SaveFileDialog;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/Demo.SaveFileDialog.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.SaveFileDialog</RootNamespace>\n    <AssemblyName>Demo.Wpf.SaveFileDialog</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.SaveFileDialog.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Save File Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition />\n            <ColumnDefinition Width=\"Auto\" />\n        </Grid.ColumnDefinitions>\n\n        <TextBox Grid.Column=\"0\" IsReadOnly=\"True\" Text=\"{Binding Path, Mode=OneWay}\" />\n        <StackPanel Grid.Column=\"1\">\n            <Button Content=\"Save Sync...\" Command=\"{Binding SaveFile}\" />\n            <Button Content=\"Save Async...\" Command=\"{Binding SaveFileAsync}\" />\n            <CheckBox IsChecked=\"{Binding SetOwner}\" Content=\"Set owner\" />\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.SaveFileDialog;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/MainWindowViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing IOPath = System.IO.Path;\n\nnamespace Demo.Wpf.SaveFileDialog;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        SaveFile = new RelayCommand(() => SaveFileImpl(SetOwner ? this : null));\n        SaveFileAsync = new AsyncRelayCommand(() => SaveFileImplAsync(SetOwner ? this : null));\n    }\n\n    public string? Path\n    {\n        get => _path;\n        private set => SetProperty(ref _path, value);\n    }\n    private string? _path;\n\n    public bool SetOwner\n    {\n        get => _setOwner;\n        set => SetProperty(ref _setOwner, value);\n    }\n    private bool _setOwner = true;\n\n    public ICommand SaveFile { get; }\n    public ICommand SaveFileAsync { get; }\n\n    private void SaveFileImpl(INotifyPropertyChanged? owner)\n    {\n        var settings = new SaveFileDialogSettings\n        {\n            Title = \"This is the title\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!),\n            Filters = new List<FileFilter>()\n            {\n                new(\"Text Documents\", \"txt\"),\n                new(\"All Files\", \"*\")\n            }\n        };\n\n        var result = _dialogService.ShowSaveFileDialog(owner, settings);\n        Path = result?.LocalPath;\n    }\n\n    private async Task SaveFileImplAsync(INotifyPropertyChanged? owner)\n    {\n        var settings = new SaveFileDialogSettings\n        {\n            Title = \"This is the title\",\n            SuggestedStartLocation = new DesktopDialogStorageFolder(IOPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!),\n            Filters = new List<FileFilter>()\n            {\n                new(\"Text Documents\", \"txt\"),\n                new(\"All Files\", \"*\")\n            }\n        };\n\n        var result = await _dialogService.ShowSaveFileDialogAsync(owner, settings);\n        Path = result?.LocalPath;\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/ViewLocator.cs",
    "content": "using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.SaveFileDialog;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.SaveFileDialog/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.SaveFileDialog;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/AddTextDialog.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.StrongLocator.AddTextDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.StrongLocator\"\n    mc:Ignorable=\"d\"\n    Title=\"Add Text\"\n    WindowStartupLocation=\"CenterOwner\"\n    SizeToContent=\"WidthAndHeight\"\n    ResizeMode=\"NoResize\"\n    d:DataContext=\"{d:DesignInstance {x:Type local:AddTextDialogViewModel}}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <StackPanel>\n        <TextBox\n            AutomationProperties.AutomationId=\"Csl8dP93gUGQLj7rVZxDAg\"\n            Text=\"{Binding Text, UpdateSourceTrigger=PropertyChanged}\" />\n        \n        <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Right\">\n            <Button\n                AutomationProperties.AutomationId=\"eyRW_87u20qR7QTCypm2RQ\"\n                Content=\"OK\"\n                Command=\"{Binding OkCommand}\"\n                IsDefault=\"True\" />\n            <Button\n                AutomationProperties.AutomationId=\"I91auHr_EECzhSZyIfvvzQ\"\n                Content=\"Cancel\"\n                IsCancel=\"True\" />\n        </StackPanel>\n    </StackPanel>\n</Window>"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/AddTextDialog.xaml.cs",
    "content": "﻿namespace Demo.Wpf.StrongLocator;\n\npublic partial class AddTextDialog\n{\n    public AddTextDialog()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/AddTextDialogViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.StrongLocator;\n\npublic class AddTextDialogViewModel : ObservableObject, IModalDialogViewModel, ICloseable\n{\n    private string? _text;\n    private bool? _dialogResult;\n\n    public AddTextDialogViewModel()\n    {\n        OkCommand = new RelayCommand(Ok);\n    }\n\n    public string? Text\n    {\n        get => _text;\n        set => SetProperty(ref _text, value);\n    }\n\n    public ICommand OkCommand { get; }\n\n    public bool? DialogResult\n    {\n        get => _dialogResult;\n        set => SetProperty(ref _dialogResult, value);\n    }\n\n    public event EventHandler? RequestClose;\n\n    private void Ok()\n    {\n        if (!string.IsNullOrEmpty(Text))\n        {\n            DialogResult = true;\n            this.RequestClose?.Invoke(this, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.StrongLocator.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.StrongLocator\"\n    mc:Ignorable=\"d\"\n    StartupUri=\"MainWindow.xaml\">\n    \n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.StrongLocator;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .AddTransient<AddTextDialogViewModel>()\n                .BuildServiceProvider());\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type ListBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\" BasedOn=\"{StaticResource BaseStyle}\"/>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/Demo.StrongLocator.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.StrongLocator</RootNamespace>\n    <AssemblyName>Demo.Wpf.StrongLocator</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.StrongLocator.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n    \n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\" />\n        </Grid.RowDefinitions>\n\n        <ListBox\n            AutomationProperties.AutomationId=\"Vfkrmkr640yWmoMTKUWIbQ\"\n            ItemsSource=\"{Binding Texts}\" />\n\n        <StackPanel Grid.Row=\"1\">\n            <Button\n                AutomationProperties.AutomationId=\"FHE_oyWqBEq_9TPaU1yPTQ\"\n                Command=\"{Binding ImplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text using the dialog type locator...\" />\n            </Button>\n            <Button\n                AutomationProperties.AutomationId=\"Dq9ZjnVdFESxu8StkQ8jMw\"\n                Command=\"{Binding ExplicitShowDialogCommand}\">\n                <TextBlock Text=\"Add text by specifying dialog type...\" />\n            </Button>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.StrongLocator;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/MainWindowViewModel.cs",
    "content": "using System;\nusing System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.StrongLocator;\n\npublic class MainWindowViewModel : ObservableObject\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n\n        ImplicitShowDialogCommand = new AsyncRelayCommand(ImplicitShowDialogAsync);\n        ExplicitShowDialogCommand = new AsyncRelayCommand(ExplicitShowDialogAsync);\n    }\n\n    public ObservableCollection<string> Texts { get; } = new ObservableCollection<string>();\n\n    public ICommand ImplicitShowDialogCommand { get; }\n\n    public ICommand ExplicitShowDialogCommand { get; }\n\n    private Task ImplicitShowDialogAsync() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync(this, viewModel));\n\n    private Task ExplicitShowDialogAsync() =>\n        ShowDialogAsync(viewModel => _dialogService.ShowDialogAsync<AddTextDialog>(this, viewModel));\n\n    private async Task ShowDialogAsync(Func<AddTextDialogViewModel, Task<bool?>> showDialog)\n    {\n        var dialogViewModel = _dialogService.CreateViewModel<AddTextDialogViewModel>();\n\n        bool? success = await showDialog(dialogViewModel);\n        if (success == true)\n        {\n            Texts.Add(dialogViewModel.Text!);\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/ViewLocator.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.StrongLocator;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : StrongViewLocator\n{\n    public ViewLocator()\n    {\n        Register<MainWindowViewModel, MainWindow>();\n        Register<AddTextDialogViewModel, AddTextDialog>();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.StrongLocator/ViewModelLocator.cs",
    "content": "using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.StrongLocator;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Demo.Wpf.ViewEvents.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:local=\"clr-namespace:Demo.Wpf.ViewEvents\"\n    mc:Ignorable=\"d\">\n\n    <Application.Resources>\n        <local:ViewModelLocator\n            x:Key=\"Locator\"\n            d:IsDataSource=\"True\" />\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/App.xaml.cs",
    "content": "﻿using System.Windows;\nusing CommunityToolkit.Mvvm.DependencyInjection;\nusing HanumanInstitute.MvvmDialogs;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\n\nnamespace Demo.Wpf.ViewEvents;\n\npublic partial class App\n{\n    protected override void OnStartup(StartupEventArgs e)\n    {\n        var loggerFactory = LoggerFactory.Create(builder => builder.AddFilter(logLevel => true).AddDebug());\n\n        Ioc.Default.ConfigureServices(\n            new ServiceCollection()\n                .AddSingleton<IDialogService>(new DialogService(\n                    new DialogManager(\n                        viewLocator: new ViewLocator(),\n                        logger: loggerFactory.CreateLogger<DialogManager>()),\n                    viewModelFactory: x => Ioc.Default.GetService(x)))\n                .AddTransient<MainWindowViewModel>()\n                .BuildServiceProvider());\n\n        var dialogService = Ioc.Default.GetRequiredService<IDialogService>();\n        var vm = dialogService.CreateViewModel<MainWindowViewModel>();\n        dialogService.Show(null, vm);\n        //Application.Current.MainWindow = Application.Current.Windows[0];\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/ApplicationResources.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--\n        Named Resources\n    -->\n\n    <Style x:Key=\"BaseStyle\" TargetType=\"{x:Type FrameworkElement}\">\n        <Setter Property=\"Margin\" Value=\"3\"/>\n    </Style>\n    \n    <!--\n        Generic Resources\n    -->\n\n    <Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"MinWidth\" Value=\"75\" />\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBlock}\" BasedOn=\"{StaticResource BaseStyle}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n    </Style>\n    \n</ResourceDictionary>"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/Demo.ViewEvents.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net10.0-windows</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <UseWPF>true</UseWPF>\n    <RootNamespace>Demo.Wpf.ViewEvents</RootNamespace>\n    <AssemblyName>Demo.Wpf.ViewEvents</AssemblyName>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\..\\src\\MvvmDialogs.Wpf\\MvvmDialogs.Wpf.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection\" />\n    <PackageReference Include=\"CommunityToolkit.Mvvm\"/>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\"/>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/MainWindow.xaml",
    "content": "﻿<Window\n    x:Class=\"Demo.Wpf.ViewEvents.MainWindow\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    WindowStartupLocation=\"CenterScreen\"\n    Title=\"Demo - Activate Non-Modal Dialog\"\n    Width=\"300\"\n    Height=\"200\"\n    d:DataContext=\"{Binding Source={StaticResource Locator}, Path=MainWindow}\">\n\n    <Window.Resources>\n        <ResourceDictionary Source=\"ApplicationResources.xaml\" />\n    </Window.Resources>\n\n    <Grid>\n        <TextBlock Text=\"{Binding Text}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/MainWindow.xaml.cs",
    "content": "﻿namespace Demo.Wpf.ViewEvents;\n\npublic partial class MainWindow\n{\n    public MainWindow()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/MainWindowViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Threading.Tasks;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing HanumanInstitute.MvvmDialogs;\n\nnamespace Demo.Wpf.ViewEvents;\n\npublic class MainWindowViewModel : ObservableObject, IViewLoaded, IViewClosing, IViewClosed\n{\n    private readonly IDialogService _dialogService;\n\n    public MainWindowViewModel(IDialogService dialogService)\n    {\n        this._dialogService = dialogService;\n    }\n\n    public string Text\n    {\n        get => _text;\n        set => this.SetProperty(ref _text, value);\n    }\n    private string _text = string.Empty;\n\n    public void OnClosed()\n    {\n        _dialogService.ShowMessageBox(null, \"It's over.\", \"Closed\");\n    }\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        e.Cancel = true;\n    }\n\n    public async Task OnClosingAsync(CancelEventArgs e)\n    {\n        var quit = await _dialogService.ShowMessageBoxAsync(this, \"Do you really want to quit? \", \"Confirmation\", HanumanInstitute.MvvmDialogs.FrameworkDialogs.MessageBoxButton.YesNo);\n        e.Cancel = quit != true;\n    }\n\n    public void OnLoaded()\n    {\n        Text = \"Loaded!\";\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/ViewLocator.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Wpf;\n\nnamespace Demo.Wpf.ViewEvents;\n\n/// <summary>\n/// Maps view models to views in Avalonia.\n/// </summary>\npublic class ViewLocator : ViewLocatorBase\n{\n    /// <inheritdoc />\n    protected override string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"\");\n}\n"
  },
  {
    "path": "samples/Wpf/Demo.ViewEvents/ViewModelLocator.cs",
    "content": "﻿using CommunityToolkit.Mvvm.DependencyInjection;\n\nnamespace Demo.Wpf.ViewEvents;\n\n/// <summary>\n/// This class contains static references to all the view models in the\n/// application and provides an entry point for the bindings.\n/// </summary>\npublic class ViewModelLocator\n{\n    public MainWindowViewModel MainWindow => Ioc.Default.GetRequiredService<MainWindowViewModel>();\n}\n"
  },
  {
    "path": "samples/Wpf/TestBaseClasses/Features/FeatureSteps.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Drawing.Imaging;\nusing System.IO;\nusing NUnit.Framework;\nusing NUnit.Framework.Interfaces;\nusing TechTalk.SpecFlow;\nusing TestStack.White;\nusing TestStack.White.ScreenObjects;\n\nnamespace TestBaseClasses.Features\n{\n    /// <summary>\n    /// Base class for all tests that are driven by SpecFlow.\n    /// </summary>\n    public abstract class FeatureSteps<T> where T : AppScreen\n    {\n        protected Application? Application { get; private set; }\n\n        protected ScreenRepository? ScreenRepository { get; private set; }\n\n        protected T? MainScreen { get; private set; }\n\n        [BeforeScenario]\n        public void InitialBeforeScenario()\n        {\n            Application = LaunchApplication();\n            ScreenRepository = new ScreenRepository(Application.ApplicationSession);\n            MainScreen = GetMainScreen(ScreenRepository);\n        }\n\n        [AfterScenario]\n        public void InitialAfterScenario()\n        {\n            if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)\n            {\n                TakeScreenshot();\n            }\n\n            Application?.Close();\n        }\n\n        protected abstract Application LaunchApplication();\n\n        protected abstract T GetMainScreen(ScreenRepository screenRepository);\n\n        private static void TakeScreenshot()\n        {\n            string directoryName = Path.Combine(\n                TestContext.CurrentContext.TestDirectory,\n                \"FailedTestScreenshots\");\n\n            string filePath = Path.Combine(\n                directoryName,\n                $\"Failed_{TestContext.CurrentContext.Test.FullName}.png\");\n\n            try\n            {\n                if (!Directory.Exists(directoryName))\n                {\n                    Directory.CreateDirectory(directoryName);\n                }\n\n                Desktop.TakeScreenshot(filePath, ImageFormat.Png);\n            }\n            catch (Exception e)\n            {\n                Trace.TraceError($\"Unable to take screenshot and save it to '{filePath}'.{Environment.NewLine}{e}\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "samples/Wpf/TestBaseClasses/TestBaseClasses.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Library</OutputType>\n    <TargetFrameworks>net472</TargetFrameworks>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"coverlet.collector\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n    <PackageReference Include=\"NUnit\" />\n    <PackageReference Include=\"NUnit.Analyzers\" />\n    <PackageReference Include=\"NUnit3TestAdapter\" />\n    <PackageReference Include=\"TestStack.White.ScreenObjects\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Directory.Build.props",
    "content": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n    <LangVersion>latest</LangVersion>\n    <Nullable>enable</Nullable>\n    <VersionPrefix>2.3.0</VersionPrefix>\n    <Authors>Etienne Charland</Authors>\n    <Company>Hanuman Institute</Company>\n    <Product>HanumanInstitute.MvvmDialogs</Product>\n    <Copyright>Copyright © 2009-2026 MVVM Dialogs contributors</Copyright>\n    <NeutralLanguage>en-US</NeutralLanguage>\n    <RepositoryUrl>https://github.com/mysteryx93/HanumanInstitute.MvvmDialogs</RepositoryUrl>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <Description>Library simplifying the concept of opening dialogs from a view model when using\n      MVVM in WPF</Description>\n    <PackageTags>wpf avalonia mvvm dialog window messagebox openfiledialog savefiledialog\n      folderbrowserdialog messagedialog contentdialog fileopenpicker filesavepicker folderpicker\n      android ios mobile xamarin</PackageTags>\n  </PropertyGroup>\n\n</Project>"
  },
  {
    "path": "src/MvvmDialogs/DialogManagerBase.cs",
    "content": "﻿using System.Threading;\nusing Microsoft.Extensions.Logging;\n\n// ReSharper disable MemberCanBePrivate.Global\n// ReSharper disable SuspiciousTypeConversion.Global\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Interface responsible for UI interactions.\n/// </summary>\n/// <typeparam name=\"T\">The base data type of the dialog window for target framework.</typeparam>\npublic abstract class DialogManagerBase<T> : IDialogManager\n{\n    /// <summary>\n    /// Locator responsible for finding a dialog type matching a view model.\n    /// </summary>\n    protected IViewLocator ViewLocator { get; }\n\n    /// <summary>\n    /// A factory to resolve framework dialog types.\n    /// </summary>\n    protected IDialogFactory DialogFactory { get; }\n\n    /// <inheritdoc />\n    public ILogger<IDialogManager>? Logger { get; }\n\n    /// <inheritdoc />\n    public bool AllowConcurrentDialogs { get; set; }\n\n    /// <summary>\n    /// Returns whether the code is running in design mode.\n    /// </summary>\n    protected abstract bool IsDesignMode { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the DisplayManager class.\n    /// </summary>\n    /// <param name=\"viewLocator\">Locator responsible for finding a dialog type matching a view model.</param>\n    /// <param name=\"dialogFactory\">A factory to resolve framework dialog types.</param>\n    /// <param name=\"logger\">A ILogger to capture MvvmDialogs logs.</param>\n    protected DialogManagerBase(IViewLocator viewLocator, IDialogFactory dialogFactory, ILogger<DialogManagerBase<T>>? logger)\n    {\n        ViewLocator = viewLocator;\n        DialogFactory = dialogFactory;\n        DialogFactory.DialogManager = this;\n        Logger = logger;\n    }\n\n    /// <summary>\n    /// Gets or sets whether to raise ViewModel view events when dialog events occur.\n    /// Must be set to False for view navigation because it would re-trigger the same event in loop.\n    /// </summary>\n    protected bool ForwardViewEvents { get; set; } = true;\n\n    /// <inheritdoc />\n    public virtual void Show(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel)\n    {\n        if (IsDesignMode) { return; }\n        Dispatch(\n            () =>\n            {\n                var viewDef = ViewLocator.Locate(viewModel);\n                Logger?.LogInformation(\"View: {View}; ViewModel: {ViewModel}; Owner: {OwnerViewModel}\", viewDef.ViewType, viewModel.GetType(), ownerViewModel?.GetType());\n\n                var dialog = CreateDialog(viewModel, viewDef);\n                dialog.Show(FindViewByViewModelOrThrow(ownerViewModel));\n            });\n    }\n\n    /// <inheritdoc />\n    public virtual async Task ShowDialogAsync(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel)\n    {\n        if (IsDesignMode) { return; }\n        await await DispatchAsync(\n            async () =>\n            {\n                var viewDef = ViewLocator.Locate(viewModel);\n                Logger?.LogInformation(\"View: {View}; ViewModel: {ViewModel}; Owner: {OwnerViewModel}\", viewDef.ViewType, viewModel.GetType(), ownerViewModel.GetType());\n\n                var dialog = CreateDialog(viewModel, viewDef);\n                await dialog.ShowDialogAsync(FindViewByViewModelOrThrow(ownerViewModel)!);\n\n                Logger?.LogInformation(\"View: {View}; Result: {Result}\", viewDef.ViewType, viewModel.DialogResult);\n            });\n    }\n\n    /// <summary>\n    /// Returns the IView with a DataContext equal to specified ViewModel.\n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to search for.</param>\n    /// <returns>A IView, or null.</returns>\n    /// <exception cref=\"InvalidOperationException\">Cannot find View for viewModel type.</exception>\n    protected IView? FindViewByViewModelOrThrow(INotifyPropertyChanged? viewModel)\n    {\n        if (viewModel == null) { return null; }\n        var owner = FindViewByViewModel(viewModel);\n        if (owner == null)\n        {\n            throw new InvalidOperationException($\"Cannot find View for viewModel of type {viewModel.GetType()}\");\n        }\n        return owner;\n    }\n\n    /// <summary>\n    /// Creates a new IWindow from the configured IDialogFactory.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    /// <returns>The new IWindow.</returns>\n    /// <exception cref=\"TypeLoadException\">Could not load view for view model.</exception>\n    protected IView CreateDialog(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        // ReSharper disable once SuspiciousTypeConversion.Global\n        IView? dialog;\n        if (viewDef.TypeDerivesFrom<IView>())\n        {\n            dialog = (IView)viewDef.Create();\n            dialog.Initialize(viewModel, viewDef);\n        }\n        else if (viewDef.TypeDerivesFrom<T>())\n        {\n            dialog = CreateWrapper(viewModel, viewDef);\n        }\n        else\n        {\n            throw new TypeLoadException($\"Only dialogs of type {typeof(T)} or {typeof(IView)} are supported.\");\n        }\n\n        HandleDialogEvents(viewModel, dialog);\n        return dialog;\n    }\n\n    /// <summary>\n    /// Creates a wrapper around a View.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the View.</param>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    protected abstract IView CreateWrapper(INotifyPropertyChanged viewModel, ViewDefinition viewDef);\n\n    /// <summary>\n    /// Creates a wrapper around a View.\n    /// </summary>\n    /// <param name=\"view\">The view to create a wrapper for.</param>\n    protected abstract IView AsWrapper(T view);\n\n    /// <summary>\n    /// Dispatches an action to the UI thread.\n    /// </summary>\n    /// <param name=\"action\">The action to execute on the UI thread.</param>\n    protected abstract void Dispatch(Action action);\n\n    /// <summary>\n    /// Dispatches an asynchronous action to the UI thread.\n    /// </summary>\n    /// <param name=\"action\">The action to execute on the UI thread.</param>\n    /// <typeparam name=\"D\">The return type of the dispatched function.</typeparam>\n    protected abstract Task<D> DispatchAsync<D>(Func<D> action);\n\n    /// <summary>\n    /// Handles window events. By default, ICloseable and IActivable are handled.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <param name=\"dialog\">The dialog being shown.</param>\n    public virtual void HandleDialogEvents(INotifyPropertyChanged viewModel, IView dialog)\n    {\n        if (viewModel is ICloseable closable)\n        {\n            closable.RequestClose += (_, _) => Dispatch(dialog.Close);\n        }\n        if (viewModel is IActivable activable)\n        {\n            activable.RequestActivate += (_, _) => Dispatch(dialog.Activate);\n        }\n        if (viewModel is IViewClosing)\n        {\n            dialog.Closing += (_, e) => View_Closing(dialog, e);\n        }\n        if (ForwardViewEvents)\n        {\n            if (viewModel is IViewLoaded loaded)\n            {\n                dialog.Loaded += (_, _) => loaded.OnLoaded();\n            }\n            if (viewModel is IViewClosed closed)\n            {\n                dialog.Closed += (_, _) => closed.OnClosed();\n            }\n        }\n    }\n\n    private bool _isViewClosing;\n\n    /// <summary>\n    /// Called when the view is closing.\n    /// </summary>\n    public async void View_Closing(IView dialog, CancelEventArgs e)\n    {\n        if (dialog.ViewModel is not IViewClosing closing || dialog.ClosingConfirmed)\n        {\n            dialog.ClosingConfirmed = true;\n            return;\n        }\n        // Prevent re-closing while prompting. \n        if (_isViewClosing)\n        {\n            e.Cancel = true;\n            return;\n        }\n\n        _isViewClosing = true;\n        try\n        {\n            // ReSharper disable once MethodHasAsyncOverload\n            closing.OnClosing(e);\n            if (e.Cancel)\n            {\n                // caller returns and window stays open\n                await Task.Yield();\n\n                await closing.OnClosingAsync(e).ConfigureAwait(true);\n                if (!e.Cancel)\n                {\n                    dialog.ClosingConfirmed = true;\n                    dialog.Close();\n                }\n            }\n            else\n            {\n                dialog.ClosingConfirmed = true;\n            }\n        }\n        finally\n        {\n            _isViewClosing = false;\n        }\n    }\n\n    private readonly SemaphoreSlim _semaphoreShow = new(1);\n\n    /// <inheritdoc />\n    public virtual async Task<object?> ShowFrameworkDialogAsync<TSettings>(\n        INotifyPropertyChanged? ownerViewModel,\n        TSettings settings,\n        Func<object?, string>? resultToString = null)\n        where TSettings : DialogSettingsBase\n    {\n        if (IsDesignMode) { return null; }\n\n        if (!AllowConcurrentDialogs)\n        {\n            await _semaphoreShow.WaitAsync();\n        }\n\n        try\n        {\n            Logger?.LogInformation(\"Dialog: {Dialog}; Title: {Title}\", settings.GetType().Name, settings.Title);\n\n            var result = await await DispatchAsync(\n                async () =>\n                {\n                    IView? owner;\n                    var isDummyOwner = false;\n                    if (ownerViewModel != null)\n                    {\n                        owner = FindViewByViewModel(ownerViewModel) ??\n                                throw new ArgumentException($\"No view found with specified ownerViewModel of type {ownerViewModel.GetType()}.\");\n                    }\n                    else\n                    {\n                        // If no owner is specified, get MainWindow if available, otherwise create a dummy parent window.\n                        owner = GetMainWindow();\n                        if (owner == null || !owner.IsVisible)\n                        {\n                            owner = GetDummyWindow();\n                            isDummyOwner = true;\n                        }\n                    }\n\n                    var result = await DialogFactory.ShowDialogAsync(owner, settings).ConfigureAwait(true);\n                    if (isDummyOwner)\n                    {\n                        owner!.Close();\n                    }\n                    return result;\n                }).ConfigureAwait(true);\n\n            Logger?.LogInformation(\"Dialog: {Dialog}; Result: {Result}\", settings.GetType().Name, resultToString != null ? resultToString(result) : result?.ToString());\n            return result;\n        }\n        finally\n        {\n            if (!AllowConcurrentDialogs)\n            {\n                _semaphoreShow.Release();\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public abstract IView? FindViewByViewModel(INotifyPropertyChanged viewModel);\n\n    /// <inheritdoc />\n    public abstract IView? GetMainWindow();\n\n    /// <inheritdoc />\n    public abstract IView? GetDummyWindow();\n}\n"
  },
  {
    "path": "src/MvvmDialogs/DialogNotFoundException.cs",
    "content": "﻿#if NETSTANDARD2_0_OR_GREATER\nusing System.Runtime.Serialization;\n#endif\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Exception thrown by <see cref=\"DialogServiceBase\"/> when a certain dialog isn't found.\n/// </summary>\n#if NETSTANDARD2_0_OR_GREATER\n[Serializable]\n#endif\npublic class DialogNotFoundException : Exception\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogNotFoundException\"/> class.\n    /// </summary>\n    /// <param name=\"message\">The error message that explains the reason for the exception.</param>\n    /// <param name=\"innerException\">The exception that is the cause of the current exception, or a null reference if no\n    /// inner exception is specified.</param>\n    public DialogNotFoundException(string? message = null, Exception? innerException = null)\n        : base(message, innerException)\n    {\n    }\n#if NETSTANDARD2_0_OR_GREATER\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogNotFoundException\"/> class.\n    /// </summary>\n    /// <param name=\"info\">The <see cref=\"SerializationInfo\" /> that holds the serialized object data about the\n    /// exception being thrown.</param>\n    /// <param name=\"context\">The <see cref=\"StreamingContext\" /> that contains contextual information about the\n    /// source or destination.</param>\n    protected DialogNotFoundException(SerializationInfo info, StreamingContext context)\n        : base(info, context)\n    {\n    }\n#endif\n}\n"
  },
  {
    "path": "src/MvvmDialogs/DialogServiceBase.cs",
    "content": "﻿using Microsoft.Extensions.Logging;\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Class abstracting the interaction between view models and views when it comes to\n/// opening dialogs using the MVVM pattern in WPF.\n/// </summary>\npublic abstract class DialogServiceBase : IDialogService\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogServiceBase\"/> class.\n    /// </summary>\n    /// <param name=\"dialogManager\">Class responsible to manage UI interactions.</param>\n    /// <param name=\"viewModelFactory\">Function used to create view model instances. This function is used only by <see cref=\"IDialogService.CreateViewModel\"/> and is not used internally.</param>\n    protected DialogServiceBase(IDialogManager dialogManager,\n        Func<Type, object?>? viewModelFactory)\n    {\n        DialogManager = dialogManager;\n        ViewModelFactory = viewModelFactory;\n    }\n\n    /// <summary>\n    /// Factory responsible for creating dialogs.\n    /// </summary>\n    public IDialogManager DialogManager { get; }\n\n    /// <summary>\n    /// Function used to create view model instances. This function is used only by <see cref=\"IDialogService.CreateViewModel\"/> and is not used internally.\n    /// </summary>\n    protected Func<Type, object?>? ViewModelFactory { get; }\n\n    /// <inheritdoc />\n    public void Show(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel) =>\n        ShowInternal(ownerViewModel, viewModel);\n\n    /// <inheritdoc />\n    public void Show<T>(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel) =>\n        ShowInternal(ownerViewModel, viewModel);\n\n    /// <inheritdoc />\n    public Task<bool?> ShowDialogAsync(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel) =>\n        ShowDialogInternalAsync(ownerViewModel, viewModel);\n\n    /// <inheritdoc />\n    public Task<bool?> ShowDialogAsync<T>(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel) =>\n        ShowDialogInternalAsync(ownerViewModel, viewModel);\n\n    /// <summary>\n    /// Attempts to bring the window to the foreground and activates it.\n    /// This method is not thread-safe and must be run on the UI thread.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the window.</param>\n    /// <returns>true if the Window was successfully activated; otherwise, false.</returns>\n    public bool Activate(INotifyPropertyChanged viewModel)\n    {\n        if (viewModel == null) throw new ArgumentNullException(nameof(viewModel));\n\n        var window = DialogManager.FindViewByViewModel(viewModel);\n        DialogManager.Logger?.LogInformation(\"Activate View: {View}; ViewModel: {ViewModel}\", window?.RefObj?.GetType(),\n            viewModel.GetType());\n        window?.Activate();\n        return window != null;\n    }\n\n    /// <summary>\n    /// Closes a non-modal dialog that previously was opened using <see cref=\"DialogServiceBase.Show\"/>.\n    /// This method is not thread-safe and must be run on the UI thread.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the dialog to close.</param>\n    /// <returns>true if the Window was successfully closed; otherwise, false.</returns>\n    public bool Close(INotifyPropertyChanged viewModel)\n    {\n        if (viewModel == null) throw new ArgumentNullException(nameof(viewModel));\n\n        var window = DialogManager.FindViewByViewModel(viewModel);\n        DialogManager.Logger?.LogInformation(\"Close View: {View}; ViewModel: {ViewModel}\", window?.RefObj.GetType(), viewModel.GetType());\n        if (window != null)\n        {\n            try\n            {\n                window.Close();\n                return true;\n            }\n            catch (Exception e)\n            {\n                DialogManager.Logger?.LogWarning(e, \"Failed to close dialog\");\n            }\n        }\n        return false;\n    }\n\n    /// <summary>\n    /// Displays a non-modal dialog of specified type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    protected void ShowInternal(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel)\n    {\n        if (viewModel == null) throw new ArgumentNullException(nameof(viewModel));\n\n        DialogManager.Show(ownerViewModel, viewModel);\n    }\n\n    /// <summary>\n    /// Displays a modal dialog of specified type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    protected async Task<bool?> ShowDialogInternalAsync(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel)\n    {\n        if (ownerViewModel == null) throw new ArgumentNullException(nameof(ownerViewModel));\n        if (viewModel == null) throw new ArgumentNullException(nameof(viewModel));\n\n        await DialogManager.ShowDialogAsync(ownerViewModel, viewModel);\n        return viewModel.DialogResult;\n    }\n\n    /// <inheritdoc />\n    public object CreateViewModel(Type type) =>\n        ViewModelFactory?.Invoke(type) ??\n        throw new NullReferenceException(\n            $\"ViewModelFactory was not set in the DialogService constructor or the function returned null for type '{type}'.\");\n\n    /// <inheritdoc />\n    public T CreateViewModel<T>() =>\n        (T?)ViewModelFactory?.Invoke(typeof(T)) ??\n        throw new NullReferenceException(\n            $\"ViewModelFactory was not set in the DialogService constructor or the function returned null for type '{typeof(T)}'.\");\n}\n"
  },
  {
    "path": "src/MvvmDialogs/DialogServiceExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n// ReSharper disable once CheckNamespace\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Provides IDialogService extensions for standard dialog methods.\n/// </summary>\npublic static class DialogServiceExtensions\n{\n    /// <summary>\n    /// Displays a message box that has a message, title bar caption, button, and icon; and\n    /// that accepts a default message box result and returns a result.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"text\">A <see cref=\"string\"/> that specifies the text to display.</param>\n    /// <param name=\"title\">A <see cref=\"string\"/> that specifies the title bar caption to display. Default value is an empty string.</param>\n    /// <param name=\"button\">A <see cref=\"MessageBoxButton\"/> value that specifies which button or buttons to display.\n    /// Default value is <see cref=\"MessageBoxButton.Ok\"/>.</param>\n    /// <param name=\"icon\">A <see cref=\"MessageBoxImage\"/> value that specifies the icon to display.\n    /// Default value is <see cref=\"MessageBoxImage.None\"/>.</param>\n    /// <param name=\"defaultResult\">Specifies the value of the button selected by default. Default value is true.</param>\n    /// <returns>A value that specifies which message box button is clicked by the user. True=OK/Yes, False=No, Null=Cancel</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static Task<bool?> ShowMessageBoxAsync(\n        this IDialogService service,\n        INotifyPropertyChanged? ownerViewModel,\n        string text,\n        string title = \"\",\n        MessageBoxButton button = MessageBoxButton.Ok,\n        MessageBoxImage icon = MessageBoxImage.None,\n        bool? defaultResult = true)\n    {\n        var settings = new MessageBoxSettings\n        {\n            Content = text,\n            Title = title,\n            Button = button,\n            Icon = icon,\n            DefaultValue = defaultResult\n        };\n\n        return ShowMessageBoxAsync(service, ownerViewModel, settings);\n    }\n\n    /// <summary>\n    /// Displays a message box that has a message, title bar caption, button, and icon; and\n    /// that accepts a default message box result and returns a result.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the message box dialog.</param>\n    /// <returns>A value that specifies which message box button is clicked by the user. True=OK/Yes, False=No, Null=Cancel</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<bool?> ShowMessageBoxAsync(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        MessageBoxSettings? settings = null)\n    {\n        return (bool?)await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings ?? new MessageBoxSettings()).ConfigureAwait(true);\n    }\n\n    /// <summary>\n    /// Displays the OpenFileDialog to select a single file.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the open file dialog.</param>\n    /// <returns>The file selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<IDialogStorageFile?> ShowOpenFileDialogAsync(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFileDialogSettings? settings = null)\n    {\n        settings ??= new OpenFileDialogSettings();\n        settings.AllowMultiple ??= false;\n        var result = await ShowOpenFilesDialogAsync(service, ownerViewModel, settings).ConfigureAwait(true);\n        return result.Count > 0 ? result[0] : null;\n    }\n\n    /// <summary>\n    /// Displays the OpenFileDialog to select multiple files.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the open file dialog.</param>\n    /// <returns>The list of files selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<IReadOnlyList<IDialogStorageFile>> ShowOpenFilesDialogAsync(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFileDialogSettings? settings = null)\n    {\n        settings ??= new OpenFileDialogSettings();\n        settings.AllowMultiple ??= true;\n        return (IReadOnlyList<IDialogStorageFile>)(await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings, x => string.Join(\", \", x)).ConfigureAwait(true))!;\n    }\n\n    /// <summary>\n    /// Displays the SaveFileDialog.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the save file dialog.</param>\n    /// <returns>The path to the file selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<IDialogStorageFile?> ShowSaveFileDialogAsync(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        SaveFileDialogSettings? settings = null)\n    {\n        return (IDialogStorageFile?)await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings ?? new SaveFileDialogSettings()).ConfigureAwait(true);\n    }\n\n    /// <summary>\n    /// Displays the FolderBrowserDialog to select multiple folders.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the folder browser dialog.</param>\n    /// <returns>The path of the folder selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<IReadOnlyList<IDialogStorageFolder>> ShowOpenFoldersDialogAsync(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFolderDialogSettings? settings = null)\n    {\n        return (IReadOnlyList<IDialogStorageFolder>)(await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings ?? new OpenFolderDialogSettings()).ConfigureAwait(true))!;\n    }\n\n    /// <summary>\n    /// Displays the FolderBrowserDialog to select a single folder.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the folder browser dialog.</param>\n    /// <returns>The path of the folder selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<IDialogStorageFolder?> ShowOpenFolderDialogAsync(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFolderDialogSettings? settings = null)\n    {\n        settings ??= new OpenFolderDialogSettings();\n        settings.AllowMultiple ??= false;\n        var result = await ShowOpenFoldersDialogAsync(service, ownerViewModel, settings).ConfigureAwait(true);\n        return result?.FirstOrDefault();\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/DialogSettingsBase.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Base class for dialog settings.\n/// </summary>\npublic abstract class DialogSettingsBase\n{\n    /// <summary>\n    /// Gets or sets the dialog title.\n    /// </summary>\n    public string Title { get; set; } = string.Empty;\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/DesktopDialogStorageFactory.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <inheritdoc />\npublic class DesktopDialogStorageFactory : IDesktopDialogStorageFactory\n{\n    /// <inheritdoc />\n    public IDialogStorageFile GetFile(string filePath) => new DesktopDialogStorageFile(filePath);\n\n    /// <inheritdoc />\n    public IDialogStorageFolder GetDirectory(string path) => new DesktopDialogStorageFolder(path);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/DesktopDialogStorageFile.cs",
    "content": "﻿using System.IO;\n\nnamespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <inheritdoc cref=\"IDialogStorageFile\"/>\npublic class DesktopDialogStorageFile : DesktopDialogStorageItem, IDialogStorageFile\n{\n    private readonly FileInfo _info;\n    /// <summary>\n    /// Returns file system information about the file.\n    /// </summary>\n    public FileInfo Info => _info;\n\n    /// <summary>\n    /// Initializes a new instance of DesktopDialogStorageFile to expose a path.\n    /// </summary>\n    /// <param name=\"info\">Information of the file to wrap.</param>\n    public DesktopDialogStorageFile(FileInfo info)\n    {\n        _info = info;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of DesktopDialogStorageFile to expose a path.\n    /// </summary>\n    /// <param name=\"path\">The path of the file to get information for.</param>\n    public DesktopDialogStorageFile(string path)\n    {\n        _info = new FileInfo(path);\n        if (_info == null)\n        {\n            throw new FileNotFoundException($\"File '{path}' not found.\");\n        }\n    }\n\n    /// <inheritdoc />\n    protected override FileSystemInfo InfoBase => _info;\n\n    /// <inheritdoc />\n    protected override DirectoryInfo? Parent => _info.Directory;\n\n    /// <inheritdoc />\n    public Task<Stream> OpenReadAsync() => Task.Run<Stream>(() => File.OpenRead(_info.FullName));\n\n    /// <inheritdoc />\n    public Task<Stream> OpenWriteAsync() => Task.Run<Stream>(() => File.OpenWrite(_info.FullName));\n\n    /// <inheritdoc />\n    public override Task<IDialogStorageItem?> MoveAsync(IDialogStorageFolder destination)\n    {\n        if (destination is DesktopDialogStorageFolder storageFolder)\n        {\n            var newPath = System.IO.Path.Combine(storageFolder.Info.FullName, _info.Name);\n            _info.MoveTo(newPath);\n            return Task.FromResult<IDialogStorageItem?>(new DesktopDialogStorageFile(destination.LocalPath));\n        }\n        return Task.FromResult<IDialogStorageItem?>(null);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/DesktopDialogStorageFolder.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\n\nnamespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <inheritdoc cref=\"IDialogStorageFolder\"/>\npublic class DesktopDialogStorageFolder : DesktopDialogStorageItem, IDialogStorageFolder\n{\n    private readonly DirectoryInfo _info;\n    /// <summary>\n    /// Returns file system information about the file.\n    /// </summary>\n    public DirectoryInfo Info => _info;\n\n    /// <summary>\n    /// Initializes a new instance of DialogStorageFolder to expose a path.\n    /// </summary>\n    /// <param name=\"info\">Information of the folder to wrap.</param>\n    public DesktopDialogStorageFolder(DirectoryInfo info)\n    {\n        _info = info;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of DialogStorageFolder to expose a path.\n    /// </summary>\n    /// <param name=\"path\">The path of the folder to get information for.</param>\n    public DesktopDialogStorageFolder(string path)\n    {\n        _info = new DirectoryInfo(path);\n    }\n\n    /// <inheritdoc />\n    protected override FileSystemInfo InfoBase => _info;\n\n    /// <inheritdoc />\n    protected override DirectoryInfo? Parent => _info.Parent;\n\n    /// <inheritdoc />\n    public IAsyncEnumerable<IDialogStorageItem> GetItemsAsync() => GetItemsAsync(string.Empty, SearchOption.TopDirectoryOnly);\n\n    private IAsyncEnumerable<IDialogStorageItem> GetItemsAsync(string searchPattern) => GetItemsAsync(searchPattern, SearchOption.TopDirectoryOnly);\n\n    private async IAsyncEnumerable<IDialogStorageItem> GetItemsAsync(string searchPattern, SearchOption searchOption)\n    {\n        var items = _info.EnumerateFileSystemInfos(searchPattern, searchOption)\n            .Select(x => x is FileInfo f ? (IDialogStorageItem)new DesktopDialogStorageFile(f) : new DesktopDialogStorageFolder((DirectoryInfo)x));\n\n        foreach (var item in items)\n        {\n            yield return item;\n        }\n    }\n\n    // /// <inheritdoc />\n    // public IEnumerable<FileSystemInfo> EnumeratePathInfos(string searchPattern, SearchOption searchOption) => _info.EnumerateFileSystemInfos(searchPattern, searchOption);\n\n    /// <inheritdoc />\n    public Task<IDialogStorageFile?> CreateFileAsync(string name)\n    {\n        var path = System.IO.Path.Combine(LocalPath, name);\n        File.Create(path);\n        return Task.FromResult<IDialogStorageFile?>(new DesktopDialogStorageFile(path));\n    }\n\n    /// <inheritdoc />\n    public Task<IDialogStorageFolder?> CreateFolderAsync(string name)\n    {\n        var path = System.IO.Path.Combine(LocalPath, name);\n        Directory.CreateDirectory(path);\n        return Task.FromResult<IDialogStorageFolder?>(new DesktopDialogStorageFolder(path));\n    }\n\n    /// <inheritdoc />\n    public override Task<IDialogStorageItem?> MoveAsync(IDialogStorageFolder destination)\n    {\n        if (destination is DesktopDialogStorageFolder storageFolder)\n        {\n            var newPath = System.IO.Path.Combine(storageFolder.Info.FullName, Info.Name);\n            Info.MoveTo(newPath);\n\n            return Task.FromResult<IDialogStorageItem?>(new DesktopDialogStorageFolder(newPath));\n        }\n\n        return Task.FromResult<IDialogStorageItem?>(null);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/DesktopDialogStorageItem.cs",
    "content": "﻿using System.IO;\n\nnamespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <inheritdoc />\npublic abstract class DesktopDialogStorageItem : IDialogStorageItem\n{\n    /// <summary>\n    /// Information about the file or directory.\n    /// </summary>\n    protected abstract FileSystemInfo InfoBase { get; }\n\n    /// <inheritdoc />\n    public string Name => InfoBase.Name;\n\n    /// <inheritdoc />\n    public Uri Path => _path ??= new Uri(InfoBase.FullName);\n    private Uri? _path;\n\n    /// <inheritdoc />\n    public string LocalPath => Path.LocalPath;\n\n    /// <inheritdoc />\n    public Task<DesktopDialogStorageItemProperties> GetBasicPropertiesAsync()\n    {\n        if (InfoBase.Exists)\n        {\n            var length = InfoBase is FileInfo f ? (ulong?)f.Length : null;\n            return Task.FromResult(new DesktopDialogStorageItemProperties(length, InfoBase.CreationTimeUtc, InfoBase.LastWriteTimeUtc));\n        }\n        return Task.FromResult(new DesktopDialogStorageItemProperties());\n    }\n\n    /// <inheritdoc />\n    public bool CanBookmark => true;\n\n    /// <inheritdoc />\n    public Task<string?> SaveBookmarkAsync() => Task.FromResult((string?)InfoBase.FullName);\n\n    /// <inheritdoc />\n    public Task<IDialogStorageFolder?> GetParentAsync()\n    {\n        var parent = Parent;\n        return Task.FromResult<IDialogStorageFolder?>(parent != null ? new DesktopDialogStorageFolder(parent) : null);\n    }\n\n    /// <summary>\n    /// \n    /// </summary>\n    protected abstract DirectoryInfo? Parent { get; }\n\n    /// <inheritdoc />\n    public Task DeleteAsync() => Task.Run(() => InfoBase.Delete());\n\n    /// <inheritdoc />\n    public abstract Task<IDialogStorageItem?> MoveAsync(IDialogStorageFolder destination);\n\n    /// <inheritdoc />\n    public void Dispose() { }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/DesktopDialogStorageItemProperties.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <summary>\n/// Provides access to the content-related properties of an item (like a file or folder).\n/// </summary>\npublic class DesktopDialogStorageItemProperties\n{\n    /// <summary>\n    /// Initializes a new instance of the DialogStorageItemProperties class.\n    /// </summary>\n    /// <param name=\"size\">The size of the file in bytes.</param>\n    /// <param name=\"dateCreated\">The date and time that the current folder was created.</param>\n    /// <param name=\"dateModified\">The date and time of the last time the file was modified.</param>\n    public DesktopDialogStorageItemProperties(\n        ulong? size = null,\n        DateTimeOffset? dateCreated = null,\n        DateTimeOffset? dateModified = null)\n    {\n        Size = size;\n        DateCreated = dateCreated;\n        DateModified = dateModified;\n    }\n\n    /// <summary>\n    /// Gets the size of the file in bytes.\n    /// </summary>\n    /// <remarks>\n    /// Can be null if property is not available.\n    /// </remarks>\n    public ulong? Size { get; }\n\n    /// <summary>\n    /// Gets the date and time that the current folder was created.\n    /// </summary>\n    /// <remarks>\n    /// Can be null if property is not available.\n    /// </remarks>\n    public DateTimeOffset? DateCreated { get; }\n\n    /// <summary>\n    /// Gets the date and time of the last time the file was modified.\n    /// </summary>\n    /// <remarks>\n    /// Can be null if property is not available.\n    /// </remarks>\n    public DateTimeOffset? DateModified { get; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/IDesktopDialogStorageFactory.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <summary>\n/// Allows creating dialog storage classes to get file/folder information. Direct file access will only work in desktop OS.\n/// </summary>\npublic interface IDesktopDialogStorageFactory\n{\n    /// <summary>\n    /// Creates a new instance of <see cref=\"IDialogStorageFile\"/> to get information about a file path.\n    /// </summary>\n    /// <param name=\"filePath\">The path of the file to get information for.</param>\n    /// <returns>A new <see cref=\"IDialogStorageFile\"/> instance.</returns>\n    IDialogStorageFile GetFile(string filePath);\n\n    /// <summary>\n    /// Creates a new instance of <see cref=\"IDialogStorageFolder\"/> to get information about a directory path.\n    /// </summary>\n    /// <param name=\"path\">The path of the directory to get information for.</param>\n    /// <returns>A new <see cref=\"IDialogStorageFolder\"/> instance.</returns>\n    IDialogStorageFolder GetDirectory(string path);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/IDialogStorageFile.cs",
    "content": "﻿using System.IO;\n\nnamespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <summary>\n/// Represents a file. Provides information about the file and its contents, and ways to manipulate them.\n/// </summary>\npublic interface IDialogStorageFile : IDialogStorageItem\n{\n    /// <summary>\n    /// Opens a stream for read access.\n    /// </summary>\n    Task<Stream> OpenReadAsync();\n\n    /// <summary>\n    /// Opens stream for writing to the file.\n    /// </summary>\n    Task<Stream> OpenWriteAsync();\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/IDialogStorageFolder.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <summary>\n/// Manipulates folders and their contents, and provides information about them.\n/// </summary>\npublic interface IDialogStorageFolder : IDialogStorageItem\n{\n    /// <summary>\n    /// Gets the files and subfolders in the current folder.\n    /// </summary>\n    /// <exception cref=\"T:System.IO.DirectoryNotFoundException\">The path encapsulated in the <see cref=\"T:System.IO.DirectoryInfo\" /> object is invalid (for example, it is on an unmapped drive).</exception>\n    /// <exception cref=\"T:System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    /// <returns>When this method completes successfully, it returns a list of the files and folders in the current folder. Each item in the list is represented by an <see cref=\"IDialogStorageItem\"/> implementation object.</returns>\n    IAsyncEnumerable<IDialogStorageItem> GetItemsAsync();\n\n    // /// <summary>\n    // /// Gets the files and subfolders in the current folder.\n    // /// </summary>\n    // /// <param name=\"searchPattern\">The search string to match against the names of directories.  This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.</param>\n    // /// <exception cref=\"T:System.IO.DirectoryNotFoundException\">The path encapsulated in the <see cref=\"T:System.IO.DirectoryInfo\" /> object is invalid (for example, it is on an unmapped drive).</exception>\n    // /// <exception cref=\"T:System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    // /// <returns>When this method completes successfully, it returns a list of the files and folders in the current folder. Each item in the list is represented by an <see cref=\"IDialogStorageItem\"/> implementation object.</returns>\n    // Task<IEnumerable<IDialogStorageItem>> GetItemsAsync(string searchPattern);\n    // /// <summary>\n    // /// Gets the files and subfolders in the current folder.\n    // /// </summary>\n    // /// <param name=\"searchPattern\">The search string to match against the names of directories.  This parameter can contain a combination of valid literal path and wildcard (* and ?) characters, but it doesn't support regular expressions.</param>\n    // /// <param name=\"searchOption\">One of the enumeration values that specifies whether the search operation should include only the current directory or all subdirectories. The default value is <see cref=\"F:System.IO.SearchOption.TopDirectoryOnly\" />.</param>\n    // /// <exception cref=\"T:System.IO.DirectoryNotFoundException\">The path encapsulated in the <see cref=\"T:System.IO.DirectoryInfo\" /> object is invalid (for example, it is on an unmapped drive).</exception>\n    // /// <exception cref=\"T:System.Security.SecurityException\">The caller does not have the required permission.</exception>\n    // /// <returns>When this method completes successfully, it returns a list of the files and folders in the current folder. Each item in the list is represented by an <see cref=\"IDialogStorageItem\"/> implementation object.</returns>\n    // Task<IEnumerable<IDialogStorageItem>> GetItemsAsync(string searchPattern, SearchOption searchOption);\n\n    /// <summary>\n    /// Creates a file with specified name as a child of the current storage folder\n    /// </summary>\n    /// <param name=\"name\">The display name</param>\n    /// <returns>A new <see cref=\"IDialogStorageFile\"/> pointing to the moved file. If not null, the current storage item becomes invalid</returns>\n    Task<IDialogStorageFile?> CreateFileAsync(string name);\n\n    /// <summary>\n    /// Creates a folder with specified name as a child of the current storage folder\n    /// </summary>\n    /// <param name=\"name\">The display name</param>\n    /// <returns>A new <see cref=\"IDialogStorageFolder\"/> pointing to the moved file. If not null, the current storage item becomes invalid</returns>\n    Task<IDialogStorageFolder?> CreateFolderAsync(string name);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FileSystem/IDialogStorageItem.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FileSystem;\n\n/// <summary>\n/// Manipulates storage items (files and folders) and their contents, and provides information about them\n/// </summary>\n/// <remarks>\n/// This interface inherits <see cref=\"IDisposable\"/> . It's recommended to dispose <see cref=\"IDialogStorageItem\"/> when it's not used anymore.\n/// </remarks>\npublic interface IDialogStorageItem : IDisposable\n{\n    /// <summary>\n    /// Gets the name of the item including the file name extension if there is one.\n    /// </summary>\n    string Name { get; }\n\n    /// <summary>\n    /// Gets the full file-system path of the item, if the item has a path.\n    /// </summary>\n    /// <remarks>\n    /// Android backend might return file path with \"content:\" scheme.\n    /// Browser and iOS backends might return relative uris.\n    /// </remarks>\n    Uri Path { get; }\n\n    /// <summary>\n    /// Gets a local operating-system representation of a file name.\n    /// </summary>\n    string LocalPath { get; }\n\n    /// <summary>\n    /// Gets the basic properties of the current item.\n    /// </summary>\n    Task<DesktopDialogStorageItemProperties> GetBasicPropertiesAsync();\n\n    /// <summary>\n    /// Returns true is item can be bookmarked and reused later.\n    /// </summary>\n    bool CanBookmark { get; }\n\n    /// <summary>\n    /// Saves items to a bookmark.\n    /// </summary>\n    /// <returns>\n    /// Returns identifier of a bookmark. Can be null if OS denied request.\n    /// </returns>\n    Task<string?> SaveBookmarkAsync();\n\n    /// <summary>\n    /// Gets the parent folder of the current storage item.\n    /// </summary>\n    Task<IDialogStorageFolder?> GetParentAsync();\n\n    /// <summary>\n    /// Deletes the current storage item and it's contents\n    /// </summary>\n    Task DeleteAsync();\n\n    /// <summary>\n    /// Moves the current storage item and it's contents to a <see cref=\"IDialogStorageFolder\"/>\n    /// </summary>\n    /// <param name=\"destination\">The <see cref=\"IDialogStorageFolder\"/> to move the item into</param>\n    Task<IDialogStorageItem?> MoveAsync(IDialogStorageFolder destination);\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/FileDialogSettings.cs",
    "content": "﻿using System.Collections.Generic;\nnamespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Settings for FileDialog.\n/// </summary>\npublic abstract class FileDialogSettings : PickerDialogSettings\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether a file dialog returns either the location of\n    /// the file referenced by a shortcut or the location of the shortcut file (.lnk).\n    /// </summary>\n    public bool DereferenceLinks { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a collection of filters which determine the types of files displayed in an\n    /// OpenFileDialog or SaveFileDialog.\n    /// </summary>\n    /// <remarks>\n    /// The '.' in extensions is optional. Extensions will automatically be added\n    /// to the descriptions unless it contains '('.\n    /// If you do not wish to display extensions, end the name with '()' and it will be trimmed away.\n    /// </remarks>\n    public IList<FileFilter> Filters { get; set; } = new List<FileFilter>();\n\n    /// <summary>\n    /// Gets or sets the initial file that is displayed by a file dialog.\n    /// </summary>\n    public string SuggestedFileName { get; set; } = string.Empty;\n\n    /// <summary>\n    /// Callback to invoke when the user clicks the help button. Setting this will display a help button.\n    /// </summary>\n    public EventHandler? HelpRequest { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/FileFilter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Represents a filter in an OpenFileDialog or SaveFileDialog.\n/// </summary>\npublic class FileFilter\n{\n    /// <summary>\n    /// Initializes a new instance of the FileFilter class.\n    /// </summary>\n    public FileFilter()\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the FileFilter class.\n    /// </summary>\n    /// <param name=\"name\">The display name of the filter.</param>\n    /// <param name=\"extension\">The file extension to filter on, excluding the trailing dot.</param>\n    public FileFilter(string name, string extension)\n    {\n        Name = name;\n        Extensions = new[] { extension };\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the FileFilter class.\n    /// </summary>\n    /// <param name=\"name\">The display name of the filter.</param>\n    /// <param name=\"extensions\">The file extensions to filter on, excluding the trailing dots.</param>\n    public FileFilter(string name, IReadOnlyList<string> extensions)\n    {\n        Name = name;\n        Extensions = extensions;\n    }\n\n    /// <summary>\n    /// Gets or sets the display name of the filter.\n    /// </summary>\n    public string Name { get; set; } = string.Empty;\n\n    /// <summary>\n    /// Gets or sets a list of file extensions matched by the filter, excluding the trailing dots (e.g. \"txt\" or \"*\" for all files).\n    /// </summary>\n    /// <remarks>\n    /// Used on Windows and Linux systems.\n    /// </remarks>\n    public IReadOnlyList<string>? Extensions { get; set; }\n\n    /// <summary>\n    /// List of extensions in MIME format.\n    /// </summary>\n    /// <remarks>\n    /// Used on Android, Browser and Linux systems.\n    /// </remarks>\n    public IReadOnlyList<string>? MimeTypes { get; set; }\n\n    /// <summary>\n    /// List of extensions in Apple uniform format.\n    /// </summary>\n    /// <remarks>\n    /// Used only on Apple devices.\n    /// See https://developer.apple.com/documentation/uniformtypeidentifiers/system_declared_uniform_type_identifiers.\n    /// </remarks>\n    public IReadOnlyList<string>? AppleUniformTypeIdentifiers { get; set; }\n\n    /// <summary>\n    /// Returns a string with all extensions starting with '*.' and separated by specified separator.\n    /// ex: \"*.BMP;*.JPG;*.GIF\"\n    /// </summary>\n    /// <param name=\"separator\">The separator between extensions.</param>\n    /// <returns>A string representation of the extensions.</returns>\n    public string? ExtensionsToString(char separator = ';')\n    {\n        if (Extensions == null) { return null; }\n\n        var builder = new StringBuilder();\n        foreach (var ext in Extensions.Select(x => x.TrimStart('.')))\n        {\n            // Add separator.\n            if (builder.Length > 0)\n            {\n                builder.Append(separator);\n            }\n\n            // Add *.ext\n            builder.Append('*');\n            if (!string.IsNullOrEmpty(ext) && !ext.StartsWith(\"'\"))\n            {\n                builder.Append('.');\n            }\n            builder.Append(ext);\n        }\n        return builder.ToString();\n    }\n\n    /// <summary>\n    /// Returns a string containing the name plus extensions.\n    /// ex: \"Image Files (*.BMP;*.JPG;*.GIF)\"\n    /// </summary>\n    /// <remarks>\n    /// The '.' in extensions is optional. Extensions will automatically be added\n    /// to the descriptions unless it contains '('.\n    /// If you do not wish to display extensions, end the name with '()' and it will be trimmed away.\n    /// </remarks>\n    /// <param name=\"extensions\">The extensions to add, calculated with <see cref=\"ExtensionsToString\"/>.</param>\n    /// <returns>The name ready for display.</returns>\n    public string NameToString(string? extensions)\n    {\n        var name = Name ?? string.Empty;\n        // Only add extensions to description if it doesn't contain parenthesis.\n        var hasExtInDesc = name.Contains(\"(\");\n        // If name ends with '()', trim it and display no extensions.\n        if (name.EndsWith(\"()\"))\n        {\n            name = name.Substring(0, name.Length - 2).TrimEnd();\n        }\n\n        // Add all extensions to description.\n        if (!hasExtInDesc && !string.IsNullOrEmpty(extensions))\n        {\n            name += \" (\" + extensions + \")\";\n        }\n        return name;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/MessageBoxButton.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Specifies the buttons that are displayed on a message box.\n/// </summary>\npublic enum MessageBoxButton\n{\n    /// <summary>\n    /// The message box displays an OK button.\n    /// </summary>\n    Ok,\n\n    /// <summary>\n    /// The message box displays OK and Cancel buttons.\n    /// </summary>\n    OkCancel,\n\n    /// <summary>\n    /// The message box displays Yes and No buttons.\n    /// </summary>\n    YesNo,\n\n    /// <summary>\n    /// The message box displays Yes, No, and Cancel buttons.\n    /// </summary>\n    YesNoCancel\n}"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/MessageBoxImage.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Specifies the icon that is displayed by a message box.\n/// </summary>\npublic enum MessageBoxImage\n{\n    /// <summary>\n    /// The message box contains no symbols.\n    /// </summary>\n    None,\n\n    /// <summary>\n    /// The message box contains a symbol consisting of white X in a circle with a red background.\n    /// </summary>\n    Error,\n\n    /// <summary>\n    /// The message box contains a symbol consisting of an exclamation point in a triangle with a yellow background.\n    /// </summary>\n    Exclamation,\n\n    /// <summary>\n    /// The message box contains a symbol consisting of a lowercase letter i in a circle.\n    /// </summary>\n    Information,\n\n    /// <summary>\n    /// The message box contains a symbol consisting of white X in a circle with a red background.\n    /// </summary>\n    Stop,\n\n    /// <summary>\n    /// The message box contains a symbol consisting of an exclamation point in a triangle with a yellow background.\n    /// </summary>\n    Warning\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/MessageBoxSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Settings for a MessageBox.\n/// </summary>\npublic class MessageBoxSettings : DialogSettingsBase\n{\n    /// <summary>\n    /// Gets or sets the <see cref=\"MessageBoxButton\"/> value that specifies which button or\n    /// buttons to display. Default value is <see cref=\"MessageBoxButton.Ok\"/>.\n    /// </summary>\n    public MessageBoxButton Button { get; set; } = MessageBoxButton.Ok;\n\n    /// <summary>\n    /// Gets or sets the value of the button selected by default. True=OK/Yes, False=No, Null=Cancel.\n    /// </summary>\n    public bool? DefaultValue { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"MessageBoxImage\"/> value that specifies the icon to\n    /// display. Default value is <see cref=\"MessageBoxImage.None\"/>.\n    /// </summary>\n    public MessageBoxImage Icon { get; set; } = MessageBoxImage.None;\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"string\"/> that specifies the text to display.\n    /// </summary>\n    public string Content { get; set; } = string.Empty;\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/OpenFileDialogSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Settings for OpenFileDialog.\n/// </summary>\npublic class OpenFileDialogSettings : FileDialogSettings\n{\n    /// <summary>\n    /// DO NOT USE. Use OpenFileDialog / OpenFilesDialog instead.\n    /// </summary>\n    public bool? AllowMultiple { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether the open file dialog contains a read-only check box.\n    /// Only supported in WPF.\n    /// </summary>\n    public bool ShowReadOnly { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether the read-only check box displayed by the open file dialog is selected.\n    /// </summary>\n    public bool ReadOnlyChecked { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/OpenFolderDialogSettings.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Settings for FolderBrowserDialog.\n/// </summary>\npublic class OpenFolderDialogSettings : PickerDialogSettings\n{\n    /// <summary>\n    /// DO NOT USE. Use OpenFolderDialog / OpenFoldersDialog instead.\n    /// </summary>\n    public bool? AllowMultiple { get; set; }\n\n    /// <summary>\n    /// Callback to invoke when the user clicks the help button. Setting this will display a help button.\n    /// </summary>\n    public EventHandler? HelpRequest { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/PickerDialogSettings.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Settings for file/folder picker dialogs.\n/// </summary>\npublic abstract class PickerDialogSettings : DialogSettingsBase\n{\n    /// <summary>\n    /// Gets or sets the initial directory that is displayed by a file dialog.\n    /// </summary>\n    public IDialogStorageFolder? SuggestedStartLocation { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/FrameworkDialogs/SaveFileDialogSettings.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n/// <summary>\n/// Settings for SaveFileDialog.\n/// </summary>\npublic class SaveFileDialogSettings : FileDialogSettings\n{\n    /// <summary>\n    /// Gets or sets the default extension to be used (including the period \".\")\n    /// if not set by the user or by a filter\n    /// </summary>\n    public string? DefaultExtension { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IActivable.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// When implemented by a ViewModel, allows to activate the View from the ViewModel by raising the RequestActivate event.\n/// </summary>\npublic interface IActivable\n{\n    /// <summary>\n    /// When raised from the ViewModel, activates the associated view.\n    /// </summary>\n    event EventHandler? RequestActivate;\n}\n"
  },
  {
    "path": "src/MvvmDialogs/ICloseable.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// When implemented by a ViewModel, allows to close the View from the ViewModel by raising the RequestClose event.\n/// </summary>\npublic interface ICloseable\n{\n    /// <summary>\n    /// When raised from the ViewModel, closes the associated view.\n    /// </summary>\n    event EventHandler? RequestClose;\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IDialogFactory.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Interface representing a framework dialog.\n/// </summary>\npublic interface IDialogFactory\n{\n    /// <summary>\n    /// Opens a framework dialog with specified owner.\n    /// </summary>\n    /// <param name=\"owner\">Handle to the window that owns the dialog.</param>\n    /// <param name=\"settings\">The settings for the framework dialog.</param>\n    /// <typeparam name=\"TSettings\">The type of settings to use for this dialog.</typeparam>\n    /// <returns>Return data specific to the dialog.</returns>\n    Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings);\n\n    /// <summary>\n    /// Gets or sets a reference to the <see cref=\"IDialogManager\"/>. Will only be set to the root factory in the chain.\n    /// </summary>\n    IDialogManager? DialogManager { get; set; }\n\n    /// <summary>\n    /// If the dialog is not handled by this class, calls this other handler next.\n    /// </summary>\n    IDialogFactory? Chain { get; }\n\n    /// <summary>\n    /// A reference to the top of the IDialogFactory chain, used to display message boxes.\n    /// </summary>\n    IDialogFactory ChainTop { get; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IDialogManager.cs",
    "content": "﻿using Microsoft.Extensions.Logging;\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Interface responsible for UI interactions.\n/// </summary>\npublic interface IDialogManager\n{\n    /// <summary>\n    /// Gets the ILogger that captures MvvmDialogs logs.\n    /// </summary>\n    ILogger<IDialogManager>? Logger { get; }\n\n    /// <summary>\n    /// Whether to allow multiple framework dialogs to be displayed at once.\n    /// </summary>\n    public bool AllowConcurrentDialogs { get; set; }\n\n    /// <summary>\n    /// Shows a new window of specified type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    void Show(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel);\n\n    /// <summary>\n    /// Shows a new dialog of specified type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>The dialog result.</returns>\n    Task ShowDialogAsync(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel);\n\n    /// <summary>\n    /// Shows a framework dialog whose type depends on the settings type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings to pass to the <see cref=\"IDialogFactory\"/></param>\n    /// <param name=\"resultToString\">A function to convert the result into a string for logging. If null, ToString will be used.</param>\n    /// <typeparam name=\"TSettings\">The settings type used to determine which dialog to show.</typeparam>\n    /// <returns>The dialog result.</returns>\n    Task<object?> ShowFrameworkDialogAsync<TSettings>(INotifyPropertyChanged? ownerViewModel, TSettings settings, Func<object?, string>? resultToString = null)\n        where TSettings : DialogSettingsBase;\n\n    /// <summary>\n    /// Returns the window with a DataContext equal to specified ViewModel.\n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to search for.</param>\n    /// <returns>A IView, or null.</returns>\n    IView? FindViewByViewModel(INotifyPropertyChanged viewModel);\n\n    /// <summary>\n    /// Returns the main window of the application.\n    /// </summary>\n    /// <returns>The main window.</returns>\n    IView? GetMainWindow();\n\n    /// <summary>\n    /// Returns an empty window that can be used as an owner when none is specified.\n    /// </summary>\n    /// <returns>A dummy window.</returns>\n    IView? GetDummyWindow();\n\n    /// <summary>\n    /// Subscribes to View events. By default, ICloseable and IActivable are handled.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <param name=\"dialog\">The dialog being shown.</param>\n    void HandleDialogEvents(INotifyPropertyChanged viewModel, IView dialog);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IDialogService.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Interface abstracting the interaction between view models and views when it comes to\n/// opening dialogs using the MVVM pattern in WPF.\n/// </summary>\npublic interface IDialogService\n{\n    /// <summary>\n    /// Factory responsible for creating framework dialogs.\n    /// </summary>\n    IDialogManager DialogManager { get; }\n\n    /// <summary>\n    /// Displays a non-modal dialog of a type that is determined by the dialog type locator.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    void Show(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel);\n\n    /// <summary>\n    /// Displays a non-modal dialog of specified type <typeparamref name=\"T\"/>.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <typeparam name=\"T\">The type of the dialog to show.</typeparam>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    void Show<T>(INotifyPropertyChanged? ownerViewModel, INotifyPropertyChanged viewModel); //where T : TWindow;\n\n    /// <summary>\n    /// Displays a modal dialog of a type that is determined by the dialog type locator.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    Task<bool?> ShowDialogAsync(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel);\n\n    /// <summary>\n    /// Displays a modal dialog of specified type <typeparamref name=\"T\"/>.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <typeparam name=\"T\">The type of the dialog to show.</typeparam>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    Task<bool?> ShowDialogAsync<T>(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel); // where T : TWindow;\n\n    /// <summary>\n    /// Attempts to bring the window to the foreground and activates it.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the window.</param>\n    /// <returns>true if the window was successfully activated; otherwise, false.</returns>\n    bool Activate(INotifyPropertyChanged viewModel);\n\n    /// <summary>\n    /// Closes a non-modal dialog that previously was opened using <see cref=\"Show\"/>,\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the dialog to close.</param>\n    /// <returns>true if the window was successfully closed; otherwise, false.</returns>\n    bool Close(INotifyPropertyChanged viewModel);\n\n    /// <summary>\n    /// Creates a view model of specified type, using the ViewModelFactory passed in the constructor.\n    /// </summary>\n    /// <param name=\"type\">The type of the view model to create.</param>\n    /// <returns>The newly created view model.</returns>\n    object CreateViewModel(Type type);\n\n    /// <summary>\n    /// Creates a view model of specified type, using the ViewModelFactory passed in the constructor.\n    /// </summary>\n    /// <typeparam name=\"T\">The type of the view model to create.</typeparam>\n    /// <returns>The newly created view model.</returns>\n    T CreateViewModel<T>();\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IModalDialogViewModel.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// A view model representing a modal dialog opened using <see cref=\"DialogServiceBase\"/>.\n/// </summary>\npublic interface IModalDialogViewModel : INotifyPropertyChanged\n{\n    /// <summary>\n    /// Gets the dialog result value, which is the value that is returned from the\n    /// <see cref=\"DialogServiceBase.ShowDialogAsync\"/> and <see cref=\"DialogServiceBase.ShowDialogAsync{T}\"/>\n    /// methods.\n    /// </summary>\n    bool? DialogResult { get; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IView.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Interface describing a generic window.\n/// </summary>\n/// <remarks>\n/// This interface allows cross-platform support, and allows for custom windows\n/// not deriving from the standard types.\n/// </remarks>\npublic interface IView\n{\n    /// <summary>\n    /// Initializes the <see cref=\"IView\"/> from specified view model and view type.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to display.</param>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef);\n\n    /// <summary>\n    /// Initializes the <see cref=\"IView\"/> from specified view model and existing view.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to display.</param>\n    /// <param name=\"view\">The view to display.</param>\n    void InitializeExisting(INotifyPropertyChanged viewModel, object view);\n\n    /// <summary>\n    /// Gets the Window reference held by this class.\n    /// </summary>\n    public object RefObj { get; }\n\n    /// <summary>\n    /// Occurs when the window is loaded.\n    /// </summary>\n    event EventHandler Loaded;\n\n    /// <summary>\n    /// Occurs when the window is closing.\n    /// </summary>\n    event EventHandler<CancelEventArgs> Closing;\n\n    /// <summary>\n    /// Occurs when the window is closed.\n    /// </summary>\n    event EventHandler Closed;\n\n    /// <summary>\n    /// Gets or sets the data context for an element when it participates in data binding.\n    /// </summary>\n    INotifyPropertyChanged? ViewModel { get; }\n\n    /// <summary>\n    /// Opens a window and returns without waiting for the newly opened window to close.\n    /// </summary>\n    void Show(IView? owner);\n\n    /// <summary>\n    /// Opens a window and returns only when the newly opened window is closed.\n    /// </summary>\n    /// <returns>\n    /// A task that represents the asynchronous operation.\n    /// </returns>\n    Task ShowDialogAsync(IView owner);\n\n    /// <summary>\n    /// Tries to activate the Window.\n    /// </summary>\n    void Activate();\n\n    /// <summary>\n    /// Tries to close the Window.\n    /// </summary>\n    void Close();\n\n    /// <summary>\n    /// Gets or sets whether the window is enabled.\n    /// </summary>\n    bool IsEnabled { get; set; }\n\n    /// <summary>\n    /// Gets whether the window is visible.\n    /// </summary>\n    bool IsVisible { get; }\n\n    /// <summary>\n    /// Gets or sets whether closing has been confirmed, in which case Closing event should be ignored. \n    /// </summary>\n    bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IViewClosed.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// When implemented by a ViewModel, handles the View Closed event.\n/// </summary>\npublic interface IViewClosed\n{\n    /// <summary>\n    /// Called when the view is closed.\n    /// </summary>\n    void OnClosed();\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IViewClosing.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// When implemented by a ViewModel, handles the View Closing event.\n/// </summary>\npublic interface IViewClosing\n{\n    /// <summary>\n    /// Called when the view is closing. If e.Cancel is set to true, <see cref=\"OnClosingAsync\"/> will be called.\n    /// </summary>\n    void OnClosing(CancelEventArgs e);\n\n    /// <summary>\n    /// Called when e.Cancel is set to true in <see cref=\"OnClosing\"/>. If e.Cancel is set back to false, the window will be closed.\n    /// </summary>\n    Task OnClosingAsync(CancelEventArgs e);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IViewLoaded.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// When implemented by a ViewModel, handles the View Loaded event.\n/// </summary>\npublic interface IViewLoaded\n{\n    /// <summary>\n    /// Called when the view is loaded.\n    /// </summary>\n    void OnLoaded();\n}\n"
  },
  {
    "path": "src/MvvmDialogs/IViewLocator.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Interface responsible for finding a dialog type matching a view model.\n/// </summary>\npublic interface IViewLocator\n{\n    /// <summary>\n    /// Get the view type based on the specified view model.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to get the view type for.</param>\n    /// <exception cref=\"TypeLoadException\">View not found for view model.</exception>\n    ViewDefinition Locate(object viewModel);\n\n    /// <summary>\n    /// Creates a view based on the specified view model.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to create a view for.</param>\n    /// <exception cref=\"TypeLoadException\">View not found for view model.</exception>\n    object Create(object viewModel);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/MvvmDialogs.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net8.0;net462</TargetFrameworks>\n    <OutputType>Library</OutputType>\n    <AssemblyTitle>MVVM Dialogs</AssemblyTitle>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>../StrongName.snk</AssemblyOriginatorKeyFile>\n    <PackageId>HanumanInstitute.MvvmDialogs</PackageId>\n    <AssemblyName>HanumanInstitute.MvvmDialogs</AssemblyName>\n    <RootNamespace>HanumanInstitute.MvvmDialogs</RootNamespace>\n    <GenerateDocumentationFile>True</GenerateDocumentationFile>\n    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n    <PackageIcon>icon_64x64.png</PackageIcon>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Abstractions\" />\n    <PackageReference Include=\"Microsoft.Bcl.AsyncInterfaces\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"..\\icon_64x64.png\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n    <None Include=\"..\\StrongName.snk\">\n      <Link>StrongName.snk</Link>\n    </None>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs/MvvmDialogs.csproj.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=frameworkdialogs_005Cidialogstorageitem/@EntryIndexedValue\">True</s:Boolean></wpf:ResourceDictionary>"
  },
  {
    "path": "src/MvvmDialogs/Private/NullableAttributes.cs",
    "content": "﻿#pragma warning disable MA0048 // File name must match type name\n#define INTERNAL_NULLABLE_ATTRIBUTES\n\n// https://github.com/dotnet/corefx/blob/48363ac826ccf66fbe31a5dcb1dc2aab9a7dd768/src/Common/src/CoreLib/System/Diagnostics/CodeAnalysis/NullableAttributes.cs\n\n// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\n// ReSharper disable once CheckNamespace\nnamespace System.Diagnostics.CodeAnalysis;\n\n#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NET45 || NET451 || NET452 || NET6 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48\n/// <summary>Specifies that null is allowed as an input even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class AllowNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that null is disallowed as an input even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class DisallowNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class MaybeNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that an output will not be null even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class NotNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that when a method returns <see cref=\"ReturnValue\"/>, the parameter may be null even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class MaybeNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter may be null.\n    /// </param>\n    public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n}\n\n/// <summary>Specifies that when a method returns <see cref=\"ReturnValue\"/>, the parameter will not be null even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class NotNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter will not be null.\n    /// </param>\n    public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n}\n\n/// <summary>Specifies that the output will be non-null if the named parameter is non-null.</summary>\n[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class NotNullIfNotNullAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the associated parameter name.</summary>\n    /// <param name=\"parameterName\">\n    /// The associated parameter name.  The output will be non-null if the argument to the parameter specified is non-null.\n    /// </param>\n    public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName;\n\n    /// <summary>Gets the associated parameter name.</summary>\n    public string ParameterName { get; }\n}\n\n/// <summary>Applied to a method that will never return under any circumstance.</summary>\n[AttributeUsage(AttributeTargets.Method, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class DoesNotReturnAttribute : Attribute\n{ }\n\n/// <summary>Specifies that the method will not return if the associated Boolean parameter is passed the specified value.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class DoesNotReturnIfAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified parameter value.</summary>\n    /// <param name=\"parameterValue\">\n    /// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to\n    /// the associated parameter matches this value.\n    /// </param>\n    public DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue;\n\n    /// <summary>Gets the condition parameter value.</summary>\n    public bool ParameterValue { get; }\n}\n#endif // NETSTANDARD2_0 attributes\n\n#if NETSTANDARD2_1 || NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_1 || NET45 || NET451 || NET452 || NET6 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48\n/// <summary>\n/// Specifies that the method or property will ensure that the listed field and property members have\n/// not-<see langword=\"null\"/> values.\n/// </summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\nsealed class MemberNotNullAttribute : Attribute\n{\n    /// <summary>Gets field or property member names.</summary>\n    public string[] Members { get; }\n\n    /// <summary>Initializes the attribute with a field or property member.</summary>\n    /// <param name=\"member\">The field or property member that is promised to be not-null.</param>\n    public MemberNotNullAttribute(string member)\n    {\n        Members = new[] { member };\n    }\n\n    /// <summary>Initializes the attribute with the list of field and property members.</summary>\n    /// <param name=\"members\">The list of field and property members that are promised to be not-null.</param>\n    public MemberNotNullAttribute(params string[] members)\n    {\n        Members = members;\n    }\n}\n\n/// <summary>\n/// Specifies that the method or property will ensure that the listed field and property members have\n/// non-<see langword=\"null\"/> values when returning with the specified return value condition.\n/// </summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\nsealed class MemberNotNullWhenAttribute : Attribute\n{\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n\n    /// <summary>Gets field or property member names.</summary>\n    public string[] Members { get; }\n\n    /// <summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value,\n    /// the associated parameter will not be <see langword=\"null\"/>.\n    /// </param>\n    /// <param name=\"member\">The field or property member that is promised to be not-<see langword=\"null\"/>.</param>\n    public MemberNotNullWhenAttribute(bool returnValue, string member)\n    {\n        ReturnValue = returnValue;\n        Members = new[] { member };\n    }\n\n    /// <summary>Initializes the attribute with the specified return value condition and list of field and property members.\n    /// </summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value,\n    /// the associated parameter will not be <see langword=\"null\"/>.\n    /// </param>\n    /// <param name=\"members\">The list of field and property members that are promised to be not-null.</param>\n    public MemberNotNullWhenAttribute(bool returnValue, params string[] members)\n    {\n        ReturnValue = returnValue;\n        Members = members;\n    }\n}\n#endif // NETSTANDARD2_1 attributes\n"
  },
  {
    "path": "src/MvvmDialogs/Private/ViewIdGenerator.cs",
    "content": "﻿using System.Threading;\n\nnamespace HanumanInstitute.MvvmDialogs.Private;\n\ninternal static class ViewIdGenerator\n{\n    private static int s_id;\n\n    public static int Generate() => Interlocked.Increment(ref s_id);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/StrongViewLocatorBase.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Strongly-typed View Locator that does not rely on reflection.\n/// </summary>\npublic abstract class StrongViewLocatorBase : IViewLocator\n{\n    /// <summary>\n    /// The list of registered ViewModel-View combinations.\n    /// </summary>\n    protected readonly Dictionary<Type, ViewDefinition> Registrations = new();\n\n    /// <summary>\n    /// Registers specified views as being associated with specified view model type.\n    /// If multiple views are registered, they can be selected based on factors such as platform, such as Desktop vs Mobile vs Web. \n    /// </summary>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    /// <typeparam name=\"TViewModel\">The type of view model to register.</typeparam>\n    protected void Register<TViewModel>(ViewDefinition viewDef)\n        where TViewModel : INotifyPropertyChanged\n    {\n        Registrations.Add(typeof(TViewModel), viewDef);\n    }\n\n    /// <inheritdoc />\n    public virtual ViewDefinition Locate(object viewModel)\n    {\n        if (Registrations.TryGetValue(viewModel.GetType(), out var view))\n        {\n            return view;\n        }\n        else\n        {\n            var message = $\"No view was registered for view model {viewModel.GetType().FullName}.\";\n            const string ErrorInfo = \"This project uses a StrongViewLocator, which requires manually registering all ViewModel-View combinations.\";\n            throw new TypeLoadException(message + Environment.NewLine + ErrorInfo);\n        }\n    }\n\n    /// <inheritdoc />\n    public virtual object Create(object viewModel) =>\n        Locate(viewModel).Create();\n}\n"
  },
  {
    "path": "src/MvvmDialogs/Usings.cs",
    "content": "global using System;\nglobal using System.ComponentModel;\nglobal using System.Threading.Tasks;\n"
  },
  {
    "path": "src/MvvmDialogs/ViewBase.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Private;\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Holds a weak reference to a View instance.\n/// </summary>\npublic abstract class ViewBase\n{\n    private readonly WeakReference _viewReference;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewBase\"/> class and hold a weak reference to specified object.\n    /// </summary>\n    /// <param name=\"view\">The object to hold a weak reference for.</param>\n    protected ViewBase(object view)\n    {\n        if (view == null) throw new ArgumentNullException(nameof(view));\n\n        _viewReference = new WeakReference(view);\n    }\n\n    /// <summary>\n    /// Occurs when the object is fully loaded.\n    /// </summary>\n    public virtual event EventHandler? Loaded;\n\n    /// <summary>\n    /// Returns an auto-generated unique ID for the view.\n    /// </summary>\n    public int Id { get; } = ViewIdGenerator.Generate();\n\n    /// <summary>\n    /// Returns whether the weak reference is still available.\n    /// </summary>\n    public virtual bool IsAlive => _viewReference.IsAlive;\n\n    /// <summary>\n    /// Returns the original view reference if it is still alive.\n    /// </summary>\n    /// <exception cref=\"InvalidOperationException\">View has been garbage collected.</exception>\n    public virtual object SourceObj\n    {\n        get\n        {\n            if (!IsAlive) throw new InvalidOperationException(\"View has been garbage collected.\");\n            if (_viewReference.Target == null) throw new InvalidOperationException(\"View has been set to null.\");\n\n            return _viewReference.Target;\n        }\n    }\n\n    /// <summary>\n    /// Returns the owner of the element, within a <see cref=\"IView\"/> wrapper.\n    /// </summary>\n    /// <returns>A <see cref=\"IView\"/> wrapper around the owner, or null.</returns>\n    public abstract IView? GetOwner();\n\n    /// <summary>\n    /// Returns whether referenced element is loaded.\n    /// </summary>\n    public abstract bool IsLoaded { get; }\n\n    /// <summary>\n    /// Returns the DataContext of referenced element.\n    /// </summary>\n    public abstract object? DataContext { get; }\n\n    /// <summary>Determines whether specified view references the same object as the current view.</summary>\n    /// <param name=\"obj\">The object to compare with the current object.</param>\n    /// <returns>true if specified view references the same object; otherwise, false.</returns>\n    public override bool Equals(object? obj) =>\n        obj is ViewBase other && SourceObj.Equals(other.SourceObj);\n\n    /// <summary>Returns the hash code of referenced object.</summary>\n    /// <returns>A hash code.</returns>\n    public override int GetHashCode() => SourceObj.GetHashCode();\n\n    /// <summary>\n    /// Raises the Loaded event.\n    /// </summary>\n    protected void RaiseLoaded() => Loaded?.Invoke(this, EventArgs.Empty);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/ViewDefinition.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Defines a View, its type and how to create one.\n/// </summary>\npublic readonly struct ViewDefinition\n{\n    /// <summary>\n    /// Initializes a new instance of the ViewDefinition class.\n    /// </summary>\n    /// <param name=\"viewType\">The type of the view, must match the return type of <see cref=\"CreateFunc\"/> function.</param>\n    /// <param name=\"createFunc\">A function to create a new instance of the view without using reflection.</param>\n    public ViewDefinition(Type viewType, Func<object> createFunc)\n    {\n        CreateFunc = createFunc;\n        ViewType = viewType;\n    }\n\n    /// <summary>\n    /// The type of the view, must match the return type of <see cref=\"CreateFunc\"/> function.\n    /// </summary>\n    public Type ViewType { get; }\n\n    /// <summary>\n    /// A function to create a new instance of the view without using reflection.\n    /// </summary>\n    public Func<object> CreateFunc { get; }\n\n    /// <summary>\n    /// Executes CreateFunc to create a new view.\n    /// </summary>\n    /// <returns>The newly created view.</returns>\n    public object Create() => CreateFunc.Invoke();\n\n    /// <summary>\n    /// Returns whether the view type derives from specified class or interface. A base class instance is also accepted.\n    /// </summary>\n    /// <typeparam name=\"T\">The type to verify against ViewType.</typeparam>\n    /// <returns>True if ViewType derives from specified type, otherwise false.</returns>\n    public bool TypeDerivesFrom<T>() => typeof(T).IsAssignableFrom(ViewType);\n}\n"
  },
  {
    "path": "src/MvvmDialogs/ViewNotRegisteredException.cs",
    "content": "﻿#if NETSTANDARD2_0_OR_GREATER\nusing System.Runtime.Serialization;\n#endif\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Exception thrown by <see cref=\"DialogServiceBase\"/> when a view isn't registered, but its\n/// DataContext is accessing the dialog service.\n/// </summary>\n#if NETSTANDARD2_0_OR_GREATER\n[Serializable]\n#endif\npublic class ViewNotRegisteredException : Exception\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewNotRegisteredException\"/> class.\n    /// </summary>\n    /// <param name=\"message\">The error message that explains the reason for the exception.</param>\n    /// <param name=\"innerException\">The exception that is the cause of the current exception, or a null reference if no\n    /// inner exception is specified.</param>\n    public ViewNotRegisteredException(string? message = null, Exception? innerException = null)\n        : base(message, innerException)\n    {\n    }\n\n#if NETSTANDARD2_0_OR_GREATER\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewNotRegisteredException\"/> class.\n    /// </summary>\n    /// <param name=\"info\">The <see cref=\"SerializationInfo\" /> that holds the serialized object data about the\n    /// exception being thrown.</param>\n    /// <param name=\"context\">The <see cref=\"StreamingContext\" /> that contains contextual information about the\n    /// source or destination.</param>\n    protected ViewNotRegisteredException(SerializationInfo info, StreamingContext context)\n        : base(info, context)\n    {\n    }\n#endif\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Api/FrameworkDialogsApi.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Api;\n\n/// <inheritdoc />\ninternal class FrameworkDialogsApi : IFrameworkDialogsApi\n{\n    public async Task<IReadOnlyList<IDialogStorageFile>> ShowOpenFileDialogAsync(ContentControl? owner, FilePickerOpenOptions options)\n    {\n        if (owner == null) { throw new ArgumentNullException(nameof(owner)); }\n        var result = await GetStorage(owner).OpenFilePickerAsync(options).ConfigureAwait(true);\n        return result.Select(x => new AvaloniaDialogStorageFile(x)).ToList();\n    }\n\n    public async Task<IDialogStorageFile?> ShowSaveFileDialogAsync(ContentControl? owner, FilePickerSaveOptions options)\n    {\n        if (owner == null) { throw new ArgumentNullException(nameof(owner)); }\n        var result = await GetStorage(owner).SaveFilePickerAsync(options).ConfigureAwait(true);\n        return result != null ? new AvaloniaDialogStorageFile(result) : null;\n    }\n\n    public async Task<IReadOnlyList<IDialogStorageFolder>> ShowOpenFolderDialogAsync(ContentControl? owner, FolderPickerOpenOptions options)\n    {\n        if (owner == null) { throw new ArgumentNullException(nameof(owner)); }\n        var result = await GetStorage(owner).OpenFolderPickerAsync(options).ConfigureAwait(true);\n        return result.Select(x => new AvaloniaDialogStorageFolder(x)).ToList();\n    }\n\n    private static IStorageProvider GetStorage(ContentControl owner) => TopLevel.GetTopLevel(owner)?.StorageProvider ??\n                                                                        throw new ArgumentException(\"Cannot find StorageProvider for specified dialog owner.\", nameof(owner));\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Api/IFrameworkDialogsApi.cs",
    "content": "﻿\nusing System.Collections.Generic;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Api;\n\n/// <summary>\n/// Wrapper around Win32 dialogs API that can be replaced by a mock for testing.\n/// </summary>\ninternal interface IFrameworkDialogsApi\n{\n    Task<IReadOnlyList<IDialogStorageFile>> ShowOpenFileDialogAsync(ContentControl? owner, FilePickerOpenOptions options);\n    Task<IDialogStorageFile?> ShowSaveFileDialogAsync(ContentControl? owner, FilePickerSaveOptions options);\n    Task<IReadOnlyList<IDialogStorageFolder>> ShowOpenFolderDialogAsync(ContentControl? owner, FolderPickerOpenOptions options);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/DialogFactory.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Api;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Handles OpenFileDialog, SaveFileDialog and OpenFolderDialog for Avalonia.\n/// </summary>\npublic class DialogFactory : DialogFactoryBase\n{\n    private readonly IFrameworkDialogsApi _api;\n    // private readonly IPathInfoFactory _pathInfo;\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    public DialogFactory(IDialogFactory? chain = null)\n        : this(chain, null)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    /// <param name=\"api\">An interface exposing Avalonia framework dialogs.</param>\n    internal DialogFactory(IDialogFactory? chain, IFrameworkDialogsApi? api)\n        : base(chain)\n    {\n        _api = api ?? new FrameworkDialogsApi();\n        // _pathInfo = pathInfo ?? new PathInfoFactory();\n    }\n\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => await ShowOpenFolderDialogAsync(owner, s).ConfigureAwait(true),\n            OpenFileDialogSettings s => await ShowOpenFileDialogAsync(owner, s).ConfigureAwait(true),\n            SaveFileDialogSettings s => await ShowSaveFileDialogAsync(owner, s).ConfigureAwait(true),\n            _ => await base.ShowDialogAsync(owner, settings).ConfigureAwait(true)\n        };\n\n    private async Task<IReadOnlyList<IDialogStorageFolder>> ShowOpenFolderDialogAsync(IView? owner, OpenFolderDialogSettings settings)\n    {\n        var apiSettings = new FolderPickerOpenOptions()\n        {\n            AllowMultiple = settings.AllowMultiple ?? false\n        };\n        await AddSharedSettingsAsync(apiSettings, settings);\n\n        return await _api.ShowOpenFolderDialogAsync(owner.GetRef(), apiSettings).ConfigureAwait(true);\n    }\n\n    private async Task<IReadOnlyList<IDialogStorageFile>> ShowOpenFileDialogAsync(IView? owner, OpenFileDialogSettings settings)\n    {\n        var apiSettings = new FilePickerOpenOptions()\n        {\n            AllowMultiple = settings.AllowMultiple ?? false,\n            FileTypeFilter = SyncFilters(settings.Filters)\n            // d.ShowReadOnly = Settings.ShowReadOnly;\n            // d.ReadOnlyChecked = Settings.ReadOnlyChecked;\n        };\n        await AddSharedSettingsAsync(apiSettings, settings);\n\n        return await _api.ShowOpenFileDialogAsync(owner.GetRef(), apiSettings).ConfigureAwait(true) ?? Array.Empty<IDialogStorageFile>();\n    }\n\n    private async Task<IDialogStorageFile?> ShowSaveFileDialogAsync(IView? owner, SaveFileDialogSettings settings)\n    {\n        var apiSettings = new FilePickerSaveOptions()\n        {\n            DefaultExtension = string.IsNullOrEmpty(settings.DefaultExtension) ? null : settings.DefaultExtension,\n            FileTypeChoices = SyncFilters(settings.Filters),\n            SuggestedFileName = settings.SuggestedFileName\n        };\n\n        await AddSharedSettingsAsync(apiSettings, settings);\n\n        var result = await _api.ShowSaveFileDialogAsync(owner.GetRef(), apiSettings).ConfigureAwait(true);\n\n        // Add DefaultExtension.\n        // if (result != null && !string.IsNullOrEmpty(settings.DefaultExtension) && !_pathInfo.GetFileInfo(result).Exists && !result.Contains('.'))\n        // {\n        //     result += \".\" + settings.DefaultExtension.TrimStart('.');\n        // }\n        return result;\n    }\n\n    private async Task AddSharedSettingsAsync(PickerOptions d, PickerDialogSettings s)\n    {\n        // d.DereferenceLinks = s.DereferenceLinks;\n        // d.Directory = s.InitialDirectory;\n        // d.InitialFileName = s.InitialFile;\n        // d.Filters = SyncFilters(s.Filters);\n        if (s.SuggestedStartLocation != null)\n        {\n            d.SuggestedStartLocation = await s.SuggestedStartLocation.ToAvaloniaAsync();\n        }\n\n        d.Title = s.Title;\n    }\n\n    private static List<FilePickerFileType> SyncFilters(IList<FileFilter> filters) =>\n        filters.Select(\n            x => new FilePickerFileType(x.NameToString(x.ExtensionsToString()))\n            {\n                Patterns = x.Extensions?.Select(y => \"*.\" + y.TrimStart('.')).ToList(),\n                MimeTypes = x.MimeTypes,\n                AppleUniformTypeIdentifiers = x.AppleUniformTypeIdentifiers\n            }).ToList();\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/DialogFactoryBase.cs",
    "content": "﻿\n// ReSharper disable MemberCanBePrivate.Global\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Interface representing a framework dialog.\n/// </summary>\npublic abstract class DialogFactoryBase : IDialogFactory\n{\n    /// <inheritdoc />\n    public IDialogManager? DialogManager { get; set; }\n\n    /// <inheritdoc />\n    public IDialogFactory? Chain { get; }\n\n    /// <inheritdoc />\n    public IDialogFactory ChainTop { get; private set; }\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    protected DialogFactoryBase(IDialogFactory? chain)\n    {\n        Chain = chain;\n        ChainTop = this;\n\n        // Set ChainTop recursively.\n        var item = chain;\n        while (item is DialogFactoryBase f)\n        {\n            f.ChainTop = this;\n            item = f.Chain;\n        }\n    }\n\n    /// <inheritdoc />\n    public virtual async Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings)\n    {\n        return Chain != null ? await Chain.ShowDialogAsync(owner, settings).ConfigureAwait(true) :\n            throw new NotSupportedException($\"There is no registered dialog in IDialogFactory for settings of type {typeof(TSettings).Name}.\");\n    }\n\n    /// <summary>\n    /// Returns the <see cref=\"IDialogManager\"/> set on the root factory.\n    /// </summary>\n    /// <returns>The <see cref=\"IDialogManager\"/>.</returns>\n    public IDialogManager GetDialogManager() =>\n        ChainTop.DialogManager ?? throw new NullReferenceException(\"Missing IDialogManager reference in root DialogFactory.\");\n\n    // /// <summary>\n    // /// Opens a framework dialog with specified owner.\n    // /// </summary>\n    // /// <param name=\"owner\">Handle to the window that owns the dialog.</param>\n    // /// <param name=\"settings\">The settings for the framework dialog.</param>\n    // /// <param name=\"appSettings\">Application-wide settings configured on the DialogService.</param>\n    // /// <returns>Return data specific to the dialog.</returns>\n    // public virtual async Task<object?> ShowDialogAsync<TSettings>(ViewWrapper? owner, TSettings settings, AppDialogSettings appSettings) =>\n    //     Chain != null ? await Chain.ShowDialogAsync(owner, settings, appSettings).ConfigureAwait(true) :\n    //         throw new NotSupportedException($\"There is no registered dialog in IDialogFactory for settings of type {typeof(TSettings).Name}.\");\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/DialogManager.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Microsoft.Extensions.Logging;\nusing Avalonia.Threading;\nusing Avalonia.Media;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// DialogManager for Avalonia.\n/// </summary>\npublic class DialogManager : DialogManagerBase<ContentControl>\n{\n    private readonly NavigationManager? _navigationManager;\n    private readonly IDispatcher _dispatcher;\n    private readonly bool _useNavigation;\n\n    /// <inheritdoc />\n    public DialogManager(\n        IViewLocator? viewLocator = null,\n        IDialogFactory? dialogFactory = null,\n        ILogger<DialogManager>? logger = null,\n        IDispatcher? dispatcher = null,\n        Control? customNavigationRoot = null)\n        :\n        base(\n            viewLocator ?? new ViewLocatorBase(),\n            dialogFactory ?? new DialogFactory(),\n            logger)\n    {\n        _dispatcher = dispatcher ?? Dispatcher.UIThread;\n        _useNavigation = Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime || viewLocator is IViewLocatorNavigation { ForceSinglePageNavigation: true };\n        if (_useNavigation)\n        {\n            ForwardViewEvents = false;\n            _navigationManager = new NavigationManager(View_Closing);\n            _navigationManager.Launch(customNavigationRoot);\n        }\n    }\n\n    /// <summary>\n    /// If using single-page navigation mode, returns the navigation manager.\n    /// </summary>\n    public INavigationManager? NavigationManager => _navigationManager;\n\n    /// <inheritdoc />\n    protected override bool IsDesignMode => Design.IsDesignMode;\n\n    /// <inheritdoc />\n    protected override IView CreateWrapper(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        var wrapper = _useNavigation ?\n            (IView)new ViewNavigationWrapper(_navigationManager!, View_Closing) :\n            new ViewWrapper();\n        wrapper.Initialize(viewModel, viewDef);\n        return wrapper;\n    }\n\n    /// <inheritdoc />\n    protected override IView AsWrapper(ContentControl view) =>\n        view is Window w ? w.AsWrapper() : ((UserControl)view).AsWrapper(_navigationManager!, View_Closing);\n\n    private static IEnumerable<Window> Windows =>\n        (Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.Windows ?? Array.Empty<Window>();\n\n    /// <inheritdoc />\n    public override IView? FindViewByViewModel(INotifyPropertyChanged viewModel)\n    {\n        if (_useNavigation)\n        {\n            return _navigationManager!.GetViewForViewModel(viewModel).AsWrapper(_navigationManager, View_Closing);\n        }\n        else\n        {\n            return Windows.FirstOrDefault(x => ReferenceEquals(viewModel, x.DataContext)).AsWrapper();\n        }\n    }\n\n    /// <inheritdoc />\n    public override IView? GetMainWindow()\n    {\n        if (_useNavigation)\n        {\n            return null;\n        }\n\n        return (Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow.AsWrapper();\n    }\n\n    /// <inheritdoc />\n    public override IView? GetDummyWindow()\n    {\n        if (_useNavigation)\n        {\n            return null;\n        }\n\n        var parent = new Window()\n        {\n            Height = 1,\n            Width = 1,\n            WindowDecorations = WindowDecorations.None,\n            ShowInTaskbar = false,\n            CanResize = false,\n            WindowStartupLocation = WindowStartupLocation.CenterScreen,\n            Background = Brushes.Transparent\n        };\n        parent.Show();\n        return parent.AsWrapper();\n    }\n\n    /// <inheritdoc />\n    protected override void Dispatch(Action action)\n    {\n        if (_dispatcher.CheckAccess())\n        {\n            action();\n        }\n        else\n        {\n            _dispatcher.Post(action, DispatcherPriority.Render);\n        }\n    }\n\n    /// <inheritdoc />\n    protected override Task<T> DispatchAsync<T>(Func<T> action) =>\n        //_dispatcher.CheckAccess() ? Task.FromResult(action()) : _dispatcher.InvokeAsync(action, DispatcherPriority.Render);\n        _dispatcher.CheckAccess() ? Task.FromResult(action()) : DispatchWithResult(action);\n\n    /// <summary>\n    /// Work-around for missing interface member in Avalonia v11-preview1.\n    /// </summary>\n    private Task<T> DispatchWithResult<T>(Func<T> action)\n    {\n        var tcs = new TaskCompletionSource<T>();\n        _dispatcher.Post(\n            () =>\n            {\n                tcs.SetResult(action());\n            },\n            DispatcherPriority.Render);\n        return tcs.Task;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/DialogService.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Class abstracting the interaction between view models and views when it comes to\n/// opening dialogs using the MVVM pattern in WPF.\n/// </summary>\npublic class DialogService : DialogServiceBase\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogServiceBase\"/> class.\n    /// </summary>\n    /// <remarks>\n    /// By default, <see cref=\"ViewLocatorBase\"/> is used as dialog type locator\n    /// and <see cref=\"DialogFactory\"/> is used as framework dialog factory.\n    /// </remarks>\n    public DialogService()\n        : this(null)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogService\"/> class.\n    /// </summary>\n    /// <param name=\"dialogManager\">Class responsible for UI interactions.</param>\n    /// <param name=\"viewModelFactory\">Function used to create view model instances. This function is used only by <see cref=\"IDialogService.CreateViewModel\"/> and is not used internally.</param>\n    public DialogService(\n        IDialogManager? dialogManager = null,\n        Func<Type, object?>? viewModelFactory = null)\n        : base(dialogManager ?? new DialogManager(dialogFactory: new DialogFactory()),\n            viewModelFactory)\n    {\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/FileSystem/AvaloniaDialogStorageFile.cs",
    "content": "﻿using System.IO;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <inheritdoc cref=\"IDialogStorageFile\"/>\npublic class AvaloniaDialogStorageFile : AvaloniaDialogStorageItem, IDialogStorageFile\n{\n    private readonly IStorageFile _item;\n    /// <summary>\n    /// Returns the Avalonia object source that was passed to the constructor. \n    /// </summary>\n    public IStorageFile Source => _item;\n\n    /// <summary>\n    /// Initializes a new instance of DialogStorageFile as a bridge to specified Avalonia IStorageFile.\n    /// </summary>\n    /// <param name=\"item\">An Avalonia IStorageFile from which to get the values.</param>\n    public AvaloniaDialogStorageFile(IStorageFile item) : base(item)\n    {\n        _item = item;\n    }\n\n    /// <inheritdoc />\n    public Task<Stream> OpenReadAsync() => _item.OpenReadAsync();\n\n    /// <inheritdoc />\n    public Task<Stream> OpenWriteAsync() => _item.OpenWriteAsync();\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/FileSystem/AvaloniaDialogStorageFolder.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <inheritdoc cref=\"IDialogStorageFolder\"/>\npublic class AvaloniaDialogStorageFolder : AvaloniaDialogStorageItem, IDialogStorageFolder\n{\n    private readonly IStorageFolder _item;\n    /// <summary>\n    /// Returns the Avalonia object source that was passed to the constructor. \n    /// </summary>\n    public IStorageFolder Source => _item;\n\n    /// <summary>\n    /// Initializes a new instance of DialogStorageFolder as a bridge to specified Avalonia IStorageFolder.\n    /// </summary>\n    /// <param name=\"item\">An Avalonia IStorageFolder from which to get the values.</param>\n    public AvaloniaDialogStorageFolder(IStorageFolder item) : base(item)\n    {\n        _item = item;\n    }\n\n    /// <inheritdoc />\n    public IAsyncEnumerable<IDialogStorageItem> GetItemsAsync()\n    {\n        var list = _item.GetItemsAsync();\n        return list.Select(x => x is IStorageFile f ? (IDialogStorageItem)new AvaloniaDialogStorageFile(f) : new AvaloniaDialogStorageFolder((IStorageFolder)x));\n    }\n\n    /// <inheritdoc />\n    public async Task<IDialogStorageFile?> CreateFileAsync(string name)\n    {\n        var result = await _item.CreateFileAsync(name);\n        return result?.ToDialog();\n    }\n\n    /// <inheritdoc />\n    public async Task<IDialogStorageFolder?> CreateFolderAsync(string name)\n    {\n        var result = await _item.CreateFolderAsync(name);\n        return result?.ToDialog();\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/FileSystem/AvaloniaDialogStorageItem.cs",
    "content": "﻿using System.IO;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <inheritdoc />\npublic abstract class AvaloniaDialogStorageItem : IDialogStorageItem\n{\n    private readonly IStorageItem _item;\n\n    /// <summary>\n    /// Initializes a new instance of DialogStorageItem as a bridge to specified Avalonia IStorageItem.\n    /// </summary>\n    /// <param name=\"item\">An Avalonia IStorageItem from which to get the values.</param>\n    protected AvaloniaDialogStorageItem(IStorageItem item)\n    {\n        _item = item;\n    }\n\n    /// <inheritdoc />\n    public string Name => _item.Name;\n\n    /// <inheritdoc />\n    public Uri Path => _item.Path;\n\n    /// <inheritdoc />\n    public string LocalPath => _item.Path.LocalPath;\n\n    /// <inheritdoc />\n    public async Task<DesktopDialogStorageItemProperties> GetBasicPropertiesAsync()\n    {\n        var result = await _item.GetBasicPropertiesAsync().ConfigureAwait(true);\n        return new DesktopDialogStorageItemProperties(result.Size, result.DateCreated, result.DateModified);\n    }\n\n    /// <inheritdoc />\n    public bool CanBookmark => _item.CanBookmark;\n\n    /// <inheritdoc />\n    public Task<string?> SaveBookmarkAsync() => _item.SaveBookmarkAsync();\n\n    /// <inheritdoc />\n    public async Task<IDialogStorageFolder?> GetParentAsync()\n    {\n        var result = await _item.GetParentAsync().ConfigureAwait(true);\n        return result != null ? new AvaloniaDialogStorageFolder(result) : null;\n    }\n\n    /// <inheritdoc />\n    public Task DeleteAsync() => _item.DeleteAsync();\n\n    /// <inheritdoc />\n    public async Task<IDialogStorageItem?> MoveAsync(IDialogStorageFolder destination)\n    {\n        var dest = await destination.ToAvaloniaAsync();\n        if (dest == null)\n        {\n            throw new FileNotFoundException($\"Cannot open path '${destination.Path}'\");\n        }\n        return await _item.MoveAsync(dest) switch\n        {\n            IStorageFile file => file.ToDialog(),\n            IStorageFolder folder => folder.ToDialog(),\n            _ => null\n        };\n    }\n\n    /// <inheritdoc />\n    public void Dispose() => _item.Dispose();\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/FileSystem/StorageExtensions.cs",
    "content": "﻿using Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Platform.Storage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Provides extension methods to convert between Avalonia and MvvmDialog storage file/folder types.\n/// </summary>\npublic static class StorageExtensions\n{\n    /// <summary>\n    /// Converts an Avalonia <see cref=\"IStorageFile\"/> into a MvvmDialogs <see cref=\"IDialogStorageFile\"/>. \n    /// </summary>\n    /// <param name=\"item\">The Avalonia storage object to convert.</param>\n    /// <returns>A MvvmDialogs storage object.</returns>\n    public static IDialogStorageFile ToDialog(this IStorageFile item) => new AvaloniaDialogStorageFile(item);\n\n    /// <summary>\n    /// Converts an Avalonia <see cref=\"IStorageFolder\"/> into a MvvmDialogs <see cref=\"IDialogStorageFolder\"/>.\n    /// </summary>\n    /// <param name=\"item\">The Avalonia storage object to convert.</param>\n    /// <returns>A MvvmDialogs storage object.</returns>\n    public static IDialogStorageFolder ToDialog(this IStorageFolder item) => new AvaloniaDialogStorageFolder(item);\n\n    // internal static IStorageFile Convert(this IDialogStorageFile item) => new DialogStorageFileToAvalonia(item);\n\n    internal static async Task<IStorageFolder?> ToAvaloniaAsync(this IDialogStorageFolder item)\n    {\n        if (item is AvaloniaDialogStorageFolder av)\n        {\n            return av.Source;\n        }\n        var storage = GetStorageProvider();\n        if (storage != null)\n        {\n            return await storage.TryGetFolderFromPathAsync(item.Path);\n        }\n        return null;\n    }\n\n    private static IStorageProvider? GetStorageProvider()\n    {\n        var result = Application.Current?.ApplicationLifetime switch\n        {\n            IClassicDesktopStyleApplicationLifetime d => d.MainWindow,\n            ISingleViewApplicationLifetime s => s.MainView as TopLevel,\n            _ => null\n        };\n        return result?.StorageProvider;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/IViewLocatorNavigation.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// When implemented alongside IViewLocator, allows to force single page navigation even on desktop.  \n/// </summary>\npublic interface IViewLocatorNavigation\n{\n    /// <summary>\n    /// Gets or sets whether to force single-page navigation. Setting this to true can allow running in single-page mode on desktop.\n    /// </summary>\n    bool ForceSinglePageNavigation { get; set; }\n\n    /// <summary>\n    /// Gets whether the application runs in single-page navigation mode.\n    /// </summary>\n    bool UseSinglePageNavigation { get; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/MvvmDialogs.Avalonia.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net8.0</TargetFrameworks>\n    <OutputType>Library</OutputType>\n    <AssemblyTitle>MVVM Dialogs for Avalonia</AssemblyTitle>\n    <AssemblyOriginatorKeyFile>..\\..\\StrongName.snk</AssemblyOriginatorKeyFile>\n    <PackageId>HanumanInstitute.MvvmDialogs.Avalonia</PackageId>\n    <AssemblyName>HanumanInstitute.MvvmDialogs.Avalonia</AssemblyName>\n    <RootNamespace>HanumanInstitute.MvvmDialogs.Avalonia</RootNamespace>\n    <GenerateDocumentationFile>True</GenerateDocumentationFile>\n    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n    <PackageIcon>icon_64x64.png</PackageIcon>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\MvvmDialogs\\MvvmDialogs.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"..\\icon_64x64.png\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n    <None Include=\"..\\StrongName.snk\">\n      <Link>StrongName.snk</Link>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Abstractions\" />\n  </ItemGroup>\n\n  <ItemGroup Condition=\"'$(TargetFramework)' == 'netstandard2.0' OR '$(TargetFramework)' == 'net8.0'\">\n    <PackageReference Include=\"System.Linq.AsyncEnumerable\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"Navigation\\NavigationRootWindow.axaml.cs\">\n      <DependentUpon>NavigationRootWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Navigation\\NavigationRoot.axaml.cs\">\n      <DependentUpon>NavigationRoot.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/MvvmDialogs.Avalonia.csproj.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:Boolean x:Key=\"/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=filesystem/@EntryIndexedValue\">True</s:Boolean></wpf:ResourceDictionary>"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/CancellableActions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// Provides a list of cancellable dialog actions such as messageboxes or popups. Useful for mobile back navigation.\n/// This class is static (application-wide) because it would be difficult to connect the context between NavigationManager and the MessageBox API.  \n/// </summary>\npublic static class CancellableActions\n{\n    private static readonly List<Action> s_list = new();\n\n    /// <summary>\n    /// Adds a cancellable dialog action to the list.\n    /// </summary>\n    /// <param name=\"action\">An action to cancel the dialog.</param>\n    public static void Add(Action action)\n    {\n        lock (s_list)\n        {\n            s_list.Add(action);\n        }\n    }\n\n    /// <summary>\n    /// Removes a cancellable action from the list. You must call this when the dialog is completed.\n    /// </summary>\n    /// <param name=\"action\">The same action that was previously added.</param>\n    public static void Remove(Action action)\n    {\n        lock (s_list)\n        {\n            s_list.Remove(action);\n        }\n    }\n\n    /// <summary>\n    /// Returns whether there are active dialog actions. \n    /// </summary>\n    public static bool Any\n    {\n        get\n        {\n            lock (s_list)\n            {\n                return s_list.Any();\n            }\n        }\n    }\n\n    /// <summary>\n    /// Returns how many dialog actions are active. \n    /// </summary>\n    public static int Count\n    {\n        get\n        {\n            lock (s_list)\n            {\n                return s_list.Count;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Cancels the last dialog operation in the list.\n    /// </summary>\n    /// <returns>True if a dialog operation was cancelled; otherwise false.</returns>\n    public static bool CancelLast()\n    {\n        lock (s_list)\n        {\n            if (s_list.Any())\n            {\n                s_list.Last().Invoke();\n                s_list.RemoveAt(s_list.Count - 1);\n                return true;\n            }\n        }\n        return false;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/DialogTask.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// Represents a dialog shown with single-page navigation that is awaiting result.\n/// </summary>\ninternal class DialogTask\n{\n    /// <summary>\n    /// Initializes a new instance of the DialogTask.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    public DialogTask(INotifyPropertyChanged viewModel, INotifyPropertyChanged ownerViewModel)\n    {\n        ViewModel = viewModel;\n        OwnerViewModel = ownerViewModel;\n    }\n\n    /// <summary>\n    /// Gets the view model of the new dialog.\n    /// </summary>\n    public INotifyPropertyChanged ViewModel { get; }\n    /// <summary>\n    /// Gets the view model that represents the owner of the dialog. \n    /// </summary>\n    public INotifyPropertyChanged? OwnerViewModel { get; }\n    /// <summary>\n    /// Gets a <see cref=\"TaskCompletionSource{TResult}\"/> that will notify when the dialog is closed.\n    /// </summary>\n    public TaskCompletionSource<bool> Completion { get; } = new();\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/INavigationManager.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// Manages navigation for single-view applications. \n/// </summary>\npublic interface INavigationManager\n{\n    /// <summary>\n    /// Returns the navigation history.\n    /// </summary>\n    public IReadOnlyList<INotifyPropertyChanged> History { get; }\n    /// <summary>\n    /// Initializes a new instance of the NavigationManager class.\n    /// </summary>\n    /// <param name=\"customNavigationRoot\">If specified, a custom user control will be set as the main view instead of the default NavigationRoot.</param>\n    void Launch(Control? customNavigationRoot = null);\n    /// <summary>\n    /// Gets or sets the view to display in the NavigationRoot control. NavigationRoot contains a binding to this property. \n    /// </summary>\n    UserControl? CurrentView { get; set; }\n    /// <summary>\n    /// Gets the view model of the current view.\n    /// </summary>\n    INotifyPropertyChanged? CurrentViewModel { get; }\n    /// <summary>\n    /// Returns a View for specified ViewModel type. It will only work if such a View has been created before.\n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to display in the View.</param>\n    /// <returns>The View instance, or null.</returns>\n    UserControl? GetViewForViewModel(INotifyPropertyChanged viewModel);\n    /// <summary>\n    /// Shows specified view.\n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to display in the View.</param>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    void Show(INotifyPropertyChanged viewModel, ViewDefinition viewDef);\n    /// <summary>\n    /// Shows specified view and waits for a response.\n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to display in the View.</param>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <returns>The dialog result.</returns>\n    Task ShowDialogAsync(INotifyPropertyChanged viewModel, ViewDefinition viewDef, INotifyPropertyChanged ownerViewModel);\n    /// <summary>\n    /// Closes specified view and shows the previous one. \n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to display in the View.</param>\n    void Close(INotifyPropertyChanged viewModel);\n    /// <summary>\n    /// Activates specified view, pumping it in front of the navigation history. \n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel to display in the View.</param>\n    /// <returns>Whether a matching view from history has been activated.</returns>\n    bool Activate(INotifyPropertyChanged viewModel);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/NavigationManager.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Interactivity;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <inheritdoc cref=\"INavigationManager\"/>\n/// <summary>\n/// Initializes a new instance of the NavigationManager class.\n/// </summary>\n/// <param name=\"closingHandler\">A handler for the Closing event. Note that the Closing event is unsupported by the <see cref=\"ViewNavigationWrapper\"/> and we thus support a single listener.</param>\npublic class NavigationManager(ViewClosingHandler? closingHandler) : INotifyPropertyChanged, INavigationManager\n{\n    /// <summary>\n    /// Navigation history contains only ViewModels to avoid keeping all constructed user controls in memory. The Views can be reconstructed from the ViewModels.\n    /// </summary>\n    private readonly List<INotifyPropertyChanged> _history = new();\n    private readonly ViewCache _viewCache = new();\n    private readonly List<DialogTask> _dialogs = new();\n    private readonly ViewClosingHandler? _closingHandler = closingHandler;\n\n    /// <summary>\n    /// Returns the navigation history.\n    /// </summary>\n    public IReadOnlyList<INotifyPropertyChanged> History => _history;\n\n    /// <summary>\n    /// Initializes a new instance of the NavigationManager class.\n    /// </summary>\n    /// <param name=\"customNavigationRoot\">If specified, a custom user control will be set as the main view instead of the default NavigationRoot.</param>\n    public void Launch(Control? customNavigationRoot = null)\n    {\n        // Initialize the NavigationRoot as the main application view.\n        var app = Application.Current?.ApplicationLifetime;\n        if (app is ISingleViewApplicationLifetime appSingle)\n        {\n            appSingle.MainView = customNavigationRoot ?? new NavigationRoot();\n            appSingle.MainView.DataContext = this;\n            appSingle.MainView.Loaded += (_, _) =>\n            {\n                TopLevel.GetTopLevel(appSingle.MainView)!.BackRequested += TopLevel_BackRequested;\n            };\n        }\n        else if (app is IClassicDesktopStyleApplicationLifetime appDesktop)\n        {\n            appDesktop.MainWindow = customNavigationRoot as Window ?? new NavigationRootWindow();\n            appDesktop.MainWindow.DataContext = this;\n        }\n    }\n\n    /// <summary>\n    /// Handle the mobile back button.\n    /// </summary>\n    private void TopLevel_BackRequested(object? sender, RoutedEventArgs e)\n    {\n        if (CancellableActions.Any)\n        {\n            // Cancel message boxes\n            CancellableActions.CancelLast();\n            e.Handled = true;\n        }\n        else if (CurrentView != null && _history.Count > 1)\n        {\n            // Cancel normal views\n            var current = CurrentViewModel!;\n            var view = CurrentView.AsWrapper(this, _closingHandler);\n            view.Close();\n            e.Handled = !ReferenceEquals(CurrentViewModel, current) || !view.ClosingConfirmed;\n        }\n    }\n\n    /// <inheritdoc />\n    public UserControl? CurrentView\n    {\n        get => _currentView;\n        set => SetField(ref _currentView, value);\n    }\n    private UserControl? _currentView;\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged? CurrentViewModel => (INotifyPropertyChanged?)CurrentView?.DataContext;\n\n    /// <inheritdoc />\n    public UserControl? GetViewForViewModel(INotifyPropertyChanged viewModel) =>\n        _viewCache.GetViewForViewModel(viewModel);\n\n    /// <inheritdoc />\n    public void Show(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        CurrentView = _viewCache.GetView(viewModel, viewDef);\n        _history.Remove(viewModel);\n        if (_dialogs.Any())\n        {\n            // Keep only 1 non-dialog history within a dialog.\n            var last = _history.Last();\n            if (!_dialogs.Any(x => object.ReferenceEquals(x.ViewModel, last)))\n            {\n                _history.Remove(last);\n            }\n        }\n        _history.Add(viewModel);\n    }\n\n    /// <inheritdoc />\n    public Task ShowDialogAsync(INotifyPropertyChanged viewModel, ViewDefinition viewDef, INotifyPropertyChanged ownerViewModel)\n    {\n        var view = _viewCache.GetView(viewModel, viewDef);\n        CurrentView = view;\n\n        if (_dialogs.Any(x => object.ReferenceEquals(x.ViewModel, viewModel)))\n        {\n            throw new InvalidOperationException(\"Dialog is already shown.\");\n        }\n        var dialog = new DialogTask(viewModel, ownerViewModel);\n        _dialogs.Add(dialog);\n        _history.Add(viewModel);\n        return dialog.Completion.Task;\n    }\n\n    /// <inheritdoc />\n    public void Close(INotifyPropertyChanged viewModel)\n    {\n        // Remove from history, whether or not it is currently visible.\n        _history.Remove(viewModel);\n        // If waiting for dialog result, stop waiting.\n        var dialog = _dialogs.FirstOrDefault(x => object.ReferenceEquals(x.ViewModel, viewModel));\n        if (dialog != null)\n        {\n            dialog.Completion.SetResult(true);\n            _dialogs.Remove(dialog);\n        }\n        // If visible, show previous one, or dialog owner. Ignore owner for non-dialogs.\n        if (object.ReferenceEquals(CurrentView?.DataContext, viewModel))\n        {\n            var prev = dialog?.OwnerViewModel ?? _history.LastOrDefault();\n            if (prev != null)\n            {\n                var prevView = _viewCache.GetViewForViewModel(prev);\n                // Remove all history after owner.\n                if (dialog?.OwnerViewModel != null)\n                {\n                    var pos = _history.IndexOf(dialog.OwnerViewModel);\n                    if (pos > -1 && _history.Count > pos + 1)\n                    {\n                        _history.RemoveRange(pos + 1, _history.Count - pos - 1);\n                    }\n                }\n                CurrentView = prevView;\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public bool Activate(INotifyPropertyChanged viewModel)\n    {\n        if (_history.Contains(viewModel))\n        {\n            _history.Remove(viewModel);\n            _history.Add(viewModel);\n            var view = _viewCache.GetViewForViewModel(viewModel);\n            CurrentView = view;\n            return true;\n        }\n        return false;\n    }\n\n    //\n    // public Control? GetMainView() =>\n    //     (Application.Current?.ApplicationLifetime as ISingleViewApplicationLifetime)?.MainView;\n    //\n\n    public event PropertyChangedEventHandler? PropertyChanged;\n\n    protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value))\n            return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/NavigationRoot.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             xmlns:mvvm=\"clr-namespace:HanumanInstitute.MvvmDialogs.Avalonia\"\n             xmlns:navigation=\"clr-namespace:HanumanInstitute.MvvmDialogs.Avalonia.Navigation\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n             x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Navigation.NavigationRoot\"\n             x:DataType=\"navigation:NavigationManager\">\n    <Design.DataContext>\n        <navigation:NavigationManager />\n    </Design.DataContext>\n    <ContentControl Content=\"{Binding CurrentView}\" />\n    <!--<TransitioningContentControl Content=\"{Binding CurrentView}\" >\n        <TransitioningContentControl.PageTransition>\n            <PageSlide Orientation=\"Horizontal\" Duration=\"0:00:00.300\" />\n        </TransitioningContentControl.PageTransition>\n    </TransitioningContentControl>-->\n</UserControl>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/NavigationRoot.axaml.cs",
    "content": "﻿using Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// The default application main view for single-view applications. \n/// </summary>\npublic partial class NavigationRoot : UserControl\n{\n    /// <summary>\n    /// Initializes a new instance of the NavigationRoot control.\n    /// </summary>\n    public NavigationRoot() => InitializeComponent();\n\n    private void InitializeComponent() => AvaloniaXamlLoader.Load(this);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/NavigationRootWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:avalonia=\"clr-namespace:HanumanInstitute.MvvmDialogs.Avalonia\"\n        xmlns:navigation=\"clr-namespace:HanumanInstitute.MvvmDialogs.Avalonia.Navigation\"\n        mc:Ignorable=\"d\" Width=\"600\" Height=\"450\"\n        x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Navigation.NavigationRootWindow\"\n        x:DataType=\"navigation:NavigationManager\"\n        Title=\"NavigationRootWindow\">\n    <Design.DataContext>\n        <navigation:NavigationManager />\n    </Design.DataContext>\n    <ContentControl Content=\"{Binding CurrentView}\" />\n    <!--<TransitioningContentControl Content=\"{Binding CurrentView}\">\n        <TransitioningContentControl.PageTransition>\n            <PageSlide Orientation=\"Horizontal\" Duration=\"0:00:00.300\" />\n        </TransitioningContentControl.PageTransition>\n    </TransitioningContentControl>-->\n</Window>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/NavigationRootWindow.axaml.cs",
    "content": "﻿using Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// The default application main window for single-view applications on desktop. \n/// </summary>\npublic partial class NavigationRootWindow : Window\n{\n    /// <summary>\n    /// Initializes a new instance of the NavigationRootWindow control.\n    /// </summary>\n    public NavigationRootWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/ViewCache.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// Cache of View instances with weak references.\n/// </summary>\npublic class ViewCache\n{\n    private readonly IList<ViewCacheItem> _cache = new List<ViewCacheItem>();\n\n    /// <summary>\n    /// Returns a View for specified ViewModel type. It will only work if such a View has been created before.\n    /// </summary>\n    /// <param name=\"viewModel\">The ViewModel associated with the View.</param>\n    /// <returns>The View instance, or null.</returns>\n    public UserControl? GetViewForViewModel(INotifyPropertyChanged viewModel)\n    {\n        var item = _cache.FirstOrDefault(x => x.ViewModelType == viewModel.GetType());\n        if (item != null)\n        {\n            if (item.View.TryGetTarget(out var result))\n            {\n                result.DataContext = viewModel;\n                return result;\n            }\n            else\n            {\n                var newView = (UserControl)item.ViewDef.Create();\n                item.View = new WeakReference<UserControl>(newView);\n                newView.DataContext = viewModel;\n                return newView;\n            }\n        }\n        return null;\n    }\n\n\n    /// <summary>\n    /// Returns an instance of specified viewType. A single instance will be returned per type, and it will be cached with a weak reference. \n    /// </summary>\n    /// <param name=\"viewModel\">The view model associated with the view.</param>\n    /// <param name=\"viewDef\">The view definition including its type and how to create one.</param>\n    /// <returns>The View instance.</returns>\n    public UserControl GetView(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        var item = _cache.FirstOrDefault(x => x.ViewModelType == viewModel.GetType());\n        if (item is null)\n        {\n            item = new ViewCacheItem(viewModel.GetType(), viewDef, (UserControl)viewDef.Create());\n            _cache.Add(item);\n        }\n        item.ViewDef = viewDef;\n\n        if (item.View.TryGetTarget(out var result))\n        {\n            result.DataContext = viewModel;\n            return result;\n        }\n        var newView = (UserControl)viewDef.Create();\n        item.View = new WeakReference<UserControl>(newView);\n        newView.DataContext = viewModel;\n        return newView;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/ViewCacheItem.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// Represents an item in the <see cref=\"ViewCache\"/> \n/// </summary>\ninternal class ViewCacheItem\n{\n    public ViewCacheItem(Type viewModelType, ViewDefinition viewDef, UserControl view)\n    {\n        ViewModelType = viewModelType;\n        ViewDef = viewDef;\n        View = new WeakReference<UserControl>(view);\n    }\n\n    /// <summary>\n    /// The data type of the ViewModel.\n    /// </summary>\n    public Type ViewModelType { get; }\n    /// <summary>\n    /// An action to create a view of desired type.\n    /// </summary>\n    public ViewDefinition ViewDef { get; set; }\n    /// <summary>\n    /// A weak reference to a View instance.\n    /// </summary>\n    public WeakReference<UserControl> View { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Navigation/ViewNavigationWrapper.cs",
    "content": "﻿#pragma warning disable CS1591\n#pragma warning disable CS8618\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\n/// <summary>\n/// Class wrapping an instance of Avalonia <see cref=\"Window\"/> within <see cref=\"IView\"/>.\n/// </summary>\n/// <seealso cref=\"IView\" />\npublic class ViewNavigationWrapper : IView\n{\n    private readonly INavigationManager _navigation;\n    private readonly ViewClosingHandler? _closingHandler;\n\n    /// <summary>\n    /// Initializes a new instance of the ViewNavigationWrapper class. \n    /// </summary>\n    /// <param name=\"navigationManager\">The <see cref=\"INavigationManager\"/> to set.</param>\n    /// <param name=\"closingHandler\">A handler for the Closing event. Note that the Closing event is unsupported in this class and we thus support a single listener.</param>\n    public ViewNavigationWrapper(INavigationManager navigationManager, ViewClosingHandler? closingHandler)\n    {\n        _navigation = navigationManager;\n        _closingHandler = closingHandler;\n    }\n\n    /// <inheritdoc />\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        ViewModel = viewModel;\n        ViewDef = viewDef;\n    }\n\n    /// <inheritdoc />\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        ViewModel = viewModel;\n        ViewDef = new ViewDefinition(view.GetType(), () => (UserControl)view);\n        Ref = (UserControl)view;\n    }\n\n    private ViewDefinition ViewDef { get; set; }\n\n    public IView? Owner { get; set; }\n\n    /// <summary>\n    /// Gets the UserControl reference held by this class.\n    /// </summary>\n    public UserControl? Ref { get; private set; }\n\n    /// <inheritdoc />\n    public object RefObj => Ref!;\n\n    /// <summary>\n    /// Unused event.\n    /// </summary>\n    public event EventHandler? Loaded;\n\n    /// <summary>\n    /// Unused event.\n    /// </summary>\n    public event EventHandler<CancelEventArgs>? Closing;\n\n    /// <summary>\n    /// Unused event.\n    /// </summary>\n    public event EventHandler? Closed;\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged ViewModel { get; private set; }\n\n    private void RaiseLoaded()\n    {\n        if (ViewModel is IViewLoaded vm)\n        {\n            vm.OnLoaded();\n        }\n    }\n\n    private void RaiseClosed()\n    {\n        if (ViewModel is IViewClosed vm)\n        {\n            vm.OnClosed();\n        }\n    }\n\n    /// <inheritdoc />\n    public async Task ShowDialogAsync(IView owner)\n    {\n        var task = _navigation.ShowDialogAsync(ViewModel, ViewDef, owner.ViewModel);\n        Ref = _navigation.CurrentView!;\n        RaiseLoaded();\n        await task.ConfigureAwait(true);\n    }\n\n    /// <inheritdoc />\n    public void Show(IView? owner)\n    {\n        _navigation.Show(ViewModel, ViewDef);\n        Ref = _navigation.CurrentView!;\n        RaiseLoaded();\n    }\n\n    /// <inheritdoc />\n    public void Activate()\n    {\n        if (!ReferenceEquals(_navigation.CurrentView?.DataContext, ViewModel))\n        {\n            if (_navigation.Activate(ViewModel))\n            {\n                Ref = _navigation.CurrentView!;\n                RaiseLoaded();\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public void Close()\n    {\n        var args = new CancelEventArgs();\n        if (!ClosingConfirmed)\n        {\n            _closingHandler?.Invoke(this, args);\n        }\n        if (!args.Cancel && ClosingConfirmed)\n        {\n            _isClosed = true;\n            _navigation.Close(ViewModel);\n            RaiseClosed();\n        }\n    }\n\n    /// <inheritdoc />\n    public bool IsEnabled\n    {\n        get => Ref?.IsEnabled ?? true;\n        set\n        {\n            if (Ref != null)\n            {\n                Ref.IsEnabled = value;\n            }\n        }\n    }\n\n    /// <inheritdoc />\n    public bool IsVisible => Ref != null && ReferenceEquals(Ref, _navigation.CurrentView);\n\n    /// <inheritdoc />    \n    public bool ClosingConfirmed { get; set; }\n\n    private bool _isClosed;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Private/NullableAttributes.cs",
    "content": "﻿#pragma warning disable MA0048 // File name must match type name\n#define INTERNAL_NULLABLE_ATTRIBUTES\n\n// https://github.com/dotnet/corefx/blob/48363ac826ccf66fbe31a5dcb1dc2aab9a7dd768/src/Common/src/CoreLib/System/Diagnostics/CodeAnalysis/NullableAttributes.cs\n\n// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\n// ReSharper disable once CheckNamespace\nnamespace System.Diagnostics.CodeAnalysis;\n\n#if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NET45 || NET451 || NET452 || NET6 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48\n/// <summary>Specifies that null is allowed as an input even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class AllowNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that null is disallowed as an input even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class DisallowNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class MaybeNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that an output will not be null even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class NotNullAttribute : Attribute\n{ }\n\n/// <summary>Specifies that when a method returns <see cref=\"ReturnValue\"/>, the parameter may be null even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class MaybeNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter may be null.\n    /// </param>\n    public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n}\n\n/// <summary>Specifies that when a method returns <see cref=\"ReturnValue\"/>, the parameter will not be null even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class NotNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter will not be null.\n    /// </param>\n    public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n}\n\n/// <summary>Specifies that the output will be non-null if the named parameter is non-null.</summary>\n[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class NotNullIfNotNullAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the associated parameter name.</summary>\n    /// <param name=\"parameterName\">\n    /// The associated parameter name.  The output will be non-null if the argument to the parameter specified is non-null.\n    /// </param>\n    public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName;\n\n    /// <summary>Gets the associated parameter name.</summary>\n    public string ParameterName { get; }\n}\n\n/// <summary>Applied to a method that will never return under any circumstance.</summary>\n[AttributeUsage(AttributeTargets.Method, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class DoesNotReturnAttribute : Attribute\n{ }\n\n/// <summary>Specifies that the method will not return if the associated Boolean parameter is passed the specified value.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\n    sealed class DoesNotReturnIfAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified parameter value.</summary>\n    /// <param name=\"parameterValue\">\n    /// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to\n    /// the associated parameter matches this value.\n    /// </param>\n    public DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue;\n\n    /// <summary>Gets the condition parameter value.</summary>\n    public bool ParameterValue { get; }\n}\n#endif // NETSTANDARD2_0 attributes\n\n#if NETSTANDARD2_1 || NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_1 || NET45 || NET451 || NET452 || NET6 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48\n/// <summary>\n/// Specifies that the method or property will ensure that the listed field and property members have\n/// not-<see langword=\"null\"/> values.\n/// </summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\nsealed class MemberNotNullAttribute : Attribute\n{\n    /// <summary>Gets field or property member names.</summary>\n    public string[] Members { get; }\n\n    /// <summary>Initializes the attribute with a field or property member.</summary>\n    /// <param name=\"member\">The field or property member that is promised to be not-null.</param>\n    public MemberNotNullAttribute(string member)\n    {\n        Members = new[] { member };\n    }\n\n    /// <summary>Initializes the attribute with the list of field and property members.</summary>\n    /// <param name=\"members\">The list of field and property members that are promised to be not-null.</param>\n    public MemberNotNullAttribute(params string[] members)\n    {\n        Members = members;\n    }\n}\n\n/// <summary>\n/// Specifies that the method or property will ensure that the listed field and property members have\n/// non-<see langword=\"null\"/> values when returning with the specified return value condition.\n/// </summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]\n#if INTERNAL_NULLABLE_ATTRIBUTES\ninternal\n#else\n    public\n#endif\nsealed class MemberNotNullWhenAttribute : Attribute\n{\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n\n    /// <summary>Gets field or property member names.</summary>\n    public string[] Members { get; }\n\n    /// <summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value,\n    /// the associated parameter will not be <see langword=\"null\"/>.\n    /// </param>\n    /// <param name=\"member\">The field or property member that is promised to be not-<see langword=\"null\"/>.</param>\n    public MemberNotNullWhenAttribute(bool returnValue, string member)\n    {\n        ReturnValue = returnValue;\n        Members = new[] { member };\n    }\n\n    /// <summary>Initializes the attribute with the specified return value condition and list of field and property members.\n    /// </summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value,\n    /// the associated parameter will not be <see langword=\"null\"/>.\n    /// </param>\n    /// <param name=\"members\">The list of field and property members that are promised to be not-null.</param>\n    public MemberNotNullWhenAttribute(bool returnValue, params string[] members)\n    {\n        ReturnValue = returnValue;\n        Members = members;\n    }\n}\n#endif // NETSTANDARD2_1 attributes\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/StrongViewLocator.cs",
    "content": "﻿using Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Controls.Templates;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Strongly-typed View Locator that does not rely on reflection.\n/// </summary>\npublic abstract class StrongViewLocator : StrongViewLocatorBase, IDataTemplate, IViewLocatorNavigation\n{\n    /// <summary>\n    /// Registers specified views as being associated with specified view model type.\n    /// </summary>\n    /// <typeparam name=\"TViewModel\">The type of view model to register.</typeparam>\n    /// <typeparam name=\"TView\">The view type to associate with the view model.</typeparam>\n    public void Register<TViewModel, TView>()\n        where TViewModel : INotifyPropertyChanged\n        where TView : Control, new() =>\n        Register<TViewModel>(new ViewDefinition(typeof(TView), () => new TView()));\n\n    /// <summary>\n    /// Registers specified views as being associated with specified view model type.\n    /// DesktopWindow or NavigationView will be selected based on runtime needs.  \n    /// </summary>\n    /// <typeparam name=\"TViewModel\">The type of view model to register.</typeparam>\n    /// <typeparam name=\"TNavView\">The UserControl view associated with the view model for navigation mode.</typeparam>\n    /// <typeparam name=\"TDeskView\">The Window view associated with the view model for desktop applications.</typeparam>\n    public void Register<TViewModel, TNavView, TDeskView>()\n        where TViewModel : INotifyPropertyChanged\n        where TNavView : UserControl, new()\n        where TDeskView : Window, new() =>\n        Register<TViewModel>(UseSinglePageNavigation ?\n            new ViewDefinition(typeof(TNavView), () => new TNavView()) :\n            new ViewDefinition(typeof(TDeskView), () => new TDeskView()));\n\n    /// <summary>\n    /// Gets or sets whether to force single-page navigation. Setting this to true can allow running in single-page mode on desktop.\n    /// </summary>\n    public bool ForceSinglePageNavigation\n    {\n        get => _forceSinglePageNavigation;\n        set\n        {\n            if (Registrations.Count > 0)\n            {\n                throw new InvalidOperationException(\"ForceSinglePageNavigation must be set before registering views.\");\n            }\n            _forceSinglePageNavigation = value;\n        }\n    }\n    private bool _forceSinglePageNavigation;\n\n    /// <inheritdoc />\n    public virtual Control Build(object? data)\n    {\n        try\n        {\n            return (Control)Create(data!);\n        }\n        catch (Exception)\n        {\n            return new TextBlock\n            {\n                Text = $\"No view registered for {data?.GetType().FullName}\"\n            };\n        }\n    }\n\n    /// <inheritdoc />\n    public virtual bool Match(object? data) => data is INotifyPropertyChanged;\n\n    /// <summary>\n    /// Gets whether the application runs in single-page navigation mode.\n    /// </summary>\n    public bool UseSinglePageNavigation => Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime || ForceSinglePageNavigation;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/UiExtensions.cs",
    "content": "﻿// using System.Diagnostics.CodeAnalysis;\n// using Avalonia.LogicalTree;\n\nusing System.Diagnostics.CodeAnalysis;\nusing Avalonia.Threading;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Extension methods.\n/// </summary>\npublic static class UiExtensions\n{\n    // /// <summary>\n    // /// Gets the owner of a <see cref=\"StyledElement\"/> wrapped in a <see cref=\"ViewWrapper\"/>.\n    // /// </summary>\n    // /// <param name=\"frameworkElement\">\n    // /// The <see cref=\"StyledElement\"/> to find the <see cref=\"ViewWrapper\"/> for.\n    // /// </param>\n    // /// <returns>The owning <see cref=\"ViewWrapper\"/> if found; otherwise null.</returns>\n    // internal static ViewWrapper? GetOwner(this StyledElement frameworkElement)\n    // {\n    //     var owner = frameworkElement as Window ?? frameworkElement.FindLogicalAncestorOfType<Window>();\n    //     return owner.AsWrapper();\n    // }\n\n    /// <summary>\n    /// Creates a ViewWrapper around specified window.\n    /// </summary>\n    /// <param name=\"window\">The Window to get a wrapper for.</param>\n    /// <returns>A ViewWrapper referencing the window.</returns>\n    [return: NotNullIfNotNull(\"window\")]\n    public static ViewWrapper? AsWrapper(this Window? window)\n    {\n        if (window != null)\n        {\n            var result = new ViewWrapper();\n            result.InitializeExisting((INotifyPropertyChanged)window.DataContext!, window);\n            return result;\n        }\n        return null;\n    }\n\n    /// <summary>\n    /// Creates a ViewNavigationWrapper around specified user control.\n    /// </summary>\n    /// <param name=\"view\">The UserControl to get a wrapper for.</param>\n    /// <param name=\"navigationManager\">The <see cref=\"INavigationManager\"/> to set.</param>\n    /// <param name=\"closingHandler\">A handler for the Closing event. Not that the Closing event is unsupported in this class and we thus support a single listener.</param>\n    /// <returns>A ViewNavigationWrapper referencing the user control.</returns>\n    [return: NotNullIfNotNull(\"view\")]\n    public static ViewNavigationWrapper? AsWrapper(this UserControl? view, INavigationManager navigationManager, ViewClosingHandler? closingHandler)\n    {\n        if (view != null)\n        {\n            var result = new ViewNavigationWrapper(navigationManager, closingHandler);\n            result.InitializeExisting((INotifyPropertyChanged)view.DataContext!, view);\n            return result;\n        }\n        return null;\n    }\n\n    /// <summary>\n    /// Returns the <see cref=\"IView\"/> RefObj property as an Avalonia ContentControl.\n    /// </summary>\n    /// <param name=\"view\">The IView to get the Ref property for.</param>\n    /// <returns>The ContentControl held within the IView.</returns>\n    public static ContentControl? GetRef(this IView? view)\n    {\n        if (view is ViewWrapper v)\n        {\n            return v.Ref;\n        }\n        else if (view is ViewNavigationWrapper nav)\n        {\n            return nav.Ref;\n        }\n        return null;\n    }\n\n    // /// <summary>\n    // /// Converts an IView into a ViewWrapper.\n    // /// </summary>\n    // /// <param name=\"window\">The IWindow to convert.</param>\n    // /// <returns>A ViewWrapper referencing the window.</returns>\n    // [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"window\")]\n    // public static ViewWrapper? AsWrapper(this IView? window) =>\n    //     (ViewWrapper?)window;\n\n    /// <summary>\n    /// Runs a synchronous action asynchronously on the UI thread.\n    /// </summary>\n    /// <param name=\"action\">The action to run asynchronously.</param>\n    /// <typeparam name=\"T\">The return type of the action.</typeparam>\n    /// <returns>The result of the action.</returns>\n    public static Task<T> RunUiAsync<T>(Func<T> action)\n    {\n        TaskCompletionSource<T> completion = new();\n        Dispatcher.UIThread.Post(new Action(() => completion.SetResult(action())));\n        return completion.Task;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/Usings.cs",
    "content": "global using System;\nglobal using System.ComponentModel;\nglobal using System.Threading.Tasks;\nglobal using Avalonia;\nglobal using Avalonia.Controls;\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/ViewClosingHandler.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// A handler for the Closing event. Note that the Closing event is unsupported by the <see cref=\"ViewNavigationWrapper\"/> and we thus support a single listener.\n/// </summary>\npublic delegate void ViewClosingHandler(IView dialog, CancelEventArgs e);\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/ViewLocatorBase.cs",
    "content": "﻿using System.Reflection;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Controls.Templates;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Base implementation of Avalonia ViewLocator. Override GetViewName to customize paths.\n/// </summary>\npublic class ViewLocatorBase : IDataTemplate, IViewLocator, IViewLocatorNavigation\n{\n    /// <inheritdoc />\n    public bool ForceSinglePageNavigation { get; set; }\n\n    /// <summary>\n    /// Returns the view type name for specified view model type. By default, it replaces 'ViewModel' with 'View'.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to get the view type for.</param>\n    /// <returns>The view type name.</returns>\n    protected virtual string GetViewName(object viewModel)\n    {\n        const string ViewModel = \"ViewModel\";\n        var result = viewModel.GetType().FullName!.Replace(\".ViewModels.\", \".Views.\");\n        if (result.EndsWith(ViewModel))\n        {\n            result = result.Remove(result.Length - ViewModel.Length) + (UseSinglePageNavigation ? \"View\" : \"Window\");\n        }\n        return result;\n    }\n\n    /// <inheritdoc />\n    public virtual Control Build(object? data)\n    {\n        try\n        {\n            return (Control)Create(data!);\n        }\n        catch (Exception)\n        {\n            return new TextBlock\n            {\n                Text = \"Not Found: \" + GetViewName(data!)\n            };\n        }\n    }\n\n    /// <inheritdoc />\n    public virtual ViewDefinition Locate(object viewModel)\n    {\n        var name = GetViewName(viewModel);\n        // var type = Type.GetType(name, x => Assembly.GetEntryAssembly(), null, false);\n        var viewType = Assembly.GetAssembly(viewModel.GetType())?.GetType(name);\n\n        if (viewType is null || (!typeof(Control).IsAssignableFrom(viewType) && !typeof(Window).IsAssignableFrom(viewType) && !typeof(IView).IsAssignableFrom(viewType)))\n        {\n            var message = $\"Dialog view of type {name} for view model {viewModel.GetType().FullName} is missing.\";\n            const string ErrorInfo = \"Avalonia project template includes ViewLocator in the project base. \" +\n                                     \"You can customize it to map your view models to your views.\";\n            throw new TypeLoadException(message + Environment.NewLine + ErrorInfo);\n        }\n        return new ViewDefinition(viewType, () => CreateViewInstance(viewType));\n    }\n\n    /// <summary>\n    /// The method used to create the view instance from it's <see cref=\"Type\"/>.\n    /// Uses <see cref=\"Activator.CreateInstance(Type)\"/> by default.\n    /// </summary>\n    /// <param name=\"viewType\">The type to create a view for.</param>\n    /// <returns>The created view.</returns>\n    protected virtual object CreateViewInstance(Type viewType) => Activator.CreateInstance(viewType)!;\n\n    /// <inheritdoc />\n    public virtual object Create(object viewModel) =>\n        Locate(viewModel).Create();\n\n    /// <inheritdoc />\n    public virtual bool Match(object? data) => data is INotifyPropertyChanged;\n\n    /// <inheritdoc />\n    public bool UseSinglePageNavigation => Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime || ForceSinglePageNavigation;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia/ViewWrapper.cs",
    "content": "// ReSharper disable VirtualMemberCallInConstructor\n\nusing System.Collections.Generic;\nusing Avalonia.Controls.ApplicationLifetimes;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Class wrapping an instance of Avalonia <see cref=\"Window\"/> within <see cref=\"IView\"/>.\n/// </summary>\n/// <seealso cref=\"IView\" />\npublic class ViewWrapper : IView\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewWrapper\"/> class.\n    /// </summary>\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        Ref = (Window)viewDef.Create();\n        ViewModel = viewModel;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewWrapper\"/> class.\n    /// </summary>\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        Ref = (Window)view;\n        ViewModel = viewModel;\n    }\n\n    /// <summary>\n    /// Gets the Window reference held by this class.\n    /// </summary>\n    public Window Ref { get; private set; } = null!;\n\n    /// <summary>\n    /// Gets the Window reference held by this class.\n    /// </summary>\n    public object RefObj => Ref;\n\n    /// <summary>\n    /// Fired when the window is loaded.\n    /// </summary>\n    public event EventHandler? Loaded\n    {\n        add => Ref.Opened += value;\n        remove => Ref.Opened -= value;\n    }\n\n    /// <summary>\n    /// Fired when the window is closing.\n    /// </summary>\n    public event EventHandler<CancelEventArgs>? Closing\n    {\n        add\n        {\n            if (value != null)\n            {\n                var handler = new EventHandler<WindowClosingEventArgs>(value.Invoke);\n                _closingHandlers.Add(value, handler);\n                Ref.Closing += handler;\n            }\n        }\n        remove\n        {\n            if (value != null)\n            {\n                Ref.Closing += _closingHandlers[value];\n                _closingHandlers.Remove(value);\n            }\n        }\n    }\n    private readonly Dictionary<EventHandler<CancelEventArgs>, EventHandler<WindowClosingEventArgs>> _closingHandlers = new();\n\n    /// <summary>\n    /// Fired when the window is closed.\n    /// </summary>\n    public event EventHandler? Closed\n    {\n        add => Ref.Closed += value;\n        remove => Ref.Closed -= value;\n    }\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged ViewModel\n    {\n        get => (INotifyPropertyChanged)Ref.DataContext!;\n        set => Ref.DataContext = value;\n    }\n\n    /// <inheritdoc />\n    public Task ShowDialogAsync(IView owner)\n    {\n        var window = (Window)owner.RefObj;\n        SetMainWindowIfEmpty(window);\n        return Ref.ShowDialog<bool?>(window);\n    }\n\n    /// <inheritdoc />\n    public void Show(IView? owner)\n    {\n        var own = owner?.RefObj as Window;\n        SetMainWindowIfEmpty(Ref);\n        if (own != null)\n        {\n            Ref.Show(own);\n        }\n        else\n        {\n            Ref.Show();\n        }\n    }\n\n    /// <inheritdoc />\n    public void Activate() => Ref.Activate();\n\n    /// <inheritdoc />\n    public void Close() => Ref.Close();\n\n    /// <inheritdoc />\n    public bool IsEnabled\n    {\n        get => Ref.IsEnabled;\n        set => Ref.IsEnabled = value;\n    }\n\n    /// <inheritdoc />\n    public bool IsVisible => Ref.IsVisible;\n\n    /// <inheritdoc />    \n    public bool ClosingConfirmed { get; set; }\n\n    private void SetMainWindowIfEmpty(Window? window)\n    {\n        if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime { MainWindow: null } desktop)\n        {\n            desktop.MainWindow = window;\n        }\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/DialogFactoryExtensions.cs",
    "content": "﻿\n// ReSharper disable CheckNamespace\n\nusing HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Provides extensions to IDialogFactory.\n/// </summary>\npublic static class DialogFactoryExtensions\n{\n    /// <summary>\n    /// Registers DialogHost handlers in the dialog factory chain.\n    /// </summary>\n    /// <param name=\"factory\">The dialog factory to add handlers for.</param>\n    /// <returns>A new dialog factory that will fallback to the previous one.</returns>\n    public static IDialogFactory AddDialogHost(this IDialogFactory factory) =>\n        new DialogHostDialogFactory(factory);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/DialogHostDialogFactory.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\n\n/// <summary>\n/// Default framework dialog factory that will create instances of standard framework dialogs.\n/// </summary>\npublic class DialogHostDialogFactory : DialogFactoryBase\n{\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    public DialogHostDialogFactory(IDialogFactory? chain = null)\n        : base(chain)\n    {\n    }\n\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings) =>\n        settings switch\n        {\n            // MessageBoxSettings s => await ShowMessageBoxDialogAsync(owner, s, appSettings).ConfigureAwait(true),\n            DialogHostSettings s => await ShowDialogHostAsync(owner, s),\n            _ => await base.ShowDialogAsync(owner, settings).ConfigureAwait(true)\n        };\n\n    private async Task<object?> ShowDialogHostAsync(IView? owner, DialogHostSettings settings)\n    {\n        if (owner == null) { throw new ArgumentNullException(nameof(owner)); }\n        var view = new DialogHostView(settings);\n        if (view.ViewModel != null)\n        {\n            GetDialogManager().HandleDialogEvents(view.ViewModel, view);\n        }\n\n        await view.ShowDialogAsync(owner).ConfigureAwait(true);\n        return view.DialogResult;\n    }\n\n    // private Task<bool?> ShowMessageBoxAsync(IView? owner, MessageBoxSettings settings, AppDialogSettingsBase appSettings)\n    // {\n    //     return Task.FromResult<bool?>(null);\n    // }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/DialogHostSettings.cs",
    "content": "﻿using Avalonia.Media;\nusing DialogHostAvalonia;\nusing DialogHostAvalonia.Positioners;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\n\n/// <summary>\n/// Settings for showing DialogHost overlays.\n/// </summary>\npublic class DialogHostSettings : DialogSettingsBase\n{\n    /// <summary>\n    /// Initializes a new instance of the DialogHostSettings class.\n    /// </summary>\n    public DialogHostSettings()\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the DialogHostSettings class.\n    /// </summary>\n    /// <param name=\"content\">The view model of the view to show. The view will be resolved through Avalonia's ViewLocator.</param>\n    public DialogHostSettings(object? content)\n    {\n        Content = content;\n    }\n\n    /// <summary>\n    /// The view model of the view to show, or any content or user control. The view will be resolved through Avalonia's ViewLocator.\n    /// </summary>\n    public object? Content { get; set; }\n    /// <summary>\n    /// A handler that will be called when the view is closing, allowing to cancel the close.\n    /// </summary>\n    public DialogClosingEventHandler? ClosingHandler { get; set; }\n    /// <summary>\n    /// Whether to close the view when clicking elsewhere in the parent container.\n    /// </summary>\n    public bool CloseOnClickAway { get; set; }\n    /// <summary>\n    /// The close value to set when closing by clicking away.\n    /// </summary>\n    public object? CloseOnClickAwayParameter { get; set; }\n    /// <summary>\n    /// A class allowing to customize the positioning of the dialog.\n    /// </summary>\n    public IDialogPopupPositioner? PopupPositioner { get; set; }\n    /// <summary>\n    /// The background of the overlay.\n    /// </summary>\n    public IBrush? OverlayBackground { get; set; }\n    /// <summary>\n    /// The margin of the dialog view.\n    /// </summary>\n    public Thickness? DialogMargin { get; set; }\n    /// <summary>\n    /// Whether to disable the popup animation.\n    /// </summary>\n    public bool DisableOpeningAnimation { get; set; } = true;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/DialogHostView.cs",
    "content": "﻿using System.ComponentModel;\nusing Avalonia.VisualTree;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\n\n/// <summary>\n/// An <see cref=\"IView\"/> implementation for DialogHost.\n/// </summary>\npublic class DialogHostView : IView\n{\n    private static readonly object s_lockCreateHost = new();\n\n    /// <summary>\n    /// Initializes a new instance of the DialogHostView.\n    /// </summary>\n    /// <param name=\"settings\">The DialogHost display settings.</param>\n    public DialogHostView(DialogHostSettings settings)\n    {\n        Settings = settings;\n    }\n\n    /// <summary>\n    /// Gets or sets the display settings.\n    /// </summary>\n    public DialogHostSettings Settings { get; set; }\n\n    /// <summary>\n    /// Gets or sets the dialog result.\n    /// </summary>\n    public object? DialogResult { get; set; }\n\n    /// <inheritdoc />\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    { }\n\n    /// <inheritdoc />\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    { }\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged? ViewModel => Settings.Content as INotifyPropertyChanged;\n    /// <inheritdoc />\n    public object RefObj => null!;\n    /// <inheritdoc />\n    public event EventHandler? Loaded;\n    /// <inheritdoc />\n    public event EventHandler<CancelEventArgs>? Closing;\n    /// <inheritdoc />\n    public event EventHandler? Closed;\n\n    /// <inheritdoc />\n    public void Show(IView? owner) => throw new NotImplementedException();\n\n    /// <summary>\n    /// Returns a DialogHost instance to manage the dialog.  \n    /// </summary>\n    private DialogHostAvalonia.DialogHost InitHost(ContentControl owner)\n    {\n        DialogHostAvalonia.DialogHost? host;\n        lock (s_lockCreateHost) // lock to avoid creating host twice\n        {\n            host = owner.FindDescendantOfType<DialogHostAvalonia.DialogHost>();\n            if (host == null)\n            {\n                host = new DialogHostAvalonia.DialogHost();\n                var temp = owner.Content;\n                owner.Content = null;\n                host.Content = temp;\n                owner.Content = host;\n            }\n        }\n        Host = host;\n        return host;\n    }\n\n    /// <summary>\n    /// Returns the DialogHost that was last initiated.\n    /// </summary>\n    private DialogHostAvalonia.DialogHost? Host { get; set; }\n\n    /// <inheritdoc />\n    public async Task ShowDialogAsync(IView owner)\n    {\n        var host = InitHost(owner.GetRef()!);\n\n        host.CloseOnClickAway = Settings.CloseOnClickAway;\n        host.CloseOnClickAwayParameter = Settings.CloseOnClickAwayParameter;\n        host.PopupPositioner = Settings.PopupPositioner;\n        host.OverlayBackground = Settings.OverlayBackground ?? host.OverlayBackground;\n        host.DialogMargin = Settings.DialogMargin ?? host.DialogMargin;\n        host.DisableOpeningAnimation = Settings.DisableOpeningAnimation;\n\n        var closingHandler = Settings.ClosingHandler ?? ((_, e) =>\n        {\n            var param = new CancelEventArgs();\n            Closing?.Invoke(this, param);\n            if (param.Cancel)\n            {\n                e.Cancel();\n            }\n        });\n\n        try\n        {\n            host.DialogOpened += Host_DialogOpened;\n            void Cancel() => Close();\n            CancellableActions.Add(Cancel);\n            DialogResult = await DialogHostAvalonia.DialogHost.Show(Settings.Content!, host, closingHandler).ConfigureAwait(true);\n            CancellableActions.Remove(Cancel);\n            Closed?.Invoke(this, EventArgs.Empty);\n        }\n        finally\n        {\n            host.DialogOpened -= Host_DialogOpened;\n        }\n    }\n\n    private void Host_DialogOpened(object sender, EventArgs e)\n    {\n        Loaded?.Invoke(this, EventArgs.Empty);\n    }\n\n    /// <inheritdoc />\n    public void Activate()\n    { }\n\n    /// <inheritdoc />\n    public void Close()\n    {\n        Host?.CloseDialogCommand.Execute(null);\n    }\n\n    /// <inheritdoc />\n    public bool IsEnabled { get; set; } = true;\n\n    /// <inheritdoc />\n    public bool IsVisible => true;\n\n    /// <inheritdoc />\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/DialogServiceExtensions.cs",
    "content": "﻿using System.ComponentModel;\nusing HanumanInstitute.MvvmDialogs.Avalonia.DialogHost;\n\n// ReSharper disable once CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Provides IDialogService extensions for fluent dialogs.\n/// </summary>\npublic static class DialogServiceExtensions\n{\n    /// <summary>\n    /// Displays a DialogHost.Avalonia content dialog.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the content dialog.</param>\n    /// <returns>The dialog button that was pressed.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<object?> ShowDialogHostAsync(this IDialogService service, INotifyPropertyChanged ownerViewModel,\n        DialogHostSettings? settings = null)\n    {\n        if (ownerViewModel == null) throw new ArgumentNullException(nameof(ownerViewModel));\n        if (settings == null) throw new ArgumentNullException(nameof(settings));\n        if (settings.Content == null) throw new ArgumentNullException(nameof(settings.Content));\n\n        return await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings).ConfigureAwait(true);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/MvvmDialogs.Avalonia.DialogHost.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n      <TargetFrameworks>net10.0;net8.0</TargetFrameworks>\n      <LangVersion>default</LangVersion>\n      <Nullable>enable</Nullable>\n      <OutputType>Library</OutputType>\n      <AssemblyTitle>MvvmDialogs with DialogHost.Avalonia</AssemblyTitle>\n      <Title>MvvmDialogs with DialogHost.Avalonia</Title>\n      <AssemblyOriginatorKeyFile>..\\..\\StrongName.snk</AssemblyOriginatorKeyFile>\n      <PackageId>HanumanInstitute.MvvmDialogs.Avalonia.DialogHost</PackageId>\n      <AssemblyName>HanumanInstitute.MvvmDialogs.Avalonia.DialogHost</AssemblyName>\n      <RootNamespace>HanumanInstitute.MvvmDialogs.Avalonia.DialogHost</RootNamespace>\n      <GenerateDocumentationFile>True</GenerateDocumentationFile>\n      <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n      <PackageIcon>icon_64x64.png</PackageIcon>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"Avalonia\"/>\n      <PackageReference Include=\"DialogHost.Avalonia\"/>\n    </ItemGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n      <ProjectReference Include=\"..\\MvvmDialogs\\MvvmDialogs.csproj\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"..\\icon_64x64.png\">\n        <Pack>True</Pack>\n        <PackagePath>/</PackagePath>\n        <Link>icon_64x64.png</Link>\n      </None>\n    </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.DialogHost/Usings.cs",
    "content": "global using System;\nglobal using System.Threading.Tasks;\nglobal using Avalonia;\nglobal using Avalonia.Controls;\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/ContentDialogSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n\n/// <summary>\n/// Represents the content dialog settings.\n/// </summary>\npublic class ContentDialogSettings : DialogSettingsBase\n{\n    /// <summary>\n    /// Initializes a new instance of the ContentDialogSettings class.\n    /// </summary>\n    public ContentDialogSettings() { }\n\n    /// <summary>\n    /// Initializes a new instance of the ContentDialogSettings class with specified content.\n    /// </summary>\n    /// <param name=\"content\">The content of the dialog. Can be a ViewModel, Control, or any content.</param>\n    public ContentDialogSettings(object? content)\n    {\n        Content = content;\n    }\n\n    /// <summary>\n    /// Gets or sets the content of the dialog.\n    /// </summary>\n    public object? Content { get; set; }\n    /// <summary>\n    /// Gets or sets the text to display on the close button.\n    /// </summary>\n    public string CloseButtonText { get; set; } = string.Empty;\n    /// <summary>\n    /// Gets or sets the text to display on the primary button.\n    /// </summary>\n    public string PrimaryButtonText { get; set; } = string.Empty;\n    /// <summary>\n    /// Gets or sets the text to be displayed on the secondary button.\n    /// </summary>\n    public string SecondaryButtonText { get; set; } = string.Empty;\n    /// <summary>\n    /// Gets or sets a value that indicates which button on the dialog is the default action.\n    /// </summary>\n    public FAContentDialogButton DefaultButton { get; set; } = FAContentDialogButton.None;\n    /// <summary>\n    /// Gets or sets whether the dialog's primary button is enabled.\n    /// </summary>\n    public bool IsPrimaryButtonEnabled { get; set; } = true;\n    /// <summary>\n    /// Gets or sets whether the dialog's secondary button is enabled.\n    /// </summary>\n    public bool IsSecondaryButtonEnabled { get; set; } = true;\n    /// <summary>\n    /// Gets or sets whether the Dialog should show full screen\n    /// On WinUI3, at least desktop, this just show the dialog at \n    /// the maximum size of a ContentDialog.\n    /// </summary>\n    public bool FullSizeDesired { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/DialogFactoryExtensions.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n// ReSharper disable CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Provides extensions to IDialogFactory.\n/// </summary>\npublic static class DialogFactoryExtensions\n{\n    /// <summary>\n    /// Registers Fluent handlers in the dialog factory chain.\n    /// </summary>\n    /// <param name=\"factory\">The dialog factory to add handlers for.</param>\n    /// <param name=\"messageBoxType\">Specifies how MessageBox dialogs will be handled.</param>\n    /// <returns>A new dialog factory that will fallback to the previous one.</returns>\n    public static IDialogFactory AddFluent(this IDialogFactory factory, FluentMessageBoxType messageBoxType = FluentMessageBoxType.TaskDialog) =>\n        new FluentDialogFactory(messageBoxType, factory);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/DialogServiceExtensions.cs",
    "content": "﻿using System.ComponentModel;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n// ReSharper disable once CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Provides IDialogService extensions for fluent dialogs.\n/// </summary>\npublic static class DialogServiceExtensions\n{\n    /// <summary>\n    /// Displays a FluentAvalonia content dialog.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the content dialog.</param>\n    /// <returns>The dialog button that was pressed.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<FAContentDialogResult> ShowContentDialogAsync(this IDialogService service, INotifyPropertyChanged ownerViewModel,\n        ContentDialogSettings? settings = null)\n    {\n        ArgumentNullException.ThrowIfNull(ownerViewModel);\n\n        return (FAContentDialogResult)(await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings ?? new ContentDialogSettings()).ConfigureAwait(true) ?? FAContentDialogResult.None);\n    }\n\n    /// <summary>\n    /// Displays the FolderBrowserDialog.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the task dialog.</param>\n    /// <returns>The dialog return value.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static async Task<FATaskDialogStandardResult> ShowTaskDialogAsync(this IDialogService service, INotifyPropertyChanged ownerViewModel,\n        TaskDialogSettings? settings = null)\n    {\n        ArgumentNullException.ThrowIfNull(ownerViewModel);\n\n        return (FATaskDialogStandardResult)(await service.DialogManager.ShowFrameworkDialogAsync(\n            ownerViewModel, settings ?? new TaskDialogSettings()).ConfigureAwait(true) ?? FATaskDialogStandardResult.None);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/FluentApi.cs",
    "content": "﻿// using HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n//\n// namespace HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n//\n// internal class FluentApi : IFluentApi\n// {\n//     public async Task<ContentDialogResult> ShowContentDialog(ContentControl? owner, ContentDialogSettings settings)\n//     {\n//         var dialog = new ContentDialog()\n//         {\n//             Title = settings.Title,\n//             Content = settings.Content,\n//             CloseButtonText = settings.CloseButtonText,\n//             PrimaryButtonText = settings.PrimaryButtonText,\n//             SecondaryButtonText = settings.SecondaryButtonText,\n//             DefaultButton = settings.DefaultButton,\n//             IsPrimaryButtonEnabled = settings.IsPrimaryButtonEnabled,\n//             IsSecondaryButtonEnabled = settings.IsSecondaryButtonEnabled,\n//             FullSizeDesired = settings.FullSizeDesired\n//         };\n//\n//         // Allow the dialog to be closed by mobile back navigation.\n//         void Cancel() => dialog.Hide();\n//         CancellableActions.Add(Cancel);\n//         var result = await dialog.ShowAsync().ConfigureAwait(true);\n//         CancellableActions.Remove(Cancel);\n//         return result;\n//     }\n//\n//     public async Task<object> ShowTaskDialog(ContentControl? owner, TaskDialogSettings settings)\n//     {\n//         var dialog = new TaskDialog()\n//         {\n//             Title = settings.Title,\n//             Header = settings.Header,\n//             SubHeader = settings.SubHeader,\n//             Content = settings.Content,\n//             IconSource = settings.IconSource,\n//             FooterVisibility = settings.FooterVisibility,\n//             IsFooterExpanded = settings.IsFooterExpanded,\n//             Footer = settings.Footer,\n//             ShowProgressBar = settings.ShowProgressBar\n//         };\n//         foreach (var button in settings.Buttons)\n//         {\n//             dialog.Buttons.Add(button);\n//         }\n//         if (owner != null)\n//         {\n//             dialog.XamlRoot = TopLevel.GetTopLevel(owner);\n//         }\n//\n//         // Allow the dialog to be closed by mobile back navigation.\n//         void Cancel() => dialog.Hide();\n//         CancellableActions.Add(Cancel);\n//         var result = await dialog.ShowAsync().ConfigureAwait(true);\n//         CancellableActions.Remove(Cancel);\n//         return result;\n//     }\n// }\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/FluentContentView.cs",
    "content": "﻿using System.ComponentModel;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n\n/// <summary>\n/// An <see cref=\"IView\"/> implementation for FluentContentDialog.\n/// </summary>\npublic class FluentContentView : IView\n{\n    /// <summary>\n    /// Initializes a new instance of the FluentContentView.\n    /// </summary>\n    /// <param name=\"settings\">The ContentDialog display settings.</param>\n    public FluentContentView(ContentDialogSettings settings)\n    {\n        Settings = settings;\n    }\n\n    /// <summary>\n    /// Gets or sets the display settings.\n    /// </summary>\n    public ContentDialogSettings Settings { get; set; }\n\n    /// <summary>\n    /// Gets or sets the dialog result.\n    /// </summary>\n    public FAContentDialogResult DialogResult { get; set; } = FAContentDialogResult.None;\n\n    /// <inheritdoc />\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    { }\n\n    /// <inheritdoc />\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    { }\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged? ViewModel => Settings.Content as INotifyPropertyChanged;\n    /// <summary>\n    /// Gets a reference to the displayed ContentDialog.\n    /// </summary>\n    public FAContentDialog? Ref { get; private set; }\n    /// <inheritdoc />\n    public object RefObj => Ref!;\n    /// <inheritdoc />\n    public event EventHandler? Loaded;\n    /// <inheritdoc />\n    public event EventHandler<CancelEventArgs>? Closing;\n    /// <inheritdoc />\n    public event EventHandler? Closed;\n\n    /// <inheritdoc />\n    public void Show(IView? owner) => throw new NotImplementedException();\n\n    /// <inheritdoc />\n    public async Task ShowDialogAsync(IView owner)\n    {\n        var dialog = new FAContentDialog()\n        {\n            Title = Settings.Title,\n            Content = Settings.Content,\n            CloseButtonText = Settings.CloseButtonText,\n            PrimaryButtonText = Settings.PrimaryButtonText,\n            SecondaryButtonText = Settings.SecondaryButtonText,\n            DefaultButton = Settings.DefaultButton,\n            IsPrimaryButtonEnabled = Settings.IsPrimaryButtonEnabled,\n            IsSecondaryButtonEnabled = Settings.IsSecondaryButtonEnabled,\n            FullSizeDesired = Settings.FullSizeDesired\n        };\n        Ref = dialog;\n\n        dialog.Loaded += (s, e) => Loaded?.Invoke(s, e);\n        dialog.Closing += (s, e) =>\n        {\n            var args = new CancelEventArgs();\n            Closing?.Invoke(s, args);\n            if (args.Cancel)\n            {\n                e.Cancel = true;\n            }\n        };\n        dialog.Closed += (s, e) => Closed?.Invoke(s, e);\n\n        // Allow the dialog to be closed by mobile back navigation.\n        void Cancel() => dialog.Hide();\n        CancellableActions.Add(Cancel);\n        DialogResult = await dialog.ShowAsync().ConfigureAwait(true);\n        CancellableActions.Remove(Cancel);\n        Ref = null;\n    }\n\n    /// <inheritdoc />\n    public void Activate()\n    { }\n\n    /// <inheritdoc />\n    public void Close()\n    {\n        Ref?.Hide();\n    }\n\n    /// <inheritdoc />\n    public bool IsEnabled { get; set; } = true;\n\n    /// <inheritdoc />\n    public bool IsVisible => Ref != null;\n\n    /// <inheritdoc />\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/FluentDialogFactory.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n// ReSharper disable MemberCanBePrivate.Global\n// ReSharper disable CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n\n/// <summary>\n/// Default framework dialog factory that will create instances of standard Windows dialogs.\n/// </summary>\npublic class FluentDialogFactory : DialogFactoryBase\n{\n    private readonly FluentMessageBoxType _messageBoxType;\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"messageBoxType\">Specifies how MessageBox dialogs will be handled.</param>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    public FluentDialogFactory(FluentMessageBoxType messageBoxType = FluentMessageBoxType.TaskDialog, IDialogFactory? chain = null)\n        : base(chain)\n    {\n        _messageBoxType = messageBoxType;\n    }\n\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings) =>\n        settings switch\n        {\n            ContentDialogSettings s => await ShowContentDialogAsync(owner, s).ConfigureAwait(true),\n            TaskDialogSettings s => await ShowTaskDialogAsync(owner, s).ConfigureAwait(true),\n            MessageBoxSettings s when _messageBoxType == FluentMessageBoxType.ContentDialog => await ShowMessageBoxContentDialogAsync(owner, s)\n                .ConfigureAwait(true),\n            MessageBoxSettings s when _messageBoxType == FluentMessageBoxType.TaskDialog => await ShowMessageBoxTaskDialogAsync(owner, s).ConfigureAwait(true),\n            _ => await base.ShowDialogAsync(owner, settings).ConfigureAwait(true)\n        };\n\n    private async Task<FAContentDialogResult> ShowContentDialogAsync(IView? owner, ContentDialogSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(owner);\n        var view = new FluentContentView(settings);\n        if (view.ViewModel != null)\n        {\n            GetDialogManager().HandleDialogEvents(view.ViewModel, view);\n        }\n\n        await view.ShowDialogAsync(owner).ConfigureAwait(true);\n        return view.DialogResult;\n    }\n\n    private async Task<object?> ShowTaskDialogAsync(IView? owner, TaskDialogSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(owner);\n        var view = new FluentTaskView(settings);\n        if (view.ViewModel != null)\n        {\n            GetDialogManager().HandleDialogEvents(view.ViewModel, view);\n        }\n\n        await view.ShowDialogAsync(owner).ConfigureAwait(true);\n        return view.DialogResult;\n    }\n\n    private async Task<bool?> ShowMessageBoxContentDialogAsync(IView? owner, MessageBoxSettings settings)\n    {\n        var apiSettings = new ContentDialogSettings()\n        {\n            Title = settings.Title,\n            Content = settings.Content,\n            DefaultButton = FAContentDialogButton.Primary\n        };\n        var yes = FAContentDialogResult.Primary;\n        var no = FAContentDialogResult.Secondary;\n        if (settings.Button == MessageBoxButton.Ok)\n        {\n            apiSettings.CloseButtonText = \"OK\";\n            apiSettings.DefaultButton = FAContentDialogButton.Close;\n            yes = FAContentDialogResult.None;\n        }\n        else if (settings.Button == MessageBoxButton.OkCancel)\n        {\n            apiSettings.PrimaryButtonText = \"OK\";\n            apiSettings.CloseButtonText = \"Cancel\";\n        }\n        else if (settings.Button == MessageBoxButton.YesNo)\n        {\n            apiSettings.PrimaryButtonText = \"Yes\";\n            apiSettings.SecondaryButtonText = \"No\";\n        }\n        else if (settings.Button == MessageBoxButton.YesNoCancel)\n        {\n            apiSettings.PrimaryButtonText = \"Yes\";\n            apiSettings.SecondaryButtonText = \"No\";\n            apiSettings.CloseButtonText = \"Cancel\";\n        }\n\n        var result = await ShowContentDialogAsync(owner, apiSettings).ConfigureAwait(true);\n        return result == yes ? true : result == no ? false : null;\n    }\n\n    private async Task<bool?> ShowMessageBoxTaskDialogAsync(IView? owner, MessageBoxSettings settings)\n    {\n        var apiSettings = new TaskDialogSettings()\n        {\n            Title = settings.Title,\n            Content = settings.Content,\n            Buttons = SyncButton(settings.Button, settings.DefaultValue),\n\n            // Icon = SyncIcon(settings.Icon)\n        };\n\n        var result = await ShowTaskDialogAsync(owner, apiSettings).ConfigureAwait(true);\n        return result as bool?; // It can be TaskDialogStandardResult.None if we press Escape\n    }\n\n    private static FATaskDialogButton[] SyncButton(MessageBoxButton value, bool? defaultValue) =>\n        (value) switch\n        {\n            MessageBoxButton.YesNo =>\n            [\n                GetButton(\"Yes\", true, defaultValue),\n                GetButton(\"No\", false, defaultValue)\n            ],\n            MessageBoxButton.OkCancel =>\n            [\n                GetButton(\"OK\", true, defaultValue),\n                GetButton(\"Cancel\", null, defaultValue)\n            ],\n            MessageBoxButton.YesNoCancel =>\n            [\n                GetButton(\"Yes\", true, defaultValue),\n                GetButton(\"No\", false, defaultValue),\n                GetButton(\"Cancel\", null, defaultValue)\n            ],\n            _ =>\n            [\n                GetButton(\"OK\", true, true)\n            ]\n        };\n\n    private static FATaskDialogButton GetButton(string text, bool? value, bool? defaultValue) =>\n        new(text, value)\n        {\n            IsDefault = defaultValue == value\n        };\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/FluentMessageBoxType.cs",
    "content": "// ReSharper disable CheckNamespace\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Represents how to display message boxes. \n/// </summary>\npublic enum FluentMessageBoxType\n{\n    /// <summary>\n    /// MessageBox dialogs will not be handled by FluentAvalonia.\n    /// </summary>\n    None,\n    /// <summary>\n    /// MessageBox dialogs will be shown in content dialogs.\n    /// </summary>\n    ContentDialog,\n    /// <summary>\n    /// MessageBox dialogs will be shown in task dialogs.\n    /// </summary>\n    TaskDialog\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/FluentTaskView.cs",
    "content": "﻿using System.ComponentModel;\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n\n/// <summary>\n/// An <see cref=\"IView\"/> implementation for FluentContentDialog.\n/// </summary>\n/// <param name=\"settings\">The TaskDialog display settings.</param>\npublic class FluentTaskView(TaskDialogSettings settings) : IView\n{\n    /// <summary>\n    /// Gets or sets the display settings.\n    /// </summary>\n    public TaskDialogSettings Settings { get; set; } = settings;\n\n    /// <summary>\n    /// Gets or sets the dialog result.\n    /// </summary>\n    public object? DialogResult { get; set; }\n\n    /// <inheritdoc />\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    { }\n\n    /// <inheritdoc />\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    { }\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged? ViewModel => Settings.Content as INotifyPropertyChanged;\n    /// <summary>\n    /// Gets a reference to the displayed TaskDialog.\n    /// </summary>\n    public FATaskDialog? Ref { get; private set; }\n    /// <inheritdoc />\n    public object RefObj => Ref!;\n    /// <inheritdoc />\n    public event EventHandler? Loaded;\n    /// <inheritdoc />\n    public event EventHandler<CancelEventArgs>? Closing;\n    /// <inheritdoc />\n    public event EventHandler? Closed;\n\n    /// <inheritdoc />\n    public void Show(IView? owner) => throw new NotImplementedException();\n\n    /// <inheritdoc />\n    public async Task ShowDialogAsync(IView owner)\n    {\n        var dialog = new FATaskDialog()\n        {\n            Title = Settings.Title,\n            Header = Settings.Header,\n            SubHeader = Settings.SubHeader,\n            Content = Settings.Content,\n            IconSource = Settings.IconSource,\n            FooterVisibility = Settings.FooterVisibility,\n            IsFooterExpanded = Settings.IsFooterExpanded,\n            Footer = Settings.Footer,\n            ShowProgressBar = Settings.ShowProgressBar\n        };\n        Ref = dialog;\n        foreach (var button in Settings.Buttons)\n        {\n            dialog.Buttons.Add(button);\n        }\n        if (owner.GetRef() != null)\n        {\n            dialog.XamlRoot = TopLevel.GetTopLevel(owner.GetRef());\n        }\n\n        dialog.Loaded += (s, e) => Loaded?.Invoke(s, e);\n        dialog.Closing += (s, e) =>\n        {\n            var args = new CancelEventArgs();\n            Closing?.Invoke(s, args);\n            if (args.Cancel)\n            {\n                e.Cancel = true;\n            }\n        };\n        dialog.Closed += (s, e) => Closed?.Invoke(s, e);\n\n        // Allow the dialog to be closed by mobile back navigation.\n        void Cancel() => dialog.Hide();\n        CancellableActions.Add(Cancel);\n        DialogResult = await dialog.ShowAsync().ConfigureAwait(true);\n        CancellableActions.Remove(Cancel);\n        Ref = null;\n    }\n\n    /// <inheritdoc />\n    public void Activate()\n    { }\n\n    /// <inheritdoc />\n    public void Close()\n    {\n        Ref?.Hide();\n    }\n\n    /// <inheritdoc />\n    public bool IsEnabled { get; set; } = true;\n\n    /// <inheritdoc />\n    public bool IsVisible => Ref != null;\n\n    /// <inheritdoc />\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/MvvmDialogs.Avalonia.Fluent.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n      <TargetFrameworks>net10.0</TargetFrameworks>\n      <LangVersion>default</LangVersion>\n      <Nullable>enable</Nullable>\n      <OutputType>Library</OutputType>\n      <AssemblyTitle>MvvmDialogs with FluentAvalonia</AssemblyTitle>\n      <Title>MvvmDialogs with FluentAvalonia</Title>\n      <AssemblyOriginatorKeyFile>..\\StrongName.snk</AssemblyOriginatorKeyFile>\n      <PackageId>HanumanInstitute.MvvmDialogs.Avalonia.Fluent</PackageId>\n      <AssemblyName>HanumanInstitute.MvvmDialogs.Avalonia.Fluent</AssemblyName>\n      <RootNamespace>HanumanInstitute.MvvmDialogs.Avalonia.Fluent</RootNamespace>\n      <GenerateDocumentationFile>True</GenerateDocumentationFile>\n      <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n      <PackageIcon>icon_64x64.png</PackageIcon>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"Avalonia\" />\n      <PackageReference Include=\"FluentAvaloniaUI\"/>\n    </ItemGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n      <ProjectReference Include=\"..\\MvvmDialogs\\MvvmDialogs.csproj\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"..\\icon_64x64.png\">\n        <Pack>True</Pack>\n        <PackagePath>/</PackagePath>\n        <Link>icon_64x64.png</Link>\n      </None>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/TaskDialogSettings.cs",
    "content": "﻿\nusing System.Collections.Generic;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Fluent;\n\n/// <summary>\n/// Represents the task dialog settings.\n/// </summary>\npublic class TaskDialogSettings : DialogSettingsBase\n{\n    /// <summary>\n    /// Initializes a new instance of the TaskDialogSettings class.\n    /// </summary>\n    public TaskDialogSettings() { }\n\n    /// <summary>\n    /// Initializes a new instance of the TaskDialogSettings class with specified content.\n    /// </summary>\n    /// <param name=\"content\">The content of the dialog. Can be a ViewModel, Control, or any content.</param>\n    public TaskDialogSettings(object? content)\n    {\n        Content = content;\n    }\n\n    /// <summary>\n    /// Gets or sets the dialog header text\n    /// </summary>\n    public string Header { get; set; } = string.Empty;\n    /// <summary>\n    /// Gets or sets the dialog sub header text\n    /// </summary>\n    public string SubHeader { get; set; } = string.Empty;\n    /// <summary>\n    /// Gets or sets the content of the dialog.\n    /// </summary>\n    public object? Content { get; set; }\n    /// <summary>\n    /// Gets or sets the dialog Icon\n    /// </summary>\n    public FAIconSource? IconSource { get; set; }\n    /// <summary>\n    /// Gets the list of buttons that display at the bottom of the TaskDialog\n    /// </summary>\n    public IList<FATaskDialogButton> Buttons { get; set; } = [];\n    /// <summary>\n    /// Gets the list of Commands displayed in the TaskDialog\n    /// </summary>\n    public IList<FATaskDialogCommand> Commands { get; set; } = [];\n    /// <summary>\n    /// Gets or sets the visibility of the Footer area\n    /// </summary>\n    public FATaskDialogFooterVisibility FooterVisibility { get; set; }\n    /// <summary>\n    /// Gets or sets whether the footer is visible\n    /// </summary>\n    public bool IsFooterExpanded { get; set; }\n    /// <summary>\n    /// Gets or sets the footer content\n    /// </summary>\n    public object? Footer { get; set; }\n    /// <summary>\n    /// Gets or sets whether this TaskDialog shows a progress bar\n    /// </summary>\n    public bool ShowProgressBar { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Fluent/Usings.cs",
    "content": "global using System;\nglobal using System.Threading.Tasks;\nglobal using Avalonia;\nglobal using Avalonia.Controls;\nglobal using FluentAvalonia;\nglobal using FluentAvalonia.UI.Controls;\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/DialogFactoryExtensions.cs",
    "content": "﻿using Avalonia.Controls.ApplicationLifetimes;\nusing HanumanInstitute.MvvmDialogs.Avalonia.MessageBox;\n// ReSharper disable CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia;\n\n/// <summary>\n/// Provides extensions to IDialogFactory.\n/// </summary>\npublic static class DialogFactoryExtensions\n{\n    /// <summary>\n    /// Registers MessageBox handlers in the dialog factory chain.\n    /// </summary>\n    /// <param name=\"factory\">The dialog factory to add handlers for.</param>\n    /// <param name=\"mode\">The message box type to show.</param>\n    /// <returns>A new dialog factory that will fallback to the previous one.</returns>\n    public static IDialogFactory AddMessageBox(this IDialogFactory factory, MessageBoxMode mode = MessageBoxMode.Window)\n    {\n        if (Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime && mode == MessageBoxMode.Window)\n        {\n            throw new NotSupportedException(\"Avalonia.MessageBox with mode=Window is only supported in Desktop applications. Consider using mode=Popup or a different MessageBox implementation.\");\n        }\n        return new MessageBoxDialogFactory(factory)\n        {\n            Mode = mode\n        };\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/IMessageBoxApi.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia.MessageBox;\n\ninternal interface IMessageBoxApi\n{\n    Task<ButtonResult> ShowMessageBoxAsync(Window? owner, MessageBoxApiSettings settings, MessageBoxMode mode);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/MessageBoxApi.cs",
    "content": "﻿using MsBox.Avalonia.Dto;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.MessageBox;\n\ninternal class MessageBoxApi : IMessageBoxApi\n{\n    public Task<ButtonResult> ShowMessageBoxAsync(Window? owner, MessageBoxApiSettings settings, MessageBoxMode mode)\n    {\n        var msgBox = MessageBoxManager.GetMessageBoxStandard(\n            new MessageBoxStandardParams()\n            {\n                ContentTitle = settings.Title,\n                ContentMessage = settings.Text,\n                ButtonDefinitions = settings.Buttons,\n                Icon = settings.Icon,\n                WindowStartupLocation = settings.StartupLocation,\n                EnterDefaultButton = settings.EnterDefaultButton,\n                EscDefaultButton = settings.EscDefaultButton\n            });\n        return mode == MessageBoxMode.Popup ? msgBox.ShowAsPopupAsync(owner) : msgBox.ShowWindowDialogAsync(owner);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/MessageBoxApiSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.MessageBox;\n\ninternal class MessageBoxApiSettings\n{\n    public string Title { get; set; } = string.Empty;\n    public string Text { get; set; } = string.Empty;\n    public ButtonEnum Buttons { get; set; } = ButtonEnum.Ok;\n    public Icon Icon { get; set; } = Icon.None;\n    public WindowStartupLocation StartupLocation { get; set; } = WindowStartupLocation.CenterScreen;\n    public ClickEnum EnterDefaultButton { get; set; } = ClickEnum.Default;\n    public ClickEnum EscDefaultButton { get; set; } = ClickEnum.Default;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/MessageBoxDialogFactory.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\n// ReSharper disable CheckNamespace\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.MessageBox;\n\n/// <summary>\n/// Default framework dialog factory that will create instances of standard Windows dialogs.\n/// </summary>\npublic class MessageBoxDialogFactory : DialogFactoryBase\n{\n    private readonly IMessageBoxApi _api;\n\n    /// <summary>\n    /// Gets or sets the message box type to show.\n    /// </summary>\n    public MessageBoxMode Mode { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    public MessageBoxDialogFactory(IDialogFactory? chain = null)\n        : this(chain, null)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    /// <param name=\"api\">An interface exposing Avalonia messagebox dialogs API.</param>\n    internal MessageBoxDialogFactory(IDialogFactory? chain, IMessageBoxApi? api)\n        : base(chain)\n    {\n        _api = api ?? new MessageBoxApi();\n    }\n\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings) =>\n        settings switch\n        {\n            MessageBoxSettings s => await ShowMessageBoxDialogAsync(owner, s).ConfigureAwait(true),\n            _ => await base.ShowDialogAsync(owner, settings).ConfigureAwait(true)\n        };\n\n    private async Task<bool?> ShowMessageBoxDialogAsync(IView? owner, MessageBoxSettings settings)\n    {\n        var apiSettings = new MessageBoxApiSettings()\n        {\n            Title = settings.Title,\n            Text = settings.Content,\n            Buttons = SyncButton(settings.Button),\n            Icon = SyncIcon(settings.Icon),\n            EnterDefaultButton = SyncDefaultEnter(settings.Button, settings.DefaultValue),\n            EscDefaultButton = SyncDefaultEsc(settings.Button)\n        };\n\n        var ownerRef = owner.GetRef();\n        if (ownerRef is Window ownerWin)\n        {\n            var result = await _api.ShowMessageBoxAsync(ownerWin, apiSettings, Mode);\n            return result switch\n            {\n                ButtonResult.Yes => true,\n                ButtonResult.Ok => true,\n                ButtonResult.No => false,\n                ButtonResult.Cancel => null,\n                _ => null\n            };\n        }\n        else\n        {\n            throw new InvalidCastException(\"Owner must be of type Window.\");\n        }\n    }\n\n    // Convert platform-agnostic types into Win32 types.\n\n    private static ButtonEnum SyncButton(MessageBoxButton value) =>\n        (value) switch\n        {\n            MessageBoxButton.Ok => ButtonEnum.Ok,\n            MessageBoxButton.YesNo => ButtonEnum.YesNo,\n            MessageBoxButton.OkCancel => ButtonEnum.OkCancel,\n            MessageBoxButton.YesNoCancel => ButtonEnum.YesNoCancel,\n            _ => ButtonEnum.Ok\n        };\n\n    private static Icon SyncIcon(MessageBoxImage value) =>\n        (value) switch\n        {\n            MessageBoxImage.None => Icon.None,\n            MessageBoxImage.Error => Icon.Error,\n            MessageBoxImage.Exclamation => Icon.Warning,\n            MessageBoxImage.Information => Icon.Info,\n            MessageBoxImage.Stop => Icon.Stop,\n            MessageBoxImage.Warning => Icon.Warning,\n            _ => Icon.None\n        };\n\n    private static ClickEnum SyncDefaultEnter(MessageBoxButton buttons, bool? value) =>\n        buttons switch\n        {\n            MessageBoxButton.Ok => ClickEnum.Ok,\n            MessageBoxButton.OkCancel => value == true ? ClickEnum.Ok : ClickEnum.Cancel,\n            MessageBoxButton.YesNo => value == true ? ClickEnum.Yes : ClickEnum.No,\n            MessageBoxButton.YesNoCancel => value switch\n            {\n                true => ClickEnum.Yes,\n                false => ClickEnum.No,\n                null => ClickEnum.Cancel\n            },\n            _ => ClickEnum.Default\n        };\n\n    private static ClickEnum SyncDefaultEsc(MessageBoxButton buttons) =>\n        buttons switch\n        {\n            MessageBoxButton.Ok => ClickEnum.Ok,\n            MessageBoxButton.OkCancel => ClickEnum.Cancel,\n            MessageBoxButton.YesNo => ClickEnum.No,\n            MessageBoxButton.YesNoCancel => ClickEnum.Cancel,\n            _ => ClickEnum.Default\n        };\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/MessageBoxMode.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Avalonia.MessageBox;\n\n/// <summary>\n/// Represents the type of message box to display.\n/// </summary>\npublic enum MessageBoxMode\n{\n    /// <summary>\n    /// Show message boxes as modal windows.\n    /// </summary>\n    Window,\n    /// <summary>\n    /// Show message boxes as popups.\n    /// </summary>\n    Popup\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/MvvmDialogs.Avalonia.MessageBox.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n      <TargetFrameworks>net10.0;net8.0</TargetFrameworks>\n      <LangVersion>default</LangVersion>\n      <Nullable>enable</Nullable>\n      <OutputType>Library</OutputType>\n      <AssemblyTitle>MvvmDialogs with MessageBox.Avalonia</AssemblyTitle>\n      <Title>MvvmDialogs with MessageBox.Avalonia</Title>\n      <AssemblyOriginatorKeyFile>..\\..\\StrongName.snk</AssemblyOriginatorKeyFile>\n      <PackageId>HanumanInstitute.MvvmDialogs.Avalonia.MessageBox</PackageId>\n      <AssemblyName>HanumanInstitute.MvvmDialogs.Avalonia.MessageBox</AssemblyName>\n      <RootNamespace>HanumanInstitute.MvvmDialogs.Avalonia.MessageBox</RootNamespace>\n      <GenerateDocumentationFile>True</GenerateDocumentationFile>\n      <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n      <PackageIcon>icon_64x64.png</PackageIcon>\n      <AssemblyVersion>2.1.0.24361</AssemblyVersion>\n      <FileVersion>2.1.0.24361</FileVersion>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"Avalonia\" />\n      <PackageReference Include=\"MessageBox.Avalonia\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n      <ProjectReference Include=\"..\\MvvmDialogs\\MvvmDialogs.csproj\" />\n    </ItemGroup>\n\n    <ItemGroup>\n      <None Include=\"..\\icon_64x64.png\">\n        <Pack>True</Pack>\n        <PackagePath>/</PackagePath>\n        <Link>icon_64x64.png</Link>\n      </None>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.MessageBox/Usings.cs",
    "content": "﻿global using System;\nglobal using System.Threading.Tasks;\nglobal using Avalonia;\nglobal using Avalonia.Controls;\nglobal using MsBox.Avalonia;\nglobal using MsBox.Avalonia.Enums;\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/MvvmDialogs.Avalonia.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net8.0</TargetFrameworks>\n    <OutputType>Exe</OutputType>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>disable</Nullable>\n    <IsPackable>false</IsPackable>\n    <RootNamespace>HanumanInstitute.MvvmDialogs.Avalonia.Tests</RootNamespace>\n    <LangVersion>default</LangVersion>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"JetBrains.dotMemoryUnit\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n    <PackageReference Include=\"ReactiveUI\" />\n    <PackageReference Include=\"Moq\"/>\n    <PackageReference Include=\"xunit.v3\"/>\n    <PackageReference Include=\"xunit.runner.visualstudio\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"coverlet.collector\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\MvvmDialogs.Avalonia\\MvvmDialogs.Avalonia.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"Views\\SecondView.axaml.cs\">\n      <DependentUpon>SecondView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\SecondWindow.axaml.cs\">\n      <DependentUpon>SecondWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\ThirdView.axaml.cs\">\n      <DependentUpon>ThirdView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\ThirdWindow.axaml.cs\">\n      <DependentUpon>ThirdWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/NavigationTests.cs",
    "content": "﻿// ReSharper disable MemberCanBePrivate.Global\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests;\n\npublic class NavigationTests\n{\n    public IDialogService DialogService => _dialogService ??= new DialogService(DialogManager);\n    private IDialogService _dialogService;\n\n    public DialogManager DialogManager => _dialogManager ??= new DialogManager(new ViewLocatorBase() { ForceSinglePageNavigation = true });\n    private DialogManager _dialogManager;\n\n    public INavigationManager NavigationManager => DialogManager.NavigationManager!;\n\n    [Fact]\n    public void Constructor_CurrentViewNull()\n    {\n        var _ = DialogService;\n\n        Assert.Null(NavigationManager.CurrentView);\n    }\n\n    [Fact]\n    public void Show_First_CurrentViewSet()\n    {\n        var vm = new FirstViewModel();\n\n        DialogService.Show(null, vm);\n\n        Assert.NotNull(NavigationManager.CurrentView);\n        Assert.Equal(vm, NavigationManager.CurrentView.DataContext);\n    }\n\n    [Fact]\n    public void Show_Second_CurrentViewSet()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        DialogService.Show(null, vm2);\n\n        Assert.NotNull(NavigationManager.CurrentView);\n        Assert.Equal(vm2, NavigationManager.CurrentView.DataContext);\n    }\n\n    [Fact]\n    public void Show_FirstSecond_HistoryContainsFirstSecond()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        DialogService.Show(null, vm2);\n\n        Assert.Equal(2, NavigationManager.History.Count);\n        Assert.Same(vm1, NavigationManager.History[0]);\n        Assert.Same(vm2, NavigationManager.History[1]);\n    }\n\n    [Fact]\n    public void Show_FirstSecondFirst_HistoryContainsSecondFirst()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        DialogService.Show(null, vm2);\n        DialogService.Show(null, vm1);\n\n        Assert.Equal(2, NavigationManager.History.Count);\n        Assert.Same(vm2, NavigationManager.History[0]);\n        Assert.Same(vm1, NavigationManager.History[1]);\n    }\n\n    [Fact]\n    public void Show_CloseSecond_CurrentViewSet()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        DialogService.Show(null, vm2);\n        vm2.OnRequestClose();\n\n        Assert.NotNull(NavigationManager.CurrentView);\n        Assert.Equal(vm1, NavigationManager.CurrentView.DataContext);\n    }\n\n    [Fact]\n    public async Task Show_SecondAndGarbageCollect_FirstReleased()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        var view1 = new WeakReference(NavigationManager.CurrentView);\n        DialogService.Show(null, vm2);\n\n        GC.Collect();\n        GC.WaitForPendingFinalizers();\n        GC.Collect();\n        await Task.Delay(100, TestContext.Current.CancellationToken);\n        Assert.False(view1.IsAlive);\n    }\n\n\n    [Fact]\n    public void ShowDialogAsync_SecondAndGarbageCollect_FirstReleased()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        var view1 = new WeakReference(NavigationManager.CurrentView);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n\n        GC.Collect();\n        GC.WaitForPendingFinalizers();\n        GC.Collect();\n        Assert.False(view1.IsAlive);\n    }\n\n    [Fact]\n    public void Activate_NotShown_DoNothing()\n    {\n        var vm1 = new FirstViewModel();\n\n        vm1.OnRequestActivate();\n\n        Assert.Null(NavigationManager.CurrentView);\n    }\n\n    [Fact]\n    public void Activate_AlreadyActive_CurrentViewRemainsSame()\n    {\n        var vm1 = new FirstViewModel();\n\n        DialogService.Show(null, vm1);\n        vm1.OnRequestActivate();\n\n        Assert.Same(vm1, NavigationManager.CurrentView?.DataContext);\n        Assert.Single(NavigationManager.History);\n    }\n\n    [Fact]\n    public void Activate_FirstSecondFirst_CurrentViewFirst()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        DialogService.Show(null, vm2);\n        vm1.OnRequestActivate();\n\n        Assert.Same(vm1, NavigationManager.CurrentView?.DataContext);\n        Assert.Equal(2, NavigationManager.History.Count);\n        Assert.Same(vm2, NavigationManager.History[0]);\n        Assert.Same(vm1, NavigationManager.History[1]);\n    }\n\n    [Theory]\n    [InlineData(true)]\n    [InlineData(false)]\n    [InlineData(null)]\n    public async Task ShowDialogAsync_Second_ReturnsValue(bool? dialogResult)\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel\n        {\n            DialogResult = dialogResult\n        };\n\n        DialogService.Show(null, vm1);\n        var task = DialogService.ShowDialogAsync(vm1, vm2);\n        vm2.OnRequestClose();\n        var result = await task;\n\n        Assert.Equal(dialogResult, result);\n    }\n\n    [Fact]\n    public async Task ShowDialogAsync_Second_WaitUntilClosed()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        var task = DialogService.ShowDialogAsync(vm1, vm2);\n\n        await Task.Delay(10, TestContext.Current.CancellationToken);\n        Assert.False(task.IsCompleted);\n        vm2.OnRequestClose();\n        await Task.Delay(10, TestContext.Current.CancellationToken);\n        Assert.True(task.IsCompleted);\n        Assert.Same(vm1, NavigationManager.CurrentView?.DataContext);\n    }\n\n    [Fact]\n    public async Task ShowDialogAsync_RecursiveDialogs_WaitUntilClosed()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n        var vm3 = new ThirdViewModel();\n\n        DialogService.Show(null, vm1);\n        var t1 = DialogService.ShowDialogAsync(vm1, vm2);\n        var t2 = DialogService.ShowDialogAsync(vm2, vm3);\n\n        await Task.Delay(10, TestContext.Current.CancellationToken);\n        Assert.False(t1.IsCompleted);\n        Assert.False(t2.IsCompleted);\n        vm3.OnRequestClose();\n        vm2.OnRequestClose();\n        await Task.Delay(10, TestContext.Current.CancellationToken);\n        Assert.True(t1.IsCompleted);\n        Assert.True(t2.IsCompleted);\n        Assert.Same(vm1, NavigationManager.CurrentView?.DataContext);\n    }\n\n    [Fact]\n    public void ShowDialogAsync_Second_AddToHistory()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n\n        Assert.Equal(2, NavigationManager.History.Count);\n        Assert.Same(vm1, NavigationManager.History[0]);\n        Assert.Same(vm2, NavigationManager.History[1]);\n    }\n\n    [Fact]\n    public async Task ShowDialogAsync_OwnerFirst_ShowFirstAfterClose()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n        var vm3 = new ThirdViewModel();\n\n        DialogService.Show(null, vm1);\n        DialogService.Show(null, vm2);\n        var task = DialogService.ShowDialogAsync(vm1, vm3);\n        vm3.OnRequestClose();\n        await task;\n\n        Assert.Same(vm1, NavigationManager.CurrentView?.DataContext);\n        Assert.Single(NavigationManager.History);\n        Assert.Same(vm1, NavigationManager.History[0]);\n    }\n\n    [Fact]\n    public void Show_TwiceWithinDialog_AddOneHistory()\n    {\n        // Only 1 view is stored in history under a dialog.\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n        var vm3 = new ThirdViewModel();\n        var vm4 = new FirstViewModel();\n\n        DialogService.Show(null, vm1);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n        DialogService.Show(null, vm3);\n        DialogService.Show(null, vm4);\n\n        Assert.Same(vm4, NavigationManager.CurrentView?.DataContext);\n        Assert.Equal(3, NavigationManager.History.Count);\n        Assert.Same(vm1, NavigationManager.History[0]);\n        Assert.Same(vm2, NavigationManager.History[1]);\n        Assert.Same(vm4, NavigationManager.History[2]);\n    }\n\n    [Fact]\n    public void Close_Normal_ClosingClosedRaised()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n\n        DialogService.Show(null, vm1);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n        vm2.OnRequestClose();\n\n        Assert.Equal(1, vm2.ClosingRaised);\n        Assert.Equal(0, vm2.ClosingAsyncRaised);\n        Assert.Equal(1, vm2.ClosedRaised);\n    }\n\n    [Fact]\n    public async Task Close_Cancelled_ClosingAsyncRaised()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel\n        {\n            ClosingCancel = true\n        };\n\n        DialogService.Show(null, vm1);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n        vm2.OnRequestClose();\n\n        await Task.Delay(1, TestContext.Current.CancellationToken); // There's Task.Yield() in View_Closing\n        Assert.Equal(1, vm2.ClosingRaised);\n        Assert.Equal(1, vm2.ClosingAsyncRaised);\n        Assert.Equal(0, vm2.ClosedRaised);\n    }\n\n    [Fact]\n    public async Task Close_CancelledAndReset_ClosedRaised()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel\n        {\n            ClosingCancel = true,\n            ClosingAsyncCancel = false\n        };\n\n        DialogService.Show(null, vm1);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n        vm2.OnRequestClose();\n\n        await Task.Delay(1, TestContext.Current.CancellationToken); // There's Task.Yield() in View_Closing\n        Assert.Equal(1, vm2.ClosingRaised);\n        Assert.Equal(1, vm2.ClosingAsyncRaised);\n        Assert.Equal(1, vm2.ClosedRaised);\n    }\n\n    [Fact]\n    public async Task Close_3Times_RaiseClosingOnce()\n    {\n        var vm1 = new FirstViewModel();\n        var vm2 = new SecondViewModel();\n        vm2.ClosingCancel = true;\n        vm2.ClosingAsyncCancel = true;\n\n        DialogService.Show(null, vm1);\n        var _ = DialogService.ShowDialogAsync(vm1, vm2);\n        vm2.OnRequestClose();\n        vm2.OnRequestClose();\n        vm2.OnRequestClose();\n\n        await Task.Delay(1, TestContext.Current.CancellationToken); // There's Task.Yield() in View_Closing\n        Assert.Equal(1, vm2.ClosingRaised);\n        Assert.Equal(1, vm2.ClosingAsyncRaised);\n        Assert.Equal(0, vm2.ClosedRaised);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/TestsBase.cs",
    "content": "﻿using Moq;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests;\n\n/// <summary>\n/// Base class for test classes.\n/// </summary>\npublic class TestsBase\n{\n    protected ITestOutputHelper Output { get; }\n\n    public TestsBase(ITestOutputHelper output) => Output = output;\n\n    /// <summary>\n    /// Allows using a lambda expression after ??= operator.\n    /// </summary>\n    protected T Init<T>(Func<T> func) => func();\n\n    /// <summary>\n    /// Initializes an new object of specified type with parameterless constructor.\n    /// </summary>\n    /// <param name=\"action\">A lambda expression to configure the object.</param>\n    /// <typeparam name=\"T\">The type of object to create.</typeparam>\n    /// <returns>The newly-created object.</returns>\n    protected T Init<T>(Action<T> action)\n        where T : new()\n    {\n        var result = new T();\n        action(result);\n        return result;\n    }\n\n    /// <summary>\n    /// Initializes a mock of specified type.\n    /// </summary>\n    /// <param name=\"action\">A lambda expression to configure the mock.</param>\n    /// <typeparam name=\"T\">The type of mock to create.</typeparam>\n    /// <returns>The newly-created mock.</returns>\n    protected Mock<T> InitMock<T>(Action<Mock<T>> action)\n        where T : class\n    {\n        var mock = new Mock<T>();\n        action(mock);\n        return mock;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Usings.cs",
    "content": "global using Xunit;\nglobal using HanumanInstitute.MvvmDialogs;\nglobal using HanumanInstitute.MvvmDialogs.Avalonia;\nglobal using HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/ViewNavigationWrapperTests.cs",
    "content": "﻿// ReSharper disable MemberCanBePrivate.Global\n\nusing HanumanInstitute.MvvmDialogs.Avalonia.Navigation;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests;\n\n/// <summary>\n/// Provides unit tests for the <see cref=\"ViewNavigationWrapper\" /> class.\n/// </summary>\npublic class ViewNavigationWrapperTests\n{\n    public FirstViewModel ViewModel => _viewModel ??= new FirstViewModel();\n    private FirstViewModel _viewModel;\n\n    public ViewNavigationWrapper CreateView(bool existing)\n    {\n        var result = new ViewNavigationWrapper(NavigationManager, DialogManager.View_Closing);\n        if (existing)\n        {\n            result.InitializeExisting(ViewModel, new FirstView());\n        }\n        else\n        {\n            result.Initialize(ViewModel, new ViewDefinition(typeof(FirstView), () => new FirstView()));\n        }\n        return result;\n    }\n\n    public IDialogService DialogService => _dialogService ??= new DialogService(DialogManager);\n    private IDialogService _dialogService;\n\n    public DialogManager DialogManager => _dialogManager ??= new DialogManager(new ViewLocatorBase() { ForceSinglePageNavigation = true });\n    private DialogManager _dialogManager;\n\n    public INavigationManager NavigationManager => DialogManager.NavigationManager!;\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Initialize_ViewModelSet(bool existing)\n    {\n        var view = CreateView(existing);\n\n        Assert.Equal(ViewModel, view.ViewModel);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Initialize_IsEnabledTrue(bool existing)\n    {\n        var view = CreateView(existing);\n\n        Assert.True(view.IsEnabled);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Initialize_IsVisibleFalse(bool existing)\n    {\n        var view = CreateView(existing);\n\n        Assert.False(view.IsVisible);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Initialize_RefDoesNotThrowError(bool existing)\n    {\n        var view = CreateView(existing);\n\n        _ = view.Ref;\n        _ = view.RefObj;\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Show_NoOwner_RefSetAndEnabledVisible(bool existing)\n    {\n        var view = CreateView(existing);\n\n        view.Show(null);\n\n        Assert.NotNull(view.Ref);\n        Assert.True(view.IsEnabled);\n        Assert.True(view.IsVisible);\n        Assert.Equal(1, ViewModel.LoadedCount);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void ShowDialog_WithOwner_RefSetAndEnabledVisible(bool existing)\n    {\n        var owner = CreateView(existing);\n        var view = CreateView(existing);\n\n        owner.Show(null);\n        ViewModel.ResetCounters();\n        _ = view.ShowDialogAsync(owner);\n\n        Assert.NotNull(view.Ref);\n        Assert.True(view.IsEnabled);\n        Assert.True(view.IsVisible);\n        Assert.Equal(1, ViewModel.LoadedCount);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Show_Close_ClosingAndClosedRaised(bool existing)\n    {\n        var view = CreateView(existing);\n\n        view.Show(null);\n        view.Close();\n\n        Assert.Equal(1, ViewModel.ClosingCount);\n        Assert.Equal(1, ViewModel.ClosedCount);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Activate_NotFound_DoNotShow(bool existing)\n    {\n        var view = CreateView(existing);\n\n        view.Activate();\n\n        Assert.Null(NavigationManager.CurrentView);\n        Assert.Equal(0, ViewModel.LoadedCount);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Activate_FromHistory_ShowAndRaiseLoaded(bool existing)\n    {\n        var vm1 = ViewModel;\n        var view1 = CreateView(existing);\n        var vm2 = new FirstViewModel();\n        _viewModel = vm2;\n        var view2 = CreateView(existing);\n\n        view1.Show(null);\n        view2.Show(view1);\n        vm1.ResetCounters();\n        view1.Activate();\n\n        Assert.Equal(view1.Ref, NavigationManager.CurrentView);\n        Assert.Equal(1, vm1.LoadedCount);\n    }\n\n    [Theory]\n    [InlineData(false)]\n    [InlineData(true)]\n    public void Activate_AlreadyVisible_DoNotRaiseLoaded(bool existing)\n    {\n        var view = CreateView(existing);\n        view.Show(null);\n        ViewModel.ResetCounters();\n\n        view.Activate();\n\n        Assert.Equal(view.Ref, NavigationManager.CurrentView);\n        Assert.Equal(0, ViewModel.LoadedCount);\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/FirstView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n             x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views.FirstView\">\n    Test UserControl\n</UserControl>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/FirstView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic partial class FirstView : UserControl\n{\n    public FirstView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/FirstViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing ReactiveUI;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic class FirstViewModel : ReactiveObject, ICloseable, IActivable, IViewLoaded, IViewClosing, IViewClosed\n{\n    public event EventHandler RequestClose;\n    public event EventHandler RequestActivate;\n\n    public void OnRequestClose() => RequestClose?.Invoke(this, EventArgs.Empty);\n\n    public void OnRequestActivate() => RequestActivate?.Invoke(this, EventArgs.Empty);\n\n    public int LoadedCount { get; private set; }\n    public int ClosingCount { get; private set; }\n    public int ClosedCount { get; private set; }\n\n    public void ResetCounters()\n    {\n        LoadedCount = 0;\n        ClosingCount = 0;\n        ClosedCount = 0;\n    }\n\n    public virtual void OnLoaded() => LoadedCount++;\n    public virtual void OnClosing(CancelEventArgs e) => ClosingCount++;\n    public virtual Task OnClosingAsync(CancelEventArgs e) => Task.CompletedTask;\n    public virtual void OnClosed() => ClosedCount++;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/FirstWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n        x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views.FirstWindow\"\n        Title=\"TestWindow\">\n    Test Window\n</Window>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/FirstWindow.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic partial class FirstWindow : Window\n{\n    public FirstWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/SecondView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n             x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views.SecondView\">\n    Test UserControl\n</UserControl>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/SecondView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic partial class SecondView : UserControl\n{\n    public SecondView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/SecondViewModel.cs",
    "content": "﻿using System.ComponentModel;\nusing ReactiveUI;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic class SecondViewModel : ReactiveObject, ICloseable, IActivable, IModalDialogViewModel, IViewClosing, IViewClosed\n{\n    public event EventHandler RequestClose;\n    public event EventHandler RequestActivate;\n\n    public void OnRequestClose() => RequestClose?.Invoke(this, EventArgs.Empty);\n\n    public void OnRequestActivate() => RequestActivate?.Invoke(this, EventArgs.Empty);\n\n    public bool? DialogResult { get; set; }\n\n    public int ClosingRaised { get; set; }\n    public int ClosingAsyncRaised { get; set; }\n    public int ClosedRaised { get; set; }\n    public bool ClosingCancel { get; set; }\n    public bool ClosingAsyncCancel { get; set; } = true;\n\n    public void OnClosing(CancelEventArgs e)\n    {\n        e.Cancel = ClosingCancel;\n        ClosingRaised++;\n    }\n\n    public Task OnClosingAsync(CancelEventArgs e)\n    {\n        e.Cancel = ClosingAsyncCancel;\n        ClosingAsyncRaised++;\n        return Task.CompletedTask;\n    }\n\n    public void OnClosed() => ClosedRaised++;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/SecondWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n        x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views.SecondWindow\"\n        Title=\"TestWindow\">\n    Test Window\n</Window>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/SecondWindow.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic partial class SecondWindow : Window\n{\n    public SecondWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/ThirdView.axaml",
    "content": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n             mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n             x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views.ThirdView\">\n    Test UserControl\n</UserControl>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/ThirdView.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic partial class ThirdView : UserControl\n{\n    public ThirdView()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/ThirdViewModel.cs",
    "content": "﻿using ReactiveUI;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic class ThirdViewModel : ReactiveObject, ICloseable, IActivable, IModalDialogViewModel\n{\n    public event EventHandler RequestClose;\n    public event EventHandler RequestActivate;\n\n    public void OnRequestClose() => RequestClose?.Invoke(this, EventArgs.Empty);\n\n    public void OnRequestActivate() => RequestActivate?.Invoke(this, EventArgs.Empty);\n\n    public bool? DialogResult { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/ThirdWindow.axaml",
    "content": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        mc:Ignorable=\"d\" d:DesignWidth=\"800\" d:DesignHeight=\"450\"\n        x:Class=\"HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views.ThirdWindow\"\n        Title=\"TestWindow\">\n    Test Window\n</Window>\n"
  },
  {
    "path": "src/MvvmDialogs.Avalonia.Tests/Views/ThirdWindow.axaml.cs",
    "content": "﻿using Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace HanumanInstitute.MvvmDialogs.Avalonia.Tests.Views;\n\npublic partial class ThirdWindow : Window\n{\n    public ThirdWindow()\n    {\n        InitializeComponent();\n    }\n\n    private void InitializeComponent()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n}\n\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/FileApiSettings.cs",
    "content": "﻿using System.Windows.Forms;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\ninternal class FileApiSettings\n{\n    public string DefaultExt { get; set; } = string.Empty;\n    public bool AddExtension { get; set; } = true;\n    public bool CheckFileExists { get; set; } = false;\n    public bool CheckPathExists { get; set; } = true;\n    public FileDialogCustomPlacesCollection CustomPlaces { get; } = new FileDialogCustomPlacesCollection();\n    public string InitialDirectory { get; set; } = string.Empty;\n    public string FileName { get; set; } = string.Empty;\n    public string[] FileNames { get; set; } = Array.Empty<string>();\n    public bool DereferenceLinks { get; set; } = true;\n    public string Filter { get; set; } = string.Empty;\n    public string Title { get; set; } = string.Empty;\n    public bool ShowHelp { get; set; } = false;\n    public EventHandler? HelpRequest { get; set; }\n\n    internal void ApplyTo(FileDialog d)\n    {\n        d.DefaultExt = DefaultExt;\n        d.AddExtension = AddExtension;\n        d.CheckFileExists = CheckFileExists;\n        d.CheckPathExists = CheckPathExists;\n        foreach (var item in CustomPlaces)\n        {\n            d.CustomPlaces.Add(item);\n        }\n        d.InitialDirectory = InitialDirectory;\n        d.FileName = FileName;\n        d.DereferenceLinks = DereferenceLinks;\n        d.Filter = Filter;\n        d.Title = Title;\n        d.ShowHelp = ShowHelp;\n        if (HelpRequest != null)\n        {\n            d.HelpRequest += HelpRequest;\n        }\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/FrameworkDialogsApi.cs",
    "content": "﻿using System.Linq;\nusing System.Windows.Forms;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\n/// <inheritdoc />\ninternal class FrameworkDialogsApi : IFrameworkDialogsApi\n{\n    public FrameworkDialogsApi()\n    {\n    }\n\n    public MessageBoxResult ShowMessageBox(Window? owner, MessageBoxApiSettings settings) =>\n        owner != null ?\n            System.Windows.MessageBox.Show(\n                owner,\n                settings.MessageBoxText,\n                settings.Caption,\n                settings.Buttons,\n                settings.Icon,\n                settings.DefaultButton) :\n            System.Windows.MessageBox.Show(\n                settings.MessageBoxText,\n                settings.Caption,\n                settings.Buttons,\n                settings.Icon,\n                settings.DefaultButton);\n\n    public IReadOnlyList<IDialogStorageFile> ShowOpenFileDialog(Window? owner, OpenFileApiSettings settings)\n    {\n        var dialog = new System.Windows.Forms.OpenFileDialog();\n        settings.ApplyTo(dialog);\n        var result = dialog.ShowDialog(owner);\n        return result == DialogResult.OK ?\n            dialog.FileNames.Select(x => new DesktopDialogStorageFile(x)).ToArray() :\n            Array.Empty<IDialogStorageFile>();\n    }\n\n    public IDialogStorageFile? ShowSaveFileDialog(Window? owner, SaveFileApiSettings settings)\n    {\n        var dialog = new System.Windows.Forms.SaveFileDialog();\n        settings.ApplyTo(dialog);\n        var result = dialog.ShowDialog(owner);\n        return result == DialogResult.OK ?\n            new DesktopDialogStorageFile(dialog.FileName) :\n            null;\n    }\n\n    public IReadOnlyList<IDialogStorageFolder> ShowOpenFolderDialog(Window? owner, OpenFolderApiSettings settings)\n    {\n        var dialog = new FolderBrowserDialog();\n        settings.ApplyTo(dialog);\n        var result = dialog.ShowDialog(owner);\n        return result == DialogResult.OK ?\n            new IDialogStorageFolder[] { new DesktopDialogStorageFolder(dialog.SelectedPath) } :\n            Array.Empty<IDialogStorageFolder>();\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/IFrameworkDialogsApi.cs",
    "content": "﻿\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\n/// <summary>\n/// Wrapper around Win32 dialogs API that can be replaced by a mock for testing.\n/// </summary>\ninternal interface IFrameworkDialogsApi\n{\n    MessageBoxResult ShowMessageBox(Window? owner, MessageBoxApiSettings settings);\n    IReadOnlyList<IDialogStorageFile> ShowOpenFileDialog(Window? owner, OpenFileApiSettings settings);\n    IDialogStorageFile? ShowSaveFileDialog(Window? owner, SaveFileApiSettings settings);\n    IReadOnlyList<IDialogStorageFolder> ShowOpenFolderDialog(Window? owner, OpenFolderApiSettings settings);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/MessageBoxApiSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\ninternal class MessageBoxApiSettings\n{\n    public string MessageBoxText { get; set; } = string.Empty;\n    public string Caption { get; set; } = string.Empty;\n    public System.Windows.MessageBoxButton Buttons { get; set; }\n    public System.Windows.MessageBoxImage Icon { get; set; }\n    public System.Windows.MessageBoxResult DefaultButton { get; set; }\n    public System.Windows.MessageBoxOptions Options { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/OpenFileApiSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\ninternal class OpenFileApiSettings : FileApiSettings\n{\n    public bool Multiselect { get; set; }\n    public bool ReadOnlyChecked { get; set; }\n    public bool ShowReadOnly { get; set; }\n\n    internal void ApplyTo(System.Windows.Forms.OpenFileDialog d)\n    {\n        base.ApplyTo(d);\n        d.Multiselect = Multiselect;\n        d.ReadOnlyChecked = ReadOnlyChecked;\n        d.ShowReadOnly = ShowReadOnly;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/OpenFolderApiSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\ninternal class OpenFolderApiSettings\n{\n    public string Description { get; set; } = string.Empty;\n    public string? SelectedPath { get; set; } = string.Empty;\n    public EventHandler? HelpRequest { get; set; }\n\n    internal void ApplyTo(System.Windows.Forms.FolderBrowserDialog d)\n    {\n        d.Description = Description;\n        d.SelectedPath = SelectedPath;\n        if (HelpRequest != null)\n        {\n            d.HelpRequest += HelpRequest;\n        }\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Api/SaveFileApiSettings.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf.Api;\n\ninternal class SaveFileApiSettings : FileApiSettings\n{\n    public bool CreatePrompt { get; set; }\n    public bool OverwritePrompt { get; set; } = true;\n\n    internal void ApplyTo(System.Windows.Forms.SaveFileDialog d)\n    {\n        base.ApplyTo(d);\n        d.CreatePrompt = CreatePrompt;\n        d.OverwritePrompt = OverwritePrompt;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/DialogFactory.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.Wpf.Api;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing System.Text;\nusing Win32Button = System.Windows.MessageBoxButton;\nusing Win32Image = System.Windows.MessageBoxImage;\nusing Win32Result = System.Windows.MessageBoxResult;\nusing Win32Options = System.Windows.MessageBoxOptions;\nusing Win32MessageBox = System.Windows.MessageBox;\nusing MessageBoxButton = HanumanInstitute.MvvmDialogs.FrameworkDialogs.MessageBoxButton;\nusing MessageBoxImage = HanumanInstitute.MvvmDialogs.FrameworkDialogs.MessageBoxImage;\nusing System;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Handles OpenFileDialog, SaveFileDialog and OpenFolderDialog for WPF.\n/// </summary>\npublic class DialogFactory : DialogFactoryBase\n{\n    private readonly IFrameworkDialogsApi _api;\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    public DialogFactory(IDialogFactory? chain = null)\n        : this(chain, null)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    /// <param name=\"api\">An interface exposing WPF framework dialogs.</param>\n    internal DialogFactory(IDialogFactory? chain, IFrameworkDialogsApi? api)\n        : base(chain)\n    {\n        _api = api ?? new FrameworkDialogsApi();\n    }\n\n    /// <summary>\n    /// Gets or sets whether message boxes are displayed right-to-left (RightAlign+RtlReading).\n    /// </summary>\n    public bool MessageBoxRightToLeft { get; set; }\n\n    /// <summary>\n    /// Gets or sets whether to display on the default desktop of the interactive window station. Specifies that the message box is displayed from a .NET Windows Service application in order to notify the user of an event.\n    /// </summary>\n    public bool MessageBoxDefaultDesktopOnly { get; set; }\n\n    /// <summary>\n    /// Gets or sets whether to display on the currently active desktop even if a user is not logged on to the computer. Specifies that the message box is displayed from a .NET Windows Service application in order to notify the user of an event.\n    /// </summary>\n    public bool MessageBoxServiceNotification { get; set; }\n\n    /// <inheritdoc />\n    public override async Task<object?> ShowDialogAsync<TSettings>(ViewWrapper? owner, TSettings settings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => await UiExtensions.RunUiAsync(() => ShowOpenFolderDialog(owner, s)).ConfigureAwait(true),\n            OpenFileDialogSettings s => await UiExtensions.RunUiAsync(() => ShowOpenFileDialog(owner, s)).ConfigureAwait(true),\n            SaveFileDialogSettings s => await UiExtensions.RunUiAsync(() => ShowSaveFileDialog(owner, s)).ConfigureAwait(true),\n            MessageBoxSettings s => await UiExtensions.RunUiAsync(() => ShowMessageBox(owner, s)).ConfigureAwait(true),\n            _ => base.ShowDialogAsync(owner, settings)\n        };\n\n    /// <inheritdoc />\n    public override object? ShowDialog<TSettings>(ViewWrapper? owner, TSettings settings) =>\n        settings switch\n        {\n            OpenFolderDialogSettings s => ShowOpenFolderDialog(owner, s),\n            OpenFileDialogSettings s => ShowOpenFileDialog(owner, s),\n            SaveFileDialogSettings s => ShowSaveFileDialog(owner, s),\n            MessageBoxSettings s => ShowMessageBox(owner, s),\n            _ => base.ShowDialog(owner, settings)\n        };\n\n    private IReadOnlyList<IDialogStorageFolder> ShowOpenFolderDialog(ViewWrapper? owner, OpenFolderDialogSettings settings)\n    {\n        var apiSettings = new OpenFolderApiSettings()\n        {\n            Description = settings.Title,\n            SelectedPath = settings.SuggestedStartLocation?.LocalPath,\n            HelpRequest = settings.HelpRequest\n        };\n\n        return _api.ShowOpenFolderDialog(owner?.Ref, apiSettings);\n    }\n\n    private IReadOnlyList<IDialogStorageFile> ShowOpenFileDialog(ViewWrapper? owner, OpenFileDialogSettings settings)\n    {\n        var apiSettings = new OpenFileApiSettings()\n        {\n            CheckFileExists = true,\n            Multiselect = settings.AllowMultiple ?? false,\n            ReadOnlyChecked = settings.ReadOnlyChecked,\n            ShowReadOnly = settings.ShowReadOnly\n        };\n        AddSharedSettings(apiSettings, settings);\n\n        return _api.ShowOpenFileDialog(owner?.Ref, apiSettings) ?? Array.Empty<IDialogStorageFile>();\n    }\n\n    private IDialogStorageFile? ShowSaveFileDialog(ViewWrapper? owner, SaveFileDialogSettings settings)\n    {\n        var apiSettings = new SaveFileApiSettings()\n        {\n            DefaultExt = settings.DefaultExtension ?? string.Empty\n        };\n        AddSharedSettings(apiSettings, settings);\n\n        return _api.ShowSaveFileDialog(owner?.Ref, apiSettings);\n    }\n\n    private void AddSharedSettings(FileApiSettings d, FileDialogSettings s)\n    {\n        d.InitialDirectory = s.SuggestedStartLocation?.LocalPath ?? string.Empty;\n        d.FileName = s.SuggestedFileName;\n        d.DereferenceLinks = s.DereferenceLinks;\n        d.Filter = SyncFilters(s.Filters);\n        d.Title = s.Title;\n        d.ShowHelp = s.HelpRequest != null;\n        d.HelpRequest = s.HelpRequest;\n    }\n\n    /// <summary>\n    /// Encodes the list of filters in the Win32 API format:\n    /// \"Image Files (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*\"\n    /// </summary>\n    /// <param name=\"filters\">The list of filters to encode.</param>\n    /// <returns>A string representation of the list compatible with Win32 API.</returns>\n    private static string SyncFilters(IList<FileFilter> filters)\n    {\n        var result = new StringBuilder();\n        foreach (var item in filters)\n        {\n            // Add separator.\n            if (result.Length > 0)\n            {\n                result.Append('|');\n            }\n\n            // Get all extensions as a string.\n            var extDesc = item.ExtensionsToString();\n            // Get name including extensions.\n            var name = item.NameToString(extDesc);\n            // Add name+extensions for display.\n            result.Append(name);\n            // Add extensions again for the API.\n            result.Append(\"|\");\n            result.Append(extDesc);\n        }\n        return result.ToString();\n    }\n\n    private bool? ShowMessageBox(ViewWrapper? owner, MessageBoxSettings settings)\n    {\n        var apiSettings = new MessageBoxApiSettings()\n        {\n            MessageBoxText = settings.Content,\n            Caption = settings.Title,\n            Buttons = SyncButton(settings.Button),\n            Icon = SyncIcon(settings.Icon),\n            DefaultButton = SyncDefault(settings.Button, settings.DefaultValue),\n            Options = SyncOptions()\n        };\n\n        var button = _api.ShowMessageBox(owner?.Ref, apiSettings);\n        return button switch\n        {\n            Win32Result.Yes => true,\n            Win32Result.OK => true,\n            Win32Result.No => false,\n            Win32Result.Cancel => null,\n            _ => (bool?)null\n        };\n\n    }\n\n    private static Win32Button SyncButton(MessageBoxButton value) =>\n        (value) switch\n        {\n            MessageBoxButton.Ok => Win32Button.OK,\n            MessageBoxButton.YesNo => Win32Button.YesNo,\n            MessageBoxButton.OkCancel => Win32Button.OKCancel,\n            MessageBoxButton.YesNoCancel => Win32Button.YesNoCancel,\n            _ => Win32Button.OK\n        };\n\n    private static Win32Image SyncIcon(MessageBoxImage value) =>\n        (value) switch\n        {\n            MessageBoxImage.None => Win32Image.None,\n            MessageBoxImage.Error => Win32Image.Error,\n            MessageBoxImage.Exclamation => Win32Image.Exclamation,\n            MessageBoxImage.Information => Win32Image.Information,\n            MessageBoxImage.Stop => Win32Image.Stop,\n            MessageBoxImage.Warning => Win32Image.Warning,\n            _ => Win32Image.None\n        };\n\n    private static Win32Result SyncDefault(MessageBoxButton buttons, bool? value) =>\n        buttons switch\n        {\n            MessageBoxButton.Ok => Win32Result.OK,\n            MessageBoxButton.YesNo => value == true ? Win32Result.Yes : Win32Result.No,\n            MessageBoxButton.OkCancel => value == true ? Win32Result.OK : Win32Result.Cancel,\n            MessageBoxButton.YesNoCancel => value switch\n            {\n                true => Win32Result.Yes,\n                false => Win32Result.No,\n                _ => Win32Result.Cancel\n            },\n            _ => Win32Result.None\n        };\n\n    private Win32Options SyncOptions() =>\n        EvalOption(MessageBoxDefaultDesktopOnly, Win32Options.DefaultDesktopOnly) |\n        EvalOption(MessageBoxRightToLeft, Win32Options.RightAlign) |\n        EvalOption(MessageBoxRightToLeft, Win32Options.RtlReading) |\n        EvalOption(MessageBoxServiceNotification, Win32Options.ServiceNotification);\n\n    private static Win32Options EvalOption(bool cond, Win32Options option) =>\n        cond ? option : Win32Options.None;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/DialogFactoryBase.cs",
    "content": "﻿\n// ReSharper disable MemberCanBePrivate.Global\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Interface representing a framework dialog.\n/// </summary>\npublic abstract class DialogFactoryBase : IDialogFactory, IDialogFactorySync\n{\n    /// <inheritdoc />\n    public IDialogManager? DialogManager { get; set; }\n\n    /// <inheritdoc />\n    public IDialogFactory? Chain { get; }\n\n    /// <inheritdoc />\n    public IDialogFactory ChainTop { get; private set; }\n\n    /// <summary>\n    /// Initializes a new instance of a FrameworkDialog.\n    /// </summary>\n    /// <param name=\"chain\">If the dialog is not handled by this class, calls this other handler next.</param>\n    protected DialogFactoryBase(IDialogFactory? chain)\n    {\n        Chain = chain;\n        ChainTop = this;\n\n        // Set ChainTop recursively.\n        var item = chain;\n        while (item is DialogFactoryBase f)\n        {\n            f.ChainTop = this;\n            item = f.Chain;\n        }\n    }\n\n    /// <inheritdoc />\n    public Task<object?> ShowDialogAsync<TSettings>(IView? owner, TSettings settings)\n    {\n        if (owner is not null and not ViewWrapper) throw new ArgumentException($\"{nameof(owner)} must be of type {nameof(ViewWrapper)}\");\n\n        return ShowDialogAsync((ViewWrapper?)owner, settings);\n    }\n\n    /// <inheritdoc />\n    public object? ShowDialog<TSettings>(IView? owner, TSettings settings)\n    {\n        if (owner is not null and not ViewWrapper) throw new ArgumentException($\"{nameof(owner)} must be of type {nameof(ViewWrapper)}\");\n\n        return ShowDialog((ViewWrapper?)owner, settings);\n    }\n\n    /// <summary>\n    /// Opens a framework dialog with specified owner.\n    /// </summary>\n    /// <param name=\"owner\">Handle to the window that owns the dialog.</param>\n    /// <param name=\"settings\">The settings for the framework dialog.</param>\n    /// <returns>Return data specific to the dialog.</returns>\n    public virtual Task<object?> ShowDialogAsync<TSettings>(ViewWrapper? owner, TSettings settings) =>\n        Chain != null ? Chain.ShowDialogAsync(owner, settings) :\n            throw new NotSupportedException($\"There is no registered dialog for settings of type {typeof(TSettings).Name}.\");\n\n    /// <summary>\n    /// Opens a framework dialog with specified owner.\n    /// </summary>\n    /// <param name=\"owner\">Handle to the window that owns the dialog.</param>\n    /// <param name=\"settings\">The settings for the framework dialog.</param>\n    /// <returns>Return data specific to the dialog.</returns>\n    public virtual object? ShowDialog<TSettings>(ViewWrapper? owner, TSettings settings) =>\n        Chain != null ? Chain.AsSync().ShowDialog(owner, settings) :\n            throw new NotSupportedException($\"There is no registered dialog for settings of type {typeof(TSettings).Name}.\");\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/DialogManager.cs",
    "content": "﻿using System.Linq;\nusing System.Windows.Media;\nusing System.Windows.Threading;\nusing Microsoft.Extensions.Logging;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf\n{\n    /// <summary>\n    /// DialogManager that supports extra sync methods to show dialogs.\n    /// </summary>\n    public class DialogManager : DialogManagerBase<Window>, IDialogManagerSync\n    {\n        private readonly Dispatcher _dispatcher;\n\n        /// <inheritdoc />\n        public DialogManager(IViewLocator? viewLocator = null, IDialogFactory? dialogFactory = null,\n            ILogger<DialogManager>? logger = null, Dispatcher? dispatcher = null) :\n            base(viewLocator ?? new ViewLocatorBase(),\n                dialogFactory ?? new DialogFactory(), logger)\n        {\n            _dispatcher = dispatcher ?? Application.Current.Dispatcher;\n        }\n\n        /// <inheritdoc />\n        protected override bool IsDesignMode => DesignerProperties.GetIsInDesignMode(new DependencyObject());\n\n        /// <inheritdoc />\n        public virtual void ShowDialog(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel)\n        {\n            var viewDef = ViewLocator.Locate(viewModel);\n            Logger?.LogInformation(\"View: {View}; ViewModel: {ViewModel}; Owner: {OwnerViewModel}\", viewDef.ViewType, viewModel.GetType(), ownerViewModel.GetType());\n\n            var dialog = CreateDialog(viewModel, viewDef);\n            dialog.AsSync().ShowDialog(FindViewByViewModelOrThrow(ownerViewModel)!);\n\n            Logger?.LogInformation(\"View: {View}; Result: {Result}\", viewDef.ViewType.GetType(), viewModel.DialogResult);\n        }\n\n        /// <inheritdoc />\n        public object? ShowFrameworkDialog<TSettings>(INotifyPropertyChanged? ownerViewModel, TSettings settings, Func<object?, string>? resultToString = null)\n            where TSettings : DialogSettingsBase\n        {\n            Logger?.LogInformation(\"Dialog: {Dialog}; Title: {Title}\", settings.GetType().Name, settings.Title);\n\n            IView? owner = null;\n            if (ownerViewModel != null)\n            {\n                owner = FindViewByViewModelOrThrow(ownerViewModel);\n            }\n            var result = DialogFactory.AsSync().ShowDialog(owner, settings);\n\n            Logger?.LogInformation(\"Dialog: {Dialog}; Result: {Result}\", settings?.GetType().Name, resultToString != null ? resultToString(result) : result?.ToString());\n            return result;\n        }\n\n        /// <inheritdoc />\n        protected override IView CreateWrapper(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n        {\n            var wrapper = new ViewWrapper();\n            wrapper.Initialize(viewModel, viewDef);\n            return wrapper;\n        }\n\n        /// <inheritdoc />\n        protected override IView AsWrapper(Window view) => view.AsWrapper();\n\n        private static IEnumerable<Window> Windows =>\n            Application.Current.Windows.Cast<Window>();\n\n        /// <inheritdoc />\n        public override IView? FindViewByViewModel(INotifyPropertyChanged viewModel) =>\n            Windows.FirstOrDefault(x => ReferenceEquals(viewModel, x.DataContext)).AsWrapper();\n\n        /// <inheritdoc />\n        public override IView? GetMainWindow() =>\n            Application.Current.MainWindow.AsWrapper();\n\n        /// <inheritdoc />\n        public override IView? GetDummyWindow()\n        {\n            var parent = new Window()\n            {\n                Height = 1,\n                Width = 1,\n                WindowStyle = WindowStyle.None,\n                ShowInTaskbar = false,\n                ResizeMode = ResizeMode.NoResize,\n                WindowStartupLocation = WindowStartupLocation.CenterScreen,\n                Background = Brushes.Transparent\n            };\n            parent.Show();\n            return parent.AsWrapper();\n        }\n\n        /// <inheritdoc />\n        protected override void Dispatch(Action action)\n        {\n            if (_dispatcher.CheckAccess())\n            {\n                action();\n            }\n            else\n            {\n                _dispatcher.Invoke(action, DispatcherPriority.Render);\n            }\n        }\n\n        /// <inheritdoc />\n        protected override Task<T> DispatchAsync<T>(Func<T> action) =>\n            _dispatcher.CheckAccess() ? Task.FromResult(action()) : _dispatcher.InvokeAsync(action, DispatcherPriority.Render).Task;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/DialogService.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Class abstracting the interaction between view models and views when it comes to\n/// opening dialogs using the MVVM pattern in WPF.\n/// </summary>\npublic class DialogService : DialogServiceBase, IDialogServiceSync\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogServiceBase\"/> class.\n    /// </summary>\n    /// <remarks>\n    /// By default, <see cref=\"ViewLocatorBase\"/> is used as dialog type locator\n    /// and <see cref=\"DialogFactory\"/> is used as framework dialog factory.\n    /// </remarks>\n    public DialogService()\n        : this(null)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DialogService\"/> class.\n    /// </summary>\n    /// <param name=\"dialogManager\">Class responsible for UI interactions.</param>\n    /// <param name=\"viewModelFactory\">Function used to create view model instances. This function is used only by <see cref=\"IDialogService.CreateViewModel\"/> and is not used internally.</param>\n    public DialogService(\n        IDialogManager? dialogManager = null,\n        Func<Type, object?>? viewModelFactory = null)\n        : base(dialogManager ?? new DialogManager(dialogFactory: new DialogFactory()),\n            viewModelFactory)\n    {\n    }\n\n    /// <inheritdoc />\n    public bool? ShowDialog(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel) =>\n        ShowDialogInternal(ownerViewModel, viewModel);\n\n    /// <inheritdoc />\n    public bool? ShowDialog<T>(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel) =>\n        ShowDialogInternal(ownerViewModel, viewModel);\n\n    /// <summary>\n    /// Displays a modal dialog of specified type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    protected bool? ShowDialogInternal(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel)\n    {\n        if (ownerViewModel == null) throw new ArgumentNullException(nameof(ownerViewModel));\n        if (viewModel == null) throw new ArgumentNullException(nameof(viewModel));\n\n        DialogManager.AsSync().ShowDialog(ownerViewModel, viewModel);\n        return viewModel.DialogResult;\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/DialogServiceExtensions.cs",
    "content": "﻿using System.Windows.Forms;\nusing HanumanInstitute.MvvmDialogs.Wpf;\nusing HanumanInstitute.MvvmDialogs.FrameworkDialogs;\nusing MessageBoxButton = HanumanInstitute.MvvmDialogs.FrameworkDialogs.MessageBoxButton;\nusing MessageBoxImage = HanumanInstitute.MvvmDialogs.FrameworkDialogs.MessageBoxImage;\nusing HanumanInstitute.MvvmDialogs.FileSystem;\nusing System.Linq;\n\nnamespace HanumanInstitute.MvvmDialogs;\n\n/// <summary>\n/// Extension methods.\n/// </summary>\npublic static class DialogServiceExtensions\n{\n\n    /// <summary>\n    /// Displays a modal dialog of a type that is determined by the dialog type locator.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static bool? ShowDialog(this IDialogService service, INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel) =>\n        service.AsSync().ShowDialog(ownerViewModel, viewModel);\n\n    /// <summary>\n    /// Displays a modal dialog of specified type <typeparamref name=\"T\"/>.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <typeparam name=\"T\">The type of the dialog to show.</typeparam>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static bool? ShowDialog<T>(this IDialogService service, INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel) =>\n        service.AsSync().ShowDialog(ownerViewModel, viewModel);\n\n    /// <summary>\n    /// Shows a modal dialog in a synchronous way.\n    /// </summary>\n    /// <param name=\"window\">The window to show.</param>\n    public static bool? ShowDialog(this Window window) =>\n        window.ShowDialog();\n\n    /// <summary>\n    /// Shows a modal dialog in a synchronous way.\n    /// </summary>\n    /// <param name=\"dialog\">The dialog to show.</param>\n    /// <param name=\"owner\">The owner of the modal dialog.</param>\n    public static DialogResult ShowDialog(this CommonDialog dialog, Window? owner) =>\n        dialog.ShowDialog(owner != null ? new Win32Window(owner) : null);\n\n    /// <summary>\n    /// Displays a message box that has a message, title bar caption, button, and icon; and\n    /// that accepts a default message box result and returns a result.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"text\">A <see cref=\"string\"/> that specifies the text to display.</param>\n    /// <param name=\"title\">A <see cref=\"string\"/> that specifies the title bar caption to display. Default value is an empty string.</param>\n    /// <param name=\"button\">A <see cref=\"MessageBoxButton\"/> value that specifies which button or buttons to display.\n    /// Default value is <see cref=\"MessageBoxButton.Ok\"/>.</param>\n    /// <param name=\"icon\">A <see cref=\"MessageBoxImage\"/> value that specifies the icon to display.\n    /// Default value is <see cref=\"MessageBoxImage.None\"/>.</param>\n    /// <param name=\"defaultResult\">Specifies the value of the button selected by default. Default value is true.</param>\n    /// <returns>A value that specifies which message box button is clicked by the user. True=OK/Yes, False=No, Null=Cancel</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static bool? ShowMessageBox(\n        this IDialogService service,\n        INotifyPropertyChanged? ownerViewModel,\n        string text,\n        string title = \"\",\n        MessageBoxButton button = MessageBoxButton.Ok,\n        MessageBoxImage icon = MessageBoxImage.None,\n        bool? defaultResult = true)\n    {\n        var settings = new MessageBoxSettings\n        {\n            Content = text,\n            Title = title,\n            Button = button,\n            Icon = icon,\n            DefaultValue = defaultResult\n        };\n\n        return ShowMessageBox(service, ownerViewModel, settings);\n    }\n\n    /// <summary>\n    /// Displays a message box that has a message, title bar caption, button, and icon; and\n    /// that accepts a default message box result and returns a result.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the message box dialog.</param>\n    /// <returns>A value that specifies which message box button is clicked by the user. True=OK/Yes, False=No, Null=Cancel</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static bool? ShowMessageBox(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        MessageBoxSettings? settings = null)\n    {\n        return (bool?)service.DialogManager.AsSync().ShowFrameworkDialog(\n            ownerViewModel, settings ?? new MessageBoxSettings());\n    }\n\n    /// <summary>\n    /// Displays the OpenFileDialog to select a single file.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the open file dialog.</param>\n    /// <returns>The file selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static IDialogStorageFile? ShowOpenFileDialog(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFileDialogSettings? settings = null)\n    {\n        settings ??= new OpenFileDialogSettings();\n        settings.AllowMultiple ??= false;\n        return ShowOpenFilesDialog(service, ownerViewModel, settings).FirstOrDefault();\n    }\n\n    /// <summary>\n    /// Displays the OpenFileDialog to select multiple files.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the open file dialog.</param>\n    /// <returns>The list of files selected by the user, or empty if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static IReadOnlyList<IDialogStorageFile> ShowOpenFilesDialog(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFileDialogSettings? settings = null)\n    {\n        settings ??= new OpenFileDialogSettings();\n        settings.AllowMultiple ??= true;\n        return service.DialogManager.AsSync().ShowFrameworkDialog(\n            ownerViewModel, settings, x => string.Join(\", \", x)) as IReadOnlyList<IDialogStorageFile> ?? Array.Empty<IDialogStorageFile>();\n    }\n\n    /// <summary>\n    /// Displays the SaveFileDialog.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the save file dialog.</param>\n    /// <returns>The file selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static IDialogStorageFile? ShowSaveFileDialog(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        SaveFileDialogSettings? settings = null)\n    {\n        return (IDialogStorageFile?)service.DialogManager.AsSync().ShowFrameworkDialog(\n            ownerViewModel, settings ?? new SaveFileDialogSettings());\n    }\n\n    /// <summary>\n    /// Displays the FolderBrowserDialog.\n    /// </summary>\n    /// <param name=\"service\">The IDialogService on which to attach the extension method.</param>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings for the folder browser dialog.</param>\n    /// <returns>The folder selected by the user, or null if the user cancelled.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    public static IDialogStorageFolder? ShowOpenFolderDialog(this IDialogService service, INotifyPropertyChanged? ownerViewModel,\n        OpenFolderDialogSettings? settings = null)\n    {\n        return ((IReadOnlyList<IDialogStorageFolder>?)service.DialogManager.AsSync().ShowFrameworkDialog(\n            ownerViewModel, settings ?? new OpenFolderDialogSettings()))?.FirstOrDefault();\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/GlobalUsings.cs",
    "content": "global using System;\nglobal using System.Collections.Generic;\nglobal using System.ComponentModel;\nglobal using System.Threading.Tasks;\nglobal using System.Windows;\nglobal using System.Windows.Controls;\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/IDialogFactorySync.cs",
    "content": "﻿namespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Interface representing a framework dialog.\n/// </summary>\npublic interface IDialogFactorySync\n{\n    /// <summary>\n    /// Opens a framework dialog with specified owner.\n    /// </summary>\n    /// <param name=\"owner\">Handle to the window that owns the dialog.</param>\n    /// <param name=\"settings\">The settings for the framework dialog.</param>\n    /// <returns>Return data specific to the dialog.</returns>\n    object? ShowDialog<TSettings>(IView? owner, TSettings settings);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/IDialogManagerSync.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Adds support for sync methods to IDialogManager.\n/// </summary>\npublic interface IDialogManagerSync\n{\n    /// <summary>\n    /// Shows a new dialog of specified type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>The dialog result.</returns>\n    void ShowDialog(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel);\n\n    /// <summary>\n    /// Shows a framework dialog whose type depends on the settings type.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"settings\">The settings to pass to the <see cref=\"IDialogFactory\"/></param>\n    /// <param name=\"resultToString\">A function to convert the result into a string for logging. If null, ToString will be used.</param>\n    /// <typeparam name=\"TSettings\">The settings type used to determine which dialog to show.</typeparam>\n    /// <returns>The dialog result.</returns>\n    object? ShowFrameworkDialog<TSettings>(INotifyPropertyChanged? ownerViewModel, TSettings settings, Func<object?, string>? resultToString = null)\n        where TSettings : DialogSettingsBase;\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/IDialogServiceSync.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Provides sync ShowDialog methods for IDialogService.\n/// </summary>\npublic interface IDialogServiceSync\n{\n    /// <summary>\n    /// Displays a modal dialog of a type that is determined by the dialog type locator.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    bool? ShowDialog(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel);\n\n    /// <summary>\n    /// Displays a modal dialog of specified type <typeparamref name=\"T\"/>.\n    /// </summary>\n    /// <param name=\"ownerViewModel\">A view model that represents the owner window of the dialog.</param>\n    /// <param name=\"viewModel\">The view model of the new dialog.</param>\n    /// <typeparam name=\"T\">The type of the dialog to show.</typeparam>\n    /// <returns>A nullable value of type <see cref=\"bool\"/> that signifies how a window was closed by the user.</returns>\n    /// <exception cref=\"ViewNotRegisteredException\">No view is registered with specified owner view model as data context.</exception>\n    bool? ShowDialog<T>(INotifyPropertyChanged ownerViewModel, IModalDialogViewModel viewModel);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/IWindowSync.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Provides a sync ShowDialog compatibility method to IWindow in WPF.\n/// </summary>\npublic interface IViewSync\n{\n    /// <summary>\n    /// Opens a window and returns only when the newly opened window is closed.\n    /// </summary>\n    void ShowDialog(IView owner);\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/MvvmDialogs.Wpf.csproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net462;net10.0-windows</TargetFrameworks>\n    <LangVersion>default</LangVersion>\n    <Nullable>enable</Nullable>\n    <OutputType>Library</OutputType>\n    <AssemblyTitle>MVVM Dialogs for WPF</AssemblyTitle>\n    <Title>MVVM Dialogs for WPF</Title>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>../StrongName.snk</AssemblyOriginatorKeyFile>\n    <PackageId>HanumanInstitute.MvvmDialogs.Wpf</PackageId>\n    <AssemblyName>HanumanInstitute.MvvmDialogs.Wpf</AssemblyName>\n    <RootNamespace>HanumanInstitute.MvvmDialogs.Wpf</RootNamespace>\n    <GenerateDocumentationFile>True</GenerateDocumentationFile>\n    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n    <UseWPF>true</UseWPF>\n    <UseWindowsForms>true</UseWindowsForms>\n    <PackageIcon>icon_64x64.png</PackageIcon>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\MvvmDialogs\\MvvmDialogs.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"..\\icon_64x64.png\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n    <None Include=\"..\\StrongName.snk\">\n      <Link>StrongName.snk</Link>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Abstractions\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Runtime/NullableAttributes.cs",
    "content": "﻿// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\n// This was copied from https://github.com/dotnet/runtime/blob/39b9607807f29e48cae4652cd74735182b31182e/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/NullableAttributes.cs\n// and updated to have the scope of the attributes be internal.\nnamespace System.Diagnostics.CodeAnalysis;\n#if !NETCOREAPP\n\n/// <summary>Specifies that null is allowed as an input even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]\ninternal sealed class AllowNullAttribute : Attribute { }\n\n/// <summary>Specifies that null is disallowed as an input even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]\ninternal sealed class DisallowNullAttribute : Attribute { }\n\n/// <summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]\ninternal sealed class MaybeNullAttribute : Attribute { }\n\n/// <summary>Specifies that an output will not be null even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]\ninternal sealed class NotNullAttribute : Attribute { }\n\n/// <summary>Specifies that when a method returns <see cref=\"ReturnValue\"/>, the parameter may be null even if the corresponding type disallows it.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\ninternal sealed class MaybeNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter may be null.\n    /// </param>\n    public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n}\n\n/// <summary>Specifies that when a method returns <see cref=\"ReturnValue\"/>, the parameter will not be null even if the corresponding type allows it.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\ninternal sealed class NotNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter will not be null.\n    /// </param>\n    public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n}\n\n/// <summary>Specifies that the output will be non-null if the named parameter is non-null.</summary>\n[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]\ninternal sealed class NotNullIfNotNullAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the associated parameter name.</summary>\n    /// <param name=\"parameterName\">\n    /// The associated parameter name.  The output will be non-null if the argument to the parameter specified is non-null.\n    /// </param>\n    public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName;\n\n    /// <summary>Gets the associated parameter name.</summary>\n    public string ParameterName { get; }\n}\n\n/// <summary>Applied to a method that will never return under any circumstance.</summary>\n[AttributeUsage(AttributeTargets.Method, Inherited = false)]\ninternal sealed class DoesNotReturnAttribute : Attribute { }\n\n/// <summary>Specifies that the method will not return if the associated Boolean parameter is passed the specified value.</summary>\n[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]\ninternal sealed class DoesNotReturnIfAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified parameter value.</summary>\n    /// <param name=\"parameterValue\">\n    /// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to\n    /// the associated parameter matches this value.\n    /// </param>\n    public DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue;\n\n    /// <summary>Gets the condition parameter value.</summary>\n    public bool ParameterValue { get; }\n}\n\n#endif\n\n#if !NETCOREAPP || NETCOREAPP3_1\n\n/// <summary>Specifies that the method or property will ensure that the listed field and property members have not-null values.</summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]\ninternal sealed class MemberNotNullAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with a field or property member.</summary>\n    /// <param name=\"member\">\n    /// The field or property member that is promised to be not-null.\n    /// </param>\n    public MemberNotNullAttribute(string member) => Members = new[] { member };\n\n    /// <summary>Initializes the attribute with the list of field and property members.</summary>\n    /// <param name=\"members\">\n    /// The list of field and property members that are promised to be not-null.\n    /// </param>\n    public MemberNotNullAttribute(params string[] members) => Members = members;\n\n    /// <summary>Gets field or property member names.</summary>\n    public string[] Members { get; }\n}\n\n/// <summary>Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.</summary>\n[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]\ninternal sealed class MemberNotNullWhenAttribute : Attribute\n{\n    /// <summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter will not be null.\n    /// </param>\n    /// <param name=\"member\">\n    /// The field or property member that is promised to be not-null.\n    /// </param>\n    public MemberNotNullWhenAttribute(bool returnValue, string member)\n    {\n        ReturnValue = returnValue;\n        Members = new[] { member };\n    }\n\n    /// <summary>Initializes the attribute with the specified return value condition and list of field and property members.</summary>\n    /// <param name=\"returnValue\">\n    /// The return value condition. If the method returns this value, the associated parameter will not be null.\n    /// </param>\n    /// <param name=\"members\">\n    /// The list of field and property members that are promised to be not-null.\n    /// </param>\n    public MemberNotNullWhenAttribute(bool returnValue, params string[] members)\n    {\n        ReturnValue = returnValue;\n        Members = members;\n    }\n\n    /// <summary>Gets the return value condition.</summary>\n    public bool ReturnValue { get; }\n\n    /// <summary>Gets field or property member names.</summary>\n    public string[] Members { get; }\n}\n\n#endif"
  },
  {
    "path": "src/MvvmDialogs.Wpf/StrongViewLocator.cs",
    "content": "﻿\nnamespace HanumanInstitute.MvvmDialogs.Wpf\n{\n    /// <summary>\n    /// Strongly-typed View Locator that does not rely on reflection.\n    /// </summary>\n    public class StrongViewLocator : StrongViewLocatorBase\n    {\n        /// <summary>\n        /// Registers specified views as being associated with specified view model type.\n        /// </summary>\n        /// <typeparam name=\"TViewModel\">The type of view model to register.</typeparam>\n        /// <typeparam name=\"TView\">The view type to associate with the view model.</typeparam>\n        public void Register<TViewModel, TView>()\n            where TViewModel : INotifyPropertyChanged\n            where TView : Control, new() =>\n            Register<TViewModel>(\n                new ViewDefinition(typeof(TView), () => new TView()));\n    }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/UiExtensions.cs",
    "content": "﻿using HanumanInstitute.MvvmDialogs.FrameworkDialogs;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Provides extension methods for WPF.\n/// </summary>\npublic static class UiExtensions\n{\n    /// <summary>\n    /// Runs a synchronous action asynchronously on the UI thread.\n    /// </summary>\n    /// <param name=\"action\">The action to run asynchronously.</param>\n    /// <typeparam name=\"T\">The return type of the action.</typeparam>\n    /// <returns>The result of the action.</returns>\n    public static Task<T> RunUiAsync<T>(Func<T> action)\n    {\n        TaskCompletionSource<T> completion = new();\n        Application.Current.Dispatcher.BeginInvoke(new Action(() => completion.SetResult(action())));\n        return completion.Task;\n    }\n\n    /// <summary>\n    /// Runs a synchronous action asynchronously on the UI thread.\n    /// </summary>\n    /// <param name=\"action\">The action to run asynchronously.</param>\n    public static Task RunUiAsync(Action action)\n    {\n        TaskCompletionSource<bool> completion = new();\n        Application.Current.Dispatcher.BeginInvoke(new Action(() =>\n        {\n            action();\n            completion.SetResult(true);\n        }));\n        return completion.Task;\n    }\n\n    /// <summary>\n    /// Creates a WindowWrapper around specified window.\n    /// </summary>\n    /// <param name=\"window\">The Window to get a wrapper for.</param>\n    /// <returns>A WindowWrapper referencing the window.</returns>\n    [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"window\")]\n    public static ViewWrapper? AsWrapper(this Window? window)\n    {\n        if (window != null)\n        {\n            var result = new ViewWrapper();\n            result.InitializeExisting((INotifyPropertyChanged)window.DataContext!, window);\n            return result;\n        }\n        return null;\n    }\n\n    /// <summary>\n    /// Converts an IWindow into a WindowWrapper.\n    /// </summary>\n    /// <param name=\"window\">The IWindow to convert.</param>\n    /// <returns>A WindowWrapper referencing the window.</returns>\n    [return: System.Diagnostics.CodeAnalysis.NotNullIfNotNull(\"window\")]\n    public static ViewWrapper? AsWrapper(this IView? window) =>\n        (ViewWrapper?)window;\n\n    /// <summary>\n    /// Returns the <see cref=\"IView\"/> RefObj property as a WPF Window.\n    /// </summary>\n    /// <param name=\"view\">The IView to get the Ref property for.</param>\n    /// <returns>The Window held within the IView.</returns>\n    public static Window? GetRef(this IView? view)\n    {\n        if (view is ViewWrapper v)\n        {\n            return v.Ref;\n        }\n        return null;\n    }\n\n    /// <summary>\n    /// Gets the owner of a <see cref=\"FrameworkElement\"/> wrapped in a <see cref=\"ViewWrapper\"/>.\n    /// </summary>\n    /// <param name=\"frameworkElement\">\n    /// The <see cref=\"FrameworkElement\"/> to find the <see cref=\"ViewWrapper\"/> for.\n    /// </param>\n    /// <returns>The owning <see cref=\"ViewWrapper\"/> if found; otherwise null.</returns>\n    internal static ViewWrapper GetOwner(this FrameworkElement frameworkElement)\n    {\n        var owner = frameworkElement as Window ?? Window.GetWindow(frameworkElement);\n        return owner.AsWrapper();\n    }\n\n    /// <summary>\n    /// Returns the Sync interface of an IFrameworkDialog.\n    /// </summary>\n    internal static IDialogFactorySync AsSync(this IDialogFactory factory) =>\n        factory as IDialogFactorySync ?? throw new InvalidCastException(\"IDialogFactory instance doesn't implement IDialogFactorySync.\");\n\n    /// <summary>\n    /// Returns the Sync interface of an IWindow.\n    /// </summary>\n    internal static IViewSync AsSync(this IView window) =>\n        window as IViewSync ?? throw new InvalidCastException(\"IWindow instance doesn't implement IWindowSync.\");\n\n    /// <summary>\n    /// Returns the Sync interface of an IDialogService.\n    /// </summary>\n    internal static IDialogServiceSync AsSync(this IDialogService service) =>\n        service as IDialogServiceSync ?? throw new InvalidCastException(\"IDialogService instance doesn't implement IDialogServiceSync.\");\n\n    /// <summary>\n    /// Returns the Sync interface of an IDialogManager.\n    /// </summary>\n    internal static IDialogManagerSync AsSync(this IDialogManager service) =>\n        service as IDialogManagerSync ?? throw new InvalidCastException(\"IDialogManager instance doesn't implement IDialogManagerSync.\");\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/ViewLocatorBase.cs",
    "content": "﻿using System.Reflection;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Base implementation of WPF ViewLocator. Override GetViewName to customize paths.\n/// </summary>\npublic class ViewLocatorBase : IViewLocator\n{\n    /// <summary>\n    /// Returns the view type name for specified view model type. By default, it replaces 'ViewModel' with 'View'.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to get the view type for.</param>\n    /// <returns>The view type name.</returns>\n    protected virtual string GetViewName(object viewModel) => viewModel.GetType().FullName!.Replace(\"ViewModel\", \"View\");\n\n    /// <summary>\n    /// Creates a view based on the specified view model.\n    /// </summary>\n    /// <param name=\"viewModel\">The view model to create a view for.</param>\n    public virtual ViewDefinition Locate(object viewModel)\n    {\n        var name = GetViewName(viewModel);\n        //var type = Assembly.GetEntryAssembly()?.GetType(name);\n        var viewType = Assembly.GetAssembly(viewModel.GetType())?.GetType(name);\n\n        // ReSharper disable once SuspiciousTypeConversion.Global\n        if (viewType is null || (!typeof(Window).IsAssignableFrom(viewType) && !typeof(IView).IsAssignableFrom(viewType)))\n        {\n            var message = $\"Dialog view of type {name} for view model {viewModel.GetType().FullName} is missing.\";\n            const string ErrorInfo = \"You can create a ViewLocator class in the project base to map your \" +\n                                     \"view models to your views. See online documentation for more info.\";\n            throw new TypeLoadException(message + Environment.NewLine + ErrorInfo);\n        }\n        return new ViewDefinition(viewType, () => CreateViewInstance(viewType));\n    }\n\n    /// <summary>\n    /// The method used to create the view instance from its <see cref=\"Type\"/>.\n    /// Uses <see cref=\"Activator.CreateInstance(Type)\"/> by default.\n    /// </summary>\n    /// <param name=\"viewType\">The type to create a view for.</param>\n    /// <returns>The created view.</returns>\n    protected virtual object CreateViewInstance(Type viewType) => Activator.CreateInstance(viewType)!;\n\n    /// <inheritdoc />\n    public virtual object Create(object viewModel) =>\n        Locate(viewModel).Create();\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/ViewWrapper.cs",
    "content": "﻿using System.Windows.Forms;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Class wrapping an instance of WPF <see cref=\"Window\"/> within <see cref=\"IView\"/>.\n/// </summary>\n/// <seealso cref=\"IView\" />\npublic class ViewWrapper : IView, IViewSync\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewWrapper\"/> class.\n    /// </summary>\n    /// <param name=\"viewModel\"></param>\n    /// <param name=\"viewDef\"></param>\n    public void Initialize(INotifyPropertyChanged viewModel, ViewDefinition viewDef)\n    {\n        Ref = (Window)viewDef.Create();\n        ViewModel = viewModel;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ViewWrapper\"/> class.\n    /// </summary>\n    public void InitializeExisting(INotifyPropertyChanged viewModel, object view)\n    {\n        Ref = (Window)view;\n        ViewModel = viewModel;\n    }\n\n    /// <summary>\n    /// Gets the Window reference held by this class.\n    /// </summary>\n    public Window Ref { get; private set; } = default!;\n\n    /// <summary>\n    /// Gets the Window reference held by this class.\n    /// </summary>\n    public object RefObj => Ref;\n\n    /// <summary>\n    /// Returns a IWin32Window class that can be used for API calls.\n    /// </summary>\n    public IWin32Window Win32Window => new Win32Window(Ref);\n\n    /// <summary>\n    /// Occurs when the window is loading.\n    /// </summary>\n    public event EventHandler? Loaded\n    {\n        add\n        {\n            if (value != null)\n            {\n                var handler = new RoutedEventHandler(value.Invoke);\n                _loadedHandlers.Add(value, handler);\n                Ref.Loaded += handler;\n            }\n        }\n        remove\n        {\n            if (value != null)\n            {\n                Ref.Loaded += _loadedHandlers[value];\n                _loadedHandlers.Remove(value);\n            }\n        }\n    }\n    private readonly Dictionary<EventHandler, RoutedEventHandler> _loadedHandlers = new();\n\n    /// <summary>\n    /// Occurs when the window is about to close.\n    /// </summary>\n    public event EventHandler<CancelEventArgs>? Closing\n    {\n        add\n        {\n            if (value != null)\n            {\n                var handler = new CancelEventHandler(value.Invoke);\n                _closingHandlers.Add(value, handler);\n                Ref.Closing += handler;\n            }\n        }\n        remove\n        {\n            if (value != null)\n            {\n                Ref.Closing += _closingHandlers[value];\n                _closingHandlers.Remove(value);\n            }\n        }\n    }\n    private readonly Dictionary<EventHandler<CancelEventArgs>, CancelEventHandler> _closingHandlers = new();\n\n    /// <summary>\n    /// Occurs when the window is about to close.\n    /// </summary>\n    public event EventHandler? Closed\n    {\n        add => Ref.Closed += value;\n        remove => Ref.Closed -= value;\n    }\n\n    ///// <summary>\n    ///// Initializes a new instance of the <see cref=\"ViewWrapper\"/> class.\n    ///// </summary>\n    ///// <param name=\"window\">The window.</param>\n    //public ViewWrapper(Window window) =>\n    //    this.Ref = window ?? throw new ArgumentNullException(nameof(window));\n\n    /// <inheritdoc />\n    public INotifyPropertyChanged ViewModel\n    {\n        get => (INotifyPropertyChanged)Ref.DataContext;\n        set => Ref.DataContext = value;\n    }\n\n    /// <inheritdoc />\n    public IView? Owner\n    {\n        get => Ref.Owner.AsWrapper();\n        set =>\n            Ref.Owner = value switch\n            {\n                null => null,\n                ViewWrapper w => w.Ref,\n                _ => throw new ArgumentException($\"Owner must be of type {typeof(ViewWrapper).FullName}\")\n            };\n    }\n\n    /// <inheritdoc />\n    public Task ShowDialogAsync(IView? owner) => UiExtensions.RunUiAsync(() => ShowDialog(owner));\n\n    /// <inheritdoc />\n    public void ShowDialog(IView? owner)\n    {\n        Ref.Owner = owner?.RefObj as Window;\n        Ref.ShowDialog();\n    }\n\n    /// <inheritdoc />\n    public void Show(IView? owner)\n    {\n        Ref.Owner = owner?.RefObj as Window;\n        Ref.Show();\n    }\n\n    /// <inheritdoc />\n    public void Activate() => Ref.Activate();\n\n    /// <inheritdoc />\n    public void Close() => Ref.Close();\n\n    /// <inheritdoc />\n    public bool IsEnabled\n    {\n        get => Ref.IsEnabled;\n        set => Ref.IsEnabled = value;\n    }\n\n    /// <inheritdoc />\n    public bool IsVisible => Ref.IsVisible;\n\n    /// <inheritdoc />\n    public bool ClosingConfirmed { get; set; }\n}\n"
  },
  {
    "path": "src/MvvmDialogs.Wpf/Win32Window.cs",
    "content": "﻿using System.Windows.Interop;\nusing IWin32Window = System.Windows.Forms.IWin32Window;\n\nnamespace HanumanInstitute.MvvmDialogs.Wpf;\n\n/// <summary>\n/// Class describing a <see cref=\"IWin32Window\"/> wrapper around a WPF window.\n/// </summary>\ninternal class Win32Window : IWin32Window\n{\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Win32Window\"/> class.\n    /// </summary>\n    /// <param name=\"window\">The WPF window to wrap.</param>\n    public Win32Window(Window window) => Handle = new WindowInteropHelper(window).Handle;\n\n    /// <inheritdoc />\n    public IntPtr Handle { get; }\n}\n"
  }
]