fix(pop-dashboard): 아이템/모드 레이아웃 수정 및 게이지 설정 버그 수정

설정 패널 버그 수정 (PopDashboardConfig):
- gaugeConfig 스프레드 순서 수정: min/max/target 값이 기존값에 덮어씌워지는 문제 해결
- 스프레드를 먼저 적용 후 변경 필드를 뒤에 배치하여 올바르게 반영

아이템 레이아웃 개선:
- KpiCard/StatCard: items-center justify-center 추가로 셀 내 중앙 정렬
- GaugeItem: SVG를 flex-1 영역에서 반응형 렌더링 (h-full w-auto)
- GaugeItem: preserveAspectRatio로 비율 유지, 라벨/목표값 shrink-0

모드 레이아웃 개선:
- ArrowsMode: 아이템이 전체 영역 사용, 화살표/인디케이터를 overlay로 변경
- ArrowsMode: 화살표 크기 축소 (h-11 -> h-8), backdrop-blur 추가
- AutoSlideMode: 슬라이드 컨테이너를 absolute inset-0으로 전체 영역 활용
- AutoSlideMode: 인디케이터를 하단 overlay로 변경

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
SeongHyun Kim
2026-02-10 17:18:00 +09:00
parent 7a71fc6ca7
commit bd7bf69a99
6 changed files with 53 additions and 54 deletions

View File

@@ -47,42 +47,37 @@ export function ArrowsModeComponent({
}
return (
<div className="flex h-full w-full flex-col">
{/* 콘텐츠 + 화살표 */}
<div className="relative flex min-h-0 flex-1 items-center">
{/* 왼쪽 화살표 */}
{itemCount > 1 && (
<div className="relative h-full w-full">
{/* 아이템 (전체 영역 사용) */}
<div className="h-full w-full">
{renderItem(currentIndex)}
</div>
{/* 좌우 화살표 (콘텐츠 위에 겹침) */}
{itemCount > 1 && (
<>
<button
type="button"
onClick={goToPrev}
className="absolute left-0 z-10 flex h-11 w-11 items-center justify-center rounded-full bg-background/80 shadow-sm transition-colors hover:bg-accent active:scale-95"
className="absolute left-1 top-1/2 z-10 flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/70 shadow-sm backdrop-blur-sm transition-all hover:bg-background/90 active:scale-95"
aria-label="이전"
>
<ChevronLeft className="h-5 w-5" />
<ChevronLeft className="h-4 w-4" />
</button>
)}
{/* 아이템 */}
<div className="h-full w-full px-12">
{renderItem(currentIndex)}
</div>
{/* 오른쪽 화살표 */}
{itemCount > 1 && (
<button
type="button"
onClick={goToNext}
className="absolute right-0 z-10 flex h-11 w-11 items-center justify-center rounded-full bg-background/80 shadow-sm transition-colors hover:bg-accent active:scale-95"
className="absolute right-1 top-1/2 z-10 flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/70 shadow-sm backdrop-blur-sm transition-all hover:bg-background/90 active:scale-95"
aria-label="다음"
>
<ChevronRight className="h-5 w-5" />
<ChevronRight className="h-4 w-4" />
</button>
)}
</div>
</>
)}
{/* 페이지 인디케이터 */}
{/* 페이지 인디케이터 (콘텐츠 하단에 겹침) */}
{showIndicator && itemCount > 1 && (
<div className="flex items-center justify-center gap-1.5 py-1">
<div className="absolute bottom-1 left-0 right-0 z-10 flex items-center justify-center gap-1.5">
{Array.from({ length: itemCount }).map((_, i) => (
<button
type="button"