From 43a5929237f3f5839af183cf773686084a0232ef Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 9 Oct 2026 10:23:36 -0500 Subject: [PATCH 01/11] CI: run test projects at their AnyCPU output path Passing -p:Platform=x64 to a test project made dotnet test look under bin\x64, but the x64 solution build maps test projects to AnyCPU (bin\Debug). Co-Authored-By: Claude Opus 5.5 Signed-off-by: James Maes --- .github/workflows/ci.yml | 4 ++-- .github/workflows/release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 60bd8de..652dd0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: run: dotnet build AppKit.slnx -p:Platform=x64 -warnaserror - name: Run unit tests with coverage - run: dotnet test tests/KofTwentyTwo.AppKit.Tests --no-build -p:Platform=x64 --settings coverage.runsettings --collect:"XPlat Code Coverage" --results-directory TestResults + run: dotnet test tests/KofTwentyTwo.AppKit.Tests --no-build --settings coverage.runsettings --collect:"XPlat Code Coverage" --results-directory TestResults - name: Enforce 100% line coverage (AppKit, AppKit.Updates) shell: pwsh @@ -77,7 +77,7 @@ jobs: run: dotnet build AppKit.slnx -p:Platform=x64 - name: Run UI tests - run: dotnet test tests/KofTwentyTwo.AppKit.UiTests --no-build -p:Platform=x64 + run: dotnet test tests/KofTwentyTwo.AppKit.UiTests --no-build format: name: Format (style gate) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d2c2c82..e14be3e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: run: dotnet build AppKit.slnx -c Release -p:Platform=x64 -p:Version=${{ steps.version.outputs.version }} -warnaserror - name: Unit tests with coverage - run: dotnet test tests/KofTwentyTwo.AppKit.Tests -c Release --no-build -p:Platform=x64 --settings coverage.runsettings --collect:"XPlat Code Coverage" --results-directory TestResults + run: dotnet test tests/KofTwentyTwo.AppKit.Tests -c Release --no-build --settings coverage.runsettings --collect:"XPlat Code Coverage" --results-directory TestResults - name: Enforce 100% line coverage shell: pwsh -- 2.54.0 From 5006a8c822595830cf12a8cf5b1a18c71757ac5f Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 9 Oct 2026 10:23:37 -0500 Subject: [PATCH 02/11] build: adopt the KofTwentyTwo .NET quality gate and lock files Brings in the standards' configs/dotnet files (K22-CODE-CS-01, -08): - .editorconfig: Kingsrook layout (3-space indent, Allman braces, no space after control keywords), naming rules and code-style rules at build-failing severity, plus the AppKit samples' XAML-handler relaxations. - .gitattributes: LF line endings everywhere (K22-CODE-07). - Directory.Build.props: analyzers, warnings as errors, documentation file for IDE0005, deterministic builds, NuGetAudit mode all, lock files, and locked restore on CI; AppKit's version and package metadata kept. - Directory.Packages.props: Meziantou.Analyzer and transitive pinning. - packages.lock.json for every project (locked restore verified for x64 and ARM64). The code is reformatted and the new analyzer findings are fixed in the following commits. Co-Authored-By: Claude Opus 5.5 Signed-off-by: James Maes --- .editorconfig | 197 ++++++++++++-- .gitattributes | 10 +- Directory.Build.props | 103 +++++--- Directory.Packages.props | 42 +-- .../AppKit.Sample.WinUI/packages.lock.json | 246 ++++++++++++++++++ samples/AppKit.Sample.Wpf/packages.lock.json | 36 +++ .../packages.lock.json | 22 ++ .../packages.lock.json | 166 ++++++++++++ .../packages.lock.json | 29 +++ src/KofTwentyTwo.AppKit/packages.lock.json | 13 + .../packages.lock.json | 120 +++++++++ .../packages.lock.json | 190 ++++++++++++++ tools/BrandTool/packages.lock.json | 16 ++ 13 files changed, 1107 insertions(+), 83 deletions(-) create mode 100644 samples/AppKit.Sample.WinUI/packages.lock.json create mode 100644 samples/AppKit.Sample.Wpf/packages.lock.json create mode 100644 src/KofTwentyTwo.AppKit.Updates/packages.lock.json create mode 100644 src/KofTwentyTwo.AppKit.WinUI/packages.lock.json create mode 100644 src/KofTwentyTwo.AppKit.Wpf/packages.lock.json create mode 100644 src/KofTwentyTwo.AppKit/packages.lock.json create mode 100644 tests/KofTwentyTwo.AppKit.Tests/packages.lock.json create mode 100644 tests/KofTwentyTwo.AppKit.UiTests/packages.lock.json create mode 100644 tools/BrandTool/packages.lock.json diff --git a/.editorconfig b/.editorconfig index 2f9d6e0..3b41992 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,39 +1,141 @@ -# AppKit code style. Enforced in every build via Directory.Build.props -# (EnforceCodeStyleInBuild + TreatWarningsAsErrors) and by the CI format gate -# (dotnet format --verify-no-changes --severity error). +# KofTwentyTwo .NET code style (standards: K22-CODE-CS): the Kingsrook code style +# (https://github.com/QRun-IO/qqq/blob/develop/CODE_STYLE.md) applied to C#. +# Copy to the repository root. Severities of "warning" fail the build because the +# companion Directory.Build.props sets TreatWarningsAsErrors and EnforceCodeStyleInBuild, +# so local `dotnet build` and CI enforce exactly the same rules. The resharper_* keys +# apply the Kingsrook blank-line rules in Rider and ReSharper, which .NET's own +# formatter cannot express. root = true [*] charset = utf-8 -end_of_line = crlf +end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true indent_style = space -indent_size = 4 +# Kingsrook: always 3 spaces, never tabs. +indent_size = 3 +tab_width = 3 -# MSBuild, config, and workflow files use 2-space indentation. -[*.{csproj,props,targets,slnx,xml,json,yml,yaml}] +# YAML stays at 2: the YAML ecosystem (GitHub Actions, Dependabot) assumes it. +[*.{yml,yaml}] indent_size = 2 +[*.md] +trim_trailing_whitespace = false + +# Windows-only script formats require CRLF. +[*.{cmd,bat}] +end_of_line = crlf + [*.cs] -# System usings first, as the codebase already does (used by IDE "Sort Usings"). +#### Formatting (IDE0055 makes every rule below a build error) #### +dotnet_diagnostic.IDE0055.severity = warning dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = one_less_than_current +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_space_after_cast = false +# Kingsrook: no space between a control keyword and its parenthesis: if(x), for(...), catch(...). +csharp_space_after_keywords_in_control_flow_statements = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_after_comma = true +csharp_space_before_comma = false +csharp_space_after_semicolon_in_for_statement = true +csharp_preserve_single_line_statements = false +csharp_preserve_single_line_blocks = true -# Braces on every control-flow block; the codebase is already 100% compliant. -csharp_prefer_braces = true:warning +#### Kingsrook blank lines and layout (Rider / ReSharper; .NET formatter cannot express) #### +resharper_blank_lines_around_method = 3 +resharper_blank_lines_around_property = 3 +resharper_blank_lines_around_auto_property = 1 +resharper_blank_lines_around_type = 3 +resharper_blank_lines_after_using_list = 2 +resharper_keep_blank_lines_in_code = 1 +resharper_keep_blank_lines_in_declarations = 3 +resharper_brace_style = next_line +resharper_indent_size = 3 +resharper_space_after_keywords_in_control_flow_statements = false +resharper_max_line_length = 999 +resharper_wrap_before_first_method_call = true +resharper_wrap_chained_method_calls = chop_if_long -# Every project uses file-scoped namespaces (AppKit has no XAML-generated code). +#### Usings and namespaces #### +# IDE0005 needs GenerateDocumentationFile=true to run during build (set in Directory.Build.props). +dotnet_diagnostic.IDE0005.severity = warning +csharp_using_directive_placement = outside_namespace:warning csharp_style_namespace_declarations = file_scoped:warning +dotnet_diagnostic.IDE0161.severity = warning -# CA1716 warns that IActivityLog.Error collides with a VB keyword; this is a C#-only -# codebase and Error is the natural name for a log level. -dotnet_diagnostic.CA1716.severity = none +#### var: only when the type is apparent from the right-hand side #### +csharp_style_var_for_built_in_types = false:warning +csharp_style_var_when_type_is_apparent = true:warning +csharp_style_var_elsewhere = false:warning +dotnet_diagnostic.IDE0007.severity = warning +dotnet_diagnostic.IDE0008.severity = warning -# CA1859 asks callers to replace IActivityLog/ISecretVault parameters with concrete types -# for micro-performance; those interfaces are the codebase's deliberate test seams. -dotnet_diagnostic.CA1859.severity = none +#### Braces, modifiers, readonly #### +csharp_prefer_braces = true:warning +dotnet_diagnostic.IDE0011.severity = warning +dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning +dotnet_diagnostic.IDE0040.severity = warning +dotnet_style_readonly_field = true:warning +dotnet_diagnostic.IDE0044.severity = warning +csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:warning +dotnet_diagnostic.IDE0036.severity = warning -# Naming: interfaces are I-prefixed; types and members are PascalCase. +#### this. qualification: never #### +dotnet_style_qualification_for_field = false:warning +dotnet_style_qualification_for_property = false:warning +dotnet_style_qualification_for_method = false:warning +dotnet_style_qualification_for_event = false:warning +dotnet_diagnostic.IDE0003.severity = warning + +#### Language keywords over framework type names #### +dotnet_style_predefined_type_for_locals_parameters_members = true:warning +dotnet_style_predefined_type_for_member_access = true:warning +dotnet_diagnostic.IDE0049.severity = warning + +#### Dead code and redundancy #### +dotnet_diagnostic.IDE0051.severity = warning # unused private member +dotnet_diagnostic.IDE0052.severity = warning # unread private member +dotnet_diagnostic.IDE0059.severity = warning # unnecessary assignment +dotnet_diagnostic.IDE0060.severity = warning # unused parameter +dotnet_diagnostic.IDE0035.severity = warning # unreachable code +dotnet_diagnostic.IDE0004.severity = warning # unnecessary cast +dotnet_diagnostic.IDE0100.severity = warning # unnecessary equality operator +dotnet_diagnostic.IDE0080.severity = warning # unnecessary suppression operator +dotnet_diagnostic.IDE0079.severity = warning # unnecessary suppression +dotnet_code_quality_unused_parameters = all + +#### Modern language features (suggestions: shown in IDE, not enforced) #### +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion +csharp_style_prefer_primary_constructors = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion +csharp_style_expression_bodied_methods = when_on_single_line:suggestion +csharp_style_expression_bodied_properties = true:suggestion + +#### Naming #### dotnet_naming_rule.interfaces_begin_with_i.symbols = interfaces dotnet_naming_rule.interfaces_begin_with_i.style = i_prefix_pascal_case dotnet_naming_rule.interfaces_begin_with_i.severity = warning @@ -41,20 +143,69 @@ dotnet_naming_symbols.interfaces.applicable_kinds = interface dotnet_naming_style.i_prefix_pascal_case.required_prefix = I dotnet_naming_style.i_prefix_pascal_case.capitalization = pascal_case +dotnet_naming_rule.type_parameters_begin_with_t.symbols = type_parameters +dotnet_naming_rule.type_parameters_begin_with_t.style = t_prefix_pascal_case +dotnet_naming_rule.type_parameters_begin_with_t.severity = warning +dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter +dotnet_naming_style.t_prefix_pascal_case.required_prefix = T +dotnet_naming_style.t_prefix_pascal_case.capitalization = pascal_case + dotnet_naming_rule.types_and_members_are_pascal_case.symbols = types_and_members dotnet_naming_rule.types_and_members_are_pascal_case.style = pascal_case dotnet_naming_rule.types_and_members_are_pascal_case.severity = warning -dotnet_naming_symbols.types_and_members.applicable_kinds = class, struct, enum, delegate, property, method, event +dotnet_naming_symbols.types_and_members.applicable_kinds = namespace, class, struct, enum, delegate, property, method, event dotnet_naming_style.pascal_case.capitalization = pascal_case -[tests/**.cs] -# CA1707: xunit's Method_Scenario_Expectation naming uses underscores by convention. +dotnet_naming_rule.private_fields_are_underscore_camel.symbols = private_fields +dotnet_naming_rule.private_fields_are_underscore_camel.style = underscore_camel_case +dotnet_naming_rule.private_fields_are_underscore_camel.severity = warning +dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_naming_symbols.private_fields.applicable_accessibilities = private, private_protected +dotnet_naming_symbols.private_fields.required_modifiers = +dotnet_naming_style.underscore_camel_case.required_prefix = _ +dotnet_naming_style.underscore_camel_case.capitalization = camel_case + +dotnet_naming_rule.private_static_fields_are_s_camel.symbols = private_static_fields +dotnet_naming_rule.private_static_fields_are_s_camel.style = s_camel_case +dotnet_naming_rule.private_static_fields_are_s_camel.severity = warning +dotnet_naming_symbols.private_static_fields.applicable_kinds = field +dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private, private_protected +dotnet_naming_symbols.private_static_fields.required_modifiers = static +dotnet_naming_style.s_camel_case.required_prefix = s_ +dotnet_naming_style.s_camel_case.capitalization = camel_case + +dotnet_naming_rule.constants_are_pascal_case.symbols = constants +dotnet_naming_rule.constants_are_pascal_case.style = pascal_case +dotnet_naming_rule.constants_are_pascal_case.severity = warning +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const + +#### Analyzer adjustments (each one justified) #### +# CA1716: flags members named like VB keywords (e.g. ILog.Error). KofTwentyTwo is C#-only. +dotnet_diagnostic.CA1716.severity = none +# MA0004 (ConfigureAwait): app code runs on UI threads where ConfigureAwait(false) is +# wrong by default; libraries opt back in with a [*.cs] override in their own folder. +dotnet_diagnostic.MA0004.severity = none +# MA0049 (type name matches namespace): conflicts with the AppName/AppName.Core layout. +dotnet_diagnostic.MA0049.severity = none + +[**/{Generated,obj}/**.cs] +generated_code = true + +[{tests,test}/**.cs] +# xUnit's Method_Scenario_Expectation names use underscores by convention. dotnet_diagnostic.CA1707.severity = none -# CA1861: inline array arguments keep test data at the assertion site; each test runs once, -# so the "repeated allocation" concern does not apply. +# Inline arrays keep test data at the assertion; each test runs once. dotnet_diagnostic.CA1861.severity = none +# Test projects are not documented API. +dotnet_diagnostic.CS1591.severity = none +# MA0048 (one type per file): a test file groups the test classes and fakes of one feature. +dotnet_diagnostic.MA0048.severity = none [samples/**.cs] # CA1822: XAML event handlers and x:Bind targets must be instance members; the XAML # compiler generates instance calls (this.Handler) for them. dotnet_diagnostic.CA1822.severity = none +# IDE0060: XAML event handlers must keep the (sender, e) signature the XAML compiler wires +# up, even when a handler uses neither; `dotnet format` cannot see that wiring. +dotnet_diagnostic.IDE0060.severity = none diff --git a/.gitattributes b/.gitattributes index b8c94f8..4018296 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,6 @@ -# Text files are stored LF and checked out CRLF on every machine, matching -# .editorconfig (end_of_line = crlf) so the dotnet format gate behaves the same -# at developers' desks and on CI runners regardless of their git config. -* text=auto eol=crlf +# Text is stored and checked out as LF on every OS (K22-CODE-07, K22-REPO-03). +* text=auto eol=lf +*.png binary +*.ico binary +*.cmd text eol=crlf +*.bat text eol=crlf diff --git a/Directory.Build.props b/Directory.Build.props index 850b033..25b5fe8 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,45 +1,72 @@ - - - true - latest-recommended - true - true - enable - enable - latest - false - + + + enable + enable + latest + false - - - 0.1.0 - dev - + + true + true + latest-recommended + true + + true - - - James Maes - Copyright (c) 2026 James Maes - MIT - https://github.com/KofTwentyTwo/AppKit - https://github.com/KofTwentyTwo/AppKit - git - windows;desktop;winui;wpf;velopack - true - snupkg - true - + + true + true + true + true + snupkg - - - true - + + true + all + low + true + true + + + + + true + true + + + + + $(NoWarn);CS1591 + + + + + + + + + + 0.1.0 + dev + + + + + James Maes + Copyright (c) 2026 James Maes (KofTwentyTwo) + MIT + https://github.com/KofTwentyTwo/AppKit + https://github.com/KofTwentyTwo/AppKit + git + windows;desktop;winui;wpf;velopack + diff --git a/Directory.Packages.props b/Directory.Packages.props index ad80d0b..b870b05 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,24 +1,30 @@ - - - true - + + + true + true + - - - - - - + + + - - - - - - - + + + + + + + + + + + + + + diff --git a/samples/AppKit.Sample.WinUI/packages.lock.json b/samples/AppKit.Sample.WinUI/packages.lock.json new file mode 100644 index 0000000..17e4c8b --- /dev/null +++ b/samples/AppKit.Sample.WinUI/packages.lock.json @@ -0,0 +1,246 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows10.0.19041": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "Microsoft.Windows.SDK.BuildTools": { + "type": "Direct", + "requested": "[10.0.28000.2705, )", + "resolved": "10.0.28000.2705", + "contentHash": "TZQ96xtu7+fyFsyJCgj6Hazru0H8G1kiE1CeZLGpsqT4xKQmkxWu9yRuxYLeHJECjqEHN7duZUTcdbt8zlQ8OQ==" + }, + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[2.5.1, )", + "resolved": "2.5.1", + "contentHash": "WgKPzT1H2s17azODD1jNZje69z1hGz8VSh3bIylTtXHVg7hLyrn8Y+rswFqF41UX8ea7ELeoyqN80zZ6EHwCFA==", + "dependencies": { + "Microsoft.WindowsAppSDK.AI": "2.5.5", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.DWrite": "2.1.0", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.9", + "Microsoft.WindowsAppSDK.ML": "2.1.94", + "Microsoft.WindowsAppSDK.Runtime": "[2.5.1]", + "Microsoft.WindowsAppSDK.Search": "2.5.5", + "Microsoft.WindowsAppSDK.Widgets": "2.0.5", + "Microsoft.WindowsAppSDK.WinUI": "2.3.9" + } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.3719.77", + "contentHash": "t+ucyKw5NTwMjsUrDF6R9Lk40lpcKQD1/HgyGFxl49tdA4h9dKlsj6FYGEmDRpFNfnTpENuTypMcdbrlkqBdDA==" + }, + "Microsoft.Windows.AI.MachineLearning": { + "type": "Transitive", + "resolved": "2.1.74", + "contentHash": "/Z1yAQ0J53eD1RrOl5anTDS0UQOgneERY//hLljwGcWeUX9ynCvOl5qUxAsfWvwsZZGcvV4WKjAvnAtA6N5i+w==", + "dependencies": { + "System.Numerics.Tensors": "9.0.0" + } + }, + "Microsoft.Windows.SDK.BuildTools.MSIX": { + "type": "Transitive", + "resolved": "1.7.251221100", + "contentHash": "f4aIZJ0NUth2403oxrpR+9rxVzZVI6dabqB21u8ncnk8eJAKCs9m77E4iYAnvP1YwrRe4axz3f8+yUcttNSfEA==" + }, + "Microsoft.WindowsAppSDK.AI": { + "type": "Transitive", + "resolved": "2.5.5", + "contentHash": "f6XA05BsTAmDDsWGiFQdcAujNlbET5QbqxhBo7iHPJJix+RJajXKv1XlO19M78GtEpi2AYGEv08dPxER8ESYAw==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12" + } + }, + "Microsoft.WindowsAppSDK.Base": { + "type": "Transitive", + "resolved": "2.0.4", + "contentHash": "QXSy2llX2/Bx9dYWGUEsb10F40q94ZiDnPMzqa2/qRmTG4y9EXxGp6uHITb7c0b4FCa+6KFBlgh6D53M0QEMEg==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.26100.4654", + "Microsoft.Windows.SDK.BuildTools.MSIX": "1.7.251221100" + } + }, + "Microsoft.WindowsAppSDK.DWrite": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "dgix7NSeo7Z8SZPyrsOqYm/6OUvBveHCiVyorYecmtDYoZW26dJ6/i9yveIxgWvmFpgfKXPeIuQBCvhbetHiYg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.3" + } + }, + "Microsoft.WindowsAppSDK.Foundation": { + "type": "Transitive", + "resolved": "2.3.12", + "contentHash": "UflrNbXoZmHPt8lLGDk4gQ+yoGfQlCHd3TVTy7YwCMZ/aVGWAiLDqGCEjtWmNsI8ySy6imx3ZlenKfd2/VMPEg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + }, + "Microsoft.WindowsAppSDK.InteractiveExperiences": { + "type": "Transitive", + "resolved": "2.1.9", + "contentHash": "59nvb3pQYsBTTGrobeHkB4bkxASHtpaORJl7r6Zvg8PSIDCupEZTPKrIhnUknHDGfAtuBsnORjgvRi2WXGaRhA==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4" + } + }, + "Microsoft.WindowsAppSDK.ML": { + "type": "Transitive", + "resolved": "2.1.94", + "contentHash": "b21CWVubc3WqWNJ9+fy7n+s83LgwBpIzYrOuSUmHAqPB0pH+ttjgiknnDA/oF7wCbjiaUb4KDXVV7Mya3f18Ug==", + "dependencies": { + "Microsoft.Windows.AI.MachineLearning": "[2.1.74, 3.0.0)", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12" + } + }, + "Microsoft.WindowsAppSDK.Runtime": { + "type": "Transitive", + "resolved": "2.5.1", + "contentHash": "EDzGf6Tq9njNfNsTfqKdiwmSzFF/caHItuDa99UTQiOvLXwOjCL1k75/PMLSoHbCo1cSlHh/sSqZVssJ/Z0NzA==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4" + } + }, + "Microsoft.WindowsAppSDK.Search": { + "type": "Transitive", + "resolved": "2.5.5", + "contentHash": "uvYkXi9TB4rk/kgWn5XHEkMNMU+xhjY+S0QWsxEs8wYT/dXAjfHvW30+JVoW/THZ/9jIMinEn4gliCSVRFV0Sw==", + "dependencies": { + "Microsoft.WindowsAppSDK.AI": "[2.5.5]", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12" + } + }, + "Microsoft.WindowsAppSDK.Widgets": { + "type": "Transitive", + "resolved": "2.0.5", + "contentHash": "lRz+8+QU65gV8hRzLVE+GRsPKZ42lnzqkmsw96HzQd/DuFYfr4JYpUU7ZZ5YrkV2EfQe4BCmoRKAeZ3WwalMcg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.3" + } + }, + "Microsoft.WindowsAppSDK.WinUI": { + "type": "Transitive", + "resolved": "2.3.9", + "contentHash": "GiuYUQqMYD5lycT+X2AGX1rlbHU/zf8xoPeZNXZbJj4mZcSr4STsxeRUMxnTUQLAmmjjQaPrTIRjn78vbPhAvg==", + "dependencies": { + "Microsoft.Web.WebView2": "1.0.3719.77", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + }, + "System.Numerics.Tensors": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "hyJB4UlpAi19Xr9AXzu2NuagKC4lPfHObNMEAA0HmqFz2rX7wKgzeYzO/jM/eBHDhnUGFFEjk5cOoJaxqg5J4A==" + }, + "koftwentytwo.appkit": { + "type": "Project" + }, + "koftwentytwo.appkit.updates": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "Velopack": "[1.2.161, )" + } + }, + "koftwentytwo.appkit.winui": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "KofTwentyTwo.AppKit.Updates": "[0.1.0-dev, )", + "Microsoft.WindowsAppSDK": "[2.5.1, )" + } + }, + "Velopack": { + "type": "CentralTransitive", + "requested": "[1.2.161, )", + "resolved": "1.2.161", + "contentHash": "OpHNacIumnkhaaX3ZlQ/TCR4YPOJvud2/PAOoWb6o+mIrLwIVA275I5wAgt4q/1O2VrJeDwR1qFQyqzG4lUArg==" + } + }, + "net10.0-windows10.0.19041/win-arm64": { + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.3719.77", + "contentHash": "t+ucyKw5NTwMjsUrDF6R9Lk40lpcKQD1/HgyGFxl49tdA4h9dKlsj6FYGEmDRpFNfnTpENuTypMcdbrlkqBdDA==" + }, + "Microsoft.Windows.AI.MachineLearning": { + "type": "Transitive", + "resolved": "2.1.74", + "contentHash": "/Z1yAQ0J53eD1RrOl5anTDS0UQOgneERY//hLljwGcWeUX9ynCvOl5qUxAsfWvwsZZGcvV4WKjAvnAtA6N5i+w==", + "dependencies": { + "System.Numerics.Tensors": "9.0.0" + } + }, + "Microsoft.WindowsAppSDK.Foundation": { + "type": "Transitive", + "resolved": "2.3.12", + "contentHash": "UflrNbXoZmHPt8lLGDk4gQ+yoGfQlCHd3TVTy7YwCMZ/aVGWAiLDqGCEjtWmNsI8ySy6imx3ZlenKfd2/VMPEg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + } + }, + "net10.0-windows10.0.19041/win-x64": { + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.3719.77", + "contentHash": "t+ucyKw5NTwMjsUrDF6R9Lk40lpcKQD1/HgyGFxl49tdA4h9dKlsj6FYGEmDRpFNfnTpENuTypMcdbrlkqBdDA==" + }, + "Microsoft.Windows.AI.MachineLearning": { + "type": "Transitive", + "resolved": "2.1.74", + "contentHash": "/Z1yAQ0J53eD1RrOl5anTDS0UQOgneERY//hLljwGcWeUX9ynCvOl5qUxAsfWvwsZZGcvV4WKjAvnAtA6N5i+w==", + "dependencies": { + "System.Numerics.Tensors": "9.0.0" + } + }, + "Microsoft.WindowsAppSDK.Foundation": { + "type": "Transitive", + "resolved": "2.3.12", + "contentHash": "UflrNbXoZmHPt8lLGDk4gQ+yoGfQlCHd3TVTy7YwCMZ/aVGWAiLDqGCEjtWmNsI8ySy6imx3ZlenKfd2/VMPEg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + } + }, + "net10.0-windows10.0.19041/win-x86": { + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.3719.77", + "contentHash": "t+ucyKw5NTwMjsUrDF6R9Lk40lpcKQD1/HgyGFxl49tdA4h9dKlsj6FYGEmDRpFNfnTpENuTypMcdbrlkqBdDA==" + }, + "Microsoft.Windows.AI.MachineLearning": { + "type": "Transitive", + "resolved": "2.1.74", + "contentHash": "/Z1yAQ0J53eD1RrOl5anTDS0UQOgneERY//hLljwGcWeUX9ynCvOl5qUxAsfWvwsZZGcvV4WKjAvnAtA6N5i+w==", + "dependencies": { + "System.Numerics.Tensors": "9.0.0" + } + }, + "Microsoft.WindowsAppSDK.Foundation": { + "type": "Transitive", + "resolved": "2.3.12", + "contentHash": "UflrNbXoZmHPt8lLGDk4gQ+yoGfQlCHd3TVTy7YwCMZ/aVGWAiLDqGCEjtWmNsI8ySy6imx3ZlenKfd2/VMPEg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + } + } + } +} \ No newline at end of file diff --git a/samples/AppKit.Sample.Wpf/packages.lock.json b/samples/AppKit.Sample.Wpf/packages.lock.json new file mode 100644 index 0000000..eb15c3e --- /dev/null +++ b/samples/AppKit.Sample.Wpf/packages.lock.json @@ -0,0 +1,36 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows7.0": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "koftwentytwo.appkit": { + "type": "Project" + }, + "koftwentytwo.appkit.updates": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "Velopack": "[1.2.161, )" + } + }, + "koftwentytwo.appkit.wpf": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "KofTwentyTwo.AppKit.Updates": "[0.1.0-dev, )" + } + }, + "Velopack": { + "type": "CentralTransitive", + "requested": "[1.2.161, )", + "resolved": "1.2.161", + "contentHash": "OpHNacIumnkhaaX3ZlQ/TCR4YPOJvud2/PAOoWb6o+mIrLwIVA275I5wAgt4q/1O2VrJeDwR1qFQyqzG4lUArg==" + } + } + } +} \ No newline at end of file diff --git a/src/KofTwentyTwo.AppKit.Updates/packages.lock.json b/src/KofTwentyTwo.AppKit.Updates/packages.lock.json new file mode 100644 index 0000000..b926b1e --- /dev/null +++ b/src/KofTwentyTwo.AppKit.Updates/packages.lock.json @@ -0,0 +1,22 @@ +{ + "version": 2, + "dependencies": { + "net10.0": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "Velopack": { + "type": "Direct", + "requested": "[1.2.161, )", + "resolved": "1.2.161", + "contentHash": "OpHNacIumnkhaaX3ZlQ/TCR4YPOJvud2/PAOoWb6o+mIrLwIVA275I5wAgt4q/1O2VrJeDwR1qFQyqzG4lUArg==" + }, + "koftwentytwo.appkit": { + "type": "Project" + } + } + } +} \ No newline at end of file diff --git a/src/KofTwentyTwo.AppKit.WinUI/packages.lock.json b/src/KofTwentyTwo.AppKit.WinUI/packages.lock.json new file mode 100644 index 0000000..f65d9e7 --- /dev/null +++ b/src/KofTwentyTwo.AppKit.WinUI/packages.lock.json @@ -0,0 +1,166 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows10.0.19041": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "Microsoft.Windows.SDK.BuildTools": { + "type": "Direct", + "requested": "[10.0.28000.2705, )", + "resolved": "10.0.28000.2705", + "contentHash": "TZQ96xtu7+fyFsyJCgj6Hazru0H8G1kiE1CeZLGpsqT4xKQmkxWu9yRuxYLeHJECjqEHN7duZUTcdbt8zlQ8OQ==" + }, + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[2.5.1, )", + "resolved": "2.5.1", + "contentHash": "WgKPzT1H2s17azODD1jNZje69z1hGz8VSh3bIylTtXHVg7hLyrn8Y+rswFqF41UX8ea7ELeoyqN80zZ6EHwCFA==", + "dependencies": { + "Microsoft.WindowsAppSDK.AI": "2.5.5", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.DWrite": "2.1.0", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.9", + "Microsoft.WindowsAppSDK.ML": "2.1.94", + "Microsoft.WindowsAppSDK.Runtime": "[2.5.1]", + "Microsoft.WindowsAppSDK.Search": "2.5.5", + "Microsoft.WindowsAppSDK.Widgets": "2.0.5", + "Microsoft.WindowsAppSDK.WinUI": "2.3.9" + } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.3719.77", + "contentHash": "t+ucyKw5NTwMjsUrDF6R9Lk40lpcKQD1/HgyGFxl49tdA4h9dKlsj6FYGEmDRpFNfnTpENuTypMcdbrlkqBdDA==" + }, + "Microsoft.Windows.AI.MachineLearning": { + "type": "Transitive", + "resolved": "2.1.74", + "contentHash": "/Z1yAQ0J53eD1RrOl5anTDS0UQOgneERY//hLljwGcWeUX9ynCvOl5qUxAsfWvwsZZGcvV4WKjAvnAtA6N5i+w==", + "dependencies": { + "System.Numerics.Tensors": "9.0.0" + } + }, + "Microsoft.Windows.SDK.BuildTools.MSIX": { + "type": "Transitive", + "resolved": "1.7.251221100", + "contentHash": "f4aIZJ0NUth2403oxrpR+9rxVzZVI6dabqB21u8ncnk8eJAKCs9m77E4iYAnvP1YwrRe4axz3f8+yUcttNSfEA==" + }, + "Microsoft.WindowsAppSDK.AI": { + "type": "Transitive", + "resolved": "2.5.5", + "contentHash": "f6XA05BsTAmDDsWGiFQdcAujNlbET5QbqxhBo7iHPJJix+RJajXKv1XlO19M78GtEpi2AYGEv08dPxER8ESYAw==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12" + } + }, + "Microsoft.WindowsAppSDK.Base": { + "type": "Transitive", + "resolved": "2.0.4", + "contentHash": "QXSy2llX2/Bx9dYWGUEsb10F40q94ZiDnPMzqa2/qRmTG4y9EXxGp6uHITb7c0b4FCa+6KFBlgh6D53M0QEMEg==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.26100.4654", + "Microsoft.Windows.SDK.BuildTools.MSIX": "1.7.251221100" + } + }, + "Microsoft.WindowsAppSDK.DWrite": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "dgix7NSeo7Z8SZPyrsOqYm/6OUvBveHCiVyorYecmtDYoZW26dJ6/i9yveIxgWvmFpgfKXPeIuQBCvhbetHiYg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.3" + } + }, + "Microsoft.WindowsAppSDK.Foundation": { + "type": "Transitive", + "resolved": "2.3.12", + "contentHash": "UflrNbXoZmHPt8lLGDk4gQ+yoGfQlCHd3TVTy7YwCMZ/aVGWAiLDqGCEjtWmNsI8ySy6imx3ZlenKfd2/VMPEg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + }, + "Microsoft.WindowsAppSDK.InteractiveExperiences": { + "type": "Transitive", + "resolved": "2.1.9", + "contentHash": "59nvb3pQYsBTTGrobeHkB4bkxASHtpaORJl7r6Zvg8PSIDCupEZTPKrIhnUknHDGfAtuBsnORjgvRi2WXGaRhA==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4" + } + }, + "Microsoft.WindowsAppSDK.ML": { + "type": "Transitive", + "resolved": "2.1.94", + "contentHash": "b21CWVubc3WqWNJ9+fy7n+s83LgwBpIzYrOuSUmHAqPB0pH+ttjgiknnDA/oF7wCbjiaUb4KDXVV7Mya3f18Ug==", + "dependencies": { + "Microsoft.Windows.AI.MachineLearning": "[2.1.74, 3.0.0)", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12" + } + }, + "Microsoft.WindowsAppSDK.Runtime": { + "type": "Transitive", + "resolved": "2.5.1", + "contentHash": "EDzGf6Tq9njNfNsTfqKdiwmSzFF/caHItuDa99UTQiOvLXwOjCL1k75/PMLSoHbCo1cSlHh/sSqZVssJ/Z0NzA==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.4" + } + }, + "Microsoft.WindowsAppSDK.Search": { + "type": "Transitive", + "resolved": "2.5.5", + "contentHash": "uvYkXi9TB4rk/kgWn5XHEkMNMU+xhjY+S0QWsxEs8wYT/dXAjfHvW30+JVoW/THZ/9jIMinEn4gliCSVRFV0Sw==", + "dependencies": { + "Microsoft.WindowsAppSDK.AI": "[2.5.5]", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12" + } + }, + "Microsoft.WindowsAppSDK.Widgets": { + "type": "Transitive", + "resolved": "2.0.5", + "contentHash": "lRz+8+QU65gV8hRzLVE+GRsPKZ42lnzqkmsw96HzQd/DuFYfr4JYpUU7ZZ5YrkV2EfQe4BCmoRKAeZ3WwalMcg==", + "dependencies": { + "Microsoft.WindowsAppSDK.Base": "2.0.3" + } + }, + "Microsoft.WindowsAppSDK.WinUI": { + "type": "Transitive", + "resolved": "2.3.9", + "contentHash": "GiuYUQqMYD5lycT+X2AGX1rlbHU/zf8xoPeZNXZbJj4mZcSr4STsxeRUMxnTUQLAmmjjQaPrTIRjn78vbPhAvg==", + "dependencies": { + "Microsoft.Web.WebView2": "1.0.3719.77", + "Microsoft.WindowsAppSDK.Base": "2.0.4", + "Microsoft.WindowsAppSDK.Foundation": "2.3.12", + "Microsoft.WindowsAppSDK.InteractiveExperiences": "2.1.8" + } + }, + "System.Numerics.Tensors": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "hyJB4UlpAi19Xr9AXzu2NuagKC4lPfHObNMEAA0HmqFz2rX7wKgzeYzO/jM/eBHDhnUGFFEjk5cOoJaxqg5J4A==" + }, + "koftwentytwo.appkit": { + "type": "Project" + }, + "koftwentytwo.appkit.updates": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "Velopack": "[1.2.161, )" + } + }, + "Velopack": { + "type": "CentralTransitive", + "requested": "[1.2.161, )", + "resolved": "1.2.161", + "contentHash": "OpHNacIumnkhaaX3ZlQ/TCR4YPOJvud2/PAOoWb6o+mIrLwIVA275I5wAgt4q/1O2VrJeDwR1qFQyqzG4lUArg==" + } + } + } +} \ No newline at end of file diff --git a/src/KofTwentyTwo.AppKit.Wpf/packages.lock.json b/src/KofTwentyTwo.AppKit.Wpf/packages.lock.json new file mode 100644 index 0000000..60c076b --- /dev/null +++ b/src/KofTwentyTwo.AppKit.Wpf/packages.lock.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows7.0": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "koftwentytwo.appkit": { + "type": "Project" + }, + "koftwentytwo.appkit.updates": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "Velopack": "[1.2.161, )" + } + }, + "Velopack": { + "type": "CentralTransitive", + "requested": "[1.2.161, )", + "resolved": "1.2.161", + "contentHash": "OpHNacIumnkhaaX3ZlQ/TCR4YPOJvud2/PAOoWb6o+mIrLwIVA275I5wAgt4q/1O2VrJeDwR1qFQyqzG4lUArg==" + } + } + } +} \ No newline at end of file diff --git a/src/KofTwentyTwo.AppKit/packages.lock.json b/src/KofTwentyTwo.AppKit/packages.lock.json new file mode 100644 index 0000000..d635df9 --- /dev/null +++ b/src/KofTwentyTwo.AppKit/packages.lock.json @@ -0,0 +1,13 @@ +{ + "version": 2, + "dependencies": { + "net10.0": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + } + } + } +} \ No newline at end of file diff --git a/tests/KofTwentyTwo.AppKit.Tests/packages.lock.json b/tests/KofTwentyTwo.AppKit.Tests/packages.lock.json new file mode 100644 index 0000000..de79af2 --- /dev/null +++ b/tests/KofTwentyTwo.AppKit.Tests/packages.lock.json @@ -0,0 +1,120 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows7.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[10.1.0, )", + "resolved": "10.1.0", + "contentHash": "SlYCIHnBYxINSUpR75SiM5JEmnx11pqT+Ac/C/fUqTTA0dLPl9eYzmFXKKuxmQhL3ZdTQl4PBD3YdAxAauaKLQ==" + }, + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[18.10.1, )", + "resolved": "18.10.1", + "contentHash": "SxCFvJE/2ltUQgCgv6+Ixagohw4sZc9hM7Wid2foaNM7paBscktoHLoRDz91fW8wbHG87Rg9Ku59/8PXumqUrA==", + "dependencies": { + "Microsoft.CodeCoverage": "18.10.1", + "Microsoft.TestPlatform.TestHost": "18.10.1" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.9.3, )", + "resolved": "2.9.3", + "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", + "dependencies": { + "xunit.analyzers": "1.18.0", + "xunit.assert": "2.9.3", + "xunit.core": "[2.9.3]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[4.0.0, )", + "resolved": "4.0.0", + "contentHash": "kzLFyBYUnoidpGOXvpNOfIo8C92gVgVR6X8ncHwhcrDYugiOut5rrhDkr0L3cWHd7J2pKXf6LgaeXoBBDlx1ag==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "18.10.1", + "contentHash": "tV7tCyp/t+DuwQugLkCeUN7NBFFB4fEGRPr0gkMQ2nQgAvQQjmGlZZi1dsLzbyoe/A0mbnKybmkIh8qhT9p4Zw==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "18.10.1", + "contentHash": "o+PuLDRVp1iwiVAPBADZItXgm9Ck23XtPhE4kZtZVi0uYnMiiz1Dx9Cjh75kJ+ijfqnORL3VOTOaQVKi0f/ixg==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "18.10.1", + "contentHash": "KYz2omqkoz9E2mWa4fdgT+Ycie1wi5968EmyJlusjlp87RxxtA2FvDm8tcBEYIDzLnkWGnsKjE4d13Z7/rxkQA==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.10.1" + } + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.18.0", + "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]", + "xunit.extensibility.execution": "[2.9.3]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", + "dependencies": { + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]" + } + }, + "koftwentytwo.appkit": { + "type": "Project" + }, + "koftwentytwo.appkit.updates": { + "type": "Project", + "dependencies": { + "KofTwentyTwo.AppKit": "[0.1.0-dev, )", + "Velopack": "[1.2.161, )" + } + }, + "Velopack": { + "type": "CentralTransitive", + "requested": "[1.2.161, )", + "resolved": "1.2.161", + "contentHash": "OpHNacIumnkhaaX3ZlQ/TCR4YPOJvud2/PAOoWb6o+mIrLwIVA275I5wAgt4q/1O2VrJeDwR1qFQyqzG4lUArg==" + } + } + } +} \ No newline at end of file diff --git a/tests/KofTwentyTwo.AppKit.UiTests/packages.lock.json b/tests/KofTwentyTwo.AppKit.UiTests/packages.lock.json new file mode 100644 index 0000000..547c595 --- /dev/null +++ b/tests/KofTwentyTwo.AppKit.UiTests/packages.lock.json @@ -0,0 +1,190 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows7.0": { + "FlaUI.UIA3": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "s1Yy1RsRJ0OXvmtxQlNJd0cu4sfvN3PFFu6skBGK8VlwPl/b38E0V5kCbo2gvkuhRIu4Itfxjdo7DUMF7qJw4Q==", + "dependencies": { + "FlaUI.Core": "5.0.0", + "Interop.UIAutomationClient": "10.19041.0" + } + }, + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[18.10.1, )", + "resolved": "18.10.1", + "contentHash": "SxCFvJE/2ltUQgCgv6+Ixagohw4sZc9hM7Wid2foaNM7paBscktoHLoRDz91fW8wbHG87Rg9Ku59/8PXumqUrA==", + "dependencies": { + "Microsoft.CodeCoverage": "18.10.1", + "Microsoft.TestPlatform.TestHost": "18.10.1" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.9.3, )", + "resolved": "2.9.3", + "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", + "dependencies": { + "xunit.analyzers": "1.18.0", + "xunit.assert": "2.9.3", + "xunit.core": "[2.9.3]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[4.0.0, )", + "resolved": "4.0.0", + "contentHash": "kzLFyBYUnoidpGOXvpNOfIo8C92gVgVR6X8ncHwhcrDYugiOut5rrhDkr0L3cWHd7J2pKXf6LgaeXoBBDlx1ag==" + }, + "FlaUI.Core": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VWWYqwjsYkii2BrUsz5+bpXEp27NherKhLt19hTxHwJP4KrfyZoeo1FdBov4ZTh655wZAKDGIjR7NJLDesuzeg==", + "dependencies": { + "System.Diagnostics.PerformanceCounter": "8.0.1", + "System.Drawing.Common": "8.0.10", + "System.Management": "8.0.0", + "System.Security.Permissions": "8.0.0" + } + }, + "Interop.UIAutomationClient": { + "type": "Transitive", + "resolved": "10.19041.0", + "contentHash": "Me5vKNZ1JSg6txTsPQXaWx7fVNh+fmcUPPwtDKJtqvbMM0N8aoa/l/QPolkJIRnasCabCNt4v2zG4p1Q9HU98A==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "18.10.1", + "contentHash": "tV7tCyp/t+DuwQugLkCeUN7NBFFB4fEGRPr0gkMQ2nQgAvQQjmGlZZi1dsLzbyoe/A0mbnKybmkIh8qhT9p4Zw==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "18.10.1", + "contentHash": "o+PuLDRVp1iwiVAPBADZItXgm9Ck23XtPhE4kZtZVi0uYnMiiz1Dx9Cjh75kJ+ijfqnORL3VOTOaQVKi0f/ixg==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "18.10.1", + "contentHash": "KYz2omqkoz9E2mWa4fdgT+Ycie1wi5968EmyJlusjlp87RxxtA2FvDm8tcBEYIDzLnkWGnsKjE4d13Z7/rxkQA==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.10.1" + } + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "9opKRyOKMCi2xJ7Bj7kxtZ1r9vbzosMvRrdEhVhDz8j8MoBGgB+WmC94yH839NPH+BclAjtQ/pyagvi/8gDLkw==" + }, + "System.CodeDom": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "gPYFPDyohW2gXNhdQRSjtmeS6FymL2crg4Sral1wtvEJ7DUqFCDWDVbbLobASbzxfic8U1hQEdC7hmg9LHncMw==", + "dependencies": { + "System.Diagnostics.EventLog": "8.0.1", + "System.Security.Cryptography.ProtectedData": "8.0.0" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==" + }, + "System.Diagnostics.PerformanceCounter": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "9RfEDiEjlUADeThs8IPdDVTXSnPRSqjfgTQJALpmGFPKC0k2mbdufOXnb/9JZ4I0TkmxOfy3VTJxrHOJSs8cXg==", + "dependencies": { + "System.Configuration.ConfigurationManager": "8.0.1" + } + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "MdajRp3P+FOlThgY6FBjAqnmLiVl5t2yWEC/2AsDMqx1zYbJG3G5TnscFBQ4obqcaGqvN5UnhQHSFaJFG2HftQ==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "8.0.0" + } + }, + "System.Management": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", + "dependencies": { + "System.CodeDom": "8.0.0" + } + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "v/BBylw7XevuAsHXoX9dDUUfmBIcUf7Lkz8K3ZXIKz3YRKpw8YftpSir4n4e/jDTKFoaK37AsC3xnk+GNFI1Ow==", + "dependencies": { + "System.Windows.Extensions": "8.0.0" + } + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "Obg3a90MkOw9mYKxrardLpY2u0axDMrSmy4JCdq2cYbelM2cUwmUir5Bomvd1yxmPL9h5LVHU1tuKBZpUjfASg==" + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.18.0", + "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]", + "xunit.extensibility.execution": "[2.9.3]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", + "dependencies": { + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]" + } + } + } + } +} \ No newline at end of file diff --git a/tools/BrandTool/packages.lock.json b/tools/BrandTool/packages.lock.json new file mode 100644 index 0000000..655d5df --- /dev/null +++ b/tools/BrandTool/packages.lock.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "dependencies": { + "net10.0-windows7.0": { + "Meziantou.Analyzer": { + "type": "Direct", + "requested": "[3.0.296, )", + "resolved": "3.0.296", + "contentHash": "1Yp/6OK/Ev66hE2YLe9UvIgtJrKOX/xvoGDe0UbdtuG2ZxUoDoyONdEn+HWCDuy02Mu8SmglHEd/9SGPrM1qYg==" + }, + "koftwentytwo.appkit": { + "type": "Project" + } + } + } +} \ No newline at end of file -- 2.54.0 From 9d4a21cb9959ad750934a77e86c129b9c350ea26 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 9 Oct 2026 10:23:38 -0500 Subject: [PATCH 03/11] style: apply the Kingsrook layout and LF line endings Formatting only, no behavior change. Produced mechanically: - dotnet format on the solution (3-space indent, Allman braces, `if(`, usings, `var`, System.Threading.Lock); the linked samples/Shared file is formatted through one project, because formatting it through both writes conflict markers into it. - Kingsrook blank lines the .NET formatter cannot express (K22-CODE-06, K22-CODE-CS-03): three blank lines around methods, constructors, types, and multi-line properties; at most one blank line inside code blocks and between single-line members; two after the using list. Applied with a Roslyn rewriter equivalent to Rider's resharper_blank_lines_* keys. - XML-family files (.csproj, .props, .slnx, .xaml, manifests, .runsettings) re-indented to three spaces. - git add --renormalize: every text file is stored with LF. Listed in .git-blame-ignore-revs so git blame skips it. Co-Authored-By: Claude Opus 5.5 Signed-off-by: James Maes --- AppKit.slnx | 52 +- coverage.runsettings | 28 +- samples/AppKit.Sample.WinUI/App.xaml | 20 +- samples/AppKit.Sample.WinUI/App.xaml.cs | 37 +- .../AppKit.Sample.WinUI.csproj | 62 +-- samples/AppKit.Sample.WinUI/MainWindow.xaml | 80 +-- .../AppKit.Sample.WinUI/MainWindow.xaml.cs | 168 ++++--- samples/AppKit.Sample.WinUI/Program.cs | 25 +- samples/AppKit.Sample.WinUI/app.manifest | 24 +- .../AppKit.Sample.Wpf.csproj | 40 +- samples/AppKit.Sample.Wpf/MainWindow.xaml | 82 +-- samples/AppKit.Sample.Wpf/MainWindow.xaml.cs | 182 ++++--- samples/AppKit.Sample.Wpf/Program.cs | 27 +- samples/Shared/SampleApp.cs | 57 ++- .../IUpdateService.cs | 60 ++- .../KofTwentyTwo.AppKit.Updates.csproj | 38 +- .../UpdateCoordinator.cs | 225 +++++---- .../VelopackGithubBackend.cs | 61 ++- .../VelopackStartup.cs | 13 +- .../VelopackUpdateService.cs | 223 ++++---- src/KofTwentyTwo.AppKit.WinUI/AboutDialog.cs | 157 +++--- src/KofTwentyTwo.AppKit.WinUI/Brand.cs | 77 +-- src/KofTwentyTwo.AppKit.WinUI/DialogGuard.cs | 109 ++-- .../KofTwentyTwo.AppKit.WinUI.csproj | 54 +- src/KofTwentyTwo.AppKit.WinUI/LogWindow.cs | 217 ++++---- .../SplashOverlay.cs | 263 +++++----- src/KofTwentyTwo.AppKit.WinUI/WinUIShell.cs | 207 ++++---- src/KofTwentyTwo.AppKit.Wpf/AboutWindow.cs | 173 ++++--- src/KofTwentyTwo.AppKit.Wpf/Brand.cs | 95 ++-- .../KofTwentyTwo.AppKit.Wpf.csproj | 44 +- src/KofTwentyTwo.AppKit.Wpf/LogWindow.cs | 193 +++---- src/KofTwentyTwo.AppKit.Wpf/SplashOverlay.cs | 223 ++++---- src/KofTwentyTwo.AppKit.Wpf/WpfShell.cs | 159 +++--- src/KofTwentyTwo.AppKit/AppInfo.cs | 133 ++--- src/KofTwentyTwo.AppKit/AppPaths.cs | 66 +-- src/KofTwentyTwo.AppKit/ArgbColor.cs | 49 +- src/KofTwentyTwo.AppKit/BuildVersion.cs | 123 ++--- src/KofTwentyTwo.AppKit/Credits.cs | 72 +-- .../Interaction/IUserPrompter.cs | 16 +- .../KofTwentyTwo.AppKit.csproj | 26 +- .../Logging/FileActivityLog.cs | 199 ++++---- .../Logging/IActivityLog.cs | 70 +-- src/KofTwentyTwo.AppKit/Logging/LogTail.cs | 139 ++--- .../Secrets/CredentialManagerVault.cs | 287 ++++++----- .../Secrets/ISecretVault.cs | 24 +- .../Secrets/InMemorySecretVault.cs | 47 +- .../Settings/SettingsStore.cs | 159 +++--- .../Settings/ShellSettings.cs | 93 ++-- .../KofTwentyTwo.AppKit.Tests/CreditsTests.cs | 60 +-- tests/KofTwentyTwo.AppKit.Tests/Fakes.cs | 181 ++++--- .../IdentityTests.cs | 443 ++++++++-------- .../KofTwentyTwo.AppKit.Tests.csproj | 34 +- .../KofTwentyTwo.AppKit.Tests/LoggingTests.cs | 381 +++++++------- .../KofTwentyTwo.AppKit.Tests/SecretsTests.cs | 161 +++--- .../SettingsTests.cs | 317 ++++++------ .../KofTwentyTwo.AppKit.Tests/UpdatesTests.cs | 419 ++++++++------- .../KofTwentyTwo.AppKit.UiTests/AppSession.cs | 476 ++++++++++-------- .../KofTwentyTwo.AppKit.UiTests.csproj | 32 +- .../SampleAppTests.cs | 149 +++--- tools/BrandTool/BrandTool.csproj | 22 +- tools/BrandTool/Program.cs | 187 +++---- 61 files changed, 4261 insertions(+), 3579 deletions(-) diff --git a/AppKit.slnx b/AppKit.slnx index 0dd3167..1dc4fe6 100644 --- a/AppKit.slnx +++ b/AppKit.slnx @@ -1,28 +1,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage.runsettings b/coverage.runsettings index 15cd098..de28395 100644 --- a/coverage.runsettings +++ b/coverage.runsettings @@ -1,21 +1,21 @@ - - - - - cobertura - [KofTwentyTwo.AppKit]*,[KofTwentyTwo.AppKit.Updates]* - GeneratedCodeAttribute,ExcludeFromCodeCoverageAttribute - - - - + + + + + cobertura + [KofTwentyTwo.AppKit]*,[KofTwentyTwo.AppKit.Updates]* + GeneratedCodeAttribute,ExcludeFromCodeCoverageAttribute + + + + diff --git a/samples/AppKit.Sample.WinUI/App.xaml b/samples/AppKit.Sample.WinUI/App.xaml index 60cc6eb..8ca222b 100644 --- a/samples/AppKit.Sample.WinUI/App.xaml +++ b/samples/AppKit.Sample.WinUI/App.xaml @@ -1,13 +1,13 @@ - - - - - - - + x:Class="AppKit.Sample.WinUI.App" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + + + + + + + diff --git a/samples/AppKit.Sample.WinUI/App.xaml.cs b/samples/AppKit.Sample.WinUI/App.xaml.cs index f7280d9..62fa923 100644 --- a/samples/AppKit.Sample.WinUI/App.xaml.cs +++ b/samples/AppKit.Sample.WinUI/App.xaml.cs @@ -2,27 +2,32 @@ using KofTwentyTwo.AppKit.Logging; using KofTwentyTwo.AppKit.WinUI; using Microsoft.UI.Xaml; + namespace AppKit.Sample.WinUI; public partial class App : Application { - private Window? _window; + private Window? _window; - /// The app-wide activity log. - internal static IActivityLog Log { get; } = FileActivityLog.ForApp(SampleApp.Info, SampleApp.Paths); + /// The app-wide activity log. + internal static IActivityLog Log { get; } = FileActivityLog.ForApp(SampleApp.Info, SampleApp.Paths); - public App() - { - InitializeComponent(); - WinUIShell.InstallCrashNet(this, () => Log); - // Only settable here, before any window exists. - WinUIShell.ApplyTheme(this, SampleApp.SettingsStore.Load().ThemeKind); - } - protected override void OnLaunched(LaunchActivatedEventArgs args) - { - Log.Info($"{SampleApp.Info.DisplayName} started."); - _window = new MainWindow(); - _window.Activate(); - } + + public App() + { + InitializeComponent(); + WinUIShell.InstallCrashNet(this, () => Log); + // Only settable here, before any window exists. + WinUIShell.ApplyTheme(this, SampleApp.SettingsStore.Load().ThemeKind); + } + + + + protected override void OnLaunched(LaunchActivatedEventArgs args) + { + Log.Info($"{SampleApp.Info.DisplayName} started."); + _window = new MainWindow(); + _window.Activate(); + } } diff --git a/samples/AppKit.Sample.WinUI/AppKit.Sample.WinUI.csproj b/samples/AppKit.Sample.WinUI/AppKit.Sample.WinUI.csproj index c8025e0..c485ea7 100644 --- a/samples/AppKit.Sample.WinUI/AppKit.Sample.WinUI.csproj +++ b/samples/AppKit.Sample.WinUI/AppKit.Sample.WinUI.csproj @@ -1,38 +1,38 @@ - - - WinExe - net10.0-windows10.0.19041.0 - 10.0.17763.0 - AppKit.Sample.WinUI - AppKitSample.WinUI - app.manifest - ..\Shared\Brand\app.ico - x86;x64;ARM64 - win-x86;win-x64;win-arm64 - true - None - true - - $(DefineConstants);DISABLE_XAML_GENERATED_MAIN - + + + WinExe + net10.0-windows10.0.19041.0 + 10.0.17763.0 + AppKit.Sample.WinUI + AppKitSample.WinUI + app.manifest + ..\Shared\Brand\app.ico + x86;x64;ARM64 + win-x86;win-x64;win-arm64 + true + None + true + + $(DefineConstants);DISABLE_XAML_GENERATED_MAIN + - - - - - - + + + + + + - - - - + + + + - - - + + + diff --git a/samples/AppKit.Sample.WinUI/MainWindow.xaml b/samples/AppKit.Sample.WinUI/MainWindow.xaml index d5688d8..efe302b 100644 --- a/samples/AppKit.Sample.WinUI/MainWindow.xaml +++ b/samples/AppKit.Sample.WinUI/MainWindow.xaml @@ -1,47 +1,47 @@ + x:Class="AppKit.Sample.WinUI.MainWindow" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - - - + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - -