Initial commit: InkFlow — EPUB vers livre audio local (MLX/Kokoro)
This commit is contained in:
44
frontend/src/App.jsx
Normal file
44
frontend/src/App.jsx
Normal 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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user