feat(V2-6차): 테마 토글 + Mermaid + 오디오 재생 + Dashboard 차트
[A] Dark/Light/6종 + Auto 테마 토글 - theme-mode-context.tsx: localStorage 영속 + prefers-color-scheme - theme-provider.tsx: 컨텍스트 기반 동적 getTheme - sidebar.tsx: MUI Select 토글 (PaletteIcon) - 12개 locale theme.* 키 추가 (label/dark/light/auto/nord/solarized/catppuccin/dracula) [B] DocumentEditor Mermaid + Markdown 렌더 - markdown-preview.tsx: react-markdown + remark-gfm + lazy mermaid - mermaid 코드 블록 자동 SVG 렌더 - dark theme + d3ro 폰트 - document-editor.tsx: Edit/Preview Tabs [C] 회의 오디오 재생 - meeting-audio-player.tsx: Supabase Storage signed URL (1h) → <audio controls> - meetings/[id] AUDIO 카드 추가 [D] Dashboard 14일 추이 차트 - meetings-trend-chart.tsx: recharts LineChart (회의/문서) - dashboard/page.tsx: 14일 데이터 집계 + 이번 주 stat 자동 계산 [W] fix: Emotion key 'd3ro-mui' → 'mui' - 'd3ro-mui'에 숫자 3이 포함돼 Emotion 키 검증 실패 - dev SSR /login 500 에러 차단했음 deps: - react-markdown@10, remark-gfm@4, mermaid@11, recharts@3
This commit is contained in:
parent
162a59dc47
commit
07c6d13c99
24 changed files with 2220 additions and 63 deletions
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "HuggingFace Token",
|
||||
"settings.hfTokenHint": "Ein HuggingFace Token wird für die Sprechertrennung benötigt",
|
||||
"settings.diarization": "Sprechertrennung",
|
||||
"settings.diarizationHint": "Sprecher werden nach der Aufnahme automatisch identifiziert"
|
||||
}
|
||||
"settings.diarizationHint": "Sprecher werden nach der Aufnahme automatisch identifiziert",
|
||||
"theme.label": "Design",
|
||||
"theme.dark": "Dunkel",
|
||||
"theme.light": "Hell",
|
||||
"theme.auto": "Auto (System)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -491,5 +491,13 @@
|
|||
"settings.hfToken": "HuggingFace Token",
|
||||
"settings.hfTokenHint": "A HuggingFace token is required for speaker diarization",
|
||||
"settings.diarization": "Speaker Diarization",
|
||||
"settings.diarizationHint": "Automatically identify speakers after recording ends"
|
||||
}
|
||||
"settings.diarizationHint": "Automatically identify speakers after recording ends",
|
||||
"theme.label": "Theme",
|
||||
"theme.dark": "Dark",
|
||||
"theme.light": "Light",
|
||||
"theme.auto": "Auto (system)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "Token de HuggingFace",
|
||||
"settings.hfTokenHint": "Se necesita un token de HuggingFace para identificar hablantes",
|
||||
"settings.diarization": "Identificación de hablantes",
|
||||
"settings.diarizationHint": "Identifica automáticamente los hablantes al finalizar la grabación"
|
||||
}
|
||||
"settings.diarizationHint": "Identifica automáticamente los hablantes al finalizar la grabación",
|
||||
"theme.label": "Tema",
|
||||
"theme.dark": "Oscuro",
|
||||
"theme.light": "Claro",
|
||||
"theme.auto": "Auto (sistema)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "Token HuggingFace",
|
||||
"settings.hfTokenHint": "Un token HuggingFace est requis pour l'identification des locuteurs",
|
||||
"settings.diarization": "Identification des locuteurs",
|
||||
"settings.diarizationHint": "Identifier automatiquement les locuteurs après l'enregistrement"
|
||||
}
|
||||
"settings.diarizationHint": "Identifier automatiquement les locuteurs après l'enregistrement",
|
||||
"theme.label": "Thème",
|
||||
"theme.dark": "Sombre",
|
||||
"theme.light": "Clair",
|
||||
"theme.auto": "Auto (système)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "HuggingFaceトークン",
|
||||
"settings.hfTokenHint": "話者分離にはHuggingFaceトークンが必要です",
|
||||
"settings.diarization": "話者分離",
|
||||
"settings.diarizationHint": "録音終了後に自動的に話者を識別します"
|
||||
}
|
||||
"settings.diarizationHint": "録音終了後に自動的に話者を識別します",
|
||||
"theme.label": "テーマ",
|
||||
"theme.dark": "ダーク",
|
||||
"theme.light": "ライト",
|
||||
"theme.auto": "自動 (システム)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -491,5 +491,13 @@
|
|||
"settings.hfToken": "HuggingFace 토큰",
|
||||
"settings.hfTokenHint": "화자 구분을 위해 HuggingFace 토큰이 필요합니다",
|
||||
"settings.diarization": "화자 구분",
|
||||
"settings.diarizationHint": "녹음 종료 후 화자를 자동으로 구분합니다"
|
||||
}
|
||||
"settings.diarizationHint": "녹음 종료 후 화자를 자동으로 구분합니다",
|
||||
"theme.label": "테마",
|
||||
"theme.dark": "다크",
|
||||
"theme.light": "라이트",
|
||||
"theme.auto": "자동 (시스템)",
|
||||
"theme.nord": "노드",
|
||||
"theme.solarized": "솔라라이즈드",
|
||||
"theme.catppuccin": "카푸치노",
|
||||
"theme.dracula": "드라큘라"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "Token do HuggingFace",
|
||||
"settings.hfTokenHint": "Um token do HuggingFace é necessário para identificar oradores",
|
||||
"settings.diarization": "Identificação de oradores",
|
||||
"settings.diarizationHint": "Identifica automaticamente os oradores após o término da gravação"
|
||||
}
|
||||
"settings.diarizationHint": "Identifica automaticamente os oradores após o término da gravação",
|
||||
"theme.label": "Tema",
|
||||
"theme.dark": "Escuro",
|
||||
"theme.light": "Claro",
|
||||
"theme.auto": "Auto (sistema)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "Токен HuggingFace",
|
||||
"settings.hfTokenHint": "Токен HuggingFace необходим для определения говорящих",
|
||||
"settings.diarization": "Диаризация",
|
||||
"settings.diarizationHint": "Автоматически определять говорящих после завершения записи"
|
||||
}
|
||||
"settings.diarizationHint": "Автоматически определять говорящих после завершения записи",
|
||||
"theme.label": "Тема",
|
||||
"theme.dark": "Тёмная",
|
||||
"theme.light": "Светлая",
|
||||
"theme.auto": "Авто (система)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "โทเค็น HuggingFace",
|
||||
"settings.hfTokenHint": "ต้องใช้โทเค็น HuggingFace สำหรับการแยกผู้พูด",
|
||||
"settings.diarization": "การแยกผู้พูด",
|
||||
"settings.diarizationHint": "ระบุผู้พูดโดยอัตโนมัติหลังจากการบันทึกสิ้นสุด"
|
||||
}
|
||||
"settings.diarizationHint": "ระบุผู้พูดโดยอัตโนมัติหลังจากการบันทึกสิ้นสุด",
|
||||
"theme.label": "ธีม",
|
||||
"theme.dark": "มืด",
|
||||
"theme.light": "สว่าง",
|
||||
"theme.auto": "อัตโนมัติ (ระบบ)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "Token HuggingFace",
|
||||
"settings.hfTokenHint": "Cần token HuggingFace để phân tách người nói",
|
||||
"settings.diarization": "Phân tách người nói",
|
||||
"settings.diarizationHint": "Tự động nhận dạng người nói sau khi ghi âm kết thúc"
|
||||
}
|
||||
"settings.diarizationHint": "Tự động nhận dạng người nói sau khi ghi âm kết thúc",
|
||||
"theme.label": "Chủ đề",
|
||||
"theme.dark": "Tối",
|
||||
"theme.light": "Sáng",
|
||||
"theme.auto": "Tự động (hệ thống)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "HuggingFace 令牌",
|
||||
"settings.hfTokenHint": "說話人分離需要HuggingFace令牌",
|
||||
"settings.diarization": "說話人分離",
|
||||
"settings.diarizationHint": "錄音結束後自動識別說話人"
|
||||
}
|
||||
"settings.diarizationHint": "錄音結束後自動識別說話人",
|
||||
"theme.label": "主題",
|
||||
"theme.dark": "深色",
|
||||
"theme.light": "淺色",
|
||||
"theme.auto": "自動 (系統)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,5 +291,13 @@
|
|||
"settings.hfToken": "HuggingFace令牌",
|
||||
"settings.hfTokenHint": "说话人分离需要HuggingFace令牌",
|
||||
"settings.diarization": "说话人分离",
|
||||
"settings.diarizationHint": "录音结束后自动识别说话人"
|
||||
}
|
||||
"settings.diarizationHint": "录音结束后自动识别说话人",
|
||||
"theme.label": "主题",
|
||||
"theme.dark": "深色",
|
||||
"theme.light": "浅色",
|
||||
"theme.auto": "自动 (系统)",
|
||||
"theme.nord": "Nord",
|
||||
"theme.solarized": "Solarized",
|
||||
"theme.catppuccin": "Catppuccin",
|
||||
"theme.dracula": "Dracula"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue