From 173d7585bfa5c1174717a16012faa2486c5f975e Mon Sep 17 00:00:00 2001 From: neon <18559658+neonsolstice@users.noreply.github.com> Date: Wed, 11 Mar 2026 09:47:42 -0600 Subject: [PATCH] feat: add empty states and improve sidebar badge styling --- client/eslint.config.ts | 7 + client/src/assets/theme/bridge.css | 1 - client/src/assets/theme/radius.css | 1 - client/src/components/AppSidebar.vue | 27 +- .../components/ui/sidebar/SidebarTrigger.vue | 9 +- .../features/author/components/AuthorCard.vue | 4 +- .../book/components/BookCoverCard.vue | 17 +- .../book/components/DeleteBookDialog.vue | 1 - .../book/components/FilterSummary.vue | 17 +- .../__tests__/BookCoverCard.spec.ts | 4 +- .../components/__tests__/DetailsTab.spec.ts | 2 + .../components/detail/BookDetailHeader.vue | 4 +- .../detail/tabs/CoverEditorPanel.vue | 7 +- .../detail/tabs/MetadataSearchDrawer.vue | 4 +- .../book/composables/useBookBulkActions.ts | 34 ++- .../features/book/composables/useBookQuery.ts | 2 +- .../book/composables/useDeleteBook.ts | 1 - .../book/composables/useMetadataDiff.ts | 124 ++++---- client/src/features/book/lib/filter-labels.ts | 1 - .../components/DashboardScroller.vue | 7 +- .../components/DashboardSettingsSheet.vue | 14 +- .../features/email/components/GroupsTab.vue | 7 +- .../src/features/lens/composables/useLens.ts | 2 +- .../library/components/BookUploadModal.vue | 274 ++++++++++++++---- .../components/LibraryCreatorScanner.vue | 2 +- .../__tests__/useLibraryUploadEvents.spec.ts | 6 +- .../library/composables/useBookUpload.ts | 9 + .../src/features/reader/cbz/CbzReaderView.vue | 6 +- .../reader/epub/components/NoteDialog.vue | 2 +- .../reader/epub/components/ReaderSidebar.vue | 22 +- .../reader/epub/composables/useFoliate.ts | 3 +- .../epub/composables/useFoliateAnnotations.ts | 12 +- .../scanner/composables/useScanProgress.ts | 4 + .../features/settings/MaintenanceSettings.vue | 2 +- client/src/features/settings/OidcSettings.vue | 2 +- .../composables/useFileNamingPattern.ts | 8 +- .../components/StagingFinalizeDialog.vue | 3 +- .../staging/components/StagingToolbar.vue | 72 ++++- .../staging/composables/useStagingFiles.ts | 8 +- client/src/views/CollectionView.vue | 2 +- client/src/views/HomeView.vue | 26 +- client/src/views/LensView.vue | 7 +- client/src/views/StagingView.vue | 14 +- client/typecheck-baseline.txt | 65 ++--- client/typecheck_output.txt | 161 ++++++++++ package.json | 4 +- server/eslint.config.mjs | 2 +- server/src/db/migrations/0000_baseline.sql | 1 + .../src/db/migrations/meta/0000_snapshot.json | 26 +- server/src/db/migrations/meta/_journal.json | 2 +- server/src/db/schema/books.ts | 38 +-- server/src/modules/book/book.service.spec.ts | 8 +- server/src/modules/book/book.service.ts | 4 + .../src/modules/metadata/metadata.service.ts | 4 +- .../scanner/file-watcher.service.spec.ts | 45 ++- .../modules/scanner/file-watcher.service.ts | 32 +- .../src/modules/scanner/scanner.repository.ts | 19 +- server/src/modules/scanner/scanner.service.ts | 3 +- 58 files changed, 855 insertions(+), 340 deletions(-) create mode 100644 client/typecheck_output.txt diff --git a/client/eslint.config.ts b/client/eslint.config.ts index 1665e1b5c..b19ccff61 100644 --- a/client/eslint.config.ts +++ b/client/eslint.config.ts @@ -33,6 +33,13 @@ export default defineConfigWithVueTs( }, }, + { + files: ['src/**/*.vue'], + rules: { + 'vue/v-on-handler-style': ['warn', ['method', 'inline-function']], + }, + }, + ...pluginOxlint.buildFromOxlintConfigFile('.oxlintrc.json'), skipFormatting, diff --git a/client/src/assets/theme/bridge.css b/client/src/assets/theme/bridge.css index 4983ac8e7..60d05953a 100644 --- a/client/src/assets/theme/bridge.css +++ b/client/src/assets/theme/bridge.css @@ -57,4 +57,3 @@ --shadow-xl: var(--elevation-xl); --shadow-2xl: var(--elevation-2xl); } - diff --git a/client/src/assets/theme/radius.css b/client/src/assets/theme/radius.css index d799ed204..497422ff3 100644 --- a/client/src/assets/theme/radius.css +++ b/client/src/assets/theme/radius.css @@ -10,4 +10,3 @@ html.radius-rounded { html.radius-pill { --radius: 2.5rem; } - diff --git a/client/src/components/AppSidebar.vue b/client/src/components/AppSidebar.vue index 5c26f10c6..7c0a6d3db 100644 --- a/client/src/components/AppSidebar.vue +++ b/client/src/components/AppSidebar.vue @@ -2,7 +2,6 @@ import { computed, onMounted, onUnmounted, ref, watch, type Component } from 'vue' import { useRoute, useRouter } from 'vue-router' import * as Icons from 'lucide-vue-next' -import { Aperture, FolderOpen, LayoutDashboard, PackageOpen, Users } from 'lucide-vue-next' import { Sidebar, SidebarContent, @@ -171,7 +170,7 @@ onUnmounted(() => stopUploadCompletedListener()) @@ -179,20 +178,26 @@ onUnmounted(() => stopUploadCompletedListener()) v-if="hasPermission('staging_access')" :is-active="isStagingActive" tooltip="Staging" - :icon="PackageOpen" + :icon="Icons.PackageOpen" label="Staging" @click="router.push({ name: 'staging' })" > - + @@ -226,13 +231,13 @@ onUnmounted(() => stopUploadCompletedListener())