diff --git a/packages/fakeyou.com/public/fakeyou/FakeYou-Logo-Mobile.png b/packages/fakeyou.com/public/fakeyou/FakeYou-Logo-Mobile.png new file mode 100644 index 0000000000..fdc88d0ef6 Binary files /dev/null and b/packages/fakeyou.com/public/fakeyou/FakeYou-Logo-Mobile.png differ diff --git a/packages/fakeyou.com/public/locales/bn/SideNav.json b/packages/fakeyou.com/public/locales/bn/SideNav.json new file mode 100644 index 0000000000..c9bce677da --- /dev/null +++ b/packages/fakeyou.com/public/locales/bn/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "গাইড", + "communityLeaderboard": "লিডারবোর্ড", + "communityTitle": "সম্প্রদায়", + "communityUploadModels": "আপলোড মডেল", + "infoPricing": "মূল্য নির্ধারণ", + "logOutButton": "প্রস্থান", + "loginButton": "প্রবেশ করুন", + "profileButton": "প্রোফাইল", + "queueFaceAnimator": "অ্যানিমেশন সারিবদ্ধ", + "queueRvc": "RVC সারিবদ্ধ", + "queueSvc": "SVC সারিবদ্ধ", + "queueTitle": "পরিষেবা সারি", + "queueTts": "টিটিএস সারিবদ্ধ", + "signUpButton": "নিবন্ধন করুন", + "speechTitle": "স্পিচ জেনারেশন", + "speechTts": "টেক্সট টু স্পিচ", + "speechVc": "ভয়েস টু ভয়েস", + "videoFaceAnimator": "ফেস অ্যানিমেটর", + "videoTitle": "ভিডিও জেনারেশন", + "videoW2l": "ভিডিও লিপ সিঙ্ক" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/de/SideNav.json b/packages/fakeyou.com/public/locales/de/SideNav.json new file mode 100644 index 0000000000..ee54272e1b --- /dev/null +++ b/packages/fakeyou.com/public/locales/de/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Führung", + "communityLeaderboard": "Bestenliste", + "communityTitle": "Gemeinschaft", + "communityUploadModels": "Modelle hochladen", + "infoPricing": "Preisgestaltung", + "logOutButton": "Ausloggen", + "loginButton": "Anmeldung", + "profileButton": "Profil", + "queueFaceAnimator": "Animationen in der Warteschlange", + "queueRvc": "RVC in der Warteschlange", + "queueSvc": "SVC in der Warteschlange", + "queueTitle": "Service-Warteschlangen", + "queueTts": "TTS in der Warteschlange", + "signUpButton": "Melden Sie sich an", + "speechTitle": "Spracherzeugung", + "speechTts": "Text zu Sprache", + "speechVc": "Stimme zu Stimme", + "videoFaceAnimator": "Gesichtsanimator", + "videoTitle": "Videogenerierung", + "videoW2l": "Video-Lippensynchronisation" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/en/SideNav.json b/packages/fakeyou.com/public/locales/en/SideNav.json new file mode 100644 index 0000000000..5faa6ac186 --- /dev/null +++ b/packages/fakeyou.com/public/locales/en/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Guide", + "communityLeaderboard": "Leaderboard", + "communityTitle": "Community", + "communityUploadModels": "Upload Models", + "infoPricing": "Pricing", + "logOutButton": "Log Out", + "loginButton": "Login", + "profileButton": "Profile", + "queueFaceAnimator": "Animations Queued", + "queueRvc": "RVC Queued", + "queueSvc": "SVC Queued", + "queueTitle": "Service Queues", + "queueTts": "TTS Queued", + "signUpButton": "Sign Up", + "speechTitle": "Speech Generation", + "speechTts": "Text to Speech", + "speechVc": "Voice to Voice", + "videoFaceAnimator": "Face Animator", + "videoTitle": "Video Generation", + "videoW2l": "Video Lip Sync" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/es/SideNav.json b/packages/fakeyou.com/public/locales/es/SideNav.json new file mode 100644 index 0000000000..456f2b7bfa --- /dev/null +++ b/packages/fakeyou.com/public/locales/es/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Guía", + "communityLeaderboard": "Tabla de clasificación", + "communityTitle": "Comunidad", + "communityUploadModels": "Subir modelos", + "infoPricing": "Precios", + "logOutButton": "Cerrar sesión", + "loginButton": "Acceso", + "profileButton": "Perfil", + "queueFaceAnimator": "Animaciones en cola", + "queueRvc": "RVC en cola", + "queueSvc": "SVC en cola", + "queueTitle": "Colas de servicio", + "queueTts": "TTS en cola", + "signUpButton": "Inscribirse", + "speechTitle": "Generación de voz", + "speechTts": "Texto a voz", + "speechVc": "Voz a Voz", + "videoFaceAnimator": "Animador de rostros", + "videoTitle": "Generación de vídeo", + "videoW2l": "Sincronización de labios de vídeo" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/fr/SideNav.json b/packages/fakeyou.com/public/locales/fr/SideNav.json new file mode 100644 index 0000000000..f89bd2292b --- /dev/null +++ b/packages/fakeyou.com/public/locales/fr/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Guide", + "communityLeaderboard": "Classement", + "communityTitle": "Communauté", + "communityUploadModels": "Télécharger des modèles", + "infoPricing": "Tarifs", + "logOutButton": "Se déconnecter", + "loginButton": "Se connecter", + "profileButton": "Profil", + "queueFaceAnimator": "Animations en file d'attente", + "queueRvc": "RVC en file d'attente", + "queueSvc": "SVC en file d'attente", + "queueTitle": "Files d'attente de service", + "queueTts": "TTS en file d'attente", + "signUpButton": "S'inscrire", + "speechTitle": "Génération de parole", + "speechTts": "Texte pour parler", + "speechVc": "Voix à voix", + "videoFaceAnimator": "Animateur de visage", + "videoTitle": "Génération vidéo", + "videoW2l": "Synchronisation labiale vidéo" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/hi/SideNav.json b/packages/fakeyou.com/public/locales/hi/SideNav.json new file mode 100644 index 0000000000..263f3d32d7 --- /dev/null +++ b/packages/fakeyou.com/public/locales/hi/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "मार्गदर्शक", + "communityLeaderboard": "लीडरबोर्ड", + "communityTitle": "समुदाय", + "communityUploadModels": "मॉडल अपलोड करें", + "infoPricing": "मूल्य निर्धारण", + "logOutButton": "लॉग आउट", + "loginButton": "लॉग इन करें", + "profileButton": "प्रोफ़ाइल", + "queueFaceAnimator": "एनिमेशन कतारबद्ध", + "queueRvc": "आरवीसी कतारबद्ध", + "queueSvc": "एसवीसी कतारबद्ध", + "queueTitle": "सेवा कतारें", + "queueTts": "टीटीएस कतारबद्ध", + "signUpButton": "साइन अप करें", + "speechTitle": "भाषण निर्माण", + "speechTts": "भाषण के पाठ", + "speechVc": "आवाज से आवाज", + "videoFaceAnimator": "फेस एनिमेटर", + "videoTitle": "वीडियो जनरेशन", + "videoW2l": "वीडियो लिप सिंक" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/id/SideNav.json b/packages/fakeyou.com/public/locales/id/SideNav.json new file mode 100644 index 0000000000..4a246f3a9a --- /dev/null +++ b/packages/fakeyou.com/public/locales/id/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Memandu", + "communityLeaderboard": "Papan peringkat", + "communityTitle": "Masyarakat", + "communityUploadModels": "Unggah Model", + "infoPricing": "Harga", + "logOutButton": "Keluar", + "loginButton": "Gabung", + "profileButton": "Profil", + "queueFaceAnimator": "Animasi Antri", + "queueRvc": "RVC Mengantri", + "queueSvc": "SVC Mengantri", + "queueTitle": "Antrian Layanan", + "queueTts": "TTS Mengantri", + "signUpButton": "Mendaftar", + "speechTitle": "Generasi Pidato", + "speechTts": "Teks pidato", + "speechVc": "Suara ke Suara", + "videoFaceAnimator": "Animator Wajah", + "videoTitle": "Pembuatan Video", + "videoW2l": "Sinkronisasi Bibir Video" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/it/SideNav.json b/packages/fakeyou.com/public/locales/it/SideNav.json new file mode 100644 index 0000000000..7877570396 --- /dev/null +++ b/packages/fakeyou.com/public/locales/it/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Guida", + "communityLeaderboard": "Classifica", + "communityTitle": "Comunità", + "communityUploadModels": "Carica modelli", + "infoPricing": "Prezzi", + "logOutButton": "Disconnettersi", + "loginButton": "Login", + "profileButton": "Profilo", + "queueFaceAnimator": "Animazioni in coda", + "queueRvc": "RVC in coda", + "queueSvc": "SVC in coda", + "queueTitle": "Code di servizio", + "queueTts": "TTS in coda", + "signUpButton": "Iscrizione", + "speechTitle": "Generazione del discorso", + "speechTts": "Sintesi vocale da testo", + "speechVc": "Da voce a voce", + "videoFaceAnimator": "Animatore di volti", + "videoTitle": "Generazione video", + "videoW2l": "Sincronizzazione labiale video" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ja/SideNav.json b/packages/fakeyou.com/public/locales/ja/SideNav.json new file mode 100644 index 0000000000..2097d5ac30 --- /dev/null +++ b/packages/fakeyou.com/public/locales/ja/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "ガイド", + "communityLeaderboard": "リーダーボード", + "communityTitle": "コミュニティ", + "communityUploadModels": "モデルのアップロード", + "infoPricing": "価格設定", + "logOutButton": "ログアウト", + "loginButton": "ログイン", + "profileButton": "プロフィール", + "queueFaceAnimator": "キューに入れられたアニメーション", + "queueRvc": "RVC がキューに登録されました", + "queueSvc": "SVC がキューに登録されました", + "queueTitle": "サービスキュー", + "queueTts": "TTS がキューに登録されました", + "signUpButton": "サインアップ", + "speechTitle": "音声生成", + "speechTts": "テキスト読み上げ", + "speechVc": "声から声へ", + "videoFaceAnimator": "フェイスアニメーター", + "videoTitle": "ビデオ生成", + "videoW2l": "ビデオリップシンク" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ko/SideNav.json b/packages/fakeyou.com/public/locales/ko/SideNav.json new file mode 100644 index 0000000000..70e0febae2 --- /dev/null +++ b/packages/fakeyou.com/public/locales/ko/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "가이드", + "communityLeaderboard": "리더보드", + "communityTitle": "지역 사회", + "communityUploadModels": "모델 업로드", + "infoPricing": "가격", + "logOutButton": "로그 아웃", + "loginButton": "로그인", + "profileButton": "프로필", + "queueFaceAnimator": "대기 중인 애니메이션", + "queueRvc": "RVC 대기 중", + "queueSvc": "SVC 대기 중", + "queueTitle": "서비스 대기열", + "queueTts": "TTS 대기 중", + "signUpButton": "가입하기", + "speechTitle": "음성 생성", + "speechTts": "텍스트 음성 변환", + "speechVc": "음성 대 음성", + "videoFaceAnimator": "얼굴 애니메이터", + "videoTitle": "비디오 생성", + "videoW2l": "비디오 립싱크" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/pt/SideNav.json b/packages/fakeyou.com/public/locales/pt/SideNav.json new file mode 100644 index 0000000000..e4ee3c1093 --- /dev/null +++ b/packages/fakeyou.com/public/locales/pt/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Guia", + "communityLeaderboard": "Entre os melhores", + "communityTitle": "Comunidade", + "communityUploadModels": "Carregar modelos", + "infoPricing": "Preços", + "logOutButton": "Sair", + "loginButton": "Conecte-se", + "profileButton": "Perfil", + "queueFaceAnimator": "Animações na fila", + "queueRvc": "RVC na fila", + "queueSvc": "SVC na fila", + "queueTitle": "Filas de serviço", + "queueTts": "TTS na fila", + "signUpButton": "Inscrever-se", + "speechTitle": "Geração de fala", + "speechTts": "Texto para fala", + "speechVc": "Voz para Voz", + "videoFaceAnimator": "Animador facial", + "videoTitle": "Geração de Vídeo", + "videoW2l": "Sincronização labial de vídeo" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/ru/SideNav.json b/packages/fakeyou.com/public/locales/ru/SideNav.json new file mode 100644 index 0000000000..c8f2b66e3e --- /dev/null +++ b/packages/fakeyou.com/public/locales/ru/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Гид", + "communityLeaderboard": "Таблица лидеров", + "communityTitle": "Сообщество", + "communityUploadModels": "Загрузить модели", + "infoPricing": "Цены", + "logOutButton": "Выйти", + "loginButton": "Авторизоваться", + "profileButton": "Профиль", + "queueFaceAnimator": "Анимации в очереди", + "queueRvc": "RVC в очереди", + "queueSvc": "SVC в очереди", + "queueTitle": "Очереди обслуживания", + "queueTts": "TTS в очереди", + "signUpButton": "Зарегистрироваться", + "speechTitle": "Генерация речи", + "speechTts": "Текст в речь", + "speechVc": "Голос в голос", + "videoFaceAnimator": "Лицевой Аниматор", + "videoTitle": "Создание видео", + "videoW2l": "Видео синхронизация губ" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/th/SideNav.json b/packages/fakeyou.com/public/locales/th/SideNav.json new file mode 100644 index 0000000000..fd0060cc95 --- /dev/null +++ b/packages/fakeyou.com/public/locales/th/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "แนะนำ", + "communityLeaderboard": "ลีดเดอร์บอร์ด", + "communityTitle": "ชุมชน", + "communityUploadModels": "อัพโหลดโมเดล", + "infoPricing": "ราคา", + "logOutButton": "ออกจากระบบ", + "loginButton": "เข้าสู่ระบบ", + "profileButton": "ประวัติโดยย่อ", + "queueFaceAnimator": "ภาพเคลื่อนไหวอยู่ในคิว", + "queueRvc": "RVC อยู่ในคิว", + "queueSvc": "SVC อยู่ในคิว", + "queueTitle": "คิวบริการ", + "queueTts": "TTS อยู่ในคิว", + "signUpButton": "ลงชื่อ", + "speechTitle": "การสร้างคำพูด", + "speechTts": "ข้อความเป็นคำพูด", + "speechVc": "เสียงเป็นเสียง", + "videoFaceAnimator": "แอนิเมชั่นใบหน้า", + "videoTitle": "การสร้างวิดีโอ", + "videoW2l": "ลิปซิงค์วิดีโอ" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/tr/SideNav.json b/packages/fakeyou.com/public/locales/tr/SideNav.json new file mode 100644 index 0000000000..547243b692 --- /dev/null +++ b/packages/fakeyou.com/public/locales/tr/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Rehber", + "communityLeaderboard": "Liderler Sıralaması", + "communityTitle": "Toplum", + "communityUploadModels": "Modelleri Yükle", + "infoPricing": "Fiyatlandırma", + "logOutButton": "Çıkış Yap", + "loginButton": "Giriş yapmak", + "profileButton": "Profil", + "queueFaceAnimator": "Animasyonlar Sıraya Alındı", + "queueRvc": "RVC Kuyruğa Alındı", + "queueSvc": "SVC Sıraya Alındı", + "queueTitle": "Hizmet Kuyrukları", + "queueTts": "TTS Sıraya Alındı", + "signUpButton": "Üye olmak", + "speechTitle": "Konuşma Üretimi", + "speechTts": "Konuşma metni", + "speechVc": "Sesten Sese", + "videoFaceAnimator": "Yüz Animatörü", + "videoTitle": "Video Oluşturma", + "videoW2l": "Video Dudak Senkronizasyonu" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/vi/SideNav.json b/packages/fakeyou.com/public/locales/vi/SideNav.json new file mode 100644 index 0000000000..75f51c5e56 --- /dev/null +++ b/packages/fakeyou.com/public/locales/vi/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "Hướng dẫn", + "communityLeaderboard": "Bảng xếp hạng", + "communityTitle": "Cộng đồng", + "communityUploadModels": "Tải lên mô hình", + "infoPricing": "Định giá", + "logOutButton": "Đăng xuất", + "loginButton": "Đăng nhập", + "profileButton": "Hồ sơ", + "queueFaceAnimator": "Hoạt ảnh được xếp hàng đợi", + "queueRvc": "RVC xếp hàng", + "queueSvc": "SVC xếp hàng", + "queueTitle": "Hàng đợi dịch vụ", + "queueTts": "TTS xếp hàng", + "signUpButton": "Đăng ký", + "speechTitle": "Tạo giọng nói", + "speechTts": "Chuyển văn bản thành giọng nói", + "speechVc": "Giọng nói thành giọng nói", + "videoFaceAnimator": "khuôn mặt hoạt hình", + "videoTitle": "Tạo video", + "videoW2l": "Hát nhép video" +} \ No newline at end of file diff --git a/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json b/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json new file mode 100644 index 0000000000..15f95dbee9 --- /dev/null +++ b/packages/fakeyou.com/public/locales/zh-Hans/SideNav.json @@ -0,0 +1,23 @@ +{ + "communityDiscord": "Discord", + "communityGuide": "指导", + "communityLeaderboard": "排行榜", + "communityTitle": "社区", + "communityUploadModels": "上传模型", + "infoPricing": "价钱", + "logOutButton": "登出", + "loginButton": "登录", + "profileButton": "轮廓", + "queueFaceAnimator": "动画排队", + "queueRvc": "RVC 排队", + "queueSvc": "SVC 排队", + "queueTitle": "服务队列", + "queueTts": "TTS 排队", + "signUpButton": "报名", + "speechTitle": "语音生成", + "speechTts": "文字转语音", + "speechVc": "语音到语音", + "videoFaceAnimator": "脸部动画师", + "videoTitle": "视频生成", + "videoW2l": "视频唇形同步" +} \ No newline at end of file diff --git a/packages/fakeyou.com/src/App.tsx b/packages/fakeyou.com/src/App.tsx index 1950f946aa..2da2b00a82 100644 --- a/packages/fakeyou.com/src/App.tsx +++ b/packages/fakeyou.com/src/App.tsx @@ -8,7 +8,7 @@ import { } from "@storyteller/components/src/api/locale/DetectLocale"; import { Language } from "@storyteller/components/src/i18n/Language"; import { BrowserRouter, Route, Switch } from "react-router-dom"; -import { PageContainer } from "./v2/view/PageContainer"; +import PageContainer from "./v2/view/PageContainer"; import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; import { PosthogClient } from "@storyteller/components/src/analytics/PosthogClient"; import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper"; @@ -45,15 +45,21 @@ import { AVAILABLE_LANGUAGE_MAP, ENGLISH_LANGUAGE, } from "./_i18n/AvailableLanguageMap"; -import { FrontendInferenceJobType, InferenceJob } from "@storyteller/components/src/jobs/InferenceJob"; -import { GetModelInferenceJobStatus, GetModelInferenceJobStatusIsOk } from "@storyteller/components/src/api/model_inference/GetModelInferenceJobStatus"; +import { + FrontendInferenceJobType, + InferenceJob, +} from "@storyteller/components/src/jobs/InferenceJob"; +import { + GetModelInferenceJobStatus, + GetModelInferenceJobStatusIsOk, +} from "@storyteller/components/src/api/model_inference/GetModelInferenceJobStatus"; import { VoiceConversionModelUploadJob } from "@storyteller/components/src/jobs/VoiceConversionModelUploadJob"; import { VoiceConversionModelListItem } from "@storyteller/components/src/api/voice_conversion/ListVoiceConversionModels"; -import HttpBackend from 'i18next-http-backend' +import HttpBackend from "i18next-http-backend"; // NB: We're transitioning over to this instance of i18n-next that loads translations over HTTP from Json Files. // The old i18n-next instance (see below) bakes in translations into the compiled javascript blob. -// This new instance uses the Locize paid service to manage translation strings on their website. It's automated, +// This new instance uses the Locize paid service to manage translation strings on their website. It's automated, // can easily sync to version control, and makes translation easy to maintain across a wide number of languages. export const i18n2 = i18n.createInstance(); @@ -79,16 +85,14 @@ i18n }, }); -i18n2 - .use(HttpBackend) - .init({ - fallbackLng: "en", - debug: false, - backend: { - // This is the path localizations are loaded from. - loadPath: '/locales/{{lng}}/{{ns}}.json', - } - }); +i18n2.use(HttpBackend).init({ + fallbackLng: "en", + debug: false, + backend: { + // This is the path localizations are loaded from. + loadPath: "/locales/{{lng}}/{{ns}}.json", + }, +}); enum MigrationMode { NEW_VOCODES, @@ -123,8 +127,8 @@ interface Props { maybeSelectedTtsModel?: TtsModelListItem; setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void; - selectedTtsLanguageScope: string, - setSelectedTtsLanguageScope: (selectedTtsLanguageScope: string) => void, + selectedTtsLanguageScope: string; + setSelectedTtsLanguageScope: (selectedTtsLanguageScope: string) => void; } interface State { @@ -310,7 +314,8 @@ class App extends React.Component { let preferredLanguage = ENGLISH_LANGUAGE; for (let languageCode of locale.language_codes) { - let maybeLanguage = AVAILABLE_LANGUAGE_MAP[languageCode as AvailableLanguageKey]; + let maybeLanguage = + AVAILABLE_LANGUAGE_MAP[languageCode as AvailableLanguageKey]; if (maybeLanguage !== undefined) { preferredLanguage = maybeLanguage; @@ -373,12 +378,14 @@ class App extends React.Component { }; setAllVoiceConversionModels = (models: VoiceConversionModelListItem[]) => { - this.setState({ voiceConversionModels: models }) - } + this.setState({ voiceConversionModels: models }); + }; - setMaybeSelectedVoiceConversionModel =(model?: VoiceConversionModelListItem) => { - this.setState({ maybeSelectedVoiceConversionModel: model }) - } + setMaybeSelectedVoiceConversionModel = ( + model?: VoiceConversionModelListItem + ) => { + this.setState({ maybeSelectedVoiceConversionModel: model }); + }; checkInferenceJob = async (jobToken: string) => { const lookupResult = await GetModelInferenceJobStatus(jobToken); @@ -394,17 +401,21 @@ class App extends React.Component { !jobStateCanChange(existingJob.jobState) ) { updatedJobs.push(existingJob); - inferenceJobsByCategory.get(existingJob.frontendJobType)?.push(existingJob); + inferenceJobsByCategory + .get(existingJob.frontendJobType) + ?.push(existingJob); return; } let updatedJob = InferenceJob.fromResponse( - lookupResult.state!, + lookupResult.state!, existingJob.frontendJobType ); updatedJobs.push(updatedJob); - inferenceJobsByCategory.get(updatedJob.frontendJobType)?.push(updatedJob); + inferenceJobsByCategory + .get(updatedJob.frontendJobType) + ?.push(updatedJob); }); this.setState({ @@ -414,7 +425,10 @@ class App extends React.Component { } }; - enqueueInferenceJob = (jobToken: string, frontendJobType: FrontendInferenceJobType) => { + enqueueInferenceJob = ( + jobToken: string, + frontendJobType: FrontendInferenceJobType + ) => { const newJob = new InferenceJob(jobToken, frontendJobType); let inferenceJobs = this.state.inferenceJobs.concat([newJob]); @@ -689,7 +703,9 @@ class App extends React.Component { return; } - let updatedJob = VoiceConversionModelUploadJob.fromResponse(lookupResult.state!); + let updatedJob = VoiceConversionModelUploadJob.fromResponse( + lookupResult.state! + ); updatedJobs.push(updatedJob); }); @@ -809,8 +825,12 @@ class App extends React.Component { w2lTemplateUploadJobs={this.state.w2lTemplateUploadJobs} enqueueVocoderUploadJob={this.enqueueVocoderUploadJob} vocoderUploadJobs={this.state.vocoderUploadJobs} - enqueueVoiceConversionModelUploadJob={this.enqueueVoiceConversionModelUploadJob} - voiceConversionModelUploadJobs={this.state.voiceConversionModelUploadJobs} + enqueueVoiceConversionModelUploadJob={ + this.enqueueVoiceConversionModelUploadJob + } + voiceConversionModelUploadJobs={ + this.state.voiceConversionModelUploadJobs + } textBuffer={this.state.textBuffer} setTextBuffer={this.setTextBuffer} clearTextBuffer={this.clearTextBuffer} @@ -839,13 +859,20 @@ class App extends React.Component { setMaybeSelectedTtsModel={ this.props.setMaybeSelectedTtsModel } - selectedTtsLanguageScope={this.props.selectedTtsLanguageScope} - setSelectedTtsLanguageScope={this.props.setSelectedTtsLanguageScope} - + selectedTtsLanguageScope={ + this.props.selectedTtsLanguageScope + } + setSelectedTtsLanguageScope={ + this.props.setSelectedTtsLanguageScope + } voiceConversionModels={this.state.voiceConversionModels} setVoiceConversionModels={this.setAllVoiceConversionModels} - maybeSelectedVoiceConversionModel={this.state.maybeSelectedVoiceConversionModel} - setMaybeSelectedVoiceConversionModel={this.setMaybeSelectedVoiceConversionModel} + maybeSelectedVoiceConversionModel={ + this.state.maybeSelectedVoiceConversionModel + } + setMaybeSelectedVoiceConversionModel={ + this.setMaybeSelectedVoiceConversionModel + } /> diff --git a/packages/fakeyou.com/src/AppNew.scss b/packages/fakeyou.com/src/AppNew.scss index 8c0787e45a..744af99c43 100644 --- a/packages/fakeyou.com/src/AppNew.scss +++ b/packages/fakeyou.com/src/AppNew.scss @@ -1,5 +1,6 @@ // @import "./scss/normalize.scss"; // @import-normalize; /* bring in normalize.css styles */ +@import "./scss/nav.scss"; @import "./scss/colours.scss"; @import "./scss/site-refresh.scss"; // @import "./scss/CSSParticles.scss"; diff --git a/packages/fakeyou.com/src/components/common/Button/Button.scss b/packages/fakeyou.com/src/components/common/Button/Button.scss new file mode 100644 index 0000000000..d5a58e8c67 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/Button/Button.scss @@ -0,0 +1,76 @@ +@import "scss/colours.scss"; + +.button { + border-radius: 0.5rem; + outline: none; + font-size: 15px; + font-weight: 500; + padding: 10px 20px; + z-index: 2; + display: flex; + align-items: center; + justify-content: center; +} + +.button-primary, +.button-primary:focus, +.button-primary:active { + background-color: $primary; + border: 2.5px solid; + border-color: $primary; + transition: 0.2s; + color: $white; +} +.button-primary:hover { + background-color: lighten($primary, 5%); + border-color: lighten($primary, 5%); + color: $white; +} + +.button-secondary, +.button-secondary:focus, +.button-secondary:active { + background-color: $secondary; + color: $white; + border: 2.5px solid; + border-color: $secondary; + transition: 0.2s; +} + +.button-secondary:hover { + background-color: lighten($secondary, 5%); + color: $white; + border: 2.5px solid; + border-color: lighten($secondary, 5%); +} + +.button-destructive, +.button-destructive:focus, +.button-destructive:active { + background-color: $danger; + color: $white; + border: 2.5px solid; + border-color: $danger; + transition: 0.2s; +} + +.button-destructive:hover { + background-color: lighten($danger, 5%); + color: $white; + border: 2.5px solid; + border-color: lighten($danger, 5%); +} + +.button-small, +.button-small:focus, +.button-small:active { + font-weight: 500; + font-size: 14px; + padding: 8.25px 16px; + transition: 0.2s; + border: none; +} + +.button-small:hover { + border: none; +} diff --git a/packages/fakeyou.com/src/components/common/Button/Button.tsx b/packages/fakeyou.com/src/components/common/Button/Button.tsx new file mode 100644 index 0000000000..188ca25bac --- /dev/null +++ b/packages/fakeyou.com/src/components/common/Button/Button.tsx @@ -0,0 +1,37 @@ +import React, { ButtonHTMLAttributes } from "react"; +import "./Button.scss"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { IconDefinition } from "@fortawesome/fontawesome-svg-core"; + +interface ButtonProps extends ButtonHTMLAttributes { + label?: string; + icon?: IconDefinition; + small?: boolean; + secondary?: boolean; + danger?: boolean; +} + +export default function Button({ + label, + icon, + small, + secondary, + danger, + ...rest +}: ButtonProps) { + const buttonClasses = `button ${small ? "button-small" : ""} + ${ + secondary + ? "button-secondary" + : danger + ? "button-destructive" + : "button-primary" + } `; + + return ( + + ); +} diff --git a/packages/fakeyou.com/src/components/common/Inputs/Inputs.scss b/packages/fakeyou.com/src/components/common/Inputs/Inputs.scss new file mode 100644 index 0000000000..20703f0a84 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/Inputs/Inputs.scss @@ -0,0 +1,68 @@ +@import "scss/colours.scss"; + +.select__control { + &.select { + height: 48px; + border-width: 2px; + padding-left: 0.15rem; + padding-right: 0.15rem; + background-color: $input-dark; + border-radius: 0.5rem; + border-color: $input-dark !important; + box-shadow: none; + cursor: pointer; + + &.no-padding { + padding-left: 0.5rem; + } + + &:hover { + background-color: lighten($input-dark, 5%); + border-color: lighten($input-dark, 5%) !important; + } + + &.focused { + border-color: $primary !important; + } + + &.with-icon { + padding-left: 2rem; + } + + &.rounded-full { + border-radius: 50px; + } + } + + &.select-option { + background-color: $input-dark; + cursor: pointer; + padding: 0.5rem 1rem; + + &:hover { + background-color: lighten($input-dark, 8%); + } + } + + &.select-input, + &.select-value { + color: $white; + } + + &.select-placeholder { + color: $white !important; + } + + &.select-container { + background: $input-dark; + margin-top: 6px; + padding: 0; + border-radius: 0.5rem; + z-index: 3; + } + + &.select-separator { + width: 1px; + opacity: 0.3; + } +} diff --git a/packages/fakeyou.com/src/components/common/Inputs/Inputs.tsx b/packages/fakeyou.com/src/components/common/Inputs/Inputs.tsx new file mode 100644 index 0000000000..c2923f026f --- /dev/null +++ b/packages/fakeyou.com/src/components/common/Inputs/Inputs.tsx @@ -0,0 +1,92 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { IconDefinition } from "@fortawesome/fontawesome-svg-core"; +import "./Inputs.scss"; +import { + default as ReactSelect, + Props as ReactSelectProps, +} from "react-select"; + +interface InputProps extends React.InputHTMLAttributes { + icon?: IconDefinition; + label?: string; + textArea?: boolean; +} + +interface TextAreaProps + extends React.TextareaHTMLAttributes { + label?: string; + textArea?: boolean; +} + +interface SelectProps extends ReactSelectProps { + icon?: IconDefinition; + label?: string; + rounded?: boolean; +} + +export function Input({ label, icon, textArea, ...rest }: InputProps) { + return ( +
+ {label && } + +
+ {icon && ( + + )} + +
+
+ ); +} + +export function TextArea({ label, textArea, ...rest }: TextAreaProps) { + return ( +
+ {label && } + +
+