feat(screener): CanvasToolbar floating panel

This commit is contained in:
2026-05-13 21:47:52 +09:00
parent 4e134eb59a
commit b4ad0b1abf

View File

@@ -0,0 +1,61 @@
import React from 'react';
import { Panel, useReactFlow } from '@xyflow/react';
export default function CanvasToolbar({
onRunPreview,
onRunSave,
onPersistSettings,
onResetLayout,
dirty,
running,
}) {
const { fitView } = useReactFlow();
return (
<Panel position="top-left" className="canvas-toolbar">
<button
type="button"
className="canvas-toolbar-btn canvas-toolbar-btn--primary"
disabled={running}
onClick={onRunPreview}
title="현재 가중치로 미리보기 실행"
>
{running ? '실행 중…' : '▶ 실행'}
</button>
<button
type="button"
className="canvas-toolbar-btn"
disabled={running}
onClick={onRunSave}
title="실행 결과를 DB에 저장"
>
💾 저장 실행
</button>
<button
type="button"
className="canvas-toolbar-btn"
disabled={!dirty}
onClick={onPersistSettings}
title="현재 설정을 영구 저장"
>
📌 설정 저장{dirty ? ' *' : ''}
</button>
<button
type="button"
className="canvas-toolbar-btn"
onClick={onResetLayout}
title="노드 위치를 초기 좌표로 복귀"
>
🔄
</button>
<button
type="button"
className="canvas-toolbar-btn"
onClick={() => fitView({ padding: 0.2, duration: 300 })}
title="화면에 맞춤"
>
</button>
</Panel>
);
}