Prechádzať zdrojové kódy

Merge pull request #983 from PixiEditor/pixiauth

Pixiauth
Krzysztof Krysiński 1 týždeň pred
rodič
commit
e303611ac8
100 zmenil súbory, kde vykonal 2135 pridanie a 1491 odobranie
  1. 0 21
      Third Party Licenses/AsyncImageLoader.Avalonia_3.2.1.txt
  2. 0 38
      Third Party Licenses/Avalonia.Labs.Lottie_11.0.10.1.txt
  3. 0 38
      Third Party Licenses/Avalonia.Xaml.Behaviors_11.0.5.txt
  4. 0 9
      Third Party Licenses/AvaloniaUI.txt
  5. 0 38
      Third Party Licenses/ByteSize_2.1.1.txt
  6. 0 21
      Third Party Licenses/CLSEncoderDecoder_1.0.0.txt
  7. 0 38
      Third Party Licenses/CommunityToolkit.HighPerformance_8.2.2.txt
  8. 0 38
      Third Party Licenses/CommunityToolkit.Mvvm_8.2.2.txt
  9. 0 38
      Third Party Licenses/DiscordRichPresence_1.2.1.24.txt
  10. 0 38
      Third Party Licenses/FFMpegCore_5.1.0.txt
  11. 0 38
      Third Party Licenses/Hardware.Info_11.0.0.txt
  12. 0 38
      Third Party Licenses/MessageBox.Avalonia_2.3.1-prev7.0.txt
  13. 0 38
      Third Party Licenses/Microsoft.Build.Utilities.Core_17.8.3.txt
  14. 0 38
      Third Party Licenses/Microsoft.Build.Utilities.Core_17.9.5.txt
  15. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.Analyzers_3.3.4.txt
  16. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.CSharp.Features_4.9.2.txt
  17. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.CSharp.Workspaces_4.8.0.txt
  18. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.CSharp_4.2.0.txt
  19. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.CSharp_4.3.1.txt
  20. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.CSharp_4.9.2.txt
  21. 0 38
      Third Party Licenses/Microsoft.CodeAnalysis.Common_4.9.2.txt
  22. 0 38
      Third Party Licenses/Microsoft.Extensions.DependencyInjection.Abstractions_7.0.0.txt
  23. 0 38
      Third Party Licenses/Microsoft.Extensions.DependencyInjection_7.0.0.txt
  24. 0 38
      Third Party Licenses/Mono.Cecil_0.11.5.txt
  25. 0 38
      Third Party Licenses/Newtonsoft.Json_13.0.1.txt
  26. 0 38
      Third Party Licenses/Newtonsoft.Json_13.0.3.txt
  27. 0 7
      Third Party Licenses/OneOf_3.0.223.txt
  28. 0 21
      Third Party Licenses/PixiEditor.ColorPicker.AvaloniaUI_1.0.5.txt
  29. 0 21
      Third Party Licenses/PixiEditor.ColorPicker.Models_1.0.5.txt
  30. 0 8
      Third Party Licenses/SkiaSharp_2.88.8.txt
  31. 0 38
      Third Party Licenses/Steamworks.NET_20.2.0.txt
  32. 0 38
      Third Party Licenses/System.Reactive_6.0.0.txt
  33. 1214 0
      Third Party Licenses/ThirdPartyLicenses.txt
  34. 0 5
      Third Party Licenses/Wasmtime_16.0.0.txt
  35. 0 38
      Third Party Licenses/WriteableBitmapEx_1.6.8.txt
  36. 165 0
      Third Party Licenses/ffmpeg-linux.txt
  37. 0 218
      Third Party Licenses/protobuf-net_3.2.30.txt
  38. 2 0
      gen_third_party_licenses.sh
  39. 6 0
      samples/PixiEditorExtensionSamples.sln
  40. 8 0
      samples/Sample10_VisualTree/Program.cs
  41. 45 0
      samples/Sample10_VisualTree/Sample10_VisualTree.csproj
  42. 44 0
      samples/Sample10_VisualTree/VisualTreeSampleExtension.cs
  43. 39 0
      samples/Sample10_VisualTree/extension.json
  44. 8 3
      samples/Sample5_Resources/ResourcesSampleExtension.cs
  45. 2 1
      samples/Sample5_Resources/Sample5_Resources.csproj
  46. 11 0
      src/ChunkyImageLib/ColorEx.cs
  47. 1 1
      src/ChunkyImageLib/Operations/ReplaceColorOperation.cs
  48. 1 1
      src/ChunkyImageLibVis/ChunkyImageLibVis.csproj
  49. 1 1
      src/ColorPicker
  50. 8 3
      src/Directory.Build.props
  51. 1 1
      src/Drawie
  52. 1 1
      src/PixiEditor.AnimationRenderer.FFmpeg/PixiEditor.AnimationRenderer.FFmpeg.csproj
  53. 28 3
      src/PixiEditor.Api.CGlueMSBuild/CApiGenerator.cs
  54. 99 0
      src/PixiEditor.Api.CGlueMSBuild/EncryptResourcesTask.cs
  55. 11 2
      src/PixiEditor.Api.CGlueMSBuild/GenerateCGlueTask.cs
  56. 4 0
      src/PixiEditor.ChangeableDocument/ChangeInfos/Animation/DefaultEndFrame_ChangeInfo.cs
  57. 1 0
      src/PixiEditor.ChangeableDocument/Changeables/Animations/AnimationData.cs
  58. 4 1
      src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Matrix/TransformNode.cs
  59. 12 1
      src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/VectorLayerNode.cs
  60. 1 0
      src/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlyAnimationData.cs
  61. 5 0
      src/PixiEditor.ChangeableDocument/Changes/Animation/CreateCel_Change.cs
  62. 12 0
      src/PixiEditor.ChangeableDocument/Changes/Animation/KeyFrameLength_UpdateableChange.cs
  63. 28 12
      src/PixiEditor.ChangeableDocument/Changes/Animation/KeyFramesStartPos_UpdateableChange.cs
  64. 53 0
      src/PixiEditor.ChangeableDocument/Changes/Animation/SetDefaultEndFrame_Change.cs
  65. 1 1
      src/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillHelper.cs
  66. 7 1
      src/PixiEditor.ChangeableDocument/Changes/Drawing/TransformSelected_UpdateableChange.cs
  67. 1 1
      src/PixiEditor.ChangeableDocument/PixiEditor.ChangeableDocument.csproj
  68. 1 1
      src/PixiEditor.Extensions.CommonApi/.config/dotnet-tools.json
  69. 10 0
      src/PixiEditor.Extensions.CommonApi/FlyUI/LayoutElementIdGenerator.cs
  70. 2 0
      src/PixiEditor.Extensions.CommonApi/IO/IDocumentProvider.cs
  71. 3 1
      src/PixiEditor.Extensions.CommonApi/Palettes/FilteringSettings.Impl.cs
  72. 23 21
      src/PixiEditor.Extensions.CommonApi/PixiEditor.Extensions.CommonApi.csproj
  73. 10 0
      src/PixiEditor.Extensions.CommonApi/Ui/IVisualTreeProvider.cs
  74. 11 0
      src/PixiEditor.Extensions.CommonApi/User/IUserDataProvider.cs
  75. 6 1
      src/PixiEditor.Extensions.CommonApi/Windowing/IWindowProvider.cs
  76. 4 2
      src/PixiEditor.Extensions.MSPackageBuilder/BuildPackageTask.cs
  77. 24 4
      src/PixiEditor.Extensions.MSPackageBuilder/PackageBuilder.cs
  78. 51 80
      src/PixiEditor.Extensions.Runtime/ExtensionLoader.cs
  79. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Align.cs
  80. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Border.cs
  81. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Button.cs
  82. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Center.cs
  83. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/CheckBox.cs
  84. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Column.cs
  85. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Container.cs
  86. 4 2
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/ControlDefinition.cs
  87. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Hyperlink.cs
  88. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Icon.cs
  89. 4 9
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Image.cs
  90. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Layout.cs
  91. 18 0
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/NativeElement.cs
  92. 27 0
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/NativeMultiChildElement.cs
  93. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Padding.cs
  94. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Row.cs
  95. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/SizeInputField.cs
  96. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/StatefulElement.cs
  97. 3 1
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/Text.cs
  98. 8 2
      src/PixiEditor.Extensions.Sdk/Api/FlyUI/TextField.cs
  99. 5 0
      src/PixiEditor.Extensions.Sdk/Api/IO/DocumentProvider.cs
  100. 55 0
      src/PixiEditor.Extensions.Sdk/Api/Resources/Resources.cs

+ 0 - 21
Third Party Licenses/AsyncImageLoader.Avalonia_3.2.1.txt

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 SKProCH
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 38
Third Party Licenses/Avalonia.Labs.Lottie_11.0.10.1.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Avalonia.Xaml.Behaviors_11.0.5.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 9
Third Party Licenses/AvaloniaUI.txt

@@ -1,9 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) AvaloniaUI OÜ All Rights Reserved
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 38
Third Party Licenses/ByteSize_2.1.1.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 21
Third Party Licenses/CLSEncoderDecoder_1.0.0.txt

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2022 Egor Mozgovoy
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 38
Third Party Licenses/CommunityToolkit.HighPerformance_8.2.2.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/CommunityToolkit.Mvvm_8.2.2.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/DiscordRichPresence_1.2.1.24.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/FFMpegCore_5.1.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Hardware.Info_11.0.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/MessageBox.Avalonia_2.3.1-prev7.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.Build.Utilities.Core_17.8.3.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.Build.Utilities.Core_17.9.5.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.Analyzers_3.3.4.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.CSharp.Features_4.9.2.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.CSharp.Workspaces_4.8.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.CSharp_4.2.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.CSharp_4.3.1.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.CSharp_4.9.2.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.CodeAnalysis.Common_4.9.2.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.Extensions.DependencyInjection.Abstractions_7.0.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Microsoft.Extensions.DependencyInjection_7.0.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Mono.Cecil_0.11.5.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Newtonsoft.Json_13.0.1.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/Newtonsoft.Json_13.0.3.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 7
Third Party Licenses/OneOf_3.0.223.txt

@@ -1,7 +0,0 @@
-Copyright (c) 2016 Harry McIntyre
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 21
Third Party Licenses/PixiEditor.ColorPicker.AvaloniaUI_1.0.5.txt

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) PixiEditor Organization
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 21
Third Party Licenses/PixiEditor.ColorPicker.Models_1.0.5.txt

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) PixiEditor Organization
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 8
Third Party Licenses/SkiaSharp_2.88.8.txt

@@ -1,8 +0,0 @@
-Copyright (c) 2015-2016 Xamarin, Inc.  
-Copyright (c) 2017-2018 Microsoft Corporation.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 38
Third Party Licenses/Steamworks.NET_20.2.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 0 - 38
Third Party Licenses/System.Reactive_6.0.0.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 1214 - 0
Third Party Licenses/ThirdPartyLicenses.txt

@@ -0,0 +1,1214 @@
+License notice for Avalonia.Desktop (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Diagnostics (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.CodeAnalysis.CSharp (v4.11.0)
+------------------------------------
+
+https://github.com/dotnet/roslyn at 5e3a11e2e7f952da93f9d35bd63a2fa181c0608b
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for AsyncImageLoader.Avalonia (v3.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia.git at 00edb42cdbf008f87f42c49d6f57034171bff02f
+
+https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia
+
+License available at https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia/blob/master/LICENSE
+
+
+License notice for Avalonia (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Angle.Windows.Natives (v2.1.22045.20230930)
+------------------------------------
+
+https://github.com/AvaloniaUI/angle/ at 26406952a84f41c4be1e762884cda61fd2e022a9
+
+https://avaloniaui.net/
+
+Copyright 2013-2023 © The AvaloniaUI Project
+
+Available at https://aka.ms/deprecateLicenseUrl
+
+LICENSE
+
+
+License notice for Avalonia.BuildServices (v0.0.31)
+------------------------------------
+
+https://avaloniaui.net/
+
+Copyright 2023-2024 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Controls.ColorPicker (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.FreeDesktop (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Headless (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Labs.Lottie (v11.2.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia.Labs/ at 440ea074e34ee536691f9c9219afcac1835e750b
+
+https://avaloniaui.net/
+
+Copyright 2013-2024 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Native (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Remote.Protocol (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Skia (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Svg.Skia (v11.2.0.2)
+------------------------------------
+
+https://github.com/wieslawsoltes/Svg.Skia at e958b025fb2a856b8b1d17f772329d014b92858a
+
+Copyright © Wiesław Šoltés 2024
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Themes.Fluent (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Themes.Simple (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Win32 (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.X11 (v11.3.0)
+------------------------------------
+
+https://github.com/AvaloniaUI/Avalonia/ at d6edb46ce04f983892a61d3abf906014d3f5ec8d
+
+https://avaloniaui.net/?utm_source=nuget&utm_medium=referral&utm_content=project_homepage_link
+
+Copyright 2013-2025 © The AvaloniaUI Project
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Behaviors (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactions (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactions.Custom (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactions.DragAndDrop (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactions.Draggable (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactions.Events (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactions.Responsive (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Avalonia.Xaml.Interactivity (v11.2.0.14)
+------------------------------------
+
+https://github.com/wieslawsoltes/Xaml.Behaviors at 0c303a6909ff6b9c8e95b1ad134108892682bb47
+
+Copyright © Wiesław Šoltés 2025
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for BmpSharp (v0.2.0)
+------------------------------------
+
+https://github.com/dsoronda/bmp-sharp
+
+Copyright (c) Dražen Šoronda
+
+Available at https://aka.ms/deprecateLicenseUrl
+
+LICENSE.txt
+
+
+License notice for ByteSize (v2.1.2)
+------------------------------------
+
+https://github.com/omar/ByteSize at 28f1bd5aa265c4a436e4091cf85fc7ad76bd5083
+
+Copyright © Omar Khudeira 2013-2022
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for CLSEncoderDecoder (v1.0.0)
+------------------------------------
+
+https://github.com/Equbuxu/CLSEncoderDecoder
+
+Available at https://aka.ms/deprecateLicenseUrl
+
+LICENSE
+
+
+License notice for CommunityToolkit.HighPerformance (v8.3.2)
+------------------------------------
+
+https://github.com/CommunityToolkit/dotnet at 5320d4f621e145c60ef4180ea66fe57f12f0f58a
+
+(c) .NET Foundation and Contributors. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for CommunityToolkit.Mvvm (v8.3.2)
+------------------------------------
+
+https://github.com/CommunityToolkit/dotnet at 5320d4f621e145c60ef4180ea66fe57f12f0f58a
+
+(c) .NET Foundation and Contributors. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for DiscordRichPresence (v1.2.1.24)
+------------------------------------
+
+https://github.com/Lachee/discord-rpc-csharp
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for ExCSS (v4.2.3)
+------------------------------------
+
+https://github.com/TylerBrinks/ExCSS
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for FFMpegCore (v5.1.0)
+------------------------------------
+
+https://github.com/rosenbjerg/FFMpegCore
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Hardware.Info (v101.0.0)
+------------------------------------
+
+https://github.com/Jinjinov/Hardware.Info at cb4a549bb47870a90c8d3d6c92b6f80d91992764
+
+Copyright (c) Jinjinov 2022
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for HarfBuzzSharp (v7.3.0.3)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 9699cdf046a989423a5e5eca68e7fd813486d81c
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for HarfBuzzSharp.NativeAssets.Linux (v7.3.0.3)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 9699cdf046a989423a5e5eca68e7fd813486d81c
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for HarfBuzzSharp.NativeAssets.macOS (v7.3.0.3)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 9699cdf046a989423a5e5eca68e7fd813486d81c
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for HarfBuzzSharp.NativeAssets.WebAssembly (v7.3.0.3)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 9699cdf046a989423a5e5eca68e7fd813486d81c
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for HarfBuzzSharp.NativeAssets.Win32 (v7.3.0.3)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 9699cdf046a989423a5e5eca68e7fd813486d81c
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Instances (v3.0.0)
+------------------------------------
+
+https://github.com/rosenbjerg/Instances
+
+Rosenbjerg Softworks
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for MessagePack (v2.5.192)
+------------------------------------
+
+https://github.com/MessagePack-CSharp/MessagePack-CSharp at d3d435b96cf09b9b0afc313bdea4257de6481c9f
+
+https://github.com/neuecc/MessagePack-CSharp
+
+Copyright © Yoshifumi Kawai and contributors. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for MessagePack.Annotations (v2.5.192)
+------------------------------------
+
+https://github.com/MessagePack-CSharp/MessagePack-CSharp at d3d435b96cf09b9b0afc313bdea4257de6481c9f
+
+https://github.com/neuecc/MessagePack-CSharp
+
+Copyright © Yoshifumi Kawai and contributors. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for MicroCom.Runtime (v0.11.0)
+------------------------------------
+
+https://github.com/kekekeks/MicroCom
+
+Copyright 2021 © Nikita Tsukanov
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.CodeAnalysis.Common (v4.11.0)
+------------------------------------
+
+https://github.com/dotnet/roslyn at 5e3a11e2e7f952da93f9d35bd63a2fa181c0608b
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.CSharp (v4.7.0)
+------------------------------------
+
+https://github.com/dotnet/corefx
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.DotNet.PlatformAbstractions (v3.1.6)
+------------------------------------
+
+git://github.com/dotnet/core-setup at 3acd9b0cd16596bad450c82be08780875a73c05c
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Available at https://aka.ms/deprecateLicenseUrl
+
+LICENSE.TXT
+
+
+License notice for Microsoft.Extensions.DependencyInjection (v9.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 9d5a6a9aa463d6d10b0b0ba6d5982cc82f363dc3
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.Extensions.DependencyInjection.Abstractions (v9.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 9d5a6a9aa463d6d10b0b0ba6d5982cc82f363dc3
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.Extensions.DependencyModel (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.NET.StringTools (v17.6.3)
+------------------------------------
+
+https://github.com/dotnet/msbuild at 07e2947214f1a9f28a3517762c939d5bebb5f525
+
+http://go.microsoft.com/fwlink/?LinkId=624683
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.NETCore.Platforms (v5.0.0)
+------------------------------------
+
+git://github.com/dotnet/runtime at cf258a14b70ad9069470a108f13765e0e5988f51
+
+https://github.com/dotnet/runtime
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Microsoft.Win32.Registry (v5.0.0)
+------------------------------------
+
+git://github.com/dotnet/runtime at cf258a14b70ad9069470a108f13765e0e5988f51
+
+https://github.com/dotnet/runtime
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Newtonsoft.Json (v13.0.3)
+------------------------------------
+
+https://github.com/JamesNK/Newtonsoft.Json at 0a2e291c0d9c0c7675d445703e51750363a549ef
+
+https://www.newtonsoft.com/json
+
+Copyright © James Newton-King 2008
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for OneOf (v3.0.271)
+------------------------------------
+
+https://github.com/mcintyre321/OneOf.git at 6e02dbe75d0f20f198c640d4c04190a85c5ac9e6
+
+https://github.com/mcintyre321/OneOf/
+
+Harry McIntyre
+
+License available at https://github.com/mcintyre321/OneOf/blob/master/licence.md
+
+
+License notice for protobuf-net (v3.2.52)
+------------------------------------
+
+https://github.com/protobuf-net/protobuf-net at f4db4afce39c3da09aac2c539df53452319c5983
+
+See https://github.com/protobuf-net/protobuf-net
+
+Licensed under Apache-2.0
+
+Available at https://licenses.nuget.org/Apache-2.0
+
+
+License notice for protobuf-net.Core (v3.2.52)
+------------------------------------
+
+https://github.com/protobuf-net/protobuf-net at f4db4afce39c3da09aac2c539df53452319c5983
+
+See https://github.com/protobuf-net/protobuf-net
+
+Licensed under Apache-2.0
+
+Available at https://licenses.nuget.org/Apache-2.0
+
+
+License notice for Qoi.NetStandard (v1.0.0)
+------------------------------------
+
+https://github.com/RGgt/Qoi.NetStandard
+
+RGgt. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for ShimSkiaSharp (v2.0.0.4)
+------------------------------------
+
+https://github.com/wieslawsoltes/Svg.Skia at e958b025fb2a856b8b1d17f772329d014b92858a
+
+Copyright © Wiesław Šoltés 2024
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Silk.NET.Core (v2.22.0)
+------------------------------------
+
+https://github.com/dotnet/Silk.NET.git at f9535d2900ac226ee6c52cf96a7110fc1115730c
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Silk.NET.Maths (v2.22.0)
+------------------------------------
+
+https://github.com/dotnet/Silk.NET.git at f9535d2900ac226ee6c52cf96a7110fc1115730c
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Silk.NET.OpenGL (v2.22.0)
+------------------------------------
+
+https://github.com/dotnet/Silk.NET.git at f9535d2900ac226ee6c52cf96a7110fc1115730c
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Silk.NET.Vulkan (v2.22.0)
+------------------------------------
+
+https://github.com/dotnet/Silk.NET.git at f9535d2900ac226ee6c52cf96a7110fc1115730c
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Silk.NET.Vulkan.Extensions.EXT (v2.22.0)
+------------------------------------
+
+https://github.com/dotnet/Silk.NET.git at f9535d2900ac226ee6c52cf96a7110fc1115730c
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Silk.NET.Vulkan.Extensions.KHR (v2.22.0)
+------------------------------------
+
+https://github.com/dotnet/Silk.NET.git at f9535d2900ac226ee6c52cf96a7110fc1115730c
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for SkiaSharp (v3.119.0)
+------------------------------------
+
+https://go.microsoft.com/fwlink/?linkid=868515 at 64f24b1cddb68d30ec0ac6b661964178fc21d5ec
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for SkiaSharp.HarfBuzz (v2.88.8)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 7af1d0840a381c0ce7ef2877454a88dbb2949686
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+License available at https://go.microsoft.com/fwlink/?linkid=868514
+
+
+License notice for SkiaSharp.NativeAssets.Linux (v2.88.9)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 9699cdf046a989423a5e5eca68e7fd813486d81c
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for SkiaSharp.NativeAssets.macOS (v3.119.0)
+------------------------------------
+
+https://go.microsoft.com/fwlink/?linkid=868515 at 64f24b1cddb68d30ec0ac6b661964178fc21d5ec
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for SkiaSharp.NativeAssets.WebAssembly (v3.119.0)
+------------------------------------
+
+https://go.microsoft.com/fwlink/?linkid=868515 at 64f24b1cddb68d30ec0ac6b661964178fc21d5ec
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for SkiaSharp.NativeAssets.Win32 (v3.119.0)
+------------------------------------
+
+https://go.microsoft.com/fwlink/?linkid=868515 at 64f24b1cddb68d30ec0ac6b661964178fc21d5ec
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for SkiaSharp.Skottie (v2.88.8)
+------------------------------------
+
+https://github.com/mono/SkiaSharp at 7af1d0840a381c0ce7ef2877454a88dbb2949686
+
+https://go.microsoft.com/fwlink/?linkid=868515
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+License available at https://go.microsoft.com/fwlink/?linkid=868514
+
+
+License notice for Svg.Custom (v2.0.0.4)
+------------------------------------
+
+https://github.com/wieslawsoltes/Svg.Skia at e958b025fb2a856b8b1d17f772329d014b92858a
+
+Copyright © Wiesław Šoltés 2024
+
+Licensed under MS-PL
+
+Available at https://licenses.nuget.org/MS-PL
+
+
+License notice for Svg.Model (v2.0.0.4)
+------------------------------------
+
+https://github.com/wieslawsoltes/Svg.Skia at e958b025fb2a856b8b1d17f772329d014b92858a
+
+Copyright © Wiesław Šoltés 2024
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Svg.Skia (v2.0.0.4)
+------------------------------------
+
+https://github.com/wieslawsoltes/Svg.Skia at e958b025fb2a856b8b1d17f772329d014b92858a
+
+Copyright © Wiesław Šoltés 2024
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Buffers (v4.6.0)
+------------------------------------
+
+https://github.com/dotnet/maintenance-packages at d0c2a5a83211e271826172a6b0510c25a52dbd53
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.CodeDom (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Collections.Immutable (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Configuration.ConfigurationManager (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Diagnostics.EventLog (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Diagnostics.PerformanceCounter (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.IO.Pipelines (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Management (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Memory (v4.5.5)
+------------------------------------
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+License available at https://github.com/dotnet/corefx/blob/master/LICENSE.TXT
+
+
+License notice for System.Numerics.Vectors (v4.5.0)
+------------------------------------
+
+https://dot.net/
+
+Copyright © Microsoft Corporation.  All rights reserved.
+
+License available at https://github.com/dotnet/corefx/blob/master/LICENSE.TXT
+
+
+License notice for System.Reactive (v6.0.1)
+------------------------------------
+
+https://github.com/dotnet/reactive at 1cfc6465d1c9c6144d5b4e6420240f2767c8f85c
+
+Copyright (c) .NET Foundation and Contributors.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Reflection.Metadata (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Runtime.CompilerServices.Unsafe (v6.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 4822e3c3aa77eb82b2fb33c9321f923cf11ddde6
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Security.AccessControl (v5.0.0)
+------------------------------------
+
+git://github.com/dotnet/runtime at cf258a14b70ad9069470a108f13765e0e5988f51
+
+https://github.com/dotnet/runtime
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Security.Cryptography.ProtectedData (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Security.Principal.Windows (v5.0.0)
+------------------------------------
+
+git://github.com/dotnet/runtime at cf258a14b70ad9069470a108f13765e0e5988f51
+
+https://github.com/dotnet/runtime
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Text.Encodings.Web (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for System.Text.Json (v8.0.0)
+------------------------------------
+
+https://github.com/dotnet/runtime at 5535e31a712343a63f5d7d796cd874e563e5ac14
+
+https://dot.net/
+
+Copyright © Microsoft Corporation. All rights reserved.
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Tmds.DBus.Protocol (v0.21.2)
+------------------------------------
+
+https://github.com/tmds/Tmds.DBus.git at f0b2c29f57bdc7efaeccaa61ca9f13e9a0eebff7
+
+Tom Deseyn
+
+Licensed under MIT
+
+Available at https://licenses.nuget.org/MIT
+
+
+License notice for Wasmtime (v22.0.0)
+------------------------------------
+
+https://github.com/bytecodealliance/wasmtime-dotnet at 9a64e14aeb28991eb61f186fea9a745c0fd7f6a4
+
+Licensed under Apache-2.0 WITH LLVM-exception
+
+Available at https://licenses.nuget.org/Apache-2.0%20WITH%20LLVM-exception
+
+

+ 0 - 5
Third Party Licenses/Wasmtime_16.0.0.txt

@@ -1,5 +0,0 @@
- 
-
-Composite license expression: 
-
-Apache-2.0 WITH LLVM-exception 

+ 0 - 38
Third Party Licenses/WriteableBitmapEx_1.6.8.txt

@@ -1,38 +0,0 @@
- 
-MIT License
-SPDX identifier
-MIT
-License text
-
-MIT License
-
-Copyright (c) <year> <copyright holders> 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files(the "Software"), to deal in the
-Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice (including the next
-paragraph)shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERSBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-SPDX web page
-  * https://spdx.org/licenses/MIT.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 165 - 0
Third Party Licenses/ffmpeg-linux.txt

@@ -0,0 +1,165 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.

+ 0 - 218
Third Party Licenses/protobuf-net_3.2.30.txt

@@ -1,218 +0,0 @@
- 
-Apache License 2.0
-SPDX identifier
-Apache-2.0
-License text
-
-Apache License 
-Version 2.0, January 2004 
-http://www.apache.org/licenses/ 
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-  *  1.Definitions. 
-
-      * "License" shall mean the terms and conditions for use, reproduction, and
-        distribution as defined by Sections 1 through 9 of this document.
-
-      * "Licensor" shall mean the copyright owner or entity authorized by the
-        copyright owner that is granting the License.
-
-      * "Legal Entity" shall mean the union of the acting entity and all other
-        entities that control, are controlled by, or are under common control
-        with that entity. For the purposes of this definition, "control" means
-        (i) the power, direct or indirect, to cause the direction or management
-        of such entity, whether by contract or otherwise, or (ii) ownership of
-        fifty percent (50%) or more of the outstanding shares, or (iii)
-        beneficial ownership of such entity.
-
-      * "You" (or "Your") shall mean an individual or Legal Entity exercising
-        permissions granted by this License.
-
-      * "Source" form shall mean the preferred form for making modifications,
-        including but not limited to software source code, documentation source,
-        and configuration files.
-
-      * "Object" form shall mean any form resulting from mechanical
-        transformation or translation of a Source form, including but not
-        limited to compiled object code, generated documentation, and
-        conversions to other media types.
-
-      * "Work" shall mean the work of authorship, whether in Source or Object
-        form, made available under the License, as indicated by a copyright
-        notice that is included in or attached to the work (an example is
-        provided in the Appendix below).
-
-      * "Derivative Works" shall mean any work, whether in Source or Object
-        form, that is based on (or derived from) the Work and for which the
-        editorial revisions, annotations, elaborations, or other modifications
-        represent, as a whole, an original work of authorship. For the purposes
-        of this License, Derivative Works shall not include works that remain
-        separable from, or merely link (or bind by name) to the interfaces of,
-        the Work and Derivative Works thereof.
-
-      * "Contribution" shall mean any work of authorship, including the original
-        version of the Work and any modifications or additions to that Work or
-        Derivative Works thereof, that is intentionally submitted to Licensor
-        for inclusion in the Work by the copyright owner or by an individual or
-        Legal Entity authorized to submit on behalf of the copyright owner. For
-        the purposes of this definition, "submitted" means any form of
-        electronic, verbal, or written communication sent to the Licensor or its
-        representatives, including but not limited to communication on
-        electronic mailing lists, source code control systems, and issue
-        tracking systems that are managed by, or on behalf of, the Licensor for
-        the purpose of discussing and improving the Work, but excluding
-        communication that is conspicuously marked or otherwise designated in
-        writing by the copyright owner as "Not a Contribution."
-
-      * "Contributor" shall mean Licensor and any individual or Legal Entity on
-        behalf of whom a Contribution has been received by Licensor and
-        subsequently incorporated within the Work.
-
-  *  2.Grant of Copyright License. Subject to the terms and conditions of this
-    License, each Contributor hereby grants to You a perpetual, worldwide,
-    non-exclusive, no-charge, royalty-free, irrevocable copyright license to
-    reproduce, prepare Derivative Works of, publicly display, publicly perform,
-    sublicense, and distribute the Work and such Derivative Works in Source or
-    Object form. 
-  * 3.Grant of Patent License. Subject to the terms and conditions of this
-    License, each Contributor hereby grants to You a perpetual, worldwide,
-    non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
-    this section) patent license to make, have made, use, offer to sell, sell,
-    import, and otherwise transfer the Work, where such license applies only to
-    those patent claims licensable by such Contributor that are necessarily
-    infringed by their Contribution(s) alone or by combination of their
-    Contribution(s) with the Work to which such Contribution(s) was submitted.
-    If You institute patent litigation against any entity (including a
-    cross-claim or counterclaim in a lawsuit) alleging that the Work or a
-    Contribution incorporated within the Work constitutes direct or contributory
-    patent infringement, then any patent licenses granted to You under this
-    License for that Work shall terminate as of the date such litigation is
-    filed. 
-  * 4.Redistribution. You may reproduce and distribute copies of the Work or
-    Derivative Works thereof in any medium, with or without modifications, and
-    in Source or Object form, provided that You meet the following conditions: 
-      * (a)You must give any other recipients of the Work or Derivative Works a
-        copy of this License; and 
-      * (b)You must cause any modified files to carry prominent notices stating
-        that You changed the files; and 
-      * (c)You must retain, in the Source form of any Derivative Works that You
-        distribute, all copyright, patent, trademark, and attribution notices
-        from the Source form of the Work, excluding those notices that do not
-        pertain to any part of the Derivative Works; and 
-      * (d)If the Work includes a "NOTICE" text file as part of its
-        distribution, then any Derivative Works that You distribute must include
-        a readable copy of the attribution notices contained within such NOTICE
-        file, excluding those notices that do not pertain to any part of the
-        Derivative Works, in at least one of the following places: within a
-        NOTICE text file distributed as part of the Derivative Works; within the
-        Source form or documentation, if provided along with the Derivative
-        Works; or, within a display generated by the Derivative Works, if and
-        wherever such third-party notices normally appear. The contents of the
-        NOTICE file are for informational purposes only and do not modify the
-        License. You may add Your own attribution notices within Derivative
-        Works that You distribute, alongside or as an addendum to the NOTICE
-        text from the Work, provided that such additional attribution notices
-        cannot be construed as modifying the License. 
-
-        You may add Your own copyright statement to Your modifications and may
-        provide additional or different license terms and conditions for use,
-        reproduction, or distribution of Your modifications, or for any such
-        Derivative Works as a whole, provided Your use, reproduction, and
-        distribution of the Work otherwise complies with the conditions stated
-        in this License.
-
-  *  5.Submission of Contributions. Unless You explicitly state otherwise, any
-    Contribution intentionally submitted for inclusion in the Work by You to the
-    Licensor shall be under the terms and conditions of this License, without
-    any additional terms or conditions. Notwithstanding the above, nothing
-    herein shall supersede or modify the terms of any separate license agreement
-    you may have executed with Licensor regarding such Contributions. 
-  * 6.Trademarks. This License does not grant permission to use the trade names,
-    trademarks, service marks, or product names of the Licensor, except as
-    required for reasonable and customary use in describing the origin of the
-    Work and reproducing the content of the NOTICE file. 
-  * 7.Disclaimer of Warranty. Unless required by applicable law or agreed to in
-    writing, Licensor provides the Work (and each Contributor provides its
-    Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied, including, without limitation, any
-    warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or
-    FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining
-    the appropriateness of using or redistributing the Work and assume any risks
-    associated with Your exercise of permissions under this License. 
-  * 8.Limitation of Liability. In no event and under no legal theory, whether in
-    tort (including negligence), contract, or otherwise, unless required by
-    applicable law (such as deliberate and grossly negligent acts) or agreed to
-    in writing, shall any Contributor be liable to You for damages, including
-    any direct, indirect, special, incidental, or consequential damages of any
-    character arising as a result of this License or out of the use or inability
-    to use the Work (including but not limited to damages for loss of goodwill,
-    work stoppage, computer failure or malfunction, or any and all other
-    commercial damages or losses), even if such Contributor has been advised of
-    the possibility of such damages. 
-  * 9.Accepting Warranty or Additional Liability. While redistributing the Work
-    or Derivative Works thereof, You may choose to offer, and charge a fee for,
-    acceptance of support, warranty, indemnity, or other liability obligations
-    and/or rights consistent with this License. However, in accepting such
-    obligations, You may act only on Your own behalf and on Your sole
-    responsibility, not on behalf of any other Contributor, and only if You
-    agree to indemnify, defend, and hold each Contributor harmless for any
-    liability incurred by, or claims asserted against, such Contributor by
-    reason of your accepting any such warranty or additional liability. 
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-To apply the Apache License to your work, attach the following boilerplate
-notice, with the fields enclosed by brackets "[]" replaced with your own
-identifying information. (Don't include the brackets!) The text should be
-enclosed in the appropriate comment syntax for the file format. We also
-recommend that a file or class name and description of purpose be included on
-the same "printed page" as the copyright notice for easier identification within
-third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License"); 
-you may not use this file except in compliance with the License. 
-You may obtain a copy of the License at 
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software 
-distributed under the License is distributed on an "AS IS" BASIS, 
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-See the License for the specific language governing permissions and 
-limitations under the License. 
-
-Standard License Header
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License"); 
-you may not use this file except in compliance with the License. 
-You may obtain a copy of the License at 
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software 
-distributed under the License is distributed on an "AS IS" BASIS, 
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-See the License for the specific language governing permissions and 
-limitations under the License. 
-
-Notes
-
-This license was released January 2004
-
-SPDX web page
-  * https://spdx.org/licenses/Apache-2.0.html
-Notice
-
-This license content is provided by the SPDX project. For more information about
-licenses.nuget.org, see our documentation. 
-
-Data pulled from spdx/license-list-data on February 9, 2023.
-
- 

+ 2 - 0
gen_third_party_licenses.sh

@@ -0,0 +1,2 @@
+dotnet tool install --global ThirdLicense --version 1.3.1
+thirdlicense --project ./src/PixiEditor.Desktop/PixiEditor.Desktop.csproj --output "./Third Party Licenses/ThirdPartyLicenses.txt"

+ 6 - 0
samples/PixiEditorExtensionSamples.sln

@@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample8_CommandLibrary", "S
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample9_Document", "Sample9_Document\Sample9_Document.csproj", "{E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample10_VisualTree", "Sample10_VisualTree\Sample10_VisualTree.csproj", "{574D7C79-8899-4A69-911A-05AEA650A275}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -80,6 +82,10 @@ Global
 		{E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{574D7C79-8899-4A69-911A-05AEA650A275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{574D7C79-8899-4A69-911A-05AEA650A275}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{574D7C79-8899-4A69-911A-05AEA650A275}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{574D7C79-8899-4A69-911A-05AEA650A275}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{FD9B4C32-4D2E-410E-BC6B-787779BEB6E2} = {7CC35BC4-829F-4EF4-8EB6-E1D46206E7DC}

+ 8 - 0
samples/Sample10_VisualTree/Program.cs

@@ -0,0 +1,8 @@
+namespace Sample9_Commands;
+
+public static class Program
+{
+    public static void Main()
+    {
+    }
+}

+ 45 - 0
samples/Sample10_VisualTree/Sample10_VisualTree.csproj

@@ -0,0 +1,45 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <TargetFramework>net8.0</TargetFramework>
+        <RuntimeIdentifier>wasi-wasm</RuntimeIdentifier>
+        <OutputType>Exe</OutputType>
+        <PublishTrimmed>true</PublishTrimmed>
+        <WasmSingleFileBundle>true</WasmSingleFileBundle>
+        <GenerateExtensionPackage>true</GenerateExtensionPackage>
+        <PixiExtOutputPath>..\..\src\PixiEditor.Desktop\bin\Debug\net8.0\Extensions</PixiExtOutputPath>
+        <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
+        <ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
+        <RootNamespace>Sample10_VisualTree</RootNamespace>
+    </PropertyGroup>
+
+    <!--Below is not required if you use Nuget package, this sample references project directly, so it must be here-->
+    <ItemGroup>
+        <ProjectReference Include="..\..\src\PixiEditor.Extensions.Sdk\PixiEditor.Extensions.Sdk.csproj"/>
+    </ItemGroup>
+
+    <ItemGroup>
+        <None Remove="extension.json"/>
+        <Content Include="extension.json">
+            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+        </Content>
+    </ItemGroup>
+
+    <ItemGroup>
+        <Content Include="Localization\*">
+            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+        </Content>
+    </ItemGroup>
+
+    <ItemGroup>
+        <Content Include="Resources\*">
+            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+        </Content>
+    </ItemGroup>
+
+    <!--Below is not required if you use Nuget package, this sample references project directly, so it must be here-->
+    <Import Project="..\..\src\PixiEditor.Extensions.Sdk\build\PixiEditor.Extensions.Sdk.props"/>
+    <Import Project="..\..\src\PixiEditor.Extensions.Sdk\build\PixiEditor.Extensions.Sdk.targets"/>
+
+
+</Project>

+ 44 - 0
samples/Sample10_VisualTree/VisualTreeSampleExtension.cs

@@ -0,0 +1,44 @@
+using System;
+using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.CommonApi.Windowing;
+using PixiEditor.Extensions.Sdk;
+using PixiEditor.Extensions.Sdk.Api.FlyUI;
+using PixiEditor.Extensions.Sdk.Api.Window;
+
+namespace Sample10_VisualTree;
+
+public class VisualTreeSampleExtension : PixiEditorExtension
+{
+    /// <summary>
+    ///     This method is called when extension is loaded.
+    ///  All extensions are first loaded and then initialized. This method is called before <see cref="OnInitialized"/>.
+    /// </summary>
+    public override void OnLoaded()
+    {
+    }
+
+    /// <summary>
+    ///     This method is called when extension is initialized. After this method is called, you can use Api property to access PixiEditor API.
+    /// </summary>
+    public override void OnInitialized()
+    {
+        Api.WindowProvider.SubscribeWindowOpened(BuiltInWindowType.StartupWindow, InjectButton);
+    }
+
+    private void InjectButton(PopupWindow window)
+    {
+        var button = new Button(new Text("Click me!"));
+
+        var element = Api.VisualTreeProvider.FindElement("ExampleFilesGrid", window);
+
+        if (element is NativeMultiChildElement panel)
+        {
+            panel.AppendChild(0, button);
+        }
+    }
+
+    public override void OnMainWindowLoaded()
+    {
+       // wip
+    }
+}

+ 39 - 0
samples/Sample10_VisualTree/extension.json

@@ -0,0 +1,39 @@
+{
+  "displayName": "Sample Extension - Visual Tree",
+  "uniqueName": "yourCompany.Samples.VisualTree",
+  "description": "Sample Visual Tree extension for PixiEditor",
+  "version": "1.0.0",
+  "localization": {
+    "languages": [
+      {
+        "name": "English",
+        "code": "en",
+        "localeFileName": "Localization/en.json"
+      }
+    ]
+  },
+  "author": {
+    "name": "PixiEditor",
+    "email": "[email protected]",
+    "website": "https://pixieditor.net"
+  },
+  "publisher": {
+    "name": "PixiEditor",
+    "email": "[email protected]",
+    "website": "https://pixieditor.net"
+  },
+  "contributors": [
+    {
+      "name": "flabbet",
+      "email": "[email protected]",
+      "website": "https://github.com/flabbet"
+    }
+  ],
+  "license": "MIT",
+  "categories": [
+    "Extension"
+  ],
+  "Permissions": [
+    "ReadUserData"
+  ]
+}

+ 8 - 3
samples/Sample5_Resources/ResourcesSampleExtension.cs

@@ -1,5 +1,7 @@
 using System.IO;
 using PixiEditor.Extensions.Sdk;
+using PixiEditor.Extensions.Sdk.Api.Resources;
+using PixiEditor.Extensions.Sdk.Bridge;
 
 namespace ResourcesSample;
 
@@ -21,12 +23,15 @@ public class ResourcesSampleExtension : PixiEditorExtension
     {
         // By default, you can't access any files from the file system, however you can access files from the Resources folder.
         // This folder contains files that you put in the Resources folder in the extension project.
-        Api.Logger.Log(File.ReadAllText("Resources/ExampleFile.txt"));
+        // You can use System.File calls to access files in the Resources folder.
+        // However, if you want to access files that are encrypted, you should use the Resources methods.
+        // Adding <EncryptResources>true</EncryptResources> to the .csproj file will encrypt the resources in the Resources folder.
+        Api.Logger.Log(Resources.ReadAllText("Resources/ExampleFile.txt"));
 
         Api.Logger.Log("Writing to file...");
 
-        File.WriteAllText("Resources/ExampleFile.txt", "Hello from extension!");
+        Resources.WriteAllText("Resources/ExampleFile.txt", "Hello from extension!");
 
-        Api.Logger.Log(File.ReadAllText("Resources/ExampleFile.txt"));
+        Api.Logger.Log(Resources.ReadAllText("Resources/ExampleFile.txt"));
     }
 }

+ 2 - 1
samples/Sample5_Resources/Sample5_Resources.csproj

@@ -6,10 +6,11 @@
         <PublishTrimmed>true</PublishTrimmed>
         <WasmSingleFileBundle>true</WasmSingleFileBundle>
         <GenerateExtensionPackage>true</GenerateExtensionPackage>
-        <PixiExtOutputPath>..\..\src\PixiEditor.Desktop\bin\Debug\net8.0\win-x64\Extensions</PixiExtOutputPath>
+        <PixiExtOutputPath>..\..\src\PixiEditor.Desktop\bin\Debug\net8.0\Extensions</PixiExtOutputPath>
         <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
         <ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
         <RootNamespace>ResourcesSample</RootNamespace>
+        <EncryptResources>true</EncryptResources>
     </PropertyGroup>
 
     <ItemGroup>

+ 11 - 0
src/ChunkyImageLib/ColorEx.cs

@@ -14,4 +14,15 @@ public static class ColorEx
         ptr[3] = (Half)(normalizedAlpha);
         return result;
     }
+
+    public static unsafe ulong ToULong(this ColorF colorF)
+    {
+        ulong result = 0;
+        Half* ptr = (Half*)&result;
+        ptr[0] = (Half)colorF.R;
+        ptr[1] = (Half)colorF.G;
+        ptr[2] = (Half)colorF.B;
+        ptr[3] = (Half)colorF.A;
+        return result;
+    }
 }

+ 1 - 1
src/ChunkyImageLib/Operations/ReplaceColorOperation.cs

@@ -35,7 +35,7 @@ internal class ReplaceColorOperation : IDrawOperation
             targetColorBits = newColor.TransformColor(transform).ToULong();
 
             var transformOld = targetChunk.Surface.ImageInfo.ColorSpace.GetTransformFunction();
-            colorBounds = new ColorBounds(oldColor.TransformColor(transform));
+            colorBounds = new ColorBounds((Color)oldColor.TransformColor(transform));
         }
 
         ReplaceColor(colorBounds, targetColorBits, targetChunk);

+ 1 - 1
src/ChunkyImageLibVis/ChunkyImageLibVis.csproj

@@ -5,7 +5,7 @@
     <TargetFramework>net8.0-windows</TargetFramework>
     <Nullable>enable</Nullable>
     <UseWPF>true</UseWPF>
-    <Configurations>Debug;Release;Steam;DevRelease</Configurations>
+    <Configurations>Debug;Release;Steam;DevRelease;DebugSteam</Configurations>
     <Platforms>AnyCPU;x64;x86</Platforms>
   </PropertyGroup>
 

+ 1 - 1
src/ColorPicker

@@ -1 +1 @@
-Subproject commit 7f55a2f8fcf3bcbab1398fcee1d6ceca228c146b
+Subproject commit db8aaff273239b21bf4c6f99b0162dcd1d742533

+ 8 - 3
src/Directory.Build.props

@@ -50,13 +50,12 @@
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
-    <DefineConstants>TRACE;UPDATE</DefineConstants>
+    <DefineConstants>TRACE;UPDATE;RELEASE</DefineConstants>
     <DebugSymbols>False</DebugSymbols>
     <DebugType>None</DebugType>
     <Optimize>true</Optimize>
   </PropertyGroup>
 
-
   <PropertyGroup Condition="'$(Configuration)'=='ReleaseNoUpdate'">
     <DefineConstants>TRACE;RELEASE</DefineConstants>
     <DebugSymbols>False</DebugSymbols>
@@ -71,6 +70,12 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
   </PropertyGroup>
 
+  <PropertyGroup Condition="'$(Configuration)'=='DebugSteam'">
+    <DefineConstants>TRACE;DEBUG;STEAM</DefineConstants>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+  </PropertyGroup>
+
   <PropertyGroup Condition="'$(Configuration)'=='Steam'">
     <DefineConstants>TRACE;RELEASE;STEAM</DefineConstants>
     <Optimize>True</Optimize>
@@ -115,5 +120,5 @@
   <PropertyGroup Condition="'$(RuntimeIdentifier)'=='osx-arm64'">
     <DefineConstants>$(DefineConstants);MACOS</DefineConstants>
   </PropertyGroup>
-  
+
 </Project>

+ 1 - 1
src/Drawie

@@ -1 +1 @@
-Subproject commit 896dd056b0b37774fe22bb615aecdc19fbc83763
+Subproject commit 38fe5456e1e82664ece3eb9f742a29ee60744ed5

+ 1 - 1
src/PixiEditor.AnimationRenderer.FFmpeg/PixiEditor.AnimationRenderer.FFmpeg.csproj

@@ -4,7 +4,7 @@
     <TargetFramework>net8.0</TargetFramework>
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
-    <Configurations>Release;Debug</Configurations>
+    <Configurations>Release;Debug;DebugSteam</Configurations>
     <Platforms>arm64;x64</Platforms>
     <RuntimeIdentifiers>win-x64;win-arm64;osx-x64;osx-arm64;linux-x64;linux-arm64</RuntimeIdentifiers>
   </PropertyGroup>

+ 28 - 3
src/PixiEditor.Api.CGlueMSBuild/CApiGenerator.cs

@@ -7,12 +7,18 @@ namespace PixiEditor.Api.CGlueMSBuild;
 
 public class CApiGenerator
 {
+    private static readonly string[] excluded = new[] { "get_encryption_key", "get_encryption_iv" };
     private string InteropCContent { get; }
     private Action<string> Log { get; }
-    public CApiGenerator(string interopCContent, Action<string> log)
+    public string? ResourcesEncryptionKey { get; set; }
+    public string? ResourcesEncryptionIv { get; set; }
+
+    public CApiGenerator(string interopCContent, string? resourcesEncryptionKey, string? resourcesEncryptionIv, Action<string> log)
     {
         InteropCContent = interopCContent;
         Log = log;
+        ResourcesEncryptionKey = resourcesEncryptionKey;
+        ResourcesEncryptionIv = resourcesEncryptionIv;
     }
 
     public string Generate(AssemblyDefinition assembly, string directory)
@@ -37,7 +43,20 @@ public class CApiGenerator
 
         sb.AppendLine(GenerateAttachImportedFunctions(importedMethods));
 
-        return InteropCContent.Replace("void attach_imported_functions(){}", sb.ToString());
+        string final = InteropCContent;
+        if (!string.IsNullOrEmpty(ResourcesEncryptionKey) && !string.IsNullOrEmpty(ResourcesEncryptionIv))
+        {
+            byte[] keyBytes = Convert.FromBase64String(ResourcesEncryptionKey);
+            byte[] ivBytes = Convert.FromBase64String(ResourcesEncryptionIv);
+
+            final = InteropCContent.Replace("static const uint8_t key[16] = { };",
+                $"static const uint8_t key[16] = {{ {string.Join(", ", keyBytes.Select(b => b.ToString()))} }};");
+
+            final = final.Replace("static const uint8_t iv[16] = { };",
+                $"static const uint8_t iv[16] = {{ {string.Join(", ", ivBytes.Select(b => b.ToString()))} }};");
+        }
+
+        return final.Replace("void attach_imported_functions(){}", sb.ToString());
     }
 
     public static MethodDefinition[] GetExportedMethods(TypeDefinition[] types)
@@ -53,11 +72,17 @@ public class CApiGenerator
     {
         var importedMethods = types
             .SelectMany(t => t.Methods)
-            .Where(m => m.IsStatic && m.ImplAttributes == MethodImplAttributes.InternalCall)
+            .Where(m => m.IsStatic && m.ImplAttributes == MethodImplAttributes.InternalCall && !IsExcluded(m))
             .ToArray();
         return importedMethods;
     }
 
+    private static bool IsExcluded(MethodDefinition method)
+    {
+        return excluded.Any(ex => method.Name.StartsWith(ex, StringComparison.OrdinalIgnoreCase) ||
+                           method.DeclaringType.FullName.StartsWith(ex, StringComparison.OrdinalIgnoreCase));
+    }
+
     public List<AssemblyDefinition> LoadAssemblies(AssemblyDefinition assembly, string directory)
     {
         var assemblies = assembly.MainModule.AssemblyReferences

+ 99 - 0
src/PixiEditor.Api.CGlueMSBuild/EncryptResourcesTask.cs

@@ -0,0 +1,99 @@
+using System.IO.Compression;
+using System.Security.Cryptography;
+using Microsoft.Build.Framework;
+
+namespace PixiEditor.Api.CGlueMSBuild;
+
+public class EncryptResourcesTask : Microsoft.Build.Utilities.Task
+{
+    [Required] public string ResourcesPath { get; set; }
+
+    [Required] public string IntermediateOutputPath { get; set; } = string.Empty;
+
+    [Required] public string OutputPath { get; set; } = string.Empty;
+
+    [Output] public string EncryptionKey { get; set; } = string.Empty;
+
+    [Output] public string EncryptionIv { get; set; } = string.Empty;
+
+    public override bool Execute()
+    {
+        try
+        {
+            if (!Directory.Exists(ResourcesPath))
+            {
+                Log.LogError($"Resources directory does not exist: {ResourcesPath}");
+                return false;
+            }
+
+            string[] files = Directory.GetFiles(ResourcesPath, "*.*", SearchOption.AllDirectories);
+
+            if (files.Length == 0)
+            {
+                return true;
+            }
+
+            string path = Path.Combine(IntermediateOutputPath, "resources.zip");
+
+            if (File.Exists(path))
+            {
+                File.Delete(path);
+            }
+
+            ZipFile.CreateFromDirectory(ResourcesPath, path,
+                CompressionLevel.Fastest, false);
+            byte[] data = File.ReadAllBytes(Path.Combine(IntermediateOutputPath, "resources.zip"));
+            byte[] encryptionKey = new byte[128 / 8];
+            byte[] iv = new byte[128 / 8];
+            if (EncryptionKey == string.Empty)
+            {
+                RandomNumberGenerator.Create().GetBytes(encryptionKey);
+                EncryptionKey = Convert.ToBase64String(encryptionKey);
+            }
+
+            if (EncryptionIv == string.Empty)
+            {
+                RandomNumberGenerator.Create().GetBytes(iv);
+                EncryptionIv = Convert.ToBase64String(iv);
+            }
+
+            byte[] encryptedData = Encrypt(data, encryptionKey, iv);
+            File.WriteAllBytes(Path.Combine(OutputPath, "resources.data"), encryptedData);
+
+            return true;
+        }
+        catch (Exception ex)
+        {
+            Log.LogErrorFromException(ex);
+            return false;
+        }
+    }
+
+    public byte[] Encrypt(byte[] data, byte[] key, byte[] iv)
+    {
+        using var aes = Aes.Create();
+        aes.KeySize = 128;
+        aes.BlockSize = 128;
+        aes.Padding = PaddingMode.Zeros;
+
+        aes.Key = key;
+        aes.IV = iv;
+
+        using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV))
+        {
+            return PerformCryptography(data, encryptor);
+        }
+    }
+
+    private byte[] PerformCryptography(byte[] data, ICryptoTransform cryptoTransform)
+    {
+        using (var ms = new MemoryStream())
+        using (var cryptoStream = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Write))
+        {
+            cryptoStream.Write(data, 0, data.Length);
+            cryptoStream.FlushFinalBlock();
+
+            return ms.ToArray();
+        }
+    }
+}

+ 11 - 2
src/PixiEditor.Api.CGlueMSBuild/GenerateCGlueTask.cs

@@ -1,4 +1,5 @@
-using Microsoft.Build.Framework;
+using System.Runtime.InteropServices;
+using Microsoft.Build.Framework;
 using Mono.Cecil;
 
 namespace PixiEditor.Api.CGlueMSBuild
@@ -23,6 +24,14 @@ namespace PixiEditor.Api.CGlueMSBuild
         [Required]
         public string InteropCFilePath { get; set; } = default!;
 
+        public string EncryptionKey { get; set; } = string.Empty;
+
+        public string EncryptionIv { get; set; } = string.Empty;
+
+        /// <summary>
+        ///     /// Encryption key for resources.
+        /// </summary>
+
         public override bool Execute()
         {
             try
@@ -47,7 +56,7 @@ namespace PixiEditor.Api.CGlueMSBuild
                     }
                 }
 
-                var generator = new CApiGenerator(File.ReadAllText(InteropCFilePath), (message) => Log.LogMessage(MessageImportance.High, message));
+                var generator = new CApiGenerator(File.ReadAllText(InteropCFilePath), EncryptionKey, EncryptionIv, (message) => Log.LogMessage(MessageImportance.High, message));
 
                 string directory = Path.GetDirectoryName(AssemblyPath)!;
 

+ 4 - 0
src/PixiEditor.ChangeableDocument/ChangeInfos/Animation/DefaultEndFrame_ChangeInfo.cs

@@ -0,0 +1,4 @@
+namespace PixiEditor.ChangeableDocument.ChangeInfos.Animation;
+
+public record DefaultEndFrame_ChangeInfo(int NewDefaultEndFrame) : IChangeInfo;
+

+ 1 - 0
src/PixiEditor.ChangeableDocument/Changeables/Animations/AnimationData.cs

@@ -7,6 +7,7 @@ internal class AnimationData : IReadOnlyAnimationData
 {
     public int FrameRate { get; set; } = 24;
     public int OnionFrames { get; set; } = 1;
+    public int DefaultEndFrame { get; set; } = 24;
     public IReadOnlyList<IReadOnlyKeyFrame> KeyFrames => keyFrames;
     public double OnionOpacity { get; set; } = 50;
 

+ 4 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Matrix/TransformNode.cs

@@ -28,7 +28,10 @@ public class TransformNode : Matrix3X3BaseNode
             return arg.Builder.AssignNewFloat2(new Expression($"{transformed.ExpressionValue}.xy / {transformed.ExpressionValue}.z"));
         }
 
-        return null;
+        Float3x3 contextlessMatrix = CalculateMatrix(arg, arg.GetValue(Input));
+        Float2 contextlessPosition = (arg.GetValue(Position).GetConstant() as VecD?) ?? VecD.Zero;
+        return contextlessMatrix.ConstantValue.MapPoint(
+            (float)contextlessPosition.X, (float)contextlessPosition.Y);
     }
 
     public override Node CreateCopy()

+ 12 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/VectorLayerNode.cs

@@ -186,7 +186,18 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
 
     public void Rasterize(DrawingSurface surface, Paint paint)
     {
-        int layer = surface.Canvas.SaveLayer(paint);
+        int layer;
+        // TODO: This can be further optimized by passing opacity, blend mode and filters directly to the rasterization method
+        if (paint.Color.A < 255 || paint.ColorFilter != null || paint.ImageFilter != null || paint.Shader != null ||
+            paint.BlendMode != Drawie.Backend.Core.Surfaces.BlendMode.SrcOver)
+        {
+            layer = surface.Canvas.SaveLayer(paint);
+        }
+        else
+        {
+            layer = surface.Canvas.Save();
+        }
+        
         RenderableShapeData?.RasterizeTransformed(surface.Canvas);
 
         surface.Canvas.RestoreToCount(layer);

+ 1 - 0
src/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlyAnimationData.cs

@@ -6,5 +6,6 @@ public interface IReadOnlyAnimationData
     public IReadOnlyList<IReadOnlyKeyFrame> KeyFrames { get; }
     public int OnionFrames { get; }
     public double OnionOpacity { get; }
+    public int DefaultEndFrame { get; }
     public bool TryFindKeyFrame<T>(Guid id, out T keyFrame) where T : IReadOnlyKeyFrame;
 }

+ 5 - 0
src/PixiEditor.ChangeableDocument/Changes/Animation/CreateCel_Change.cs

@@ -40,6 +40,11 @@ internal class CreateCel_Change : Change
             {
                 return false;
             }
+
+            if (targetLayer.KeyFrames.First()?.KeyFrameGuid == createdKeyFrameId)
+            {
+                return false;
+            }
         }
         
         return _frame != 0 && target.TryFindMember(_targetLayerGuid, out _layer);

+ 12 - 0
src/PixiEditor.ChangeableDocument/Changes/Animation/KeyFrameLength_UpdateableChange.cs

@@ -1,4 +1,5 @@
 using PixiEditor.ChangeableDocument.Changeables.Animations;
+using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
 using PixiEditor.ChangeableDocument.ChangeInfos.Animation;
 
 namespace PixiEditor.ChangeableDocument.Changes.Animation;
@@ -31,6 +32,17 @@ internal class KeyFrameLength_UpdateableChange : UpdateableChange
     {
         if (target.AnimationData.TryFindKeyFrame<KeyFrame>(KeyFrameGuid, out KeyFrame frame))
         {
+            var node = target.FindNode<Node>(frame.NodeId);
+            if (node is null)
+            {
+                return false;
+            }
+
+            if (node.KeyFrames.FirstOrDefault()?.KeyFrameGuid == frame.Id)
+            {
+                return false;
+            }
+
             originalStartFrame = frame.StartFrame;
             originalDuration = frame.Duration;
             return true;

+ 28 - 12
src/PixiEditor.ChangeableDocument/Changes/Animation/KeyFramesStartPos_UpdateableChange.cs

@@ -1,17 +1,20 @@
 using PixiEditor.ChangeableDocument.Changeables.Animations;
+using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
 using PixiEditor.ChangeableDocument.ChangeInfos.Animation;
 
 namespace PixiEditor.ChangeableDocument.Changes.Animation;
 
 internal class KeyFramesStartPos_UpdateableChange : InterruptableUpdateableChange
 {
-    public Guid[] KeyFramesGuid { get;  }
+    public Guid[] KeyFramesGuid { get; }
     public int Delta { get; set; }
-    
+
     private Dictionary<Guid, int> originalStartFrames = new();
-    
+
     [GenerateUpdateableChangeActions]
-    public KeyFramesStartPos_UpdateableChange(List<Guid> keyFramesGuid, int delta) // do not delete, code generator uses this for update method
+    public
+        KeyFramesStartPos_UpdateableChange(List<Guid> keyFramesGuid,
+            int delta) // do not delete, code generator uses this for update method
     {
         KeyFramesGuid = keyFramesGuid.ToArray();
         Delta = 0;
@@ -22,13 +25,24 @@ internal class KeyFramesStartPos_UpdateableChange : InterruptableUpdateableChang
     {
         Delta += delta;
     }
-    
+
     public override bool InitializeAndValidate(Document target)
     {
         foreach (Guid keyFrameGuid in KeyFramesGuid)
         {
             if (target.AnimationData.TryFindKeyFrame(keyFrameGuid, out KeyFrame keyFrame))
             {
+                var node = target.FindNode<Node>(keyFrame.NodeId);
+                if (node is null)
+                {
+                    return false;
+                }
+
+                if (node.KeyFrames.FirstOrDefault()?.KeyFrameGuid == keyFrameGuid)
+                {
+                    return false;
+                }
+
                 originalStartFrames[keyFrameGuid] = keyFrame.StartFrame;
             }
             else
@@ -39,7 +53,7 @@ internal class KeyFramesStartPos_UpdateableChange : InterruptableUpdateableChang
 
         return true;
     }
-    
+
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> ApplyTemporarily(Document target)
     {
         List<IChangeInfo> changes = new();
@@ -49,11 +63,12 @@ internal class KeyFramesStartPos_UpdateableChange : InterruptableUpdateableChang
             keyFrame.StartFrame = originalStartFrames[keyFrameGuid] + Delta;
             changes.Add(new KeyFrameLength_ChangeInfo(keyFrameGuid, keyFrame.StartFrame, keyFrame.Duration));
         }
-        
+
         return changes;
     }
 
-    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
+    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply,
+        out bool ignoreInUndo)
     {
         List<IChangeInfo> changes = new();
         foreach (Guid keyFrameGuid in KeyFramesGuid)
@@ -62,7 +77,7 @@ internal class KeyFramesStartPos_UpdateableChange : InterruptableUpdateableChang
             keyFrame.StartFrame = originalStartFrames[keyFrameGuid] + Delta;
             changes.Add(new KeyFrameLength_ChangeInfo(keyFrameGuid, keyFrame.StartFrame, keyFrame.Duration));
         }
-        
+
         ignoreInUndo = false;
         return changes;
     }
@@ -76,12 +91,13 @@ internal class KeyFramesStartPos_UpdateableChange : InterruptableUpdateableChang
             keyFrame.StartFrame = originalStartFrames[keyFrameGuid];
             changes.Add(new KeyFrameLength_ChangeInfo(keyFrameGuid, keyFrame.StartFrame, keyFrame.Duration));
         }
-        
+
         return changes;
     }
-    
+
     public override bool IsMergeableWith(Change other)
     {
-        return other is KeyFramesStartPos_UpdateableChange otherChange && otherChange.KeyFramesGuid.SequenceEqual(KeyFramesGuid);
+        return other is KeyFramesStartPos_UpdateableChange otherChange &&
+               otherChange.KeyFramesGuid.SequenceEqual(KeyFramesGuid);
     }
 }

+ 53 - 0
src/PixiEditor.ChangeableDocument/Changes/Animation/SetDefaultEndFrame_Change.cs

@@ -0,0 +1,53 @@
+using PixiEditor.ChangeableDocument.ChangeInfos.Animation;
+
+namespace PixiEditor.ChangeableDocument.Changes.Animation;
+
+internal class SetDefaultEndFrame_Change : Change
+{
+    public int NewDefaultEndFrame { get; }
+
+    private int originalDefaultEndFrame;
+
+    [GenerateMakeChangeAction]
+    public SetDefaultEndFrame_Change(int newDefaultEndFrame)
+    {
+        NewDefaultEndFrame = newDefaultEndFrame;
+    }
+
+    public override bool InitializeAndValidate(Document target)
+    {
+        if (target.AnimationData is null)
+        {
+            return false;
+        }
+
+        if (NewDefaultEndFrame < 0)
+        {
+            return false;
+        }
+
+        originalDefaultEndFrame = target.AnimationData.DefaultEndFrame;
+
+        return true;
+    }
+
+    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
+    {
+        ignoreInUndo = false;
+
+        if (target.AnimationData is null)
+        {
+            return new None();
+        }
+
+        target.AnimationData.DefaultEndFrame = NewDefaultEndFrame;
+
+        return new DefaultEndFrame_ChangeInfo(NewDefaultEndFrame);
+    }
+
+    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
+    {
+        target.AnimationData.DefaultEndFrame = originalDefaultEndFrame;
+        return new DefaultEndFrame_ChangeInfo(originalDefaultEndFrame);
+    }
+}

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillHelper.cs

@@ -71,7 +71,7 @@ public static class FloodFillHelper
 
             var fixedColor = drawingColor.TransformColor(srgbTransform);
             uLongColor = fixedColor.ToULong();
-            colorSpaceCorrectedColor = fixedColor;
+            colorSpaceCorrectedColor = (Color)fixedColor;
         }
 
         if ((colorSpaceCorrectedColor.A == 0) || colorToReplace == colorSpaceCorrectedColor)

+ 7 - 1
src/PixiEditor.ChangeableDocument/Changes/Drawing/TransformSelected_UpdateableChange.cs

@@ -80,7 +80,13 @@ internal class TransformSelected_UpdateableChange : InterruptableUpdateableChang
                 tightBoundsSize - masterCorners.RectSize);
         }
 
-        StructureNode firstLayer = target.FindMemberOrThrow(memberData[0].MemberId);
+        var foundMember = target.FindMember(memberData[0].MemberId);
+        if (foundMember is null)
+        {
+            return false;
+        }
+
+        StructureNode firstLayer = foundMember;
         RectD tightBounds = firstLayer.GetTightBounds(frame) ?? default;
 
         if (memberData.Count == 1 && firstLayer is VectorLayerNode vectorLayer)

+ 1 - 1
src/PixiEditor.ChangeableDocument/PixiEditor.ChangeableDocument.csproj

@@ -6,7 +6,7 @@
     <Nullable>enable</Nullable>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
-    <Configurations>Debug;Release;Steam;DevRelease;DevSteam</Configurations>
+    <Configurations>Debug;Release;Steam;DevRelease;DevSteam;DebugSteam</Configurations>
     <Platforms>AnyCPU;x64</Platforms>
   </PropertyGroup>
 

+ 1 - 1
src/PixiEditor.Extensions.CommonApi/.config/dotnet-tools.json

@@ -3,7 +3,7 @@
   "isRoot": true,
   "tools": {
     "protobuf-net.protogen": {
-      "version": "3.2.42",
+      "version": "3.2.52",
       "commands": [
         "protogen"
       ],

+ 10 - 0
src/PixiEditor.Extensions.CommonApi/FlyUI/LayoutElementIdGenerator.cs

@@ -3,10 +3,20 @@
 public static class LayoutElementIdGenerator
 {
     private static int _lastId = -1;
+    
+    public static int CurrentId => _lastId;
 
     public static int GetNextId()
     {
         _lastId++;
         return _lastId;
     }
+
+    public static void SetId(int id)
+    {
+        if (id > _lastId)
+        {
+            _lastId = id;
+        }
+    }
 }

+ 2 - 0
src/PixiEditor.Extensions.CommonApi/IO/IDocumentProvider.cs

@@ -6,5 +6,7 @@ public interface IDocumentProvider
 {
    public IDocument? ActiveDocument { get; }
    public IDocument? ImportFile(string path, bool associatePath = true);
+   public IDocument? ImportDocument(byte[] data);
+
    public IDocument? GetDocument(Guid id);
 }

+ 3 - 1
src/PixiEditor.Extensions.CommonApi/Palettes/FilteringSettings.Impl.cs

@@ -6,6 +6,7 @@ public partial class FilteringSettings
     {
 
     }
+    
     public FilteringSettings(ColorsNumberMode colorsNumberMode, int colorsCount, string name, bool showOnlyFavourites, List<string> favourites)
     {
         ColorsNumberMode = colorsNumberMode;
@@ -18,7 +19,8 @@ public partial class FilteringSettings
     public bool Filter(IPalette palette)
     {
         // Lexical comparison
-        bool result = string.IsNullOrWhiteSpace(Name) || palette.Name.Contains(Name, StringComparison.OrdinalIgnoreCase);
+        bool result = string.IsNullOrWhiteSpace(Name) ||
+                      palette.Name.Contains(Name, StringComparison.OrdinalIgnoreCase);
 
         if (!result)
         {

+ 23 - 21
src/PixiEditor.Extensions.CommonApi/PixiEditor.Extensions.CommonApi.csproj

@@ -1,23 +1,25 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
-    <PropertyGroup>
-        <TargetFramework>net8.0</TargetFramework>
-        <ImplicitUsings>enable</ImplicitUsings>
-        <Nullable>disable</Nullable>
-    </PropertyGroup>
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>disable</Nullable>
+    <PackageId>PixiEditor.Extensions.CommonApi</PackageId>
+    <PackageVersion>0.0.1.1-dev</PackageVersion>
+  </PropertyGroup>
 
-    <ItemGroup>
-      <Folder Include="Preferences\" />
-    </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Preferences\"/>
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="protobuf-net" Version="3.2.52"/>
+  </ItemGroup>
 
-    <ItemGroup>
-      <PackageReference Include="protobuf-net" Version="3.2.45" />
-    </ItemGroup>
-  
   <PropertyGroup>
-    <ProtogenVersion>3.2.42</ProtogenVersion>
+    <ProtogenVersion>3.2.52</ProtogenVersion>
   </PropertyGroup>
-  
+
   <Target Name="ProtogenCheck" BeforeTargets="GenerateProtoContracts">
     <PropertyGroup>
       <ProtogenExists>false</ProtogenExists>
@@ -29,7 +31,7 @@
       <ProtogenExists Condition="'$(ProtogenExitCode)' == '0'">true</ProtogenExists>
     </PropertyGroup>
   </Target>
-  
+
   <Target Name="InstallProtogen" BeforeTargets="GenerateProtoContracts"
           Condition="'$(ProtogenExists)' != 'true'">
     <Message Text="Downloading protogen v$(ProtogenVersion)..." Importance="high"/>
@@ -37,11 +39,11 @@
     <PropertyGroup>
       <ProtogenExists>true</ProtogenExists>
     </PropertyGroup>
-    
+
     <Message Text="protogen installed successfully." Importance="high"/>
   </Target>
-    
-  
+
+
   <Target Name="GenerateProtoContracts" BeforeTargets="BeforeCompile"
           Inputs="$(MSBuildProjectDirectory)\DataContracts\*.proto"
           Outputs="$(MSBuildProjectDirectory)\ProtoAutogen\*.cs">
@@ -53,7 +55,7 @@
 
   </Target>
 
-    <ItemGroup>
-      <ProjectReference Include="..\PixiEditor.Extensions.CommonApi.Diagnostics\PixiEditor.Extensions.CommonApi.Diagnostics.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
-    </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\PixiEditor.Extensions.CommonApi.Diagnostics\PixiEditor.Extensions.CommonApi.Diagnostics.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
+  </ItemGroup>
 </Project>

+ 10 - 0
src/PixiEditor.Extensions.CommonApi/Ui/IVisualTreeProvider.cs

@@ -0,0 +1,10 @@
+using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.CommonApi.Windowing;
+
+namespace PixiEditor.Extensions.CommonApi.Ui;
+
+public interface IVisualTreeProvider
+{
+    public ILayoutElement<T>? FindElement<T>(string name);
+    public ILayoutElement<T>? FindElement<T>(string name, IPopupWindow root);
+}

+ 11 - 0
src/PixiEditor.Extensions.CommonApi/User/IUserDataProvider.cs

@@ -0,0 +1,11 @@
+namespace PixiEditor.Extensions.CommonApi.User;
+
+public interface IUserDataProvider
+{
+    public bool IsLoggedIn { get; }
+    public string Username { get; }
+    public string AccountProviderName { get; }
+    public string[] GetOwnedContent();
+    public event Action UserLoggedIn;
+    public event Action UserLoggedOut;
+}

+ 6 - 1
src/PixiEditor.Extensions.CommonApi/Windowing/IWindowProvider.cs

@@ -7,10 +7,15 @@ public interface IWindowProvider
     public IPopupWindow CreatePopupWindow(string title, object body);
     public IPopupWindow GetWindow(BuiltInWindowType type);
     public IPopupWindow GetWindow(string windowId);
+    public void SubscribeWindowOpened(BuiltInWindowType type, Action<IPopupWindow> action);
 }
 
 public enum BuiltInWindowType
 {
     [Description("PalettesBrowser")]
-    PalettesBrowser
+    PalettesBrowser,
+    [Description("HelloTherePopup")]
+    StartupWindow,
+    [Description("LoginPopup")]
+    AccountManagement,
 }

+ 4 - 2
src/PixiEditor.Extensions.MSPackageBuilder/BuildPackageTask.cs

@@ -10,12 +10,14 @@ public class BuildPackageTask : Microsoft.Build.Utilities.Task
     
     [Required]
     public string TargetDirectory { get; set; } = default!;
-    
+
+    public string EncryptionKey { get; set; }
+
     public override bool Execute()
     {
         try
         {
-            PackageBuilder.Build(BuildResultDirectory, TargetDirectory);
+            PackageBuilder.Build(BuildResultDirectory, TargetDirectory, !string.IsNullOrEmpty(EncryptionKey));
         }
         catch (Exception e)
         {

+ 24 - 4
src/PixiEditor.Extensions.MSPackageBuilder/PackageBuilder.cs

@@ -17,7 +17,7 @@ public static class PackageBuilder
 
     private static readonly string[] FilesToExclude = new[] { "dotnet.wasm", };
 
-    public static void Build(string buildResultDirectory, string targetDirectory)
+    public static void Build(string buildResultDirectory, string targetDirectory, bool encryptedResources)
     {
         if (!Directory.Exists(buildResultDirectory))
         {
@@ -46,15 +46,34 @@ public static class PackageBuilder
             JsonConvert.DeserializeObject<SimplifiedExtensionMetadata>(
                 File.ReadAllText(Path.Combine(buildResultDirectory, "extension.json")));
 
-        foreach (ElementToInclude element in ElementsToInclude)
+        var elementsToInclude = new List<ElementToInclude>(ElementsToInclude);
+        if(encryptedResources)
         {
+            elementsToInclude.Add(new ElementToInclude("resources.data", true) { TargetDirectory = "Resources" });
+            elementsToInclude.RemoveAll(x => x.Path == "Resources/");
+        }
+
+        foreach (ElementToInclude element in elementsToInclude)
+        {
+            if (!string.IsNullOrEmpty(element.TargetDirectory))
+            {
+                if (!Directory.Exists(Path.Combine(targetTmpDirectory, element.TargetDirectory)))
+                {
+                    Directory.CreateDirectory(Path.Combine(targetTmpDirectory, element.TargetDirectory));
+                }
+            }
+
+            string finalDir = string.IsNullOrEmpty(element.TargetDirectory)
+                ? targetTmpDirectory
+                : Path.Combine(targetTmpDirectory, element.TargetDirectory);
+
             if (element.Type == ElementToIncludeType.File)
             {
-                CopyFile(element.Path, buildResultDirectory, targetTmpDirectory, element.IsRequired);
+                CopyFile(element.Path, buildResultDirectory, finalDir, element.IsRequired);
             }
             else
             {
-                CopyDirectory(element.Path, buildResultDirectory, targetTmpDirectory, element.IsRequired, metadata);
+                CopyDirectory(element.Path, buildResultDirectory, finalDir, element.IsRequired, metadata);
             }
         }
 
@@ -158,6 +177,7 @@ public static class PackageBuilder
 record ElementToInclude
 {
     public string Path { get; set; }
+    public string? TargetDirectory { get; set; }
     public bool IsRequired { get; set; }
 
     public ElementToIncludeType Type => Path.EndsWith("/") ? ElementToIncludeType.Directory : ElementToIncludeType.File;

+ 51 - 80
src/PixiEditor.Extensions.Runtime/ExtensionLoader.cs

@@ -10,15 +10,18 @@ namespace PixiEditor.Extensions.Runtime;
 
 public class ExtensionLoader
 {
-    private readonly Dictionary<string, OfficialExtensionData> _officialExtensionsKeys =
-        new Dictionary<string, OfficialExtensionData>();
-
     public List<Extension> LoadedExtensions { get; } = new();
 
     public string[] PackagesPath { get; }
     public string UnpackedExtensionsPath { get; }
 
+    public ExtensionServices Services { get; set; }
+    public event Action<string> ExtensionLoaded;
+
     private WasmRuntime.WasmRuntime _wasmRuntime = new WasmRuntime.WasmRuntime();
+    private HashSet<string> loadedExtensions = new HashSet<string>();
+
+
 
     public ExtensionLoader(string[] packagesPaths, string unpackedExtensionsPath)
     {
@@ -27,11 +30,6 @@ public class ExtensionLoader
         ValidateExtensionFolder();
     }
 
-    public void AddOfficialExtension(string uniqueName, OfficialExtensionData data)
-    {
-        _officialExtensionsKeys.Add(uniqueName, data);
-    }
-
     public void LoadExtensions()
     {
         foreach (var packagesPath in PackagesPath)
@@ -96,12 +94,51 @@ public class ExtensionLoader
         }
     }
 
+    public void InvokeOnUserReady()
+    {
+        foreach (var extension in LoadedExtensions)
+        {
+            try
+            {
+                extension.UserReady();
+            }
+            catch (Exception ex)
+            {
+#if DEBUG
+                throw;
+#endif
+            }
+        }
+    }
+
+    public void InvokeMainWindowLoaded()
+    {
+        foreach (var extension in LoadedExtensions)
+        {
+            try
+            {
+                extension.MainWindowLoaded();
+            }
+            catch (Exception ex)
+            {
+#if DEBUG
+                throw;
+#endif
+            }
+        }
+    }
+
     public Extension? LoadExtension(string extension)
     {
         var extZip = ZipFile.OpenRead(extension);
         try
         {
             ExtensionMetadata metadata = ExtractMetadata(extZip);
+            if (loadedExtensions.Contains(metadata.UniqueName))
+            {
+                return null; // Already loaded
+            }
+
             if (IsDifferentThanCached(metadata, extension))
             {
                 UnpackExtension(extZip, metadata);
@@ -236,6 +273,8 @@ public class ExtensionLoader
         var extension = LoadExtensionEntry(entry, metadata);
         extension.Load();
         LoadedExtensions.Add(extension);
+        loadedExtensions.Add(metadata.UniqueName);
+        ExtensionLoaded?.Invoke(metadata.UniqueName);
         return extension;
     }
 
@@ -271,10 +310,11 @@ public class ExtensionLoader
 
         if (fixedUniqueName.StartsWith("pixieditor".Trim(), StringComparison.OrdinalIgnoreCase))
         {
-            if (!IsOfficialAssemblyLegit(fixedUniqueName, assembly))
+            // Validate within extension store
+            /*if (!IsOfficialAssemblyLegit(fixedUniqueName, assembly))
             {
                 throw new ForbiddenUniqueNameExtension();
-            }
+            }*/
 
             if (!IsAdditionalContentInstalled(fixedUniqueName))
             {
@@ -298,66 +338,9 @@ public class ExtensionLoader
 
     private bool IsAdditionalContentInstalled(string fixedUniqueName)
     {
-        if (!_officialExtensionsKeys.ContainsKey(fixedUniqueName)) return false;
-        AdditionalContentProduct? product = _officialExtensionsKeys[fixedUniqueName].Product;
-
-        if (product == null) return true;
-
-        return IPlatform.Current.AdditionalContentProvider?.IsContentInstalled(product.Value) ?? false;
+        return IPlatform.Current.AdditionalContentProvider?.IsInstalled(fixedUniqueName) ?? false;
     }
 
-    private bool IsOfficialAssemblyLegit(string metadataUniqueName, ExtensionEntry entry)
-    {
-        if (entry == null) return false; // All official extensions must have a valid assembly
-        if (!_officialExtensionsKeys.ContainsKey(metadataUniqueName)) return false;
-
-        if (entry is DllExtensionEntry dllExtensionEntry)
-        {
-            return VerifyAssemblySignature(metadataUniqueName, dllExtensionEntry.Assembly);
-        }
-
-        if (entry is WasmExtensionEntry wasmExtensionEntry)
-        {
-            return true;
-            //TODO: Verify wasm signature somehow
-            //return VerifyAssemblySignature(metadataUniqueName, wasmExtensionEntry.Instance);
-        }
-
-        return false;
-    }
-
-    private bool VerifyAssemblySignature(string metadataUniqueName, Assembly assembly)
-    {
-        bool wasVerified = false;
-        bool verified = StrongNameSignatureVerificationEx(assembly.Location, true, ref wasVerified);
-        if (!verified || !wasVerified) return false;
-
-        byte[]? assemblyPublicKey = assembly.GetName().GetPublicKey();
-        if (assemblyPublicKey == null) return false;
-
-        return PublicKeysMatch(assemblyPublicKey, _officialExtensionsKeys[metadataUniqueName].PublicKeyName);
-    }
-
-    private bool PublicKeysMatch(byte[] assemblyPublicKey, string pathToPublicKey)
-    {
-        Assembly currentAssembly = Assembly.GetExecutingAssembly();
-        using Stream? stream =
-            currentAssembly.GetManifestResourceStream(
-                $"{currentAssembly.GetName().Name}.OfficialExtensions.{pathToPublicKey}");
-        if (stream == null) return false;
-
-        using MemoryStream memoryStream = new MemoryStream();
-        stream.CopyTo(memoryStream);
-        byte[] publicKey = memoryStream.ToArray();
-
-        return assemblyPublicKey.SequenceEqual(publicKey);
-    }
-
-    //TODO: uhh, other platforms dumbass?
-    [DllImport("mscoree.dll", CharSet = CharSet.Unicode)]
-    static extern bool StrongNameSignatureVerificationEx(string wszFilePath, bool fForceVerification,
-        ref bool pfWasVerified);
-
     private Extension LoadExtensionEntry(ExtensionEntry entry, ExtensionMetadata metadata)
     {
         Extension extension = entry.CreateExtension();
@@ -443,17 +426,5 @@ public class ExtensionLoader
 
         return null;
     }
-}
 
-public struct OfficialExtensionData
-{
-    public string PublicKeyName { get; }
-    public AdditionalContentProduct? Product { get; }
-    public string? PurchaseLink { get; }
-
-    public OfficialExtensionData(string publicKeyName, AdditionalContentProduct product, string? purchaseLink = null)
-    {
-        PublicKeyName = publicKeyName;
-        Product = product;
-    }
 }

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Align.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Align")]
 public class Align : SingleChildLayoutElement
 {
     public Alignment Alignment { get; set; }
@@ -15,7 +17,7 @@ public class Align : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, "Align");
+        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, GetType());
         controlDefinition.AddProperty((int)Alignment);
         
         if (Child != null)

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Border.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Border")]
 public class Border : SingleChildLayoutElement
 {
     public Color Color { get; set; }
@@ -38,7 +40,7 @@ public class Border : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition controlDefinition = new(UniqueId, "Border");
+        ControlDefinition controlDefinition = new(UniqueId, GetType());
         if (Child != null)
         {
             controlDefinition.Children.Add(Child.BuildNative());

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Button.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Events;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Button")]
 public class Button : SingleChildLayoutElement
 {
     public event ElementEventHandler Click
@@ -20,7 +22,7 @@ public class Button : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition button = new ControlDefinition(UniqueId, "Button");
+        ControlDefinition button = new ControlDefinition(UniqueId, GetType());
         if (Child != null)
             button.AddChild(Child.BuildNative());
 

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Center.cs

@@ -1,7 +1,9 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Center")]
 public class Center : SingleChildLayoutElement
 {
     public Center(ILayoutElement<ControlDefinition> child, Cursor? cursor = null) : base(cursor)
@@ -11,7 +13,7 @@ public class Center : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition center = new ControlDefinition(UniqueId, "Center");
+        ControlDefinition center = new ControlDefinition(UniqueId, GetType());
 
         if (Child != null)
             center.AddChild(Child.BuildNative());

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/CheckBox.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Events;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("CheckBox")]
 public class CheckBox : SingleChildLayoutElement
 {
     public event ElementEventHandler CheckedChanged
@@ -35,7 +37,7 @@ public class CheckBox : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition checkbox = new ControlDefinition(UniqueId, "CheckBox");
+        ControlDefinition checkbox = new ControlDefinition(UniqueId, GetType());
         if (Child != null)
             checkbox.AddChild(Child.BuildNative());
 

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Column.cs

@@ -1,7 +1,9 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Column")]
 public class Column : MultiChildLayoutElement
 {
     public MainAxisAlignment MainAxisAlignment { get; set; }
@@ -26,7 +28,7 @@ public class Column : MultiChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, "Column");
+        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, GetType());
         controlDefinition.AddProperty(MainAxisAlignment);
         controlDefinition.AddProperty(CrossAxisAlignment);
         controlDefinition.Children.AddRange(Children.Where(x => x != null).Select(x => x.BuildNative()));

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Container.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Container")]
 public class Container : SingleChildLayoutElement
 {
     public Edges Margin { get; set; }
@@ -22,7 +24,7 @@ public class Container : SingleChildLayoutElement
     
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition container = new ControlDefinition(UniqueId, "Container");
+        ControlDefinition container = new ControlDefinition(UniqueId, GetType());
         container.AddProperty(Margin);
 
         container.AddProperty(BackgroundColor);

+ 4 - 2
src/PixiEditor.Extensions.Sdk/Api/FlyUI/ControlDefinition.cs

@@ -3,6 +3,7 @@ using System.Runtime.InteropServices;
 using System.Text;
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
@@ -16,9 +17,10 @@ public class ControlDefinition
 
     private List<string> _buildQueuedEvents = new List<string>();
 
-    public ControlDefinition(int uniqueId, string controlTypeId)
+    public ControlDefinition(int uniqueId, Type type)
     {
-        ControlTypeId = controlTypeId;
+        ControlTypeId = type.GetCustomAttribute<ControlTypeIdAttribute>()?.TypeId
+            ?? throw new ArgumentException($"Type {type.FullName} does not have ControlTypeIdAttribute");
         UniqueId = uniqueId;
     }
 

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Hyperlink.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Hyperlink")]
 public class Hyperlink : Text
 {
     public string Url { get; set; }
@@ -14,7 +16,7 @@ public class Hyperlink : Text
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition hyperlink = new ControlDefinition(UniqueId, "Hyperlink");
+        ControlDefinition hyperlink = new ControlDefinition(UniqueId, GetType());
         hyperlink.AddProperty(Value);
         hyperlink.AddProperty(TextWrap);
         hyperlink.AddProperty(TextStyle);

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Icon.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Icon")]
 public class Icon : LayoutElement
 {
     public string IconName { get; set; }
@@ -19,7 +21,7 @@ public class Icon : LayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition icon = new ControlDefinition(UniqueId, "Icon");
+        ControlDefinition icon = new ControlDefinition(UniqueId, GetType());
         icon.AddProperty(IconName);
         icon.AddProperty(Size);
         icon.AddProperty(Color);

+ 4 - 9
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Image.cs

@@ -1,9 +1,11 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 using PixiEditor.Extensions.Sdk.Bridge;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Image")]
 public class Image : LayoutElement
 {
     private string source = null!;
@@ -13,14 +15,7 @@ public class Image : LayoutElement
         get => source;
         set
         {
-            if (value.StartsWith("/") || value.StartsWith("/Resources/") || value.StartsWith("Resources/"))
-            {
-                source = Native.to_resources_full_path(value);    
-            }
-            else
-            {
-                source = value;
-            }
+            source = value;
         }
     }
 
@@ -40,7 +35,7 @@ public class Image : LayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition image = new ControlDefinition(UniqueId, "Image");
+        ControlDefinition image = new ControlDefinition(UniqueId, GetType());
         
         image.AddProperty(Source);
         image.AddProperty(Width);

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Layout.cs

@@ -1,7 +1,9 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Layout")]
 public sealed class Layout : SingleChildLayoutElement
 {
     public Layout(ILayoutElement<ControlDefinition> body = null)
@@ -11,7 +13,7 @@ public sealed class Layout : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition layout = new ControlDefinition(UniqueId, "Layout");
+        ControlDefinition layout = new ControlDefinition(UniqueId, GetType());
 
         if (Child != null)
             layout.AddChild(Child.BuildNative());

+ 18 - 0
src/PixiEditor.Extensions.Sdk/Api/FlyUI/NativeElement.cs

@@ -0,0 +1,18 @@
+using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.Sdk.Attributes;
+
+namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
+
+[ControlTypeId("NativeElement")]
+public class NativeElement : LayoutElement
+{
+    public NativeElement(Cursor? cursor) : base(cursor)
+    {
+    }
+
+    protected override ControlDefinition CreateControl()
+    {
+        ControlDefinition control = new ControlDefinition(UniqueId, GetType());
+        return control;
+    }
+}

+ 27 - 0
src/PixiEditor.Extensions.Sdk/Api/FlyUI/NativeMultiChildElement.cs

@@ -0,0 +1,27 @@
+using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.Sdk.Attributes;
+using PixiEditor.Extensions.Sdk.Bridge;
+
+namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
+
+[ControlTypeId("MultiChildNativeElement")]
+public class NativeMultiChildElement : LayoutElement
+{
+    public NativeMultiChildElement(Cursor? cursor) : base(cursor)
+    {
+    }
+
+    protected override ControlDefinition CreateControl()
+    {
+        ControlDefinition control = new ControlDefinition(UniqueId, GetType());
+        return control;
+    }
+
+    public void AppendChild(int atIndex, LayoutElement layoutElement)
+    {
+        if (layoutElement == null)
+            return;
+
+        Interop.AppendElementToNativeMultiChild(UniqueId, layoutElement, atIndex);
+    }
+}

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Padding.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Padding")]
 public class Padding : SingleChildLayoutElement
 {
     public Edges Edges { get; set; } = Edges.All(0);
@@ -15,7 +17,7 @@ public class Padding : SingleChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, "Padding");
+        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, GetType());
         controlDefinition.Children.Add(Child.BuildNative());
         
         controlDefinition.AddProperty(Edges);

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Row.cs

@@ -1,7 +1,9 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Row")]
 public class Row : MultiChildLayoutElement
 {
     public MainAxisAlignment MainAxisAlignment { get; set; }
@@ -26,7 +28,7 @@ public class Row : MultiChildLayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, "Row");
+        ControlDefinition controlDefinition = new ControlDefinition(UniqueId, GetType());
         controlDefinition.AddProperty(MainAxisAlignment);
         controlDefinition.AddProperty(CrossAxisAlignment);
         controlDefinition.Children.AddRange(Children.Select(x => x.BuildNative()));

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/SizeInputField.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Events;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("SizeInputField")]
 public class SizeInputField : LayoutElement
 {
     public event ElementEventHandler<NumberEventArgs> SizeChanged
@@ -28,7 +30,7 @@ public class SizeInputField : LayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition field = new ControlDefinition(UniqueId, "SizeInputField");
+        ControlDefinition field = new ControlDefinition(UniqueId, GetType());
         field.AddProperty(Value);
         field.AddProperty(Min);
         field.AddProperty(Max);

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/StatefulElement.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.State;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("StatefulContainer")]
 public abstract class StatefulElement<TState> : LayoutElement, IStatefulElement<ControlDefinition, TState> where TState : IState<ControlDefinition>
 {
     private TState state;
@@ -34,7 +36,7 @@ public abstract class StatefulElement<TState> : LayoutElement, IStatefulElement<
     protected override ControlDefinition CreateControl()
     {
         ControlDefinition controlDefinition = State.Build().BuildNative();
-        ControlDefinition statefulContainer = new ControlDefinition(UniqueId, "StatefulContainer");
+        ControlDefinition statefulContainer = new ControlDefinition(UniqueId, typeof(StatefulElement<>));
         statefulContainer.Children.Add(controlDefinition);
 
         return statefulContainer;

+ 3 - 1
src/PixiEditor.Extensions.Sdk/Api/FlyUI/Text.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("Text")]
 public class Text : LayoutElement
 {
     public string Value { get; set; }
@@ -20,7 +22,7 @@ public class Text : LayoutElement
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition text = new ControlDefinition(UniqueId, "Text");
+        ControlDefinition text = new ControlDefinition(UniqueId, GetType());
         text.AddProperty(Value);
         text.AddProperty(TextWrap);
         text.AddProperty(TextStyle);

+ 8 - 2
src/PixiEditor.Extensions.Sdk/Api/FlyUI/TextField.cs

@@ -1,8 +1,10 @@
 using PixiEditor.Extensions.CommonApi.FlyUI;
 using PixiEditor.Extensions.CommonApi.FlyUI.Events;
+using PixiEditor.Extensions.Sdk.Attributes;
 
 namespace PixiEditor.Extensions.Sdk.Api.FlyUI;
 
+[ControlTypeId("TextField")]
 public class TextField : LayoutElement
 {
     public event ElementEventHandler<TextEventArgs> TextChanged
@@ -12,16 +14,20 @@ public class TextField : LayoutElement
     }
     public string Text { get; set; }
 
-    public TextField(string? text = null, Cursor? cursor = null) : base(cursor)
+    public string? Placeholder { get; set; } = string.Empty;
+
+    public TextField(string? text = null, string? placeholder = null, Cursor? cursor = null) : base(cursor)
     {
         Text = text ?? string.Empty;
+        Placeholder = placeholder;
         TextChanged += e => Text = e.Text;
     }
 
     protected override ControlDefinition CreateControl()
     {
-        ControlDefinition textField = new ControlDefinition(UniqueId, "TextField");
+        ControlDefinition textField = new ControlDefinition(UniqueId, GetType());
         textField.AddProperty(Text);
+        textField.AddProperty(Placeholder);
         return textField;
     }
 }

+ 5 - 0
src/PixiEditor.Extensions.Sdk/Api/IO/DocumentProvider.cs

@@ -14,6 +14,11 @@ public class DocumentProvider : IDocumentProvider
         return Interop.ImportFile(path, associatePath);
     }
 
+    public IDocument? ImportDocument(byte[] data)
+    {
+        return Interop.ImportDocument(data);
+    }
+
     public IDocument? GetDocument(Guid id)
     {
         if (id == Guid.Empty)

+ 55 - 0
src/PixiEditor.Extensions.Sdk/Api/Resources/Resources.cs

@@ -0,0 +1,55 @@
+using PixiEditor.Extensions.Sdk.Bridge;
+
+namespace PixiEditor.Extensions.Sdk.Api.Resources;
+
+public static class Resources
+{
+    public static byte[] ReadAllBytes(string path)
+    {
+        var bytes = Interop.LoadResource(path);
+        if (bytes == null)
+        {
+            throw new ArgumentException($"Resource '{path}' not found.", nameof(path));
+        }
+
+        return bytes;
+    }
+
+    public static string ReadAllText(string path)
+    {
+        var bytes = Interop.LoadResource(path);
+        if (bytes == null)
+        {
+            throw new ArgumentException($"Resource '{path}' not found.", nameof(path));
+        }
+
+        return System.Text.Encoding.UTF8.GetString(bytes);
+    }
+
+    public static void WriteAllText(string path, string text)
+    {
+        byte[] data = System.Text.Encoding.UTF8.GetBytes(text);
+        Interop.WriteResource(data, path);
+    }
+
+    public static void WriteAllBytes(string path, byte[] data)
+    {
+        if (data == null)
+        {
+            throw new ArgumentNullException(nameof(data), "Data cannot be null.");
+        }
+
+        Interop.WriteResource(data, path);
+    }
+
+    public static string[] GetFilesAtPath(string path, string searchPattern = "*")
+    {
+        var files = Interop.GetFilesAtPath(path, searchPattern);
+        if (files == null)
+        {
+            throw new ArgumentException($"Path '{path}' not found.", nameof(path));
+        }
+
+        return files;
+    }
+}

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov