feat(release): prepare 1.1.0 candidate
This commit is contained in:
parent
5a34f66981
commit
5205dcdfa9
736 changed files with 115667 additions and 12203 deletions
|
|
@ -19,14 +19,12 @@ import {
|
|||
Pencil,
|
||||
CircleCheck,
|
||||
Play,
|
||||
Link,
|
||||
Zap,
|
||||
ArrowRight,
|
||||
Sparkles,
|
||||
CheckCircle2,
|
||||
Mic,
|
||||
Cpu,
|
||||
CornerDownRight,
|
||||
ClipboardCopy,
|
||||
} from 'lucide-react'
|
||||
import {
|
||||
|
|
@ -38,8 +36,7 @@ import {
|
|||
TactileBadge,
|
||||
} from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, EmptyStateCard } from '../components/shared'
|
||||
import { isImeComposingEvent } from '../utils/keyboard'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { d3roPalette, d3roFontSans, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { TemplateSection } from '../components/TemplateSection'
|
||||
|
||||
|
|
@ -241,7 +238,7 @@ export function CommandsPage(): React.ReactElement {
|
|||
sx={{
|
||||
fontFamily: d3roFontSans,
|
||||
fontSize: '18px',
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
color: activeInstruction ? d3roPalette.text.primary : d3roPalette.text.disabled,
|
||||
}}
|
||||
>
|
||||
|
|
@ -431,7 +428,7 @@ export function CommandsPage(): React.ReactElement {
|
|||
<Box
|
||||
sx={{
|
||||
fontSize: d3roTypo.heading.size,
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
fontFamily: d3roFontSans,
|
||||
color: isActive ? d3roPalette.accent.light : d3roPalette.text.primary,
|
||||
mb: 0.5,
|
||||
|
|
@ -571,7 +568,7 @@ export function CommandsPage(): React.ReactElement {
|
|||
},
|
||||
}}
|
||||
>
|
||||
<DialogTitle sx={{ fontWeight: 700, fontFamily: d3roFontSans, color: d3roPalette.text.primary, pt: 2, px: 2.5 }}>
|
||||
<DialogTitle sx={{ fontWeight: 500, fontFamily: d3roFontSans, color: d3roPalette.text.primary, pt: 2, px: 2.5 }}>
|
||||
{editId ? t('commands.editTitle') : t('commands.addTitle')}
|
||||
</DialogTitle>
|
||||
<DialogContent sx={{ px: 2.5 }}>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
// High-End Agency Architecture: DoubleBezel Hero / 4-Tile Bento / Multi-Engine Hub / Telemetry
|
||||
|
||||
import React, { useState, useEffect, useCallback, useMemo, useRef } from 'react'
|
||||
import { Box, Button, Typography, Tooltip } from '@mui/material'
|
||||
import { Box, Typography } from '@mui/material'
|
||||
import {
|
||||
Mic,
|
||||
BookOpen,
|
||||
|
|
@ -15,7 +15,6 @@ import {
|
|||
Star,
|
||||
Check,
|
||||
Cpu,
|
||||
Sparkles,
|
||||
Zap,
|
||||
Activity,
|
||||
Radio,
|
||||
|
|
@ -34,7 +33,7 @@ import {
|
|||
AudioVisualizerBar,
|
||||
} from '@d3ro/ui/components/ds'
|
||||
import { EmptyStateCard, HistoryEntryCard } from '../components/shared'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roRadius, d3roShadow, d3roTypo, typoSx } from '@d3ro/ui/theme'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roRadius, d3roShadow, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { formatRecordingTime, formatRecordingTimeUnit, formatNumber, getDateKey } from '../utils/formatters'
|
||||
import { formatHotkeyLabel } from '../utils/format-hotkey'
|
||||
|
|
@ -286,7 +285,7 @@ export function DashboardPage(): React.ReactElement {
|
|||
boxShadow: d3roShadow.inset,
|
||||
fontFamily: d3roFontMono,
|
||||
fontSize: '12px',
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
color: d3roPalette.accent.light,
|
||||
letterSpacing: '0.04em',
|
||||
}}
|
||||
|
|
@ -332,7 +331,7 @@ export function DashboardPage(): React.ReactElement {
|
|||
sx={{
|
||||
fontFamily: d3roFontSans,
|
||||
fontSize: '34px',
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
lineHeight: 1,
|
||||
color: d3roPalette.text.primary,
|
||||
fontVariantNumeric: 'tabular-nums',
|
||||
|
|
@ -402,7 +401,7 @@ export function DashboardPage(): React.ReactElement {
|
|||
sx={{
|
||||
fontFamily: d3roFontSans,
|
||||
fontSize: '26px',
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
lineHeight: 1,
|
||||
color: d3roPalette.text.primary,
|
||||
fontVariantNumeric: 'tabular-nums',
|
||||
|
|
@ -492,7 +491,7 @@ export function DashboardPage(): React.ReactElement {
|
|||
sx={{
|
||||
fontFamily: d3roFontSans,
|
||||
fontSize: '28px',
|
||||
fontWeight: 800,
|
||||
fontWeight: 600,
|
||||
color: d3roPalette.text.primary,
|
||||
lineHeight: 1,
|
||||
letterSpacing: '-0.02em',
|
||||
|
|
|
|||
|
|
@ -3,15 +3,13 @@
|
|||
|
||||
import React, { useState, useEffect, useCallback, useRef } from 'react'
|
||||
import { Box, TextField, Dialog, DialogTitle, DialogContent, DialogActions, IconButton, Tooltip } from '@mui/material'
|
||||
import { Plus, Trash2, Pencil, BookA, Sparkles } from 'lucide-react'
|
||||
import { Plus, Trash2, Pencil, BookA } from 'lucide-react'
|
||||
import { MetalCard, PhosphorText, PhysicalButton, TactileBadge } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, SearchInput, EmptyStateCard } from '../components/shared'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { d3roPalette, d3roFontSans, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { DictionaryEntry, DictionaryPage as DictPageData } from '@d3ro/core/types'
|
||||
|
||||
const PAGE_SIZE = 50
|
||||
|
||||
export function DictionaryPage(): React.ReactElement {
|
||||
const { t } = useI18n()
|
||||
const [data, setData] = useState<DictPageData | null>(null)
|
||||
|
|
@ -23,7 +21,6 @@ export function DictionaryPage(): React.ReactElement {
|
|||
const [formPronunciation, setFormPronunciation] = useState('')
|
||||
const [saving, setSaving] = useState(false)
|
||||
const isSavingRef = useRef(false)
|
||||
const isDeletingRef = useRef(false)
|
||||
|
||||
const loadData = useCallback(async () => {
|
||||
setLoading(true)
|
||||
|
|
@ -77,17 +74,6 @@ export function DictionaryPage(): React.ReactElement {
|
|||
}
|
||||
}
|
||||
|
||||
const handleDelete = async (id: string) => {
|
||||
if (isDeletingRef.current) return
|
||||
isDeletingRef.current = true
|
||||
try {
|
||||
await window.electronAPI.dictionary.delete({ id })
|
||||
loadData()
|
||||
} finally {
|
||||
isDeletingRef.current = false
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Box sx={{ maxWidth: 1060, mx: 'auto', p: { xs: 2.5, md: 4 }, pb: 10 }}>
|
||||
<PageHeader
|
||||
|
|
@ -131,7 +117,7 @@ export function DictionaryPage(): React.ReactElement {
|
|||
<Box
|
||||
sx={{
|
||||
fontSize: d3roTypo.heading.size,
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
fontFamily: d3roFontSans,
|
||||
color: d3roPalette.text.primary,
|
||||
}}
|
||||
|
|
@ -212,7 +198,7 @@ export function DictionaryPage(): React.ReactElement {
|
|||
},
|
||||
}}
|
||||
>
|
||||
<DialogTitle sx={{ fontWeight: 700, fontFamily: d3roFontSans, color: d3roPalette.text.primary, pt: 2, px: 2.5 }}>
|
||||
<DialogTitle sx={{ fontWeight: 500, fontFamily: d3roFontSans, color: d3roPalette.text.primary, pt: 2, px: 2.5 }}>
|
||||
{editId ? t('dictionary.editTitle') : t('dictionary.addTitle')}
|
||||
</DialogTitle>
|
||||
<DialogContent sx={{ px: 2.5 }}>
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
// High-End Agency Dictation History & Memory Timeline
|
||||
|
||||
import React, { useState, useEffect, useCallback, useMemo, useRef } from 'react'
|
||||
import { Box, Chip, IconButton, Tooltip } from '@mui/material'
|
||||
import { Download, Trash2, Tag as TagIcon, Clock, Filter } from 'lucide-react'
|
||||
import { PhosphorText, TactileBadge, DoubleBezelCard, PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo, d3roFontMono, d3roFontSans, d3roRadius } from '@d3ro/ui/theme'
|
||||
import { Box, IconButton, Tooltip } from '@mui/material'
|
||||
import { Download, Trash2, Clock, Filter } from 'lucide-react'
|
||||
import { PhosphorText, TactileBadge, PhysicalButton } from '@d3ro/ui/components/ds'
|
||||
import { d3roPalette, d3roTypo } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import { getDateKey } from '../utils/formatters'
|
||||
import { EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard } from '../components/shared'
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
import React, { useState, useEffect, useCallback, useRef } from 'react'
|
||||
import { Box, TextField, IconButton, Tooltip, LinearProgress } from '@mui/material'
|
||||
import { Plus, Trash2, RefreshCw, Search, Send, FileText, Database, Sparkles, CheckCircle2 } from 'lucide-react'
|
||||
import { MetalCard, PhosphorText, Led, PhysicalButton, ScreenPanel, DoubleBezelCard, TactileBadge } from '@d3ro/ui/components/ds'
|
||||
import { Plus, Trash2, RefreshCw, Search, Send, FileText, Database, Sparkles } from 'lucide-react'
|
||||
import { MetalCard, PhosphorText, Led, PhysicalButton, DoubleBezelCard, TactileBadge } from '@d3ro/ui/components/ds'
|
||||
import { PageHeader, EmptyStateCard } from '../components/shared'
|
||||
import { isImeComposingEvent } from '../utils/keyboard'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { d3roPalette, d3roFontSans, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type { RAGDocument, RAGQueryResult, RAGIndexProgress } from '@d3ro/core/types'
|
||||
|
||||
|
|
|
|||
|
|
@ -9,8 +9,6 @@ import {
|
|||
Snackbar,
|
||||
Alert,
|
||||
Typography,
|
||||
IconButton,
|
||||
Tooltip,
|
||||
Dialog,
|
||||
DialogTitle,
|
||||
DialogContent,
|
||||
|
|
@ -28,8 +26,6 @@ import {
|
|||
FileText,
|
||||
Sparkles,
|
||||
Mic,
|
||||
Activity,
|
||||
Trash2,
|
||||
Tag,
|
||||
CheckCircle2,
|
||||
ListTodo,
|
||||
|
|
@ -39,12 +35,10 @@ import {
|
|||
Settings,
|
||||
RefreshCw,
|
||||
Cpu,
|
||||
SlidersHorizontal,
|
||||
} from 'lucide-react'
|
||||
import {
|
||||
MetalCard,
|
||||
PhosphorText,
|
||||
Led,
|
||||
PhysicalButton,
|
||||
ScreenPanel,
|
||||
DoubleBezelCard,
|
||||
|
|
@ -55,7 +49,7 @@ import { MeetingDetailTabs } from '../components/meeting/MeetingDetailTabs'
|
|||
import { EditableSegment } from '../components/meeting/EditableSegment'
|
||||
import { PageHeader, EmptyStateCard } from '../components/shared'
|
||||
import { isImeComposingEvent } from '../utils/keyboard'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
MeetingSessionSummary,
|
||||
|
|
@ -91,14 +85,14 @@ export function MeetingModePage(): React.ReactElement {
|
|||
const [sessions, setSessions] = useState<MeetingSessionSummary[]>([])
|
||||
const [totalSessions, setTotalSessions] = useState(0)
|
||||
const [loading, setLoading] = useState(true)
|
||||
const [page, setPage] = useState(1)
|
||||
const [page] = useState(1)
|
||||
const pageSize = 20
|
||||
|
||||
// 사전 점검 및 기동 상태
|
||||
const [isStarting, setIsStarting] = useState(false)
|
||||
const [errorInfo, setErrorInfo] = useState<MeetingErrorInfo | null>(null)
|
||||
const [sttProvider, setSttProvider] = useState<string>('local')
|
||||
const [sttEngineState, setSttEngineState] = useState<string>('ready')
|
||||
const [, setSttEngineState] = useState<string>('ready')
|
||||
const [micDeviceName, setMicDeviceName] = useState<string>('')
|
||||
|
||||
// 녹음 뷰 상태
|
||||
|
|
@ -424,7 +418,7 @@ export function MeetingModePage(): React.ReactElement {
|
|||
>
|
||||
<DialogTitle sx={{ display: 'flex', alignItems: 'center', gap: 1.5, pb: 1 }}>
|
||||
<AlertCircle size={22} style={{ color: d3roPalette.tag.red }} />
|
||||
<Typography sx={{ fontFamily: d3roFontSans, fontWeight: 700, fontSize: '17px', color: d3roPalette.text.primary }}>
|
||||
<Typography sx={{ fontFamily: d3roFontSans, fontWeight: 500, fontSize: '17px', color: d3roPalette.text.primary }}>
|
||||
{errorInfo?.title}
|
||||
</Typography>
|
||||
</DialogTitle>
|
||||
|
|
@ -455,7 +449,7 @@ export function MeetingModePage(): React.ReactElement {
|
|||
|
||||
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, mt: 1.5 }}>
|
||||
<Box sx={{ display: 'flex', gap: 1.2, alignItems: 'flex-start' }}>
|
||||
<Typography sx={{ fontSize: '12px', fontWeight: 700, color: d3roPalette.tag.orange, minWidth: 65 }}>
|
||||
<Typography sx={{ fontSize: '12px', fontWeight: 500, color: d3roPalette.tag.orange, minWidth: 65 }}>
|
||||
발생 원인
|
||||
</Typography>
|
||||
<Typography sx={{ fontSize: '12.5px', color: d3roPalette.text.primary, lineHeight: 1.4 }}>
|
||||
|
|
@ -463,7 +457,7 @@ export function MeetingModePage(): React.ReactElement {
|
|||
</Typography>
|
||||
</Box>
|
||||
<Box sx={{ display: 'flex', gap: 1.2, alignItems: 'flex-start' }}>
|
||||
<Typography sx={{ fontSize: '12px', fontWeight: 700, color: d3roPalette.tag.green, minWidth: 65 }}>
|
||||
<Typography sx={{ fontSize: '12px', fontWeight: 500, color: d3roPalette.tag.green, minWidth: 65 }}>
|
||||
해결 조치
|
||||
</Typography>
|
||||
<Typography sx={{ fontSize: '12.5px', color: d3roPalette.text.primary, lineHeight: 1.4 }}>
|
||||
|
|
@ -636,7 +630,7 @@ export function MeetingModePage(): React.ReactElement {
|
|||
sx={{
|
||||
fontFamily: d3roFontSans,
|
||||
fontSize: '15px',
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
color: d3roPalette.text.primary,
|
||||
lineHeight: 1.35,
|
||||
display: '-webkit-box',
|
||||
|
|
@ -716,7 +710,7 @@ export function MeetingModePage(): React.ReactElement {
|
|||
sx={{
|
||||
fontFamily: d3roFontMono,
|
||||
fontSize: '20px',
|
||||
fontWeight: 700,
|
||||
fontWeight: 500,
|
||||
color: d3roPalette.text.primary,
|
||||
fontVariantNumeric: 'tabular-nums',
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -3,22 +3,18 @@
|
|||
|
||||
import React, { useState, useEffect, useCallback, useRef } from 'react'
|
||||
import { Alert, Box, IconButton, Snackbar, TextField, Tooltip, Typography } from '@mui/material'
|
||||
import { Mic, Square, Send, Trash2, XCircle, Bot, User, Sparkles, Volume2 } from 'lucide-react'
|
||||
import { Mic, Square, Send, Trash2, XCircle, Bot } from 'lucide-react'
|
||||
import {
|
||||
MetalCard,
|
||||
PhosphorText,
|
||||
Led,
|
||||
PhysicalButton,
|
||||
ScreenPanel,
|
||||
DoubleBezelCard,
|
||||
TactileBadge,
|
||||
AudioVisualizerBar,
|
||||
} from '@d3ro/ui/components/ds'
|
||||
import { PageHeader } from '../components/shared'
|
||||
import { VoiceRecordingPanel } from '../components/voice-conversation/VoiceRecordingPanel'
|
||||
import { useRealtimeConversation } from '../hooks/useRealtimeConversation'
|
||||
import { isImeComposingEvent } from '../utils/keyboard'
|
||||
import { d3roPalette, d3roFontSans, d3roFontMono, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { d3roPalette, d3roFontSans, d3roTypo, d3roRadius, d3roShadow } from '@d3ro/ui/theme'
|
||||
import { useI18n } from '@d3ro/i18n'
|
||||
import type {
|
||||
ConversationState,
|
||||
|
|
@ -334,7 +330,7 @@ export function VoiceConversationPage(): React.ReactElement {
|
|||
>
|
||||
<Bot size={32} />
|
||||
</Box>
|
||||
<Typography sx={{ fontFamily: d3roFontSans, fontSize: '18px', fontWeight: 700, color: d3roPalette.text.primary, mb: 1 }}>
|
||||
<Typography sx={{ fontFamily: d3roFontSans, fontSize: '18px', fontWeight: 500, color: d3roPalette.text.primary, mb: 1 }}>
|
||||
{t('conversation.empty')}
|
||||
</Typography>
|
||||
<Typography sx={{ fontFamily: d3roFontSans, fontSize: '13px', color: d3roPalette.text.secondary, maxWidth: 400, mx: 'auto' }}>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue