fix(ui): unify reader overlays, empty/error states, and hit targets - #1198
Merged
Merged
Conversation
everpcpc
force-pushed
the
fix/ui-review-batch-2
branch
from
October 4, 2026 09:43
70cd1b0 to
be4a24c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #1197 — review that one first; this diff shrinks to batch-2 only once it merges.
Problem
Second batch from the UI review: the PDF reader overlay never received the chrome polish the DIVINA reader got, empty/error states had grown into four or five hand-drawn variants, and a sweep of plain buttons was only tappable on their glyphs (AGENTS.md rule 23).
.easeInOut+ insertion transition while DIVINA rides a split curve/spring; PDF page numbers hard-cut instead of.numericText(); PDF scrims lacked location stops and the 120pt readability extension past the bars.NoPagesViewwith hardcoded white text, hand-rolled PDF and EPUB error rows, a one-line EPUB empty state), and app empty states used three different icon treatments;AdminRequiredViewand the oneshot error state were hand-drawn too.Fix
.appCurve(0.3), bar slide on.appSpring, always-rendered bars driven by offset instead of insertion transitions, scrim stops with a 120pt extension,.numericText()page transitions, and.accessibilityHiddenon hidden chrome.ByteCountFormatter.ReaderUnavailableView(now with an optional prominent Retry; Close demotes to bordered when Retry is present), deletingNoPagesView.ContentUnavailableVieweverywhere:BrowseStateViewinternally (API unchanged), library list, server reading stats, admin-required, oneshot detail (with Retry), collection series query, picker-sheet no-results viaContentUnavailableView.search, and the PDF search sheet's three states..contentShape(inside labels, per rule 23), 44pt minimum frames, and accessibility labels across the swept buttons; heatmap cells keep their 13pt visuals but gain 28pt hit containers with compensated grid pitch.Validation
make formatmake build— iOS, macOS, tvOS all passmake localize+misc/translate.py list— no missing keys (2 new keys translated for all 10 languages)