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.
Files changed (96) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/LICENSE +21 -0
  3. package/README.md +516 -0
  4. package/dist/chunks/plugin-overlay-Cfnn9EOi.js +7144 -0
  5. package/dist/chunks/worker-client.stub-BQVZfaLd.js +7 -0
  6. package/dist/components/ActionToolbar.vue.d.ts +9 -0
  7. package/dist/components/ExcelViewer.vue.d.ts +283 -0
  8. package/dist/components/ExportDialog.vue.d.ts +14 -0
  9. package/dist/components/FilterPopup.vue.d.ts +21 -0
  10. package/dist/components/FindBar.vue.d.ts +27 -0
  11. package/dist/components/SheetTabs.vue.d.ts +11 -0
  12. package/dist/components/ToolbarMenu.vue.d.ts +10 -0
  13. package/dist/components/ViewerToolbar.vue.d.ts +21 -0
  14. package/dist/components/export-types.d.ts +14 -0
  15. package/dist/components/toolbar-icons.d.ts +7 -0
  16. package/dist/components/toolbar-types.d.ts +18 -0
  17. package/dist/composables/useExcelDocument.d.ts +17 -0
  18. package/dist/composables/worker-client.d.ts +3 -0
  19. package/dist/composables/worker-client.stub.d.ts +3 -0
  20. package/dist/core/edit/commands.d.ts +94 -0
  21. package/dist/core/edit/default-editor.d.ts +2 -0
  22. package/dist/core/edit/edit-controller.d.ts +137 -0
  23. package/dist/core/edit/editor-context.d.ts +40 -0
  24. package/dist/core/edit/editor-host.d.ts +22 -0
  25. package/dist/core/edit/permissions.d.ts +3 -0
  26. package/dist/core/edit/types.d.ts +23 -0
  27. package/dist/core/export/composite.d.ts +18 -0
  28. package/dist/core/export/data-export.d.ts +9 -0
  29. package/dist/core/export/exporter.d.ts +64 -0
  30. package/dist/core/export/index.d.ts +9 -0
  31. package/dist/core/export/paginate.d.ts +36 -0
  32. package/dist/core/export/pdf.d.ts +28 -0
  33. package/dist/core/export/print.d.ts +3 -0
  34. package/dist/core/export/raster.d.ts +13 -0
  35. package/dist/core/export/types.d.ts +92 -0
  36. package/dist/core/export/vector-pdf.d.ts +42 -0
  37. package/dist/core/export/xlsx-writer.d.ts +15 -0
  38. package/dist/core/finalize.d.ts +10 -0
  39. package/dist/core/format/builtin-formats.d.ts +7 -0
  40. package/dist/core/format/color.d.ts +11 -0
  41. package/dist/core/format/date-serial.d.ts +16 -0
  42. package/dist/core/format/number-format.d.ts +5 -0
  43. package/dist/core/formula/engine.d.ts +27 -0
  44. package/dist/core/formula/hyperformula-adapter.d.ts +3 -0
  45. package/dist/core/formula/recalc.d.ts +9 -0
  46. package/dist/core/formula/refs.d.ts +21 -0
  47. package/dist/core/index.d.ts +52 -0
  48. package/dist/core/layout/autofit.d.ts +2 -0
  49. package/dist/core/layout/freeze.d.ts +11 -0
  50. package/dist/core/layout/grid-metrics.d.ts +37 -0
  51. package/dist/core/layout/merges.d.ts +14 -0
  52. package/dist/core/layout/units.d.ts +20 -0
  53. package/dist/core/layout/viewport.d.ts +29 -0
  54. package/dist/core/loader.d.ts +5 -0
  55. package/dist/core/model/clone.d.ts +9 -0
  56. package/dist/core/model/data-access.d.ts +30 -0
  57. package/dist/core/model/mutations.d.ts +46 -0
  58. package/dist/core/model/snapshot.d.ts +14 -0
  59. package/dist/core/model/structure.d.ts +26 -0
  60. package/dist/core/model/types.d.ts +289 -0
  61. package/dist/core/overlay/anchor.d.ts +9 -0
  62. package/dist/core/overlay/chart-mapper.d.ts +3 -0
  63. package/dist/core/overlay/echarts-loader.d.ts +3 -0
  64. package/dist/core/parse.worker.d.ts +14 -0
  65. package/dist/core/parser/chart-parser.d.ts +3 -0
  66. package/dist/core/parser/drawing-parser.d.ts +3 -0
  67. package/dist/core/parser/exceljs-adapter.d.ts +8 -0
  68. package/dist/core/parser/index.d.ts +3 -0
  69. package/dist/core/parser/page-break-parser.d.ts +3 -0
  70. package/dist/core/parser/raw-xml.d.ts +15 -0
  71. package/dist/core/parser/sparkline-parser.d.ts +3 -0
  72. package/dist/core/parser/theme.d.ts +3 -0
  73. package/dist/core/plugin.d.ts +180 -0
  74. package/dist/core/progress.d.ts +7 -0
  75. package/dist/core/render/autofilter.d.ts +14 -0
  76. package/dist/core/render/borders.d.ts +13 -0
  77. package/dist/core/render/canvas-renderer.d.ts +225 -0
  78. package/dist/core/render/conditional.d.ts +25 -0
  79. package/dist/core/render/fills.d.ts +2 -0
  80. package/dist/core/render/text.d.ts +20 -0
  81. package/dist/core/render/theme.d.ts +19 -0
  82. package/dist/core/viewer/controller.d.ts +339 -0
  83. package/dist/core/viewer/overlay-manager.d.ts +27 -0
  84. package/dist/core/viewer/plugin-overlay.d.ts +8 -0
  85. package/dist/core.d.ts +2 -0
  86. package/dist/core.js +74 -0
  87. package/dist/demo-shared/demo-editor.d.ts +2 -0
  88. package/dist/index.d.ts +19 -0
  89. package/dist/index.js +1493 -0
  90. package/dist/react/ExcelViewer.d.ts +153 -0
  91. package/dist/react/index.d.ts +11 -0
  92. package/dist/react/use-excel-document.d.ts +17 -0
  93. package/dist/react.d.ts +2 -0
  94. package/dist/react.js +838 -0
  95. package/dist/style.css +1 -0
  96. package/package.json +117 -0
@@ -0,0 +1,7 @@
1
+ import { p } from "./plugin-overlay-Cfnn9EOi.js";
2
+ function a(r, o) {
3
+ return p(r, o);
4
+ }
5
+ export {
6
+ a as p
7
+ };
@@ -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,3 @@
1
+ import { WorkbookModel } from '../core/model/types';
2
+ import { ProgressFn } from '../core/progress';
3
+ export declare function parseInWorker(buffer: ArrayBuffer, onProgress?: ProgressFn): Promise<WorkbookModel>;
@@ -0,0 +1,3 @@
1
+ import { WorkbookModel } from '../core/model/types';
2
+ import { ProgressFn } from '../core/progress';
3
+ export declare function parseInWorker(buffer: ArrayBuffer, onProgress?: ProgressFn): Promise<WorkbookModel>;
@@ -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;
@@ -0,0 +1,2 @@
1
+ import { CellEditorFactory } from './editor-context';
2
+ export declare const defaultCellEditor: CellEditorFactory;