[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6931":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":20,"defaultBranch":21,"hasWiki":19,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":16,"starSnapshotCount":16,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},6931,"PanModal","slackhq\u002FPanModal","slackhq","An elegant and highly customizable presentation API for constructing bottom sheet modals on iOS.","",null,"Swift",3782,637,3784,74,0,60.41,"MIT License",true,false,"master",[],"2026-06-12 04:00:31","\n### PanModal is an elegant and highly customizable presentation API for constructing bottom sheet modals on iOS.\n\n\u003Cp align=\"center\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fslackhq\u002FPanModal\u002Fraw\u002Fmaster\u002FScreenshots\u002FpanModal.gif\" width=\"30%\" height=\"30%\" alt=\"Screenshot Preview\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-iOS_10+-green.svg\" alt=\"Platform: iOS 10.0+\" \u002F>\n    \u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fswift\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLanguage-Swift_5-blueviolet.svg\" alt=\"Language: Swift 5\" \u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fcocoapods.org\u002Fpods\u002FPanModal\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCocoaPods-v1.0-red.svg\" alt=\"CocoaPods compatible\" \u002F>\u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-blue.svg\" alt=\"Carthage compatible\" \u002F>\u003C\u002Fa>\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green.svg\" alt=\"License: MIT\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n    \u003Ca href=\"#features\">Features\u003C\u002Fa>\n  • \u003Ca href=\"#compatibility\">Compatibility\u003C\u002Fa>\n  • \u003Ca href=\"#installation\">Installation\u003C\u002Fa>\n  • \u003Ca href=\"#usage\">Usage\u003C\u002Fa>\n  • \u003Ca href=\"#documentation\">Documentation\u003C\u002Fa>\n  • \u003Ca href=\"#contributing\">Contributing\u003C\u002Fa>\n  • \u003Ca href=\"#authors\">Authors\u003C\u002Fa>\n  • \u003Ca href=\"#license\">License\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\nRead our \u003Ca href=\"https:\u002F\u002Fslack.engineering\u002Fpanmodal-better-support-for-thumb-accessibility-on-slack-mobile-52b2a7596031\" target=\"_blank\">blog\u003C\u002Fa> on how Slack is getting more :thumbsup: with PanModal\n\nSwift 4.2 support can be found on the `Swift4.2` branch.\n\u003C\u002Fp>\n\n## Features\n\n* Supports any type of `UIViewController`\n* Seamless transition between modal and content\n* Maintains 60 fps performance\n\n## Compatibility\n\nPanModal requires **iOS 10+** and is compatible with **Swift 4.2** projects.\n\n## Installation\n\n* \u003Ca href=\"https:\u002F\u002Fguides.cocoapods.org\u002Fusing\u002Fusing-cocoapods.html\" target=\"_blank\">CocoaPods\u003C\u002Fa>:\n\n```ruby\npod 'PanModal'\n```\n\n* \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage\" target=\"_blank\">Carthage\u003C\u002Fa>:\n\n```ruby\ngithub \"slackhq\u002FPanModal\"\n```\n\n* \u003Ca href=\"https:\u002F\u002Fswift.org\u002Fpackage-manager\u002F\" target=\"_blank\">Swift Package Manager\u003C\u002Fa>:\n\n```swift\ndependencies: [\n  .package(url: \"https:\u002F\u002Fgithub.com\u002Fslackhq\u002FPanModal.git\", .exact(\"1.2.6\")),\n],\n```\n\n## Usage\n\nPanModal was designed to be used effortlessly. Simply call `presentPanModal` in the same way you would expect to present a `UIViewController`\n\n```swift\n.presentPanModal(yourViewController)\n```\n\nThe presented view controller must conform to `PanModalPresentable` to take advantage of the customizable options\n\n```swift\nextension YourViewController: PanModalPresentable {\n\n    var panScrollable: UIScrollView? {\n        return nil\n    }\n}\n```\n\n### PanScrollable\n\nIf the presented view controller has an embedded `UIScrollView` e.g. as is the case with `UITableViewController`, panModal will seamlessly transition pan gestures between the modal and the scroll view\n\n```swift\nclass TableViewController: UITableViewController, PanModalPresentable {\n\n    var panScrollable: UIScrollView? {\n        return tableView\n    }\n}\n```\n\n### Adjusting Heights\n\nHeight values of the panModal can be adjusted by overriding `shortFormHeight` or `longFormHeight`\n\n```swift\nvar shortFormHeight: PanModalHeight {\n    return .contentHeight(300)\n}\n\nvar longFormHeight: PanModalHeight {\n    return .maxHeightWithTopInset(40)\n}\n```\n\n### Updates at Runtime\n\nValues are stored during presentation, so when adjusting at runtime you should call `panModalSetNeedsLayoutUpdate()`\n\n```swift\nfunc viewDidLoad() {\n    hasLoaded = true\n\n    panModalSetNeedsLayoutUpdate()\n    panModalTransition(to: .shortForm)\n}\n\nvar shortFormHeight: PanModalHeight {\n    if hasLoaded {\n        return .contentHeight(200)\n    }\n    return .maxHeight\n}\n```\n\n### Sample App\n\nCheck out the [Sample App](https:\u002F\u002Fgithub.com\u002Fslackhq\u002FPanModal\u002Ftree\u002Fmaster\u002FSample) for more complex configurations of `PanModalPresentable`, including navigation controllers and stacked modals.\n\n## Documentation\nOption + click on any of PanModal's methods or notes for detailed documentation.\n\n\u003Cp align=\"left\">\n    \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fslackhq\u002FPanModal\u002Fblob\u002Fmaster\u002FScreenshots\u002Fdocumentation.png\" width=\"50%\" height=\"50%\" alt=\"Screenshot Preview\" \u002F>\n\u003C\u002Fp>\n\n## Contributing\n\nWe're glad to be open sourcing this library. We use it in numerous places within the slack app and expect it to be easy to use as well as modify; we've added extensive documentation within the code to support that.\n\nWe will only be fixing critical bugs, thus, for any non-critical issues or feature requests we hope to be able to rely on the community using the library to add what they need. For more information, please read the [contributing guidelines](https:\u002F\u002Fgithub.com\u002Fslackhq\u002FPanModal\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md).\n\n## Authors\n\n[Stephen Sowole](https:\u002F\u002Fgithub.com\u002Fste57) • [Tosin Afolabi](https:\u002F\u002Fgithub.com\u002Ftosinaf)\n\n## License\n\n\u003Cb>PanModal\u003C\u002Fb> is released under a MIT License. See LICENSE file for details.\n","PanModal 是一个优雅且高度可定制的 API，用于在 iOS 上构建底部弹出式模态视图。它支持任意类型的 `UIViewController`，并提供无缝过渡效果和保持 60 fps 的性能表现。该项目使用 Swift 语言编写，兼容 iOS 10 及以上版本，并可通过 CocoaPods、Carthage 或 Swift Package Manager 方便地集成到项目中。适用于需要为用户提供流畅交互体验的应用场景，特别是在需要展示额外信息或选项时，如设置页面、详细信息查看等。",2,"2026-06-11 03:09:37","top_language"]