BaekRyang 5f6e780b40 feat: Add AreaList and ParameterPanel components
- 영역 목록과 파라미터 편집 패널을 추가하여 왜곡 영역 관리를 개선했습니다.
- 각 영역의 강도, 애니메이션 지속 시간, 이징 함수 등을 조절할 수 있습니다.
- 새 영역 추가 및 기존 영역 삭제 기능을 제공합니다.
2025-11-24 15:16:48 +09:00

63 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from 'react';
import { DistortionArea } from '../../types/area';
export interface AreaListProps {
areas: DistortionArea[];
selectedAreaId: string | null;
onSelectArea: (areaId: string) => void;
onRemoveArea: (areaId: string) => void;
onAddArea: () => void;
}
export const AreaList: React.FC<AreaListProps> = ({
areas,
selectedAreaId,
onSelectArea,
onRemoveArea,
onAddArea,
}) => {
return (
<div className="area-list">
<div className="area-list-header">
<h3> </h3>
<button
onClick={onAddArea}
disabled={areas.length >= 8}
className="btn-add"
title={areas.length >= 8 ? '최대 8개 영역까지 지원' : '새 영역 추가'}
>
+
</button>
</div>
<div className="area-list-items">
{areas.length === 0 ? (
<div className="area-list-empty"> . + .</div>
) : (
areas.map((area, index) => (
<div
key={area.id}
className={`area-item ${selectedAreaId === area.id ? 'selected' : ''}`}
onClick={() => onSelectArea(area.id)}
>
<div className="area-item-info">
<span className="area-item-name"> {index + 1}</span>
<span className="area-item-strength">: {(area.distortionStrength * 100).toFixed(0)}%</span>
</div>
<button
onClick={(e) => {
e.stopPropagation();
onRemoveArea(area.id);
}}
className="btn-remove"
title="영역 삭제"
>
×
</button>
</div>
))
)}
</div>
</div>
);
};