{"id":28092533,"url":"https://github.com/pierrejanineh-com/progressui","last_synced_at":"2025-05-15T15:13:45.398Z","repository":{"id":292535156,"uuid":"981194683","full_name":"PierreJanineh-com/ProgressUI","owner":"PierreJanineh-com","description":"A highly customizable and animated circular progress indicator for SwiftUI. Supports dynamic coloring, spinner mode, multiple sizes, and easy appearance customization.","archived":false,"fork":false,"pushed_at":"2025-05-13T16:23:13.000Z","size":3667,"stargazers_count":14,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-05-14T14:34:33.917Z","etag":null,"topics":["bar","chart","circle","pie","progress","spinner","spm","swiftui","swit","xcode"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/PierreJanineh-com.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-10T14:55:43.000Z","updated_at":"2025-05-13T14:58:14.000Z","dependencies_parsed_at":"2025-05-13T13:19:27.890Z","dependency_job_id":null,"html_url":"https://github.com/PierreJanineh-com/ProgressUI","commit_stats":null,"previous_names":["pierrejanineh-com/progressui"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreJanineh-com%2FProgressUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreJanineh-com%2FProgressUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreJanineh-com%2FProgressUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PierreJanineh-com%2FProgressUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PierreJanineh-com","download_url":"https://codeload.github.com/PierreJanineh-com/ProgressUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254364267,"owners_count":22058880,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bar","chart","circle","pie","progress","spinner","spm","swiftui","swit","xcode"],"created_at":"2025-05-13T13:19:25.142Z","updated_at":"2025-05-15T15:13:45.377Z","avatar_url":"https://github.com/PierreJanineh-com.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ProgressUI\n\n[![](https://img.shields.io/endpoint?url=https://swiftpackageindex.com/api/packages/PierreJanineh-com/ProgressUI/badge?type=swift-versions)](https://swiftpackageindex.com/pierrejanineh-com/ProgressUI)\n[![](https://img.shields.io/endpoint?url=https://swiftpackageindex.com/api/packages/PierreJanineh-com/ProgressUI/badge?type=platforms)](https://swiftpackageindex.com/pierrejanineh-com/ProgressUI)\n[![](https://img.shields.io/github/v/release/PierreJanineh-com/ProgressUI)]()\n\n\u003cimg src=\"./example.gif\" alt=\"Example ProgressUI\" width=\"400\" /\u003e\n\n`ProgressUI` is a SwiftUI package that provides a highly customizable circular progress indicator. It supports dynamic coloring based on progress states, multiple size options, and smooth animations, making it perfect for showing progress, loading states, or status indicators in your iOS, macOS, watchOS, visionOS, and tvOS applications.\n\n## Features\n- 🎨 Dynamic progress colors based on state\n- 🔄 Spinner mode for loading states\n- 📏 Multiple size options (small/large/custom)\n- ⚡️ Smooth animations and transitions\n- 🎯 Customizable track and progress colors\n- 📐 Adjustable stroke widths\n- 🔲 Round or square line caps\n\n## Installation\n\n### Swift Package Manager\nAdd the package by going to your Xcode project:\n1. Select your project in the file navigator\n2. Choose the project or target where you want to add the package\n3. Go to the Package Dependencies tab\n4. Click the `+` button\n5. Search for `ProgressUI` using the repository URL:\n    ```bash\n    https://github.com/PierreJanineh-com/ProgressUI\n    ```\n\n## Usage\n\u003e Check out the full example in this [here](./Example).\n\n### Basic Usage\n``` swift\nimport SwiftUI\nimport ProgressUI\n\nstruct ContentView: View {\n    var body: some View {\n        ProgressUI(progress: 0.5)\n    }\n}\n```\n\n### Progress with Dynamic Colors\n``` swift\nenum StorageStatus: CaseIterable, Progressable {\n    case safe\n    case warning\n    case critical\n    case full\n    \n    var color: Color { innerColor.opacity(0.4) }\n    \n    // Optional: Add inner color for layered effect\n    var innerColor: Color? {\n        switch self {\n        case .safe:     return .green\n        case .warning:  return .yellow\n        case .critical: return .orange\n        case .full:     return .red\n        }\n    }\n    \n    static func calculate(from progress: CGFloat) -\u003e Status {\n        let level: CGFloat = CGFloat(1) / CGFloat(Status.allCases.count)\n        \n        return switch progress {\n            case 0...level:                 Excellent\n            case level...(level * 2):       Normal\n            case (level * 2)...(level * 3): SemiNormal\n            case (level * 3)...(level * 4): Bad\n            case (level * 4)...(level * 5): Critical\n            default:                        Danger\n        }\n    }\n}\n\nstruct ContentView: View {\n    @State private var progress: CGFloat = 0.0\n    \n    var body: some View {\n        ProgressUI(\n            progress: $progress,\n            options: .init(isRounded: true),\n            statusType: StorageStatus.self\n        )\n    }\n}\n```\n\n### Loading Spinner\n``` swift\nstruct LoadingView: View {\n    var body: some View {\n        ProgressUI(\n            progress: .constant(1),\n            options: .init(\n                isSpinner: true,\n                spinnerCycleDuration: 2,\n                progressColor: .blue\n            )\n        )\n    }\n}\n```\n\n### Customization Options\n``` swift\nlet options = Options(\n    size: .large,             // Size preset\n    trackColor: .gray,        // Color of the background track\n    trackWidth: 45,           // Custom track width\n    animationMaxValue: 0.06,  // Progress threshold for width animation\n    animation: .easeInOut,    // Custom animation\n    innerProgressWidth: 5,    // Width of inner progress line\n    innerProgressColor: .blue.opacity(0.3), // Optional inner progress color\n    progressColor: .blue,     // Main progress color\n    isRounded: true,           // Round or square line caps\n    isClockwise: true,         // Rotation direction\n    isSpinner: false,          // Enable spinner mode\n    spinnerCycleDuration: 2   // Duration of spinner rotation\n)\n```\n\n## Platforms\nThe ProgressUI package supports the following platforms:\n- iOS 14.0+\n- macOS 11.0+\n- macCatalyst 14.0+\n- watchOS 7.0+\n- tvOS 15.0+\n- visionOS 1.0+\n\n## Contribution\nFeel free to contribute by creating issues or submitting pull requests. Before submitting, make sure to:\n1.  Fork the repository.\n2.  Create your feature branch `(git checkout -b feature/my-feature)`.\n3.  Commit your changes `(git commit -m 'Add some feature')`.\n4.  Push to the branch `(git push origin feature/my-feature)`.\n5.  Open a pull request.\n\n## License\nThis project is licensed under the **MIT License**. See the **LICENSE** file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierrejanineh-com%2Fprogressui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpierrejanineh-com%2Fprogressui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierrejanineh-com%2Fprogressui/lists"}