Settings UI 정밀기기 디자인 적용
- Dialog: 메탈 섀시 배경(#242528), 인셋 그림자, amber 타이틀 - Tabs: 사이드바 배경, 모노폰트, amber indicator - VoiceModeCard: 인셋 패널 스타일 (inset shadow), 모노폰트 라벨 - 전체: d3roPalette + d3roFontMono 일관 적용
This commit is contained in:
parent
81d24bf212
commit
d7074e359d
1 changed files with 71 additions and 16 deletions
|
|
@ -27,9 +27,9 @@ import {
|
||||||
import CloseIcon from '@mui/icons-material/Close'
|
import CloseIcon from '@mui/icons-material/Close'
|
||||||
import KeyboardIcon from '@mui/icons-material/Keyboard'
|
import KeyboardIcon from '@mui/icons-material/Keyboard'
|
||||||
import EditIcon from '@mui/icons-material/Edit'
|
import EditIcon from '@mui/icons-material/Edit'
|
||||||
import { d3roPalette } from '../theme'
|
|
||||||
import { HotkeyRecordModal } from './HotkeyRecordModal'
|
|
||||||
import MicIcon from '@mui/icons-material/Mic'
|
import MicIcon from '@mui/icons-material/Mic'
|
||||||
|
import { d3roPalette, d3roFontMono } from '../theme'
|
||||||
|
import { HotkeyRecordModal } from './HotkeyRecordModal'
|
||||||
import type { ThemeMode, AppConfig, HotkeyBinding, AudioDevice } from '@shared/types'
|
import type { ThemeMode, AppConfig, HotkeyBinding, AudioDevice } from '@shared/types'
|
||||||
|
|
||||||
interface SettingsModalProps {
|
interface SettingsModalProps {
|
||||||
|
|
@ -115,15 +115,19 @@ function VoiceModeCard({
|
||||||
elevation={0}
|
elevation={0}
|
||||||
sx={{
|
sx={{
|
||||||
p: 2,
|
p: 2,
|
||||||
bgcolor: d3roPalette.bg.card,
|
bgcolor: d3roPalette.bg.inset,
|
||||||
borderRadius: '12px',
|
borderRadius: '10px',
|
||||||
border: `1px solid ${d3roPalette.border.subtle}`,
|
border: 'none',
|
||||||
|
boxShadow: `inset 0 2px 6px rgba(0,0,0,0.4), 0 1px 1px rgba(255,255,255,0.04)`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box sx={{ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between' }}>
|
<Box sx={{ display: 'flex', alignItems: 'flex-start', justifyContent: 'space-between' }}>
|
||||||
<Box sx={{ flex: 1 }}>
|
<Box sx={{ flex: 1 }}>
|
||||||
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 0.5 }}>
|
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 0.5 }}>
|
||||||
<Typography variant="subtitle2" sx={{ fontWeight: 600 }}>
|
<Typography
|
||||||
|
variant="subtitle2"
|
||||||
|
sx={{ fontWeight: 700, fontFamily: d3roFontMono, fontSize: '12px', letterSpacing: '0.5px' }}
|
||||||
|
>
|
||||||
{title}
|
{title}
|
||||||
</Typography>
|
</Typography>
|
||||||
<FormControlLabel
|
<FormControlLabel
|
||||||
|
|
@ -158,7 +162,7 @@ function VoiceModeCard({
|
||||||
sx={{ ml: 0, mr: 0 }}
|
sx={{ ml: 0, mr: 0 }}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
<Typography variant="body2" sx={{ color: d3roPalette.text.secondary, fontSize: '12px' }}>
|
<Typography variant="body2" sx={{ color: d3roPalette.text.inactive, fontSize: '11px' }}>
|
||||||
{description}
|
{description}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
@ -269,22 +273,72 @@ export function SettingsModal({ open, onClose }: SettingsModalProps): React.Reac
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Dialog open={open} onClose={onClose} fullWidth maxWidth="sm" disableEnforceFocus>
|
<Dialog
|
||||||
<DialogTitle sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', fontWeight: 700 }}>
|
open={open}
|
||||||
설정
|
onClose={onClose}
|
||||||
<IconButton onClick={onClose} size="small" sx={{ color: d3roPalette.text.label }}>
|
fullWidth
|
||||||
<CloseIcon />
|
maxWidth="sm"
|
||||||
|
disableEnforceFocus
|
||||||
|
PaperProps={{
|
||||||
|
sx: {
|
||||||
|
bgcolor: d3roPalette.bg.chassis,
|
||||||
|
backgroundImage: 'none',
|
||||||
|
border: `1px solid ${d3roPalette.border.subtle}`,
|
||||||
|
boxShadow: `0 40px 80px -20px rgba(0,0,0,0.8), inset 0 1px 1px rgba(255,255,255,0.08)`,
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<DialogTitle
|
||||||
|
sx={{
|
||||||
|
display: 'flex',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
fontFamily: d3roFontMono,
|
||||||
|
fontWeight: 700,
|
||||||
|
fontSize: '14px',
|
||||||
|
letterSpacing: '1px',
|
||||||
|
textTransform: 'uppercase',
|
||||||
|
color: d3roPalette.accent.amber,
|
||||||
|
py: 1.5,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Settings
|
||||||
|
<IconButton onClick={onClose} size="small" sx={{ color: d3roPalette.text.inactive }}>
|
||||||
|
<CloseIcon sx={{ fontSize: 18 }} />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
<Divider sx={{ borderColor: d3roPalette.border.subtle }} />
|
<Divider sx={{ borderColor: d3roPalette.border.subtle }} />
|
||||||
<DialogContent>
|
<DialogContent sx={{ bgcolor: d3roPalette.bg.app, p: 0 }}>
|
||||||
<Tabs value={activeTab} onChange={(_, v: number) => setActiveTab(v)}>
|
<Tabs
|
||||||
<Tab label="일반" icon={<KeyboardIcon sx={{ fontSize: 16 }} />} iconPosition="start" />
|
value={activeTab}
|
||||||
<Tab label="오디오" />
|
onChange={(_, v: number) => setActiveTab(v)}
|
||||||
|
variant="scrollable"
|
||||||
|
scrollButtons={false}
|
||||||
|
sx={{
|
||||||
|
bgcolor: d3roPalette.bg.sidebar,
|
||||||
|
borderBottom: `1px solid ${d3roPalette.border.subtle}`,
|
||||||
|
minHeight: 40,
|
||||||
|
'& .MuiTab-root': {
|
||||||
|
fontFamily: d3roFontMono,
|
||||||
|
fontSize: '11px',
|
||||||
|
fontWeight: 700,
|
||||||
|
letterSpacing: '0.5px',
|
||||||
|
textTransform: 'uppercase',
|
||||||
|
color: d3roPalette.text.inactive,
|
||||||
|
minHeight: 40,
|
||||||
|
py: 1,
|
||||||
|
'&.Mui-selected': { color: d3roPalette.accent.amber },
|
||||||
|
},
|
||||||
|
'& .MuiTabs-indicator': { bgcolor: d3roPalette.accent.amber, height: 2 },
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Tab label="일반" icon={<KeyboardIcon sx={{ fontSize: 14 }} />} iconPosition="start" />
|
||||||
|
<Tab label="오디오" icon={<MicIcon sx={{ fontSize: 14 }} />} iconPosition="start" />
|
||||||
<Tab label="STT" />
|
<Tab label="STT" />
|
||||||
<Tab label="LLM" />
|
<Tab label="LLM" />
|
||||||
<Tab label="정보" />
|
<Tab label="정보" />
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
<Box sx={{ p: 3 }}>
|
||||||
|
|
||||||
{/* ── 일반 탭 ─────────────────────────────── */}
|
{/* ── 일반 탭 ─────────────────────────────── */}
|
||||||
<TabPanel value={activeTab} index={0}>
|
<TabPanel value={activeTab} index={0}>
|
||||||
|
|
@ -554,6 +608,7 @@ export function SettingsModal({ open, onClose }: SettingsModalProps): React.Reac
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
</TabPanel>
|
</TabPanel>
|
||||||
|
</Box>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue