Files
excel-view/src/components/canvas-spreadsheet/composables/useFormulaReferenceMode.ts
2026-06-26 14:27:23 +08:00

50 lines
1.1 KiB
TypeScript

import { ref } from 'vue';
export function useFormulaReferenceMode() {
const active = ref(false);
const pickedCell = ref<{ row: number; col: number } | null>(null);
const caret = ref(0);
function setCaret(pos: number) {
caret.value = Math.max(0, pos);
}
function enterIfNeeded(draft: string, focused: boolean, editable: boolean) {
if (!focused || !editable) {
active.value = false;
pickedCell.value = null;
return;
}
const on = draft.trimStart().startsWith('=');
active.value = on;
if (!on) pickedCell.value = null;
}
function exit() {
active.value = false;
pickedCell.value = null;
}
function insertAtCaret(draft: string, text: string): string {
const pos = caret.value;
const next = draft.slice(0, pos) + text + draft.slice(pos);
caret.value = pos + text.length;
return next;
}
function pickCell(row: number, col: number) {
pickedCell.value = { row, col };
}
return {
active,
pickedCell,
caret,
setCaret,
enterIfNeeded,
exit,
insertAtCaret,
pickCell,
};
}