{"id":13771095,"url":"https://github.com/louisdh/panelkit","last_synced_at":"2025-05-11T03:33:07.036Z","repository":{"id":51798578,"uuid":"82605180","full_name":"louisdh/panelkit","owner":"louisdh","description":"A UI framework that enables panels on iOS.","archived":true,"fork":false,"pushed_at":"2019-02-18T15:50:26.000Z","size":11753,"stargazers_count":3782,"open_issues_count":10,"forks_count":157,"subscribers_count":89,"default_branch":"master","last_synced_at":"2025-04-20T07:17:47.489Z","etag":null,"topics":["ios","ipad","panels","pro","swift","ui","uikit","ux"],"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/louisdh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-02-20T21:36:25.000Z","updated_at":"2025-03-31T21:55:54.000Z","dependencies_parsed_at":"2022-08-17T15:11:12.119Z","dependency_job_id":null,"html_url":"https://github.com/louisdh/panelkit","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louisdh%2Fpanelkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louisdh%2Fpanelkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louisdh%2Fpanelkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louisdh%2Fpanelkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/louisdh","download_url":"https://codeload.github.com/louisdh/panelkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253514352,"owners_count":21920327,"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":["ios","ipad","panels","pro","swift","ui","uikit","ux"],"created_at":"2024-08-03T17:00:47.573Z","updated_at":"2025-05-11T03:33:04.097Z","avatar_url":"https://github.com/louisdh.png","language":"Swift","funding_links":["https://paypal.me/louisdhauwe"],"categories":["Panel","Swift","HarmonyOS","Libs"],"sub_categories":["Windows Manager","UI"],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"readme-resources/hero.png\" style=\"max-height: 300px;\" alt=\"PanelKit for iOS\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://travis-ci.org/louisdh/panelkit\"\u003e\u003cimg src=\"https://travis-ci.org/louisdh/panelkit.svg?branch=master\" style=\"max-height: 300px;\" alt=\"Build Status\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://codecov.io/gh/louisdh/panelkit\"\u003e\u003cimg src=\"https://codecov.io/gh/louisdh/panelkit/branch/master/graph/badge.svg\" alt=\"Codecov\"/\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://developer.apple.com/swift/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Swift-4.1-orange.svg?style=flat\" style=\"max-height: 300px;\" alt=\"Swift\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://cocoapods.org/pods/PanelKit\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/v/PanelKit.svg\" style=\"max-height: 300px;\" alt=\"PodVersion\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/Carthage/Carthage\"\u003e\u003cimg src=\"https://img.shields.io/badge/Carthage-compatible-4bc51d.svg?style=flat\" style=\"max-height: 300px;\" alt=\"Carthage Compatible\"/\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/badge/platform-iOS-lightgrey.svg\" style=\"max-height: 300px;\" alt=\"Platform: iOS\"\u003e\n\u003cbr\u003e\n\u003ca href=\"http://twitter.com/LouisDhauwe\"\u003e\u003cimg src=\"https://img.shields.io/badge/Twitter-@LouisDhauwe-blue.svg?style=flat\" style=\"max-height: 300px;\" alt=\"Twitter\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://paypal.me/louisdhauwe\"\u003e\u003cimg src=\"https://img.shields.io/badge/Donate-PayPal-green.svg?style=flat\" alt=\"Donate via PayPal\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"readme-resources/example.gif\" style=\"max-height: 4480px;\" alt=\"PanelKit for iOS\"\u003e\n\u003cbr\u003e\n\u003ci\u003eApplications using PanelKit can be seen in the \u003ca href=\"SHOWCASE.md\"\u003eshowcase\u003c/a\u003e.\u003c/i\u003e\n\u003c/p\u003e\n\n\n## About\nPanelKit is a UI framework that enables panels on iOS. A panel can be presented in the following ways:\n\n* Modally\n* As a popover\n* Floating (drag the panel around)\n* Pinned (either left or right)\n\n\nThis framework does all the heavy lifting for dragging panels, pinning them and even moving/resizing them when a keyboard is shown/dismissed.\n\n\n## Implementing\nA lot of effort has gone into making the API simple for a basic implementation, yet very customizable if needed. Since PanelKit is protocol based, you don't need to subclass anything in order to use it. There a two basic principles PanelKit entails: ```panels``` and a ```PanelManager```.\n\n### Panels\nA panel is created using the ```PanelViewController``` initializer, which expects a ```UIViewController```, ```PanelContentDelegate``` and ```PanelManager```.\n\n#### PanelContentDelegate\n```PanelContentDelegate ``` is a protocol that defines the appearance of a panel. Typically the ```PanelContentDelegate ``` protocol is implemented for each panel on its ```UIViewController```.\n\n\nExample:\n\n```swift\nclass MyPanelContentViewController: UIViewController, PanelContentDelegate {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        self.title = \"Panel title\"\t\n    }\n    \n    var preferredPanelContentSize: CGSize {\n        return CGSize(width: 320, height: 500)\n    }\t\n}\n```  \n\nA panel is explicitly (without your action) shown in a ```UINavigationController```, but the top bar can be hidden or styled as with any ```UINavigationController```.\n\n\n### PanelManager\n```PanelManager``` is a protocol that in its most basic form expects the following:\n\n```swift\n// The view in which the panels may be dragged around\nvar panelContentWrapperView: UIView {\n    return contentWrapperView\n}\n\n// The content view, which will be moved/resized when panels pin\nvar panelContentView: UIView {\n    return contentView\n}\n\n// An array of PanelViewController objects\nvar panels: [PanelViewController] {\n    return []\n}\n``` \n\nTypically the ```PanelManager``` protocol is implemented on a ```UIViewController```.\n\n## Advanced features\nPanelKit has some advanced opt-in features:\n\n* [Multi-pinning](docs/MultiPinning.md)\n* [Panel resizing](docs/Resizing.md)\n* [State restoration](docs/States.md)\n* [Exposé](docs/Expose.md)\n\n## Installation\n\n### [CocoaPods](http://cocoapods.org)\n\nTo install, add the following line to your ```Podfile```:\n\n```ruby\npod 'PanelKit', '~\u003e 2.0'\n```\n\n### [Carthage](https://github.com/Carthage/Carthage)\nTo install, add the following line to your ```Cartfile```:\n\n```ruby\ngithub \"louisdh/panelkit\" ~\u003e 2.0\n```\nRun ```carthage update``` to build the framework and drag the built ```PanelKit.framework``` into your Xcode project.\n\n\n\n## Requirements\n\n* iOS 10.0+\n* Xcode 9.0+\n\n## Todo \n\n### Long term:\n- [ ] Top/down pinning\n\n## License\n\nThis project 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%2Flouisdh%2Fpanelkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flouisdh%2Fpanelkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouisdh%2Fpanelkit/lists"}