{"id":19070659,"url":"https://github.com/bobobass84/bb84.extensions","last_synced_at":"2026-04-28T07:00:58.684Z","repository":{"id":201041946,"uuid":"706824788","full_name":"BoBoBaSs84/BB84.Extensions","owner":"BoBoBaSs84","description":"BB84.Extensions is a comprehensive collection of extension methods for the .NET framework and Windows Forms applications. The project consists of two main libraries that provide utility methods to simplify common programming tasks and enhance developer productivity.","archived":false,"fork":false,"pushed_at":"2026-04-19T08:30:55.000Z","size":31512,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-19T10:26:24.705Z","etag":null,"topics":["common","csharp","extensions","library","winforms"],"latest_commit_sha":null,"homepage":"https://bobobass84.github.io/BB84.Extensions/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BoBoBaSs84.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-18T17:29:57.000Z","updated_at":"2026-04-19T08:30:58.000Z","dependencies_parsed_at":"2023-10-21T04:23:04.773Z","dependency_job_id":"a18cbce1-32a1-41b0-a853-4d8cf49816bd","html_url":"https://github.com/BoBoBaSs84/BB84.Extensions","commit_stats":null,"previous_names":["bobobass84/bb84.extensions"],"tags_count":53,"template":false,"template_full_name":null,"purl":"pkg:github/BoBoBaSs84/BB84.Extensions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BoBoBaSs84%2FBB84.Extensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BoBoBaSs84%2FBB84.Extensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BoBoBaSs84%2FBB84.Extensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BoBoBaSs84%2FBB84.Extensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BoBoBaSs84","download_url":"https://codeload.github.com/BoBoBaSs84/BB84.Extensions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BoBoBaSs84%2FBB84.Extensions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32370030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"online","status_checked_at":"2026-04-28T02:00:07.250Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["common","csharp","extensions","library","winforms"],"created_at":"2024-11-09T01:19:54.240Z","updated_at":"2026-04-28T07:00:58.677Z","avatar_url":"https://github.com/BoBoBaSs84.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BB84.Extensions\n\n[![CI](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/ci.yml)\n[![CD](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/cd.yml/badge.svg?branch=main)](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/cd.yml)\n[![CodeQL](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/github-code-scanning/codeql/badge.svg?branch=main)](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/github-code-scanning/codeql)\n[![Dependabot](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/dependabot/dependabot-updates/badge.svg?branch=main)](https://github.com/BoBoBaSs84/BB84.Extensions/actions/workflows/dependabot/dependabot-updates)\n\n[![C#](https://img.shields.io/badge/C%23-13.0-239120)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![Issues](https://img.shields.io/github/issues/BoBoBaSs84/BB84.Extensions)](https://github.com/BoBoBaSs84/BB84.Extensions/issues)\n[![Commit](https://img.shields.io/github/last-commit/BoBoBaSs84/BB84.Extensions)](https://github.com/BoBoBaSs84/BB84.Extensions/commit/main)\n[![License](https://img.shields.io/github/license/BoBoBaSs84/BB84.Extensions)](https://github.com/BoBoBaSs84/BB84.Extensions/blob/main/LICENSE)\n[![RepoSize](https://img.shields.io/github/repo-size/BoBoBaSs84/BB84.Extensions)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![Release](https://img.shields.io/github/v/release/BoBoBaSs84/BB84.Extensions)](https://github.com/BoBoBaSs84/BB84.Extensions/releases/latest)\n\n## 🔎 Project Overview\n\n**BB84.Extensions** is a comprehensive collection of extension methods for the .NET framework and Windows Forms applications. The project consists of two main libraries that provide utility methods to simplify common programming tasks and enhance developer productivity.\n\n### Key Features\n\n- **Cross-Platform Compatibility**: Supports multiple .NET target frameworks\n- **Comprehensive Coverage**: Extension methods for arrays, strings, dates, colors, HTTP clients, and more\n- **Windows Forms Support**: Specialized extensions for WinForms data binding and control manipulation\n- **Well-Tested**: Extensive unit test coverage\n- **NuGet Packages**: Available as published NuGet packages\n- **Strong Naming**: Assemblies are signed for security\n\n### Version Information\n\n- **Current Version**: 4.0.x (versioned using date-based scheme)\n- **Author**: Robert Peter Meyer\n- **Copyright**: © 2023 Robert Peter Meyer\n- **License**: MIT License\n\n## 🏗️ Architecture\n\n### Project Structure\n\n```\nBB84.Extensions/\n├── src/\n│   ├── BB84.Extensions/              # Core extension methods library\n│   └── BB84.WinForms.Extensions/     # Windows Forms specific extensions\n├── tests/\n│   ├── BB84.Extensions.Tests/        # Unit tests for core library\n│   └── BB84.WinForms.Extensions.Tests/ # Unit tests for WinForms library\n├── docs/                             # Documentation files\n└── TestResults/                      # Test execution results\n```\n\n### Target Frameworks\n\nThe project supports multiple .NET target frameworks to ensure broad compatibility:\n\n#### BB84.Extensions (Core Library)\n\n- .NET Standard 2.0\n- .NET Standard 2.1\n- .NET Framework 4.7.2\n- .NET Framework 4.8.1\n- .NET 8.0\n- .NET 10.0\n\n#### BB84.WinForms.Extensions\n\n- .NET Framework 4.7.2\n- .NET Framework 4.8.1\n- .NET 8.0 (Windows)\n- .NET 10.0 (Windows)\n\n### Build Configuration\n\nThe project uses modern .NET SDK-style project files with:\n\n- **C# Language Version**: Latest\n- **Nullable Reference Types**: Enabled\n- **Implicit Usings**: Enabled\n- **Assembly Signing**: Enabled with public key\n- **Documentation Generation**: XML documentation files generated\n- **Package Validation**: Enabled for NuGet packages\n\n## 📦 Libraries\n\n### 1. BB84.Extensions\n\n[![net20](https://img.shields.io/badge/netstandard2.0-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net21](https://img.shields.io/badge/netstandard2.1-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net472](https://img.shields.io/badge/net472-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net481](https://img.shields.io/badge/net481-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net80](https://img.shields.io/badge/net8.0-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net100](https://img.shields.io/badge/net10.0-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![NuGet](https://img.shields.io/nuget/v/BB84.Extensions.svg?logo=nuget\u0026logoColor=white)](https://www.nuget.org/packages/BB84.Extensions)\n\nThe core extension methods library providing utilities for common .NET types.\n\n#### Extension Categories\n\n**Array Extensions**\n\n- `TakeRandom()` - Returns a randomly selected element from an array\n\n**Boolean Extensions**\n\n- `IsTrue()` - Checks if a boolean value is true\n- `IsFalse()` - Checks if a boolean value is false\n- `IsNull()` - Checks if a nullable boolean is null\n\n**Byte Extensions**\n\n- `Compress()` - Compresses byte arrays using GZip\n- `Decompress()` - Decompresses GZip compressed byte arrays\n- `ToBase64()` - Converts byte array to Base64 string\n- `FromBase64()` - Converts Base64 string to byte array\n- `GetMD5()` - Calculates MD5 hash of byte array\n- `GetHexString()` - Converts byte array to hexadecimal string\n- `GetString()` - Converts byte array to string using specified encoding\n\n**Color Extensions**\n\n- `ToRGBHexString()` - Converts Color to RGB hex representation\n- `ToARGBHexString()` - Converts Color to ARGB hex representation\n- `FromRGBHexString()` - Creates Color from RGB hex string\n- `FromARGBHexString()` - Creates Color from ARGB hex string\n- `ToRgbByteArray()` - Converts Color to RGB byte array\n- `ToArgbByteArray()` - Converts Color to ARGB byte array\n\n**Comparable Extensions**\n\n- `IsGreaterThan()` - Checks if value is greater than comparison value\n- `IsLessThan()` - Checks if value is less than comparison value\n- `IsGreaterOrEqualThan()` - Checks if value is greater than or equal to comparison value\n- `IsLessOrEqualThan()` - Checks if value is less than or equal to comparison value\n\n**DateTime Extensions**\n\n- `StartOfWeek()` - Gets the first day of the week\n- `EndOfWeek()` - Gets the last day of the week\n- `StartOfMonth()` - Gets the first day of the month\n- `EndOfMonth()` - Gets the last day of the month\n- `StartOfYear()` - Gets the first day of the year\n- `EndOfYear()` - Gets the last day of the year\n- `StartOfFiscalYear()` - Gets the start of fiscal year\n- `EndOfFiscalYear()` - Gets the end of fiscal year\n- `WeekOfYear()` - Gets the week number of the year\n\n**Enumerable Extensions**\n\n- `ForEach()` - Executes an action for each element in the enumerable\n- `TakeRandom()` - Returns a randomly selected element from enumerable\n\n**HttpClient Extensions**\n\n- `WithBaseAddress()` - Sets the base address for HTTP client\n- Additional HTTP configuration methods\n\n**HttpRequestMessage Extensions**\n\n- Bearer token authentication helpers\n- Media type configuration methods\n\n**Integer Extensions**\n\n- `ArrayUp()` - Creates an array of integers from current value up to maximum\n- `ArrayDown()` - Creates an array of integers from current value down to minimum\n\n**Object Extensions**\n\n- `IsNull()` - Checks if object is null\n- `ToBooleanInvariant()` - Converts object to boolean using invariant culture\n- `ToDateTimeInvariant()` - Converts object to DateTime using invariant culture\n\n**Stream Extensions**\n\n- `ToByteArray()` - Converts stream to byte array\n\n**String Extensions**\n\n- Various string manipulation and validation methods\n- Regular expression helpers\n\n**Task Extensions**\n\n- `ToSafeSync()` - Safely executes async tasks synchronously with error handling\n\n### 2. BB84.WinForms.Extensions\n\n[![net472](https://img.shields.io/badge/net472-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net481](https://img.shields.io/badge/net481-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net80](https://img.shields.io/badge/net8.0-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![net100](https://img.shields.io/badge/net10.0-5C2D91?logo=.NET\u0026labelColor=gray)](https://github.com/BoBoBaSs84/BB84.Extensions)\n[![NuGet](https://img.shields.io/nuget/v/BB84.WinForms.Extensions.svg?logo=nuget\u0026logoColor=white)](https://www.nuget.org/packages/BB84.WinForms.Extensions)\n\nSpecialized extension methods for Windows Forms controls, focusing on simplified data binding.\n\n#### Supported Controls\n\n**Button Extensions**\n\n- Command binding support\n- Property binding for Enabled, Text, Visible\n\n**CheckBox Extensions**\n\n- Checked property binding\n\n**ComboBox Extensions**\n\n- DataSource binding\n- SelectedItem binding\n\n**DataGridView Extensions**\n\n- DataSource binding\n\n**DateTimePicker Extensions**\n\n- Value property binding\n\n**Label Extensions**\n\n- Text property binding\n\n**ListBox Extensions**\n\n- DataSource binding\n- SelectedItem binding\n\n**NumericUpDown Extensions**\n\n- Value property binding\n\n**PictureBox Extensions**\n\n- Image property binding\n\n**PropertyGrid Extensions**\n\n- SelectedObject binding\n\n**ProgressBar Extensions**\n\n- Value property binding\n\n**RadioButton Extensions**\n\n- Checked property binding\n\n**TextBox Extensions**\n\n- Text property binding\n\n**TrackBar Extensions**\n\n- Value property binding\n\n## 💾 Installation\n\n### NuGet Package Manager\n\n#### Core Library\n\n```powershell\nInstall-Package BB84.Extensions\n```\n\n#### WinForms Extensions\n\n```powershell\nInstall-Package BB84.WinForms.Extensions\n```\n\n### Package Manager Console\n\n#### Core Library\n\n```powershell\ndotnet add package BB84.Extensions\n```\n\n#### WinForms Extensions\n\n```powershell\ndotnet add package BB84.WinForms.Extensions\n```\n\n### PackageReference (in .csproj)\n\n```xml\n\u003cPackageReference Include=\"BB84.Extensions\" Version=\"2.14.*\" /\u003e\n\u003cPackageReference Include=\"BB84.WinForms.Extensions\" Version=\"2.14.*\" /\u003e\n```\n\n## 🧰 Usage Examples\n\n### Core Extensions Examples\n\n#### DateTime Extensions\n\n```csharp\nusing BB84.Extensions;\n\nDateTime today = new(2023, 9, 5);\nDateTime startOfWeek = today.StartOfWeek();\nDateTime endOfMonth = today.EndOfMonth();\nint weekNumber = today.WeekOfYear();\n```\n\n#### Array/Enumerable Extensions\n\n```csharp\nusing BB84.Extensions;\n\n// Random selection\nint[] numbers = [1, 2, 3, 4, 5];\nint randomNumber = numbers.TakeRandom();\n\n// ForEach with condition\nIEnumerable\u003cstring\u003e strings = [\"apple\", \"banana\", \"cherry\"];\nint count = 0;\nstrings.ForEach(x =\u003e x.Contains(\"a\"), x =\u003e count++);\n```\n\n#### Color Extensions\n\n```csharp\nusing BB84.Extensions;\nusing System.Drawing;\n\nColor color = Color.Red;\nstring hexRgb = color.ToRGBHexString();     // \"#FF0000\"\nstring hexArgb = color.ToARGBHexString();   // \"#FFFF0000\"\nbyte[] rgbBytes = color.ToRgbByteArray();   // [255, 0, 0]\n```\n\n#### HTTP Client Extensions\n\n```csharp\nusing BB84.Extensions;\n\nvar client = new HttpClient()\n    .WithBaseAddress(\"https://api.example.com\")\n    .WithTimeout(TimeSpan.FromSeconds(30));\n\nvar request = new HttpRequestMessage(HttpMethod.Get, \"/users\")\n    .WithBearerToken(\"your-token-here\")\n    .WithJsonMediaType();\n```\n\n#### Byte Array Extensions\n\n```csharp\nusing BB84.Extensions;\n\nbyte[] data = Encoding.UTF8.GetBytes(\"Hello World\");\nbyte[] compressed = data.Compress();\nbyte[] decompressed = compressed.Decompress();\nstring base64 = data.ToBase64();\nstring hex = data.GetHexString();\nstring md5Hash = data.GetMD5();\n```\n\n### WinForms Extensions Examples\n\n#### Basic Data Binding\n\n```csharp\nusing BB84.WinForms.Extensions;\n\npublic partial class MyForm : Form\n{\n    private MyViewModel viewModel = new();\n\n    public MyForm()\n    {\n        InitializeComponent();\n        SetupDataBindings();\n    }\n\n    private void SetupDataBindings()\n    {\n        // Chain multiple bindings\n        textBox1\n            .BindText(viewModel, nameof(MyViewModel.Name))\n            .BindEnabled(viewModel, nameof(MyViewModel.IsEditable))\n            .BindVisible(viewModel, nameof(MyViewModel.IsVisible));\n\n        // Bind checkbox\n        checkBox1.BindChecked(viewModel, nameof(MyViewModel.IsSelected));\n\n        // Bind combo box\n        comboBox1\n            .SetDataSource(categories)\n            .BindSelectedItem(viewModel, nameof(MyViewModel.SelectedCategory));\n\n        // Bind numeric up/down\n        numericUpDown1\n            .BindValue(viewModel, nameof(MyViewModel.Count))\n            .BindMinimum(viewModel, nameof(MyViewModel.MinCount))\n            .BindMaximum(viewModel, nameof(MyViewModel.MaxCount));\n    }\n}\n```\n\n#### Command Binding for Buttons\n\n```csharp\nusing BB84.WinForms.Extensions;\nusing System.Windows.Input;\n\npublic class MyViewModel : INotifyPropertyChanged\n{\n    public ICommand SaveCommand { get; private set; }\n\n    public MyViewModel()\n    {\n        SaveCommand = new RelayCommand(Save, CanSave);\n    }\n\n    private void Save() =\u003e /* Save logic */;\n    private bool CanSave() =\u003e /* Validation logic */;\n}\n\n// In the form\nsaveButton.BindCommand(viewModel.SaveCommand);\n```\n\n## 📔 Development Guidelines\n\n### Code Style and Standards\n\nThe project follows strict coding standards enforced through `.editorconfig`:\n\n- **Naming Conventions**: PascalCase for public members, camelCase for private fields\n- **Language Features**: Modern C# features encouraged (nullable reference types, pattern matching)\n- **Documentation**: XML documentation required for all public APIs\n- **Error Handling**: Comprehensive exception handling with appropriate exception types\n\n### File Organization\n\n- **Partial Classes**: Extension methods are organized using partial classes\n- **Single Responsibility**: Each file contains a specific set of related extension methods\n- **Namespace Organization**: Clear namespace hierarchy (`BB84.Extensions`, `BB84.WinForms.Extensions`)\n\n### Dependencies\n\n#### Core Library Dependencies\n\n- **PolySharp**: For backward compatibility polyfills\n- **System.Text.Json**: For JSON serialization (when targeting older frameworks)\n- **System.Net.Http**: For HTTP extensions (when targeting older frameworks)\n\n#### WinForms Library Dependencies\n\n- **System.Windows.Forms**: Windows Forms framework\n- **System.Windows.Input**: For command pattern support\n\n## 💎 Testing\n\n### Test Coverage\n\nThe project maintains comprehensive test coverage with dedicated test projects:\n\n- **BB84.Extensions.Tests**: Unit tests for core extension methods\n- **BB84.WinForms.Extensions.Tests**: Unit tests for WinForms extensions\n\n### Test Framework\n\n- **MSTest**: Primary testing framework\n- **Data-Driven Tests**: Extensive use of `[DataTestMethod]` for parameterized tests\n- **Exception Testing**: Proper validation of exception scenarios\n\n### Example Test Structure\n\n```csharp\n[TestClass]\npublic sealed partial class BooleanExtensionsTests\n{\n    [DataTestMethod]\n    [DataRow(true, false)]\n    [DataRow(false, true)]\n    public void IsFalseTest(bool value, bool expected)\n        =\u003e Assert.AreEqual(expected, value.IsFalse());\n\n    [TestMethod]\n    [ExpectedException(typeof(ArgumentOutOfRangeException))]\n    public void ArrayUpExceptionTest()\n    {\n        int value = 15;\n        int maxValue = 0;\n        _ = value.ArrayUp(maxValue);\n    }\n}\n```\n\n### Running Tests\n\nTests can be executed using:\n\n```powershell\n# Run all tests\ndotnet test\n\n# Run tests with coverage\ndotnet test --collect:\"XPlat Code Coverage\"\n\n# Run specific test project\ndotnet test tests/BB84.Extensions.Tests/BB84.Extensions.Tests.csproj\n```\n\n## 🚧 Building and Deployment\n\n### Build Configuration\n\nThe project uses MSBuild with the following key configurations:\n\n```xml\n\u003cPropertyGroup Label=\"Technical\"\u003e\n    \u003cLangVersion\u003elatest\u003c/LangVersion\u003e\n    \u003cNullable\u003eenable\u003c/Nullable\u003e\n    \u003cImplicitUsings\u003eenable\u003c/ImplicitUsings\u003e\n    \u003cGenerateDocumentationFile\u003eTrue\u003c/GenerateDocumentationFile\u003e\n    \u003cSignAssembly\u003eTrue\u003c/SignAssembly\u003e\n    \u003cAssemblyOriginatorKeyFile\u003e..\\..\\PublicKey.snk\u003c/AssemblyOriginatorKeyFile\u003e\n\u003c/PropertyGroup\u003e\n```\n\n### Versioning Strategy\n\nThe project uses a date-based versioning scheme:\n\n- **Major**: 2 (current major version)\n- **Minor**: 14 (feature version)\n- **Patch**: MMDD (month and day)\n- **Revision**: Minutes since midnight\n\n### Continuous Integration\n\nThe project includes GitHub Actions workflows for:\n\n- **CI (Continuous Integration)**: Build and test validation\n- **CD (Continuous Delivery)**: Package publishing to NuGet\n- **CodeQL**: Security analysis\n- **Dependabot**: Dependency updates\n\n### NuGet Package Publishing\n\nPackages are automatically published to NuGet.org through the CD pipeline when:\n\n- Changes are pushed to the main branch\n- All tests pass\n- Package validation succeeds\n\n## 🤝 Contributing\n\n### Getting Started\n\n1. **Fork the repository** on GitHub\n2. **Clone your fork** locally\n3. **Create a feature branch** from main\n4. **Make your changes** following the coding standards\n5. **Add tests** for new functionality\n6. **Ensure all tests pass**\n7. **Submit a pull request**\n\n### Contribution Guidelines\n\n- Follow the existing code style and patterns\n- Add XML documentation for all public APIs\n- Include unit tests for new functionality\n- Update documentation if needed\n- Ensure compatibility across all target frameworks\n\n### Code of Conduct\n\nThis project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). Please read and follow these guidelines when contributing.\n\n### Pull Request Process\n\n1. Ensure your code builds without warnings\n2. All tests must pass\n3. Include appropriate test coverage\n4. Update documentation as needed\n5. Describe your changes in the PR description\n\n## 📖 Documentation\n\n### API Documentation\n\nComplete API documentation is automatically generated and hosted at:\n**[https://bobobass84.github.io/BB84.Extensions/](https://bobobass84.github.io/BB84.Extensions/)**\n\n### Documentation Generation\n\nDocumentation is generated using DocFX from XML comments in the source code.\n\n### Local Documentation\n\nTo build documentation locally:\n\n```powershell\n# Install DocFX\ndotnet tool install -g docfx\n\n# Build documentation\ndocfx docs/docfx.json --serve\n```\n\n## ⚖️ License\n\nThis project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for the full license text.\n\n## 📚 Support and Resources\n\n- **GitHub Repository**: [https://github.com/BoBoBaSs84/BB84.Extensions](https://github.com/BoBoBaSs84/BB84.Extensions)\n- **NuGet Packages**:\n  - [BB84.Extensions](https://www.nuget.org/packages/BB84.Extensions)\n  - [BB84.WinForms.Extensions](https://www.nuget.org/packages/BB84.WinForms.Extensions)\n- **Issues and Bug Reports**: [GitHub Issues](https://github.com/BoBoBaSs84/BB84.Extensions/issues)\n- **API Documentation**: [Online Documentation](https://bobobass84.github.io/BB84.Extensions/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobobass84%2Fbb84.extensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbobobass84%2Fbb84.extensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobobass84%2Fbb84.extensions/lists"}