Rechtsklick auf eine Zelle → "🕸 Abhängigkeiten anzeigen" öffnet ein an der rechten Seite angedocktes Panel (wie das Einstellungen-Panel links) mit den direkten Vorgängern (was die Zelle liest) und Nachfolgern (was sie liest), auch über Tabellen-/Blattgrenzen hinweg. Ein Klick auf einen Eintrag navigiert wirklich dorthin: wählt die echte Zelle im Dokument aus, wechselt bei Bedarf das Blatt-Tab, und das Panel zentriert sich neu — Blatt-Tabs, Canvas, Formel- und Statusleiste bleiben dabei die ganze Zeit sichtbar und bedienbar (kein Vollbild-Dialog). Jeder Eintrag zeigt immer den Blattnamen, nie nur implizit. Zirkelbezüge werden rot markiert. Neu in der Engine: Workbook.graphPrecedents/graphDependents, dünne öffentliche Wrapper um den bereits vorhandenen DependencyGraph. Im Store: cellGraphSelf/cellGraphNeighbors (Anreicherung für die Anzeige) sowie openDependencyGraph/closeDependencyGraph (dokumentweiter UI-State, ruft intern das bestehende selectCell auf). 424 Tests (Engine-/Store-Ebene vollständig abgedeckt), vue-tsc/eslint/build sauber. Das Panel selbst nur live per Playwright verifiziert (kein Komponenten-Test-Setup vorhanden, in README dokumentiert). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
70 lines
1.4 KiB
TypeScript
70 lines
1.4 KiB
TypeScript
/**
|
|
* Public surface of the formula engine.
|
|
*
|
|
* Nothing in `./` imports Vue, the DOM or any spreadsheet library. See
|
|
* ./README.md for the grammar (EBNF), the evaluation model and the error model.
|
|
*/
|
|
|
|
export { tokenize, LexError, type Token, type TokenType } from './lexer';
|
|
export {
|
|
parseFormula,
|
|
parseFunctionBlock,
|
|
collectRefs,
|
|
ParseError,
|
|
type Node,
|
|
type CellNode,
|
|
type RangeNode,
|
|
type NamedRefNode,
|
|
type BlockNode,
|
|
} from './parser';
|
|
export { evaluate } from './evaluator';
|
|
export { DependencyGraph } from './graph';
|
|
export { FUNCTIONS, getFunction, hasFunction, BUILTIN_SIGNATURES } from './functions';
|
|
export {
|
|
colToNumber,
|
|
numberToCol,
|
|
parseA1,
|
|
toA1,
|
|
looksLikeCell,
|
|
expandRange,
|
|
cycleReferenceLocks,
|
|
currentIdentifierAtCaret,
|
|
} from './refs';
|
|
export {
|
|
Workbook,
|
|
literalValue,
|
|
type TableModel,
|
|
} from './workbook';
|
|
export {
|
|
dateToSerial,
|
|
timeSerial,
|
|
serialToUtcDate,
|
|
todaySerial,
|
|
nowSerial,
|
|
parseDateTimeLiteral,
|
|
type DateLiteralKind,
|
|
} from './dates';
|
|
export {
|
|
buildFunctionIndex,
|
|
expandUserFunctions,
|
|
collectCalledFunctionNames,
|
|
collectCalledFunctionNamesInBlock,
|
|
declaredBlockNames,
|
|
findInvalidForSource,
|
|
blockAlwaysReturns,
|
|
type FunctionDef,
|
|
} from './userFunctions';
|
|
export {
|
|
FormulaError,
|
|
isError,
|
|
keyOf,
|
|
parseKey,
|
|
ERROR_CODES,
|
|
type ErrorCode,
|
|
type CellValue,
|
|
type CellRef,
|
|
type Scalar,
|
|
type EngineHost,
|
|
type NamedRangeDef,
|
|
} from './types';
|