1757 Commits

Author SHA1 Message Date
WorldTeacher
91400b5350 Fix iconDisplay binding syntax in metadata viewer (#2772)
this once again shows the date selector in the develop branch
2026-02-16 21:02:21 -07:00
ACX
5559576537 feat: add series browser page with search, filter, sort, and resizable cards (#2771) 2026-02-16 08:59:40 -07:00
ACX
1cc30af7d9 fix: hide show-more button when description fits without truncation (#2766) 2026-02-15 11:57:56 -07:00
ACX
2c391cb1f4 chore: fix memory leaks, add aria-labels, improve type safety and logging (#2764) 2026-02-15 09:42:43 -07:00
ACX
0358667323 fix: use audiobook thumbnail URL for audiobook entries in notebook (#2763) 2026-02-15 09:16:11 -07:00
ACX
03272f7c35 chore: add caching, validation, lazy routes, refresh rate limiting, JaCoCo, and cleanup (#2762)
* feat: add login rate limiting to prevent brute-force attacks

* chore: add caching, validation, lazy routes, refresh rate limiting, JaCoCo, and remove dead code
2026-02-15 08:51:25 -07:00
ACX
f7650d9fd6 feat: add login rate limiting to prevent brute-force attacks (#2761) 2026-02-15 08:25:12 -07:00
ACX
0318d1b3bb feat: enhance audit logs with geo flags, relative time, and UX improvements (#2760) 2026-02-15 08:11:39 -07:00
ACX
c9551ef4ab feat: add audit log system for tracking admin-significant actions (#2759) 2026-02-15 00:24:25 -07:00
ACX
c7f0a910e0 refactor: split BookService into BookFileService and BookMetadataManageService (#2758) 2026-02-14 22:07:57 -07:00
ACX
0899b99188 feat: add metadata presence filter to magic shelf (#2757) 2026-02-14 21:41:03 -07:00
ACX
af0f5a4080 fix: make README logo visible in GitHub light mode (#2756) 2026-02-14 21:01:28 -07:00
ACX
ab13a4b17f fix: enable compact object headers (Project Lilliput) to reduce heap usage (#2755) 2026-02-14 17:58:03 -07:00
ACX
8b12d9f1c4 chore: add performance label to release drafter categories (#2754) 2026-02-14 17:49:44 -07:00
ACX
6f77223686 perf: optimize book list API with ETag, delta sync, and IndexedDB caching (#2753) 2026-02-14 17:47:08 -07:00
ACX
44002c2c3c fix: align frontend Page interfaces with VIA_DTO serialization format (#2745) (#2751) 2026-02-14 16:03:42 -07:00
ACX
218befb3b5 feat: add grouped field dropdown and composite fields to magic shelf (#2750) 2026-02-14 15:47:34 -07:00
ACX
8c319122bb feat: move sidebar width from global setting to localStorage with view preferences UI (#2749) 2026-02-14 15:32:12 -07:00
ACX
9fa7b0736c feat: add i18n translations for stats, pdf reader, magic shelf, and remaining components (en/es) (#2742) 2026-02-14 00:18:26 -07:00
ACX
ffd2adb032 perf: strip unused fields from book list API response (#2741)
* perf: strip unused fields from book list API response

* fix: regenerate package-lock.json to sync with package.json
2026-02-13 22:09:01 -07:00
ACX
77b4deb942 feat: add button to fetch metadata from book file in metadata editor (#2739) 2026-02-13 21:04:00 -07:00
ACX
5076522f35 feat: add i18n translations for book components, services, and readers (en/es) (#2738) 2026-02-13 16:20:02 -07:00
ACX
3e44ee7d92 fix: update metadata viewer in real time after progress reset 2026-02-13 15:12:17 -07:00
ACX
81960f820e feat: disable PDF printing for users without download permission (#2735) (#2737) 2026-02-13 15:01:22 -07:00
ACX
54f633faad feat: add annotation notebook with server-side pagination (#2736)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-02-13 14:43:31 -07:00
ACX
bf04a1f4db fix: show provider icons in metadata viewer when only ID is present (#2734) 2026-02-13 10:24:35 -07:00
ACX
83edbf46d5 fix: replace Quill editor with native HTML rendering for book descriptions (#2719) (#2733) 2026-02-13 09:13:01 -07:00
ACX
1098075ccb chore: redesign README with cleaner layout and rewritten copy (#2728) 2026-02-13 00:07:51 -07:00
ACX
d4335f6125 feat(i18n): add Weblate integration and auth translations (#2727)
* feat(i18n): add Weblate integration and auth translations for all languages

* chore: cache-bust Weblate widget URL
2026-02-12 23:38:59 -07:00
ACX
51d9414aae fix(i18n): correct sidecar file extension from .opf to .metadata.json 2026-02-12 22:38:39 -07:00
ACX
6b0cc27d1b feat: add else clause and value modifiers to file naming patterns (#2724) 2026-02-12 22:17:55 -07:00
dependabot[bot]
facfc2843c chore(deps): bump qs from 6.14.1 to 6.14.2 in /booklore-ui (#2722)
Bumps [qs](https://github.com/ljharb/qs) from 6.14.1 to 6.14.2.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 20:50:22 -07:00
dependabot[bot]
f2723cd58c chore(deps): bump the npm-dependencies group (#2721)
Bumps the npm-dependencies group in /booklore-ui with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [@angular/animations](https://github.com/angular/angular/tree/HEAD/packages/animations) | `21.1.3` | `21.1.4` |
| [@angular/cdk](https://github.com/angular/components) | `21.1.3` | `21.1.4` |
| [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `21.1.3` | `21.1.4` |
| [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `21.1.3` | `21.1.4` |
| [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `21.1.3` | `21.1.4` |
| [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `21.1.3` | `21.1.4` |
| [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `21.1.3` | `21.1.4` |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) | `21.1.3` | `21.1.4` |
| [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) | `21.1.3` | `21.1.4` |
| [@angular/service-worker](https://github.com/angular/angular/tree/HEAD/packages/service-worker) | `21.1.3` | `21.1.4` |
| [@angular/build](https://github.com/angular/angular-cli) | `21.1.3` | `21.1.4` |
| [@angular/cli](https://github.com/angular/angular-cli) | `21.1.3` | `21.1.4` |
| [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `21.1.3` | `21.1.4` |


Updates `@angular/animations` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/animations)

Updates `@angular/cdk` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/components/releases)
- [Changelog](https://github.com/angular/components/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/components/compare/v21.1.3...v21.1.4)

Updates `@angular/common` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/common)

Updates `@angular/compiler` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/compiler)

Updates `@angular/core` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/core)

Updates `@angular/forms` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/forms)

Updates `@angular/platform-browser` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/platform-browser)

Updates `@angular/platform-browser-dynamic` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/platform-browser-dynamic)

Updates `@angular/router` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/router)

Updates `@angular/service-worker` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/service-worker)

Updates `@angular/build` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v21.1.3...v21.1.4)

Updates `@angular/cli` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v21.1.3...v21.1.4)

Updates `@angular/compiler-cli` from 21.1.3 to 21.1.4
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/v21.1.4/packages/compiler-cli)

---
updated-dependencies:
- dependency-name: "@angular/animations"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/cdk"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/common"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/compiler"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/core"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/forms"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/platform-browser"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/platform-browser-dynamic"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/router"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/service-worker"
  dependency-version: 21.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/build"
  dependency-version: 21.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/cli"
  dependency-version: 21.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
- dependency-name: "@angular/compiler-cli"
  dependency-version: 21.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 20:49:07 -07:00
dependabot[bot]
9d3be9ec92 chore(deps): bump the gradle-dependencies group (#2720)
Bumps the gradle-dependencies group in /booklore-api with 2 updates: org.flywaydb:flyway-mysql and [jakarta.xml.bind:jakarta.xml.bind-api](https://github.com/jakartaee/jaxb-api).


Updates `org.flywaydb:flyway-mysql` from 12.0.0 to 12.0.1

Updates `jakarta.xml.bind:jakarta.xml.bind-api` from 4.0.4 to 4.0.5
- [Release notes](https://github.com/jakartaee/jaxb-api/releases)
- [Commits](https://github.com/jakartaee/jaxb-api/compare/4.0.4...4.0.5)

---
updated-dependencies:
- dependency-name: org.flywaydb:flyway-mysql
  dependency-version: 12.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gradle-dependencies
- dependency-name: jakarta.xml.bind:jakarta.xml.bind-api
  dependency-version: 4.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gradle-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 20:48:48 -07:00
acx10
5e0de4d3eb fix(epub): suppress FileNotFoundException for optional EPUB files 2026-02-12 16:40:34 -07:00
ACX
414b6d8d9e fix(ui): encode filter values in query params to handle commas in names (#2117) (#2717) 2026-02-12 09:21:23 -07:00
Balázs Szücs
ae041f900f feat(epub): enhance EPUB processing with optimized path validation and content type mapping (#2598)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-02-12 09:13:01 -07:00
ACX
dc238caff6 fix(ui): fix memory leaks and cascading API calls in metadata editor (#2489) (#2716) 2026-02-12 09:07:47 -07:00
ACX
dc35ef443d fix(ui): reload shelves when enabling Kobo sync (#2528) (#2715) 2026-02-12 08:47:10 -07:00
ACX
c6503358d3 fix(ui): prevent footer submenu from rendering off screen (#2531) (#2714) 2026-02-12 08:41:09 -07:00
ACX
df95f5806d fix(ui): inline mobile charts submenu to prevent layout overflow (#2549) (#2713) 2026-02-12 08:33:25 -07:00
ACX
910d26c530 feat(ui): add file name column to table view and include filename in search (#2712) 2026-02-12 08:28:57 -07:00
ACX
f8f448a19b fix: reset audiobook progress and clear cached progress in UI (#2641) (#2711) 2026-02-12 08:21:05 -07:00
ACX
120334eb28 fix(stats): fix inconsistent stat card styling and add median/session stats to completion race 2026-02-12 00:33:49 -07:00
ACX
8128269310 feat(stats): add 5 new user statistics charts (#2703)
* feat(stats): add 5 new user statistics charts

* fix(stats): use COALESCE for dateFinished in heartbeat and page turner queries

* refactor(stats): remove heartbeat, genre flow, reading seasons, and abandonment autopsy charts

* feat(stats): add 5 new user statistics charts

* feat(stats): add info tooltips to all 5 new charts

* perf(stats): limit completion race chart to 15 most recent books server-side

* fix(stats): limit completion race to 10 books and cap progress at 100%

* refactor(stats): replace streak bars with GitHub-style activity heatmap calendar

* fix(stats): widen chart info tooltips to prevent tall narrow box

* feat(stats): add info tooltip to Page Turner Score chart

* feat(stats): add info tooltips to 7 existing charts

* refactor(stats): deduplicate chart-info-icon style into global styles.scss

* refactor(stats): fix scoring bugs and improve Reading DNA and Reading Habits charts

* refactor(stats): rebalance Series Progress Tracker layout and unify heatmap footer pills

* feat(stats): add info tooltips to 4 remaining charts

* fix(stats): fix session duration and overlap bugs in Reading Session Timeline
2026-02-12 00:11:49 -07:00
ACX
7af21e079e ci: move Angular/Gradle builds to native CI steps to eliminate QEMU emulation bottleneck (#2705) 2026-02-12 00:11:18 -07:00
ACX
c1e0c721f7 fix(reader): enable text copy in ebook reader (#2700) (#2702) 2026-02-11 17:14:44 -07:00
ACX
9ed6a3fe72 feat(reader): add PDF annotations, Range streaming, and optimized chunk loading (#2701) 2026-02-11 16:51:59 -07:00
ACX
16de2d006f feat(reader): add dark/light mode toggle and improved close button to PDF reader (#2699) 2026-02-11 15:06:35 -07:00
ACX
a9faf7d1ea fix(reader): add overflow menu to ebook reader mobile header 2026-02-11 14:50:49 -07:00