{"id":2472,"url":"https://github.com/loryhuz/CleanyModal","last_synced_at":"2025-08-03T00:30:49.979Z","repository":{"id":33083556,"uuid":"128122887","full_name":"loryhuz/CleanyModal","owner":"loryhuz","description":"Swift UI Kit to present clean modal/alert","archived":false,"fork":false,"pushed_at":"2022-05-14T21:05:53.000Z","size":122,"stargazers_count":491,"open_issues_count":4,"forks_count":27,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-04-24T14:48:41.676Z","etag":null,"topics":["alert","modal","swift","ui","ui-components"],"latest_commit_sha":null,"homepage":null,"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/loryhuz.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}},"created_at":"2018-04-04T21:14:31.000Z","updated_at":"2024-04-19T14:06:28.000Z","dependencies_parsed_at":"2022-07-15T21:01:10.035Z","dependency_job_id":null,"html_url":"https://github.com/loryhuz/CleanyModal","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loryhuz%2FCleanyModal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loryhuz%2FCleanyModal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loryhuz%2FCleanyModal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loryhuz%2FCleanyModal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loryhuz","download_url":"https://codeload.github.com/loryhuz/CleanyModal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228503228,"owners_count":17930544,"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":["alert","modal","swift","ui","ui-components"],"created_at":"2024-01-05T20:16:14.576Z","updated_at":"2024-12-06T17:31:08.908Z","avatar_url":"https://github.com/loryhuz.png","language":"Swift","funding_links":[],"categories":["UI","Swift","HarmonyOS"],"sub_categories":["Alert \u0026 Action Sheet","Windows Manager"],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/3198863/51546931-839ac800-1e65-11e9-89a0-aa0d79e25e61.png\" /\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"http://cocoapods.org/pods/CleanyModal\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/v/CleanyModal.svg?style=flat\"/\u003e\u003c/a\u003e\n\u003ca href=\"http://cocoapods.org/pods/CleanyModal\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/l/CleanyModal.svg?style=flat\"/\u003e\u003c/a\u003e\n\u003ca href=\"http://cocoapods.org/pods/CleanyModal\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/p/CleanyModal.svg?style=flat\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://swift.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Swift-5-orange.svg?style=flat\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eCleanyModal\u003c/strong\u003e is a good way to use UI-Customised alerts with ease\u003c/p\u003e\n\n## Features\n\n- [x] Present some kind of clean alerts (With same API as UIAlertViewController)\n- [x] Add easily Textfields or Custom views as an Alert contains content UIStackView\n- [x] Action Sheets\n- [x] Present full-custom components as modal from a container view\n- [x] iOS 13 compatible with dark/light mode implemented by default\n\n## Demo\n\n\u003cimg src=\"https://user-images.githubusercontent.com/3198863/51548417-91058180-1e68-11e9-955b-2a7238a09afb.gif\" width=\"250\" height=\"542\" /\u003e\n\nPresent highly customizable and clean alert from provided built-in methods:\n\n\u003cimg src=\"https://user-images.githubusercontent.com/3198863/44787753-4c670a00-ab98-11e8-869e-a219c82633c0.jpeg\" width=\"250\" height=\"542\" /\u003e\n\nUse root modal system to present your custom components and use only the navigation/interaction stuff:\n\n\u003cimg src=\"https://user-images.githubusercontent.com/3198863/38334728-783ae638-385c-11e8-82bf-b6fa65e528ce.jpeg\" width=\"250\" height=\"445\" /\u003e\n\n## Example\n\nTo run the example project, clone the repo, and run `pod install` from the Example directory first.\n\n### Preview\n\nPresent a clean Alert with default style:\n\n```swift\nlet alert = MyAlertViewController(\n    title: \"Hello world\",\n    message: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed massa a magna semper semper a eget justo\",\n    imageName: \"warning_icon\")\n\nalert.addAction(title: \"OK\", style: .default)\nalert.addAction(title: \"Cancel\", style: .cancel)\n\npresent(alert, animated: true, completion: nil)\n```\n\nApply your own style/theme easily :\n\n```swift\nclass MyAlertViewController: CleanyAlertViewController {\n    init(title: String?, message: String?, imageName: String? = nil, preferredStyle: CleanyAlertViewController.Style = .alert) {\n        let styleSettings = CleanyAlertConfig.getDefaultStyleSettings()\n        styleSettings[.tintColor] = .yellow\n        styleSettings[.destructiveColor] = .pink\n        super.init(title: title, message: message, imageName: imageName, preferredStyle: preferredStyle, styleSettings: styleSettings)\n    }\n}\n```\nNeed to push customization of your Alerts further ? \n\nExtend styles settings keys :\n\n```swift\npublic extension CleanyAlertConfig.StyleKeys {\n  public static let shadowOffset = CleanyAlertConfig.StyleKey\u003cCGSize\u003e(\"shadowOffset\")\n}\n```\nThen apply these news keys in viewDidLoad() implementation of your custom alert.\nIf you only want to present a custom component (not an alert) as a modal, inherit directly form *CleanyModalViewController*\n\nSee example project to see all abilities to customize, enjoy !\n\n## Requirements\n\n- iOS 9.0+\n- Swift 4.2+\n\n## Installation\n\nCleanyModal is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'CleanyModal'\n```\n\n## Author\n\nlory huz, lory.huz@gmail.com\n\n## License\n\nCleanyModal is available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floryhuz%2FCleanyModal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floryhuz%2FCleanyModal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floryhuz%2FCleanyModal/lists"}