Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
97ac11c
feat: expose generic reader activity and visible content coverage
Eoic Oct 6, 2026
4b2284d
Fix reader activity reporting and serialization
Eoic Oct 8, 2026
8705b3e
fix: improve reader navigation and expose host panel routes
Eoic Oct 10, 2026
4dc538e
style: format real-book reader regression tests
Eoic Oct 10, 2026
1472919
fix: preserve SVG artwork and respect custom toolbar geometry
Eoic Oct 10, 2026
ea5de8e
feat: add reader selections, highlights and unobtrusive controls
Eoic Oct 26, 2026
9f48c21
fix: preserve PDF keyboard focus and resolve EPUB TOC positions
Eoic Oct 26, 2026
cffcf1b
test: initialize PDFium from Flutter native assets on clean runners
Eoic Oct 26, 2026
9aaf5f2
test: align browser smoke checks with hidden reader controls
Eoic Oct 26, 2026
a161005
fix: make EPUB page turns seamless and keep page counts visible
Eoic Oct 28, 2026
1c88906
fix: preserve the visible page when a turn is interrupted
Eoic Oct 28, 2026
07055c2
test: wait for reader readiness in browser smoke
Eoic Oct 29, 2026
118020c
ci: deduplicate reader runs and wait for expected UI state
Eoic Oct 29, 2026
f6410bc
Merge pull request #12 from PapyrusReader/chore/test-ci-cleanup
Eoic Oct 29, 2026
95ea8ea
fix: unify reader loading and allow instant page turns
Eoic Oct 29, 2026
01e50dd
fix: simplify page turn animation setting to dropdown
Eoic Oct 29, 2026
9f2f127
fix: preload nearby EPUB pages in both directions
Eoic Oct 29, 2026
dc5ea75
fix: publish prepared pages before immediate turns
Eoic Oct 29, 2026
ee7737d
fix: let the latest slider seek supersede obsolete navigation
Eoic Oct 29, 2026
c7ce2d6
Expose shared panel header to host builders
Eoic Oct 29, 2026
c9f566f
fix: retain page inset colors during reader preparation
Eoic Oct 29, 2026
48fc8ac
Merge pull request #14 from PapyrusReader/fix/reader-loading-motion
Eoic Oct 29, 2026
eafa444
fix: preserve custom seeks and publish completed viewport coverage
Eoic Nov 1, 2026
1012406
Merge pull request #16 from PapyrusReader/fix/release-reader-progress
Eoic Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,13 @@ name: Reader CI

on:
push:
branches: [development, master]
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -68,6 +73,6 @@ jobs:
- run: >-
xcodebuild -workspace macos/Runner.xcworkspace -scheme Runner
-configuration Release -derivedDataPath build/macos -sdk macosx
ARCHS=$(uname -m) ONLY_ACTIVE_ARCH=YES CODE_SIGNING_ALLOWED=NO build
ARCHS="$(uname -m)" ONLY_ACTIVE_ARCH=YES CODE_SIGNING_ALLOWED=NO build
if: matrix.target == 'macos'
working-directory: example
11 changes: 7 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ This is an independent Flutter package and Git repository. The owning workspace
is one level up; use its `tools/flutter` and `tools/dart` SDK wrappers when present.
Read `docs/architecture.md` before changing architecture or expanding formats.

- Domain types are host-facing and serializable. Keep version-1 locators readable.
- Domain types are host-facing and serializable. Implement the current locator contract
without compatibility shims for older app versions.
EPUB content offsets are chapter-local normalized UTF-16 offsets, never page
numbers. Legacy CFI strings are compatibility data, not conformant anchors.
numbers. Standardized EPUB CFI interoperability is not implemented.
- The host owns bytes, persistence, routing and account/profile isolation.
Package engines own transient resources and must release them on cancellation.
- EPUB document processing is pure Dart in `lib/src/engine/epub/worker`. Native
Expand All @@ -18,8 +19,10 @@ Read `docs/architecture.md` before changing architecture or expanding formats.
This package commits `pubspec.lock` and pins its CI SDK so the
browser worker and third-party notices are reproducible.
- UI text measurement belongs in Flutter. Preserve semantic runs, Unicode,
illustrations and content offsets when reflowing. Layout must use the space
left after panels, system insets and text scaling, not device width alone.
illustrations and content offsets when reflowing. Layout must use actual viewport
constraints, system insets and text scaling.
Temporary shell panels overlay the viewport without changing pagination or
the reading position; opening them must not trigger a reflow.
- Keep custom engines/renderers/builders usable. Don't silently expose settings
that the active engine cannot apply.
- Use in-process transport in widget tests with fake clocks; exercise native and
Expand Down
18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,18 @@ provided `ReaderController` remains host-owned. With an external controller,
omitted initial preferences remain controller-owned; an explicit value
overrides them for the document load.

Use **Hide controls** in the toolbar for distraction-free reading. Both bars
collapse, expanding the page area without reopening the document. Page-turn
keys, EPUB swipes and PDF scrolling remain available. The small **Show controls**
button in the top corner or **Escape** restores the bars. This is temporary UI
state; opening another document restores the controls. Custom toolbar builders
can expose `ReaderToolbarContext.toggleControls`.
Tap the reading surface or press **Escape** to hide or restore controls. The
viewport stays the same size, so this does not repaginate or move the book.
Page-turn keys, EPUB swipes and PDF scrolling remain available. Custom toolbar
builders can expose `ReaderToolbarContext.toggleControls`.

Hosts can supply `ReaderUiBuilders.compactPanelRoute` to put Contents and Reading
settings inside their own sheet shell. The factory receives the panel title, kind,
and a live `buildContent(context, scrollController)` builder without reader headers
or framing. Return an unpushed `Route<void>`; the reader handles presentation,
activity tracking and cleanup. Connect the builder's scroll controller to your
sheet's scrolling coordinator. Omit this hook to use the standalone defaults.
See [Architecture](docs/architecture.md) for the presentation contract.

## Example

Expand Down
Loading
Loading