@a3s-lab/office 0.13.0 → 0.14.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 (52) hide show
  1. package/README.md +40 -5
  2. package/dist/0~6090.js +63 -4
  3. package/dist/0~7048.js +14 -4
  4. package/dist/0~spreadsheet-editor.js +13936 -9125
  5. package/dist/4104.js +1094 -18
  6. package/dist/internal/features/work/editors/office-checkbox.d.ts +3 -2
  7. package/dist/internal/features/work/editors/office-menu-keyboard.d.ts +1 -0
  8. package/dist/internal/features/work/editors/spreadsheet-auto-sum-command.d.ts +3 -0
  9. package/dist/internal/features/work/editors/spreadsheet-auto-sum.d.ts +19 -0
  10. package/dist/internal/features/work/editors/spreadsheet-cell-border-per-cell.d.ts +5 -0
  11. package/dist/internal/features/work/editors/spreadsheet-cell-border.d.ts +15 -1
  12. package/dist/internal/features/work/editors/spreadsheet-cell-format-command.d.ts +3 -0
  13. package/dist/internal/features/work/editors/spreadsheet-cell-format.d.ts +36 -0
  14. package/dist/internal/features/work/editors/spreadsheet-cell-mutation-guard.d.ts +4 -0
  15. package/dist/internal/features/work/editors/spreadsheet-cell-style-command.d.ts +3 -0
  16. package/dist/internal/features/work/editors/spreadsheet-cell-style-ribbon.d.ts +9 -0
  17. package/dist/internal/features/work/editors/spreadsheet-cell-style.d.ts +41 -0
  18. package/dist/internal/features/work/editors/spreadsheet-clipboard-shortcuts.d.ts +1 -0
  19. package/dist/internal/features/work/editors/spreadsheet-clipboard.d.ts +13 -0
  20. package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +253 -0
  21. package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +40 -0
  22. package/dist/internal/features/work/editors/spreadsheet-context-menu.d.ts +5 -15
  23. package/dist/internal/features/work/editors/spreadsheet-editor-ribbon.d.ts +3 -2
  24. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-model.d.ts +86 -0
  25. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-panels.d.ts +15 -0
  26. package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog.d.ts +8 -0
  27. package/dist/internal/features/work/editors/spreadsheet-go-to.d.ts +24 -0
  28. package/dist/internal/features/work/editors/spreadsheet-keyboard-navigation.d.ts +4 -0
  29. package/dist/internal/features/work/editors/spreadsheet-navigation-command.d.ts +3 -0
  30. package/dist/internal/features/work/editors/spreadsheet-number-format-command.d.ts +24 -0
  31. package/dist/internal/features/work/editors/spreadsheet-number-format.d.ts +15 -3
  32. package/dist/internal/features/work/editors/spreadsheet-paste-special-cell.d.ts +17 -0
  33. package/dist/internal/features/work/editors/spreadsheet-paste-special-dialog.d.ts +9 -0
  34. package/dist/internal/features/work/editors/spreadsheet-paste-special-mode.d.ts +11 -0
  35. package/dist/internal/features/work/editors/spreadsheet-paste-special-plan.d.ts +4 -0
  36. package/dist/internal/features/work/editors/spreadsheet-paste-special-sheet.d.ts +23 -0
  37. package/dist/internal/features/work/editors/spreadsheet-paste-special-snapshot.d.ts +10 -0
  38. package/dist/internal/features/work/editors/spreadsheet-paste-special-types.d.ts +127 -0
  39. package/dist/internal/features/work/editors/spreadsheet-paste-special.d.ts +7 -0
  40. package/dist/internal/features/work/editors/use-spreadsheet-clipboard.d.ts +36 -0
  41. package/dist/internal/features/work/work-xlsx-cell-borders.d.ts +25 -0
  42. package/dist/internal/features/work/work-xlsx-cell-style-writer.d.ts +21 -0
  43. package/dist/internal/features/work/work-xlsx-cell-style-xml.d.ts +17 -0
  44. package/dist/internal/features/work/work-xlsx-cell-styles.d.ts +13 -0
  45. package/dist/internal/features/work/work-xlsx-colors.d.ts +6 -0
  46. package/dist/internal/features/work/work-xlsx-interop.d.ts +3 -1
  47. package/dist/internal/features/work/work-xlsx-worksheet-scan.d.ts +1 -0
  48. package/dist/office-kernel.wasm +0 -0
  49. package/dist/styles.css +665 -1
  50. package/dist/work-spreadsheet-package-scan.worker.js +7 -3
  51. package/docs/latest/en/browser-editor-architecture.md +12 -1
  52. package/package.json +11 -3
@@ -1,9 +1,10 @@
1
- import type { ReactNode } from 'react';
2
- export declare function OfficeCheckbox({ ariaLabel, checked, onCheckedChange, children, disabled, className, }: {
1
+ import { type ReactNode } from 'react';
2
+ export declare function OfficeCheckbox({ ariaLabel, checked, onCheckedChange, children, disabled, className, indeterminate, }: {
3
3
  ariaLabel: string;
4
4
  checked: boolean;
5
5
  onCheckedChange: (checked: boolean) => void;
6
6
  children: ReactNode;
7
7
  disabled?: boolean;
8
8
  className?: string;
9
+ indeterminate?: boolean;
9
10
  }): import("react").JSX.Element;
@@ -1,2 +1,3 @@
1
1
  import type { KeyboardEvent } from 'react';
2
2
  export declare function moveOfficeMenuFocus(event: KeyboardEvent<HTMLElement>): boolean;
3
+ export declare function moveOfficeGridMenuFocus(event: KeyboardEvent<HTMLElement>, columns: number): boolean;
@@ -0,0 +1,3 @@
1
+ import type { SpreadsheetCommandContext, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
2
+ import { type OfficeEditorExtension } from './office-editor-extension';
3
+ export declare function createSpreadsheetAutoSumExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
@@ -0,0 +1,19 @@
1
+ import type { WorkSpreadsheetSheet } from '../work-types';
2
+ import { type SpreadsheetCellRange, type SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
3
+ export declare const spreadsheetAutoSumMaximumTargets = 1000;
4
+ export type SpreadsheetAutoSumFunction = 'sum' | 'average' | 'count' | 'max' | 'min';
5
+ export interface SpreadsheetAutoSumWrite {
6
+ range: SpreadsheetCellRange;
7
+ values: string[][];
8
+ }
9
+ export interface SpreadsheetAutoSumPlan {
10
+ formulaBarValue: string;
11
+ function: SpreadsheetAutoSumFunction;
12
+ selection: SpreadsheetCellRange & {
13
+ row_focus: number;
14
+ column_focus: number;
15
+ };
16
+ targetCellCount: number;
17
+ writes: SpreadsheetAutoSumWrite[];
18
+ }
19
+ export declare function planSpreadsheetAutoSum(sheet: WorkSpreadsheetSheet | undefined, selection: SpreadsheetCellRangeInput, functionName: SpreadsheetAutoSumFunction): SpreadsheetAutoSumPlan | null;
@@ -0,0 +1,5 @@
1
+ import type { WorkSpreadsheetContent } from '../work-types';
2
+ import { type SpreadsheetCellBorderFormat } from './spreadsheet-cell-border';
3
+ import { type SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
4
+ export declare const MAX_SPREADSHEET_PER_CELL_BORDER_CELLS = 10000;
5
+ export declare function setSpreadsheetCellBordersPerCell(content: WorkSpreadsheetContent, sheetId: string, range: SpreadsheetCellRangeInput, formats: readonly SpreadsheetCellBorderFormat[]): WorkSpreadsheetContent | null;
@@ -1,4 +1,4 @@
1
- import type { WorkSpreadsheetContent } from '../work-types';
1
+ import type { WorkSpreadsheetContent, WorkSpreadsheetSheet } from '../work-types';
2
2
  import { type SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
3
3
  export declare const spreadsheetCellBorderTargets: readonly ["top", "bottom", "left", "right", "none", "all", "outside", "inside", "horizontal", "vertical", "diagonal"];
4
4
  export type SpreadsheetCellBorderTarget = (typeof spreadsheetCellBorderTargets)[number];
@@ -9,6 +9,20 @@ export interface SpreadsheetCellBorderFormat {
9
9
  color: string;
10
10
  style: SpreadsheetCellBorderStyle;
11
11
  }
12
+ export interface SpreadsheetResolvedCellBorderLine {
13
+ color: string;
14
+ style: string;
15
+ }
16
+ export interface SpreadsheetResolvedCellBorders {
17
+ bottom?: SpreadsheetResolvedCellBorderLine;
18
+ diagonal?: SpreadsheetResolvedCellBorderLine;
19
+ left?: SpreadsheetResolvedCellBorderLine;
20
+ right?: SpreadsheetResolvedCellBorderLine;
21
+ top?: SpreadsheetResolvedCellBorderLine;
22
+ }
12
23
  export declare const MAX_SPREADSHEET_DIAGONAL_BORDER_CELLS = 4096;
24
+ export declare function spreadsheetNativeBorderStyle(style: SpreadsheetCellBorderStyle): string;
13
25
  export declare function canSetSpreadsheetCellBorders(content: WorkSpreadsheetContent, sheetId: string, range: SpreadsheetCellRangeInput, format: SpreadsheetCellBorderFormat): boolean;
14
26
  export declare function setSpreadsheetCellBorders(content: WorkSpreadsheetContent, sheetId: string, range: SpreadsheetCellRangeInput, format: SpreadsheetCellBorderFormat): WorkSpreadsheetContent | null;
27
+ export declare function spreadsheetCellBordersAt(sheet: WorkSpreadsheetSheet | undefined, row: number, column: number): SpreadsheetResolvedCellBorders;
28
+ export declare function normalizeSpreadsheetBorderFormat(format: SpreadsheetCellBorderFormat): SpreadsheetCellBorderFormat | null;
@@ -0,0 +1,3 @@
1
+ import type { SpreadsheetCommandContext, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
2
+ import { type OfficeEditorExtension } from './office-editor-extension';
3
+ export declare function createSpreadsheetCellFormatExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
@@ -0,0 +1,36 @@
1
+ import type { Cell } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetContent, WorkSpreadsheetSheet } from '../work-types';
3
+ import { type SpreadsheetCellBorderFormat } from './spreadsheet-cell-border';
4
+ import { type SpreadsheetCellRange } from './spreadsheet-cell-range';
5
+ export declare const MAX_SPREADSHEET_CELL_FORMAT_CELLS = 10000;
6
+ export type SpreadsheetHorizontalAlignment = 'general' | 'left' | 'center' | 'right';
7
+ export type SpreadsheetVerticalAlignment = 'top' | 'middle' | 'bottom';
8
+ export interface SpreadsheetCellFormatPatch {
9
+ numberFormat?: string;
10
+ horizontalAlignment?: SpreadsheetHorizontalAlignment;
11
+ verticalAlignment?: SpreadsheetVerticalAlignment;
12
+ wrapText?: boolean;
13
+ rotation?: number;
14
+ fontFamily?: string;
15
+ fontSize?: number;
16
+ fontColor?: string;
17
+ bold?: boolean;
18
+ italic?: boolean;
19
+ underline?: boolean;
20
+ strike?: boolean;
21
+ fillColor?: string | null;
22
+ borders?: readonly SpreadsheetCellBorderFormat[];
23
+ locked?: boolean;
24
+ hidden?: boolean;
25
+ }
26
+ export interface SpreadsheetCellFormatRequest {
27
+ sheetId: string;
28
+ range: SpreadsheetCellRange;
29
+ patch: SpreadsheetCellFormatPatch;
30
+ }
31
+ export declare function canApplySpreadsheetCellFormat(content: WorkSpreadsheetContent, request: SpreadsheetCellFormatRequest): boolean;
32
+ export declare function applySpreadsheetCellFormat(content: WorkSpreadsheetContent, request: SpreadsheetCellFormatRequest): WorkSpreadsheetContent | null;
33
+ export declare function spreadsheetCellProtectionAt(sheet: WorkSpreadsheetSheet, row: number, column: number, cell?: Cell | null | undefined): {
34
+ locked: boolean;
35
+ hidden: boolean;
36
+ };
@@ -0,0 +1,4 @@
1
+ import type { WorkSpreadsheetSheet } from '../work-types';
2
+ import { type SpreadsheetCellRange } from './spreadsheet-cell-range';
3
+ export declare function canMutateSpreadsheetCellRange(sheet: WorkSpreadsheetSheet | undefined, range: SpreadsheetCellRange): boolean;
4
+ export declare function canMutateSpreadsheetCellRanges(sheet: WorkSpreadsheetSheet | undefined, ranges: readonly SpreadsheetCellRange[]): boolean;
@@ -0,0 +1,3 @@
1
+ import type { SpreadsheetCommandContext, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
2
+ import { type OfficeEditorExtension } from './office-editor-extension';
3
+ export declare function createSpreadsheetCellStyleExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
@@ -0,0 +1,9 @@
1
+ import type { Cell } from '@fortune-sheet/core';
2
+ import type { SpreadsheetResolvedCellBorders } from './spreadsheet-cell-border';
3
+ import type { SpreadsheetEditorCanCommands, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
4
+ export declare function SpreadsheetCellStyleRibbon({ can, commands, toolbarCell, toolbarCellBorders, }: {
5
+ can: SpreadsheetEditorCanCommands;
6
+ commands: SpreadsheetEditorCommands;
7
+ toolbarCell: Cell | null | undefined;
8
+ toolbarCellBorders?: SpreadsheetResolvedCellBorders;
9
+ }): import("react").JSX.Element;
@@ -0,0 +1,41 @@
1
+ import type { Cell } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetContent } from '../work-types';
3
+ import { type SpreadsheetCellBorderFormat, type SpreadsheetResolvedCellBorders } from './spreadsheet-cell-border';
4
+ import { type SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
5
+ export declare const spreadsheetCellStylePresetIds: readonly ["normal", "good", "bad", "neutral", "calculation", "checkCell", "explanatoryText", "input", "linkedCell", "note", "output", "warningText", "heading1", "heading2", "heading3", "heading4", "total"];
6
+ export type SpreadsheetCellStyleChoice = (typeof spreadsheetCellStylePresetIds)[number];
7
+ export type SpreadsheetCellStylePreset = SpreadsheetCellStyleChoice | 'custom';
8
+ export declare const MAX_SPREADSHEET_CELL_STYLE_CELLS = 10000;
9
+ interface SpreadsheetCellStyleFormat {
10
+ bg: string;
11
+ bl: 0 | 1;
12
+ cl: 0 | 1;
13
+ fc: string;
14
+ ff: string;
15
+ fs: number;
16
+ it: 0 | 1;
17
+ un: 0 | 1;
18
+ }
19
+ export interface SpreadsheetCellStylePreview {
20
+ backgroundColor: string;
21
+ color: string;
22
+ fontSize?: string;
23
+ fontStyle?: 'italic' | 'normal';
24
+ fontWeight?: number;
25
+ textDecoration?: 'none' | 'underline';
26
+ }
27
+ export interface SpreadsheetCellStyleDefinition {
28
+ id: SpreadsheetCellStyleChoice;
29
+ label: string;
30
+ group: '常用' | '数据和模型' | '标题和汇总';
31
+ description: string;
32
+ format: SpreadsheetCellStyleFormat;
33
+ borders?: readonly SpreadsheetCellBorderFormat[];
34
+ preview: SpreadsheetCellStylePreview;
35
+ }
36
+ export declare const spreadsheetCellStyleDefinitions: readonly [SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition, SpreadsheetCellStyleDefinition];
37
+ export declare function spreadsheetCellStyleDefinition(preset: SpreadsheetCellStyleChoice): SpreadsheetCellStyleDefinition;
38
+ export declare function spreadsheetCellStylePreset(cell: Cell | null | undefined, borders?: SpreadsheetResolvedCellBorders): SpreadsheetCellStylePreset;
39
+ export declare function canApplySpreadsheetCellStyle(content: WorkSpreadsheetContent, sheetId: string, range: SpreadsheetCellRangeInput, preset: SpreadsheetCellStyleChoice): boolean;
40
+ export declare function applySpreadsheetCellStyle(content: WorkSpreadsheetContent, sheetId: string, range: SpreadsheetCellRangeInput, preset: SpreadsheetCellStyleChoice): WorkSpreadsheetContent | null;
41
+ export {};
@@ -3,3 +3,4 @@ export interface SpreadsheetClipboardShortcutOptions {
3
3
  execute(): boolean;
4
4
  }
5
5
  export declare function runSpreadsheetClipboardShortcut(event: KeyboardEvent, canExecute: SpreadsheetClipboardShortcutOptions['canExecute'], execute: SpreadsheetClipboardShortcutOptions['execute']): boolean;
6
+ export declare function runSpreadsheetPasteSpecialShortcut(event: KeyboardEvent, canExecute: SpreadsheetClipboardShortcutOptions['canExecute'], execute: SpreadsheetClipboardShortcutOptions['execute']): boolean;
@@ -0,0 +1,13 @@
1
+ import { type SpreadsheetClipboardSnapshot } from './spreadsheet-paste-special';
2
+ export interface SpreadsheetClipboardPort {
3
+ readText(): Promise<string>;
4
+ writeText(value: string): Promise<void>;
5
+ }
6
+ export declare function parseSpreadsheetClipboardText(value: string): string[][];
7
+ export declare const browserSpreadsheetClipboard: SpreadsheetClipboardPort;
8
+ export declare function storeRichSpreadsheetClipboard(snapshot: SpreadsheetClipboardSnapshot): void;
9
+ export declare function spreadsheetClipboardSnapshotForText(plainText: string): SpreadsheetClipboardSnapshot | null;
10
+ export declare function clearRichSpreadsheetClipboard(): void;
11
+ export declare function readSpreadsheetClipboardText(readSystem: (() => Promise<string>) | undefined, readLocal: () => string, timeoutMs?: number, canReadSystem?: () => boolean | Promise<boolean>): Promise<string>;
12
+ export declare function writeSpreadsheetClipboardText(value: string, writeSystem: ((value: string) => Promise<void>) | undefined, writeLocal: (value: string) => void, timeoutMs?: number, onSystemWriteResult?: (succeeded: boolean) => void): Promise<void>;
13
+ export declare function copySpreadsheetSelection(clipboard: SpreadsheetClipboardPort, value: string, cut: boolean): Promise<boolean>;
@@ -80,6 +80,20 @@ export declare const spreadsheetCommandCatalog: {
80
80
  readonly editor: readonly ["Mod-v"];
81
81
  };
82
82
  };
83
+ readonly pasteSpecial: {
84
+ readonly id: "clipboard.pasteSpecial";
85
+ readonly label: "选择性粘贴";
86
+ readonly location: {
87
+ readonly area: "ribbon";
88
+ readonly tab: "home";
89
+ readonly group: "clipboard";
90
+ };
91
+ readonly shortcut: {
92
+ readonly label: "Cmd/Ctrl+Alt+V";
93
+ readonly aria: "Control+Alt+V Meta+Alt+V";
94
+ readonly editor: readonly ["Mod-Alt-v"];
95
+ };
96
+ };
83
97
  readonly cut: {
84
98
  readonly id: "clipboard.cut";
85
99
  readonly label: "剪切";
@@ -173,6 +187,163 @@ export declare const spreadsheetCommandCatalog: {
173
187
  readonly editor: readonly ["Mod-5"];
174
188
  };
175
189
  };
190
+ readonly numberFormatGeneral: {
191
+ readonly id: "number.general";
192
+ readonly label: "常规";
193
+ readonly location: {
194
+ readonly area: "ribbon";
195
+ readonly tab: "home";
196
+ readonly group: "number";
197
+ };
198
+ readonly shortcut: {
199
+ readonly label: "Cmd/Ctrl+Shift+~";
200
+ readonly aria: "Control+Shift+~ Meta+Shift+~";
201
+ readonly editor: readonly ["Mod-Shift-~"];
202
+ };
203
+ };
204
+ readonly numberFormatNumber: {
205
+ readonly id: "number.number";
206
+ readonly label: "数字";
207
+ readonly location: {
208
+ readonly area: "ribbon";
209
+ readonly tab: "home";
210
+ readonly group: "number";
211
+ };
212
+ readonly shortcut: {
213
+ readonly label: "Cmd/Ctrl+Shift+!";
214
+ readonly aria: "Control+Shift+! Meta+Shift+!";
215
+ readonly editor: readonly ["Mod-Shift-!"];
216
+ };
217
+ };
218
+ readonly numberFormatCurrency: {
219
+ readonly id: "number.currency";
220
+ readonly label: "货币";
221
+ readonly location: {
222
+ readonly area: "ribbon";
223
+ readonly tab: "home";
224
+ readonly group: "number";
225
+ };
226
+ readonly shortcut: {
227
+ readonly label: "Cmd/Ctrl+Shift+$";
228
+ readonly aria: "Control+Shift+$ Meta+Shift+$";
229
+ readonly editor: readonly ["Mod-Shift-$"];
230
+ };
231
+ };
232
+ readonly numberFormatAccounting: {
233
+ readonly id: "number.accounting";
234
+ readonly label: "会计专用";
235
+ readonly location: {
236
+ readonly area: "ribbon";
237
+ readonly tab: "home";
238
+ readonly group: "number";
239
+ };
240
+ };
241
+ readonly numberFormatPercent: {
242
+ readonly id: "number.percent";
243
+ readonly label: "百分比";
244
+ readonly location: {
245
+ readonly area: "ribbon";
246
+ readonly tab: "home";
247
+ readonly group: "number";
248
+ };
249
+ readonly shortcut: {
250
+ readonly label: "Cmd/Ctrl+Shift+%";
251
+ readonly aria: "Control+Shift+% Meta+Shift+%";
252
+ readonly editor: readonly ["Mod-Shift-%"];
253
+ };
254
+ };
255
+ readonly numberFormatDate: {
256
+ readonly id: "number.date";
257
+ readonly label: "短日期";
258
+ readonly location: {
259
+ readonly area: "ribbon";
260
+ readonly tab: "home";
261
+ readonly group: "number";
262
+ };
263
+ readonly shortcut: {
264
+ readonly label: "Cmd/Ctrl+Shift+#";
265
+ readonly aria: "Control+Shift+# Meta+Shift+#";
266
+ readonly editor: readonly ["Mod-Shift-#"];
267
+ };
268
+ };
269
+ readonly numberFormatTime: {
270
+ readonly id: "number.time";
271
+ readonly label: "时间";
272
+ readonly location: {
273
+ readonly area: "ribbon";
274
+ readonly tab: "home";
275
+ readonly group: "number";
276
+ };
277
+ readonly shortcut: {
278
+ readonly label: "Cmd/Ctrl+Shift+@";
279
+ readonly aria: "Control+Shift+@ Meta+Shift+@";
280
+ readonly editor: readonly ["Mod-Shift-@"];
281
+ };
282
+ };
283
+ readonly numberFormatScientific: {
284
+ readonly id: "number.scientific";
285
+ readonly label: "科学计数";
286
+ readonly location: {
287
+ readonly area: "ribbon";
288
+ readonly tab: "home";
289
+ readonly group: "number";
290
+ };
291
+ readonly shortcut: {
292
+ readonly label: "Cmd/Ctrl+Shift+^";
293
+ readonly aria: "Control+Shift+^ Meta+Shift+^";
294
+ readonly editor: readonly ["Mod-Shift-^"];
295
+ };
296
+ };
297
+ readonly numberFormatFraction: {
298
+ readonly id: "number.fraction";
299
+ readonly label: "分数";
300
+ readonly location: {
301
+ readonly area: "ribbon";
302
+ readonly tab: "home";
303
+ readonly group: "number";
304
+ };
305
+ };
306
+ readonly numberFormatText: {
307
+ readonly id: "number.text";
308
+ readonly label: "文本";
309
+ readonly location: {
310
+ readonly area: "ribbon";
311
+ readonly tab: "home";
312
+ readonly group: "number";
313
+ };
314
+ };
315
+ readonly decreaseDecimalPlaces: {
316
+ readonly id: "number.decreaseDecimalPlaces";
317
+ readonly label: "减少小数位";
318
+ readonly location: {
319
+ readonly area: "ribbon";
320
+ readonly tab: "home";
321
+ readonly group: "number";
322
+ };
323
+ };
324
+ readonly increaseDecimalPlaces: {
325
+ readonly id: "number.increaseDecimalPlaces";
326
+ readonly label: "增加小数位";
327
+ readonly location: {
328
+ readonly area: "ribbon";
329
+ readonly tab: "home";
330
+ readonly group: "number";
331
+ };
332
+ };
333
+ readonly formatCells: {
334
+ readonly id: "number.formatCells";
335
+ readonly label: "设置单元格格式";
336
+ readonly location: {
337
+ readonly area: "ribbon";
338
+ readonly tab: "home";
339
+ readonly group: "number";
340
+ };
341
+ readonly shortcut: {
342
+ readonly label: "Cmd/Ctrl+1";
343
+ readonly aria: "Control+1 Meta+1";
344
+ readonly editor: readonly ["Mod-1"];
345
+ };
346
+ };
176
347
  readonly borderTop: {
177
348
  readonly id: "font.borderTop";
178
349
  readonly label: "上框线";
@@ -331,6 +502,15 @@ export declare const spreadsheetCommandCatalog: {
331
502
  readonly group: "styles";
332
503
  };
333
504
  };
505
+ readonly cellStyles: {
506
+ readonly id: "styles.cellStyles";
507
+ readonly label: "单元格样式";
508
+ readonly location: {
509
+ readonly area: "ribbon";
510
+ readonly tab: "home";
511
+ readonly group: "styles";
512
+ };
513
+ };
334
514
  readonly insertRowsAbove: {
335
515
  readonly id: "cells.insertRowsAbove";
336
516
  readonly label: "在上方插入行";
@@ -385,6 +565,56 @@ export declare const spreadsheetCommandCatalog: {
385
565
  readonly group: "cells";
386
566
  };
387
567
  };
568
+ readonly autoSum: {
569
+ readonly id: "editing.autoSum";
570
+ readonly label: "自动求和";
571
+ readonly location: {
572
+ readonly area: "ribbon";
573
+ readonly tab: "home";
574
+ readonly group: "editing";
575
+ };
576
+ readonly shortcut: {
577
+ readonly label: "Alt+=";
578
+ readonly aria: "Alt+=";
579
+ readonly editor: readonly ["Alt-equal"];
580
+ };
581
+ };
582
+ readonly autoAverage: {
583
+ readonly id: "editing.autoAverage";
584
+ readonly label: "平均值";
585
+ readonly location: {
586
+ readonly area: "ribbon";
587
+ readonly tab: "home";
588
+ readonly group: "editing";
589
+ };
590
+ };
591
+ readonly autoCount: {
592
+ readonly id: "editing.autoCount";
593
+ readonly label: "计数";
594
+ readonly location: {
595
+ readonly area: "ribbon";
596
+ readonly tab: "home";
597
+ readonly group: "editing";
598
+ };
599
+ };
600
+ readonly autoMaximum: {
601
+ readonly id: "editing.autoMaximum";
602
+ readonly label: "最大值";
603
+ readonly location: {
604
+ readonly area: "ribbon";
605
+ readonly tab: "home";
606
+ readonly group: "editing";
607
+ };
608
+ };
609
+ readonly autoMinimum: {
610
+ readonly id: "editing.autoMinimum";
611
+ readonly label: "最小值";
612
+ readonly location: {
613
+ readonly area: "ribbon";
614
+ readonly tab: "home";
615
+ readonly group: "editing";
616
+ };
617
+ };
388
618
  readonly fillDown: {
389
619
  readonly id: "editing.fillDown";
390
620
  readonly label: "向下填充";
@@ -495,6 +725,29 @@ export declare const spreadsheetCommandCatalog: {
495
725
  readonly editor: readonly ["Mod-f"];
496
726
  };
497
727
  };
728
+ readonly findAndSelect: {
729
+ readonly id: "editing.findAndSelect";
730
+ readonly label: "查找和选择";
731
+ readonly location: {
732
+ readonly area: "ribbon";
733
+ readonly tab: "home";
734
+ readonly group: "editing";
735
+ };
736
+ };
737
+ readonly goTo: {
738
+ readonly id: "editing.goTo";
739
+ readonly label: "定位";
740
+ readonly location: {
741
+ readonly area: "ribbon";
742
+ readonly tab: "home";
743
+ readonly group: "editing";
744
+ };
745
+ readonly shortcut: {
746
+ readonly label: "Ctrl+G 或 F5";
747
+ readonly aria: "Control+G F5";
748
+ readonly editor: readonly ["Control-g", "F5"];
749
+ };
750
+ };
498
751
  readonly insertChart: {
499
752
  readonly id: "insert.chart";
500
753
  readonly label: "插入图表";
@@ -2,13 +2,19 @@ import type { Cell, Selection, Sheet } from '@fortune-sheet/core';
2
2
  import { type SpreadsheetGridSize } from '../spreadsheet-sparse';
3
3
  import type { WorkSpreadsheetContent } from '../work-types';
4
4
  import { type OfficeEditorCanCommands, type OfficeEditorExtension } from './office-editor-extension';
5
+ import type { SpreadsheetAutoSumFunction } from './spreadsheet-auto-sum';
5
6
  import { type SpreadsheetCellClearMode } from './spreadsheet-cell-clear';
6
7
  import type { SpreadsheetCellBorderFormat } from './spreadsheet-cell-border';
8
+ import type { SpreadsheetCellFormatRequest } from './spreadsheet-cell-format';
9
+ import type { SpreadsheetCellRange } from './spreadsheet-cell-range';
10
+ import type { SpreadsheetCellStyleChoice } from './spreadsheet-cell-style';
7
11
  import type { SpreadsheetCellFillDirection } from './spreadsheet-cell-fill';
8
12
  import { type SpreadsheetCellMergeCommand } from './spreadsheet-cell-merge';
9
13
  import type { SpreadsheetFormatPainterMode } from './spreadsheet-format-painter';
10
14
  import { type SpreadsheetFreezePanePreset } from './spreadsheet-freeze-panes';
11
15
  import { type SpreadsheetKeyboardSelection, type SpreadsheetSelectionMove, type SpreadsheetSelectionScope } from './spreadsheet-keyboard-navigation';
16
+ import type { SpreadsheetPasteContent } from './spreadsheet-paste-special';
17
+ import { type SpreadsheetDecimalPlacesDirection } from './spreadsheet-number-format-command';
12
18
  import { type SpreadsheetSheetMoveDirection } from './spreadsheet-sheet-model';
13
19
  export interface SpreadsheetWorkbookCommandPort {
14
20
  autoFillCell: (copyRange: SpreadsheetCommandRange, applyRange: SpreadsheetCommandRange, direction: SpreadsheetCellFillDirection) => void;
@@ -74,10 +80,14 @@ export interface SpreadsheetHistoryCommandPort {
74
80
  export interface SpreadsheetClipboardCommandPort {
75
81
  canCopySelection: boolean;
76
82
  canCutSelection: boolean;
83
+ canOpenPasteSpecial: boolean;
77
84
  canPasteSelection: boolean;
85
+ canPasteSpecial: (content: SpreadsheetPasteContent) => boolean;
78
86
  copySelection: () => boolean;
79
87
  cutSelection: () => boolean;
88
+ openPasteSpecial: () => boolean;
80
89
  pasteSelection: () => boolean;
90
+ pasteSpecial: (content: SpreadsheetPasteContent) => boolean;
81
91
  }
82
92
  export interface SpreadsheetAutoFilterCommandPort {
83
93
  active: boolean;
@@ -94,6 +104,25 @@ export interface SpreadsheetFormatPainterCommandPort {
94
104
  applySelection: (target: SpreadsheetCommandSelection) => boolean;
95
105
  cancel: () => boolean;
96
106
  }
107
+ export interface SpreadsheetFormatCellsOpenRequest {
108
+ sheetId: string;
109
+ range: SpreadsheetCellRange;
110
+ activeCell: {
111
+ row: number;
112
+ column: number;
113
+ };
114
+ cells: (Cell | null)[][];
115
+ }
116
+ export interface SpreadsheetFormatCellsCommandPort {
117
+ canOpen: boolean;
118
+ open: (request: SpreadsheetFormatCellsOpenRequest) => boolean;
119
+ }
120
+ export interface SpreadsheetNavigationCommandPort {
121
+ canOpenFind: boolean;
122
+ canOpenGoTo: boolean;
123
+ openFind: () => boolean;
124
+ openGoTo: () => boolean;
125
+ }
97
126
  export interface SpreadsheetFormulaBarCommandPort {
98
127
  setValue: (value: unknown) => void;
99
128
  }
@@ -104,6 +133,10 @@ export interface SpreadsheetEditorCommands {
104
133
  activateSheet: (sheetId: string) => boolean;
105
134
  activateFormatPainter: (mode: SpreadsheetFormatPainterMode) => boolean;
106
135
  addSheet: () => boolean;
136
+ adjustDecimalPlaces: (direction: SpreadsheetDecimalPlacesDirection) => boolean;
137
+ applyCellStyle: (preset: SpreadsheetCellStyleChoice) => boolean;
138
+ applyCellFormat: (request: SpreadsheetCellFormatRequest) => boolean;
139
+ applyAutoSum: (functionName: SpreadsheetAutoSumFunction) => boolean;
107
140
  applyFormatPainter: (target: SpreadsheetCommandSelection) => boolean;
108
141
  cancelFormatPainter: () => boolean;
109
142
  clearSelectedCells: (mode?: SpreadsheetCellClearMode) => boolean;
@@ -119,8 +152,13 @@ export interface SpreadsheetEditorCommands {
119
152
  moveSheet: (sheetId: string, direction: SpreadsheetSheetMoveDirection) => boolean;
120
153
  moveSelection: (move: SpreadsheetSelectionMove, extend: boolean) => boolean;
121
154
  openAutoFilterMenu: () => boolean;
155
+ openFind: () => boolean;
156
+ openFormatCells: () => boolean;
157
+ openGoTo: () => boolean;
158
+ openPasteSpecial: () => boolean;
122
159
  pasteCells: (values: readonly (readonly unknown[])[]) => boolean;
123
160
  pasteSelection: () => boolean;
161
+ pasteSpecial: (content: SpreadsheetPasteContent) => boolean;
124
162
  recalculateFormula: (scope: 'selection' | 'workbook') => boolean;
125
163
  renameSheet: (sheetId: string, name: string) => boolean;
126
164
  redo: () => boolean;
@@ -149,7 +187,9 @@ export interface SpreadsheetCommandContext {
149
187
  fallbackRange: SpreadsheetCommandRange;
150
188
  formulaBar: SpreadsheetFormulaBarCommandPort | null;
151
189
  formatPainter: SpreadsheetFormatPainterCommandPort;
190
+ formatCells: SpreadsheetFormatCellsCommandPort;
152
191
  history: SpreadsheetHistoryCommandPort | null;
192
+ navigation: SpreadsheetNavigationCommandPort;
153
193
  onChange: (content: WorkSpreadsheetContent) => void;
154
194
  selection: SpreadsheetCommandSelection | null;
155
195
  targetSheetGridSize?: SpreadsheetGridSize | null;
@@ -1,19 +1,14 @@
1
1
  import type { WorkspaceContextMenuItem } from '../../workspace/components/workspace-context-menu';
2
2
  import type { WorkSpreadsheetAgentSelection } from '../work-spreadsheet-agent-context';
3
3
  import type { SpreadsheetEditorCanCommands, SpreadsheetEditorCommands, SpreadsheetStructureAxis } from './spreadsheet-command-controller';
4
- type SpreadsheetContextCan = Pick<SpreadsheetEditorCanCommands, 'clearSelectedCells' | 'pasteCells'>;
5
- type SpreadsheetContextCommands = Pick<SpreadsheetEditorCommands, 'clearSelectedCells' | 'pasteCells'>;
4
+ type SpreadsheetContextCan = Pick<SpreadsheetEditorCanCommands, 'clearSelectedCells' | 'copySelection' | 'cutSelection' | 'openPasteSpecial' | 'pasteSelection'>;
5
+ type SpreadsheetContextCommands = Pick<SpreadsheetEditorCommands, 'clearSelectedCells' | 'copySelection' | 'cutSelection' | 'openPasteSpecial' | 'pasteSelection'>;
6
6
  type SpreadsheetStructureCan = Pick<SpreadsheetEditorCanCommands, 'deleteSelectedStructure' | 'insertSelectedStructure' | 'setSelectedStructureHidden' | 'setSelectedStructureSize' | 'sortSelectedCells'>;
7
7
  type SpreadsheetStructureCommands = Pick<SpreadsheetEditorCommands, 'deleteSelectedStructure' | 'insertSelectedStructure' | 'setSelectedStructureHidden' | 'setSelectedStructureSize' | 'sortSelectedCells'>;
8
8
  type SpreadsheetSortCan = Pick<SpreadsheetEditorCanCommands, 'sortSelectedCells'>;
9
9
  type SpreadsheetSortCommands = Pick<SpreadsheetEditorCommands, 'sortSelectedCells'>;
10
- export interface SpreadsheetClipboardPort {
11
- readText(): Promise<string>;
12
- writeText(value: string): Promise<void>;
13
- }
14
- export declare function spreadsheetCoreContextMenuItems({ can, clipboard, commands, selection, }: {
10
+ export declare function spreadsheetCoreContextMenuItems({ can, commands, selection, }: {
15
11
  can: SpreadsheetContextCan;
16
- clipboard?: SpreadsheetClipboardPort;
17
12
  commands: SpreadsheetContextCommands;
18
13
  selection: Pick<WorkSpreadsheetAgentSelection, 'clipboard' | 'reference'>;
19
14
  }): WorkspaceContextMenuItem[];
@@ -29,10 +24,5 @@ export declare function spreadsheetSortContextMenuItems({ can, commands, idSuffi
29
24
  idSuffix?: string;
30
25
  separatorBefore?: boolean;
31
26
  }): WorkspaceContextMenuItem[];
32
- export declare function parseSpreadsheetClipboardText(value: string): string[][];
33
- export declare const browserSpreadsheetClipboard: SpreadsheetClipboardPort;
34
- export declare function readSpreadsheetClipboardText(readSystem: (() => Promise<string>) | undefined, readLocal: () => string, timeoutMs?: number, canReadSystem?: () => boolean | Promise<boolean>): Promise<string>;
35
- export declare function writeSpreadsheetClipboardText(value: string, writeSystem: ((value: string) => Promise<void>) | undefined, writeLocal: (value: string) => void, timeoutMs?: number): Promise<void>;
36
- export declare function copySpreadsheetSelection(clipboard: SpreadsheetClipboardPort, value: string, cut: boolean): Promise<boolean>;
37
- export declare function pasteSpreadsheetSelection(clipboard: SpreadsheetClipboardPort, paste: SpreadsheetContextCommands['pasteCells']): Promise<void>;
38
- export {};
27
+ export { browserSpreadsheetClipboard, copySpreadsheetSelection, parseSpreadsheetClipboardText, readSpreadsheetClipboardText, writeSpreadsheetClipboardText, } from './spreadsheet-clipboard';
28
+ export type { SpreadsheetClipboardPort } from './spreadsheet-clipboard';
@@ -1,12 +1,13 @@
1
1
  import type { Cell, Selection } from '@fortune-sheet/core';
2
2
  import type { WorkSpreadsheetContent } from '../work-types';
3
+ import type { SpreadsheetResolvedCellBorders } from './spreadsheet-cell-border';
3
4
  import { type SpreadsheetRibbonTabId } from './spreadsheet-command-catalog';
4
5
  import type { SpreadsheetEditorCanCommands, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
5
6
  import type { SpreadsheetFormatPainterMode } from './spreadsheet-format-painter';
6
7
  import type { SpreadsheetWorkbookPanelView } from './spreadsheet-workbook-panel';
7
8
  import { type WorkOfficeFileAction } from './work-office-chrome';
8
9
  export type { SpreadsheetRibbonTabId } from './spreadsheet-command-catalog';
9
- export declare function SpreadsheetEditorRibbon({ activeTab, autoFilterActive, can, commands, content, fileActions, findOpen, formatPainterMode, freezePanesActive, freezePanesSelection, gridLinesVisible, panelId, onOpenFind, onTabChange, onTogglePanel, panel, toolbarCell, }: {
10
+ export declare function SpreadsheetEditorRibbon({ activeTab, autoFilterActive, can, commands, content, fileActions, findOpen, formatPainterMode, freezePanesActive, freezePanesSelection, gridLinesVisible, panelId, onTabChange, onTogglePanel, panel, toolbarCell, toolbarCellBorders, }: {
10
11
  activeTab: SpreadsheetRibbonTabId;
11
12
  autoFilterActive?: boolean;
12
13
  can: SpreadsheetEditorCanCommands;
@@ -19,9 +20,9 @@ export declare function SpreadsheetEditorRibbon({ activeTab, autoFilterActive, c
19
20
  freezePanesSelection?: Selection;
20
21
  gridLinesVisible: boolean;
21
22
  panelId: string;
22
- onOpenFind: () => void;
23
23
  onTabChange: (tab: SpreadsheetRibbonTabId) => void;
24
24
  onTogglePanel: (panel: SpreadsheetWorkbookPanelView, trigger: HTMLButtonElement) => void;
25
25
  panel: SpreadsheetWorkbookPanelView | null;
26
26
  toolbarCell: Cell | null | undefined;
27
+ toolbarCellBorders?: SpreadsheetResolvedCellBorders;
27
28
  }): import("react").JSX.Element;