@coco-vexel/coco-office-editor 0.0.0-stage → 1.0.0

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 (57) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +510 -2
  3. package/THIRD_PARTY_NOTICES.md +212 -0
  4. package/dist/index.cjs +26401 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.cts +12 -0
  7. package/dist/index.d.ts +12 -0
  8. package/dist/index.js +26192 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/model-DB6aN6uJ.d.cts +321 -0
  11. package/dist/model-DB6aN6uJ.d.ts +321 -0
  12. package/dist/native-B6B649CC.d.ts +1111 -0
  13. package/dist/native-Ct9nN06K.d.cts +1111 -0
  14. package/dist/ppt-native.cjs +5334 -0
  15. package/dist/ppt-native.cjs.map +1 -0
  16. package/dist/ppt-native.d.cts +2 -0
  17. package/dist/ppt-native.d.ts +2 -0
  18. package/dist/ppt-native.js +5332 -0
  19. package/dist/ppt-native.js.map +1 -0
  20. package/dist/ppt.cjs +5426 -0
  21. package/dist/ppt.cjs.map +1 -0
  22. package/dist/ppt.d.cts +306 -0
  23. package/dist/ppt.d.ts +306 -0
  24. package/dist/ppt.js +5410 -0
  25. package/dist/ppt.js.map +1 -0
  26. package/dist/spreadsheet.cjs +4276 -0
  27. package/dist/spreadsheet.cjs.map +1 -0
  28. package/dist/spreadsheet.d.cts +676 -0
  29. package/dist/spreadsheet.d.ts +676 -0
  30. package/dist/spreadsheet.js +4213 -0
  31. package/dist/spreadsheet.js.map +1 -0
  32. package/dist/word-editing.cjs +812 -0
  33. package/dist/word-editing.cjs.map +1 -0
  34. package/dist/word-editing.d.cts +149 -0
  35. package/dist/word-editing.d.ts +149 -0
  36. package/dist/word-editing.js +803 -0
  37. package/dist/word-editing.js.map +1 -0
  38. package/dist/word-native.cjs +13400 -0
  39. package/dist/word-native.cjs.map +1 -0
  40. package/dist/word-native.d.cts +4 -0
  41. package/dist/word-native.d.ts +4 -0
  42. package/dist/word-native.js +13293 -0
  43. package/dist/word-native.js.map +1 -0
  44. package/dist/word-prosemirror.cjs +489 -0
  45. package/dist/word-prosemirror.cjs.map +1 -0
  46. package/dist/word-prosemirror.d.cts +21 -0
  47. package/dist/word-prosemirror.d.ts +21 -0
  48. package/dist/word-prosemirror.js +483 -0
  49. package/dist/word-prosemirror.js.map +1 -0
  50. package/dist/word.cjs +16764 -0
  51. package/dist/word.cjs.map +1 -0
  52. package/dist/word.d.cts +84 -0
  53. package/dist/word.d.ts +84 -0
  54. package/dist/word.js +16632 -0
  55. package/dist/word.js.map +1 -0
  56. package/package.json +106 -3
  57. package/src/styles/editor.css +1507 -0
@@ -0,0 +1,676 @@
1
+ import { ExcelSheetModel, ExcelStylesModel, ExcelCellKind, ExcelCellValue, ExcelCellModel, ExcelRowModel, ExcelColumnModel, ExcelMergedRangeModel, SpreadsheetFormulaResult, ExcelPaneModel, ExcelBorderModel, ExcelWorkbook, ExcelWorkbookLoadOptions, ExcelWorkbookModel, ExcelHistoryApplyResult, ExcelTransactionGroupOptions, ExcelAgentTransactionGroupOptions, ExcelTransactionGroupSummary, ExcelWorkbookDiff, ExcelColorModel, SpreadsheetFormulaEngine } from '@coco-vexel/coco-office/excel';
2
+
3
+ interface SpreadsheetPoint {
4
+ x: number;
5
+ y: number;
6
+ }
7
+ interface SpreadsheetSize {
8
+ width: number;
9
+ height: number;
10
+ }
11
+ interface SpreadsheetRect extends SpreadsheetPoint, SpreadsheetSize {
12
+ }
13
+ interface SpreadsheetRange {
14
+ startRow: number;
15
+ startColumn: number;
16
+ endRow: number;
17
+ endColumn: number;
18
+ }
19
+ interface SpreadsheetRenderCell {
20
+ row: number;
21
+ column: number;
22
+ address: string;
23
+ kind: ExcelCellKind;
24
+ value: ExcelCellValue;
25
+ displayText: string;
26
+ formula?: string;
27
+ styleId?: number;
28
+ source: ExcelCellModel;
29
+ }
30
+ interface SpreadsheetMergeInfo {
31
+ address: string;
32
+ range: SpreadsheetRange;
33
+ masterAddress: string;
34
+ source: ExcelMergedRangeModel;
35
+ }
36
+ interface SpreadsheetSheetRenderModel {
37
+ sheetId: string;
38
+ sheetName: string;
39
+ source: ExcelSheetModel;
40
+ styles: ExcelStylesModel;
41
+ cellsByAddress: Map<string, SpreadsheetRenderCell>;
42
+ cellsByRowColumn: Map<string, SpreadsheetRenderCell>;
43
+ rowMetaByIndex: Map<number, ExcelRowModel>;
44
+ columnMetaByIndex: Map<number, ExcelColumnModel>;
45
+ mergeMasterByAddress: Map<string, SpreadsheetMergeInfo>;
46
+ mergeFollowerByAddress: Map<string, string>;
47
+ maxRow: number;
48
+ maxColumn: number;
49
+ }
50
+ interface SpreadsheetLayoutOptions {
51
+ defaultRowHeight?: number;
52
+ defaultColumnWidth?: number;
53
+ rowHeaderWidth?: number;
54
+ columnHeaderHeight?: number;
55
+ rowCount?: number;
56
+ columnCount?: number;
57
+ }
58
+ interface SpreadsheetHitCell {
59
+ kind: 'cell';
60
+ row: number;
61
+ column: number;
62
+ address: string;
63
+ }
64
+ interface SpreadsheetHitColumnHeader {
65
+ kind: 'columnHeader';
66
+ column: number;
67
+ }
68
+ interface SpreadsheetHitRowHeader {
69
+ kind: 'rowHeader';
70
+ row: number;
71
+ }
72
+ interface SpreadsheetHitCorner {
73
+ kind: 'corner';
74
+ }
75
+ interface SpreadsheetHitNone {
76
+ kind: 'none';
77
+ }
78
+ type SpreadsheetHitResult = SpreadsheetHitCell | SpreadsheetHitColumnHeader | SpreadsheetHitRowHeader | SpreadsheetHitCorner | SpreadsheetHitNone;
79
+ type SpreadsheetViewportKind = 'main' | 'frozenTop' | 'frozenLeft' | 'frozenTopLeft' | 'columnHeaderScrollable' | 'columnHeaderFrozen' | 'rowHeaderScrollable' | 'rowHeaderFrozen' | 'corner';
80
+ interface SpreadsheetViewport {
81
+ kind: SpreadsheetViewportKind;
82
+ screenRect: SpreadsheetRect;
83
+ originX: number;
84
+ originY: number;
85
+ rows: {
86
+ start: number;
87
+ end: number;
88
+ };
89
+ columns: {
90
+ start: number;
91
+ end: number;
92
+ };
93
+ }
94
+ interface SpreadsheetScrollState {
95
+ x: number;
96
+ y: number;
97
+ }
98
+ interface SpreadsheetFreezeState {
99
+ frozenRows: number;
100
+ frozenColumns: number;
101
+ }
102
+ interface SpreadsheetViewportState {
103
+ viewportSize: SpreadsheetSize;
104
+ scroll: SpreadsheetScrollState;
105
+ freeze: SpreadsheetFreezeState;
106
+ }
107
+ declare function rowColumnKey(row: number, column: number): string;
108
+
109
+ interface BuildSpreadsheetRenderModelOptions {
110
+ minimumRows?: number;
111
+ minimumColumns?: number;
112
+ formulaResults?: Map<string, SpreadsheetFormulaResult>;
113
+ }
114
+ declare function buildSpreadsheetSheetRenderModel(sheet: ExcelSheetModel, styles: ExcelStylesModel, options?: BuildSpreadsheetRenderModelOptions): SpreadsheetSheetRenderModel;
115
+ declare function getRenderCell(model: SpreadsheetSheetRenderModel, row: number, column: number): SpreadsheetRenderCell | undefined;
116
+ declare function formatSpreadsheetDisplayValue(value: ExcelCellModel['value'], formatCode: string | undefined): string;
117
+
118
+ declare class SpreadsheetLayout {
119
+ readonly model: SpreadsheetSheetRenderModel;
120
+ readonly defaultRowHeight: number;
121
+ readonly defaultColumnWidth: number;
122
+ readonly rowHeaderWidth: number;
123
+ readonly columnHeaderHeight: number;
124
+ readonly rowCount: number;
125
+ readonly columnCount: number;
126
+ private readonly rowOffsets;
127
+ private readonly columnOffsets;
128
+ private readonly rowHeights;
129
+ private readonly columnWidths;
130
+ constructor(model: SpreadsheetSheetRenderModel, options?: SpreadsheetLayoutOptions);
131
+ totalWidth(): number;
132
+ totalHeight(): number;
133
+ getColumnWidth(column: number): number;
134
+ getRowHeight(row: number): number;
135
+ getColumnX(column: number): number;
136
+ getRowY(row: number): number;
137
+ getCellLogicalRect(row: number, column: number): SpreadsheetRect;
138
+ getRangeLogicalRect(range: SpreadsheetRange): SpreadsheetRect;
139
+ getVisibleRange(originX: number, originY: number, size: SpreadsheetSize, minimumRow?: number, minimumColumn?: number): SpreadsheetRange;
140
+ rowAt(logicalY: number): number;
141
+ columnAt(logicalX: number): number;
142
+ hitTestLogical(logicalX: number, logicalY: number): SpreadsheetHitResult;
143
+ }
144
+ /** Convert an OOXML column width to the CSS-pixel geometry used by the renderer. */
145
+ declare function excelColumnWidthToCssPixels(width: number): number;
146
+ /** Convert editor CSS pixels back to the OOXML width Core writes to xlsx. */
147
+ declare function cssPixelsToExcelColumnWidth(width: number): number;
148
+
149
+ interface SpreadsheetViewportManagerOptions {
150
+ viewportSize: SpreadsheetSize;
151
+ scroll?: Partial<SpreadsheetScrollState>;
152
+ freeze?: Partial<SpreadsheetFreezeState>;
153
+ }
154
+ declare class SpreadsheetViewportManager {
155
+ private readonly layout;
156
+ readonly scroll: SpreadsheetScrollState;
157
+ readonly freeze: SpreadsheetFreezeState;
158
+ readonly viewportSize: SpreadsheetSize;
159
+ readonly viewports: SpreadsheetViewport[];
160
+ constructor(layout: SpreadsheetLayout, options: SpreadsheetViewportManagerOptions);
161
+ hitTest(point: SpreadsheetPoint): SpreadsheetHitResult;
162
+ findViewport(point: SpreadsheetPoint): SpreadsheetViewport | undefined;
163
+ cellScreenRect(row: number, column: number, viewport: SpreadsheetViewport): SpreadsheetRect;
164
+ }
165
+ declare function freezeStateFromSheet(sheet: ExcelSheetModel): SpreadsheetFreezeState;
166
+ declare function freezeStateFromPane(pane: ExcelPaneModel | undefined): SpreadsheetFreezeState;
167
+ declare function clampScroll(layout: SpreadsheetLayout, freeze: SpreadsheetFreezeState, viewportSize: SpreadsheetSize, scroll: SpreadsheetScrollState): SpreadsheetScrollState;
168
+
169
+ interface SpreadsheetResolvedCellStyle {
170
+ font: string;
171
+ fontSize: number;
172
+ underline: boolean;
173
+ fontColor: string;
174
+ fillColor: string;
175
+ wrapText: boolean;
176
+ border: ExcelBorderModel;
177
+ horizontalAlign: CanvasTextAlign;
178
+ verticalAlign: 'top' | 'middle' | 'bottom';
179
+ }
180
+ declare function resolveSpreadsheetCellStyle(styles: ExcelStylesModel, styleId: number | undefined, cell?: SpreadsheetRenderCell): SpreadsheetResolvedCellStyle;
181
+ declare function resolveSpreadsheetRangeBorder(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange): ExcelBorderModel;
182
+
183
+ interface SpreadsheetCanvasRendererOptions {
184
+ baseCanvas: HTMLCanvasElement;
185
+ headerCanvas: HTMLCanvasElement;
186
+ overlayCanvas: HTMLCanvasElement;
187
+ }
188
+ declare class SpreadsheetCanvasRenderer {
189
+ private readonly options;
190
+ private readonly baseCtx;
191
+ private readonly headerCtx;
192
+ private readonly overlayCtx;
193
+ private cssWidth;
194
+ private cssHeight;
195
+ private scaleX;
196
+ private scaleY;
197
+ private headerFiltersEnabled;
198
+ private headerFilterColumns;
199
+ private activeHeaderFilterColumns;
200
+ constructor(options: SpreadsheetCanvasRendererOptions);
201
+ resize(width: number, height: number, devicePixelRatio?: number): void;
202
+ setHeaderFiltersEnabled(enabled: boolean): void;
203
+ setHeaderFilterColumns(columns: readonly number[] | null): void;
204
+ setActiveHeaderFilterColumns(columns: readonly number[]): void;
205
+ render(layout: SpreadsheetLayout, viewportManager: SpreadsheetViewportManager): void;
206
+ clearOverlay(): void;
207
+ renderSelection(layout: SpreadsheetLayout, viewportManager: SpreadsheetViewportManager, range: SpreadsheetRange, options?: {
208
+ showFillHandle?: boolean;
209
+ }): void;
210
+ fillHandleRect(layout: SpreadsheetLayout, viewportManager: SpreadsheetViewportManager, range: SpreadsheetRange): SpreadsheetRect | null;
211
+ renderCopiedRange(layout: SpreadsheetLayout, viewportManager: SpreadsheetViewportManager, range: SpreadsheetRange): void;
212
+ renderDashedRange(layout: SpreadsheetLayout, viewportManager: SpreadsheetViewportManager, range: SpreadsheetRange, options: {
213
+ stroke: string;
214
+ fill?: string;
215
+ }): void;
216
+ private clearAll;
217
+ private drawFillHandle;
218
+ private drawCells;
219
+ private drawCell;
220
+ private drawHeaders;
221
+ }
222
+
223
+ interface SpreadsheetSelectionState {
224
+ kind: 'cell' | 'row' | 'column';
225
+ active: {
226
+ row: number;
227
+ column: number;
228
+ };
229
+ range: SpreadsheetRange;
230
+ }
231
+ declare function createSelection(row: number, column: number): SpreadsheetSelectionState;
232
+ declare function createRowSelection(row: number, bounds: {
233
+ columnCount: number;
234
+ }): SpreadsheetSelectionState;
235
+ declare function createRowRangeSelection(startRow: number, endRow: number, bounds: {
236
+ columnCount: number;
237
+ }): SpreadsheetSelectionState;
238
+ declare function createColumnSelection(column: number, bounds: {
239
+ rowCount: number;
240
+ }): SpreadsheetSelectionState;
241
+ declare function createColumnRangeSelection(startColumn: number, endColumn: number, bounds: {
242
+ rowCount: number;
243
+ }): SpreadsheetSelectionState;
244
+ declare function normalizeSelectionRange(range: SpreadsheetRange): SpreadsheetRange;
245
+ declare function extendSelection(selection: SpreadsheetSelectionState, row: number, column: number, bounds?: {
246
+ rowCount: number;
247
+ columnCount: number;
248
+ }): SpreadsheetSelectionState;
249
+ declare function moveSelection(selection: SpreadsheetSelectionState, deltaRow: number, deltaColumn: number, bounds: {
250
+ rowCount: number;
251
+ columnCount: number;
252
+ }): SpreadsheetSelectionState;
253
+ /**
254
+ * Spreadsheet selections must include a full merged block once any cell in that block is touched.
255
+ * Keep this shared because drag selection, paste feedback, and host integrations need the same rule.
256
+ */
257
+ declare function expandSelectionForMergedRanges(selection: SpreadsheetSelectionState, model: SpreadsheetSheetRenderModel): SpreadsheetSelectionState;
258
+ declare function expandRangeForMergedRanges(range: SpreadsheetRange, model: SpreadsheetSheetRenderModel): SpreadsheetRange;
259
+ declare function selectionAfterRowDeletion(selection: SpreadsheetSelectionState, deletedStartRow: number, deletedCount: number, bounds: {
260
+ rowCount: number;
261
+ columnCount: number;
262
+ }, model: SpreadsheetSheetRenderModel): SpreadsheetSelectionState;
263
+ declare function selectionAfterColumnDeletion(selection: SpreadsheetSelectionState, deletedStartColumn: number, deletedCount: number, bounds: {
264
+ rowCount: number;
265
+ columnCount: number;
266
+ }, model: SpreadsheetSheetRenderModel): SpreadsheetSelectionState;
267
+
268
+ interface SpreadsheetClipboardMerge {
269
+ startRowOffset: number;
270
+ startColumnOffset: number;
271
+ rowCount: number;
272
+ columnCount: number;
273
+ }
274
+ interface SpreadsheetClipboardPayload {
275
+ text: string;
276
+ values: ExcelCellValue[][];
277
+ styleIds: (number | undefined)[][];
278
+ merges: SpreadsheetClipboardMerge[];
279
+ }
280
+ declare function buildSpreadsheetClipboardPayload(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange): SpreadsheetClipboardPayload;
281
+ declare function serializeRangeToTsv(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange): string;
282
+ declare function parseTsv(text: string): ExcelCellValue[][];
283
+ declare function rangeAddressForMatrix(startRow: number, startColumn: number, values: ExcelCellValue[][]): string;
284
+
285
+ type SpreadsheetAutoFillDirection = 'down' | 'right';
286
+ interface SpreadsheetAutoFillCell {
287
+ row: number;
288
+ column: number;
289
+ value: ExcelCellValue;
290
+ formula?: string;
291
+ styleId?: number;
292
+ }
293
+ interface SpreadsheetAutoFillPlan {
294
+ direction: SpreadsheetAutoFillDirection;
295
+ source: SpreadsheetRange;
296
+ target: SpreadsheetRange;
297
+ cells: SpreadsheetAutoFillCell[];
298
+ }
299
+ /**
300
+ * Produces the cells outside the original selection for a down/right fill.
301
+ * Merged ranges are deliberately excluded for now: their copy semantics need a
302
+ * separate structural operation rather than cell-by-cell expansion.
303
+ */
304
+ declare function buildSpreadsheetAutoFillPlan(model: SpreadsheetSheetRenderModel, sourceRange: SpreadsheetRange, targetRange: SpreadsheetRange): SpreadsheetAutoFillPlan;
305
+ declare function supportsSpreadsheetAutoFill(model: SpreadsheetSheetRenderModel, sourceRange: SpreadsheetRange): boolean;
306
+
307
+ declare function setSpreadsheetCellValue(workbook: ExcelWorkbook, sheetName: string, address: string, value: ExcelCellValue): Promise<void>;
308
+ declare function setSpreadsheetCellFormula(workbook: ExcelWorkbook, sheetName: string, address: string, formula: string | null): Promise<void>;
309
+ declare function setSpreadsheetRangeValues(workbook: ExcelWorkbook, sheetName: string, startRow: number, startColumn: number, values: ExcelCellValue[][]): Promise<void>;
310
+ declare function clearSpreadsheetRange(workbook: ExcelWorkbook, sheetName: string, startRow: number, startColumn: number, rowCount: number, columnCount: number): Promise<void>;
311
+ declare function setSpreadsheetRowHeight(workbook: ExcelWorkbook, sheetName: string, row: number, height: number): Promise<void>;
312
+ declare function setSpreadsheetColumnWidth(workbook: ExcelWorkbook, sheetName: string, column: number, width: number): Promise<void>;
313
+
314
+ type SpreadsheetSortDirection = 'asc' | 'desc';
315
+ interface SpreadsheetColumnFilter {
316
+ column: number;
317
+ values: readonly string[];
318
+ }
319
+ declare function spreadsheetFilterValues(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange, column: number): string[];
320
+ declare function spreadsheetVisibleFilterValues(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange, column: number): string[];
321
+ declare function spreadsheetRowsForFilter(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange, column: number, value: string | readonly string[]): number[];
322
+ declare function spreadsheetRowsForColumnFilters(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange, filters: readonly SpreadsheetColumnFilter[]): number[];
323
+ declare function spreadsheetSortRows(model: SpreadsheetSheetRenderModel, range: SpreadsheetRange, column: number, direction: SpreadsheetSortDirection): number[];
324
+
325
+ interface SpreadsheetEditorRuntimeState {
326
+ workbook: ExcelWorkbook;
327
+ model: ExcelWorkbookModel;
328
+ activeSheetName: string;
329
+ activeSheet: SpreadsheetSheetRenderModel;
330
+ formulaResults: Map<string, SpreadsheetFormulaResult>;
331
+ formulaEngine: SpreadsheetFormulaEngine;
332
+ }
333
+ interface SpreadsheetCellEditHistoryOptions {
334
+ mergeUndo?: boolean;
335
+ mergeWindowMs?: number;
336
+ }
337
+ type SpreadsheetUserTransactionOptions = Omit<ExcelTransactionGroupOptions, 'source'>;
338
+ type SpreadsheetAgentTransactionRunner = (runtime: SpreadsheetEditorRuntime) => Promise<void>;
339
+ interface SpreadsheetAgentTransactionPreview {
340
+ result: ExcelHistoryApplyResult | null;
341
+ summary: ExcelTransactionGroupSummary | null;
342
+ diff: ExcelWorkbookDiff;
343
+ diffSummary: SpreadsheetPreviewDiffSummary;
344
+ beforeModel: ExcelWorkbookModel;
345
+ afterModel: ExcelWorkbookModel;
346
+ activeSheetName: string;
347
+ }
348
+ interface SpreadsheetPreviewDiffSummary {
349
+ changed: boolean;
350
+ changedSheets: number;
351
+ sheetNames: string[];
352
+ cellChanges: {
353
+ total: number;
354
+ added: number;
355
+ modified: number;
356
+ deleted: number;
357
+ };
358
+ structuralChanged: boolean;
359
+ objectChanged: boolean;
360
+ sampleCells: SpreadsheetPreviewCellChangeSummary[];
361
+ }
362
+ interface SpreadsheetPreviewCellChangeSummary {
363
+ sheetName: string;
364
+ address: string;
365
+ kind: 'added' | 'deleted' | 'modified';
366
+ before: ExcelCellValue | null;
367
+ after: ExcelCellValue | null;
368
+ }
369
+ type SpreadsheetPasteMode = 'all' | 'values' | 'formats';
370
+ interface SpreadsheetPasteOptions {
371
+ mode?: SpreadsheetPasteMode;
372
+ merges?: SpreadsheetClipboardMerge[];
373
+ styleIds?: (number | undefined)[][];
374
+ }
375
+ declare class SpreadsheetEditorRuntime {
376
+ private state;
377
+ private activeTransaction;
378
+ private activeTransactionSource;
379
+ private transactionNeedsRefresh;
380
+ private constructor();
381
+ static fromZip(bytes: Uint8Array | ArrayBuffer, options?: ExcelWorkbookLoadOptions): Promise<SpreadsheetEditorRuntime>;
382
+ static fromWorkbook(workbook: ExcelWorkbook): Promise<SpreadsheetEditorRuntime>;
383
+ workbook(): ExcelWorkbook;
384
+ model(): ExcelWorkbookModel;
385
+ activeSheetName(): string;
386
+ activeSheet(): SpreadsheetSheetRenderModel;
387
+ canUndo(): boolean;
388
+ canRedo(): boolean;
389
+ undo(): Promise<ExcelHistoryApplyResult | null>;
390
+ redo(): Promise<ExcelHistoryApplyResult | null>;
391
+ runUserTransaction(options: SpreadsheetUserTransactionOptions, run: () => Promise<void>): Promise<ExcelHistoryApplyResult | null>;
392
+ runAgentTransaction(options: ExcelAgentTransactionGroupOptions, run: SpreadsheetAgentTransactionRunner): Promise<ExcelHistoryApplyResult | null>;
393
+ previewAgentTransaction(options: ExcelAgentTransactionGroupOptions, run: SpreadsheetAgentTransactionRunner): Promise<SpreadsheetAgentTransactionPreview>;
394
+ setActiveSheet(sheetName: string): Promise<void>;
395
+ addSheet(name: string): Promise<void>;
396
+ renameSheet(sheetName: string, name: string): Promise<void>;
397
+ copySheet(sheetName: string, newName: string): Promise<void>;
398
+ deleteSheet(sheetName: string): Promise<void>;
399
+ moveSheet(sheetName: string, toIndex: number): Promise<void>;
400
+ refresh(): Promise<void>;
401
+ setCellValue(address: string, value: ExcelCellValue, historyOptions?: SpreadsheetCellEditHistoryOptions): Promise<void>;
402
+ setCellFormula(address: string, formula: string | null, historyOptions?: SpreadsheetCellEditHistoryOptions): Promise<void>;
403
+ replaceAll(query: string, replacement: string, matchCase?: boolean): Promise<number>;
404
+ filterRows(startRow: number, endRow: number, column: number, value: string | readonly string[] | null): Promise<void>;
405
+ filterRowsByColumns(startRow: number, endRow: number, filters: readonly SpreadsheetColumnFilter[]): Promise<void>;
406
+ sortRows(startRow: number, endRow: number, column: number, direction: SpreadsheetSortDirection): Promise<void>;
407
+ setRangeValues(startRow: number, startColumn: number, values: ExcelCellValue[][]): Promise<void>;
408
+ autoFillRange(sourceRange: SpreadsheetRange, targetRange: SpreadsheetRange): Promise<void>;
409
+ pasteRangeValues(startRow: number, startColumn: number, values: ExcelCellValue[][], merges?: SpreadsheetClipboardMerge[], styleIds?: (number | undefined)[][]): Promise<void>;
410
+ pasteRange(startRow: number, startColumn: number, values: ExcelCellValue[][], options?: SpreadsheetPasteOptions): Promise<void>;
411
+ clearRange(startRow: number, startColumn: number, rowCount: number, columnCount: number): Promise<void>;
412
+ setRowHeight(row: number, height: number): Promise<void>;
413
+ setColumnWidth(column: number, width: number): Promise<void>;
414
+ setFreezePanes(frozenRows: number, frozenColumns: number): Promise<void>;
415
+ insertRows(rowIndex: number, count?: number): Promise<void>;
416
+ deleteRows(rowIndex: number, count?: number): Promise<void>;
417
+ insertColumns(columnIndex: number, count?: number): Promise<void>;
418
+ deleteColumns(columnIndex: number, count?: number): Promise<void>;
419
+ setRangeBold(startRow: number, startColumn: number, rowCount: number, columnCount: number, value: boolean | undefined): Promise<void>;
420
+ setRangeItalic(startRow: number, startColumn: number, rowCount: number, columnCount: number, value: boolean | undefined): Promise<void>;
421
+ setRangeUnderline(startRow: number, startColumn: number, rowCount: number, columnCount: number, value: boolean | undefined): Promise<void>;
422
+ setRangeFontColor(startRow: number, startColumn: number, rowCount: number, columnCount: number, color: ExcelColorModel | undefined): Promise<void>;
423
+ setRangeFillColor(startRow: number, startColumn: number, rowCount: number, columnCount: number, color: ExcelColorModel | undefined): Promise<void>;
424
+ setRangeHorizontalAlign(startRow: number, startColumn: number, rowCount: number, columnCount: number, horizontal: 'left' | 'center' | 'right' | undefined): Promise<void>;
425
+ setRangeVerticalAlign(startRow: number, startColumn: number, rowCount: number, columnCount: number, vertical: 'top' | 'center' | 'bottom' | undefined): Promise<void>;
426
+ setRangeNumberFormat(startRow: number, startColumn: number, rowCount: number, columnCount: number, code: string | undefined): Promise<void>;
427
+ clearRangeFormat(startRow: number, startColumn: number, rowCount: number, columnCount: number): Promise<void>;
428
+ mergeRange(startRow: number, startColumn: number, rowCount: number, columnCount: number): Promise<void>;
429
+ unmergeRanges(addresses: string[]): Promise<void>;
430
+ setRangeBorder(startRow: number, startColumn: number, rowCount: number, columnCount: number, mode: 'all' | 'outer' | 'inner' | 'clear'): Promise<void>;
431
+ toZip(): Promise<Uint8Array>;
432
+ moveChart(chartIndex: number, position: {
433
+ from: {
434
+ row: number;
435
+ column: number;
436
+ rowOffset?: number;
437
+ columnOffset?: number;
438
+ };
439
+ to?: {
440
+ row: number;
441
+ column: number;
442
+ rowOffset?: number;
443
+ columnOffset?: number;
444
+ };
445
+ }): Promise<void>;
446
+ dispose(): Promise<void>;
447
+ editableCellAddress(address: string): string;
448
+ private rebuildActiveSheetRenderModel;
449
+ private runUserMutation;
450
+ private runWorksheetStructureMutation;
451
+ private cellStyleId;
452
+ private runScopedTransaction;
453
+ private cellEditHistoryGroup;
454
+ private range;
455
+ }
456
+
457
+ interface SpreadsheetAgentActionContext {
458
+ /** Current selection at the time the action is created. Hosts may pass richer app state later. */
459
+ selection?: SpreadsheetRange;
460
+ /** Optional opaque host payload, for example an agent plan id or UI prompt metadata. */
461
+ metadata?: Record<string, unknown>;
462
+ }
463
+ interface SpreadsheetAgentAction {
464
+ id: string;
465
+ label: string;
466
+ description?: string;
467
+ actor?: string;
468
+ agentRunId?: string;
469
+ agentStepId?: string;
470
+ agentActionId?: string;
471
+ metadata?: Record<string, unknown>;
472
+ run(runtime: SpreadsheetEditorRuntime, context: SpreadsheetAgentActionContext): Promise<void>;
473
+ }
474
+ interface SpreadsheetAgentActionPreview {
475
+ action: SpreadsheetAgentAction;
476
+ context: SpreadsheetAgentActionContext;
477
+ transaction: SpreadsheetAgentTransactionPreview;
478
+ }
479
+ interface SpreadsheetAgentActionApplyResult {
480
+ action: SpreadsheetAgentAction;
481
+ context: SpreadsheetAgentActionContext;
482
+ transaction: ExcelHistoryApplyResult | null;
483
+ }
484
+ declare function previewSpreadsheetAgentAction(runtime: SpreadsheetEditorRuntime, action: SpreadsheetAgentAction, context?: SpreadsheetAgentActionContext): Promise<SpreadsheetAgentActionPreview>;
485
+ declare function applySpreadsheetAgentAction(runtime: SpreadsheetEditorRuntime, action: SpreadsheetAgentAction, context?: SpreadsheetAgentActionContext): Promise<SpreadsheetAgentActionApplyResult>;
486
+
487
+ interface SpreadsheetCellEditorOptions {
488
+ textarea: HTMLTextAreaElement;
489
+ onCommit: (value: string) => void | Promise<void>;
490
+ onCancel?: () => void;
491
+ }
492
+ declare class SpreadsheetCellEditor {
493
+ private readonly options;
494
+ constructor(options: SpreadsheetCellEditorOptions);
495
+ open(rect: SpreadsheetRect, value: string): void;
496
+ commit(): Promise<void>;
497
+ cancel(): void;
498
+ close(): void;
499
+ }
500
+
501
+ declare function applyWheelDelta(scroll: SpreadsheetScrollState, deltaX: number, deltaY: number): SpreadsheetScrollState;
502
+ interface SpreadsheetScrollbarGeometry {
503
+ trackLength: number;
504
+ thumbStart: number;
505
+ thumbLength: number;
506
+ maxScroll: number;
507
+ }
508
+ interface SpreadsheetScrollbarState {
509
+ horizontal: SpreadsheetScrollbarGeometry;
510
+ vertical: SpreadsheetScrollbarGeometry;
511
+ }
512
+ declare function computeScrollbarState(layout: SpreadsheetLayout, viewportSize: SpreadsheetSize, freeze: SpreadsheetFreezeState, scroll: SpreadsheetScrollState, scrollbarThickness?: number): SpreadsheetScrollbarState;
513
+ declare function scrollFromThumbPosition(geometry: SpreadsheetScrollbarGeometry, thumbStart: number): number;
514
+
515
+ declare const SPREADSHEET_COLUMN_RESIZE_MIN = 24;
516
+ declare const SPREADSHEET_ROW_RESIZE_MIN = 12;
517
+ declare const SPREADSHEET_RESIZE_HIT_TOLERANCE = 4;
518
+ interface SpreadsheetResizeHandle {
519
+ kind: 'column' | 'row';
520
+ index: number;
521
+ startSize: number;
522
+ guidePosition: number;
523
+ minSize: number;
524
+ }
525
+ interface SpreadsheetResizeDragState extends SpreadsheetResizeHandle {
526
+ startClientX: number;
527
+ startClientY: number;
528
+ currentSize: number;
529
+ currentGuidePosition: number;
530
+ }
531
+ declare function hitSpreadsheetResizeHandle(layout: SpreadsheetLayout, viewports: readonly SpreadsheetViewport[], point: {
532
+ x: number;
533
+ y: number;
534
+ }): SpreadsheetResizeHandle | null;
535
+ declare function startSpreadsheetResizeDrag(handle: SpreadsheetResizeHandle, event: {
536
+ clientX: number;
537
+ clientY: number;
538
+ }): SpreadsheetResizeDragState;
539
+ declare function updateSpreadsheetResizeDrag(drag: SpreadsheetResizeDragState, event: {
540
+ clientX: number;
541
+ clientY: number;
542
+ }): SpreadsheetResizeDragState;
543
+
544
+ type SpreadsheetMixedValue<T> = T | 'mixed';
545
+ interface SpreadsheetSelectionFormatState {
546
+ font: {
547
+ bold: SpreadsheetMixedValue<boolean>;
548
+ italic: SpreadsheetMixedValue<boolean>;
549
+ underline: SpreadsheetMixedValue<boolean>;
550
+ color: SpreadsheetMixedValue<ExcelColorModel | undefined>;
551
+ };
552
+ fill: {
553
+ foregroundColor: SpreadsheetMixedValue<ExcelColorModel | undefined>;
554
+ };
555
+ numberFormatCode: SpreadsheetMixedValue<string | undefined>;
556
+ alignment: {
557
+ horizontal: SpreadsheetMixedValue<'left' | 'center' | 'right'>;
558
+ vertical: SpreadsheetMixedValue<'top' | 'center' | 'bottom'>;
559
+ };
560
+ border: SpreadsheetMixedValue<ExcelBorderModel>;
561
+ }
562
+ declare function summarizeSpreadsheetSelectionFormat(model: SpreadsheetSheetRenderModel, selection: SpreadsheetSelectionState): SpreadsheetSelectionFormatState;
563
+
564
+ interface SpreadsheetFindOptions {
565
+ query: string;
566
+ matchCase?: boolean;
567
+ }
568
+ interface SpreadsheetFindMatch {
569
+ row: number;
570
+ column: number;
571
+ address: string;
572
+ text: string;
573
+ }
574
+ interface SpreadsheetReplaceTarget {
575
+ address: string;
576
+ value?: ExcelCellValue;
577
+ formula?: string;
578
+ }
579
+ declare function buildSpreadsheetReplacePlan(model: SpreadsheetSheetRenderModel, options: SpreadsheetFindOptions & {
580
+ replacement: string;
581
+ }): SpreadsheetReplaceTarget[];
582
+ declare function findSpreadsheetMatches(model: SpreadsheetSheetRenderModel, options: SpreadsheetFindOptions): SpreadsheetFindMatch[];
583
+ declare function nextSpreadsheetMatch(matches: readonly SpreadsheetFindMatch[], active: {
584
+ row: number;
585
+ column: number;
586
+ }, direction?: 'forward' | 'backward'): SpreadsheetFindMatch | null;
587
+ declare function rangeForSpreadsheetMatch(match: SpreadsheetFindMatch): SpreadsheetRange;
588
+
589
+ interface SpreadsheetEditorChangeEvent {
590
+ kind: 'workbookChange';
591
+ bytes: Uint8Array;
592
+ }
593
+ interface SpreadsheetEditorStateEvent {
594
+ kind: 'stateChange';
595
+ activeSheetName: string;
596
+ selection: SpreadsheetSelectionState;
597
+ editingCell: {
598
+ row: number;
599
+ column: number;
600
+ } | null;
601
+ }
602
+ interface SpreadsheetEditorCellState {
603
+ address: string;
604
+ row: number;
605
+ column: number;
606
+ value: ExcelCellValue;
607
+ displayText: string;
608
+ formula?: string;
609
+ styleId?: number;
610
+ format?: {
611
+ font: unknown;
612
+ fill: unknown;
613
+ border: unknown;
614
+ alignment: unknown;
615
+ numberFormatCode?: string;
616
+ };
617
+ }
618
+ interface SpreadsheetEditorOptions {
619
+ workbookId?: string;
620
+ onChange?: (event: SpreadsheetEditorChangeEvent) => void | Promise<void>;
621
+ showSheetTabs?: boolean;
622
+ /** Isolates editor internals from host-page CSS. Shadow DOM is enabled by default. */
623
+ styleIsolation?: 'shadow' | 'none';
624
+ /** Header filter icons are opt-in; hosts can expose filtering from a column menu instead. */
625
+ enableHeaderFilters?: boolean;
626
+ }
627
+ interface SpreadsheetEditor {
628
+ runtime(): SpreadsheetEditorRuntime;
629
+ selection(): SpreadsheetSelectionState;
630
+ cellState(address: string): SpreadsheetEditorCellState;
631
+ freezeState(): SpreadsheetFreezeState;
632
+ filterState(): ReadonlyMap<number, readonly string[]>;
633
+ activeSheetName(): string;
634
+ setActiveSheet(name: string): Promise<void>;
635
+ addSheet(name: string): Promise<void>;
636
+ renameSheet(sheetName: string, name: string): Promise<void>;
637
+ copySheet(sheetName: string, newName: string): Promise<void>;
638
+ deleteSheet(sheetName: string): Promise<void>;
639
+ moveSheet(sheetName: string, toIndex: number): Promise<void>;
640
+ setCellValue(address: string, value: ExcelCellValue): Promise<void>;
641
+ setCellFormula(address: string, formula: string): Promise<void>;
642
+ formatSelection(kind: 'bold' | 'italic' | 'underline'): Promise<void>;
643
+ setSelectionFontColor(color: ExcelColorModel | undefined): Promise<void>;
644
+ setSelectionFillColor(color: ExcelColorModel | undefined): Promise<void>;
645
+ setSelectionHorizontalAlign(alignment: 'left' | 'center' | 'right'): Promise<void>;
646
+ setSelectionVerticalAlign(alignment: 'top' | 'center' | 'bottom'): Promise<void>;
647
+ setSelectionNumberFormat(code: string | undefined): Promise<void>;
648
+ setSelectionBorder(mode: 'all' | 'outer' | 'inner' | 'clear'): Promise<void>;
649
+ clearSelection(): Promise<void>;
650
+ clearSelectionFormat(): Promise<void>;
651
+ mergeSelection(): Promise<void>;
652
+ unmergeSelection(): Promise<void>;
653
+ freezeSelection(): Promise<void>;
654
+ sortActiveColumn(direction: 'asc' | 'desc'): Promise<void>;
655
+ filterColumn(column: number, values: readonly string[] | null): Promise<void>;
656
+ runTransaction(options: SpreadsheetUserTransactionOptions, run: (editor: SpreadsheetEditor) => Promise<void>): Promise<void>;
657
+ loadWorkbook(bytes: Uint8Array | ArrayBuffer): Promise<void>;
658
+ toZip(): Promise<Uint8Array>;
659
+ canUndo(): boolean;
660
+ canRedo(): boolean;
661
+ undo(): Promise<void>;
662
+ redo(): Promise<void>;
663
+ subscribe(listener: (event: SpreadsheetEditorChangeEvent) => void): () => void;
664
+ subscribeState(listener: (event: SpreadsheetEditorStateEvent) => void): () => void;
665
+ destroy(): void;
666
+ }
667
+ /**
668
+ * Public browser/Electron surface for the spreadsheet editor.
669
+ *
670
+ * The host owns its toolbar and persistence policy. This surface owns the
671
+ * canvas stack, viewport lifecycle, scrolling, and worksheet switching so web
672
+ * and desktop hosts do not rebuild those pieces independently.
673
+ */
674
+ declare function renderSpreadsheetEditor(host: HTMLElement, bytes: Uint8Array | ArrayBuffer, options?: SpreadsheetEditorOptions): Promise<SpreadsheetEditor>;
675
+
676
+ export { type BuildSpreadsheetRenderModelOptions, SPREADSHEET_COLUMN_RESIZE_MIN, SPREADSHEET_RESIZE_HIT_TOLERANCE, SPREADSHEET_ROW_RESIZE_MIN, type SpreadsheetAgentAction, type SpreadsheetAgentActionApplyResult, type SpreadsheetAgentActionContext, type SpreadsheetAgentActionPreview, type SpreadsheetAgentTransactionPreview, type SpreadsheetAgentTransactionRunner, type SpreadsheetAutoFillCell, type SpreadsheetAutoFillDirection, type SpreadsheetAutoFillPlan, SpreadsheetCanvasRenderer, type SpreadsheetCanvasRendererOptions, type SpreadsheetCellEditHistoryOptions, SpreadsheetCellEditor, type SpreadsheetCellEditorOptions, type SpreadsheetClipboardMerge, type SpreadsheetClipboardPayload, type SpreadsheetColumnFilter, type SpreadsheetEditor, type SpreadsheetEditorCellState, type SpreadsheetEditorChangeEvent, type SpreadsheetEditorOptions, SpreadsheetEditorRuntime, type SpreadsheetEditorRuntimeState, type SpreadsheetEditorStateEvent, type SpreadsheetFindMatch, type SpreadsheetFindOptions, type SpreadsheetFreezeState, type SpreadsheetHitCell, type SpreadsheetHitColumnHeader, type SpreadsheetHitCorner, type SpreadsheetHitNone, type SpreadsheetHitResult, type SpreadsheetHitRowHeader, SpreadsheetLayout, type SpreadsheetLayoutOptions, type SpreadsheetMergeInfo, type SpreadsheetMixedValue, type SpreadsheetPasteMode, type SpreadsheetPasteOptions, type SpreadsheetPoint, type SpreadsheetPreviewCellChangeSummary, type SpreadsheetPreviewDiffSummary, type SpreadsheetRange, type SpreadsheetRect, type SpreadsheetRenderCell, type SpreadsheetReplaceTarget, type SpreadsheetResizeDragState, type SpreadsheetResizeHandle, type SpreadsheetResolvedCellStyle, type SpreadsheetScrollState, type SpreadsheetScrollbarGeometry, type SpreadsheetScrollbarState, type SpreadsheetSelectionFormatState, type SpreadsheetSelectionState, type SpreadsheetSheetRenderModel, type SpreadsheetSize, type SpreadsheetSortDirection, type SpreadsheetUserTransactionOptions, type SpreadsheetViewport, type SpreadsheetViewportKind, SpreadsheetViewportManager, type SpreadsheetViewportManagerOptions, type SpreadsheetViewportState, applySpreadsheetAgentAction, applyWheelDelta, buildSpreadsheetAutoFillPlan, buildSpreadsheetClipboardPayload, buildSpreadsheetReplacePlan, buildSpreadsheetSheetRenderModel, clampScroll, clearSpreadsheetRange, computeScrollbarState, createColumnRangeSelection, createColumnSelection, createRowRangeSelection, createRowSelection, createSelection, cssPixelsToExcelColumnWidth, excelColumnWidthToCssPixels, expandRangeForMergedRanges, expandSelectionForMergedRanges, extendSelection, findSpreadsheetMatches, formatSpreadsheetDisplayValue, freezeStateFromPane, freezeStateFromSheet, getRenderCell, hitSpreadsheetResizeHandle, moveSelection, nextSpreadsheetMatch, normalizeSelectionRange, parseTsv, previewSpreadsheetAgentAction, rangeAddressForMatrix, rangeForSpreadsheetMatch, renderSpreadsheetEditor, resolveSpreadsheetCellStyle, resolveSpreadsheetRangeBorder, rowColumnKey, scrollFromThumbPosition, selectionAfterColumnDeletion, selectionAfterRowDeletion, serializeRangeToTsv, setSpreadsheetCellFormula, setSpreadsheetCellValue, setSpreadsheetColumnWidth, setSpreadsheetRangeValues, setSpreadsheetRowHeight, spreadsheetFilterValues, spreadsheetRowsForColumnFilters, spreadsheetRowsForFilter, spreadsheetSortRows, spreadsheetVisibleFilterValues, startSpreadsheetResizeDrag, summarizeSpreadsheetSelectionFormat, supportsSpreadsheetAutoFill, updateSpreadsheetResizeDrag };