@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.
- package/README.md +40 -5
- package/dist/0~6090.js +63 -4
- package/dist/0~7048.js +14 -4
- package/dist/0~spreadsheet-editor.js +13936 -9125
- package/dist/4104.js +1094 -18
- package/dist/internal/features/work/editors/office-checkbox.d.ts +3 -2
- package/dist/internal/features/work/editors/office-menu-keyboard.d.ts +1 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-sum-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-sum.d.ts +19 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-border-per-cell.d.ts +5 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-border.d.ts +15 -1
- package/dist/internal/features/work/editors/spreadsheet-cell-format-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-format.d.ts +36 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-mutation-guard.d.ts +4 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-style-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-style-ribbon.d.ts +9 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-style.d.ts +41 -0
- package/dist/internal/features/work/editors/spreadsheet-clipboard-shortcuts.d.ts +1 -0
- package/dist/internal/features/work/editors/spreadsheet-clipboard.d.ts +13 -0
- package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +253 -0
- package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +40 -0
- package/dist/internal/features/work/editors/spreadsheet-context-menu.d.ts +5 -15
- package/dist/internal/features/work/editors/spreadsheet-editor-ribbon.d.ts +3 -2
- package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-model.d.ts +86 -0
- package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog-panels.d.ts +15 -0
- package/dist/internal/features/work/editors/spreadsheet-format-cells-dialog.d.ts +8 -0
- package/dist/internal/features/work/editors/spreadsheet-go-to.d.ts +24 -0
- package/dist/internal/features/work/editors/spreadsheet-keyboard-navigation.d.ts +4 -0
- package/dist/internal/features/work/editors/spreadsheet-navigation-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-number-format-command.d.ts +24 -0
- package/dist/internal/features/work/editors/spreadsheet-number-format.d.ts +15 -3
- package/dist/internal/features/work/editors/spreadsheet-paste-special-cell.d.ts +17 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special-dialog.d.ts +9 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special-mode.d.ts +11 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special-plan.d.ts +4 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special-sheet.d.ts +23 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special-snapshot.d.ts +10 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special-types.d.ts +127 -0
- package/dist/internal/features/work/editors/spreadsheet-paste-special.d.ts +7 -0
- package/dist/internal/features/work/editors/use-spreadsheet-clipboard.d.ts +36 -0
- package/dist/internal/features/work/work-xlsx-cell-borders.d.ts +25 -0
- package/dist/internal/features/work/work-xlsx-cell-style-writer.d.ts +21 -0
- package/dist/internal/features/work/work-xlsx-cell-style-xml.d.ts +17 -0
- package/dist/internal/features/work/work-xlsx-cell-styles.d.ts +13 -0
- package/dist/internal/features/work/work-xlsx-colors.d.ts +6 -0
- package/dist/internal/features/work/work-xlsx-interop.d.ts +3 -1
- package/dist/internal/features/work/work-xlsx-worksheet-scan.d.ts +1 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/styles.css +665 -1
- package/dist/work-spreadsheet-package-scan.worker.js +7 -3
- package/docs/latest/en/browser-editor-architecture.md +12 -1
- package/package.json +11 -3
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
+
import type { WorkSpreadsheetContent } from '../work-types';
|
|
3
|
+
import { type SpreadsheetCellBorderFormat, type SpreadsheetCellBorderStyle } from './spreadsheet-cell-border';
|
|
4
|
+
import { type SpreadsheetCellFormatPatch, type SpreadsheetHorizontalAlignment, type SpreadsheetVerticalAlignment } from './spreadsheet-cell-format';
|
|
5
|
+
import { type SpreadsheetCellRange } from './spreadsheet-cell-range';
|
|
6
|
+
export declare const spreadsheetFormatCellsTabs: readonly [{
|
|
7
|
+
readonly id: "number";
|
|
8
|
+
readonly label: "数字";
|
|
9
|
+
}, {
|
|
10
|
+
readonly id: "alignment";
|
|
11
|
+
readonly label: "对齐";
|
|
12
|
+
}, {
|
|
13
|
+
readonly id: "font";
|
|
14
|
+
readonly label: "字体";
|
|
15
|
+
}, {
|
|
16
|
+
readonly id: "border";
|
|
17
|
+
readonly label: "边框";
|
|
18
|
+
}, {
|
|
19
|
+
readonly id: "fill";
|
|
20
|
+
readonly label: "填充";
|
|
21
|
+
}, {
|
|
22
|
+
readonly id: "protection";
|
|
23
|
+
readonly label: "保护";
|
|
24
|
+
}];
|
|
25
|
+
export type SpreadsheetFormatCellsTabId = (typeof spreadsheetFormatCellsTabs)[number]['id'];
|
|
26
|
+
export interface SpreadsheetFormatCellsField<T> {
|
|
27
|
+
value: T;
|
|
28
|
+
mixed: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface SpreadsheetFormatCellsFields {
|
|
31
|
+
numberFormat: SpreadsheetFormatCellsField<string>;
|
|
32
|
+
horizontalAlignment: SpreadsheetFormatCellsField<SpreadsheetHorizontalAlignment>;
|
|
33
|
+
verticalAlignment: SpreadsheetFormatCellsField<SpreadsheetVerticalAlignment>;
|
|
34
|
+
wrapText: SpreadsheetFormatCellsField<boolean>;
|
|
35
|
+
rotation: SpreadsheetFormatCellsField<number>;
|
|
36
|
+
fontFamily: SpreadsheetFormatCellsField<string>;
|
|
37
|
+
fontSize: SpreadsheetFormatCellsField<number>;
|
|
38
|
+
fontColor: SpreadsheetFormatCellsField<string>;
|
|
39
|
+
bold: SpreadsheetFormatCellsField<boolean>;
|
|
40
|
+
italic: SpreadsheetFormatCellsField<boolean>;
|
|
41
|
+
underline: SpreadsheetFormatCellsField<boolean>;
|
|
42
|
+
strike: SpreadsheetFormatCellsField<boolean>;
|
|
43
|
+
fillColor: SpreadsheetFormatCellsField<string | null>;
|
|
44
|
+
borders: SpreadsheetFormatCellsField<readonly SpreadsheetCellBorderFormat[]>;
|
|
45
|
+
locked: SpreadsheetFormatCellsField<boolean>;
|
|
46
|
+
hidden: SpreadsheetFormatCellsField<boolean>;
|
|
47
|
+
}
|
|
48
|
+
export interface SpreadsheetFormatCellsDialogSource {
|
|
49
|
+
sheetId: string;
|
|
50
|
+
range: SpreadsheetCellRange;
|
|
51
|
+
activeCell: Cell | null;
|
|
52
|
+
fields: SpreadsheetFormatCellsFields;
|
|
53
|
+
}
|
|
54
|
+
export interface SpreadsheetFormatCellsDraft {
|
|
55
|
+
numberFormat: string;
|
|
56
|
+
horizontalAlignment: SpreadsheetHorizontalAlignment;
|
|
57
|
+
verticalAlignment: SpreadsheetVerticalAlignment;
|
|
58
|
+
wrapText: boolean;
|
|
59
|
+
rotation: number;
|
|
60
|
+
fontFamily: string;
|
|
61
|
+
fontSize: number;
|
|
62
|
+
fontColor: string;
|
|
63
|
+
bold: boolean;
|
|
64
|
+
italic: boolean;
|
|
65
|
+
underline: boolean;
|
|
66
|
+
strike: boolean;
|
|
67
|
+
fillColor: string | null;
|
|
68
|
+
borders: SpreadsheetCellBorderFormat[];
|
|
69
|
+
borderColor: string;
|
|
70
|
+
borderStyle: SpreadsheetCellBorderStyle;
|
|
71
|
+
locked: boolean;
|
|
72
|
+
hidden: boolean;
|
|
73
|
+
}
|
|
74
|
+
export type SpreadsheetFormatCellsTouched = Partial<Record<keyof SpreadsheetCellFormatPatch, true>>;
|
|
75
|
+
export interface SpreadsheetFormatCellsDraftErrors {
|
|
76
|
+
numberFormat?: string;
|
|
77
|
+
fontSize?: string;
|
|
78
|
+
rotation?: string;
|
|
79
|
+
}
|
|
80
|
+
export declare function createSpreadsheetFormatCellsDialogSource(content: WorkSpreadsheetContent, sheetId: string, rangeInput: SpreadsheetCellRange, cells: readonly (readonly (Cell | null)[])[], requestedActiveCell: {
|
|
81
|
+
row: number;
|
|
82
|
+
column: number;
|
|
83
|
+
}): SpreadsheetFormatCellsDialogSource | null;
|
|
84
|
+
export declare function createSpreadsheetFormatCellsDraft(source: SpreadsheetFormatCellsDialogSource): SpreadsheetFormatCellsDraft;
|
|
85
|
+
export declare function spreadsheetFormatCellsPatch(source: SpreadsheetFormatCellsDialogSource, draft: SpreadsheetFormatCellsDraft, touched: SpreadsheetFormatCellsTouched): SpreadsheetCellFormatPatch;
|
|
86
|
+
export declare function spreadsheetFormatCellsDraftErrors(draft: SpreadsheetFormatCellsDraft): SpreadsheetFormatCellsDraftErrors;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import type { SpreadsheetCellFormatPatch } from './spreadsheet-cell-format';
|
|
3
|
+
import type { SpreadsheetFormatCellsDialogSource, SpreadsheetFormatCellsDraft, SpreadsheetFormatCellsDraftErrors, SpreadsheetFormatCellsTabId, SpreadsheetFormatCellsTouched } from './spreadsheet-format-cells-dialog-model';
|
|
4
|
+
interface PanelProps {
|
|
5
|
+
activeTab: SpreadsheetFormatCellsTabId;
|
|
6
|
+
idBase: string;
|
|
7
|
+
source: SpreadsheetFormatCellsDialogSource;
|
|
8
|
+
draft: SpreadsheetFormatCellsDraft;
|
|
9
|
+
errors: SpreadsheetFormatCellsDraftErrors;
|
|
10
|
+
touched: SpreadsheetFormatCellsTouched;
|
|
11
|
+
setDraft: Dispatch<SetStateAction<SpreadsheetFormatCellsDraft>>;
|
|
12
|
+
touch: (field: keyof SpreadsheetCellFormatPatch) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function SpreadsheetFormatCellsPanel(props: PanelProps): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SpreadsheetCellFormatPatch } from './spreadsheet-cell-format';
|
|
2
|
+
import { type SpreadsheetFormatCellsDialogSource } from './spreadsheet-format-cells-dialog-model';
|
|
3
|
+
export declare function SpreadsheetFormatCellsDialog({ source, restoreFocusTarget, onApply, onClose, }: {
|
|
4
|
+
source: SpreadsheetFormatCellsDialogSource;
|
|
5
|
+
restoreFocusTarget: () => HTMLElement | null;
|
|
6
|
+
onApply: (patch: SpreadsheetCellFormatPatch) => boolean;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { WorkSpreadsheetContent } from '../work-types';
|
|
2
|
+
import type { SpreadsheetCellRange } from './spreadsheet-cell-range';
|
|
3
|
+
export type SpreadsheetGoToErrorCode = 'ambiguous-name' | 'empty' | 'hidden-sheet' | 'invalid-reference' | 'multiple-ranges' | 'out-of-bounds' | 'sheet-not-found' | 'unsupported-name';
|
|
4
|
+
export interface SpreadsheetGoToTarget {
|
|
5
|
+
displayReference: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
range: SpreadsheetCellRange;
|
|
8
|
+
selection: SpreadsheetCellRange & {
|
|
9
|
+
row_focus: number;
|
|
10
|
+
column_focus: number;
|
|
11
|
+
};
|
|
12
|
+
sheetId: string;
|
|
13
|
+
source: 'named-range' | 'reference';
|
|
14
|
+
}
|
|
15
|
+
export type SpreadsheetGoToResolution = {
|
|
16
|
+
ok: true;
|
|
17
|
+
target: SpreadsheetGoToTarget;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
code: SpreadsheetGoToErrorCode;
|
|
21
|
+
message: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function resolveSpreadsheetGoToTarget(content: WorkSpreadsheetContent, activeSheetId: string, input: string): SpreadsheetGoToResolution;
|
|
24
|
+
export declare function spreadsheetGoToValidationMessage(content: WorkSpreadsheetContent, activeSheetId: string, input: string): string | 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 createSpreadsheetNavigationExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
+
import type { WorkSpreadsheetContent } from '../work-types';
|
|
3
|
+
import { type SpreadsheetCellRange, type SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
|
|
4
|
+
import type { SpreadsheetCommandContext, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
|
|
5
|
+
import { type OfficeEditorExtension } from './office-editor-extension';
|
|
6
|
+
export type SpreadsheetDecimalPlacesDirection = 'decrease' | 'increase';
|
|
7
|
+
export declare const MAX_SPREADSHEET_DECIMAL_FORMAT_CELLS = 10000;
|
|
8
|
+
export interface SpreadsheetDecimalFormatApiCall {
|
|
9
|
+
name: 'setCellFormatByRange';
|
|
10
|
+
args: [
|
|
11
|
+
'ct',
|
|
12
|
+
NonNullable<Cell['ct']> & {
|
|
13
|
+
fa: string;
|
|
14
|
+
t: string;
|
|
15
|
+
},
|
|
16
|
+
SpreadsheetCellRange,
|
|
17
|
+
{
|
|
18
|
+
id: string;
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
export declare function createSpreadsheetNumberFormatExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
|
|
23
|
+
export declare function canAdjustSpreadsheetDecimalPlaces(content: WorkSpreadsheetContent, sheetId: string, range: SpreadsheetCellRangeInput, direction: SpreadsheetDecimalPlacesDirection): boolean;
|
|
24
|
+
export declare function spreadsheetDecimalFormatApiCalls(cells: readonly (readonly (Cell | null)[])[], range: SpreadsheetCellRangeInput, sheetId: string, direction: SpreadsheetDecimalPlacesDirection): SpreadsheetDecimalFormatApiCall[];
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
-
export type SpreadsheetNumberFormatPreset = 'general' | 'number' | 'percent' | 'custom';
|
|
3
|
-
type SpreadsheetNumberFormatChoice = Exclude<SpreadsheetNumberFormatPreset, 'custom'>;
|
|
2
|
+
export type SpreadsheetNumberFormatPreset = 'general' | 'number' | 'currency' | 'accounting' | 'percent' | 'date' | 'time' | 'scientific' | 'fraction' | 'text' | 'custom';
|
|
3
|
+
export type SpreadsheetNumberFormatChoice = Exclude<SpreadsheetNumberFormatPreset, 'custom'>;
|
|
4
|
+
export declare const spreadsheetNumberFormatPresetLabels: {
|
|
5
|
+
readonly general: "常规";
|
|
6
|
+
readonly number: "数字";
|
|
7
|
+
readonly currency: "货币";
|
|
8
|
+
readonly accounting: "会计专用";
|
|
9
|
+
readonly percent: "百分比";
|
|
10
|
+
readonly date: "短日期";
|
|
11
|
+
readonly time: "时间";
|
|
12
|
+
readonly scientific: "科学计数";
|
|
13
|
+
readonly fraction: "分数";
|
|
14
|
+
readonly text: "文本";
|
|
15
|
+
readonly custom: "自定义";
|
|
16
|
+
};
|
|
4
17
|
export declare function spreadsheetNumberFormatPreset(formatCode?: string): SpreadsheetNumberFormatPreset;
|
|
5
18
|
export declare function spreadsheetNumberFormatCode(preset: SpreadsheetNumberFormatChoice): string;
|
|
6
19
|
export declare function spreadsheetNumberFormatValue(formatCode: string, cell?: Cell | null): NonNullable<Cell['ct']> & {
|
|
@@ -8,4 +21,3 @@ export declare function spreadsheetNumberFormatValue(formatCode: string, cell?:
|
|
|
8
21
|
t: string;
|
|
9
22
|
};
|
|
10
23
|
export declare function adjustSpreadsheetNumberFormat(formatCode: string | undefined, direction: -1 | 1): string;
|
|
11
|
-
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
+
import type { SpreadsheetClipboardCell, SpreadsheetPasteContent, SpreadsheetPasteOperation } from './spreadsheet-paste-special-types';
|
|
3
|
+
export declare const spreadsheetPasteCellInvalid: unique symbol;
|
|
4
|
+
export type SpreadsheetPasteCellResult = Cell | null | typeof spreadsheetPasteCellInvalid;
|
|
5
|
+
export declare function pasteSpreadsheetSpecialCell({ source, destination, content, operation, rowOffset, columnOffset, }: {
|
|
6
|
+
source: SpreadsheetClipboardCell;
|
|
7
|
+
destination: Cell | null | undefined;
|
|
8
|
+
content: SpreadsheetPasteContent;
|
|
9
|
+
operation: SpreadsheetPasteOperation;
|
|
10
|
+
rowOffset: number;
|
|
11
|
+
columnOffset: number;
|
|
12
|
+
}): SpreadsheetPasteCellResult;
|
|
13
|
+
export declare function spreadsheetClipboardCellIsBlank(source: SpreadsheetClipboardCell, content: SpreadsheetPasteContent): boolean;
|
|
14
|
+
export declare function spreadsheetPasteContentSupportsOperation(content: SpreadsheetPasteContent): boolean;
|
|
15
|
+
export declare function numericSpreadsheetCellValue(cell: Cell | null | undefined): number | null;
|
|
16
|
+
export declare function spreadsheetCellHasContent(cell: Cell | null | undefined): boolean;
|
|
17
|
+
export declare function translateSpreadsheetFormula(formula: string, rowOffset: number, columnOffset: number): string | null;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SpreadsheetPasteSpecialOptions } from './spreadsheet-paste-special';
|
|
2
|
+
import type { SpreadsheetPasteSpecialDialogSource } from './use-spreadsheet-clipboard';
|
|
3
|
+
export declare function SpreadsheetPasteSpecialDialog({ source, restoreFocusTarget, onApply, onClose, onValidate, }: {
|
|
4
|
+
source: SpreadsheetPasteSpecialDialogSource;
|
|
5
|
+
restoreFocusTarget: () => HTMLElement | null;
|
|
6
|
+
onApply: (options: SpreadsheetPasteSpecialOptions) => boolean;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onValidate: (options: SpreadsheetPasteSpecialOptions) => string | null;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorkSpreadsheetSheet } from '../work-types';
|
|
2
|
+
import type { SpreadsheetPasteContent } from './spreadsheet-paste-special-types';
|
|
3
|
+
export declare function pasteContentCopiesFormulas(content: SpreadsheetPasteContent): boolean;
|
|
4
|
+
export declare function pasteContentCopiesBorders(content: SpreadsheetPasteContent): boolean;
|
|
5
|
+
export declare function pasteContentCopiesMerges(content: SpreadsheetPasteContent): boolean;
|
|
6
|
+
export declare function pasteContentCopiesValidation(content: SpreadsheetPasteContent): boolean;
|
|
7
|
+
export declare function pasteContentCopiesHyperlinks(content: SpreadsheetPasteContent): boolean;
|
|
8
|
+
export declare function pasteContentCopiesProtection(content: SpreadsheetPasteContent): boolean;
|
|
9
|
+
export declare function columnsContainReadOnlyState(sheet: WorkSpreadsheetSheet, range: {
|
|
10
|
+
column: [number, number];
|
|
11
|
+
}): boolean;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SpreadsheetCellRange } from './spreadsheet-cell-range';
|
|
2
|
+
import { type SpreadsheetClipboardSnapshot, type SpreadsheetPastePlan, type SpreadsheetPasteSource } from './spreadsheet-paste-special-types';
|
|
3
|
+
export declare function planSpreadsheetPaste(snapshot: SpreadsheetClipboardSnapshot, selection: SpreadsheetCellRange, transpose: boolean): SpreadsheetPastePlan | null;
|
|
4
|
+
export declare function spreadsheetPasteSourceAt(snapshot: SpreadsheetClipboardSnapshot, plan: SpreadsheetPastePlan, row: number, column: number, transpose: boolean): SpreadsheetPasteSource;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WorkSpreadsheetContent, WorkSpreadsheetSheet } from '../work-types';
|
|
2
|
+
import { type SpreadsheetCellRange } from './spreadsheet-cell-range';
|
|
3
|
+
import type { SpreadsheetCellWriter, SpreadsheetClipboardSnapshot, SpreadsheetPastePlan, SpreadsheetPasteSpecialOptions } from './spreadsheet-paste-special-types';
|
|
4
|
+
type NativeMerge = {
|
|
5
|
+
r: number;
|
|
6
|
+
c: number;
|
|
7
|
+
rs: number;
|
|
8
|
+
cs: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function applySpreadsheetPasteSheetMetadata(sheet: WorkSpreadsheetSheet, snapshot: SpreadsheetClipboardSnapshot, plan: SpreadsheetPastePlan, processed: Array<{
|
|
11
|
+
row: number;
|
|
12
|
+
column: number;
|
|
13
|
+
}>, options: SpreadsheetPasteSpecialOptions): WorkSpreadsheetSheet;
|
|
14
|
+
export declare function applySpreadsheetPasteBorders(content: WorkSpreadsheetContent, sheetId: string, snapshot: SpreadsheetClipboardSnapshot, plan: SpreadsheetPastePlan, processed: Array<{
|
|
15
|
+
row: number;
|
|
16
|
+
column: number;
|
|
17
|
+
}>, transpose: boolean): WorkSpreadsheetContent;
|
|
18
|
+
export declare function applySpreadsheetPasteMerges(writer: SpreadsheetCellWriter, snapshot: SpreadsheetClipboardSnapshot, plan: SpreadsheetPastePlan, transpose: boolean): Record<string, NativeMerge>;
|
|
19
|
+
export declare function withSpreadsheetPasteMerges(sheet: WorkSpreadsheetSheet, merges: Record<string, NativeMerge>): WorkSpreadsheetSheet;
|
|
20
|
+
export declare function pasteSpreadsheetColumnWidths(sheet: WorkSpreadsheetSheet, snapshot: SpreadsheetClipboardSnapshot, plan: SpreadsheetPastePlan): WorkSpreadsheetSheet;
|
|
21
|
+
export declare function createSpreadsheetCellWriter(source: WorkSpreadsheetSheet): SpreadsheetCellWriter;
|
|
22
|
+
export declare function withSpreadsheetPasteSelection(sheet: WorkSpreadsheetSheet, range: SpreadsheetCellRange): WorkSpreadsheetSheet;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
+
import type { WorkSpreadsheetContent, WorkSpreadsheetSheet } from '../work-types';
|
|
3
|
+
import { type SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
|
|
4
|
+
import { type SpreadsheetClipboardSnapshot, type SpreadsheetPasteContent } from './spreadsheet-paste-special-types';
|
|
5
|
+
export declare function captureSpreadsheetClipboardSnapshot(content: WorkSpreadsheetContent, sheetId: string, selection: SpreadsheetCellRangeInput, plainText: string): SpreadsheetClipboardSnapshot | null;
|
|
6
|
+
export declare function createSpreadsheetTextClipboardSnapshot(plainText: string): SpreadsheetClipboardSnapshot | null;
|
|
7
|
+
export declare function spreadsheetPasteSpecialModeAvailable(snapshot: SpreadsheetClipboardSnapshot, content: SpreadsheetPasteContent): boolean;
|
|
8
|
+
export declare function validSpreadsheetClipboardSnapshot(snapshot: SpreadsheetClipboardSnapshot): boolean;
|
|
9
|
+
export declare function createSpreadsheetCellReader(sheet: WorkSpreadsheetSheet): (row: number, column: number) => Cell | null | undefined;
|
|
10
|
+
export declare function normalizeSpreadsheetClipboardText(value: string): string;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
+
import type { SpreadsheetResolvedCellBorders } from './spreadsheet-cell-border';
|
|
3
|
+
import type { SpreadsheetCellRange, SpreadsheetCellRangeInput } from './spreadsheet-cell-range';
|
|
4
|
+
import type { WorkSpreadsheetContent, WorkSpreadsheetDataValidationItem, WorkSpreadsheetSheet } from '../work-types';
|
|
5
|
+
export declare const MAX_SPREADSHEET_PASTE_SPECIAL_CELLS = 50000;
|
|
6
|
+
export declare const MAX_SPREADSHEET_ROWS = 1048576;
|
|
7
|
+
export declare const MAX_SPREADSHEET_COLUMNS = 16384;
|
|
8
|
+
export declare const spreadsheetPasteContentOptions: readonly [{
|
|
9
|
+
readonly value: "all";
|
|
10
|
+
readonly label: "全部";
|
|
11
|
+
readonly richOnly: false;
|
|
12
|
+
}, {
|
|
13
|
+
readonly value: "formulas";
|
|
14
|
+
readonly label: "公式";
|
|
15
|
+
readonly richOnly: false;
|
|
16
|
+
}, {
|
|
17
|
+
readonly value: "values";
|
|
18
|
+
readonly label: "值";
|
|
19
|
+
readonly richOnly: false;
|
|
20
|
+
}, {
|
|
21
|
+
readonly value: "formats";
|
|
22
|
+
readonly label: "格式";
|
|
23
|
+
readonly richOnly: true;
|
|
24
|
+
}, {
|
|
25
|
+
readonly value: "comments";
|
|
26
|
+
readonly label: "批注";
|
|
27
|
+
readonly richOnly: true;
|
|
28
|
+
}, {
|
|
29
|
+
readonly value: "validation";
|
|
30
|
+
readonly label: "数据验证";
|
|
31
|
+
readonly richOnly: true;
|
|
32
|
+
}, {
|
|
33
|
+
readonly value: "all-except-borders";
|
|
34
|
+
readonly label: "边框除外的全部";
|
|
35
|
+
readonly richOnly: true;
|
|
36
|
+
}, {
|
|
37
|
+
readonly value: "formulas-and-number-formats";
|
|
38
|
+
readonly label: "公式和数字格式";
|
|
39
|
+
readonly richOnly: true;
|
|
40
|
+
}, {
|
|
41
|
+
readonly value: "values-and-number-formats";
|
|
42
|
+
readonly label: "值和数字格式";
|
|
43
|
+
readonly richOnly: true;
|
|
44
|
+
}, {
|
|
45
|
+
readonly value: "column-widths";
|
|
46
|
+
readonly label: "列宽";
|
|
47
|
+
readonly richOnly: true;
|
|
48
|
+
}];
|
|
49
|
+
export type SpreadsheetPasteContent = (typeof spreadsheetPasteContentOptions)[number]['value'];
|
|
50
|
+
export declare const spreadsheetPasteOperationOptions: readonly [{
|
|
51
|
+
readonly value: "none";
|
|
52
|
+
readonly label: "无";
|
|
53
|
+
}, {
|
|
54
|
+
readonly value: "add";
|
|
55
|
+
readonly label: "加";
|
|
56
|
+
}, {
|
|
57
|
+
readonly value: "subtract";
|
|
58
|
+
readonly label: "减";
|
|
59
|
+
}, {
|
|
60
|
+
readonly value: "multiply";
|
|
61
|
+
readonly label: "乘";
|
|
62
|
+
}, {
|
|
63
|
+
readonly value: "divide";
|
|
64
|
+
readonly label: "除";
|
|
65
|
+
}];
|
|
66
|
+
export type SpreadsheetPasteOperation = (typeof spreadsheetPasteOperationOptions)[number]['value'];
|
|
67
|
+
export interface SpreadsheetPasteSpecialOptions {
|
|
68
|
+
content: SpreadsheetPasteContent;
|
|
69
|
+
operation: SpreadsheetPasteOperation;
|
|
70
|
+
skipBlanks: boolean;
|
|
71
|
+
transpose: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface SpreadsheetClipboardCell {
|
|
74
|
+
cell: Cell | null;
|
|
75
|
+
borders: SpreadsheetResolvedCellBorders;
|
|
76
|
+
validation?: WorkSpreadsheetDataValidationItem;
|
|
77
|
+
protection?: {
|
|
78
|
+
locked: boolean;
|
|
79
|
+
hidden: boolean;
|
|
80
|
+
};
|
|
81
|
+
hyperlink?: NonNullable<WorkSpreadsheetSheet['hyperlink']>[string];
|
|
82
|
+
}
|
|
83
|
+
export interface SpreadsheetClipboardMerge {
|
|
84
|
+
row: number;
|
|
85
|
+
column: number;
|
|
86
|
+
rowSpan: number;
|
|
87
|
+
columnSpan: number;
|
|
88
|
+
}
|
|
89
|
+
export interface SpreadsheetClipboardSnapshot {
|
|
90
|
+
version: 1;
|
|
91
|
+
kind: 'rich' | 'text';
|
|
92
|
+
plainText: string;
|
|
93
|
+
sourceSheetId?: string;
|
|
94
|
+
sourceRange: SpreadsheetCellRange;
|
|
95
|
+
rowCount: number;
|
|
96
|
+
columnCount: number;
|
|
97
|
+
cells: SpreadsheetClipboardCell[][];
|
|
98
|
+
columnWidths?: number[];
|
|
99
|
+
merges: SpreadsheetClipboardMerge[];
|
|
100
|
+
containsUnsupportedFormulaState: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface SpreadsheetPasteSpecialRequest {
|
|
103
|
+
snapshot: SpreadsheetClipboardSnapshot;
|
|
104
|
+
targetSheetId: string;
|
|
105
|
+
targetSelection: SpreadsheetCellRangeInput;
|
|
106
|
+
options: SpreadsheetPasteSpecialOptions;
|
|
107
|
+
}
|
|
108
|
+
export interface SpreadsheetPasteSpecialResult {
|
|
109
|
+
content: WorkSpreadsheetContent;
|
|
110
|
+
targetRange: SpreadsheetCellRange;
|
|
111
|
+
firstCellValue: unknown;
|
|
112
|
+
}
|
|
113
|
+
export interface SpreadsheetPastePlan {
|
|
114
|
+
targetRange: SpreadsheetCellRange;
|
|
115
|
+
rowCount: number;
|
|
116
|
+
columnCount: number;
|
|
117
|
+
}
|
|
118
|
+
export interface SpreadsheetCellWriter {
|
|
119
|
+
get(row: number, column: number): Cell | null | undefined;
|
|
120
|
+
set(row: number, column: number, cell: Cell | null): void;
|
|
121
|
+
finish(sheet: WorkSpreadsheetSheet): WorkSpreadsheetSheet;
|
|
122
|
+
}
|
|
123
|
+
export interface SpreadsheetPasteSource {
|
|
124
|
+
cell: SpreadsheetClipboardCell;
|
|
125
|
+
sourceRow: number;
|
|
126
|
+
sourceColumn: number;
|
|
127
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WorkSpreadsheetContent } from '../work-types';
|
|
2
|
+
import { type SpreadsheetPasteSpecialRequest, type SpreadsheetPasteSpecialResult } from './spreadsheet-paste-special-types';
|
|
3
|
+
export { captureSpreadsheetClipboardSnapshot, createSpreadsheetTextClipboardSnapshot, normalizeSpreadsheetClipboardText, spreadsheetPasteSpecialModeAvailable, } from './spreadsheet-paste-special-snapshot';
|
|
4
|
+
export { MAX_SPREADSHEET_COLUMNS, MAX_SPREADSHEET_PASTE_SPECIAL_CELLS, MAX_SPREADSHEET_ROWS, spreadsheetPasteContentOptions, spreadsheetPasteOperationOptions, } from './spreadsheet-paste-special-types';
|
|
5
|
+
export type { SpreadsheetClipboardCell, SpreadsheetClipboardMerge, SpreadsheetClipboardSnapshot, SpreadsheetPasteContent, SpreadsheetPasteOperation, SpreadsheetPasteSpecialOptions, SpreadsheetPasteSpecialRequest, SpreadsheetPasteSpecialResult, } from './spreadsheet-paste-special-types';
|
|
6
|
+
export declare function spreadsheetPasteSpecialValidationError(content: WorkSpreadsheetContent, request: SpreadsheetPasteSpecialRequest): string | null;
|
|
7
|
+
export declare function applySpreadsheetPasteSpecial(content: WorkSpreadsheetContent, request: SpreadsheetPasteSpecialRequest): SpreadsheetPasteSpecialResult | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
2
|
+
import type { WorkSpreadsheetContent } from '../work-types';
|
|
3
|
+
import { type SpreadsheetClipboardPort } from './spreadsheet-clipboard';
|
|
4
|
+
import type { SpreadsheetClipboardCommandPort } from './spreadsheet-command-controller';
|
|
5
|
+
import type { SpreadsheetCellRange } from './spreadsheet-cell-range';
|
|
6
|
+
import { type SpreadsheetClipboardSnapshot, type SpreadsheetPasteContent, type SpreadsheetPasteSpecialOptions } from './spreadsheet-paste-special';
|
|
7
|
+
export interface SpreadsheetClipboardSelectionSource {
|
|
8
|
+
sheetId: string;
|
|
9
|
+
range: SpreadsheetCellRange;
|
|
10
|
+
plainText: string;
|
|
11
|
+
}
|
|
12
|
+
export interface SpreadsheetPasteSpecialDialogSource {
|
|
13
|
+
snapshot: SpreadsheetClipboardSnapshot;
|
|
14
|
+
targetSheetId: string;
|
|
15
|
+
targetRange: SpreadsheetCellRange;
|
|
16
|
+
invoker: HTMLElement | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function useSpreadsheetClipboard({ clipboard, canAccessSelection, clearSelection, commit, contentRef, editable, fallbackFocusTarget, getSelection, }: {
|
|
19
|
+
clipboard?: SpreadsheetClipboardPort;
|
|
20
|
+
canAccessSelection: boolean;
|
|
21
|
+
clearSelection: () => boolean;
|
|
22
|
+
commit: (content: WorkSpreadsheetContent) => boolean;
|
|
23
|
+
contentRef: MutableRefObject<WorkSpreadsheetContent>;
|
|
24
|
+
editable: boolean;
|
|
25
|
+
fallbackFocusTarget: () => HTMLElement | null;
|
|
26
|
+
getSelection: () => SpreadsheetClipboardSelectionSource | null;
|
|
27
|
+
}): {
|
|
28
|
+
applyDialog: (options: SpreadsheetPasteSpecialOptions) => boolean;
|
|
29
|
+
closeDialog: () => void;
|
|
30
|
+
commandPort: SpreadsheetClipboardCommandPort;
|
|
31
|
+
copyToDataTransfer: (data: DataTransfer, cut: boolean) => boolean;
|
|
32
|
+
dialogSource: SpreadsheetPasteSpecialDialogSource | null;
|
|
33
|
+
pasteText: (plainText: string, content?: SpreadsheetPasteContent, notify?: boolean) => boolean;
|
|
34
|
+
restoreDialogFocusTarget: () => HTMLElement | null;
|
|
35
|
+
validateDialog: (options: SpreadsheetPasteSpecialOptions) => string | null;
|
|
36
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Sheet } from '@fortune-sheet/core';
|
|
2
|
+
export type XlsxCellBorderStyle = 'dashDot' | 'dashDotDot' | 'dashed' | 'dotted' | 'double' | 'hair' | 'medium' | 'mediumDashDot' | 'mediumDashDotDot' | 'mediumDashed' | 'slantDashDot' | 'thick' | 'thin';
|
|
3
|
+
export interface XlsxCellBorderLine {
|
|
4
|
+
color: string;
|
|
5
|
+
style: XlsxCellBorderStyle;
|
|
6
|
+
}
|
|
7
|
+
export interface XlsxCellBorder {
|
|
8
|
+
bottom?: XlsxCellBorderLine | null;
|
|
9
|
+
diagonal?: XlsxCellBorderLine | null;
|
|
10
|
+
diagonalDown?: boolean;
|
|
11
|
+
diagonalUp?: boolean;
|
|
12
|
+
left?: XlsxCellBorderLine | null;
|
|
13
|
+
right?: XlsxCellBorderLine | null;
|
|
14
|
+
top?: XlsxCellBorderLine | null;
|
|
15
|
+
}
|
|
16
|
+
export interface XlsxPositionedCellBorder {
|
|
17
|
+
border?: XlsxCellBorder;
|
|
18
|
+
column: number;
|
|
19
|
+
row: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function collectXlsxCellBorders(sheet: Sheet): ReadonlyMap<string, XlsxCellBorder>;
|
|
22
|
+
export declare function fortuneBorderInfoFromXlsxCells(entries: readonly XlsxPositionedCellBorder[]): unknown[];
|
|
23
|
+
export declare function xlsxCellBorderKey(row: number, column: number): string;
|
|
24
|
+
export declare function xlsxCellBorderLineFromFortune(value: unknown): XlsxCellBorderLine | null | undefined;
|
|
25
|
+
export declare function fortuneBorderStyle(style: XlsxCellBorderStyle): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Cell } from '@fortune-sheet/core';
|
|
2
|
+
import type { XlsxCellBorder } from './work-xlsx-cell-borders';
|
|
3
|
+
export declare class XlsxDirectCellStyleWriter {
|
|
4
|
+
private readonly styles;
|
|
5
|
+
private readonly fonts;
|
|
6
|
+
private readonly fills;
|
|
7
|
+
private readonly borders;
|
|
8
|
+
private readonly cellXfs;
|
|
9
|
+
private readonly generatedFonts;
|
|
10
|
+
private readonly generatedFills;
|
|
11
|
+
private readonly generatedBorders;
|
|
12
|
+
private readonly generatedStyles;
|
|
13
|
+
changed: boolean;
|
|
14
|
+
constructor(styles: Document);
|
|
15
|
+
styleId(baseStyleId: number, cell: Cell, border?: XlsxCellBorder): number;
|
|
16
|
+
private fontId;
|
|
17
|
+
private fillId;
|
|
18
|
+
private borderId;
|
|
19
|
+
private updateCounts;
|
|
20
|
+
}
|
|
21
|
+
export declare function hasXlsxDirectCellStyle(cell: Cell): boolean;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { XlsxCellBorderLine } from './work-xlsx-cell-borders';
|
|
2
|
+
export interface XlsxDirectAlignmentStyle {
|
|
3
|
+
horizontal?: 'center' | 'left' | 'right';
|
|
4
|
+
textRotation?: number;
|
|
5
|
+
vertical?: 'bottom' | 'center' | 'top';
|
|
6
|
+
wrapText?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function ensureXlsxStyleCollection(document: Document, name: string, anchors: readonly string[]): Element;
|
|
9
|
+
export declare function defaultXlsxFill(document: Document, patternType: string): Element;
|
|
10
|
+
export declare function defaultXlsxBorder(document: Document): Element;
|
|
11
|
+
export declare function setXlsxBorderLine(document: Document, border: Element, name: 'bottom' | 'diagonal' | 'left' | 'right' | 'top', line: XlsxCellBorderLine | null): void;
|
|
12
|
+
export declare function writeXlsxAlignment(document: Document, xf: Element, style: XlsxDirectAlignmentStyle): void;
|
|
13
|
+
export declare function setXlsxValueChild(document: Document, parent: Element, name: string, value: string, order: readonly string[]): void;
|
|
14
|
+
export declare function setXlsxColorChild(document: Document, parent: Element, color: string, order: readonly string[]): void;
|
|
15
|
+
export declare function setXlsxToggleChild(document: Document, parent: Element, name: string, enabled: boolean, order: readonly string[]): void;
|
|
16
|
+
export declare function setXlsxUnderlineChild(document: Document, parent: Element, enabled: boolean, order: readonly string[]): void;
|
|
17
|
+
export declare function xlsxRgbColor(value: unknown): string | null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Cell, Sheet } from '@fortune-sheet/core';
|
|
2
|
+
import { type XlsxCellBorder } from './work-xlsx-cell-borders';
|
|
3
|
+
import { type XlsxDirectCellStyleWriter } from './work-xlsx-cell-style-writer';
|
|
4
|
+
export { XlsxDirectCellStyleWriter } from './work-xlsx-cell-style-writer';
|
|
5
|
+
export interface XlsxDirectCellStyle {
|
|
6
|
+
border?: XlsxCellBorder;
|
|
7
|
+
column: number;
|
|
8
|
+
row: number;
|
|
9
|
+
style: Partial<Cell>;
|
|
10
|
+
}
|
|
11
|
+
export declare function readXlsxDirectCellStyles(worksheet: Document, styles: Document | null, theme?: Document | null): XlsxDirectCellStyle[];
|
|
12
|
+
export declare function sheetHasDirectCellStyles(sheet: Sheet): boolean;
|
|
13
|
+
export declare function writeXlsxDirectCellStyles(worksheet: Document, sheet: Sheet, styles: XlsxDirectCellStyleWriter): void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface XlsxColorResolver {
|
|
2
|
+
indexed: readonly string[];
|
|
3
|
+
theme: readonly string[];
|
|
4
|
+
}
|
|
5
|
+
export declare function createXlsxColorResolver(styles: Document, theme: Document | null): XlsxColorResolver;
|
|
6
|
+
export declare function resolveXlsxColor(element: Element | undefined, resolver: XlsxColorResolver): string | undefined;
|
|
@@ -2,18 +2,20 @@ import type { Sheet } from '@fortune-sheet/core';
|
|
|
2
2
|
import { OoxmlPackage } from './work-ooxml-package';
|
|
3
3
|
import type { WorkSpreadsheetContent, WorkSpreadsheetDataValidationItem } from './work-types';
|
|
4
4
|
import { type XlsxWorksheetChart } from './work-xlsx-charts';
|
|
5
|
+
import { type XlsxDirectCellStyle } from './work-xlsx-cell-styles';
|
|
5
6
|
import { type FortuneConditionalFormatRule } from './work-xlsx-conditional-format';
|
|
6
7
|
import { type XlsxWorksheetImage } from './work-xlsx-images';
|
|
7
8
|
import { type XlsxManualPageBreaks } from './work-xlsx-page-breaks';
|
|
8
9
|
import { type XlsxPageSetup } from './work-xlsx-page-setup';
|
|
9
10
|
import { type XlsxProtectionFeatures } from './work-xlsx-protection';
|
|
10
|
-
import type
|
|
11
|
+
import { type XlsxWorksheetXmlScan } from './work-xlsx-worksheet-scan';
|
|
11
12
|
type FrozenPane = NonNullable<Sheet['frozen']>;
|
|
12
13
|
export interface XlsxDataValidation {
|
|
13
14
|
references: string[];
|
|
14
15
|
item: FortuneDataValidationItem;
|
|
15
16
|
}
|
|
16
17
|
export interface XlsxSheetFeatures {
|
|
18
|
+
directCellStyles: XlsxDirectCellStyle[];
|
|
17
19
|
frozen?: FrozenPane;
|
|
18
20
|
validations: XlsxDataValidation[];
|
|
19
21
|
conditionalFormats: FortuneConditionalFormatRule[];
|
package/dist/office-kernel.wasm
CHANGED
|
Binary file
|