exyte/PopupView
47.0
Weak · 30 September 2026
4.3k
lines of production code
Swift
primary language
2
measurements over time
What this system is
This system is a Swift library named PopupView that provides SwiftUI modifiers for presenting popups, toasts, and scrollable sheets across iOS, macOS, tvOS, and watchOS. It supports configurable display modes such as overlays, sheets, and independent windows, along with interaction features like drag-to-dismiss and keyboard-safe positioning. The package is distributed via Swift Package Manager and includes utilities for managing window focus and scroll gestures.
Features
Added Xcode workspace configuration for the Swift Package
An Xcode workspace file (contents.xcworkspacedata) has been added to the .swiftpm directory, configuring the workspace to reference the package itself. This enables the package to be opened and edited directly in Xcode as a standalone project, facilitating local development and debugging of the library code.
.swiftpm · high confidence
Added sample app assets and resources
The PopupExample project now includes a complete set of asset catalog resources, including a new accent color with dark mode support, a full suite of app icons for iPhone and iPad, and a collection of image assets (avatars, icons, and illustrations) used to populate the example UI.
PopupExample · high confidence
Initial release of PopupView with configurable display modes and dismissal behaviors
This change introduces the PopupView library, providing SwiftUI modifiers to present popups, toasts, and scrollable sheets. Users can configure popups to display as overlays, sheets, or independent windows, and control dismissal via tap, drag, or auto-hide timers. The API supports custom backgrounds, tap-through options, and keyboard-safe positioning, with specific handling for TVOS remote commands and macOS drag dismissal states.
Sources/PopupView · high confidence
PopupView Utils: New drag-to-dismiss, scroll integration, and keyboard-safe window management
This change introduces several new utility components within the PopupView library to enhance interaction and platform compatibility. A new DragToDismissHelper and ScrollPopupModifier enable users to dismiss popups by dragging, with specific logic for scrollable content where the drag gesture transitions from scrolling to dismissing once the scroll reaches the top. The WindowManager now supports a \becomesKeyWindow\ option, allowing popups to be presented without stealing keyboard focus from the presenting screen, which is critical for non-interactive toasts. Additionally, a KeyboardHeightHelper monitors keyboard state for iOS, and a TransparentNonAnimatableFullScreenModifier provides a way to present full-screen content without animation, addressing specific UI state requirements on iOS.
Sources/PopupView/Utils · high confidence
Dependencies
Initial Swift Package Manager manifest for PopupView
The project now includes a Package.swift file, enabling installation via Swift Package Manager. The package targets iOS 17, macOS 14, tvOS 17, and watchOS 10, and enables the StrictConcurrency experimental feature for the PopupView target.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 48 → 47 (-0.9)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 100 → 98 (-1.9)
- Architecture 91 → 96 (+4.9)
- Maturity 51 → 51 (+0.5)
- Readiness 17 → 17 (-0.7)
- Security 100 → 100 (+0.0)
Resolved (1)
- Off-boarding risk: anonymized user #1
New (14)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Duplicate intent for setting the primary content. 'body' and 'main' likely both set the main view content of the popup, leading to confusion about which method to use.
- Duplicated block (10 lines × 2) (PopupExample/PopupExample/GithubExample/MockPopupViews/Toasts.swift)
- Duplicated block (11 lines × 2) (PopupExample/PopupExample/GithubExample/MockPopupViews/Popups.swift)
- Duplicated block (13 lines × 2) (PopupExample/PopupExample/Utils/Utils.swift)
- Duplicated block (15 lines × 2) (PopupExample/PopupExample/BGTapsExamplesView.swift)
- Duplicated block (6 lines × 2) (Sources/PopupView/PublicModifiers.swift)
- Duplicated block (8 lines × 3) (PopupExample/PopupExample/BGTapsExamplesView.swift)
- Duplicated block (9 lines × 2) (PopupExample/PopupExample/GithubExample/MockPopupViews/Popups.swift)
- MethodTooLong: GithubExampleView.body (PopupExample/PopupExample/GithubExample/GithubExampleView.swift)
- Off-boarding risk: anonymized user #1
- Redundant and confusingly similar callback methods. 'willDismissCallback' and 'dismissSourceCallback' appear to serve the same purpose (reacting to dismissal events). Furthermore, 'dismissCallback' is overloaded with two signatures (one with DismissSource, one without), and overlaps semantically with 'willDismissCallback'. This creates ambiguity about which callback to use for pre-dismiss vs post-dismiss logic and whether to include the source.
- Repeated repair: Sources/PopupView/PopupBody.swift (Sources/PopupView/PopupBody.swift)
- Repeated repair: Sources/PopupView/PopupModifier.swift (Sources/PopupView/PopupModifier.swift)
Changes since last survey
- 2 commits — 1 feature/other, 1 fixes
By area
- (repo) — 1 commit
- Sources/PopupView — 1 commit
Notable commits
- fix: Fix drag to hide animation after lifting a finger
- change: Merge pull request #299 from Corotata/master
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
exyte/PopupView was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit e053f5066f0e8feee5e053a50445ac2819e4b937 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.