@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.
Files changed (37) hide show
  1. package/LICENSE.md +100 -0
  2. package/README.md +83 -0
  3. package/dist/esm/command-handlers.d.ts +169 -0
  4. package/dist/esm/command-handlers.d.ts.map +1 -0
  5. package/dist/esm/command-handlers.js +404 -0
  6. package/dist/esm/fold.d.ts +140 -0
  7. package/dist/esm/fold.d.ts.map +1 -0
  8. package/dist/esm/fold.js +539 -0
  9. package/dist/esm/index.d.ts +620 -0
  10. package/dist/esm/index.d.ts.map +1 -0
  11. package/dist/esm/index.js +425 -0
  12. package/dist/esm/io.d.ts +119 -0
  13. package/dist/esm/io.d.ts.map +1 -0
  14. package/dist/esm/io.js +318 -0
  15. package/dist/esm/keys.d.ts +20 -0
  16. package/dist/esm/keys.d.ts.map +1 -0
  17. package/dist/esm/keys.js +41 -0
  18. package/dist/esm/move-rescope.d.ts +18 -0
  19. package/dist/esm/move-rescope.d.ts.map +1 -0
  20. package/dist/esm/move-rescope.js +38 -0
  21. package/dist/esm/use-engine-core.d.ts +293 -0
  22. package/dist/esm/use-engine-core.d.ts.map +1 -0
  23. package/dist/esm/use-engine-core.js +2279 -0
  24. package/dist/esm/use-engine-pivot-editor.d.ts +78 -0
  25. package/dist/esm/use-engine-pivot-editor.d.ts.map +1 -0
  26. package/dist/esm/use-engine-pivot-editor.js +252 -0
  27. package/dist/esm/use-spreadsheet-engine.d.ts +7 -0
  28. package/dist/esm/use-spreadsheet-engine.d.ts.map +1 -0
  29. package/dist/esm/use-spreadsheet-engine.js +23 -0
  30. package/dist/esm/use-spreadsheet-ui.d.ts +39 -0
  31. package/dist/esm/use-spreadsheet-ui.d.ts.map +1 -0
  32. package/dist/esm/use-spreadsheet-ui.js +78 -0
  33. package/dist/esm/wasm/rnc_wasm.d.ts +394 -0
  34. package/dist/esm/wasm/rnc_wasm.js +1455 -0
  35. package/dist/esm/wasm/rnc_wasm_bg.wasm +0 -0
  36. package/dist/esm/wasm/rnc_wasm_bg.wasm.d.ts +81 -0
  37. 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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"}