Le canvas PDF restait vide après rendu (blank-detected): la détection d'encre reposait sur un seuil de blanc trop sensible et un fond de canvas non maîtrisé. Le rendu passe à un fond sentinel explicite avec classification rendered-ok/blank-detected et un seuil de pixels visibles. Le lecteur est par ailleurs ramené à une base minimale stable: layout plein viewport (app-main-reader), suppression des modes de lecture et des préférences par livre, helpers de pagination/viewport extraits dans readerLayout.ts. Shell, lecteurs CBZ/EPUB et styles alignés sur cette base. Refs #31 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import { Archive, Home, Search, Settings, SlidersHorizontal, UserRound } from "lucide-react";
|
|
import type { ReactNode } from "react";
|
|
import type { Session } from "../api/types";
|
|
import { navigate } from "../router";
|
|
|
|
const navItems = [
|
|
{ href: "/home", label: "Accueil", icon: Home },
|
|
{ href: "/search", label: "Recherche", icon: Search },
|
|
{ href: "/admin/libraries", label: "Admin", icon: Settings },
|
|
{ href: "/admin/automation", label: "Automatisation", icon: SlidersHorizontal },
|
|
{ href: "/me", label: "Profil", icon: UserRound }
|
|
];
|
|
|
|
export function AppShell({ children, session, readerLayout = false }: { children: ReactNode; session: Session; readerLayout?: boolean }) {
|
|
return (
|
|
<div className="app-shell">
|
|
<aside className="side-rail">
|
|
<button className="brand-button" onClick={() => navigate("/home")} aria-label="ReadaBook">
|
|
<Archive size={22} />
|
|
<span>ReadaBook</span>
|
|
</button>
|
|
<nav>
|
|
{navItems.map((item) => {
|
|
const Icon = item.icon;
|
|
return (
|
|
<button key={item.href} onClick={() => navigate(item.href)} title={item.label}>
|
|
<Icon size={19} />
|
|
<span>{item.label}</span>
|
|
</button>
|
|
);
|
|
})}
|
|
</nav>
|
|
<div className="session-chip">{session.user ? session.user.email : "Mode vitrine"}</div>
|
|
</aside>
|
|
<main className={readerLayout ? "app-main-reader" : undefined}>{children}</main>
|
|
</div>
|
|
);
|
|
}
|