/** 빠른 실행 도구막대 · 출력 탭 명령 (파일 수명주기) */ import { toast } from 'react-toastify'; import { clearRecovery, restoreRecovery } from '../helpers/autosave'; import { exportEntitiesToJsonFile } from '../helpers/import-export-handlers/export-entities-to-json'; import { exportEntitiesToLocalStorage } from '../helpers/import-export-handlers/export-entities-to-local-storage'; import { requestDrawingExport, requestHostSave } from '../integration/aislo-drawing-bridge'; import { runSendSelectionTable } from '../integration/aislo-table-export'; import { exportEntitiesToPngFile } from '../helpers/import-export-handlers/export-entities-to-png'; import { exportEntitiesToSvgFile } from '../helpers/import-export-handlers/export-entities-to-svg'; import { redoCommand, undoCommand } from '../inputController/prompt-input'; import { isHostSave } from '../state'; import type { CadCommand } from './command.types'; export const FILE_COMMANDS: CadCommand[] = [ { id: 'QSAVE', label: '저장', aliases: ['SAVE'], glyph: '💾', hint: '현재 도면을 브라우저에 저장한다', run: () => { if (isHostSave()) { requestHostSave(); return '양식 저장 요청'; } void exportEntitiesToLocalStorage().then(() => { clearRecovery(); toast.success('도면을 저장했습니다.'); }); return '도면 저장'; }, }, { id: 'RECOVER', label: '백업 복구', glyph: '⟲', hint: '자동 백업된 마지막 편집을 되살린다', run: () => { void restoreRecovery(); return '백업 복구'; }, }, { id: 'EXPORT', label: 'JSON 내보내기', aliases: ['EXP'], glyph: '⭳', hint: '도면을 JSON 파일로 내보낸다', run: () => { void exportEntitiesToJsonFile(); return 'JSON 내보내기'; }, }, { id: 'EXPORTDXF', label: 'DXF 내보내기', glyph: '📐', hint: '지금 도면을 DXF 파일로 내려받는다', run: () => { requestDrawingExport('dxf'); return 'DXF 내보내기'; }, }, { id: 'EXPORTDWG', label: 'DWG 내보내기', glyph: '📁', hint: '지금 도면을 DWG 파일로 내려받는다 (서버에 변환기가 있을 때)', run: () => { requestDrawingExport('dwg'); return 'DWG 내보내기'; }, }, { id: 'EXPORTSVG', label: 'SVG 내보내기', glyph: '🖼', run: () => { exportEntitiesToSvgFile(); return 'SVG 내보내기'; }, }, { id: 'EXPORTPNG', label: 'PNG 내보내기', glyph: '🏞', run: () => { void exportEntitiesToPngFile(); return 'PNG 내보내기'; }, }, { id: 'TOAREA', label: '면적산출로 보내기', glyph: '▦', hint: '고른 범위(표 · 선 표 · 글)를 면적산출 새 시트로 한 번 옮긴다', needsSelection: true, run: runSendSelectionTable, }, { id: 'UNDO', label: '실행 취소', aliases: ['U'], glyph: '↶', run: () => { undoCommand(); // 끊고 뒤 되돌림 — Ctrl+Z 와 한 길 return '실행 취소'; }, }, { id: 'REDO', label: '다시 실행', glyph: '↷', run: () => { redoCommand(); return '다시 실행'; }, }, ];