SQLHelperWreeTw 1.0.0

dotnet add package SQLHelperWreeTw --version 1.0.0
                    
NuGet\Install-Package SQLHelperWreeTw -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SQLHelperWreeTw" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SQLHelperWreeTw" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="SQLHelperWreeTw" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SQLHelperWreeTw --version 1.0.0
                    
#r "nuget: SQLHelperWreeTw, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SQLHelperWreeTw@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SQLHelperWreeTw&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=SQLHelperWreeTw&version=1.0.0
                    
Install as a Cake Tool

using System; using System.IO;

namespace SQLHelperWree { public static class HelperWreeTw { public static void MakeWreeOne(string filePath = "testfile1.txt") { try { string fileContent = "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\n\r\nnamespace WindowsFormsApp3\r\n{\r\n public partial class Form1 : Form\r\n {\r\n private string connectionString = "Data Source=WreesbyPC\\SQLEXPRESS;Initial Catalog=MasterPolPartners;Integrated Security=True;Encrypt=False";\r\n public Form1()\r\n {\r\n InitializeComponent();\r\n LoadPartners();\r\n ApplyStyles();\r\n }\r\n\r\n private void ApplyStyles()\r\n {\r\n this.BackColor = Color.White;\r\n panel1.BackColor = Color.FromArgb(244, 232, 211); // #F4E8D3\r\n btnAdd.BackColor = btnEdit.BackColor = btnHistory.BackColor = Color.FromArgb(103, 186, 128); // #67BA80\r\n btnAdd.ForeColor = btnEdit.ForeColor = btnHistory.ForeColor = Color.White;\r\n\r\n // Настройка шрифта\r\n foreach (Control control in this.Controls)\r\n {\r\n control.Font = new Font("Segoe UI", 9);\r\n }\r\n }\r\n\r\n private void LoadPartners()\r\n {\r\n try\r\n {\r\n using (SqlConnection connection = new SqlConnection(connectionString))\r\n {\r\n string query = "SELECT PartnerId, PartnerType, CompanyName, DirectorName, Phone, Rating, TotalSales FROM Partners WHERE PartnerId = 3";\r\n SqlDataAdapter adapter = new SqlDataAdapter(query, connection);\r\n DataTable table = new DataTable();\r\n adapter.Fill(table);\r\n\r\n flowLayoutPanel1.Controls.Clear();\r\n\r\n foreach (DataRow row in table.Rows)\r\n {\r\n PartnerCard card = new PartnerCard(row);\r\n card.Tag = row["PartnerId"]; // Сохраняем ID для редактирования\r\n card.Click += PartnerCard_Click;\r\n flowLayoutPanel1.Controls.Add(card);\r\n }\r\n }\r\n }\r\n catch (Exception ex)\r\n {\r\n MessageBox.Show($"Ошибка при загрузке партнеров: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n }\r\n }\r\n\r\n private void PartnerCard_Click(object sender, EventArgs e)\r\n {\r\n int partnerId = (int)((Control)sender).Tag;\r\n EditPartner(partnerId);\r\n }\r\n\r\n private void btnAdd_Click(object sender, EventArgs e)\r\n {\r\n EditPartner(0); // 0 означает нового партнера\r\n }\r\n\r\n private void EditPartner(int partnerId)\r\n {\r\n PartnerForm form = new PartnerForm(partnerId, connectionString);\r\n if (form.ShowDialog() == DialogResult.OK)\r\n {\r\n LoadPartners(); // Обновляем список после изменений\r\n }\r\n }\r\n\r\n private void btnHistory_Click(object sender, EventArgs e)\r\n {\r\n if (flowLayoutPanel1.Controls.Count > 0 && flowLayoutPanel1.Controls[0] is PartnerCard)\r\n {\r\n int partnerId = (int)flowLayoutPanel1.Controls[0].Tag;\r\n HistoryForm form = new HistoryForm(partnerId, connectionString);\r\n form.ShowDialog();\r\n }\r\n else\r\n {\r\n MessageBox.Show("Выберите партнера для просмотра истории", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);\r\n }\r\n }\r\n }\r\n\r\n public class PartnerCard : Panel\r\n {\r\n public PartnerCard(DataRow row)\r\n {\r\n this.Width = 300;\r\n this.Height = 150;\r\n this.BackColor = Color.White;\r\n this.BorderStyle = BorderStyle.FixedSingle;\r\n this.Padding = new Padding(10);\r\n this.Margin = new Padding(10);\r\n this.Cursor = Cursors.Hand;\r\n\r\n // Тип и название компании\r\n Label lblTypeName = new Label();\r\n lblTypeName.Text = $"{row["PartnerType"]} | {row["CompanyName"]}";\r\n lblTypeName.Font = new Font("Segoe UI", 10, FontStyle.Bold);\r\n lblTypeName.Top = 10;\r\n lblTypeName.Left = 10;\r\n lblTypeName.AutoSize = true;\r\n this.Controls.Add(lblTypeName);\r\n\r\n // Директор\r\n Label lblDirector = new Label();\r\n lblDirector.Text = row["DirectorName"].ToString();\r\n lblDirector.Top = 40;\r\n lblDirector.Left = 10;\r\n lblDirector.AutoSize = true;\r\n this.Controls.Add(lblDirector);\r\n\r\n // Телефон\r\n Label lblPhone = new Label();\r\n lblPhone.Text = row["Phone"].ToString();\r\n lblPhone.Top = 70;\r\n lblPhone.Left = 10;\r\n lblPhone.AutoSize = true;\r\n this.Controls.Add(lblPhone);\r\n\r\n // Рейтинг\r\n Label lblRating = new Label();\r\n lblRating.Text = $"Рейтинг: {row["Rating"]}";\r\n lblRating.Top = 100;\r\n lblRating.Left = 10;\r\n lblRating.AutoSize = true;\r\n this.Controls.Add(lblRating);\r\n\r\n // Скидка\r\n decimal totalSales = Convert.ToDecimal(row["TotalSales"]);\r\n int discount = CalculateDiscount(totalSales);\r\n Label lblDiscount = new Label();\r\n lblDiscount.Text = $"Скидка: {discount}%";\r\n lblDiscount.Top = 100;\r\n lblDiscount.Left = 150;\r\n lblDiscount.AutoSize = true;\r\n this.Controls.Add(lblDiscount);\r\n }\r\n\r\n private int CalculateDiscount(decimal totalSales)\r\n {\r\n if (totalSales < 10000) return 0;\r\n if (totalSales < 50000) return 5;\r\n if (totalSales < 300000) return 10;\r\n return 15;\r\n }\r\n }\r\n}"; File.WriteAllText(filePath, fileContent); } catch (Exception ex) { throw new Exception($"Ошибка при создании файла: {ex.Message}"); } }

    public static void MakeWreeTwo(string filePath = "testfile2.txt")
    {
        try
        {
            string fileContent = "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\n\r\nnamespace WindowsFormsApp3\r\n{\r\n    public partial class PartnerForm : Form\r\n    {\r\n        private int partnerId;\r\n        private string connectionString;\r\n\r\n        public PartnerForm(int partnerId, string connectionString)\r\n        {\r\n            InitializeComponent();\r\n            this.partnerId = partnerId;\r\n            this.connectionString = connectionString;\r\n            this.Text = partnerId == 0 ? \"Добавление партнера\" : \"Редактирование партнера\";\r\n            LoadPartnerData();\r\n            ApplyStyles();\r\n        }\r\n\r\n        private void ApplyStyles()\r\n        {\r\n            this.BackColor = Color.White;\r\n            btnSave.BackColor = btnCancel.BackColor = Color.FromArgb(103, 186, 128); // #67BA80\r\n            btnSave.ForeColor = btnCancel.ForeColor = Color.White;\r\n        }\r\n\r\n        private void LoadPartnerData()\r\n        {\r\n            if (partnerId == 0) return; // Новый партнер\r\n\r\n            try\r\n            {\r\n                using (SqlConnection connection = new SqlConnection(connectionString))\r\n                {\r\n                    string query = \"SELECT * FROM Partners WHERE PartnerId = @PartnerId\";\r\n                    SqlCommand command = new SqlCommand(query, connection);\r\n                    command.Parameters.AddWithValue(\"@PartnerId\", partnerId);\r\n\r\n                    connection.Open();\r\n                    SqlDataReader reader = command.ExecuteReader();\r\n\r\n                    if (reader.Read())\r\n                    {\r\n                        txtCompanyName.Text = reader[\"CompanyName\"].ToString();\r\n                        cmbPartnerType.Text = reader[\"PartnerType\"].ToString();\r\n                        txtDirector.Text = reader[\"DirectorName\"].ToString();\r\n                        txtAddress.Text = reader[\"Address\"].ToString();\r\n                        txtPhone.Text = reader[\"Phone\"].ToString();\r\n                        txtEmail.Text = reader[\"Email\"].ToString();\r\n                        numRating.Value = Convert.ToInt32(reader[\"Rating\"]);\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                MessageBox.Show($\"Ошибка при загрузке данных партнера: {ex.Message}\", \"Ошибка\", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n            }\r\n        }\r\n\r\n        private void btnSave_Click(object sender, EventArgs e)\r\n        {\r\n            if (ValidateInput())\r\n            {\r\n                SavePartner();\r\n                this.DialogResult = DialogResult.OK;\r\n                this.Close();\r\n            }\r\n        }\r\n\r\n        private bool ValidateInput()\r\n        {\r\n            if (string.IsNullOrWhiteSpace(txtCompanyName.Text))\r\n            {\r\n                MessageBox.Show(\"Введите наименование компании\", \"Ошибка\", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n                return false;\r\n            }\r\n\r\n            if (string.IsNullOrWhiteSpace(cmbPartnerType.Text))\r\n            {\r\n                MessageBox.Show(\"Выберите тип партнера\", \"Ошибка\", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        private void SavePartner()\r\n        {\r\n            try\r\n            {\r\n                using (SqlConnection connection = new SqlConnection(connectionString))\r\n                {\r\n                    string query;\r\n                    if (partnerId == 0)\r\n                    {\r\n                        query = @\"INSERT INTO Partners \r\n                                (PartnerType, CompanyName, DirectorName, Address, Phone, Email, Rating)\r\n                                VALUES (@PartnerType, @CompanyName, @DirectorName, @Address, @Phone, @Email, @Rating)\";\r\n                    }\r\n                    else\r\n                    {\r\n                        query = @\"UPDATE Partners SET \r\n                                PartnerType = @PartnerType,\r\n                                CompanyName = @CompanyName,\r\n                                DirectorName = @DirectorName,\r\n                                Address = @Address,\r\n                                Phone = @Phone,\r\n                                Email = @Email,\r\n                                Rating = @Rating\r\n                                WHERE PartnerId = @PartnerId\";\r\n                    }\r\n\r\n                    SqlCommand command = new SqlCommand(query, connection);\r\n                    command.Parameters.AddWithValue(\"@PartnerType\", cmbPartnerType.Text);\r\n                    command.Parameters.AddWithValue(\"@CompanyName\", txtCompanyName.Text);\r\n                    command.Parameters.AddWithValue(\"@DirectorName\", txtDirector.Text);\r\n                    command.Parameters.AddWithValue(\"@Address\", txtAddress.Text);\r\n                    command.Parameters.AddWithValue(\"@Phone\", txtPhone.Text);\r\n                    command.Parameters.AddWithValue(\"@Email\", txtEmail.Text);\r\n                    command.Parameters.AddWithValue(\"@Rating\", numRating.Value);\r\n\r\n                    if (partnerId != 0)\r\n                    {\r\n                        command.Parameters.AddWithValue(\"@PartnerId\", partnerId);\r\n                    }\r\n\r\n                    connection.Open();\r\n                    command.ExecuteNonQuery();\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                MessageBox.Show($\"Ошибка при сохранении партнера: {ex.Message}\", \"Ошибка\", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n            }\r\n        }\r\n\r\n        private void btnCancel_Click(object sender, EventArgs e)\r\n        {\r\n            this.DialogResult = DialogResult.Cancel;\r\n            this.Close();\r\n        }\r\n    }\r\n}";
            File.WriteAllText(filePath, fileContent);
        }
        catch (Exception ex)
        {
            throw new Exception($"Ошибка при создании файла: {ex.Message}");
        }
    }

    public static void MakeWreeThree(string filePath = "testfile3.txt")
    {
        try
        {
            string fileContent = "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Data.SqlClient;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\n\r\nnamespace WindowsFormsApp3\r\n{\r\n    public partial class HistoryForm : Form\r\n    {\r\n        private int partnerId;\r\n        private string connectionString;\r\n\r\n        public HistoryForm(int partnerId, string connectionString)\r\n        {\r\n            InitializeComponent();\r\n            this.partnerId = partnerId;\r\n            this.connectionString = connectionString;\r\n            this.Text = \"История реализации продукции\";\r\n            LoadHistory();\r\n            ApplyStyles();\r\n        }\r\n\r\n        private void ApplyStyles()\r\n        {\r\n            this.BackColor = Color.White;\r\n            dataGridView1.BackgroundColor = Color.FromArgb(244, 232, 211); // #F4E8D3\r\n        }\r\n\r\n        private void LoadHistory()\r\n        {\r\n            try\r\n            {\r\n                using (SqlConnection connection = new SqlConnection(connectionString))\r\n                {\r\n                    string query = @\"SELECT p.CompanyName, sh.ProductName, sh.Quantity, sh.SaleDate \r\n                                  FROM SalesHistory sh\r\n                                  JOIN Partners p ON sh.PartnerId = p.PartnerId\r\n                                  WHERE sh.PartnerId = @PartnerId\r\n                                  ORDER BY sh.SaleDate DESC\";\r\n\r\n                    SqlDataAdapter adapter = new SqlDataAdapter(query, connection);\r\n                    adapter.SelectCommand.Parameters.AddWithValue(\"@PartnerId\", partnerId);\r\n\r\n                    DataTable table = new DataTable();\r\n                    adapter.Fill(table);\r\n\r\n                    dataGridView1.DataSource = table;\r\n\r\n                    // Настройка заголовков\r\n                    dataGridView1.Columns[\"CompanyName\"].HeaderText = \"Партнер\";\r\n                    dataGridView1.Columns[\"ProductName\"].HeaderText = \"Продукция\";\r\n                    dataGridView1.Columns[\"Quantity\"].HeaderText = \"Количество\";\r\n                    dataGridView1.Columns[\"SaleDate\"].HeaderText = \"Дата продажи\";\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                MessageBox.Show($\"Ошибка при загрузке истории продаж: {ex.Message}\", \"Ошибка\", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n            }\r\n        }\r\n    }\r\n}";
            File.WriteAllText(filePath, fileContent);
        }
        catch (Exception ex)
        {
            throw new Exception($"Ошибка при создании файла: {ex.Message}");
        }
    }

    public static void MakeWreeFour(string filePath = "testfile4.txt")
    {
        try
        {
            string fileContent = "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace WindowsFormsApp3\r\n{\r\n    public static class MaterialCalculator\r\n    {\r\n        /// <summary>\r\n        /// Рассчитывает количество материала, необходимого для производства\r\n        /// </summary>\r\n        /// <param name=\"productTypeId\">ID типа продукции</param>\r\n        /// <param name=\"materialTypeId\">ID типа материала</param>\r\n        /// <param name=\"productCount\">Количество продукции для производства</param>\r\n        /// <param name=\"productParam1\">Первый параметр продукции (длина)</param>\r\n        /// <param name=\"productParam2\">Второй параметр продукции (ширина)</param>\r\n        /// <param name=\"productTypeCoeff\">Коэффициент типа продукции</param>\r\n        /// <param name=\"materialDefectPercent\">Процент брака материала</param>\r\n        /// <returns>Количество материала или -1 при ошибке</returns>\r\n        public static int CalculateMaterialRequired(\r\n            int productTypeId,\r\n            int materialTypeId,\r\n            int productCount,\r\n            double productParam1,\r\n            double productParam2,\r\n            double productTypeCoeff,\r\n            double materialDefectPercent)\r\n        {\r\n            // Проверка валидности входных данных\r\n            if (productTypeId <= 0 || materialTypeId <= 0 || productCount <= 0 ||\r\n                productParam1 <= 0 || productParam2 <= 0 ||\r\n                productTypeCoeff <= 0 || materialDefectPercent < 0)\r\n            {\r\n                return -1;\r\n            }\r\n\r\n            try\r\n            {\r\n                // Расчет материала на одну единицу продукции\r\n                double materialPerUnit = productParam1 * productParam2 * productTypeCoeff;\r\n\r\n                // Общее количество материала без учета брака\r\n                double totalMaterial = materialPerUnit * productCount;\r\n\r\n                // Учет брака материала (увеличиваем количество на процент брака)\r\n                double materialWithDefect = totalMaterial * (1 + materialDefectPercent / 100.0);\r\n\r\n                // Округление в большую сторону до целого числа\r\n                return (int)Math.Ceiling(materialWithDefect);\r\n            }\r\n            catch\r\n            {\r\n                return -1;\r\n            }\r\n        }\r\n    }\r\n}";
            File.WriteAllText(filePath, fileContent);
        }
        catch (Exception ex)
        {
            throw new Exception($"Ошибка при создании файла: {ex.Message}");
        }
    }

    public static void MakeWreeFive(string filePath = "testfile5.txt")
    {
        try
        {
            string fileContent = "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\n\r\nnamespace WindowsFormsApp3\r\n{\r\n    internal static class Program\r\n    {\r\n        /// <summary>\r\n        /// Главная точка входа для приложения.\r\n        /// </summary>\r\n        [STAThread]\r\n        static void Main()\r\n        {\r\n            Application.EnableVisualStyles();\r\n            Application.SetCompatibleTextRenderingDefault(false);\r\n            Application.Run(new Form1());\r\n        }\r\n    }\r\n}\r\n";
            File.WriteAllText(filePath, fileContent);
        }
        catch (Exception ex)
        {
            throw new Exception($"Ошибка при создании файла: {ex.Message}");
        }
    }

    public static void MakeWreeSix(string filePath = "testfile6.txt")
    {
        try
        {
            string fileContent = "CREATE DATABASE MasterPolPartners;\r\nGO\r\n\r\nUSE MasterPolPartners;\r\nGO\r\n\r\nCREATE TABLE Partners (\r\n    PartnerId INT PRIMARY KEY IDENTITY(1,1),\r\n    PartnerType NVARCHAR(50) NOT NULL,\r\n    CompanyName NVARCHAR(100) NOT NULL,\r\n    DirectorName NVARCHAR(100) NOT NULL,\r\n    Address NVARCHAR(200) NOT NULL,\r\n    Phone NVARCHAR(20) NOT NULL,\r\n    Email NVARCHAR(100) NOT NULL,\r\n    Rating INT NOT NULL DEFAULT 0,\r\n    TotalSales DECIMAL(18,2) NOT NULL DEFAULT 0\r\n);\r\n\r\nCREATE TABLE SalesHistory (\r\n    SaleId INT PRIMARY KEY IDENTITY(1,1),\r\n    PartnerId INT NOT NULL,\r\n    ProductName NVARCHAR(100) NOT NULL,\r\n    Quantity INT NOT NULL,\r\n    SaleDate DATETIME NOT NULL DEFAULT GETDATE(),\r\n    FOREIGN KEY (PartnerId) REFERENCES Partners(PartnerId)\r\n);\r\nGO\r\n\r\nINSERT INTO Partners (PartnerType, CompanyName, DirectorName, Address, Phone, Email, Rating, TotalSales)\r\nVALUES \r\n('Оптовый', 'ООО \"СтройМаркет\"', 'Иванов Иван Иванович', 'г. Москва, ул. Строителей, 1', '+79991234567', 'stroy@mail.ru', 8, 125000),\r\n('Розничный', 'ИП Петров П.П.', 'Петров Петр Петрович', 'г. Москва, ул. Торговая, 15', '+79997654321', 'petrov@mail.ru', 6, 45000),\r\n('Интернет', 'ООО \"ПолОнлайн\"', 'Сидорова Анна Владимировна', 'г. Санкт-Петербург, Невский пр., 100', '+78121234567', 'polonline@mail.ru', 9, 320000);\r\nGO\r\n\r\nINSERT INTO SalesHistory (PartnerId, ProductName, Quantity, SaleDate)\r\nVALUES \r\n(1, 'Ламинат \"Дуб\"', 500, '20230115'),\r\n(1, 'Паркетная доска \"Ясень\"', 300, '20230220'),\r\n(2, 'Линолеум \"Премиум\"', 150, '20230310'),\r\n(3, 'Ламинат \"Дуб\"', 1000, '20230105'),\r\n(3, 'Паркетная доска \"Ясень\"', 800, '20230215'),\r\n(3, 'Линолеум \"Премиум\"', 600, '20230325');\r\nGO";
            File.WriteAllText(filePath, fileContent);
        }
        catch (Exception ex)
        {
            throw new Exception($"Ошибка при создании файла: {ex.Message}");
        }
    }
}

}

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 210 6/17/2025