feat(ui): add file explorer, TTS UI, views and routing
Add a file tree UI and corresponding composable for local file management. Introduce TTS menu and player components for voice synthesis integration. Add new EditorView and DocsView routes and update SettingsPanel view switching. Enhance Mermaid plugin with improved styling and action buttons.
This commit is contained in:
+31
-1
@@ -1,4 +1,4 @@
|
||||
import { API_URL, API_KEY } from './config.js'
|
||||
import { API_URL, API_KEY, TTS_URL, TTS_STATUS_URL } from './config.js'
|
||||
import { useSettingsStore } from '../stores/settings'
|
||||
|
||||
function generateRequestId() {
|
||||
@@ -116,3 +116,33 @@ export async function fetchSuggestion(prefix, suffix, languageId, signal, apiUrl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchTTS(text, voice = 'af_bella', rate = 1.0, apiUrl = TTS_URL) {
|
||||
const res = await fetch(apiUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-API-Key': API_KEY,
|
||||
},
|
||||
body: JSON.stringify({ text, voice, rate, format: 'wav' }),
|
||||
})
|
||||
|
||||
if (!res.ok) {
|
||||
const errorText = await res.text()
|
||||
throw new Error(`TTS HTTP ${res.status}: ${errorText}`)
|
||||
}
|
||||
|
||||
return res.json()
|
||||
}
|
||||
|
||||
export async function fetchTTSStatus(apiUrl = TTS_STATUS_URL) {
|
||||
const res = await fetch(apiUrl, {
|
||||
headers: { 'X-API-Key': API_KEY },
|
||||
})
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(`TTS Status HTTP ${res.status}`)
|
||||
}
|
||||
|
||||
return res.json()
|
||||
}
|
||||
|
||||
@@ -7,4 +7,6 @@ export const API_URL = import.meta.env.VITE_API_URL || `${API_BASE_URL}/v1/compl
|
||||
export const OCR_URL = import.meta.env.VITE_OCR_URL || `${API_BASE_URL}/v1/ocr`
|
||||
export const CONVERT_URL = import.meta.env.VITE_CONVERT_URL || `${API_BASE_URL}/v1/convert`
|
||||
export const EXPORT_PDF_URL = import.meta.env.VITE_EXPORT_PDF_URL || '/v1/export/pdf'
|
||||
export const TTS_URL = import.meta.env.VITE_TTS_URL || `${API_BASE_URL}/v1/tts-asr/tts`
|
||||
export const TTS_STATUS_URL = import.meta.env.VITE_TTS_STATUS_URL || `${API_BASE_URL}/v1/tts-asr/status`
|
||||
export const API_KEY = import.meta.env.VITE_API_KEY || 'your-secret-key-here'
|
||||
|
||||
+36
-6
@@ -55,7 +55,12 @@ export const translations = {
|
||||
cancel: 'Cancel',
|
||||
imgTooLarge: 'Image too large',
|
||||
docTooLarge: 'Document too large, AI disabled',
|
||||
initialMarkdown: '# Welcome to LLM-IN-TEXT\n\nAn instant LLM system\n\nStart your creative work below...'
|
||||
initialMarkdown: '# Welcome to LLM-IN-TEXT\n\nAn instant LLM system\n\nStart your creative work below...',
|
||||
view: 'View',
|
||||
editor: 'Editor',
|
||||
docs: 'Docs',
|
||||
docsManagement: 'Document Management',
|
||||
docsEmptyDesc: 'Document management interface is under development...'
|
||||
},
|
||||
zh: {
|
||||
settings: '设置',
|
||||
@@ -113,7 +118,12 @@ export const translations = {
|
||||
cancel: '取消',
|
||||
imgTooLarge: '图片过大',
|
||||
docTooLarge: '文档过大,AI已禁用',
|
||||
initialMarkdown: '# 欢迎使用 LLM-IN-TEXT\n\n即时可用的 LLM 系统\n\n在下方开始创作吧...'
|
||||
initialMarkdown: '# 欢迎使用 LLM-IN-TEXT\n\n即时可用的 LLM 系统\n\n在下方开始创作吧...',
|
||||
view: '视图',
|
||||
editor: '编辑器',
|
||||
docs: '文档',
|
||||
docsManagement: '文档管理',
|
||||
docsEmptyDesc: '文档管理界面开发中...'
|
||||
},
|
||||
ja: {
|
||||
settings: '設定',
|
||||
@@ -166,7 +176,12 @@ export const translations = {
|
||||
cancel: 'キャンセル',
|
||||
imgTooLarge: '画像が大きすぎます',
|
||||
docTooLarge: 'ドキュメントが大きすぎます、AI無効',
|
||||
initialMarkdown: '# LLM-IN-TEXTへようこそ\n\nすぐに使えるLLMシステム\n\n下から創作を始めましょう...'
|
||||
initialMarkdown: '# LLM-IN-TEXTへようこそ\n\nすぐに使えるLLMシステム\n\n下から創作を始めましょう...',
|
||||
view: 'ビュー',
|
||||
editor: 'エディター',
|
||||
docs: 'ドキュメント',
|
||||
docsManagement: 'ドキュメント管理',
|
||||
docsEmptyDesc: 'ドキュメント管理画面は開発中です...'
|
||||
},
|
||||
ko: {
|
||||
settings: '설정',
|
||||
@@ -216,7 +231,12 @@ export const translations = {
|
||||
cancel: '취소',
|
||||
imgTooLarge: '이미지가 너무 큽니다',
|
||||
docTooLarge: '문서가 너무 큽니다, AI 비활성화됨',
|
||||
initialMarkdown: '# LLM-IN-TEXT에 오신 것을 환영합니다\n\n즉시 사용할 수 있는 LLM 시스템\n\n아래에서 창작을 시작하세요...'
|
||||
initialMarkdown: '# LLM-IN-TEXT에 오신 것을 환영합니다\n\n즉시 사용할 수 있는 LLM 시스템\n\n아래에서 창작을 시작하세요...',
|
||||
view: '보기',
|
||||
editor: '에디터',
|
||||
docs: '문서',
|
||||
docsManagement: '문서 관리',
|
||||
docsEmptyDesc: '문서 관리 화면은 개발 중입니다...'
|
||||
},
|
||||
de: {
|
||||
settings: 'Einstellungen',
|
||||
@@ -266,7 +286,12 @@ export const translations = {
|
||||
cancel: 'Abbrechen',
|
||||
imgTooLarge: 'Bild zu groß',
|
||||
docTooLarge: 'Dokument zu groß, KI deaktiviert',
|
||||
initialMarkdown: '# Willkommen bei LLM-IN-TEXT\n\nEin sofort verfügbares LLM-System\n\nStarten Sie Ihre kreative Arbeit unten...'
|
||||
initialMarkdown: '# Willkommen bei LLM-IN-TEXT\n\nEin sofort verfügbares LLM-System\n\nStarten Sie Ihre kreative Arbeit unten...',
|
||||
view: 'Ansicht',
|
||||
editor: 'Editor',
|
||||
docs: 'Dokumente',
|
||||
docsManagement: 'Dokumentenverwaltung',
|
||||
docsEmptyDesc: 'Die Dokumentenverwaltung ist in Entwicklung...'
|
||||
},
|
||||
fr: {
|
||||
settings: 'Paramètres',
|
||||
@@ -316,6 +341,11 @@ export const translations = {
|
||||
cancel: 'Annuler',
|
||||
imgTooLarge: 'Image trop grande',
|
||||
docTooLarge: 'Document trop grand, IA désactivée',
|
||||
initialMarkdown: '# Bienvenue sur LLM-IN-TEXT\n\nUn système LLM instantané\n\nCommencez votre création ci-dessous...'
|
||||
initialMarkdown: '# Bienvenue sur LLM-IN-TEXT\n\nUn système LLM instantané\n\nCommencez votre création ci-dessous...',
|
||||
view: 'Vue',
|
||||
editor: 'Éditeur',
|
||||
docs: 'Documents',
|
||||
docsManagement: 'Gestion des documents',
|
||||
docsEmptyDesc: 'L\'interface de gestion des documents est en développement...'
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user