feat(agent-office): 모바일 사이드패널 전체화면 토글 + music 에이전트 이미지 교체

모바일 바텀시트(Commands/Tasks)가 55vh로 작아 내용 확인이 불편 → 헤더에
전체화면 토글 버튼 추가(100dvh 확장, 데스크톱은 숨김). music 에이전트
이미지를 agent_music_2로 교체.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-22 08:30:38 +09:00
parent ec5fee8429
commit ee5700dc95
3 changed files with 42 additions and 2 deletions

View File

@@ -195,6 +195,11 @@
font-size: 11px;
color: #94a3b8;
}
.ao-sidepanel-actions {
display: flex;
align-items: center;
gap: 4px;
}
.ao-sidepanel-close {
background: none;
border: none;
@@ -204,6 +209,18 @@
padding: 0 4px;
}
.ao-sidepanel-close:hover { color: #fff; }
/* 전체 화면 토글 — 모바일 전용 (데스크톱에서는 숨김) */
.ao-sidepanel-expand {
display: none;
background: none;
border: none;
color: #888;
font-size: 18px;
cursor: pointer;
padding: 0 4px;
line-height: 1;
}
.ao-sidepanel-expand:hover { color: #fff; }
/* Tabs */
.ao-sidepanel-tabs {
@@ -377,19 +394,31 @@
bottom: 0;
left: 0;
right: 0;
top: auto;
width: 100%;
height: 55vh;
max-height: 55vh;
border-left: none;
border-top: 1px solid #333;
border-radius: 16px 16px 0 0;
animation: slideUp 0.25s ease-out;
z-index: 100;
transition: height 0.25s ease, max-height 0.25s ease, border-radius 0.25s ease;
}
/* 전체 화면으로 확장 */
.ao-sidepanel.expanded {
top: 0;
height: 100dvh;
max-height: 100dvh;
border-radius: 0;
border-top: none;
}
@keyframes slideUp {
from { transform: translateY(100%); }
to { transform: translateY(0); }
}
.ao-sidepanel-expand { display: inline-block; }
.ao-sidepanel-header { padding: 8px 12px; }
.ao-sidepanel-header::before {
content: '';

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

@@ -10,6 +10,7 @@ const TABS = ['Commands', 'Tasks', 'Tokens', 'Logs'];
export default function SidePanel({ agentId, agentState, pendingTask, onClose, refreshTrigger }) {
const [activeTab, setActiveTab] = useState('Commands');
const [expanded, setExpanded] = useState(false);
const meta = AGENT_META[agentId];
if (!meta) return null;
@@ -18,7 +19,7 @@ export default function SidePanel({ agentId, agentState, pendingTask, onClose, r
: agentState?.state || 'unknown';
return (
<div className="ao-sidepanel">
<div className={`ao-sidepanel${expanded ? ' expanded' : ''}`}>
<div className="ao-sidepanel-header">
<div className="ao-sidepanel-agent">
<div className="ao-sidepanel-icon" style={{ borderColor: meta.color }}>
@@ -29,8 +30,18 @@ export default function SidePanel({ agentId, agentState, pendingTask, onClose, r
<div className="ao-sidepanel-state"> {stateText}</div>
</div>
</div>
<div className="ao-sidepanel-actions">
<button
className="ao-sidepanel-expand"
onClick={() => setExpanded(e => !e)}
aria-label={expanded ? '축소' : '전체 화면'}
title={expanded ? '축소' : '전체 화면'}
>
{expanded ? '⤡' : '⤢'}
</button>
<button className="ao-sidepanel-close" onClick={onClose}>×</button>
</div>
</div>
<div className="ao-sidepanel-tabs">
{TABS.map(tab => (