|
import { OpenInNewTab } from './utils/common'; |
|
import { PodcastGenerator } from './components/PodcastGenerator'; |
|
import { useState } from 'react'; |
|
import { ScriptMaker } from './components/ScriptMaker'; |
|
import { AuthCard } from './components/AuthCard'; |
|
|
|
function App() { |
|
const [hfToken, setHfToken] = useState<string>('loading'); |
|
const [genratedScript, setGeneratedScript] = useState<string>(''); |
|
const [busy, setBusy] = useState<boolean>(false); |
|
|
|
const [blogURL, setBlogURL] = useState<string>(''); |
|
|
|
return ( |
|
<div className="bg-base-300 min-h-screen"> |
|
<div className="max-w-screen-lg mx-auto p-4 pb-32 grid gap-4 grid-cols-1"> |
|
<div className="p-4 col-span-1"> |
|
<h1 className="text-3xl font-bold mb-2"> |
|
Podcast generator via Kokoro-TTS |
|
</h1> |
|
<p> |
|
A space made by{' '} |
|
<OpenInNewTab href="https://hf.co/ngxson">🤗 ngxson</OpenInNewTab> |
|
</p> |
|
</div> |
|
|
|
<AuthCard hfToken={hfToken} setHfToken={setHfToken} /> |
|
|
|
{hfToken === 'loading' ? ( |
|
<div className="p-4 col-span-1"> |
|
<div className="loading loading-spinner loading-lg"></div> |
|
</div> |
|
) : !hfToken || !hfToken.startsWith('hf_') ? ( |
|
<></> |
|
) : ( |
|
<> |
|
<ScriptMaker |
|
setScript={setGeneratedScript} |
|
setBusy={setBusy} |
|
setBlogURL={setBlogURL} |
|
busy={busy} |
|
hfToken={hfToken} |
|
/> |
|
|
|
<PodcastGenerator |
|
genratedScript={genratedScript} |
|
setBusy={setBusy} |
|
busy={busy} |
|
blogURL={blogURL} |
|
/> |
|
</> |
|
)} |
|
</div> |
|
</div> |
|
); |
|
} |
|
|
|
export default App; |
|
|