Repository navigation
feat(ui): standard controls, accessibility and a String Catalog - #29
Closed
devaryakjha wants to merge 4 commits into
Closed
devaryakjha wants to merge 4 commits into
devaryakjha wants to merge 4 commits into
Conversation
ReaderView now draws the standard controls over the page: a tap in the middle shows a Liquid Glass title bar with the table of contents, search and appearance sheets, and a slider through the book's positions with previous and next chapter buttons. Apps get the location and settings back through callbacks, and apps that lay out their own screen around NavigatorView can reuse ReaderControls, TableOfContentsView, SearchView and AppearanceView on their own. With VoiceOver on, the controls stay visible, every control has a label and the slider reads its position, and VoiceOver's scroll swipes turn pages. Reduce Motion drops the bars' animation. Every user-facing string in the navigator and UI targets lives in a String Catalog, so apps can translate the reader. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
The table of contents view imports both ChekReaderCore and SwiftUI, so a bare Link is ambiguous on Apple platforms. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
…rch' into claude/project-thread-eheuhr-a11y
devaryakjha
changed the base branch from
main
to
claude/project-thread-eheuhr-search
October 21, 2026 03:47
…rch' into claude/project-thread-eheuhr-a11y
2 tasks done
devaryakjha
added a commit
that referenced
this pull request
Oct 21, 2026
Lands four pull requests in one: - #28 feat(core): search a publication's text. Publication.search finds a query in reflowable formats and PDFs, returning Locators that go(to:) opens at the match, with the text around it. - #29 feat(ui): standard controls, accessibility and a String Catalog. ReaderView draws a title bar, table of contents, search and appearance sheets and a position slider; every control is labelled for VoiceOver, and user-facing strings are localizable. - #30 feat(archives): read CBR and CB7 through libarchive, in the optional ChekReaderArchives product. - #27 Point the README at the 0.1.0 release instead of main. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
Contributor
Author
|
Landed on Generated by Claude Code |
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.
Requested by Arya · project thread
Before
ReaderViewshowed the page and nothing else. There was no way to open the table of contents, change the text size or theme, jump through the book, or search, short of an app building all of it onReaderController. The navigator's few user-facing strings had no String Catalog, so they couldn't be translated.After
TableOfContentsView(nested entries, the current chapter marked, chapters listed when a book has no contents),SearchView(searches as you type, results with the chapter title and the match in bold, tap to go there) andAppearanceView(text size, font, line height, margins, theme, page turn, comic layout, reading direction; text settings only for reflowable books). Each applies to the reader at once.ReaderViewtakespreferencesand reportsonLocationChangeandonPreferencesChange, so an app can save and restore both.ReaderControlsand the three sheets are public and take aReaderController, for apps that draw their own screen aroundNavigatorView.ChekReaderUIandChekReaderNavigatoreach get aLocalizable.xcstringswith every user-facing string, with translator comments on the ambiguous ones and a plural rule for result counts.How
Sources/ChekReaderUI:ReaderViewcomposesNavigatorView, the state view,ReaderControlsand a reporter view that watches the location and preferences on its own, so page turns don't redraw the reader.ReaderControlsholds the two bars and the sheet selection; the chapter title and the position bar readcontroller.locationin their own views.Package.swiftprocesses the catalogs on Apple platforms and excludes them on Linux, where SwiftPM has no rule for.xcstringsand would warn.ReaderController, whose behaviour the navigator tests already cover.Built and tested on Linux here with Swift 6.4.1 (all targets, 180 tests pass). The SwiftUI code only compiles on Apple platforms and there's no Xcode in this environment, so the Apple CI job is the first build of it; I'll fix anything it turns up.
Generated by Claude Code