Huang Xin
956c71cd7b
chore: migrate from ESLint to Biome for linting ( #3694 )
...
Replace ESLint with Biome for ~14x faster linting (~360ms vs ~5s).
- Add biome.json with rules matching ESLint parity (Next.js, a11y,
TypeScript, unused vars/imports)
- Remove eslint, @typescript-eslint/*, eslint-config-next,
eslint-plugin-jsx-a11y, @eslint/* from deps
- Remove eslint.config.mjs
- Update lint script to: tsgo --noEmit && biome check .
- Fix 11 real code issues caught by Biome (banned types, explicit any,
unsafe finally, unreachable code, shadowed names)
- Disable Biome formatter (Prettier stays for Tailwind class sorting)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-30 16:25:04 +02:00
Huang Xin
45e5f0fa61
fix(eink): disable range editor loupe for annotations on Eink devices, closes #3655 ( #3656 )
2026-03-27 10:26:36 +01:00
Lee Kai Ze
c7e82825f5
fix(koplugin): avoid resurrecting deleted annotations on pull ( #3639 )
...
Closes #3621 .
2026-03-26 15:13:32 +01:00
Huang Xin
2905506017
fix(layout): fixed total scrollable width in vertical scrolled mode, closes #3583 ( #3586 )
2026-03-22 11:56:12 +01:00
Huang Xin
1936136596
fix: resolve various tracked exceptions in ph ( #3584 )
...
* fix: handle synced bookmarks without cfi
* chore: clean up some exceptions in ph
2026-03-22 08:16:38 +01:00
Huang Xin
76b239f382
feat(koplugin): add support for annotation sync ( #3579 )
...
Add bidirectional annotation/highlight sync between KOReader and Readest:
- Add xpointer0/xpointer1 fields to BookNote and DBBookNote types for
KOReader XPointer positions alongside Readest's CFI format
- Extend transform layer to pass through xpointer fields to/from DB
- Convert CFI→XPointer on push and XPointer→CFI on pull in useNotesSync,
discarding notes that fail conversion
- Support KOReader's text()[K].N indexed text node format in xcfi.ts for
paragraphs with inline elements (e.g. <a> page anchors)
- Generate KOReader-compatible XPointers: text().N for single text nodes,
text()[K].N only when multiple direct text nodes exist
- Skip cfi-inert elements (injected by Readest at runtime) in XPointer
path building and resolution
- Map highlight colors between KOReader and Readest color systems
- Implement KOReader plugin annotation push/pull with deterministic IDs,
auto-sync on document open/close, and UIManager refresh on pull
- Refactor koplugin into focused modules: syncauth, syncconfig,
syncannotations, selfupdate
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-21 16:43:51 +01:00
Huang Xin
91bc4ddec7
feat(library): backup to and restore from a zip file ( #3571 )
2026-03-20 18:27:52 +01:00
Huang Xin
1f4f5f8a6d
feat(annotator): responsive layout for the loupe ( #3568 )
2026-03-19 17:54:24 +01:00
Huang Xin
eab83c6d3f
feat(annotator): show the loupe when selecting text in instant annotation, closes #3539 ( #3565 )
2026-03-19 15:10:33 +01:00
Huang Xin
f7b2a2432c
fix(export): apply block quote syntax to every line in annotation export, closes #3534 ( #3536 )
...
Add formatBlockQuote utility and blockquote nunjucks filter so both
default and custom template exports prefix every line with `>`.
Document all available formatters in the custom template help panel.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-14 15:23:17 +01:00
Huang Xin
7a605a357a
feat(pdf): support pitch to zoom and scroll mode for PDFs, closes #3461 ( #3520 )
2026-03-12 16:07:55 +01:00
Huang Xin
64a71e25e4
fix(layout): make horizontal scroll bar visible in fixed-layout EPUB, closes #3506 ( #3512 )
...
And fix some text not shown in fixed-layout EPUB.
2026-03-11 15:03:05 +01:00
Huang Xin
907b672313
fix(a11y): improve TOC screen reader accessibility for NVDA, closes #3477 ( #3509 )
2026-03-11 14:30:01 +08:00
Huang Xin
8850e6c00f
feat(pdf): support TTS and annotation on PDFs, closes #2149 & #3462 ( #3493 )
...
* chore: bump jsdom to the latest version
* feat(pdf): support TTS and annotation on PDFs, closes #2149 & closes #3462
2026-03-09 10:28:19 +01:00
Huang Xin
c533da498d
feat(annotator): add page number for annotations, closes #3082 ( #3405 )
...
* feat(annotator): add page number in annotation
* feat: add page number for annotations, closes #3082
2026-02-28 08:08:56 +01:00
Matt Vogel
ce53cd2b47
feat: Readwise highlights sync ( #3311 )
2026-02-24 00:08:59 +08:00
Huang Xin
ae3bb9da9a
fix(annotator): update highlight style, color and range handlers when showing different annotations, closes #3286 ( #3289 )
2026-02-13 16:46:44 +01:00
Huang Xin
129720c916
fix(eink): more legibility for the dictionary and wikipedia popups on Eink devices, closes #3258 ( #3262 )
2026-02-11 10:22:05 +01:00
Huang Xin
fd3533dba1
feat(annotator): add a loupe when adjusting text selection range, closes #3002 ( #3261 )
2026-02-11 10:13:22 +01:00
Huang Xin
226bf7033e
fix(layout): fixed some layout issues for RSVP, closes #3199 ( #3254 )
2026-02-10 17:38:33 +01:00
Huang Xin
9444be7fcc
feat(annotator): rounded highlight style for horizontal and vertical layout, closes #3208 ( #3252 )
2026-02-10 16:13:53 +01:00
Huang Xin
c6d4e2bdd6
fix(android): fixed some annotation tools not responsive to tap on Android, closes #3225 ( #3229 )
2026-02-09 02:26:57 +01:00
Mohammed Efaz
fb49ddf484
feat: back button dictionary ( #3220 )
...
* feat: add back button with history in dictionry/wikitionary
* fix: flicker back button
2026-02-08 12:27:05 +01:00
Huang Xin
fe9603ffb8
fix(a11y): updating progress info when navigating with screen readers ( #3182 )
...
Also add some missing button labels for screen readers
2026-02-06 08:43:03 +01:00
Huang Xin
e74615ac1d
feat(export): add an option to export annotations as plain text, closes #3147 ( #3165 )
2026-02-04 07:50:40 +01:00
Huang Xin
570598520f
fix(a11y): fix accessibility in dropdown menus for TalkBack, closes #3035 ( #3126 )
2026-01-31 19:05:56 +01:00
Huang Xin
2100071991
feat(eink): support color E-ink mode to display more colors, closes #3037 ( #3074 )
2026-01-25 17:44:41 +01:00
Mohammed Efaz
c31ece6742
feat: more highlight colours ( #3062 )
...
* feat(highlight): extend types and constants for custom hex colours
* feat(highlight): update colour to support hex strings
* refactor(annotator): update component to accept hex colours
* feat(highlight): add colour picker with max 4 custom colors
* feat(settings): add custom colour editor with limit
* refactor: custom highlight colors can only be modified in settings
---------
Co-authored-by: Huang Xin <chrox.huang@gmail.com >
2026-01-25 07:52:29 +01:00
Huang Xin
42fee90a27
feat(annotation): export annotations with style and color fields in annotation template, closes #1734 ( #3060 )
2026-01-24 17:44:40 +01:00
Huang Xin
6c0f1b8b5f
fix(annotator): fix instant action on Android ( #3042 )
2026-01-23 17:18:51 +01:00
Huang Xin
038eca4267
fix(eink): resolved an issue where the dropdown menu would occasionally fail to expand on some Eink devices ( #2991 )
2026-01-18 19:57:09 +01:00
Huang Xin
fd299a61a7
feat(notes): export notes with custom template, closes #1734 ( #2989 )
2026-01-18 16:56:32 +01:00
Huang Xin
3146ae48a7
fix(proofread): support replace text with space ( #2965 )
2026-01-15 14:10:05 +01:00
Huang Xin
7d97826e4b
feat(tts): replace words for TTS, closes #2057 ( #2952 )
2026-01-14 16:42:11 +01:00
Huang Xin
44b4f7995b
fix(android): fix annotator on Android, closes #2927 ( #2946 )
2026-01-14 11:56:38 +01:00
Huang Xin
434a44e62c
feat(proofread): add an option for whole word replacement, closes #2934 ( #2938 )
2026-01-13 15:35:57 +01:00
Huang Xin
c04f19ffb4
feat: add support for exporting book files in book details dialog, closes #2919 ( #2930 )
2026-01-12 16:26:32 +01:00
Huang Xin
462ca46fee
feat(eink): optimize color and layout for e-ink mode ( #2887 )
2026-01-08 17:29:33 +01:00
Huang Xin
2ff10f781f
feat(annotator): support vertical layout for annotation editor ( #2882 )
2026-01-07 16:18:57 +01:00
Huang Xin
9614c62360
feat(annotator): instant highlighting with mouse, touch or pen ( #2881 )
2026-01-07 16:13:37 +01:00
Huang Xin
71af91608f
feat(annotator): support editing text range of highlights ( #2870 )
2026-01-05 16:25:58 +01:00
Huang Xin
9603b61776
refactor(annotatot): more cleaner text selector on Android ( #2867 )
2026-01-05 08:53:38 +01:00
Huang Xin
8a263235ed
feat(search): add annotations navigation bar, closes #2060 ( #2849 )
2026-01-03 14:57:10 +01:00
Huang Xin
a5e09e8454
feat(search): add search results navigation bar, closes #1183 ( #2842 )
...
Add a floating navigation component that appears when search results exist.
The component includes:
- Top bar: displays search term and current section with TOC and close buttons
- Bottom bar: search results, previous, and next navigation buttons
- Page-based navigation using isCfiInLocation to skip between pages with results
2026-01-03 08:10:23 +01:00
Huang Xin
22f9c45232
fix(annotator): delay highlight action to prevent immediate onShowAnnotation trigger ( #2820 )
2025-12-31 08:35:26 +01:00
Huang Xin
a42897ec5c
feat(annotator): support quick actions for text selection, closes #2505 ( #2813 )
2025-12-30 10:32:01 +01:00
Huang Xin
f944ad9b9f
feat(annotator): support rendering vertical annotation bubbles ( #2801 )
2025-12-28 13:52:12 +01:00
Huang Xin
335d91b9c9
fix(layout): dismiss annotation popup on mobile when navigating ( #2799 )
2025-12-28 07:18:03 +01:00
Huang Xin
173404eaad
feat(annotator): show notes popup when annotation bubble icon is clicked, closes #1845 ( #2798 )
2025-12-27 17:31:47 +01:00
Huang Xin
674fed5230
fix(annotator): adjust underline position to the center of two lines, closes #2772 ( #2793 )
2025-12-26 09:51:02 +01:00