From 956801f907891c29d95a6e5eb44feedffd2d6fd4 Mon Sep 17 00:00:00 2001 From: neon <18559658+neonsolstice@users.noreply.github.com> Date: Tue, 10 Mar 2026 04:21:33 -0600 Subject: [PATCH] feat: redesign settings pages, theme tokens, and fix layout alignment --- client/src/assets/main.css | 70 ++- client/src/assets/theme/tokens.css | 2 +- client/src/components/AppHeader.vue | 2 +- client/src/components/AppSidebar.vue | 380 +++++--------- .../src/components/sidebar/SidebarNavItem.vue | 45 ++ .../sidebar/SidebarSectionHeader.vue | 42 ++ client/src/components/ui/ToggleSwitch.vue | 21 + client/src/features/admin/UsersPage.vue | 14 +- .../author/views/AuthorDetailView.vue | 20 +- .../email/components/EmailSettings.vue | 58 ++- .../components/LibraryCreatorDetails.vue | 10 +- .../components/LibraryCreatorFolders.vue | 4 +- .../reader/components/PdfSettingsPanel.vue | 10 +- .../src/features/settings/AboutSettings.vue | 124 +++-- .../features/settings/AppearanceSettings.vue | 30 +- .../src/features/settings/ComicsSettings.vue | 283 ++++++----- .../src/features/settings/EbookSettings.vue | 469 +++++++++--------- .../features/settings/FileNamingSettings.vue | 422 +++++++++------- client/src/features/settings/KoboSettings.vue | 418 ++++++++-------- .../features/settings/LibrariesSettings.vue | 272 +++++----- .../features/settings/MaintenanceSettings.vue | 89 +--- client/src/features/settings/OidcSettings.vue | 109 +--- client/src/features/settings/OpdsSettings.vue | 231 ++++----- client/src/features/settings/PdfSettings.vue | 233 +++++---- .../src/features/settings/ReaderSettings.vue | 100 ++-- .../src/features/settings/ScannerSettings.vue | 139 ++---- .../src/features/settings/SettingsHeader.vue | 2 +- .../features/settings/SettingsPageHeader.vue | 15 + .../src/features/settings/StagingSettings.vue | 145 +++--- .../MetadataPreferencesSettings.vue | 79 +-- .../components/FieldGroupSection.vue | 8 +- .../components/FieldPreferenceTable.vue | 31 +- .../components/FieldRow.vue | 141 +++--- .../components/GlobalPreferencePanel.vue | 135 +++-- .../components/LibraryPreferencePanel.vue | 73 ++- .../components/ProviderConfigPanel.vue | 132 +++-- .../components/ProviderReservoir.vue | 41 +- client/src/router/index.ts | 2 +- client/src/views/SettingsView.vue | 4 +- client/src/views/StagingView.vue | 2 +- client/typecheck-baseline.txt | 8 - packages/types/src/reader-settings.ts | 3 +- .../dto/update-oidc-config.dto.ts | 3 +- server/src/modules/book/book.service.ts | 6 +- .../modules/kobo/guards/kobo-token.guard.ts | 3 +- .../provider-config.service.spec.ts | 2 +- .../provider-config.service.ts | 2 +- server/src/modules/opds/opds-auth.guard.ts | 5 +- 48 files changed, 2198 insertions(+), 2241 deletions(-) create mode 100644 client/src/components/sidebar/SidebarNavItem.vue create mode 100644 client/src/components/sidebar/SidebarSectionHeader.vue create mode 100644 client/src/components/ui/ToggleSwitch.vue create mode 100644 client/src/features/settings/SettingsPageHeader.vue diff --git a/client/src/assets/main.css b/client/src/assets/main.css index 02aec3211..33d12273e 100644 --- a/client/src/assets/main.css +++ b/client/src/assets/main.css @@ -45,8 +45,24 @@ .pattern-topo { background-image: - repeating-radial-gradient(circle at 0% 0%, transparent 0, transparent 40px, color-mix(in oklch, var(--dot-color) 50%, transparent) 40px, color-mix(in oklch, var(--dot-color) 50%, transparent) 41px, transparent 41px, transparent 80px), - repeating-radial-gradient(circle at 100% 100%, transparent 0, transparent 40px, color-mix(in oklch, var(--dot-color) 50%, transparent) 40px, color-mix(in oklch, var(--dot-color) 50%, transparent) 41px, transparent 41px, transparent 80px); + repeating-radial-gradient( + circle at 0% 0%, + transparent 0, + transparent 40px, + color-mix(in oklch, var(--dot-color) 50%, transparent) 40px, + color-mix(in oklch, var(--dot-color) 50%, transparent) 41px, + transparent 41px, + transparent 80px + ), + repeating-radial-gradient( + circle at 100% 100%, + transparent 0, + transparent 40px, + color-mix(in oklch, var(--dot-color) 50%, transparent) 40px, + color-mix(in oklch, var(--dot-color) 50%, transparent) 41px, + transparent 41px, + transparent 80px + ); } .pattern-mesh { @@ -73,7 +89,13 @@ } .pattern-brushed { - background-image: repeating-linear-gradient(45deg, transparent, transparent 1px, color-mix(in oklch, var(--primary) 6%, transparent) 1px, color-mix(in oklch, var(--primary) 6%, transparent) 2px); + background-image: repeating-linear-gradient( + 45deg, + transparent, + transparent 1px, + color-mix(in oklch, var(--primary) 6%, transparent) 1px, + color-mix(in oklch, var(--primary) 6%, transparent) 2px + ); } .pattern-prism::before { @@ -83,8 +105,7 @@ z-index: -1; pointer-events: none; background-image: - linear-gradient(135deg, rgba(255, 0, 0, 0.03) 0%, transparent 50%), - linear-gradient(225deg, rgba(0, 0, 255, 0.03) 0%, transparent 50%), + linear-gradient(135deg, rgba(255, 0, 0, 0.03) 0%, transparent 50%), linear-gradient(225deg, rgba(0, 0, 255, 0.03) 0%, transparent 50%), linear-gradient(45deg, rgba(0, 255, 0, 0.03) 0%, transparent 50%); filter: contrast(150%) brightness(110%); } @@ -207,7 +228,13 @@ inset: 0; z-index: -1; pointer-events: none; - background-image: repeating-radial-gradient(circle at 50% -25%, transparent, transparent 3px, color-mix(in oklch, var(--primary) 7%, transparent) 3.75px, transparent 4.5px); + background-image: repeating-radial-gradient( + circle at 50% -25%, + transparent, + transparent 3px, + color-mix(in oklch, var(--primary) 7%, transparent) 3.75px, + transparent 4.5px + ); } .pattern-carbon::before { @@ -316,4 +343,35 @@ .settings-value { @apply text-sm font-medium tabular-nums text-foreground; } + + /* ── Settings form controls ───────────────────────────────── + Use .input-field on and .select-field on