sync: update from private repo (6fcb0d0)

This commit is contained in:
oss-sync
2026-06-04 03:03:12 +00:00
parent 21be01b699
commit 57685d995c
36 changed files with 2467 additions and 391 deletions
@@ -7,9 +7,10 @@ export interface MovementAccordionProps {
onAdd: () => void;
onRemove: (index: number) => void;
onMove: (index: number, direction: 'up' | 'down') => void;
disabled?: boolean;
}
export function MovementAccordion({ movements, onChange, onAdd, onRemove, onMove }: MovementAccordionProps) {
export function MovementAccordion({ movements, onChange, onAdd, onRemove, onMove, disabled = false }: MovementAccordionProps) {
const [expandedIndex, setExpandedIndex] = useState<number | null>(null);
const movementNames = movements.map((m) => m.name ?? '');
@@ -49,40 +50,42 @@ export function MovementAccordion({ movements, onChange, onAdd, onRemove, onMove
{/* Spacer */}
<div className="flex-1" />
{/* Controls */}
<div className="flex items-center gap-1" onClick={(e) => e.stopPropagation()}>
<button
type="button"
onClick={() => onMove(i, 'up')}
disabled={i === 0}
className="text-slate-400 hover:text-slate-600 disabled:opacity-30 text-sm px-1"
title="Move up"
>
&#9650;
</button>
<button
type="button"
onClick={() => onMove(i, 'down')}
disabled={i === movements.length - 1}
className="text-slate-400 hover:text-slate-600 disabled:opacity-30 text-sm px-1"
title="Move down"
>
&#9660;
</button>
<button
type="button"
onClick={() => {
if (confirm(`Movement "${movement.name}" を削除しますか?`)) {
onRemove(i);
if (expandedIndex === i) setExpandedIndex(null);
}
}}
className="text-slate-400 hover:text-red-500 text-sm px-1"
title="Delete"
>
&times;
</button>
</div>
{/* Controls — hidden in read-only mode */}
{!disabled && (
<div className="flex items-center gap-1" onClick={(e) => e.stopPropagation()}>
<button
type="button"
onClick={() => onMove(i, 'up')}
disabled={i === 0}
className="text-slate-400 hover:text-slate-600 disabled:opacity-30 text-sm px-1"
title="Move up"
>
&#9650;
</button>
<button
type="button"
onClick={() => onMove(i, 'down')}
disabled={i === movements.length - 1}
className="text-slate-400 hover:text-slate-600 disabled:opacity-30 text-sm px-1"
title="Move down"
>
&#9660;
</button>
<button
type="button"
onClick={() => {
if (confirm(`Movement "${movement.name}" を削除しますか?`)) {
onRemove(i);
if (expandedIndex === i) setExpandedIndex(null);
}
}}
className="text-slate-400 hover:text-red-500 text-sm px-1"
title="Delete"
>
&times;
</button>
</div>
)}
</div>
{/* Expanded form */}
@@ -92,6 +95,7 @@ export function MovementAccordion({ movements, onChange, onAdd, onRemove, onMove
movement={movement}
movementNames={movementNames}
onChange={(field, value) => onChange(i, field, value)}
disabled={disabled}
/>
</div>
)}
@@ -100,13 +104,15 @@ export function MovementAccordion({ movements, onChange, onAdd, onRemove, onMove
})}
</div>
<button
type="button"
onClick={onAdd}
className="mt-3 text-sm text-blue-600 hover:text-blue-700"
>
+ Add Movement
</button>
{!disabled && (
<button
type="button"
onClick={onAdd}
className="mt-3 text-sm text-blue-600 hover:text-blue-700"
>
+ Add Movement
</button>
)}
</div>
);
}