{"owner":"AvaloniaUI","repo":"Avalonia","hasSkills":true,"totalSkillsCount":4,"totalTokensCount":2712,"categories":["anthropic-skill","plugin-manifest","copilot-instructions"],"hasMcp":false,"mcpConfig":null,"found":["src/tools/Avalonia.Generators/Properties/launchSettings.json","src/tools/DevGenerators/Properties/launchSettings.json","src/tools/Avalonia.Generators/README.md",".github/copilot-instructions.md"],"skills":{"src/tools/Avalonia.Generators/Properties/launchSettings.json":"{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\..\\\\samples\\\\Generators.Sandbox\\\\Generators.Sandbox.csproj\"\n    }\n  }\n}","src/tools/DevGenerators/Properties/launchSettings.json":"{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\Markup\\\\Avalonia.Markup.Xaml.Loader\\\\Avalonia.Markup.Xaml.Loader.csproj\"\n    }\n  }\n}","src/tools/Avalonia.Generators/README.md":"### C# `SourceGenerator` for Typed Avalonia `x:Name` References \n\nThis is a [C# `SourceGenerator`](https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/) built for generating strongly-typed references to controls with `x:Name` (or just `Name`) attributes declared in XAML (or, in `.axaml`). The source generator will look for the `xaml` (or `axaml`) file with the same name as your partial C# class that is a subclass of `Avalonia.INamed` and parses the XAML markup, finds all XAML tags with `x:Name` attributes and generates the C# code.\n\n### Getting Started\n\nIn order to get started, just create project with Avalonia NuGet package:\n\n### Usage\n\nAfter installing the NuGet package, declare your view class as `partial`. Typed C# references to Avalonia controls declared in XAML files will be generated for classes referenced by the `x:Class` directive in XAML files. For example, for the following XAML markup:\n\n```xml\n<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        x:Class=\"Sample.App.SignUpView\">\n    <TextBox x:Name=\"UserNameTextBox\" x:FieldModifier=\"public\" />\n</Window>\n```\n\nA new C# partial class named `SignUpView` with a single `public` property named `UserNameTextBox` of type `TextBox` will be generated in the `Sample.App` namespace. We won't see the generated file, but we'll be able to access the generated property as shown below:\n\n```cs\nusing Avalonia.Controls;\n\nnamespace Sample.App\n{\n    public partial class SignUpView : Window\n    {\n        public SignUpView()\n        {\n            // This method is generated. Call it before accessing any\n            // of the generated properties. The 'UserNameTextBox'\n            // property is also generated.\n            InitializeComponent();\n            UserNameTextBox.Text = \"Joseph\";\n        }\n    }\n}\n```\n\n<img src=\"https://hsto.org/getpro/habr/post_images/d9f/4aa/a1e/d9f4aaa1eb450f5dd2fca66631bc16a0.gif\" />\n\n### Why do I need this?\n\nThe typed `x:Name` references might be useful if you decide to use e.g. [ReactiveUI code-behind bindings](https://www.reactiveui.net/docs/handbook/data-binding/):\n\n```cs\n// UserNameValidation and PasswordValidation are auto generated.\npublic partial class SignUpView : ReactiveWindow<SignUpViewModel>\n{\n    public SignUpView()\n    {\n        InitializeComponent();\n        this.WhenActivated(disposables =>\n        {\n            this.BindValidation(ViewModel, x => x.UserName, x => x.UserNameValidation.Text)\n                .DisposeWith(disposables);\n            this.BindValidation(ViewModel, x => x.Password, x => x.PasswordValidation.Text)\n                .DisposeWith(disposables);\n        });\n    }\n}\n```\n\n### Advanced Usage\n\n> Never keep a method named `InitializeComponent` in your code-behind view class if you are using the generator with `AvaloniaNameGeneratorBehavior` set to `InitializeComponent` (this is the default value). The private `InitializeComponent` method declared in your code-behind class hides the `InitializeComponent` method generated by `Avalonia.NameGenerator`, see [Issue 69](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/69). If you wish to use your own `InitializeComponent` method (not the generated one), set `AvaloniaNameGeneratorBehavior` to `OnlyProperties`.\n\nThe `x:Name` generator can be configured via MsBuild properties that you can put into your C# project file (`.csproj`). Using such options, you can configure the generator behavior, the default field modifier, namespace and path filters. The generator supports the following options:\n\n- `AvaloniaNameGeneratorBehavior`  \n    Possible values: `OnlyProperties`, `InitializeComponent`  \n    Default value: `InitializeComponent`  \n    Determines if the generator should generate get-only properties, or the `InitializeComponent` method.\n\n- `AvaloniaNameGeneratorDefaultFieldModifier`  \n    Possible values: `internal`, `public`, `private`, `protected`  \n    Default value: `internal`  \n    The default field modifier that should be used when there is no `x:FieldModifier` directive specified.\n\n- `AvaloniaNameGeneratorFilterByPath`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with paths matching the specified glob pattern(s).  \n    Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml`\n\n- `AvaloniaNameGeneratorFilterByNamespace`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with base classes' namespaces matching the specified glob pattern(s).  \n    Example: `MyApp.Presentation.*`, `MyApp.Presentation.Views;MyApp.Presentation.Controls`\n\n- `AvaloniaNameGeneratorViewFileNamingStrategy`  \n    Possible values: `ClassName`, `NamespaceAndClassName`  \n    Default value: `NamespaceAndClassName`  \n    Determines how the automatically generated view files should be [named](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/92).\n\nThe default values are given by:\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <AvaloniaNameGeneratorBehavior>InitializeComponent</AvaloniaNameGeneratorBehavior>\n        <AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier>\n        <AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath>\n        <AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace>\n        <AvaloniaNameGeneratorViewFileNamingStrategy>NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy>\n    </PropertyGroup>\n    <!-- ... -->\n</Project>\n```\n\n![](https://user-images.githubusercontent.com/6759207/107812261-7ddfea00-6d80-11eb-9c7e-67bf95d0f0d4.gif)\n\n### What do the generated sources look like?\n\nFor [`SignUpView`](https://github.com/avaloniaui/Avalonia.NameGenerator/blob/main/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml), we get the following generated output when the source generator is in the `InitializeComponent` mode:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Sample.App\n{\n    partial class SampleView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox;\n        public global::Avalonia.Controls.TextBlock UserNameValidation;\n        private global::Avalonia.Controls.TextBox PasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock PasswordValidation;\n        internal global::Avalonia.Controls.ListBox AwesomeListView;\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation;\n        internal global::Avalonia.Controls.Button SignUpButton;\n        internal global::Avalonia.Controls.TextBlock CompoundValidation;\n\n        public void InitializeComponent(bool loadXaml = true, bool attachDevTools = true)\n        {\n            if (loadXaml)\n            {\n                AvaloniaXamlLoader.Load(this);\n            }\n\n// This will be added only if you install Avalonia.Diagnostics.\n#if DEBUG\n            if (attachDevTools)\n            {\n                this.AttachDevTools();\n            } \n#endif\n\n            UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n            UserNameValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n            PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n            PasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n            AwesomeListView = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>(\"AwesomeListView\");\n            ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n            ConfirmPasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n            SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n            CompoundValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n        }\n    }\n}\n```\n\nIf you enable the `OnlyProperties` source generator mode, you get:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\n\nnamespace Avalonia.NameGenerator.Sandbox.Views\n{\n    partial class SignUpView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n        public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n        private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n        internal global::Avalonia.Controls.Button SignUpButton => this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n        internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n    }\n}\n```\n",".github/copilot-instructions.md":"\nWhen running code review, please refer to the following documents if they are relevant to the changed parts of the codebase:\n- `native/Avalonia.Native/**` -> `native/Avalonia.Native/README.md`\n- `src/Avalonia.Wayland/**` -> `src/Avalonia.Wayland/README.md`\n\n## SBOM (EU Cyber Resilience Act)\n\nWe generate a CycloneDX SBOM per published NuGet package (`nukebuild/SbomGenerator.cs`, `CreateSbom` target) so that every shipped package carries an accurate bill of materials, as required for EU CRA compliance. When reviewing, flag the following:\n\n- **New shipped package:** if a change adds a new NuGet package that is published to end users (a new packable project, or a new final package in `nukebuild/numerge.json`), it must be covered by SBOM generation. Confirm `CreateSbom` produces an SBOM for it, and call it out if the package would ship without one.\n- **New kinds of shipped dependencies:** if a change alters what dependencies are delivered with a component in a way the existing scan doesn't already understand, `nukebuild/SbomGenerator.cs` must be updated so those dependencies appear in the SBOM. In particular:\n  - Adding npm/JS dependencies to a component that was previously .NET-only (e.g. a new `webapp` bundled into a package), or changing how existing bundled JS is built.\n  - Bundling third-party binaries directly into a package (copy-local/ILRepack/embedded assemblies) rather than referencing them as normal NuGet dependencies.\n  - New Numerge merge groups, or any other mechanism that folds a project's shipped output into a package other than via ordinary `PackageReference`/`ProjectReference`.\n\n  The scope is what is *delivered* with the package (BSI TR-03183-2 \"scope of delivery\"), not build/test-only tooling. Purely development-time dependencies that are never shipped do not need to be in the SBOM.\n"},"files":{"src/tools/Avalonia.Generators/Properties/launchSettings.json":"{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\..\\\\samples\\\\Generators.Sandbox\\\\Generators.Sandbox.csproj\"\n    }\n  }\n}","src/tools/DevGenerators/Properties/launchSettings.json":"{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\Markup\\\\Avalonia.Markup.Xaml.Loader\\\\Avalonia.Markup.Xaml.Loader.csproj\"\n    }\n  }\n}","src/tools/Avalonia.Generators/README.md":"### C# `SourceGenerator` for Typed Avalonia `x:Name` References \n\nThis is a [C# `SourceGenerator`](https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/) built for generating strongly-typed references to controls with `x:Name` (or just `Name`) attributes declared in XAML (or, in `.axaml`). The source generator will look for the `xaml` (or `axaml`) file with the same name as your partial C# class that is a subclass of `Avalonia.INamed` and parses the XAML markup, finds all XAML tags with `x:Name` attributes and generates the C# code.\n\n### Getting Started\n\nIn order to get started, just create project with Avalonia NuGet package:\n\n### Usage\n\nAfter installing the NuGet package, declare your view class as `partial`. Typed C# references to Avalonia controls declared in XAML files will be generated for classes referenced by the `x:Class` directive in XAML files. For example, for the following XAML markup:\n\n```xml\n<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        x:Class=\"Sample.App.SignUpView\">\n    <TextBox x:Name=\"UserNameTextBox\" x:FieldModifier=\"public\" />\n</Window>\n```\n\nA new C# partial class named `SignUpView` with a single `public` property named `UserNameTextBox` of type `TextBox` will be generated in the `Sample.App` namespace. We won't see the generated file, but we'll be able to access the generated property as shown below:\n\n```cs\nusing Avalonia.Controls;\n\nnamespace Sample.App\n{\n    public partial class SignUpView : Window\n    {\n        public SignUpView()\n        {\n            // This method is generated. Call it before accessing any\n            // of the generated properties. The 'UserNameTextBox'\n            // property is also generated.\n            InitializeComponent();\n            UserNameTextBox.Text = \"Joseph\";\n        }\n    }\n}\n```\n\n<img src=\"https://hsto.org/getpro/habr/post_images/d9f/4aa/a1e/d9f4aaa1eb450f5dd2fca66631bc16a0.gif\" />\n\n### Why do I need this?\n\nThe typed `x:Name` references might be useful if you decide to use e.g. [ReactiveUI code-behind bindings](https://www.reactiveui.net/docs/handbook/data-binding/):\n\n```cs\n// UserNameValidation and PasswordValidation are auto generated.\npublic partial class SignUpView : ReactiveWindow<SignUpViewModel>\n{\n    public SignUpView()\n    {\n        InitializeComponent();\n        this.WhenActivated(disposables =>\n        {\n            this.BindValidation(ViewModel, x => x.UserName, x => x.UserNameValidation.Text)\n                .DisposeWith(disposables);\n            this.BindValidation(ViewModel, x => x.Password, x => x.PasswordValidation.Text)\n                .DisposeWith(disposables);\n        });\n    }\n}\n```\n\n### Advanced Usage\n\n> Never keep a method named `InitializeComponent` in your code-behind view class if you are using the generator with `AvaloniaNameGeneratorBehavior` set to `InitializeComponent` (this is the default value). The private `InitializeComponent` method declared in your code-behind class hides the `InitializeComponent` method generated by `Avalonia.NameGenerator`, see [Issue 69](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/69). If you wish to use your own `InitializeComponent` method (not the generated one), set `AvaloniaNameGeneratorBehavior` to `OnlyProperties`.\n\nThe `x:Name` generator can be configured via MsBuild properties that you can put into your C# project file (`.csproj`). Using such options, you can configure the generator behavior, the default field modifier, namespace and path filters. The generator supports the following options:\n\n- `AvaloniaNameGeneratorBehavior`  \n    Possible values: `OnlyProperties`, `InitializeComponent`  \n    Default value: `InitializeComponent`  \n    Determines if the generator should generate get-only properties, or the `InitializeComponent` method.\n\n- `AvaloniaNameGeneratorDefaultFieldModifier`  \n    Possible values: `internal`, `public`, `private`, `protected`  \n    Default value: `internal`  \n    The default field modifier that should be used when there is no `x:FieldModifier` directive specified.\n\n- `AvaloniaNameGeneratorFilterByPath`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with paths matching the specified glob pattern(s).  \n    Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml`\n\n- `AvaloniaNameGeneratorFilterByNamespace`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with base classes' namespaces matching the specified glob pattern(s).  \n    Example: `MyApp.Presentation.*`, `MyApp.Presentation.Views;MyApp.Presentation.Controls`\n\n- `AvaloniaNameGeneratorViewFileNamingStrategy`  \n    Possible values: `ClassName`, `NamespaceAndClassName`  \n    Default value: `NamespaceAndClassName`  \n    Determines how the automatically generated view files should be [named](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/92).\n\nThe default values are given by:\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <AvaloniaNameGeneratorBehavior>InitializeComponent</AvaloniaNameGeneratorBehavior>\n        <AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier>\n        <AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath>\n        <AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace>\n        <AvaloniaNameGeneratorViewFileNamingStrategy>NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy>\n    </PropertyGroup>\n    <!-- ... -->\n</Project>\n```\n\n![](https://user-images.githubusercontent.com/6759207/107812261-7ddfea00-6d80-11eb-9c7e-67bf95d0f0d4.gif)\n\n### What do the generated sources look like?\n\nFor [`SignUpView`](https://github.com/avaloniaui/Avalonia.NameGenerator/blob/main/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml), we get the following generated output when the source generator is in the `InitializeComponent` mode:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Sample.App\n{\n    partial class SampleView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox;\n        public global::Avalonia.Controls.TextBlock UserNameValidation;\n        private global::Avalonia.Controls.TextBox PasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock PasswordValidation;\n        internal global::Avalonia.Controls.ListBox AwesomeListView;\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation;\n        internal global::Avalonia.Controls.Button SignUpButton;\n        internal global::Avalonia.Controls.TextBlock CompoundValidation;\n\n        public void InitializeComponent(bool loadXaml = true, bool attachDevTools = true)\n        {\n            if (loadXaml)\n            {\n                AvaloniaXamlLoader.Load(this);\n            }\n\n// This will be added only if you install Avalonia.Diagnostics.\n#if DEBUG\n            if (attachDevTools)\n            {\n                this.AttachDevTools();\n            } \n#endif\n\n            UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n            UserNameValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n            PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n            PasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n            AwesomeListView = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>(\"AwesomeListView\");\n            ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n            ConfirmPasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n            SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n            CompoundValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n        }\n    }\n}\n```\n\nIf you enable the `OnlyProperties` source generator mode, you get:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\n\nnamespace Avalonia.NameGenerator.Sandbox.Views\n{\n    partial class SignUpView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n        public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n        private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n        internal global::Avalonia.Controls.Button SignUpButton => this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n        internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n    }\n}\n```\n",".github/copilot-instructions.md":"\nWhen running code review, please refer to the following documents if they are relevant to the changed parts of the codebase:\n- `native/Avalonia.Native/**` -> `native/Avalonia.Native/README.md`\n- `src/Avalonia.Wayland/**` -> `src/Avalonia.Wayland/README.md`\n\n## SBOM (EU Cyber Resilience Act)\n\nWe generate a CycloneDX SBOM per published NuGet package (`nukebuild/SbomGenerator.cs`, `CreateSbom` target) so that every shipped package carries an accurate bill of materials, as required for EU CRA compliance. When reviewing, flag the following:\n\n- **New shipped package:** if a change adds a new NuGet package that is published to end users (a new packable project, or a new final package in `nukebuild/numerge.json`), it must be covered by SBOM generation. Confirm `CreateSbom` produces an SBOM for it, and call it out if the package would ship without one.\n- **New kinds of shipped dependencies:** if a change alters what dependencies are delivered with a component in a way the existing scan doesn't already understand, `nukebuild/SbomGenerator.cs` must be updated so those dependencies appear in the SBOM. In particular:\n  - Adding npm/JS dependencies to a component that was previously .NET-only (e.g. a new `webapp` bundled into a package), or changing how existing bundled JS is built.\n  - Bundling third-party binaries directly into a package (copy-local/ILRepack/embedded assemblies) rather than referencing them as normal NuGet dependencies.\n  - New Numerge merge groups, or any other mechanism that folds a project's shipped output into a package other than via ordinary `PackageReference`/`ProjectReference`.\n\n  The scope is what is *delivered* with the package (BSI TR-03183-2 \"scope of delivery\"), not build/test-only tooling. Purely development-time dependencies that are never shipped do not need to be in the SBOM.\n"},"items":[{"name":"launchSettings.json","path":"src/tools/Avalonia.Generators/Properties/launchSettings.json","rawUrl":"https://raw.githubusercontent.com/AvaloniaUI/Avalonia/HEAD/src/tools/Avalonia.Generators/Properties/launchSettings.json","title":"Properties Skill","category":"anthropic-skill","format":"json","content":"{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\..\\\\samples\\\\Generators.Sandbox\\\\Generators.Sandbox.csproj\"\n    }\n  }\n}","frontmatter":{"profiles":{"Profile 1":{"commandName":"DebugRoslynComponent","targetProject":"..\\..\\..\\samples\\Generators.Sandbox\\Generators.Sandbox.csproj"}}},"isInternal":false,"tokens":54,"sizeBytes":185},{"name":"launchSettings.json","path":"src/tools/DevGenerators/Properties/launchSettings.json","rawUrl":"https://raw.githubusercontent.com/AvaloniaUI/Avalonia/HEAD/src/tools/DevGenerators/Properties/launchSettings.json","title":"Properties Skill","category":"anthropic-skill","format":"json","content":"{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\Markup\\\\Avalonia.Markup.Xaml.Loader\\\\Avalonia.Markup.Xaml.Loader.csproj\"\n    }\n  }\n}","frontmatter":{"profiles":{"Profile 1":{"commandName":"DebugRoslynComponent","targetProject":"..\\..\\Markup\\Avalonia.Markup.Xaml.Loader\\Avalonia.Markup.Xaml.Loader.csproj"}}},"isInternal":false,"tokens":58,"sizeBytes":198},{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/AvaloniaUI/Avalonia/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"\nWhen running code review, please refer to the following documents if they are relevant to the changed parts of the codebase:\n- `native/Avalonia.Native/**` -> `native/Avalonia.Native/README.md`\n- `src/Avalonia.Wayland/**` -> `src/Avalonia.Wayland/README.md`\n\n## SBOM (EU Cyber Resilience Act)\n\nWe generate a CycloneDX SBOM per published NuGet package (`nukebuild/SbomGenerator.cs`, `CreateSbom` target) so that every shipped package carries an accurate bill of materials, as required for EU CRA compliance. When reviewing, flag the following:\n\n- **New shipped package:** if a change adds a new NuGet package that is published to end users (a new packable project, or a new final package in `nukebuild/numerge.json`), it must be covered by SBOM generation. Confirm `CreateSbom` produces an SBOM for it, and call it out if the package would ship without one.\n- **New kinds of shipped dependencies:** if a change alters what dependencies are delivered with a component in a way the existing scan doesn't already understand, `nukebuild/SbomGenerator.cs` must be updated so those dependencies appear in the SBOM. In particular:\n  - Adding npm/JS dependencies to a component that was previously .NET-only (e.g. a new `webapp` bundled into a package), or changing how existing bundled JS is built.\n  - Bundling third-party binaries directly into a package (copy-local/ILRepack/embedded assemblies) rather than referencing them as normal NuGet dependencies.\n  - New Numerge merge groups, or any other mechanism that folds a project's shipped output into a package other than via ordinary `PackageReference`/`ProjectReference`.\n\n  The scope is what is *delivered* with the package (BSI TR-03183-2 \"scope of delivery\"), not build/test-only tooling. Purely development-time dependencies that are never shipped do not need to be in the SBOM.\n","isInternal":false,"tokens":431,"sizeBytes":1830},{"name":"README.md","path":"src/tools/Avalonia.Generators/README.md","rawUrl":"https://raw.githubusercontent.com/AvaloniaUI/Avalonia/HEAD/src/tools/Avalonia.Generators/README.md","title":"Avalonia.Generators Documentation","category":"plugin-manifest","format":"markdown","content":"### C# `SourceGenerator` for Typed Avalonia `x:Name` References \n\nThis is a [C# `SourceGenerator`](https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/) built for generating strongly-typed references to controls with `x:Name` (or just `Name`) attributes declared in XAML (or, in `.axaml`). The source generator will look for the `xaml` (or `axaml`) file with the same name as your partial C# class that is a subclass of `Avalonia.INamed` and parses the XAML markup, finds all XAML tags with `x:Name` attributes and generates the C# code.\n\n### Getting Started\n\nIn order to get started, just create project with Avalonia NuGet package:\n\n### Usage\n\nAfter installing the NuGet package, declare your view class as `partial`. Typed C# references to Avalonia controls declared in XAML files will be generated for classes referenced by the `x:Class` directive in XAML files. For example, for the following XAML markup:\n\n```xml\n<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        x:Class=\"Sample.App.SignUpView\">\n    <TextBox x:Name=\"UserNameTextBox\" x:FieldModifier=\"public\" />\n</Window>\n```\n\nA new C# partial class named `SignUpView` with a single `public` property named `UserNameTextBox` of type `TextBox` will be generated in the `Sample.App` namespace. We won't see the generated file, but we'll be able to access the generated property as shown below:\n\n```cs\nusing Avalonia.Controls;\n\nnamespace Sample.App\n{\n    public partial class SignUpView : Window\n    {\n        public SignUpView()\n        {\n            // This method is generated. Call it before accessing any\n            // of the generated properties. The 'UserNameTextBox'\n            // property is also generated.\n            InitializeComponent();\n            UserNameTextBox.Text = \"Joseph\";\n        }\n    }\n}\n```\n\n<img src=\"https://hsto.org/getpro/habr/post_images/d9f/4aa/a1e/d9f4aaa1eb450f5dd2fca66631bc16a0.gif\" />\n\n### Why do I need this?\n\nThe typed `x:Name` references might be useful if you decide to use e.g. [ReactiveUI code-behind bindings](https://www.reactiveui.net/docs/handbook/data-binding/):\n\n```cs\n// UserNameValidation and PasswordValidation are auto generated.\npublic partial class SignUpView : ReactiveWindow<SignUpViewModel>\n{\n    public SignUpView()\n    {\n        InitializeComponent();\n        this.WhenActivated(disposables =>\n        {\n            this.BindValidation(ViewModel, x => x.UserName, x => x.UserNameValidation.Text)\n                .DisposeWith(disposables);\n            this.BindValidation(ViewModel, x => x.Password, x => x.PasswordValidation.Text)\n                .DisposeWith(disposables);\n        });\n    }\n}\n```\n\n### Advanced Usage\n\n> Never keep a method named `InitializeComponent` in your code-behind view class if you are using the generator with `AvaloniaNameGeneratorBehavior` set to `InitializeComponent` (this is the default value). The private `InitializeComponent` method declared in your code-behind class hides the `InitializeComponent` method generated by `Avalonia.NameGenerator`, see [Issue 69](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/69). If you wish to use your own `InitializeComponent` method (not the generated one), set `AvaloniaNameGeneratorBehavior` to `OnlyProperties`.\n\nThe `x:Name` generator can be configured via MsBuild properties that you can put into your C# project file (`.csproj`). Using such options, you can configure the generator behavior, the default field modifier, namespace and path filters. The generator supports the following options:\n\n- `AvaloniaNameGeneratorBehavior`  \n    Possible values: `OnlyProperties`, `InitializeComponent`  \n    Default value: `InitializeComponent`  \n    Determines if the generator should generate get-only properties, or the `InitializeComponent` method.\n\n- `AvaloniaNameGeneratorDefaultFieldModifier`  \n    Possible values: `internal`, `public`, `private`, `protected`  \n    Default value: `internal`  \n    The default field modifier that should be used when there is no `x:FieldModifier` directive specified.\n\n- `AvaloniaNameGeneratorFilterByPath`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with paths matching the specified glob pattern(s).  \n    Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml`\n\n- `AvaloniaNameGeneratorFilterByNamespace`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with base classes' namespaces matching the specified glob pattern(s).  \n    Example: `MyApp.Presentation.*`, `MyApp.Presentation.Views;MyApp.Presentation.Controls`\n\n- `AvaloniaNameGeneratorViewFileNamingStrategy`  \n    Possible values: `ClassName`, `NamespaceAndClassName`  \n    Default value: `NamespaceAndClassName`  \n    Determines how the automatically generated view files should be [named](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/92).\n\nThe default values are given by:\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <AvaloniaNameGeneratorBehavior>InitializeComponent</AvaloniaNameGeneratorBehavior>\n        <AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier>\n        <AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath>\n        <AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace>\n        <AvaloniaNameGeneratorViewFileNamingStrategy>NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy>\n    </PropertyGroup>\n    <!-- ... -->\n</Project>\n```\n\n![](https://user-images.githubusercontent.com/6759207/107812261-7ddfea00-6d80-11eb-9c7e-67bf95d0f0d4.gif)\n\n### What do the generated sources look like?\n\nFor [`SignUpView`](https://github.com/avaloniaui/Avalonia.NameGenerator/blob/main/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml), we get the following generated output when the source generator is in the `InitializeComponent` mode:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Sample.App\n{\n    partial class SampleView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox;\n        public global::Avalonia.Controls.TextBlock UserNameValidation;\n        private global::Avalonia.Controls.TextBox PasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock PasswordValidation;\n        internal global::Avalonia.Controls.ListBox AwesomeListView;\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation;\n        internal global::Avalonia.Controls.Button SignUpButton;\n        internal global::Avalonia.Controls.TextBlock CompoundValidation;\n\n        public void InitializeComponent(bool loadXaml = true, bool attachDevTools = true)\n        {\n            if (loadXaml)\n            {\n                AvaloniaXamlLoader.Load(this);\n            }\n\n// This will be added only if you install Avalonia.Diagnostics.\n#if DEBUG\n            if (attachDevTools)\n            {\n                this.AttachDevTools();\n            } \n#endif\n\n            UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n            UserNameValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n            PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n            PasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n            AwesomeListView = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>(\"AwesomeListView\");\n            ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n            ConfirmPasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n            SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n            CompoundValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n        }\n    }\n}\n```\n\nIf you enable the `OnlyProperties` source generator mode, you get:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\n\nnamespace Avalonia.NameGenerator.Sandbox.Views\n{\n    partial class SignUpView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n        public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n        private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n        internal global::Avalonia.Controls.Button SignUpButton => this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n        internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n    }\n}\n```\n","isInternal":false,"tokens":2169,"sizeBytes":9922}],"systemPromptSnippet":"<yakaai_skills repo=\"AvaloniaUI/Avalonia\">\n<!-- File: src/tools/Avalonia.Generators/Properties/launchSettings.json (Tokens: ~54 | Category: anthropic-skill) -->\n{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\..\\\\samples\\\\Generators.Sandbox\\\\Generators.Sandbox.csproj\"\n    }\n  }\n}\n\n<!-- File: src/tools/DevGenerators/Properties/launchSettings.json (Tokens: ~58 | Category: anthropic-skill) -->\n{\n  \"profiles\": {\n    \"Profile 1\": {\n      \"commandName\": \"DebugRoslynComponent\",\n      \"targetProject\": \"..\\\\..\\\\Markup\\\\Avalonia.Markup.Xaml.Loader\\\\Avalonia.Markup.Xaml.Loader.csproj\"\n    }\n  }\n}\n\n<!-- File: .github/copilot-instructions.md (Tokens: ~431 | Category: copilot-instructions) -->\nWhen running code review, please refer to the following documents if they are relevant to the changed parts of the codebase:\n- `native/Avalonia.Native/**` -> `native/Avalonia.Native/README.md`\n- `src/Avalonia.Wayland/**` -> `src/Avalonia.Wayland/README.md`\n\n## SBOM (EU Cyber Resilience Act)\n\nWe generate a CycloneDX SBOM per published NuGet package (`nukebuild/SbomGenerator.cs`, `CreateSbom` target) so that every shipped package carries an accurate bill of materials, as required for EU CRA compliance. When reviewing, flag the following:\n\n- **New shipped package:** if a change adds a new NuGet package that is published to end users (a new packable project, or a new final package in `nukebuild/numerge.json`), it must be covered by SBOM generation. Confirm `CreateSbom` produces an SBOM for it, and call it out if the package would ship without one.\n- **New kinds of shipped dependencies:** if a change alters what dependencies are delivered with a component in a way the existing scan doesn't already understand, `nukebuild/SbomGenerator.cs` must be updated so those dependencies appear in the SBOM. In particular:\n  - Adding npm/JS dependencies to a component that was previously .NET-only (e.g. a new `webapp` bundled into a package), or changing how existing bundled JS is built.\n  - Bundling third-party binaries directly into a package (copy-local/ILRepack/embedded assemblies) rather than referencing them as normal NuGet dependencies.\n  - New Numerge merge groups, or any other mechanism that folds a project's shipped output into a package other than via ordinary `PackageReference`/`ProjectReference`.\n\n  The scope is what is *delivered* with the package (BSI TR-03183-2 \"scope of delivery\"), not build/test-only tooling. Purely development-time dependencies that are never shipped do not need to be in the SBOM.\n\n<!-- File: src/tools/Avalonia.Generators/README.md (Tokens: ~2169 | Category: plugin-manifest) -->\n### C# `SourceGenerator` for Typed Avalonia `x:Name` References \n\nThis is a [C# `SourceGenerator`](https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/) built for generating strongly-typed references to controls with `x:Name` (or just `Name`) attributes declared in XAML (or, in `.axaml`). The source generator will look for the `xaml` (or `axaml`) file with the same name as your partial C# class that is a subclass of `Avalonia.INamed` and parses the XAML markup, finds all XAML tags with `x:Name` attributes and generates the C# code.\n\n### Getting Started\n\nIn order to get started, just create project with Avalonia NuGet package:\n\n### Usage\n\nAfter installing the NuGet package, declare your view class as `partial`. Typed C# references to Avalonia controls declared in XAML files will be generated for classes referenced by the `x:Class` directive in XAML files. For example, for the following XAML markup:\n\n```xml\n<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        x:Class=\"Sample.App.SignUpView\">\n    <TextBox x:Name=\"UserNameTextBox\" x:FieldModifier=\"public\" />\n</Window>\n```\n\nA new C# partial class named `SignUpView` with a single `public` property named `UserNameTextBox` of type `TextBox` will be generated in the `Sample.App` namespace. We won't see the generated file, but we'll be able to access the generated property as shown below:\n\n```cs\nusing Avalonia.Controls;\n\nnamespace Sample.App\n{\n    public partial class SignUpView : Window\n    {\n        public SignUpView()\n        {\n            // This method is generated. Call it before accessing any\n            // of the generated properties. The 'UserNameTextBox'\n            // property is also generated.\n            InitializeComponent();\n            UserNameTextBox.Text = \"Joseph\";\n        }\n    }\n}\n```\n\n<img src=\"https://hsto.org/getpro/habr/post_images/d9f/4aa/a1e/d9f4aaa1eb450f5dd2fca66631bc16a0.gif\" />\n\n### Why do I need this?\n\nThe typed `x:Name` references might be useful if you decide to use e.g. [ReactiveUI code-behind bindings](https://www.reactiveui.net/docs/handbook/data-binding/):\n\n```cs\n// UserNameValidation and PasswordValidation are auto generated.\npublic partial class SignUpView : ReactiveWindow<SignUpViewModel>\n{\n    public SignUpView()\n    {\n        InitializeComponent();\n        this.WhenActivated(disposables =>\n        {\n            this.BindValidation(ViewModel, x => x.UserName, x => x.UserNameValidation.Text)\n                .DisposeWith(disposables);\n            this.BindValidation(ViewModel, x => x.Password, x => x.PasswordValidation.Text)\n                .DisposeWith(disposables);\n        });\n    }\n}\n```\n\n### Advanced Usage\n\n> Never keep a method named `InitializeComponent` in your code-behind view class if you are using the generator with `AvaloniaNameGeneratorBehavior` set to `InitializeComponent` (this is the default value). The private `InitializeComponent` method declared in your code-behind class hides the `InitializeComponent` method generated by `Avalonia.NameGenerator`, see [Issue 69](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/69). If you wish to use your own `InitializeComponent` method (not the generated one), set `AvaloniaNameGeneratorBehavior` to `OnlyProperties`.\n\nThe `x:Name` generator can be configured via MsBuild properties that you can put into your C# project file (`.csproj`). Using such options, you can configure the generator behavior, the default field modifier, namespace and path filters. The generator supports the following options:\n\n- `AvaloniaNameGeneratorBehavior`  \n    Possible values: `OnlyProperties`, `InitializeComponent`  \n    Default value: `InitializeComponent`  \n    Determines if the generator should generate get-only properties, or the `InitializeComponent` method.\n\n- `AvaloniaNameGeneratorDefaultFieldModifier`  \n    Possible values: `internal`, `public`, `private`, `protected`  \n    Default value: `internal`  \n    The default field modifier that should be used when there is no `x:FieldModifier` directive specified.\n\n- `AvaloniaNameGeneratorFilterByPath`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with paths matching the specified glob pattern(s).  \n    Example: `*/Views/*View.xaml`, `*View.axaml;*Control.axaml`\n\n- `AvaloniaNameGeneratorFilterByNamespace`  \n    Possible format: `glob_pattern`, `glob_pattern;glob_pattern`  \n    Default value: `*`  \n    The generator will process only XAML files with base classes' namespaces matching the specified glob pattern(s).  \n    Example: `MyApp.Presentation.*`, `MyApp.Presentation.Views;MyApp.Presentation.Controls`\n\n- `AvaloniaNameGeneratorViewFileNamingStrategy`  \n    Possible values: `ClassName`, `NamespaceAndClassName`  \n    Default value: `NamespaceAndClassName`  \n    Determines how the automatically generated view files should be [named](https://github.com/AvaloniaUI/Avalonia.NameGenerator/issues/92).\n\nThe default values are given by:\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n    <PropertyGroup>\n        <AvaloniaNameGeneratorBehavior>InitializeComponent</AvaloniaNameGeneratorBehavior>\n        <AvaloniaNameGeneratorDefaultFieldModifier>internal</AvaloniaNameGeneratorDefaultFieldModifier>\n        <AvaloniaNameGeneratorFilterByPath>*</AvaloniaNameGeneratorFilterByPath>\n        <AvaloniaNameGeneratorFilterByNamespace>*</AvaloniaNameGeneratorFilterByNamespace>\n        <AvaloniaNameGeneratorViewFileNamingStrategy>NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy>\n    </PropertyGroup>\n    <!-- ... -->\n</Project>\n```\n\n![](https://user-images.githubusercontent.com/6759207/107812261-7ddfea00-6d80-11eb-9c7e-67bf95d0f0d4.gif)\n\n### What do the generated sources look like?\n\nFor [`SignUpView`](https://github.com/avaloniaui/Avalonia.NameGenerator/blob/main/src/Avalonia.NameGenerator.Sandbox/Views/SignUpView.xaml), we get the following generated output when the source generator is in the `InitializeComponent` mode:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace Sample.App\n{\n    partial class SampleView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox;\n        public global::Avalonia.Controls.TextBlock UserNameValidation;\n        private global::Avalonia.Controls.TextBox PasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock PasswordValidation;\n        internal global::Avalonia.Controls.ListBox AwesomeListView;\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox;\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation;\n        internal global::Avalonia.Controls.Button SignUpButton;\n        internal global::Avalonia.Controls.TextBlock CompoundValidation;\n\n        public void InitializeComponent(bool loadXaml = true, bool attachDevTools = true)\n        {\n            if (loadXaml)\n            {\n                AvaloniaXamlLoader.Load(this);\n            }\n\n// This will be added only if you install Avalonia.Diagnostics.\n#if DEBUG\n            if (attachDevTools)\n            {\n                this.AttachDevTools();\n            } \n#endif\n\n            UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n            UserNameValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n            PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n            PasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n            AwesomeListView = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>(\"AwesomeListView\");\n            ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n            ConfirmPasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n            SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n            CompoundValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n        }\n    }\n}\n```\n\nIf you enable the `OnlyProperties` source generator mode, you get:\n\n```cs\n// <auto-generated />\n\nusing Avalonia.Controls;\n\nnamespace Avalonia.NameGenerator.Sandbox.Views\n{\n    partial class SignUpView\n    {\n        internal global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox UserNameTextBox => this.FindNameScope()?.Find<global::Avalonia.NameGenerator.Sandbox.Controls.CustomTextBox>(\"UserNameTextBox\");\n        public global::Avalonia.Controls.TextBlock UserNameValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"UserNameValidation\");\n        private global::Avalonia.Controls.TextBox PasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"PasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock PasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"PasswordValidation\");\n        internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>(\"ConfirmPasswordTextBox\");\n        internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"ConfirmPasswordValidation\");\n        internal global::Avalonia.Controls.Button SignUpButton => this.FindNameScope()?.Find<global::Avalonia.Controls.Button>(\"SignUpButton\");\n        internal global::Avalonia.Controls.TextBlock CompoundValidation => this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>(\"CompoundValidation\");\n    }\n}\n```\n</yakaai_skills>"}