ooxml-excel-editor 1.1.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/CHANGELOG.md +95 -0
- package/LICENSE +21 -0
- package/README.md +516 -0
- package/dist/chunks/plugin-overlay-Cfnn9EOi.js +7144 -0
- package/dist/chunks/worker-client.stub-BQVZfaLd.js +7 -0
- package/dist/components/ActionToolbar.vue.d.ts +9 -0
- package/dist/components/ExcelViewer.vue.d.ts +283 -0
- package/dist/components/ExportDialog.vue.d.ts +14 -0
- package/dist/components/FilterPopup.vue.d.ts +21 -0
- package/dist/components/FindBar.vue.d.ts +27 -0
- package/dist/components/SheetTabs.vue.d.ts +11 -0
- package/dist/components/ToolbarMenu.vue.d.ts +10 -0
- package/dist/components/ViewerToolbar.vue.d.ts +21 -0
- package/dist/components/export-types.d.ts +14 -0
- package/dist/components/toolbar-icons.d.ts +7 -0
- package/dist/components/toolbar-types.d.ts +18 -0
- package/dist/composables/useExcelDocument.d.ts +17 -0
- package/dist/composables/worker-client.d.ts +3 -0
- package/dist/composables/worker-client.stub.d.ts +3 -0
- package/dist/core/edit/commands.d.ts +94 -0
- package/dist/core/edit/default-editor.d.ts +2 -0
- package/dist/core/edit/edit-controller.d.ts +137 -0
- package/dist/core/edit/editor-context.d.ts +40 -0
- package/dist/core/edit/editor-host.d.ts +22 -0
- package/dist/core/edit/permissions.d.ts +3 -0
- package/dist/core/edit/types.d.ts +23 -0
- package/dist/core/export/composite.d.ts +18 -0
- package/dist/core/export/data-export.d.ts +9 -0
- package/dist/core/export/exporter.d.ts +64 -0
- package/dist/core/export/index.d.ts +9 -0
- package/dist/core/export/paginate.d.ts +36 -0
- package/dist/core/export/pdf.d.ts +28 -0
- package/dist/core/export/print.d.ts +3 -0
- package/dist/core/export/raster.d.ts +13 -0
- package/dist/core/export/types.d.ts +92 -0
- package/dist/core/export/vector-pdf.d.ts +42 -0
- package/dist/core/export/xlsx-writer.d.ts +15 -0
- package/dist/core/finalize.d.ts +10 -0
- package/dist/core/format/builtin-formats.d.ts +7 -0
- package/dist/core/format/color.d.ts +11 -0
- package/dist/core/format/date-serial.d.ts +16 -0
- package/dist/core/format/number-format.d.ts +5 -0
- package/dist/core/formula/engine.d.ts +27 -0
- package/dist/core/formula/hyperformula-adapter.d.ts +3 -0
- package/dist/core/formula/recalc.d.ts +9 -0
- package/dist/core/formula/refs.d.ts +21 -0
- package/dist/core/index.d.ts +52 -0
- package/dist/core/layout/autofit.d.ts +2 -0
- package/dist/core/layout/freeze.d.ts +11 -0
- package/dist/core/layout/grid-metrics.d.ts +37 -0
- package/dist/core/layout/merges.d.ts +14 -0
- package/dist/core/layout/units.d.ts +20 -0
- package/dist/core/layout/viewport.d.ts +29 -0
- package/dist/core/loader.d.ts +5 -0
- package/dist/core/model/clone.d.ts +9 -0
- package/dist/core/model/data-access.d.ts +30 -0
- package/dist/core/model/mutations.d.ts +46 -0
- package/dist/core/model/snapshot.d.ts +14 -0
- package/dist/core/model/structure.d.ts +26 -0
- package/dist/core/model/types.d.ts +289 -0
- package/dist/core/overlay/anchor.d.ts +9 -0
- package/dist/core/overlay/chart-mapper.d.ts +3 -0
- package/dist/core/overlay/echarts-loader.d.ts +3 -0
- package/dist/core/parse.worker.d.ts +14 -0
- package/dist/core/parser/chart-parser.d.ts +3 -0
- package/dist/core/parser/drawing-parser.d.ts +3 -0
- package/dist/core/parser/exceljs-adapter.d.ts +8 -0
- package/dist/core/parser/index.d.ts +3 -0
- package/dist/core/parser/page-break-parser.d.ts +3 -0
- package/dist/core/parser/raw-xml.d.ts +15 -0
- package/dist/core/parser/sparkline-parser.d.ts +3 -0
- package/dist/core/parser/theme.d.ts +3 -0
- package/dist/core/plugin.d.ts +180 -0
- package/dist/core/progress.d.ts +7 -0
- package/dist/core/render/autofilter.d.ts +14 -0
- package/dist/core/render/borders.d.ts +13 -0
- package/dist/core/render/canvas-renderer.d.ts +225 -0
- package/dist/core/render/conditional.d.ts +25 -0
- package/dist/core/render/fills.d.ts +2 -0
- package/dist/core/render/text.d.ts +20 -0
- package/dist/core/render/theme.d.ts +19 -0
- package/dist/core/viewer/controller.d.ts +339 -0
- package/dist/core/viewer/overlay-manager.d.ts +27 -0
- package/dist/core/viewer/plugin-overlay.d.ts +8 -0
- package/dist/core.d.ts +2 -0
- package/dist/core.js +74 -0
- package/dist/demo-shared/demo-editor.d.ts +2 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +1493 -0
- package/dist/react/ExcelViewer.d.ts +153 -0
- package/dist/react/index.d.ts +11 -0
- package/dist/react/use-excel-document.d.ts +17 -0
- package/dist/react.d.ts +2 -0
- package/dist/react.js +838 -0
- package/dist/style.css +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ResolvedToolbarItem } from './toolbar-types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
items: ResolvedToolbarItem[];
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
6
|
+
containerEl: HTMLDivElement;
|
|
7
|
+
measureEl: HTMLDivElement;
|
|
8
|
+
}, HTMLDivElement>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { ExcelPlugin, ToolbarItem } from '../core/plugin';
|
|
2
|
+
import { ExcelSource } from '../core/loader';
|
|
3
|
+
import { CellModel, CellStyleFn, MergeRange, TransformModelFn, WorkbookModel } from '../core/model/types';
|
|
4
|
+
import { ParseProgress } from '../core/progress';
|
|
5
|
+
import { ReadOptions } from '../core/model/data-access';
|
|
6
|
+
import { ViewerTheme } from '../core/render/theme';
|
|
7
|
+
import { FormulaEngineFactory } from '../core/formula/engine';
|
|
8
|
+
import { CellChangePayload, DimChangePayload, DirtyChangePayload, ImageChangePayload, StructChangePayload } from '../core/edit/edit-controller';
|
|
9
|
+
import { EditorResolver } from '../core/edit/editor-context';
|
|
10
|
+
import { ImageExportOptions, PdfExportOptions, PrintOptions } from '../core/export';
|
|
11
|
+
import { ResolvedToolbarItem } from './toolbar-types';
|
|
12
|
+
type __VLS_Props = {
|
|
13
|
+
src?: ExcelSource;
|
|
14
|
+
fileName?: string;
|
|
15
|
+
/** 外观主题(覆盖默认配色) */
|
|
16
|
+
theme?: Partial<ViewerTheme>;
|
|
17
|
+
/** 数据钩子: 解析后改模型再渲染 */
|
|
18
|
+
transformModel?: TransformModelFn;
|
|
19
|
+
/** 渲染钩子: 按单元格覆盖样式 */
|
|
20
|
+
cellStyle?: CellStyleFn;
|
|
21
|
+
/** 单击超链接是否默认在新标签打开(false 时只派发 hyperlink-click 事件) */
|
|
22
|
+
openLinks?: boolean;
|
|
23
|
+
/** 插件列表(打包主题/钩子/事件/overlay) */
|
|
24
|
+
plugins?: ExcelPlugin[];
|
|
25
|
+
/**
|
|
26
|
+
* 操作工具栏(顶栏下一行): 内置 'find'/'filter'/'sort' 默认显示。
|
|
27
|
+
* false 隐藏整条;数组显式控制项与顺序(内置 id 或自定义 ToolbarItem)。
|
|
28
|
+
* 插件 ExcelPlugin.toolbar 贡献的项总会追加(opt-in)。
|
|
29
|
+
*/
|
|
30
|
+
toolbar?: boolean | Array<string | ToolbarItem>;
|
|
31
|
+
/** 编辑总开关:默认 false = 只读(行为不变)。开启后才能进入编辑(E0:闸门) */
|
|
32
|
+
editable?: boolean;
|
|
33
|
+
/** 按格只读判定:返回 true = 只读(cell 为空格时传 null) */
|
|
34
|
+
cellReadOnly?: (cell: CellModel | null, pos: {
|
|
35
|
+
row: number;
|
|
36
|
+
col: number;
|
|
37
|
+
}) => boolean | void;
|
|
38
|
+
/** 只读区域(0-based 闭区间);命中即只读 */
|
|
39
|
+
readOnlyRanges?: MergeRange[];
|
|
40
|
+
/** 自定义单元格编辑器(按格返回工厂;覆盖插件 editor)。需 editable 开启 */
|
|
41
|
+
editor?: EditorResolver;
|
|
42
|
+
/** 公式重算(E4):默认 false 沿用缓存值。开启后编辑公式/被引用格 → 依赖格自动重算。需 editable */
|
|
43
|
+
recalc?: boolean;
|
|
44
|
+
/** 自定义/自研公式引擎工厂(可换引擎);不给则用默认 HyperFormula(需 npm i hyperformula) */
|
|
45
|
+
formulaEngine?: FormulaEngineFactory;
|
|
46
|
+
};
|
|
47
|
+
/** 单元格当前屏幕矩形(render-area 相对坐标);供 overlay slot / 命令式定位 */
|
|
48
|
+
declare function rectOf(row: number, col: number): {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
w: number;
|
|
52
|
+
h: number;
|
|
53
|
+
} | null;
|
|
54
|
+
/** 区域当前屏幕矩形(左上到右下的并集) */
|
|
55
|
+
declare function rectOfRange(range: MergeRange): {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
w: number;
|
|
59
|
+
h: number;
|
|
60
|
+
} | null;
|
|
61
|
+
declare function __VLS_template(): {
|
|
62
|
+
attrs: Partial<{}>;
|
|
63
|
+
slots: {
|
|
64
|
+
header?(_: {
|
|
65
|
+
workbook: WorkbookModel;
|
|
66
|
+
zoom: number;
|
|
67
|
+
setZoom: (z: number) => number;
|
|
68
|
+
downloadImage: (opts?: ImageExportOptions) => Promise<void>;
|
|
69
|
+
downloadPdf: (opts?: PdfExportOptions) => Promise<void>;
|
|
70
|
+
print: (opts?: PrintOptions) => Promise<void>;
|
|
71
|
+
}): any;
|
|
72
|
+
toolbar?(_: {
|
|
73
|
+
items: ResolvedToolbarItem[];
|
|
74
|
+
}): any;
|
|
75
|
+
overlay?(_: {
|
|
76
|
+
rectOf: typeof rectOf;
|
|
77
|
+
rectOfRange: typeof rectOfRange;
|
|
78
|
+
tick: number;
|
|
79
|
+
}): any;
|
|
80
|
+
loading?(_: {
|
|
81
|
+
progress: {
|
|
82
|
+
stage: "read" | "parse" | "build";
|
|
83
|
+
ratio?: number | undefined;
|
|
84
|
+
} | null;
|
|
85
|
+
label: string;
|
|
86
|
+
pct: number | null;
|
|
87
|
+
}): any;
|
|
88
|
+
error?(_: {
|
|
89
|
+
error: string;
|
|
90
|
+
}): any;
|
|
91
|
+
empty?(_: {}): any;
|
|
92
|
+
statusbar?(_: {
|
|
93
|
+
stats: {
|
|
94
|
+
count: number;
|
|
95
|
+
numCount: number;
|
|
96
|
+
sum: number;
|
|
97
|
+
avg: number;
|
|
98
|
+
min: number;
|
|
99
|
+
max: number;
|
|
100
|
+
} | null;
|
|
101
|
+
range: string;
|
|
102
|
+
}): any;
|
|
103
|
+
};
|
|
104
|
+
refs: {
|
|
105
|
+
rootEl: HTMLDivElement;
|
|
106
|
+
renderAreaEl: HTMLDivElement;
|
|
107
|
+
canvasEl: HTMLCanvasElement;
|
|
108
|
+
ovMain: HTMLDivElement;
|
|
109
|
+
ovFCol: HTMLDivElement;
|
|
110
|
+
ovFRow: HTMLDivElement;
|
|
111
|
+
ovCorner: HTMLDivElement;
|
|
112
|
+
scrollerEl: HTMLDivElement;
|
|
113
|
+
spacerEl: HTMLDivElement;
|
|
114
|
+
pluginOvEl: HTMLDivElement;
|
|
115
|
+
editorSlotEl: HTMLDivElement;
|
|
116
|
+
};
|
|
117
|
+
rootEl: HTMLDivElement;
|
|
118
|
+
};
|
|
119
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
120
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
121
|
+
load(src: ExcelSource): void;
|
|
122
|
+
getWorkbook(): WorkbookModel | null;
|
|
123
|
+
getActiveSheet(): number;
|
|
124
|
+
setActiveSheet(index: number): void;
|
|
125
|
+
getSelection(): MergeRange | null;
|
|
126
|
+
setSelection(range: MergeRange): void;
|
|
127
|
+
rectOf(row: number, col: number): import('../core/plugin').Rect | null;
|
|
128
|
+
rectOfRange(range: MergeRange): import('../core/plugin').Rect | null;
|
|
129
|
+
redraw(): void;
|
|
130
|
+
isCellEditable(row: number, col: number): boolean;
|
|
131
|
+
exportImage(opts?: ImageExportOptions): Promise<Blob>;
|
|
132
|
+
downloadImage(opts?: ImageExportOptions): Promise<void>;
|
|
133
|
+
exportPdf(opts?: PdfExportOptions): Promise<Blob>;
|
|
134
|
+
downloadPdf(opts?: PdfExportOptions): Promise<void>;
|
|
135
|
+
print(opts?: PrintOptions): Promise<void>;
|
|
136
|
+
exportXlsx(opts?: import('../core').XlsxExportOptions): Promise<Blob>;
|
|
137
|
+
downloadXlsx(opts?: import('../core').XlsxExportOptions): Promise<void>;
|
|
138
|
+
exportJson(opts?: import('../core/model/data-access').SheetToJSONOptions): string;
|
|
139
|
+
downloadJson(opts?: import('../core/model/data-access').SheetToJSONOptions): void;
|
|
140
|
+
exportCsv(opts?: {
|
|
141
|
+
target?: number;
|
|
142
|
+
format?: boolean;
|
|
143
|
+
}): string;
|
|
144
|
+
downloadCsv(opts?: {
|
|
145
|
+
target?: number;
|
|
146
|
+
format?: boolean;
|
|
147
|
+
}): void;
|
|
148
|
+
getCellValue(row: number, col: number, sheetIndex?: number): import('../core/model/data-access').CellValue;
|
|
149
|
+
getCellText(row: number, col: number, sheetIndex?: number): string;
|
|
150
|
+
getSheetData(opts?: ReadOptions, sheetIndex?: number): import('../core/model/data-access').CellValue[][];
|
|
151
|
+
getSheetJSON(opts?: import('../core/model/data-access').SheetToJSONOptions, sheetIndex?: number): Record<string, import('../core/model/data-access').CellValue>[];
|
|
152
|
+
getRangeData(range: MergeRange, opts?: ReadOptions, sheetIndex?: number): import('../core/model/data-access').CellValue[][];
|
|
153
|
+
editCell(row: number, col: number, value: import('../core/model/data-access').CellValue): boolean;
|
|
154
|
+
editRange(range: MergeRange, values: import('../core/model/data-access').CellValue[][]): boolean;
|
|
155
|
+
clearRange(range: MergeRange): boolean;
|
|
156
|
+
undo(): void;
|
|
157
|
+
redo(): void;
|
|
158
|
+
canUndo(): boolean;
|
|
159
|
+
canRedo(): boolean;
|
|
160
|
+
getEditingCell(): {
|
|
161
|
+
row: number;
|
|
162
|
+
col: number;
|
|
163
|
+
} | null;
|
|
164
|
+
getCellSnapshot(row: number, col: number): import('../core').CellSnapshot | null;
|
|
165
|
+
beginEdit(row: number, col: number): boolean;
|
|
166
|
+
cancelEdit(): void;
|
|
167
|
+
isEditing(): boolean;
|
|
168
|
+
setStyle(range: MergeRange, patch: import('../core/model/types').CellStyleOverride): boolean;
|
|
169
|
+
getImages(): import('../core/model/types').ImageAnchor[];
|
|
170
|
+
addImage(anchor: import('../core/model/types').ImageAnchor): number;
|
|
171
|
+
removeImage(index: number): boolean;
|
|
172
|
+
moveImage(index: number, dxPx: number, dyPx: number): boolean;
|
|
173
|
+
resizeImage(index: number, widthPx: number, heightPx: number): boolean;
|
|
174
|
+
insertRows(at: number, count?: number): boolean;
|
|
175
|
+
deleteRows(at: number, count?: number): boolean;
|
|
176
|
+
insertCols(at: number, count?: number): boolean;
|
|
177
|
+
deleteCols(at: number, count?: number): boolean;
|
|
178
|
+
setColumnWidth(col: number, width: number): boolean;
|
|
179
|
+
setRowHeight(row: number, height: number): boolean;
|
|
180
|
+
isRecalcReady(): boolean;
|
|
181
|
+
isDirty(): boolean;
|
|
182
|
+
resetToOriginal(): boolean;
|
|
183
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
184
|
+
error: (message: string) => any;
|
|
185
|
+
progress: (progress: ParseProgress) => any;
|
|
186
|
+
"cell-change": (payload: CellChangePayload) => any;
|
|
187
|
+
"edit-start": (payload: unknown) => any;
|
|
188
|
+
"edit-commit": (payload: unknown) => any;
|
|
189
|
+
"dim-change": (payload: DimChangePayload) => any;
|
|
190
|
+
"dirty-change": (payload: DirtyChangePayload) => any;
|
|
191
|
+
"image-change": (payload: ImageChangePayload) => any;
|
|
192
|
+
"struct-change": (payload: StructChangePayload) => any;
|
|
193
|
+
"cell-click": (payload: {
|
|
194
|
+
row: number;
|
|
195
|
+
col: number;
|
|
196
|
+
text: string;
|
|
197
|
+
}) => any;
|
|
198
|
+
"cell-dblclick": (payload: {
|
|
199
|
+
row: number;
|
|
200
|
+
col: number;
|
|
201
|
+
text: string;
|
|
202
|
+
}) => any;
|
|
203
|
+
"selection-change": (payload: {
|
|
204
|
+
range: MergeRange;
|
|
205
|
+
active: {
|
|
206
|
+
row: number;
|
|
207
|
+
col: number;
|
|
208
|
+
};
|
|
209
|
+
}) => any;
|
|
210
|
+
"sheet-change": (payload: {
|
|
211
|
+
index: number;
|
|
212
|
+
name: string;
|
|
213
|
+
}) => any;
|
|
214
|
+
"hyperlink-click": (payload: {
|
|
215
|
+
url: string;
|
|
216
|
+
cell: {
|
|
217
|
+
row: number;
|
|
218
|
+
col: number;
|
|
219
|
+
};
|
|
220
|
+
}) => any;
|
|
221
|
+
rendered: (workbook: WorkbookModel) => any;
|
|
222
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
223
|
+
onError?: ((message: string) => any) | undefined;
|
|
224
|
+
onProgress?: ((progress: ParseProgress) => any) | undefined;
|
|
225
|
+
"onCell-change"?: ((payload: CellChangePayload) => any) | undefined;
|
|
226
|
+
"onEdit-start"?: ((payload: unknown) => any) | undefined;
|
|
227
|
+
"onEdit-commit"?: ((payload: unknown) => any) | undefined;
|
|
228
|
+
"onDim-change"?: ((payload: DimChangePayload) => any) | undefined;
|
|
229
|
+
"onDirty-change"?: ((payload: DirtyChangePayload) => any) | undefined;
|
|
230
|
+
"onImage-change"?: ((payload: ImageChangePayload) => any) | undefined;
|
|
231
|
+
"onStruct-change"?: ((payload: StructChangePayload) => any) | undefined;
|
|
232
|
+
"onCell-click"?: ((payload: {
|
|
233
|
+
row: number;
|
|
234
|
+
col: number;
|
|
235
|
+
text: string;
|
|
236
|
+
}) => any) | undefined;
|
|
237
|
+
"onCell-dblclick"?: ((payload: {
|
|
238
|
+
row: number;
|
|
239
|
+
col: number;
|
|
240
|
+
text: string;
|
|
241
|
+
}) => any) | undefined;
|
|
242
|
+
"onSelection-change"?: ((payload: {
|
|
243
|
+
range: MergeRange;
|
|
244
|
+
active: {
|
|
245
|
+
row: number;
|
|
246
|
+
col: number;
|
|
247
|
+
};
|
|
248
|
+
}) => any) | undefined;
|
|
249
|
+
"onSheet-change"?: ((payload: {
|
|
250
|
+
index: number;
|
|
251
|
+
name: string;
|
|
252
|
+
}) => any) | undefined;
|
|
253
|
+
"onHyperlink-click"?: ((payload: {
|
|
254
|
+
url: string;
|
|
255
|
+
cell: {
|
|
256
|
+
row: number;
|
|
257
|
+
col: number;
|
|
258
|
+
};
|
|
259
|
+
}) => any) | undefined;
|
|
260
|
+
onRendered?: ((workbook: WorkbookModel) => any) | undefined;
|
|
261
|
+
}>, {
|
|
262
|
+
toolbar: boolean | Array<string | ToolbarItem>;
|
|
263
|
+
openLinks: boolean;
|
|
264
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
265
|
+
rootEl: HTMLDivElement;
|
|
266
|
+
renderAreaEl: HTMLDivElement;
|
|
267
|
+
canvasEl: HTMLCanvasElement;
|
|
268
|
+
ovMain: HTMLDivElement;
|
|
269
|
+
ovFCol: HTMLDivElement;
|
|
270
|
+
ovFRow: HTMLDivElement;
|
|
271
|
+
ovCorner: HTMLDivElement;
|
|
272
|
+
scrollerEl: HTMLDivElement;
|
|
273
|
+
spacerEl: HTMLDivElement;
|
|
274
|
+
pluginOvEl: HTMLDivElement;
|
|
275
|
+
editorSlotEl: HTMLDivElement;
|
|
276
|
+
}, HTMLDivElement>;
|
|
277
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
278
|
+
export default _default;
|
|
279
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
280
|
+
new (): {
|
|
281
|
+
$slots: S;
|
|
282
|
+
};
|
|
283
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MergeRange } from '../core/model/types';
|
|
2
|
+
import { ExportConfig } from './export-types';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
selection: MergeRange | null;
|
|
5
|
+
sheetCount: number;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
8
|
+
close: () => any;
|
|
9
|
+
export: (cfg: ExportConfig) => any;
|
|
10
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
11
|
+
onClose?: (() => any) | undefined;
|
|
12
|
+
onExport?: ((cfg: ExportConfig) => any) | undefined;
|
|
13
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
values: string[];
|
|
3
|
+
selected: string[];
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
sortDir?: 'asc' | 'desc' | null;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
9
|
+
sort: (dir: "asc" | "desc") => any;
|
|
10
|
+
close: () => any;
|
|
11
|
+
apply: (checked: string[]) => any;
|
|
12
|
+
clear: () => any;
|
|
13
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
|
+
onSort?: ((dir: "asc" | "desc") => any) | undefined;
|
|
15
|
+
onClose?: (() => any) | undefined;
|
|
16
|
+
onApply?: ((checked: string[]) => any) | undefined;
|
|
17
|
+
onClear?: (() => any) | undefined;
|
|
18
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
19
|
+
rootEl: HTMLDivElement;
|
|
20
|
+
}, HTMLDivElement>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
query: string;
|
|
3
|
+
matchCount: number;
|
|
4
|
+
current: number;
|
|
5
|
+
matchCase: boolean;
|
|
6
|
+
wholeCell: boolean;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
9
|
+
focus: () => void | undefined;
|
|
10
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
11
|
+
close: () => any;
|
|
12
|
+
"update:query": (v: string) => any;
|
|
13
|
+
"update:matchCase": (v: boolean) => any;
|
|
14
|
+
"update:wholeCell": (v: boolean) => any;
|
|
15
|
+
next: () => any;
|
|
16
|
+
prev: () => any;
|
|
17
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
|
+
onClose?: (() => any) | undefined;
|
|
19
|
+
"onUpdate:query"?: ((v: string) => any) | undefined;
|
|
20
|
+
"onUpdate:matchCase"?: ((v: boolean) => any) | undefined;
|
|
21
|
+
"onUpdate:wholeCell"?: ((v: boolean) => any) | undefined;
|
|
22
|
+
onNext?: (() => any) | undefined;
|
|
23
|
+
onPrev?: (() => any) | undefined;
|
|
24
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
25
|
+
inputEl: HTMLInputElement;
|
|
26
|
+
}, HTMLDivElement>;
|
|
27
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WorkbookModel } from '../core/model/types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
workbook: WorkbookModel;
|
|
4
|
+
active: number;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
7
|
+
select: (index: number) => any;
|
|
8
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onSelect?: ((index: number) => any) | undefined;
|
|
10
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ResolvedToolbarItem } from './toolbar-types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
items: ResolvedToolbarItem[];
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
6
|
+
pick: (it: ResolvedToolbarItem) => any;
|
|
7
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onPick?: ((it: ResolvedToolbarItem) => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
fileName?: string;
|
|
3
|
+
sheetCount: number;
|
|
4
|
+
zoom: number;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
7
|
+
"update:zoom": (value: number) => any;
|
|
8
|
+
"export-image": () => any;
|
|
9
|
+
"export-pdf": () => any;
|
|
10
|
+
"export-pdf-vector": () => any;
|
|
11
|
+
print: () => any;
|
|
12
|
+
"open-settings": () => any;
|
|
13
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
|
+
"onUpdate:zoom"?: ((value: number) => any) | undefined;
|
|
15
|
+
"onExport-image"?: (() => any) | undefined;
|
|
16
|
+
"onExport-pdf"?: (() => any) | undefined;
|
|
17
|
+
"onExport-pdf-vector"?: (() => any) | undefined;
|
|
18
|
+
onPrint?: (() => any) | undefined;
|
|
19
|
+
"onOpen-settings"?: (() => any) | undefined;
|
|
20
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** ExportDialog 表单配置(组件间共享;不能在 <script setup> 里 export 类型) */
|
|
2
|
+
export interface ExportConfig {
|
|
3
|
+
action: 'png' | 'pdf' | 'print';
|
|
4
|
+
scope: 'selection' | 'sheet' | 'all';
|
|
5
|
+
scale: number;
|
|
6
|
+
includeHeaders: boolean;
|
|
7
|
+
gridlines: boolean;
|
|
8
|
+
/** 'auto' = 不覆盖,沿用工作表 pageSetup */
|
|
9
|
+
format: 'auto' | 'a4' | 'a3' | 'letter';
|
|
10
|
+
orientation: 'auto' | 'portrait' | 'landscape';
|
|
11
|
+
fitToWidth: boolean;
|
|
12
|
+
/** PDF 类型: true=矢量(文字可选可搜),false=位图 */
|
|
13
|
+
pdfVector: boolean;
|
|
14
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 极简线性图标(24×24 viewBox,stroke=currentColor)。内置工具栏项按名引用,跨平台一致。
|
|
3
|
+
* 值为 <svg> 内部标记;渲染见 ActionToolbar。
|
|
4
|
+
*/
|
|
5
|
+
export declare const TOOLBAR_ICONS: Record<string, string>;
|
|
6
|
+
/** 把图标内部标记包成完整 <svg>(16×16,stroke=currentColor) */
|
|
7
|
+
export declare function svgWrap(inner: string): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** 操作栏解析后的按钮(ExcelViewer 算好 handler/active/disabled,ActionToolbar 只管渲染) */
|
|
2
|
+
export interface ResolvedToolbarItem {
|
|
3
|
+
id: string;
|
|
4
|
+
/** 'button'(默认) | 'separator' */
|
|
5
|
+
type?: 'button' | 'separator';
|
|
6
|
+
/** 内联 SVG 内部标记(优先);否则用 icon 文本/emoji */
|
|
7
|
+
iconSvg?: string;
|
|
8
|
+
icon?: string;
|
|
9
|
+
label?: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
active?: boolean;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
onClick?: () => void;
|
|
14
|
+
/** 下拉子菜单(已解析) */
|
|
15
|
+
items?: ResolvedToolbarItem[];
|
|
16
|
+
/** 来源: 内置 / 组件配置自定义 / 插件 —— 用于分组分隔线 */
|
|
17
|
+
kind: 'builtin' | 'custom' | 'plugin';
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TransformModelFn, WorkbookModel } from '../core/model/types';
|
|
2
|
+
import { ParseProgress } from '../core/progress';
|
|
3
|
+
import { ExcelSource } from '../core/loader';
|
|
4
|
+
export declare function useExcelDocument(): {
|
|
5
|
+
loading: import('vue').Ref<boolean, boolean>;
|
|
6
|
+
error: import('vue').Ref<string | null, string | null>;
|
|
7
|
+
workbook: import('vue').ShallowRef<WorkbookModel | null, WorkbookModel | null>;
|
|
8
|
+
load: (src: ExcelSource, transform?: TransformModelFn) => Promise<void>;
|
|
9
|
+
progress: import('vue').Ref<{
|
|
10
|
+
stage: "read" | "parse" | "build";
|
|
11
|
+
ratio?: number | undefined;
|
|
12
|
+
} | null, ParseProgress | {
|
|
13
|
+
stage: "read" | "parse" | "build";
|
|
14
|
+
ratio?: number | undefined;
|
|
15
|
+
} | null>;
|
|
16
|
+
sourceBuffer: import('vue').ShallowRef<ArrayBuffer | null, ArrayBuffer | null>;
|
|
17
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { CellModel, CellStyleOverride, ColumnInfo, ImageAnchor, RowInfo, SheetModel, WorkbookModel } from '../model/types';
|
|
2
|
+
import { CellValue } from '../model/data-access';
|
|
3
|
+
import { StructOp } from '../model/structure';
|
|
4
|
+
export type CellPos = {
|
|
5
|
+
row: number;
|
|
6
|
+
col: number;
|
|
7
|
+
};
|
|
8
|
+
export type DimAxis = 'col' | 'row';
|
|
9
|
+
export type EditCommand = {
|
|
10
|
+
kind: 'set-value';
|
|
11
|
+
row: number;
|
|
12
|
+
col: number;
|
|
13
|
+
value: CellValue;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'set-cells';
|
|
16
|
+
cells: {
|
|
17
|
+
row: number;
|
|
18
|
+
col: number;
|
|
19
|
+
value: CellValue;
|
|
20
|
+
}[];
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'restore-cells';
|
|
23
|
+
cells: {
|
|
24
|
+
row: number;
|
|
25
|
+
col: number;
|
|
26
|
+
cell: CellModel | null;
|
|
27
|
+
}[];
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'set-dim';
|
|
30
|
+
axis: DimAxis;
|
|
31
|
+
index: number;
|
|
32
|
+
size: number;
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'restore-dim';
|
|
35
|
+
axis: DimAxis;
|
|
36
|
+
index: number;
|
|
37
|
+
info: ColumnInfo | RowInfo | null;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'set-style';
|
|
40
|
+
cells: CellPos[];
|
|
41
|
+
patch: CellStyleOverride;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'image-set';
|
|
44
|
+
index: number;
|
|
45
|
+
anchor: ImageAnchor;
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'image-add';
|
|
48
|
+
anchor: ImageAnchor;
|
|
49
|
+
index?: number;
|
|
50
|
+
} | {
|
|
51
|
+
kind: 'image-remove';
|
|
52
|
+
index: number;
|
|
53
|
+
} | {
|
|
54
|
+
kind: 'struct-edit';
|
|
55
|
+
op: StructOp;
|
|
56
|
+
at: number;
|
|
57
|
+
count: number;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'restore-wb';
|
|
60
|
+
snapshot: WorkbookModel;
|
|
61
|
+
};
|
|
62
|
+
/** dim 命令(列宽/行高)— 仅维度族,无格位置 */
|
|
63
|
+
export type DimCommand = Extract<EditCommand, {
|
|
64
|
+
kind: 'set-dim';
|
|
65
|
+
} | {
|
|
66
|
+
kind: 'restore-dim';
|
|
67
|
+
}>;
|
|
68
|
+
export declare function isDimCommand(cmd: EditCommand): cmd is DimCommand;
|
|
69
|
+
/** image 命令(浮动/嵌入图片增删移改)— 无格位置,发 image-change */
|
|
70
|
+
export type ImageCommand = Extract<EditCommand, {
|
|
71
|
+
kind: 'image-set';
|
|
72
|
+
} | {
|
|
73
|
+
kind: 'image-add';
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'image-remove';
|
|
76
|
+
}>;
|
|
77
|
+
export declare function isImageCommand(cmd: EditCommand): cmd is ImageCommand;
|
|
78
|
+
/** struct 命令(增删行列)— 无格位置,发 struct-change,整簿快照逆(支持跨表公式重写撤销) */
|
|
79
|
+
export type StructCommand = Extract<EditCommand, {
|
|
80
|
+
kind: 'struct-edit';
|
|
81
|
+
} | {
|
|
82
|
+
kind: 'restore-wb';
|
|
83
|
+
}>;
|
|
84
|
+
export declare function isStructCommand(cmd: EditCommand): cmd is StructCommand;
|
|
85
|
+
export interface ApplyResult {
|
|
86
|
+
/** 该命令的逆命令(undo 时执行,自身又产出 redo 逆命令) */
|
|
87
|
+
inverse: EditCommand;
|
|
88
|
+
/** 受影响的格位置(用于发前后快照事件) */
|
|
89
|
+
affected: CellPos[];
|
|
90
|
+
}
|
|
91
|
+
/** 命令影响到的格位置(dim 命令无格位置 → 返 []) */
|
|
92
|
+
export declare function affectedOf(cmd: EditCommand): CellPos[];
|
|
93
|
+
/** 应用命令并返回逆命令 + 受影响格。 */
|
|
94
|
+
export declare function applyCommand(sheet: SheetModel, cmd: EditCommand): ApplyResult;
|