develop #23
@ -248,7 +248,7 @@ export function DashboardPage() {
|
|||||||
|
|
||||||
// ── Render ──
|
// ── Render ──
|
||||||
return (
|
return (
|
||||||
<div className="grid h-screen grid-cols-[310px_1fr] grid-rows-[44px_1fr] max-md:grid-cols-[1fr]">
|
<div className="grid h-screen grid-cols-[310px_1fr] grid-rows-[44px_1fr] max-md:grid-cols-[1fr] max-md:grid-rows-[auto_1fr]">
|
||||||
<Topbar
|
<Topbar
|
||||||
total={legacyVesselsAll.length}
|
total={legacyVesselsAll.length}
|
||||||
fishing={fishingCount}
|
fishing={fishingCount}
|
||||||
|
|||||||
@ -81,27 +81,13 @@ export function Topbar({ total, fishing, transit, pairLinks, alarms, clock, admi
|
|||||||
{adminMode ? <span className="text-[10px] text-wing-warning">(ADMIN)</span> : null}
|
{adminMode ? <span className="text-[10px] text-wing-warning">(ADMIN)</span> : null}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* 통계 영역 */}
|
{/* 데스크톱: 인라인 통계 */}
|
||||||
<div className="ml-auto flex items-center gap-3.5">
|
<div className="ml-auto hidden items-center gap-3.5 md:flex">
|
||||||
{/* 데스크톱: 인라인 통계 */}
|
<StatChips total={total} fishing={fishing} transit={transit} pairLinks={pairLinks} alarms={alarms} />
|
||||||
<div className="hidden items-center gap-3.5 md:flex">
|
|
||||||
<StatChips total={total} fishing={fishing} transit={transit} pairLinks={pairLinks} alarms={alarms} />
|
|
||||||
</div>
|
|
||||||
{/* 모바일: 통계 펼치기 버튼 */}
|
|
||||||
<button
|
|
||||||
className="flex cursor-pointer items-center justify-center rounded border border-wing-border bg-transparent p-1 text-wing-muted transition-colors hover:border-wing-accent hover:text-wing-text md:hidden"
|
|
||||||
onClick={() => setIsStatsOpen((v) => !v)}
|
|
||||||
aria-label={isStatsOpen ? "통계 닫기" : "통계 열기"}
|
|
||||||
>
|
|
||||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
|
||||||
<path d="M3 3v18h18" />
|
|
||||||
<path d="M7 16l4-8 4 4 4-8" />
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* 항상 표시: 시계 + 테마 + 사용자 */}
|
{/* 항상 표시: 시계 + 테마 + 사용자 */}
|
||||||
<div className="flex shrink-0 items-center gap-2.5 md:ml-2.5">
|
<div className="ml-auto flex shrink-0 items-center gap-2.5 md:ml-2.5">
|
||||||
<span className="whitespace-nowrap text-[10px] font-semibold text-wing-accent">{clock}</span>
|
<span className="whitespace-nowrap text-[10px] font-semibold text-wing-accent">{clock}</span>
|
||||||
{onToggleTheme && (
|
{onToggleTheme && (
|
||||||
<button
|
<button
|
||||||
@ -128,12 +114,21 @@ export function Topbar({ total, fishing, transit, pairLinks, alarms, clock, admi
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* 모바일 통계 바 (펼침 시) */}
|
{/* 모바일 통계 바 (펼침 시) — 레이아웃 흐름에 포함, 지도 영역 밀어내기 */}
|
||||||
{isStatsOpen && (
|
{isStatsOpen && (
|
||||||
<div className="absolute left-0 right-0 top-full flex items-center justify-center gap-4 border-b border-wing-border bg-wing-surface px-3.5 py-2 shadow-md md:hidden">
|
<div className="flex items-center justify-center gap-4 border-b border-wing-border bg-wing-surface px-3.5 py-2 md:hidden">
|
||||||
<StatChips total={total} fishing={fishing} transit={transit} pairLinks={pairLinks} alarms={alarms} />
|
<StatChips total={total} fishing={fishing} transit={transit} pairLinks={pairLinks} alarms={alarms} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{/* 모바일 통계 토글 탭 — topbar 하단 우측에 걸침 */}
|
||||||
|
<button
|
||||||
|
className="absolute bottom-0 right-3.5 z-10 translate-y-full cursor-pointer rounded-b-md border border-t-0 border-wing-border bg-wing-surface px-2 py-0.5 text-[8px] text-wing-muted transition-colors hover:text-wing-text md:hidden"
|
||||||
|
onClick={() => setIsStatsOpen((v) => !v)}
|
||||||
|
aria-label={isStatsOpen ? "통계 닫기" : "통계 열기"}
|
||||||
|
>
|
||||||
|
{isStatsOpen ? "▴" : "▾ 통계"}
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user