Bundle of small UI/UX fixes plus a build hygiene tweak.
* List pagination — Home (`/`) and `/authors/[id]` silently capped at
the backend default of 50 with no UI to advance. New reusable
`Pager.svelte` (Prev/Next + numbered with ellipsis), URL-synced
`?page=N`, and filter/search/sort reset to page 1 so users aren't
stranded on an out-of-range page. Count label now shows a range
("Showing 51–100 of 237").
* Stale page title — Pages without a `<svelte:head><title>` left the
document title at whatever the last manga / author / collection page
set it to. Move static-route titles into a route-id → title map in
the root layout and invert every dynamic title to brand-first
(`Mangalord | {X}`) for consistency.
* Admin filter bar — `/admin/mangas` search input had `flex: 1` and
ballooned across the row, shoving the sync-state select + Search
button to the far right. Cap at 24rem, vertical-align the row, and
promote the previously aria-only "Sync state" label to visible text.
* Build hygiene — `backend/target` had grown to 68 GiB. Cleaned and
added `[profile.dev] debug = "line-tables-only"` (and `[profile.test]`
too) to cut future dev builds by ~50–70% while keeping line numbers
in backtraces.
Also: configure vitest to resolve Svelte's browser entry so
`@testing-library/svelte` can mount components in jsdom — needed for
the new `Pager.svelte.test.ts`.
Bump 0.48.0 -> 0.49.1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
35 lines
839 B
Svelte
35 lines
839 B
Svelte
<script lang="ts">
|
|
import BookmarkList from '$lib/components/BookmarkList.svelte';
|
|
|
|
let { data } = $props();
|
|
const authenticated = $derived(data.authenticated);
|
|
const bookmarks = $derived(data.bookmarks);
|
|
const error = $derived(data.error);
|
|
</script>
|
|
|
|
<h1>Bookmarks</h1>
|
|
|
|
{#if error}
|
|
<p class="error" role="alert" data-testid="bookmarks-error">
|
|
Couldn't load bookmarks: {error}
|
|
</p>
|
|
{:else if !authenticated}
|
|
<p class="hint" data-testid="bookmarks-signin">
|
|
<a href="/login">Sign in</a> to see your bookmarks.
|
|
</p>
|
|
{:else if bookmarks.length === 0}
|
|
<p class="hint" data-testid="bookmarks-empty">No bookmarks yet.</p>
|
|
{:else}
|
|
<BookmarkList {bookmarks} />
|
|
{/if}
|
|
|
|
<style>
|
|
.error {
|
|
color: var(--danger);
|
|
}
|
|
|
|
.hint {
|
|
color: var(--text-muted);
|
|
}
|
|
</style>
|