{"adoption": {"forks": 89, "observed_at": "2026-08-28T04:04:52.309481+00:00", "stars": 1489}, "canonical_url": "https://ross.abutalabs.com/products/panels", "card": {"archived": false, "artifact_type": "framework", "description": "Panels is a framework to easily add sliding panels to your application", "domain": ["mobile-development", "frontend", "cross-platform"], "enriched": true, "function": ["ui-components", "animation", "mobile-framework"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["antoniocasero/Panels"], "name": "antoniocasero/Panels", "platform": [], "pushed_at": "2020-02-05T21:42:25+00:00", "repo": "antoniocasero/Panels", "stars": 1489, "tags": ["sliding-panels", "bottom-sheet", "popup", "uikit", "cocoapods", "carthage", "safe-area", "container-view-controller", "ios", "swift", "mobile"], "topics": ["swift4", "sliding-menu", "sliding", "panel", "panels", "safe-area", "iphone-x", "containerviewcontroller", "ui", "ux", "bottom", "popup", "notifications"], "urls": [], "use_cases": ["add a bottom sheet panel to my iOS app", "show a sliding popup menu in Swift", "implement a draggable bottom panel like Apple Maps", "present a collapsible panel that respects the iPhone X safe area", "show a panel that moves when the keyboard appears", "add a sliding notification drawer to my view controller"], "what_it_is": "Panels is a Swift framework for iOS that makes it easy to add sliding panels (bottom sheets, popups, sliding menus) to an application. It handles safe areas on newer devices and adjusts panel position when the keyboard appears or dismisses.", "when_to_avoid": ["you are building with SwiftUI and want native sheet presentation", "you need a heavily maintained library with frequent updates and modern iOS features", "you need highly customizable complex panel layouts beyond expand/collapse behavior"], "when_to_choose": ["you are building a UIKit-based iOS app and want simple sliding/bottom panels", "you need keyboard-aware and safe-area-aware panel behavior out of the box", "you want a lightweight Swift 5 framework installable via CocoaPods or Carthage"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/panels", "repo": "antoniocasero/Panels", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:52.309481+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:33:40.119985+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2505759faff74f7b5039bcecad2f2c38c16e45e4986fabd395e7ed6c53a70b7c", "fetched_at": "2026-08-28T04:04:52.309481+00:00", "kind": "readme", "missing": false, "url": "https://github.com/antoniocasero/Panels"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2945, "days_push": 2401, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}