import { ref } from 'vue'; import type { SpreadsheetCommand } from '../types'; const MAX_STACK = 100; export function useUndoRedo() { const undoStack = ref([]); const redoStack = ref([]); function push(cmd: SpreadsheetCommand) { undoStack.value.push(cmd); if (undoStack.value.length > MAX_STACK) { undoStack.value.shift(); } redoStack.value = []; } async function undo() { const cmd = undoStack.value.pop(); if (!cmd) return; await cmd.undo(); redoStack.value.push(cmd); } async function redo() { const cmd = redoStack.value.pop(); if (!cmd) return; await cmd.redo(); undoStack.value.push(cmd); } function canUndo() { return undoStack.value.length > 0; } function canRedo() { return redoStack.value.length > 0; } function clear() { undoStack.value = []; redoStack.value = []; } return { push, undo, redo, canUndo, canRedo, clear }; }