diff --git a/apps/web/src/pages/HomePage.tsx b/apps/web/src/pages/HomePage.tsx index 6f700ae..a6f72c6 100644 --- a/apps/web/src/pages/HomePage.tsx +++ b/apps/web/src/pages/HomePage.tsx @@ -1,10 +1,9 @@ import { useEffect, useState } from "react"; import { BookOpen, LibraryBig, ScanLine } from "lucide-react"; import { api } from "../api/client"; -import { hasActiveCoverWork, isBookCoverUpdating, type DashboardData } from "../api/types"; -import { bookDisplayTitle, bookMetadataState, bookMetadataStateLabel, bookVolumeLabel, displayPublishedDate } from "../book/metadata"; -import { BookCard } from "../components/BookCard"; -import { EmptyState, LoadingState, Meter, Panel } from "../components/ui"; +import type { DashboardData } from "../api/types"; +import { bookDisplayTitle, bookVolumeLabel } from "../book/metadata"; +import { EmptyState, LoadingState, Panel } from "../components/ui"; import { navigate } from "../router"; export function HomePage() { @@ -28,14 +27,29 @@ export function HomePage() { }, []); if (!state) return ; - const fallbackCoverLoading = hasActiveCoverWork(state.jobs); + + const renderHomeBook = (item: DashboardData["books"][number], className = "home-book-card") => { + const volumeLabel = bookVolumeLabel(item); + return ( + + ); + }; return ( -
-
+
+
-

Cabinet de curiosites numerique

-

Ouvrir, classer, reprendre.

+

Bibliotheque personnelle

+

Reprendre la lecture.

{fallback ? "API absente ou incomplete : specimens de demonstration actifs." : "Catalogue branche sur le serveur local."}
- ); - })} + {state.continueReading.map((item) => renderHomeBook(item.book, "home-book-card continue-tile"))}
) : ( @@ -91,10 +87,8 @@ export function HomePage() {
-
- {state.books.map((book) => ( - - ))} +
+ {state.books.map((book) => renderHomeBook(book))}
); diff --git a/apps/web/src/pages/HomePageProgressScroll.test.ts b/apps/web/src/pages/HomePageProgressScroll.test.ts index c553ee7..d743fe0 100644 --- a/apps/web/src/pages/HomePageProgressScroll.test.ts +++ b/apps/web/src/pages/HomePageProgressScroll.test.ts @@ -2,17 +2,31 @@ import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; describe("home progress list layout", () => { - it("keeps the continue reading list scrollable after six visible books", () => { + it("keeps the continue reading list scrollable after three visible books", () => { const styles = readFileSync(new URL("../styles/app.css", import.meta.url), "utf8"); const continueGrid = styles.match(/\.continue-grid\s*\{[^}]+\}/)?.[0] ?? ""; const continueTile = styles.match(/\.continue-tile\s*\{[^}]+\}/)?.[0] ?? ""; - expect(continueGrid).toContain("--continue-visible-rows: 6"); - expect(continueGrid).toContain("--continue-tile-block-size: 118px"); + expect(continueGrid).toContain("--continue-visible-rows: 3"); + expect(continueGrid).toContain("--continue-tile-block-size: 112px"); expect(continueGrid).toContain("max-height: calc((var(--continue-tile-block-size) * var(--continue-visible-rows)) + (10px * (var(--continue-visible-rows) - 1)))"); expect(continueGrid).toContain("overflow-y: auto"); expect(continueGrid).toContain("scrollbar-gutter: stable"); expect(continueTile).toContain("block-size: var(--continue-tile-block-size)"); expect(continueTile).toContain("overflow: hidden"); }); + + it("keeps home book cards scoped and simplified", () => { + const source = readFileSync(new URL("./HomePage.tsx", import.meta.url), "utf8"); + + expect(source).toContain("renderHomeBook"); + expect(source).toContain("home-book-card"); + expect(source).not.toContain(" span { + color: var(--ink-muted); +} + +.home-book-volume { + width: max-content; + max-width: 100%; + padding: 3px 6px; + border: 1px solid rgba(213, 168, 77, 0.42); + border-radius: 999px; + color: #f5dfaa; + font-size: 0.72rem; + font-weight: 900; + background: rgba(213, 168, 77, 0.1); +} + .continue-cover { display: grid; place-items: center;