@rowsncolumns/rnc-engine 0.10.132
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +100 -0
- package/README.md +83 -0
- package/dist/esm/command-handlers.d.ts +169 -0
- package/dist/esm/command-handlers.d.ts.map +1 -0
- package/dist/esm/command-handlers.js +404 -0
- package/dist/esm/fold.d.ts +140 -0
- package/dist/esm/fold.d.ts.map +1 -0
- package/dist/esm/fold.js +539 -0
- package/dist/esm/index.d.ts +620 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +425 -0
- package/dist/esm/io.d.ts +119 -0
- package/dist/esm/io.d.ts.map +1 -0
- package/dist/esm/io.js +318 -0
- package/dist/esm/keys.d.ts +20 -0
- package/dist/esm/keys.d.ts.map +1 -0
- package/dist/esm/keys.js +41 -0
- package/dist/esm/move-rescope.d.ts +18 -0
- package/dist/esm/move-rescope.d.ts.map +1 -0
- package/dist/esm/move-rescope.js +38 -0
- package/dist/esm/use-engine-core.d.ts +293 -0
- package/dist/esm/use-engine-core.d.ts.map +1 -0
- package/dist/esm/use-engine-core.js +2279 -0
- package/dist/esm/use-engine-pivot-editor.d.ts +78 -0
- package/dist/esm/use-engine-pivot-editor.d.ts.map +1 -0
- package/dist/esm/use-engine-pivot-editor.js +252 -0
- package/dist/esm/use-spreadsheet-engine.d.ts +7 -0
- package/dist/esm/use-spreadsheet-engine.d.ts.map +1 -0
- package/dist/esm/use-spreadsheet-engine.js +23 -0
- package/dist/esm/use-spreadsheet-ui.d.ts +39 -0
- package/dist/esm/use-spreadsheet-ui.d.ts.map +1 -0
- package/dist/esm/use-spreadsheet-ui.js +78 -0
- package/dist/esm/wasm/rnc_wasm.d.ts +394 -0
- package/dist/esm/wasm/rnc_wasm.js +1455 -0
- package/dist/esm/wasm/rnc_wasm_bg.wasm +0 -0
- package/dist/esm/wasm/rnc_wasm_bg.wasm.d.ts +81 -0
- package/package.json +51 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `useEngineCore` — the **Option B** data/calc core: the UI is a pure renderer over the Rust→WASM
|
|
3
|
+
* engine. This is the engine-only surface (data / calc / commands / accessors); the chrome (dialogs +
|
|
4
|
+
* host intents) lives in {@link useSpreadsheetUI}, and {@link useSpreadsheetEngine} composes the two
|
|
5
|
+
* into the full `useSpreadsheetState` drop-in.
|
|
6
|
+
*
|
|
7
|
+
* Unlike `useSpreadsheetState` (which owns the document, runs the JS calculator + dependency graph, and
|
|
8
|
+
* mutates via immer), this hook owns *nothing* derivable. It:
|
|
9
|
+
* 1. creates an {@link RncEngine},
|
|
10
|
+
* 2. forwards every UI intent through {@link onCommand} (a `commands.ts` command),
|
|
11
|
+
* 3. folds the engine's per-facet {@link CommitResult} channels into minimal render state via the
|
|
12
|
+
* pure reducers in `./fold`,
|
|
13
|
+
* 4. delegates undo/redo to the engine.
|
|
14
|
+
*
|
|
15
|
+
* No calc, no DAG, no ref-shifting in JS — the engine is the single source of truth. The hook returns
|
|
16
|
+
* the folded render state plus the read accessors a grid needs (`getCellData`/`getEffectiveFormat`/…).
|
|
17
|
+
*/
|
|
18
|
+
import type { CellData, CellFormat, CellInterface, Citation, GridRange, SelectionArea, SheetCoordinate, SheetRange } from "@rowsncolumns/common-types";
|
|
19
|
+
import { type ConditionalFormatRule, type EmbeddedChart, type EmbeddedObject, type HIDDEN_DIMENSION_STRATEGY, type AvailableIcon, type NamedRange, type ProtectedRange, type Sheet, type Slicer, type SpreadsheetTheme, type TableView } from "@rowsncolumns/spreadsheet";
|
|
20
|
+
import { type useSpreadsheetState } from "@rowsncolumns/spreadsheet-state";
|
|
21
|
+
import { type EngineSpreadsheetHandlers } from "./command-handlers";
|
|
22
|
+
import { type EngineRenderState } from "./fold";
|
|
23
|
+
import { type Command, type CustomCancel, type LoadDocument, RncEngine, type SpreadsheetEngineLike } from "./index";
|
|
24
|
+
export type { EngineSpreadsheetHandlers };
|
|
25
|
+
/** The reference hook's full return type — used to type the accessors/handlers this hook also exposes
|
|
26
|
+
* EXACTLY as `useSpreadsheetState` does (drop-in parity), with zero manual signature drift. Type-only,
|
|
27
|
+
* so it's erased at runtime (no JS calculator/DAG pulled into the Option-B bundle). */
|
|
28
|
+
type SS = ReturnType<typeof useSpreadsheetState>;
|
|
29
|
+
/** The CALLING CELL of a custom-function evaluation — passed to the impl so host functions that
|
|
30
|
+
* anchor work to their own cell (e.g. a run whose result is written back to the formula's cell)
|
|
31
|
+
* know where they were invoked. Coordinates are 1-based (A1 = `{rowIndex: 1, columnIndex: 1}`),
|
|
32
|
+
* the engine's wire convention. */
|
|
33
|
+
export interface CustomFunctionContext {
|
|
34
|
+
sheetId: number;
|
|
35
|
+
rowIndex: number;
|
|
36
|
+
columnIndex: number;
|
|
37
|
+
/** Aborted when the engine CANCELS this evaluation — the cell no longer holds the formula
|
|
38
|
+
* (cleared / overwritten / undone / removed with its row or column) or a newer evaluation of the
|
|
39
|
+
* same cell superseded this one (a precedent changed mid-flight). Wire it into fetches and poll
|
|
40
|
+
* loops so cancelled work actually stops; the hook independently drops the stale answer. */
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
}
|
|
43
|
+
/** A host (JS) custom-function implementation: given the engine's RESOLVED argument values (`A1`'s
|
|
44
|
+
* value, literals, …) plus the calling cell ({@link CustomFunctionContext}), return the cell's
|
|
45
|
+
* effective value — a scalar (`nv`/`sv`/`bv`) plus an optional `structuredValue` — synchronously or
|
|
46
|
+
* as a Promise (for fetch-backed functions). Registered via
|
|
47
|
+
* {@link EngineSpreadsheet.registerCustomFunction}; the engine parses `=NAME(A1,…)`, tracks `A1` as a
|
|
48
|
+
* dependency, and re-invokes this whenever a dependency changes. */
|
|
49
|
+
export type CustomFunctionImpl = (args: unknown[], context?: CustomFunctionContext) => NonNullable<CellData["ev"]> | Promise<NonNullable<CellData["ev"]>>;
|
|
50
|
+
/** The visible cell range CanvasGrid reports on scroll — a structural subset of `@rowsncolumns/grid`'s
|
|
51
|
+
* `ViewPortProps` (the four buffered bounds the windowed hook reads). Declared locally so the package
|
|
52
|
+
* adds no `@rowsncolumns/grid` dependency; `state.onViewPortChange` stays assignable to CanvasGrid's
|
|
53
|
+
* `onViewPortChange?(viewport: ViewPortProps): void` prop (a method-position callback). */
|
|
54
|
+
export interface ViewportRange {
|
|
55
|
+
rowStartIndex: number;
|
|
56
|
+
rowStopIndex: number;
|
|
57
|
+
columnStartIndex: number;
|
|
58
|
+
columnStopIndex: number;
|
|
59
|
+
}
|
|
60
|
+
export interface UseEngineSpreadsheetOptions {
|
|
61
|
+
/** Sheets to register up-front. Their `title` names the engine sheet; they also seed the render
|
|
62
|
+
* state so dimension/merge deltas have a sheet to land on. */
|
|
63
|
+
sheets: Sheet[];
|
|
64
|
+
/** Optional document to `load()` once the engine is ready (cells + styles, the API/snapshot shape). */
|
|
65
|
+
initialDocument?: LoadDocument;
|
|
66
|
+
/** The host's starting locale (BCP-47, e.g. `"de-DE"`). Pushed to the engine on init so the very
|
|
67
|
+
* first render formats numbers/dates for that locale; subsequent changes flow via `onChangeLocale`.
|
|
68
|
+
* Defaults to `en-US` when omitted. */
|
|
69
|
+
locale?: string;
|
|
70
|
+
/** Host (JS) custom functions to register BEFORE `initialDocument` loads. Registration must precede
|
|
71
|
+
* the load: a loaded `=NAME(…)` cell only resolves to its custom value if the engine already knows
|
|
72
|
+
* `NAME` is a host function when it recalcs (it won't re-scan cells when a fn registers afterward).
|
|
73
|
+
* Equivalent to calling {@link EngineSpreadsheet.registerCustomFunction} for each, but in time. */
|
|
74
|
+
customFunctions?: Record<string, CustomFunctionImpl>;
|
|
75
|
+
/** Inject the backing wasm engine instead of the default single-user `SpreadsheetEngine`. Return
|
|
76
|
+
* `new CollabSpreadsheetEngine()` for yhub/collab (the returned `engine` then exposes the Yjs sync
|
|
77
|
+
* surface — `applyRemoteUpdate`/`encodeStateAsUpdate`/…), or your own wasm store implementing
|
|
78
|
+
* `SpreadsheetEngineLike`. Called once, when the engine initializes. */
|
|
79
|
+
createEngine?: () => SpreadsheetEngineLike;
|
|
80
|
+
/** Initial grid size for positional/CRDT stores that implement `initGrid` (e.g. the collab engine);
|
|
81
|
+
* each registered sheet is pre-sized to these. Ignored by stores that grow on demand. */
|
|
82
|
+
gridRows?: number;
|
|
83
|
+
gridCols?: number;
|
|
84
|
+
/** **Windowed render mode** (default `false`). When `true`, the hook does NOT fold every changed
|
|
85
|
+
* cell into JS render state — at 1,000,000 rows that would hold all cells in JS (the blowup).
|
|
86
|
+
* Instead it holds ONLY the current viewport's cells + styles, refreshed via {@link
|
|
87
|
+
* EngineSpreadsheet.onViewPortChange} (call it from CanvasGrid's `onViewPortChange`) → `readWindow`,
|
|
88
|
+
* and re-read on each commit so in-view edits + recomputed dependents update. `rowCount`/
|
|
89
|
+
* `columnCount` come from the engine's data extent (or the seeded sheet counts), so the grid scrolls
|
|
90
|
+
* the full sheet while JS memory stays bounded to the window. Default mode is byte-for-byte unchanged. */
|
|
91
|
+
windowed?: boolean;
|
|
92
|
+
/** Windowed mode only: the EFFECTIVE frozen-pane counts for a sheet, so every window read also loads
|
|
93
|
+
* the frozen top/left bands (which must never be evicted — frozen panes stay on screen at any scroll
|
|
94
|
+
* position). A collab host should answer from its authoritative source (e.g. the `rncSheetMeta` doc
|
|
95
|
+
* plane), since a bulk-merge load bypasses the hook's own sheet fold. Omitted (or returning
|
|
96
|
+
* `undefined`) falls back to the hook's folded per-sheet `frozenRowCount`/`frozenColumnCount`. Read
|
|
97
|
+
* through a live ref on every windowed read — the identity may change freely. */
|
|
98
|
+
getWindowFrozenCounts?: (sheetId: number) => {
|
|
99
|
+
frozenRowCount?: number;
|
|
100
|
+
frozenColumnCount?: number;
|
|
101
|
+
} | undefined;
|
|
102
|
+
/** Called with the host custom-function calls a commit CANCELLED — their cell no longer holds the
|
|
103
|
+
* formula (cleared, overwritten, filled/pasted over, undone, or removed with its row/column). The
|
|
104
|
+
* hook already drops the matching in-flight eval's answer; use this to abort whatever the call
|
|
105
|
+
* started outside the engine (e.g. a backend `=AOP` run). Read through a live ref — the identity
|
|
106
|
+
* may change freely. */
|
|
107
|
+
onCustomEvalCancel?: (cancels: CustomCancel[]) => void;
|
|
108
|
+
/** Streaming batch-write lifecycle observers (the reference hook's `onStreamStart` /
|
|
109
|
+
* `onStreamProgress` / `onStreamEnd` props): `onChangeBatchStream` announces its generated
|
|
110
|
+
* `streamId` on start, reports the last non-empty cell it ingested as chunks arrive, and signals
|
|
111
|
+
* completion (also on abort/error). Read through live refs — identities may change freely. */
|
|
112
|
+
onStreamStart?: (streamId: string) => void;
|
|
113
|
+
onStreamProgress?: (streamId: string, sheetId: number, lastCellPosition: CellInterface | null) => void;
|
|
114
|
+
onStreamEnd?: (streamId: string) => void;
|
|
115
|
+
/** Theme used to stringify theme-indexed colors when serializing the visual (text/html) clipboard
|
|
116
|
+
* payload on copy — the cell fills/text colors and table/banded-range styling external consumers
|
|
117
|
+
* (Excel, Word) see. Defaults to `defaultSpreadsheetTheme`; pass the host's active theme so copied
|
|
118
|
+
* colors match what the grid renders. */
|
|
119
|
+
theme?: SpreadsheetTheme;
|
|
120
|
+
}
|
|
121
|
+
/** The remaining `useSpreadsheetState` surface, kept for drop-in TYPE parity. Every key here is inert
|
|
122
|
+
* in Option B (the engine owns calc / dependency graph / undo-redo; the host owns import / dialogs /
|
|
123
|
+
* clipboard / citations) — see the module-level stubs. `Pick<SS, …>` borrows the exact signatures. */
|
|
124
|
+
type EngineSpreadsheetParityStubs = Pick<SS, "spreadsheetColors" | "isImportingExcelfile" | "cellXfsRegistry" | "sharedStringRegistry" | "onChangeCellXfs" | "addFormulaToGraph" | "enqueueCalculation" | "enqueueGraphOperation" | "updateDependencyGraph" | "clearEvaluatedCellsCache" | "onRequestCalculate" | "getDependencyGraph" | "getDependents" | "getPrecedents" | "onTraceDependents" | "onTracePrecedents" | "onRemoveArrows" | "evaluateConditionalFormatting" | "evaluateConditionalFormattingForViewport" | "evaluateDataValidations" | "evaluateDataValidationsForViewport" | "reevaluateDerivationsForCells" | "applyPatch" | "generateStatePatches" | "createHistory" | "onClearHistory" | "getFormattingFromRange" | "getFormulasFromRange" | "getUserEnteredValuesFromRange" | "getSheetProperties" | "importExcelFile" | "importCSVFile" | "importCSVFileLegacy" | "onUpdateSheet" | "onRequestAddRows" | "onChangeBatchStream" | "onDeleteDataValidationRules">;
|
|
125
|
+
/** The Option-B render state + handlers a component passes to the grid. */
|
|
126
|
+
export interface EngineSpreadsheet extends EngineRenderState, EngineSpreadsheetHandlers, EngineSpreadsheetParityStubs {
|
|
127
|
+
ready: boolean;
|
|
128
|
+
engine: RncEngine | null;
|
|
129
|
+
canUndo: boolean;
|
|
130
|
+
canRedo: boolean;
|
|
131
|
+
/** Forward a UI intent to the engine. The change-set folds into state via the subscriber. */
|
|
132
|
+
onCommand: (command: Command) => void;
|
|
133
|
+
/** Discard the cells a preview batch stream painted (see `onChangeBatchStream`) — for a host that
|
|
134
|
+
* decided NOT to apply the preview: the user rejected the suggestion, or the request failed. A
|
|
135
|
+
* preview the host does apply needs no call; the applying write retires it. */
|
|
136
|
+
clearStreamPreview: () => void;
|
|
137
|
+
undo: () => void;
|
|
138
|
+
redo: () => void;
|
|
139
|
+
/** Toolbar aliases for {@link undo}/{@link redo} (the reference toolbar consumes `onUndo`/`onRedo`). */
|
|
140
|
+
onUndo: () => void;
|
|
141
|
+
onRedo: () => void;
|
|
142
|
+
/** Clipboard. `onCopy` (also serves cut) writes the clipboard from engine reads; `onPaste` parses
|
|
143
|
+
* the bounded clipboard and emits a `paste` command the engine resolves. Same shapes as `SS`. */
|
|
144
|
+
onCopy: SS["onCopy"];
|
|
145
|
+
onPaste: SS["onPaste"];
|
|
146
|
+
/** "Calculate Now" (F9): forces a full recalculation so volatile functions refresh. Real in Option B
|
|
147
|
+
* (issues the `recalculate` command) — unlike the other calc stubs, which the always-on engine makes
|
|
148
|
+
* moot. Same shape as `SS`. */
|
|
149
|
+
calculateNow: SS["calculateNow"];
|
|
150
|
+
/** Engine-computed "Filter by color" swatches — pass to `CanvasGridProps.getFilterColors`. One
|
|
151
|
+
* wasm column scan (the grid's JS per-row scan is disabled on windowed hosts, so without this
|
|
152
|
+
* the picker never renders there). Not an `SS` member — the reference hook has no engine-side
|
|
153
|
+
* swatch reader. */
|
|
154
|
+
getFilterColors: (sheetId: number, columnIndex: number, range: {
|
|
155
|
+
startRowIndex: number;
|
|
156
|
+
endRowIndex: number;
|
|
157
|
+
}) => {
|
|
158
|
+
availableCellColors?: string[];
|
|
159
|
+
availableFontColors?: string[];
|
|
160
|
+
availableIcons?: AvailableIcon[];
|
|
161
|
+
} | undefined;
|
|
162
|
+
onMoveChart: (chartId: EmbeddedChart["chartId"], anchorCell: CellInterface, offsetXPixels: number, offsetYPixels: number) => void;
|
|
163
|
+
onResizeChart: (chartId: EmbeddedChart["chartId"], anchorCell: CellInterface, offsetXPixels: number, offsetYPixels: number, width: number, height: number) => void;
|
|
164
|
+
onCreateConditionalFormattingRule: (rule: ConditionalFormatRule) => void;
|
|
165
|
+
onSavePaintFormat: SS["onSavePaintFormat"];
|
|
166
|
+
onApplyPaintFormat: SS["onApplyPaintFormat"];
|
|
167
|
+
paintFormat: SS["paintFormat"];
|
|
168
|
+
isPaintFormatActive: SS["isPaintFormatActive"];
|
|
169
|
+
onRepeatFormatting: SS["onRepeatFormatting"];
|
|
170
|
+
/** Follow a hyperlink — an external URL opens a tab; an internal ref (`Sheet1!A1:B5`) switches to
|
|
171
|
+
* the target sheet and moves the cursor + selection to the range. */
|
|
172
|
+
onSelectLink: SS["onSelectLink"];
|
|
173
|
+
/** Citations the grid draws (workbook-level collection; the engine owns it — a cell links via
|
|
174
|
+
* `citationId`). Not part of `useSpreadsheetState`'s return (it's a host prop there); exposed here so
|
|
175
|
+
* the Option-B app can render the overlay from the engine. */
|
|
176
|
+
citations: Citation[];
|
|
177
|
+
/** Load (or replace) the document. */
|
|
178
|
+
load: (document: LoadDocument) => void;
|
|
179
|
+
/** Host-push a computed effective value (custom-formula / structured result) onto a cell — the
|
|
180
|
+
* Option-B `setEffectiveValue`. Stored verbatim (incl. `structuredValue`), feeds dependents,
|
|
181
|
+
* protected from recalc until the cell is edited. */
|
|
182
|
+
setEffectiveValue: (sheetId: number, coords: CellInterface, effectiveValue: NonNullable<CellData["ev"]>) => void;
|
|
183
|
+
/** Register a host (JS) custom function so `=NAME(…)` resolves (deps tracked) instead of `#NAME?`.
|
|
184
|
+
* The engine calls `impl` back with the resolved arg values on (re)calc — your JS stays JS. */
|
|
185
|
+
registerCustomFunction: (name: string, impl: CustomFunctionImpl) => void;
|
|
186
|
+
activeSheetId: number;
|
|
187
|
+
activeCell: CellInterface;
|
|
188
|
+
selections: SelectionArea[];
|
|
189
|
+
activeCellBySheetId: SS["activeCellBySheetId"];
|
|
190
|
+
selectionsBySheetId: SS["selectionsBySheetId"];
|
|
191
|
+
onChangeActiveSheet: (sheetId: number) => void;
|
|
192
|
+
onChangeActiveCell: (sheetId: number, cell: CellInterface) => void;
|
|
193
|
+
/** Update the view selections. When the format painter is armed, a call with
|
|
194
|
+
* `finishedSelection: true` (CanvasGrid's mouseup) applies the captured pattern to the target
|
|
195
|
+
* instead — mirroring `useSpreadsheetState`'s selection interceptor. */
|
|
196
|
+
onChangeSelections: (sheetId: number, selections: SelectionArea[], finishedSelection?: boolean) => void;
|
|
197
|
+
/** Refresh the loaded window from the engine for the visible range (+ a buffer). Wire it to
|
|
198
|
+
* CanvasGrid's `onViewPortChange`. In WINDOWED mode it `readWindow`s the active sheet and replaces
|
|
199
|
+
* the in-JS window (evicting cells outside it, so memory stays bounded); in the default mode it's a
|
|
200
|
+
* no-op (all cells are already folded). Same key as `useSpreadsheetState`'s `onViewPortChange`
|
|
201
|
+
* (parity), with the `ViewportRange` shape CanvasGrid reports. */
|
|
202
|
+
onViewPortChange: (viewport: ViewportRange) => void;
|
|
203
|
+
rowCount: number;
|
|
204
|
+
columnCount: number;
|
|
205
|
+
frozenRowCount: number;
|
|
206
|
+
frozenColumnCount: number;
|
|
207
|
+
rowMetadata: Sheet["rowMetadata"];
|
|
208
|
+
columnMetadata: Sheet["columnMetadata"];
|
|
209
|
+
merges: GridRange[];
|
|
210
|
+
getCellData: (sheetId: number, rowIndex: number, columnIndex: number) => CellData | undefined;
|
|
211
|
+
/** The cell's formatted display string (`cell.fv`, computed + formatted by the engine). */
|
|
212
|
+
getFormattedValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined;
|
|
213
|
+
/** The cell's user-entered value as a string — the formula bar value (`=SUM(…)`, `42`, text, …). */
|
|
214
|
+
getUserEnteredValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined;
|
|
215
|
+
/** The cell's effective (computed) value as a SCALAR (`bool ?? number ?? string`). */
|
|
216
|
+
getEffectiveValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | number | boolean | undefined;
|
|
217
|
+
/** The cell's effective value as the full extended-value object (`{nv,sv,bv,…}`). */
|
|
218
|
+
getEffectiveExtendedValue: (sheetId: number, rowIndex: number, columnIndex: number) => CellData["ev"];
|
|
219
|
+
/** The cell's effective format: its OWN consolidated style. Conditional formatting is NOT layered
|
|
220
|
+
* here — CanvasGrid renders CF from the rules (`useConditionalFormatting`). */
|
|
221
|
+
getEffectiveFormat: (sheetId: number, rowIndex: number, columnIndex: number) => CellFormat | undefined;
|
|
222
|
+
getHyperlink: (sheetId: number, rowIndex: number, columnIndex: number) => CellData["hyperlink"];
|
|
223
|
+
getNote: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined;
|
|
224
|
+
/** Row height / column width from the engine-streamed dimension metadata (undefined → grid default). */
|
|
225
|
+
getRowHeight: (sheetId: number, rowIndex: number) => number | undefined;
|
|
226
|
+
getColumnWidth: (sheetId: number, columnIndex: number) => number | undefined;
|
|
227
|
+
/** Whether a row/column is hidden (by the user, a filter, or an outline group). */
|
|
228
|
+
isHiddenRow: (sheetId: number, rowIndex: number) => boolean;
|
|
229
|
+
isHiddenColumn: (sheetId: number, columnIndex: number) => boolean;
|
|
230
|
+
getSheetName: (sheetId: number) => string;
|
|
231
|
+
/** Inverse of {@link getSheetName}: resolve a sheet title to its id (formula sheet refs). */
|
|
232
|
+
getSheetId: (title: string) => number | undefined;
|
|
233
|
+
getSheetCount: () => number;
|
|
234
|
+
getSheetIndex: (sheetId: number) => number;
|
|
235
|
+
/** The sheet's declared row/column counts (grid extent), distinct from the data-row count. */
|
|
236
|
+
getSheetRowCount: (sheetId: number) => number;
|
|
237
|
+
getSheetColumnCount: (sheetId: number) => number;
|
|
238
|
+
getDataRowCount: (sheetId?: number) => number | undefined;
|
|
239
|
+
/**
|
|
240
|
+
* The effective values of a range, in row-major order — for chart series. Reads the FULL document
|
|
241
|
+
* from the engine (off-window-safe), not the windowed render state. Synchronous (in-process WASM).
|
|
242
|
+
*/
|
|
243
|
+
getSeriesValuesFromRange: (sheetRange: SheetRange, hiddenDimensionStrategy?: HIDDEN_DIMENSION_STRATEGY | null) => (string | number | boolean | undefined)[];
|
|
244
|
+
/**
|
|
245
|
+
* Off-window search: row-major coordinates of every cell on `sheetId` matching `query`. Backed by
|
|
246
|
+
* the engine (whole document), so it finds matches OUTSIDE the loaded viewport that the JS
|
|
247
|
+
* `useSearch` accessor-walk can't see. Wire as `useSearch`'s `findMatches`.
|
|
248
|
+
*/
|
|
249
|
+
findAll: (sheetId: number, query: string, options?: {
|
|
250
|
+
matchCase?: boolean;
|
|
251
|
+
wholeWord?: boolean;
|
|
252
|
+
useRegex?: boolean;
|
|
253
|
+
}) => SheetCoordinate[];
|
|
254
|
+
/** The FORMATTED display values of a range, in row-major order — chart domain (axis labels). */
|
|
255
|
+
getDomainValuesFromRange: (sheetRange: SheetRange, hiddenDimensionStrategy?: HIDDEN_DIMENSION_STRATEGY | null) => (string | undefined | null)[];
|
|
256
|
+
/**
|
|
257
|
+
* A range as columnar data keyed by its first-row headers — for pivot/chart sources. Reads the FULL
|
|
258
|
+
* document from the engine (off-window-safe), not the windowed render state. Synchronous.
|
|
259
|
+
*/
|
|
260
|
+
getColumnarDataFromRange: (sheetRange: SheetRange) => {
|
|
261
|
+
[key: string]: Array<string | number | boolean | Date>;
|
|
262
|
+
};
|
|
263
|
+
getTextFormatRuns: SS["getTextFormatRuns"];
|
|
264
|
+
getUserEnteredExtendedValue: SS["getUserEnteredExtendedValue"];
|
|
265
|
+
getUserEnteredFormat: SS["getUserEnteredFormat"];
|
|
266
|
+
getErrorValue: SS["getErrorValue"];
|
|
267
|
+
getMentionsFromCell: SS["getMentionsFromCell"];
|
|
268
|
+
getDataColumnCount: SS["getDataColumnCount"];
|
|
269
|
+
getNonEmptyRowCount: SS["getNonEmptyRowCount"];
|
|
270
|
+
getNonEmptyColumnCount: SS["getNonEmptyColumnCount"];
|
|
271
|
+
onSelectNextSheet: SS["onSelectNextSheet"];
|
|
272
|
+
onSelectPreviousSheet: SS["onSelectPreviousSheet"];
|
|
273
|
+
showGridLines: SS["showGridLines"];
|
|
274
|
+
showRowColHeaders: SS["showRowColHeaders"];
|
|
275
|
+
zoomScale: SS["zoomScale"];
|
|
276
|
+
isDarkMode: SS["isDarkMode"];
|
|
277
|
+
bandedRanges: SS["bandedRanges"];
|
|
278
|
+
basicFilter: SS["basicFilter"];
|
|
279
|
+
arrows: SS["arrows"];
|
|
280
|
+
conditionalFormats: ConditionalFormatRule[];
|
|
281
|
+
tables: TableView[];
|
|
282
|
+
namedRanges: NamedRange[];
|
|
283
|
+
protectedRanges: ProtectedRange[];
|
|
284
|
+
embeds: EmbeddedObject[];
|
|
285
|
+
slicers: Slicer[];
|
|
286
|
+
/** The data-validation rule covering a cell (resolved by range membership). */
|
|
287
|
+
getDataValidation: SS["getDataValidation"];
|
|
288
|
+
}
|
|
289
|
+
/** **Option B, pure core:** the Rust→WASM data store + calc + commands, with no UI/chrome. The
|
|
290
|
+
* composed {@link useSpreadsheetEngine} layers {@link useSpreadsheetUI} (dialogs) on top — most apps
|
|
291
|
+
* want that. Use `useEngineCore` directly only when you bring your own chrome. */
|
|
292
|
+
export declare function useEngineCore(options: UseEngineSpreadsheetOptions): EngineSpreadsheet;
|
|
293
|
+
//# sourceMappingURL=use-engine-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-engine-core.d.ts","sourceRoot":"","sources":["../../src/use-engine-core.ts"],"names":[],"mappings":"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"}
|