Initial commit: InkFlow — EPUB vers livre audio local (MLX/Kokoro)

This commit is contained in:
2026-06-21 00:10:11 +02:00
commit d3bb91394b
71 changed files with 8138 additions and 0 deletions

44
frontend/src/App.jsx Normal file
View File

@@ -0,0 +1,44 @@
import React, { useState } from "react";
import Library from "./Library.jsx";
import BookView from "./BookView.jsx";
import Settings from "./Settings.jsx";
export default function App() {
// Permet d'ouvrir un livre directement via #slug (deep-link).
const [slug, setSlug] = useState(
() => (location.hash ? decodeURIComponent(location.hash.slice(1)) : null)
);
const [showSettings, setShowSettings] = useState(false);
const goHome = () => { setShowSettings(false); setSlug(null); };
return (
<div className="min-h-screen bg-ink-bg text-ink-text">
<header className="border-b border-ink-edge">
<div className="mx-auto flex max-w-6xl items-center gap-3 px-6 py-4">
<button onClick={goHome} className="flex items-center gap-2">
<span className="text-2xl">🖋</span>
<span className="font-serif text-xl tracking-wide">
Ink<span className="text-ink-accent">Flow</span>
</span>
</button>
<span className="ml-2 hidden text-sm text-ink-muted sm:inline">
EPUB livre audio · local · MLX
</span>
<button onClick={() => setShowSettings(true)} title="Réglages techniques"
className="ml-auto text-xl text-ink-muted hover:text-ink-text"></button>
</div>
</header>
<main className="mx-auto max-w-6xl px-6 py-8">
{showSettings ? (
<Settings onBack={goHome} />
) : slug ? (
<BookView slug={slug} onBack={() => setSlug(null)} />
) : (
<Library onOpen={setSlug} />
)}
</main>
</div>
);
}